diff --git a/css/app.1e21cfb6.css b/css/app.1e21cfb6.css deleted file mode 100644 index 364e1c5c..00000000 --- a/css/app.1e21cfb6.css +++ /dev/null @@ -1 +0,0 @@ -.hotkey-doc[data-v-47d0351b]{height:100%;overflow:auto;font-size:12px}.title[data-v-47d0351b]{font-size:14px;font-weight:700;border-bottom:1px solid #e5e5e5;padding:15px 0 5px 0}.hotkey-item[data-v-47d0351b]{border-bottom:1px solid #e5e5e5;padding:15px 0 5px 0;display:flex;align-items:center}.label[data-v-47d0351b]{width:140px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.editor-header[data-v-13ca7328]{background-color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom:1px solid #eee;display:flex;justify-content:space-between;padding:0 10px}.left[data-v-13ca7328],.menu-item[data-v-13ca7328],.right[data-v-13ca7328]{display:flex;justify-content:center;align-items:center}.menu-item[data-v-13ca7328]{height:100%;font-size:14px;padding:0 10px;transition:background-color .2s;cursor:pointer}.menu-item .text[data-v-13ca7328]{margin-left:4px}.left .menu-item[data-v-13ca7328]:hover{background-color:#f9f9f9}svg[data-v-8d85e878],svg[data-v-4126ab7f],svg[data-v-6655f0f0]{overflow:visible;position:absolute;z-index:2;top:0;left:0}.image-clip-handler[data-v-9e358576]{width:100%;height:100%;position:relative}.image-clip-handler .bottom-img[data-v-9e358576]{top:0;left:0;width:100%;height:100%;opacity:.5}.image-clip-handler img[data-v-9e358576]{width:100%;height:100%}.image-clip-handler .top-image-content[data-v-9e358576]{position:absolute;overflow:hidden}.image-clip-handler .top-image-content img[data-v-9e358576]{position:absolute}.operate[data-v-9e358576]{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.clip-point[data-v-9e358576]{position:absolute;width:16px;height:16px}.clip-point svg[data-v-9e358576]{overflow:visible}.clip-point.t-l[data-v-9e358576]{left:0;top:0;cursor:nwse-resize}.clip-point.t-r[data-v-9e358576]{left:100%;top:0;transform:rotate(90deg);transform-origin:0 0;cursor:nesw-resize}.clip-point.b-l[data-v-9e358576]{left:0;top:100%;transform:rotate(-90deg);transform-origin:0 0;cursor:nesw-resize}.clip-point.b-r[data-v-9e358576]{left:100%;top:100%;transform:rotate(180deg);transform-origin:0 0;cursor:nwse-resize}.clip-point.t[data-v-9e358576]{cursor:n-resize;left:50%;top:0;margin-left:-8px}.clip-point.b[data-v-9e358576]{cursor:n-resize;left:50%;bottom:0;margin-left:-8px;transform:rotate(180deg)}.clip-point.l[data-v-9e358576]{cursor:w-resize;left:0;top:50%;margin-top:-8px;transform:rotate(-90deg)}.clip-point.r[data-v-9e358576]{cursor:w-resize;right:0;top:50%;margin-top:-8px;transform:rotate(90deg)}.editable-element-image[data-v-03ead815]{position:absolute}.editable-element-image.lock .element-content[data-v-03ead815]{cursor:default}.rotate-wrapper[data-v-03ead815]{width:100%;height:100%}.element-content[data-v-03ead815]{width:100%;height:100%;position:relative;cursor:move}.element-content .image-content[data-v-03ead815]{width:100%;height:100%;overflow:hidden;position:relative}.element-content img[data-v-03ead815]{position:absolute}svg[data-v-2ddaa919]{overflow:visible;position:absolute;top:0;left:0}.prosemirror-editor[data-v-3100bb88]{cursor:text}.editable-element-text[data-v-3c0937ee]{position:absolute}.editable-element-text.lock .element-content[data-v-3c0937ee]{cursor:default}.rotate-wrapper[data-v-3c0937ee]{width:100%;height:100%}.element-content[data-v-3c0937ee]{position:relative;padding:10px;line-height:1.5;word-break:break-word;cursor:move}.element-content .text[data-v-3c0937ee]{position:relative}.editable-element-shape[data-v-5a268d2a]{position:absolute}.editable-element-shape.lock .element-content[data-v-5a268d2a]{cursor:default}.rotate-wrapper[data-v-5a268d2a]{width:100%;height:100%}.element-content[data-v-5a268d2a]{width:100%;height:100%;position:relative;cursor:move}.element-content svg[data-v-5a268d2a]{transform-origin:0 0;overflow:visible}.shape-text[data-v-5a268d2a]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;padding:10px;line-height:1.2;word-break:break-word}.shape-text.top[data-v-5a268d2a]{justify-content:flex-start}.shape-text.middle[data-v-5a268d2a]{justify-content:center}.shape-text.bottom[data-v-5a268d2a]{justify-content:flex-end}.show-text[data-v-5a268d2a]{pointer-events:none}.editable-element-shape[data-v-1d4bfa98]{position:absolute}.editable-element-shape.lock .line-path[data-v-1d4bfa98]{cursor:default}.element-content[data-v-1d4bfa98]{width:100%;height:100%;position:relative}.element-content svg[data-v-1d4bfa98]{transform-origin:0 0;overflow:visible}.line-path[data-v-1d4bfa98]{cursor:move}.chart-content[data-v-1f297efe]{transform-origin:0 0}.chart-content{--theme-color-1:#666;--theme-color-2:#666;--theme-color-3:#666;--theme-color-4:#666;--theme-color-5:#666;--theme-color-6:#666;--theme-color-7:#666;--theme-color-8:#666;--theme-color-9:#666;--theme-color-10:#666;--grid-color:rgba(0,0,0,0.4)}.chart-content .ct-series-a .ct-line,.chart-content .ct-series-a .ct-point{stroke:var(--theme-color-1)}.chart-content .ct-series-a .ct-area{fill:var(--theme-color-1)}.chart-content .ct-series-a .ct-bar{stroke:var(--theme-color-1)}.chart-content .ct-series-a .ct-slice-pie{fill:var(--theme-color-1)}.chart-content .ct-series-a .ct-slice-donut{stroke:var(--theme-color-1)}.chart-content .ct-series-b .ct-line,.chart-content .ct-series-b .ct-point{stroke:var(--theme-color-2)}.chart-content .ct-series-b .ct-area{fill:var(--theme-color-2)}.chart-content .ct-series-b .ct-bar{stroke:var(--theme-color-2)}.chart-content .ct-series-b .ct-slice-pie{fill:var(--theme-color-2)}.chart-content .ct-series-b .ct-slice-donut{stroke:var(--theme-color-2)}.chart-content .ct-series-c .ct-line,.chart-content .ct-series-c .ct-point{stroke:var(--theme-color-3)}.chart-content .ct-series-c .ct-area{fill:var(--theme-color-3)}.chart-content .ct-series-c .ct-bar{stroke:var(--theme-color-3)}.chart-content .ct-series-c .ct-slice-pie{fill:var(--theme-color-3)}.chart-content .ct-series-c .ct-slice-donut{stroke:var(--theme-color-3)}.chart-content .ct-series-d .ct-line,.chart-content .ct-series-d .ct-point{stroke:var(--theme-color-4)}.chart-content .ct-series-d .ct-area{fill:var(--theme-color-4)}.chart-content .ct-series-d .ct-bar{stroke:var(--theme-color-4)}.chart-content .ct-series-d .ct-slice-pie{fill:var(--theme-color-4)}.chart-content .ct-series-d .ct-slice-donut{stroke:var(--theme-color-4)}.chart-content .ct-series-e .ct-line,.chart-content .ct-series-e .ct-point{stroke:var(--theme-color-5)}.chart-content .ct-series-e .ct-area{fill:var(--theme-color-5)}.chart-content .ct-series-e .ct-bar{stroke:var(--theme-color-5)}.chart-content .ct-series-e .ct-slice-pie{fill:var(--theme-color-5)}.chart-content .ct-series-e .ct-slice-donut{stroke:var(--theme-color-5)}.chart-content .ct-series-f .ct-line,.chart-content .ct-series-f .ct-point{stroke:var(--theme-color-6)}.chart-content .ct-series-f .ct-area{fill:var(--theme-color-6)}.chart-content .ct-series-f .ct-bar{stroke:var(--theme-color-6)}.chart-content .ct-series-f .ct-slice-pie{fill:var(--theme-color-6)}.chart-content .ct-series-f .ct-slice-donut{stroke:var(--theme-color-6)}.chart-content .ct-series-g .ct-line,.chart-content .ct-series-g .ct-point{stroke:var(--theme-color-7)}.chart-content .ct-series-g .ct-area{fill:var(--theme-color-7)}.chart-content .ct-series-g .ct-bar{stroke:var(--theme-color-7)}.chart-content .ct-series-g .ct-slice-pie{fill:var(--theme-color-7)}.chart-content .ct-series-g .ct-slice-donut{stroke:var(--theme-color-7)}.chart-content .ct-series-h .ct-line,.chart-content .ct-series-h .ct-point{stroke:var(--theme-color-8)}.chart-content .ct-series-h .ct-area{fill:var(--theme-color-8)}.chart-content .ct-series-h .ct-bar{stroke:var(--theme-color-8)}.chart-content .ct-series-h .ct-slice-pie{fill:var(--theme-color-8)}.chart-content .ct-series-h .ct-slice-donut{stroke:var(--theme-color-8)}.chart-content .ct-series-i .ct-line,.chart-content .ct-series-i .ct-point{stroke:var(--theme-color-9)}.chart-content .ct-series-i .ct-area{fill:var(--theme-color-9)}.chart-content .ct-series-i .ct-bar{stroke:var(--theme-color-9)}.chart-content .ct-series-i .ct-slice-pie{fill:var(--theme-color-9)}.chart-content .ct-series-i .ct-slice-donut{stroke:var(--theme-color-9)}.chart-content .ct-grid{stroke:var(--grid-color)}.chart-content .ct-label{fill:var(--grid-color);color:var(--grid-color)}.editable-element-chart[data-v-30f6d5ed]{position:absolute}.editable-element-chart.lock .element-content[data-v-30f6d5ed]{cursor:default}.element-content[data-v-30f6d5ed]{width:100%;height:100%;overflow:hidden;cursor:move}.custom-textarea[data-v-59f468e0]{border:0;outline:0}.editable-table[data-v-5cfa4d0e],table[data-v-5cfa4d0e]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-5cfa4d0e]{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;border:0;word-wrap:break-word;--themeColor:$themeColor;--subThemeColor1:$themeColor;--subThemeColor2:$themeColor}table.theme tr:nth-child(2n) .cell[data-v-5cfa4d0e]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-5cfa4d0e]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-5cfa4d0e]:last-child,table.theme.col-header tr .cell[data-v-5cfa4d0e]:first-child,table.theme.row-footer tr:last-child .cell[data-v-5cfa4d0e],table.theme.row-header tr:first-child .cell[data-v-5cfa4d0e]{background-color:var(--themeColor)}table tr[data-v-5cfa4d0e]{height:36px}table .cell[data-v-5cfa4d0e]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle;font-size:14px;cursor:default}table .cell.selected[data-v-5cfa4d0e]:after{content:"";width:100%;height:100%;position:absolute;top:0;left:0;background-color:hsla(0,0%,40%,.4)}table .cell-text[data-v-5cfa4d0e]{min-height:32px;padding:5px;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:text}table .cell-text.active[data-v-5cfa4d0e]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.drag-line[data-v-5cfa4d0e]{position:absolute;top:0;bottom:0;width:3px;background-color:#d14424;margin-left:-1px;opacity:0;z-index:2;cursor:col-resize}.drag-line[data-v-5cfa4d0e]:hover{opacity:1}.editable-element-table[data-v-10d814ca]{position:absolute}.editable-element-table.lock .element-content[data-v-10d814ca]{cursor:default}.element-content[data-v-10d814ca]{width:100%;height:100%;position:relative;cursor:move}.table-mask[data-v-10d814ca]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .2s}.table-mask .mask-tip[data-v-10d814ca]{position:absolute;top:5px;left:5px;background-color:rgba(0,0,0,.5);color:#fff;padding:6px 12px;font-size:12px;transform-origin:0 0}.table-mask[data-v-10d814ca]:hover:not(.lock){opacity:.9}.mouse-selection[data-v-1619c258]{position:absolute;background-color:rgba(209,68,36,.1);border:1px solid #d14424;z-index:200}.mouse-selection.quadrant-1[data-v-1619c258]{transform-origin:0 0;transform:rotate(180deg)}.mouse-selection.quadrant-2[data-v-1619c258]{transform-origin:50% 0;transform:rotate(180deg)}.mouse-selection.quadrant-3[data-v-1619c258]{transform-origin:0 50%;transform:rotate(180deg)}.mouse-selection.quadrant-4[data-v-1619c258]{transform-origin:0 0;transform:rotate(0deg)}.grid-lines[data-v-1d945f13]{width:100%;height:100%;overflow:visible;z-index:999;pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.viewport-background[data-v-a9ca1b50]{width:100%;height:100%;background-position:50%;position:absolute}.alignment-line[data-v-2d3eddf5]{position:absolute;z-index:100}.alignment-line .line[data-v-2d3eddf5]{width:0;height:0;border:0 dashed #d14424}.alignment-line .line.vertical[data-v-2d3eddf5]{transform:translateY(-.5px);border-left-width:1px}.alignment-line .line.horizontal[data-v-2d3eddf5]{transform:translateX(-.5px);border-top-width:1px}.element-create-selection[data-v-04472140]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;cursor:crosshair}.selection[data-v-04472140]{position:absolute;opacity:.8}.selection[data-v-04472140]:not(.line){border:1px solid #d14424}.resize-handler[data-v-680e5917]{position:absolute;width:10px;height:10px;left:0;top:0;margin:-5px 0 0 -5px;border:1px solid #d14424;background-color:#fff;border-radius:1px}.resize-handler.bottom.rotate-135[data-v-680e5917],.resize-handler.left-bottom.rotate-90[data-v-680e5917],.resize-handler.left-top.rotate-0[data-v-680e5917],.resize-handler.left.rotate-45[data-v-680e5917],.resize-handler.right-bottom.rotate-0[data-v-680e5917],.resize-handler.right-top.rotate-90[data-v-680e5917],.resize-handler.right.rotate-45[data-v-680e5917],.resize-handler.top.rotate-135[data-v-680e5917]{cursor:nwse-resize}.resize-handler.bottom.rotate-0[data-v-680e5917],.resize-handler.left-bottom.rotate-135[data-v-680e5917],.resize-handler.left-top.rotate-45[data-v-680e5917],.resize-handler.left.rotate-90[data-v-680e5917],.resize-handler.right-bottom.rotate-45[data-v-680e5917],.resize-handler.right-top.rotate-135[data-v-680e5917],.resize-handler.right.rotate-90[data-v-680e5917],.resize-handler.top.rotate-0[data-v-680e5917]{cursor:ns-resize}.resize-handler.bottom.rotate-45[data-v-680e5917],.resize-handler.left-bottom.rotate-0[data-v-680e5917],.resize-handler.left-top.rotate-90[data-v-680e5917],.resize-handler.left.rotate-135[data-v-680e5917],.resize-handler.right-bottom.rotate-90[data-v-680e5917],.resize-handler.right-top.rotate-0[data-v-680e5917],.resize-handler.right.rotate-135[data-v-680e5917],.resize-handler.top.rotate-45[data-v-680e5917]{cursor:nesw-resize}.resize-handler.bottom.rotate-90[data-v-680e5917],.resize-handler.left-bottom.rotate-45[data-v-680e5917],.resize-handler.left-top.rotate-135[data-v-680e5917],.resize-handler.left.rotate-0[data-v-680e5917],.resize-handler.right-bottom.rotate-135[data-v-680e5917],.resize-handler.right-top.rotate-45[data-v-680e5917],.resize-handler.right.rotate-0[data-v-680e5917],.resize-handler.top.rotate-90[data-v-680e5917]{cursor:ew-resize}.border-line[data-v-630e246b]{position:absolute;width:0;height:0;left:0;top:0;border:0 dashed #d14424}.border-line.top[data-v-630e246b]{border-top-width:1px}.border-line.bottom[data-v-630e246b]{border-bottom-width:1px}.border-line.left[data-v-630e246b]{border-left-width:1px}.border-line.right[data-v-630e246b]{border-right-width:1px}.border-line.wide[data-v-630e246b]:before{content:"";position:absolute;background:transparent;cursor:move}.border-line.wide.top[data-v-630e246b]:before{top:-8px;left:-8px;width:calc(100% + 16px);height:16px}.border-line.wide.bottom[data-v-630e246b]:before{bottom:-8px;left:-8px;width:calc(100% + 16px);height:16px}.border-line.wide.left[data-v-630e246b]:before{top:-8px;left:-8px;width:16px;height:calc(100% + 16px)}.border-line.wide.right[data-v-630e246b]:before{top:-8px;right:-8px;width:16px;height:calc(100% + 16px)}.multi-select-operate[data-v-4def6455]{position:absolute;top:0;left:0;z-index:101}.rotate-handler[data-v-9a549510]{position:absolute;width:10px;height:10px;top:-25px;margin-left:-5px;border:1px solid #d14424;background-color:#fff;border-radius:1px;cursor:-webkit-grab;cursor:grab}.rotate-handler[data-v-9a549510]:active{cursor:-webkit-grabbing;cursor:grabbing}.image-element-operate.cliping[data-v-7dc35c8e]{visibility:hidden}.link-handler[data-v-9d9e1336]{height:30px;position:absolute;left:0;font-size:12px;padding:0 10px;background-color:#fff;box-shadow:3px 3px 3px rgba(0,0,0,.15);display:flex;align-items:center;color:#d14424}.link[data-v-9d9e1336]{max-width:300px;margin-right:20px;word-break:keep-all;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.btns[data-v-9d9e1336]{display:flex;align-items:center}.btns .btn[data-v-9d9e1336]{word-break:keep-all;cursor:pointer}.operate[data-v-46d959c4]{position:absolute;z-index:100;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.operate.multi-select[data-v-46d959c4]{opacity:0}.animation-index[data-v-46d959c4]{position:absolute;top:0;left:-24px;font-size:12px;width:18px;height:18px;background-color:#fff;color:#d14424;border:1px solid #d14424;display:flex;justify-content:center;align-items:center}.link-dialog[data-v-02317299]{padding:25px 10px 10px 10px}.btns[data-v-02317299]{margin-top:10px;text-align:right}.canvas[data-v-4edd93c1]{height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;background-color:#f9f9f9;position:relative}.viewport-wrapper[data-v-4edd93c1]{position:absolute;box-shadow:0 0 15px 0 rgba(0,0,0,.1)}.viewport[data-v-4edd93c1]{position:absolute;top:0;left:0;transform-origin:0 0}.shape-pool[data-v-612b80ef]{width:340px;max-height:540px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-612b80ef]{width:100%;font-size:13px;margin-bottom:10px;border-left:4px solid #aaa;background-color:#eee;padding:2px 0 2px 10px}.shape-list[data-v-612b80ef]{display:flex;flex-wrap:wrap;align-content:flex-start;margin-bottom:10px}.shape-item[data-v-612b80ef]{width:8%;margin-bottom:2.22222%;height:0;padding-bottom:8%;flex-shrink:0;position:relative;cursor:pointer}.shape-item[data-v-612b80ef]:not(:nth-child(10n)){margin-right:2.22222%}.shape-content[data-v-612b80ef]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center}.shape-content:hover .shape-path[data-v-612b80ef]{stroke:#d14424}.shape-content svg[data-v-612b80ef]:not(:root){overflow:visible}.line-pool[data-v-6302e570]{width:220px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-6302e570]{width:100%;font-size:13px;margin-bottom:10px;border-left:4px solid #aaa;background-color:#eee;padding:2px 0 2px 10px}.line-list[data-v-6302e570]{display:flex;flex-wrap:wrap;align-content:flex-start;margin-bottom:10px}.line-item[data-v-6302e570]{width:19%;margin-bottom:1.25%;height:0;padding-bottom:19%;flex-shrink:0;position:relative;cursor:pointer}.line-item[data-v-6302e570]:not(:nth-child(5n)){margin-right:1.25%}.line-content[data-v-6302e570]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;color:#999}.line-content[data-v-6302e570]:hover{color:#d14424}.line-content svg[data-v-6302e570]:not(:root){overflow:visible}.chart-pool[data-v-ab6a141a]{width:120px;margin-bottom:-5px;display:flex;flex-wrap:wrap;align-content:flex-start}.chart-item[data-v-ab6a141a]{width:32%;margin-bottom:2%;height:0;padding-bottom:32%;flex-shrink:0;position:relative;cursor:pointer}.chart-item[data-v-ab6a141a]:not(:nth-child(3n)){margin-right:2%}.chart-content[data-v-ab6a141a]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;color:#999}.chart-content[data-v-ab6a141a]:hover{color:#d14424}.table-generator[data-v-e325ce98]{width:100%;margin-top:-12px}.title[data-v-e325ce98]{height:28px;line-height:28px;background-color:#ededed;margin:0 -12px 12px -12px;padding:0 14px;font-size:12px;display:flex;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.title .right[data-v-e325ce98]{cursor:pointer}.title .right[data-v-e325ce98]:hover{color:#d14424}table[data-v-e325ce98]{border-collapse:separate}td[data-v-e325ce98]{width:23px;height:23px;line-height:23px;border:2px solid #fff;background-color:#f7f7f7}.cell[data-v-e325ce98]{width:100%;height:100%;border:1px solid #dcdcdc}.cell.active[data-v-e325ce98]{background-color:rgba(209,68,36,.1);border-color:#d14424}.custom[data-v-e325ce98]{width:230px}.custom .row[data-v-e325ce98]{display:flex;align-items:center}.custom .row+.row[data-v-e325ce98]{margin-top:10px}.btns[data-v-e325ce98]{margin-top:10px;text-align:right}.btns .btn[data-v-e325ce98]{margin-left:10px}.canvas-tool[data-v-59ae6536]{position:relative;border-bottom:1px solid #eee;background-color:#fff;display:flex;justify-content:space-between;padding:0 10px;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.left-handler[data-v-59ae6536]{display:flex;align-items:center}.add-element-handler[data-v-59ae6536]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex}.handler-item[data-v-59ae6536]{margin:0 10px;font-size:14px;cursor:pointer}.handler-item.disable[data-v-59ae6536]{opacity:.5}.right-handler[data-v-59ae6536]{display:flex;align-items:center}.right-handler .text[data-v-59ae6536]{width:40px;text-align:center}.right-handler .viewport-size[data-v-59ae6536]{font-size:13px}.base-element-image[data-v-b0d4d1b2]{position:absolute}.rotate-wrapper[data-v-b0d4d1b2]{width:100%;height:100%}.element-content[data-v-b0d4d1b2]{width:100%;height:100%;position:relative}.element-content .image-content[data-v-b0d4d1b2]{width:100%;height:100%;overflow:hidden;position:relative}.base-element-text[data-v-2ec235c4],.element-content img[data-v-b0d4d1b2]{position:absolute}.rotate-wrapper[data-v-2ec235c4]{width:100%;height:100%}.element-content[data-v-2ec235c4]{position:relative;padding:10px;line-height:1.5;word-break:break-word}.element-content .text[data-v-2ec235c4]{position:relative}.base-element-shape[data-v-3ad164fa]{position:absolute}.rotate-wrapper[data-v-3ad164fa]{width:100%;height:100%}.element-content[data-v-3ad164fa]{width:100%;height:100%;position:relative}.element-content svg[data-v-3ad164fa]{transform-origin:0 0;overflow:visible}.shape-text[data-v-3ad164fa]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;padding:10px;line-height:1.2;word-break:break-word}.shape-text.top[data-v-3ad164fa]{justify-content:flex-start}.shape-text.middle[data-v-3ad164fa]{justify-content:center}.shape-text.bottom[data-v-3ad164fa]{justify-content:flex-end}.editable-element-shape[data-v-448a7ca0]{position:absolute}.element-content[data-v-448a7ca0]{width:100%;height:100%;position:relative}.element-content svg[data-v-448a7ca0]{transform-origin:0 0;overflow:visible}.base-element-chart[data-v-2d25f60a]{position:absolute}.element-content[data-v-2d25f60a]{width:100%;height:100%;opacity:.5;display:flex;justify-content:center;align-items:center}.static-table[data-v-ccbfe89e],table[data-v-ccbfe89e]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-ccbfe89e]{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;border:0;word-wrap:break-word;--themeColor:$themeColor;--subThemeColor1:$themeColor;--subThemeColor2:$themeColor}table.theme tr:nth-child(2n) .cell[data-v-ccbfe89e]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-ccbfe89e]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-ccbfe89e]:last-child,table.theme.col-header tr .cell[data-v-ccbfe89e]:first-child,table.theme.row-footer tr:last-child .cell[data-v-ccbfe89e],table.theme.row-header tr:first-child .cell[data-v-ccbfe89e]{background-color:var(--themeColor)}table tr[data-v-ccbfe89e]{height:36px}table .cell[data-v-ccbfe89e]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle}table .cell-text[data-v-ccbfe89e]{min-height:32px;padding:5px;line-height:1.5}.base-element-table[data-v-dea016ac]{position:absolute}.element-content[data-v-dea016ac]{width:100%;height:100%;position:relative}.thumbnail-slide[data-v-4e59015e]{background-color:#fff;overflow:hidden}.elements[data-v-4e59015e]{transform-origin:0 0}.background[data-v-4e59015e]{width:100%;height:100%;background-position:50%;position:absolute}.layout-pool[data-v-775c4b6c]{width:394px;height:500px;padding:2px;margin-right:-12px;padding-right:12px;overflow:auto;display:flex;flex-wrap:wrap;align-content:flex-start}.layout-item[data-v-775c4b6c]{width:48%;margin-bottom:4%}.layout-item[data-v-775c4b6c]:not(:nth-child(2n)){margin-right:4%}.layout-item .thumbnail[data-v-775c4b6c]{outline:1px solid #eee;cursor:pointer}.layout-item .thumbnail[data-v-775c4b6c]:hover{outline-color:#d14424}.thumbnails[data-v-38044c5a]{border-right:1px solid #eee;background-color:#fff;display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.add-slide[data-v-38044c5a]{height:40px;font-size:12px;display:flex;flex-shrink:0;border-bottom:1px solid #eee;cursor:pointer}.add-slide .btn[data-v-38044c5a]{flex:1;display:flex;justify-content:center;align-items:center}.add-slide .btn[data-v-38044c5a]:hover{background-color:#f9f9f9}.add-slide .select-btn[data-v-38044c5a]{width:30px;display:flex;justify-content:center;align-items:center;border-left:1px solid #eee}.add-slide .select-btn[data-v-38044c5a]:hover{background-color:#f9f9f9}.add-slide .icon[data-v-38044c5a]{margin-right:3px;font-size:14px}.thumbnail-list[data-v-38044c5a]{padding:5px 0;flex:1;overflow:auto}.thumbnail-item[data-v-38044c5a]{display:flex;justify-content:center;align-items:center;padding:5px 0}.thumbnail-item .thumbnail[data-v-38044c5a]{outline:1px solid rgba(209,68,36,.15)}.thumbnail-item.active .label[data-v-38044c5a]{color:#d14424}.thumbnail-item.active .thumbnail[data-v-38044c5a],.thumbnail-item.selected .thumbnail[data-v-38044c5a]{outline-color:#d14424}.label[data-v-38044c5a]{font-size:12px;color:#999;width:20px;cursor:-webkit-grab;cursor:grab}.label[data-v-38044c5a]:active{cursor:-webkit-grabbing;cursor:grabbing}.row[data-v-b884607e]{width:100%;display:flex;align-items:center;margin-bottom:10px}.color-btn[data-v-39016b60]{display:flex;align-items:center;justify-content:center;padding:0!important}.color-block[data-v-39016b60]{height:20px;margin-left:8px;flex:1;outline:1px dashed hsla(0,0%,40%,.12)}.color-btn-icon[data-v-39016b60]{width:30px;font-size:12px;margin-top:2px;color:#bfbfbf}.row[data-v-2d8ce9c0]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-2d8ce9c0]{text-align:right}.row[data-v-5cca6474]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-5cca6474]{text-align:right}.text-style-panel[data-v-ee8b653e]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-ee8b653e]{width:100%;display:flex;align-items:center;margin-bottom:10px}.preset-style[data-v-ee8b653e]{display:flex;flex-wrap:wrap;margin-bottom:10px}.preset-style-item[data-v-ee8b653e]{width:50%;height:50px;border:1px solid #d6d6d6;box-sizing:border-box;display:flex;justify-content:center;align-items:center;position:relative;cursor:pointer;transition:all .2s}.preset-style-item[data-v-ee8b653e]:hover{border-color:#d14424;color:#d14424;z-index:1}.preset-style-item[data-v-ee8b653e]:nth-child(2n){margin-left:-1px}.preset-style-item[data-v-ee8b653e]:nth-child(n+3){margin-top:-1px}.text-color-btn[data-v-ee8b653e]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-ee8b653e]{width:16px;height:3px;margin-top:1px}.row[data-v-6b6342c9],.row[data-v-6bffd840]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-6bffd840]{text-align:right}.origin-image[data-v-6bffd840]{height:100px;background-size:contain;background-repeat:no-repeat;background-position:50%;background-color:#f9f9f9;margin-bottom:10px}.full-width-btn[data-v-6bffd840]{width:100%;margin-bottom:10px}.btn-icon[data-v-6bffd840]{margin-right:3px}.filter[data-v-6bffd840]{width:280px;font-size:12px}.filter-item[data-v-6bffd840]{padding:8px 5px;display:flex;justify-content:center;align-items:center}.filter-item .name[data-v-6bffd840]{width:60px}.filter-item .filter-slider[data-v-6bffd840]{flex:1;margin:0 6px}.filter-item .value[data-v-6bffd840]{width:40px;text-align:right}.clip[data-v-6bffd840]{width:260px;font-size:12px}.clip .title[data-v-6bffd840]{margin-bottom:5px}.shape-clip[data-v-6bffd840]{margin-bottom:10px;display:flex;flex-wrap:wrap;align-content:flex-start}.shape-clip-item[data-v-6bffd840]{display:flex;justify-content:center;align-items:center;cursor:pointer;width:16%;margin-bottom:5%}.shape-clip-item[data-v-6bffd840]:not(:nth-child(5n)){margin-right:5%}.shape-clip-item:hover .shape[data-v-6bffd840]{background-color:#ccc}.shape-clip-item .shape[data-v-6bffd840]{width:40px;height:40px;background-color:#e1e1e1}.shape-style-panel[data-v-a62499e8]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-a62499e8]{width:100%;display:flex;align-items:center;margin-bottom:10px}.text-color-btn[data-v-a62499e8]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-a62499e8]{width:16px;height:3px;margin-top:1px}.row[data-v-65b24fb3]{width:100%;display:flex;align-items:center;margin-bottom:10px}.line-btn[data-v-65b24fb3]{display:flex;align-items:center;justify-content:space-between;padding:0!important}.line-btn .line-wrapper[data-v-65b24fb3]{margin-left:8px}.line-wrapper[data-v-65b24fb3]{overflow:visible}.line-btn-icon[data-v-65b24fb3]{width:30px;font-size:12px;margin-top:2px;color:#bfbfbf}.preset-point-style[data-v-65b24fb3]{padding:0 10px}.preset-point-style+.preset-point-style[data-v-65b24fb3]{margin-top:10px}.chart-data-editor[data-v-39c533c6]{width:600px;position:relative}.editor-content[data-v-39c533c6]{width:100%;height:360px;position:relative;border-right:1px solid #ccc;border-bottom:1px solid #ccc;overflow:auto;overflow:overlay}.range-box[data-v-39c533c6]{position:absolute;top:0;left:0;z-index:100;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.temp-range[data-v-39c533c6]{width:0;height:0;position:absolute;top:0;left:0;background-color:hsla(0,0%,53.3%,.3)}.range-line[data-v-39c533c6]{width:0;height:0;position:absolute;left:0;top:0;border:0 solid #d14424}.range-line.t[data-v-39c533c6]{border-top-width:1px}.range-line.b[data-v-39c533c6]{border-bottom-width:1px}.range-line.l[data-v-39c533c6]{border-left-width:1px}.range-line.r[data-v-39c533c6]{border-right-width:1px}.resizable[data-v-39c533c6]{position:absolute;width:12px;height:12px;left:0;top:0;margin:-9px 0 0 -9px;cursor:nwse-resize}.resizable[data-v-39c533c6]:after{content:"";position:absolute;width:4px;height:12px;right:0;top:0;background-color:#d14424}.resizable[data-v-39c533c6]:before{content:"";position:absolute;width:12px;height:4px;right:0;bottom:0;background-color:#d14424}table[data-v-39c533c6]{width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;table-layout:fixed}table td[data-v-39c533c6]{text-align:center;border:1px solid #ccc;vertical-align:middle;width:100px;height:32px}table td.head[data-v-39c533c6]{background-color:rgba(209,68,36,.1)}table .item[data-v-39c533c6]{width:100%;height:100%;border:0;outline:0;font-size:13px;text-align:center;background-color:transparent}table .item.selected[data-v-39c533c6]{background-color:rgba(209,68,36,.02)}.btns[data-v-39c533c6]{margin-top:10px;text-align:right}.btns .btn[data-v-39c533c6]{margin-left:10px}.row[data-v-de85ffe4]{width:100%;display:flex;align-items:center;margin-bottom:10px}.full-width-btn[data-v-de85ffe4]{width:100%}.btn-icon[data-v-de85ffe4]{margin-right:3px}.add-color-btn[data-v-de85ffe4]{padding:0!important}.color-btn-wrap[data-v-de85ffe4]{position:relative}.delete-color-btn[data-v-de85ffe4]{position:absolute;width:30px;right:2px;top:2px;bottom:2px;display:flex;justify-content:center;align-items:center;background-color:#fff;cursor:pointer}.row[data-v-db114f8c]{width:100%;display:flex;align-items:center;margin-bottom:10px}.theme-switch[data-v-db114f8c]{margin-bottom:18px}.switch-wrapper[data-v-db114f8c]{text-align:right}.text-color-btn[data-v-db114f8c]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-db114f8c]{width:16px;height:3px;margin-top:1px}.row[data-v-655fed44]{width:100%;display:flex;align-items:center;margin-bottom:10px}.title[data-v-655fed44]{margin-bottom:10px}.label[data-v-655fed44]{text-align:center}.btn-icon[data-v-655fed44]{margin-right:3px}.icon-btn[data-v-655fed44]{cursor:pointer}.element-animation-btn[data-v-34dfe3c2]{width:100%}.duration[data-v-34dfe3c2]{width:100%;display:flex;align-items:center;margin:10px 0}.tip[data-v-34dfe3c2]{text-align:center;font-style:italic;padding-top:12px}.animation-pool[data-v-34dfe3c2]{width:400px;height:500px;overflow-y:auto;overflow-x:hidden;font-size:12px;margin-right:-12px;padding-right:12px}.type-title[data-v-34dfe3c2]{width:100%;font-size:13px;margin-bottom:10px;border-left:4px solid #aaa;background-color:#eee;padding:2px 0 2px 10px}.pool-item-wrapper[data-v-34dfe3c2]{display:flex;flex-wrap:wrap;align-content:flex-start}.pool-item[data-v-34dfe3c2]{width:24%;margin-bottom:1.33333%;margin-bottom:10px;height:40px;line-height:40px;text-align:center;cursor:pointer}.pool-item[data-v-34dfe3c2]:not(:nth-child(4n)){margin-right:1.33333%}.animation-box[data-v-34dfe3c2]{background-color:#f9f9f9}.sequence-item[data-v-34dfe3c2]{height:36px;display:flex;align-items:center;border:1px solid #eee;padding:6px;border-radius:2px;margin-bottom:8px;cursor:-webkit-grab;cursor:grab}.sequence-item[data-v-34dfe3c2]:active{cursor:-webkit-grabbing;cursor:grabbing}.sequence-item.active[data-v-34dfe3c2]{border-color:#d14424}.sequence-item .index[data-v-34dfe3c2]{flex:1}.sequence-item .text[data-v-34dfe3c2]{flex:6}.sequence-item .handler[data-v-34dfe3c2]{flex:2;font-size:15px;text-align:right}.sequence-item .handler-btn[data-v-34dfe3c2]{margin-left:8px;cursor:pointer}.slide-design-panel[data-v-7c0de296]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-7c0de296]{width:100%;display:flex;align-items:center;margin-bottom:10px}.title[data-v-7c0de296]{margin-bottom:10px}.title.dropdown[data-v-7c0de296]{display:flex;align-items:center;cursor:pointer}.title.dropdown .icon[data-v-7c0de296]{margin-left:5px;transition:transform .1s}.title.dropdown:not(.active) .icon[data-v-7c0de296]{transform:rotate(-90deg)}.background-image-wrapper[data-v-7c0de296]{margin-bottom:10px}.background-image[data-v-7c0de296]{height:0;padding-bottom:56.25%;border:1px dashed #eee;border-radius:2px;position:relative;transition:all .2s}.background-image[data-v-7c0de296]:hover{border-color:#d14424;color:#d14424}.background-image .content[data-v-7c0de296]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;background-position:50%;background-size:contain;background-repeat:no-repeat;cursor:pointer}.theme-list[data-v-7c0de296]{display:flex;flex-wrap:wrap;align-content:flex-start}.theme-item[data-v-7c0de296]{width:22%;margin-bottom:4%;padding-bottom:22%;border-radius:2px;position:relative;cursor:pointer}.theme-item[data-v-7c0de296]:not(:nth-child(4n)){margin-right:4%}.theme-item .theme-item-content[data-v-7c0de296]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;transition:box-shadow .2s}.theme-item .theme-item-content[data-v-7c0de296]:hover{box-shadow:0 0 4px #888}.theme-item .text[data-v-7c0de296]{font-size:16px}.theme-item .color-block[data-v-7c0de296]{width:28px;height:10px;margin-top:5px}.animation-pool[data-v-647e2618]{display:flex;flex-wrap:wrap;margin-bottom:10px}.animation-item[data-v-647e2618]{width:50%;height:115px;border:1px solid #d6d6d6;box-sizing:border-box;display:flex;flex-direction:column;justify-content:space-between;align-items:center;padding:25px 0 15px 0;position:relative;cursor:pointer}.animation-item.active[data-v-647e2618]{border-color:#d14424;z-index:1}.animation-item[data-v-647e2618]:nth-child(2n){margin-left:-1px}.animation-item[data-v-647e2618]:nth-child(n+3){margin-top:-1px}.animation-block[data-v-647e2618]{width:64px;height:36px;background:#666;position:relative;overflow:hidden}.animation-block.fade[data-v-647e2618]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:fade-647e2618 .3s linear;animation:fade-647e2618 .3s linear}.animation-block.slideX[data-v-647e2618]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideX-647e2618 .3s linear;animation:slideX-647e2618 .3s linear}.animation-block.slideY[data-v-647e2618]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideY-647e2618 .3s linear;animation:slideY-647e2618 .3s linear}.animation-text[data-v-647e2618]{font-size:12px;color:#333;text-align:center}@-webkit-keyframes fade-647e2618{0%{opacity:0}to{opacity:1}}@keyframes fade-647e2618{0%{opacity:0}to{opacity:1}}@-webkit-keyframes slideX-647e2618{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slideX-647e2618{0%{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slideY-647e2618{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideY-647e2618{0%{transform:translateY(100%)}to{transform:translateY(0)}}.row[data-v-88d13362]{width:100%;display:flex;align-items:center;margin-bottom:10px}.symbol-panel[data-v-48704658]{height:100%;display:flex;flex-direction:column}.symbol-panel .tabs[data-v-48704658]{display:flex;justify-content:space-around;align-items:center;border-bottom:1px solid #eee;margin-bottom:8px}.symbol-panel .tab[data-v-48704658]{padding:6px 10px;border-bottom:2px solid transparent;cursor:pointer}.symbol-panel .tab.active[data-v-48704658]{border-bottom:2px solid #d14424}.symbol-panel .pool[data-v-48704658]{padding:5px 12px;margin:0 -12px;flex:1;font-size:18px;overflow:auto;overflow:overlay;display:flex;flex-wrap:wrap;align-content:flex-start}.symbol-panel .symbol-item[data-v-48704658]{width:18%;margin-bottom:2.5%;height:0;padding-bottom:18%;position:relative;cursor:pointer;border:1px solid #eee}.symbol-panel .symbol-item[data-v-48704658]:not(:nth-child(5n)){margin-right:2.5%}.symbol-panel .symbol-item[data-v-48704658]:hover{color:#d14424}.symbol-panel .symbol-item .symbol[data-v-48704658]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#fff}.toolbar[data-v-5e3834d5]{border-left:1px solid #eee;background-color:#fff;display:flex;flex-direction:column}.tabs[data-v-5e3834d5]{height:40px;font-size:12px;flex-shrink:0;display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tab[data-v-5e3834d5]{flex:1;display:flex;justify-content:center;align-items:center;background-color:#f9f9f9;border-bottom:1px solid #eee;cursor:pointer}.tab.active[data-v-5e3834d5]{background-color:#fff;border-bottom-color:#fff}.tab+.tab[data-v-5e3834d5]{border-left:1px solid #eee}.content[data-v-5e3834d5]{padding:12px;font-size:13px;overflow:auto;overflow:overlay}.remark[data-v-21516eb9]{position:relative;border-top:1px solid #eee;background-color:#f9f9f9}.remark textarea[data-v-21516eb9]{width:100%;height:100%;overflow-y:auto;resize:none;border:0;outline:0;padding:8px;font-size:12px;background-color:transparent;position:absolute;top:0;right:0;bottom:0;left:0}.resize-handler[data-v-21516eb9]{height:7px;position:absolute;top:-3px;left:0;right:0;cursor:n-resize;z-index:2}.pptist-editor[data-v-55178b6a]{height:100%}.layout-header[data-v-55178b6a]{height:40px}.layout-content[data-v-55178b6a]{height:calc(100% - 40px);display:flex}.layout-content-left[data-v-55178b6a]{width:160px;height:100%;flex-shrink:0}.layout-content-center[data-v-55178b6a]{width:calc(100% - 420px)}.layout-content-center .center-top[data-v-55178b6a]{height:40px}.layout-content-right[data-v-55178b6a]{width:260px;height:100%}.screen-element-chart[data-v-1423f8c2]{position:absolute}.element-content[data-v-1423f8c2]{width:100%;height:100%}.link[data-v-11126f7d]{cursor:pointer}.screen-slide[data-v-a094625a]{position:absolute;top:0;left:0;transform-origin:0 0}.background[data-v-a094625a]{width:100%;height:100%;background-position:50%;position:absolute}.slide-thumbnails[data-v-26398174]{width:100%;height:100%;position:fixed;top:0;left:0;background-color:#1a1a1a;z-index:99}.return-button[data-v-26398174]{height:60px;padding:20px 30px 0}.return-button .icon[data-v-26398174]{color:#fff;font-size:36px;cursor:pointer}.return-button .icon[data-v-26398174]:hover{color:#d14424}.slide-thumbnails-content[data-v-26398174]{height:calc(100% - 100px);padding:20px 30px 30px 30px;display:flex;flex-wrap:wrap;align-content:flex-start;overflow:auto;overflow:overlay}.slide-thumbnails-content .thumbnail[data-v-26398174]{width:150px;outline:2px solid #aaa;margin-right:12px;margin-bottom:12px}.slide-thumbnails-content .thumbnail[data-v-26398174]:hover{outline-color:#d14424}.slide-thumbnails-content .thumbnail.active[data-v-26398174]{outline-width:3px;outline-color:#d14424}.writing-board[data-v-7ff9fa00]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:8;cursor:none}.blackboard[data-v-7ff9fa00]{width:100%;height:100%;background-color:#0f392b}.canvas[data-v-7ff9fa00]{position:absolute;top:0;right:0;bottom:0;left:0}.eraser[data-v-7ff9fa00],.pen[data-v-7ff9fa00]{pointer-events:none;position:fixed;z-index:9}.eraser .icon[data-v-7ff9fa00],.pen .icon[data-v-7ff9fa00]{filter:drop-shadow(2px 2px 2px #555)}.eraser[data-v-7ff9fa00]{display:flex;justify-content:center;align-items:center;border-radius:50%;border:4px solid rgba(85,85,85,.15);color:rgba(85,85,85,.75)}.writing-board-tool[data-v-7a2e5324]{font-size:12px}.writing-board-tool .tools[data-v-7a2e5324]{height:50px;position:fixed;bottom:5px;left:5px;z-index:11;padding:12px;background-color:#eee;border-radius:2px;display:flex;align-items:center}.writing-board-tool .btn[data-v-7a2e5324]{padding:5px 10px;cursor:pointer}.writing-board-tool .btn[data-v-7a2e5324]:hover{color:#d14424}.writing-board-tool .btn.active[data-v-7a2e5324]{background-color:rgba(209,68,36,.5);color:#fff}.writing-board-tool .icon[data-v-7a2e5324]{font-size:20px}.writing-board-tool .colors[data-v-7a2e5324]{display:flex;padding:0 10px}.writing-board-tool .color[data-v-7a2e5324]{width:16px;height:16px;border-radius:2px;cursor:pointer}.writing-board-tool .color[data-v-7a2e5324]:hover{transform:scale(1.15)}.writing-board-tool .color.active[data-v-7a2e5324]{transform:scale(1.3)}.writing-board-tool .color+.color[data-v-7a2e5324]{margin-left:8px}.pptist-screen[data-v-42d1fb1f]{width:100%;height:100%;position:relative;background-color:#111}.slide-list[data-v-42d1fb1f]{background:#1d1d1d;position:relative;width:100%;height:100%}.slide-item[data-v-42d1fb1f]{position:absolute;top:0;left:0;width:100%;height:100%}.slide-item.current[data-v-42d1fb1f]{z-index:2}.slide-item.hide[data-v-42d1fb1f]{opacity:0}.slide-item.turning-mode-no.before[data-v-42d1fb1f]{transform:translateY(-100%)}.slide-item.turning-mode-no.after[data-v-42d1fb1f]{transform:translateY(100%)}.slide-item.turning-mode-fade[data-v-42d1fb1f]{transition:opacity .75s}.slide-item.turning-mode-fade.after[data-v-42d1fb1f],.slide-item.turning-mode-fade.before[data-v-42d1fb1f]{pointer-events:none;opacity:0}.slide-item.turning-mode-slideX[data-v-42d1fb1f]{transition:transform .35s}.slide-item.turning-mode-slideX.before[data-v-42d1fb1f]{transform:translateX(-100%)}.slide-item.turning-mode-slideX.after[data-v-42d1fb1f]{transform:translateX(100%)}.slide-item.turning-mode-slideY[data-v-42d1fb1f]{transition:transform .35s}.slide-item.turning-mode-slideY.before[data-v-42d1fb1f]{transform:translateY(-100%)}.slide-item.turning-mode-slideY.after[data-v-42d1fb1f]{transform:translateY(100%)}.slide-content[data-v-42d1fb1f]{background-color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;justify-content:center;align-items:center}.tools[data-v-42d1fb1f]{position:fixed;bottom:8px;left:8px;font-size:25px;color:#666;z-index:10;cursor:pointer}.tool-btn[data-v-42d1fb1f]{opacity:.35}.tool-btn[data-v-42d1fb1f]:hover{opacity:.9}.tool-btn+.tool-btn[data-v-42d1fb1f]{margin-left:8px}.page-number[data-v-42d1fb1f]{position:fixed;bottom:8px;right:8px;padding:8px 12px;color:#666;background-color:#eee;border-radius:2px;z-index:10;cursor:pointer}#app{height:100%}.ProseMirror,.ProseMirror-static{outline:0;border:0;font-size:20px;word-break:break-word}.ProseMirror-static:not(.ProseMirror-static),.ProseMirror:not(.ProseMirror-static){-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ProseMirror-static ::-moz-selection,.ProseMirror ::-moz-selection{background-color:rgba(209,68,36,.3);color:inherit}.ProseMirror-static ::selection,.ProseMirror ::selection{background-color:rgba(209,68,36,.3);color:inherit}.ProseMirror-static p+p,.ProseMirror p+p{margin-top:5px}.ProseMirror-static ul,.ProseMirror ul{list-style-type:disc;-webkit-padding-start:20px;padding-inline-start:20px}.ProseMirror-static ul li,.ProseMirror ul li{list-style-type:disc}.ProseMirror-static ol,.ProseMirror ol{list-style-type:decimal;-webkit-padding-start:20px;padding-inline-start:20px}.ProseMirror-static ol li,.ProseMirror ol li{list-style-type:decimal}.ProseMirror-static code,.ProseMirror code{background-color:#eee;padding:1px 3px;margin:0 1px;border-radius:2px;font-family:inherit}.ProseMirror-static blockquote,.ProseMirror blockquote{overflow:hidden;padding-right:1.2em;padding-left:1.2em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ProseMirror-selectednode{outline:none!important}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}body,html{height:100%;overflow:hidden;background-color:#fff;color:#41464b}li,ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:""}table{border-collapse:collapse;border-spacing:0}a{text-decoration:none}::-webkit-scrollbar{width:5px;height:5px;background-color:#fff}::-webkit-scrollbar-thumb{background-color:#c1c1c1}.ant-popover{padding-top:5px!important}.ant-popover-arrow{display:none}.ant-popover-inner{box-shadow:3px 3px 3px rgba(0,0,0,.15);border:1px solid #eee}.ant-popover-inner-content{padding:12px!important}.ant-dropdown{min-width:120px}.ant-dropdown-menu{box-shadow:3px 3px 3px rgba(0,0,0,.15)}.ant-dropdown-menu-item:hover{background-color:rgba(209,68,36,.2)}.ant-btn.no-padding{padding:0}.ant-radio-button-wrapper{text-align:center}.ant-slider-track{background-color:#d14424}.ant-slider-handle{border-color:#d14424}.ant-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-item-option-active:not(.ant-select-item-option-disabled){background-color:rgba(209,68,36,.2)}.ant-tooltip-inner{font-size:12px}@font-face{font-family:仓耳小丸子;src:url(../fonts/仓耳小丸子.676e187a.ttf)}@font-face{font-family:优设标题黑;src:url(../fonts/优设标题黑.1726685c.ttf)}@font-face{font-family:峰广明锐体;src:url(../fonts/峰广明锐体.8bdb14f7.ttf)}@font-face{font-family:摄图摩登小方体;src:url(../fonts/摄图摩登小方体.de722238.ttf)}@font-face{font-family:站酷快乐体;src:url(../fonts/站酷快乐体.0aceab97.ttf)}@font-face{font-family:字制区喜脉体;src:url(../fonts/字制区喜脉体.fc4a0c7d.ttf)}@font-face{font-family:素材集市康康体;src:url(../fonts/素材集市康康体.8db9d61f.ttf)}@font-face{font-family:联盟起艺卢帅正锐黑体;src:url(../fonts/联盟起艺卢帅正锐黑体.42cb84f9.ttf)}@font-face{font-family:素材集市酷方体;src:url(../fonts/素材集市酷方体.8d33b29e.ttf)}@font-face{font-family:途牛类圆体;src:url(../fonts/途牛类圆体.abaea3c4.ttf)}@font-face{font-family:锐字真言体;src:url(../fonts/锐字真言体.1583afec.ttf)}@font-face{font-family:阿里汉仪智能黑体;src:url(../fonts/阿里汉仪智能黑体.08b44aa7.ttf)}.input[data-v-d6089858]{display:none}.checkbox-button[data-v-7cae2b90]{outline:0;background-color:#fff;border:1px solid #d9d9d9;font-size:13px;padding:0 15px;height:32px;text-align:center;cursor:pointer}.checkbox-button[data-v-7cae2b90]:hover{color:#d14424}.checkbox-button.checked[data-v-7cae2b90]{color:#fff;background-color:#d14424;border-color:#d14424}.checkbox-button.checked[data-v-7cae2b90]:hover{background:rgba(209,68,36,.9);border-color:rgba(209,68,36,.9)}.checkbox-button-group[data-v-7dafd0a9]{display:flex;align-items:center}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button{border-radius:0;border-left-width:0;border-right-width:0;display:inline-block}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button+.checkbox-button{border-left-width:1px}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px;border-left-width:1px}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right-width:1px}.checkerboard[data-v-0a544b87]{background-size:contain}.alpha-checkboard-wrap[data-v-6f2cb744],.alpha[data-v-6f2cb744],.checkerboard[data-v-0a544b87]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-checkboard-wrap[data-v-6f2cb744]{overflow:hidden}.alpha-gradient[data-v-6f2cb744]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-container[data-v-6f2cb744]{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.alpha-pointer[data-v-6f2cb744]{z-index:2;position:absolute}.alpha-picker[data-v-6f2cb744]{cursor:pointer;width:4px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;margin-top:1px;transform:translateX(-2px)}.hue[data-v-1766620e]{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);position:absolute;top:0;right:0;bottom:0;left:0}.hue-container[data-v-1766620e]{cursor:pointer;margin:0 2px;position:relative;height:100%}.hue-pointer[data-v-1766620e]{z-index:2;position:absolute;top:0}.hue-picker[data-v-1766620e]{cursor:pointer;margin-top:1px;width:4px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;transform:translateX(-2px)}.saturation-black[data-v-8982eb4a],.saturation-white[data-v-8982eb4a],.saturation[data-v-8982eb4a]{position:absolute;top:0;right:0;bottom:0;left:0;cursor:pointer}.saturation-white[data-v-8982eb4a]{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.saturation-black[data-v-8982eb4a]{background:linear-gradient(0deg,#000,transparent)}.saturation-pointer[data-v-8982eb4a]{cursor:pointer;position:absolute}.saturation-circle[data-v-8982eb4a]{width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}.editable-input[data-v-00ea8dfc]{width:100%;position:relative;overflow:hidden;text-align:center;font-size:14px}.editable-input[data-v-00ea8dfc]:after{content:"#";position:absolute;left:0;top:50%;transform:translateY(-50%);color:#999}.input-content[data-v-00ea8dfc]{width:100%;padding:3px;border:0;border-bottom:1px solid #ddd;outline:none;text-align:center}.input-label[data-v-00ea8dfc]{text-transform:capitalize}.color-picker[data-v-210672ee]{position:relative;width:240px;background:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:-10px}.picker-saturation-wrap[data-v-210672ee]{width:100%;padding-bottom:50%;position:relative;overflow:hidden}.picker-controls[data-v-210672ee]{display:flex}.picker-sliders[data-v-210672ee]{padding:4px 0;flex:1}.picker-hue-wrap[data-v-210672ee]{position:relative;height:10px}.picker-alpha-wrap[data-v-210672ee]{position:relative;height:10px;margin-top:4px;overflow:hidden}.picker-color-wrap[data-v-210672ee]{width:24px;height:24px;position:relative;margin-top:4px;margin-right:4px;outline:1px dashed hsla(0,0%,40%,.12)}.picker-color-wrap .checkerboard[data-v-210672ee]{background-size:auto}.picker-current-color[data-v-210672ee]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2}.picker-field[data-v-210672ee]{margin-bottom:8px}.picker-presets[data-v-210672ee]{display:flex;flex-wrap:wrap;align-content:flex-start}.picker-presets-color[data-v-210672ee]{width:7%;margin-bottom:3.33333%;height:0;padding-bottom:7%;flex-shrink:0;position:relative;cursor:pointer}.picker-presets-color[data-v-210672ee]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-presets[data-v-210672ee]{display:flex;flex-wrap:wrap;align-content:flex-start}.picker-gradient-col[data-v-210672ee]{width:7%;margin-bottom:3.33333%;display:flex;flex-direction:column}.picker-gradient-col[data-v-210672ee]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-color[data-v-210672ee]{width:100%;height:0;padding-bottom:100%;position:relative;cursor:pointer}.recent-colors-title[data-v-210672ee]{font-size:12px;margin-bottom:4px}.recent-colors[data-v-210672ee]{display:flex;flex-wrap:wrap;align-content:flex-start}.fullscreen-spin[data-v-6275c730]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:100;display:flex;justify-content:center;align-items:center;background-color:hsla(0,0%,94.5%,.7)}.menu-content[data-v-eb1555e8]{width:170px;padding:5px 0;background:#fff;border:1px solid #eee;box-shadow:3px 3px 3px rgba(0,0,0,.15);border-radius:2px;list-style:none;margin:0}.menu-item[data-v-eb1555e8]{padding:0 20px;color:#555;font-size:12px;transition:all .1s;white-space:nowrap;height:30px;line-height:30px;background-color:#fff;cursor:pointer}.menu-item:not(.disable):hover>.menu-item-content>.sub-menu[data-v-eb1555e8]{display:block}.menu-item:not(.disable):hover>.has-children.has-handler[data-v-eb1555e8]:after{transform:scale(1)}.menu-item[data-v-eb1555e8]:hover:not(.disable){background-color:rgba(209,68,36,.2)}.menu-item.divider[data-v-eb1555e8]{height:1px;overflow:hidden;margin:5px;background-color:#e5e5e5;line-height:0;padding:0}.menu-item.disable[data-v-eb1555e8]{color:#b1b1b1;cursor:no-drop}.menu-item-content[data-v-eb1555e8]{display:flex;align-items:center;justify-content:space-between;position:relative}.menu-item-content.has-children[data-v-eb1555e8]:before{content:"";display:inline-block;width:8px;height:8px;border-width:1px;border-style:solid;border-color:#666 #666 transparent transparent;position:absolute;right:0;top:50%;transform:translateY(-50%) rotate(45deg)}.menu-item-content.has-children.has-handler[data-v-eb1555e8]:after{content:"";display:inline-block;width:1px;height:24px;background-color:#f1f1f1;position:absolute;right:18px;top:3px;transform:scale(0);transition:transform .2s}.menu-item-content .sub-text[data-v-eb1555e8]{opacity:.6}.menu-item-content .sub-menu[data-v-eb1555e8]{width:120px;position:absolute;display:none;left:112%;top:-6px}.mask{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:9998}.contextmenu{position:fixed;z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} \ No newline at end of file diff --git a/css/app.c897bbd3.css b/css/app.c897bbd3.css new file mode 100644 index 00000000..093ab451 --- /dev/null +++ b/css/app.c897bbd3.css @@ -0,0 +1 @@ +.hotkey-doc[data-v-47d0351b]{height:100%;overflow:auto;font-size:12px}.title[data-v-47d0351b]{font-size:14px;font-weight:700;border-bottom:1px solid #e5e5e5;padding:15px 0 5px 0}.hotkey-item[data-v-47d0351b]{border-bottom:1px solid #e5e5e5;padding:15px 0 5px 0;display:flex;align-items:center}.label[data-v-47d0351b]{width:140px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.editor-header[data-v-13ca7328]{background-color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom:1px solid #eee;display:flex;justify-content:space-between;padding:0 10px}.left[data-v-13ca7328],.menu-item[data-v-13ca7328],.right[data-v-13ca7328]{display:flex;justify-content:center;align-items:center}.menu-item[data-v-13ca7328]{height:100%;font-size:14px;padding:0 10px;transition:background-color .2s;cursor:pointer}.menu-item .text[data-v-13ca7328]{margin-left:4px}.left .menu-item[data-v-13ca7328]:hover{background-color:#f9f9f9}svg[data-v-8d85e878],svg[data-v-4126ab7f],svg[data-v-6655f0f0]{overflow:visible;position:absolute;z-index:2;top:0;left:0}.image-clip-handler[data-v-9e358576]{width:100%;height:100%;position:relative}.image-clip-handler .bottom-img[data-v-9e358576]{top:0;left:0;width:100%;height:100%;opacity:.5}.image-clip-handler img[data-v-9e358576]{width:100%;height:100%}.image-clip-handler .top-image-content[data-v-9e358576]{position:absolute;overflow:hidden}.image-clip-handler .top-image-content img[data-v-9e358576]{position:absolute}.operate[data-v-9e358576]{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.clip-point[data-v-9e358576]{position:absolute;width:16px;height:16px}.clip-point svg[data-v-9e358576]{overflow:visible}.clip-point.t-l[data-v-9e358576]{left:0;top:0;cursor:nwse-resize}.clip-point.t-r[data-v-9e358576]{left:100%;top:0;transform:rotate(90deg);transform-origin:0 0;cursor:nesw-resize}.clip-point.b-l[data-v-9e358576]{left:0;top:100%;transform:rotate(-90deg);transform-origin:0 0;cursor:nesw-resize}.clip-point.b-r[data-v-9e358576]{left:100%;top:100%;transform:rotate(180deg);transform-origin:0 0;cursor:nwse-resize}.clip-point.t[data-v-9e358576]{cursor:n-resize;left:50%;top:0;margin-left:-8px}.clip-point.b[data-v-9e358576]{cursor:n-resize;left:50%;bottom:0;margin-left:-8px;transform:rotate(180deg)}.clip-point.l[data-v-9e358576]{cursor:w-resize;left:0;top:50%;margin-top:-8px;transform:rotate(-90deg)}.clip-point.r[data-v-9e358576]{cursor:w-resize;right:0;top:50%;margin-top:-8px;transform:rotate(90deg)}.editable-element-image[data-v-03ead815]{position:absolute}.editable-element-image.lock .element-content[data-v-03ead815]{cursor:default}.rotate-wrapper[data-v-03ead815]{width:100%;height:100%}.element-content[data-v-03ead815]{width:100%;height:100%;position:relative;cursor:move}.element-content .image-content[data-v-03ead815]{width:100%;height:100%;overflow:hidden;position:relative}.element-content img[data-v-03ead815]{position:absolute}svg[data-v-2ddaa919]{overflow:visible;position:absolute;top:0;left:0}.prosemirror-editor[data-v-3100bb88]{cursor:text}.editable-element-text[data-v-3c0937ee]{position:absolute}.editable-element-text.lock .element-content[data-v-3c0937ee]{cursor:default}.rotate-wrapper[data-v-3c0937ee]{width:100%;height:100%}.element-content[data-v-3c0937ee]{position:relative;padding:10px;line-height:1.5;word-break:break-word;cursor:move}.element-content .text[data-v-3c0937ee]{position:relative}.editable-element-shape[data-v-5a268d2a]{position:absolute}.editable-element-shape.lock .element-content[data-v-5a268d2a]{cursor:default}.rotate-wrapper[data-v-5a268d2a]{width:100%;height:100%}.element-content[data-v-5a268d2a]{width:100%;height:100%;position:relative;cursor:move}.element-content svg[data-v-5a268d2a]{transform-origin:0 0;overflow:visible}.shape-text[data-v-5a268d2a]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;padding:10px;line-height:1.2;word-break:break-word}.shape-text.top[data-v-5a268d2a]{justify-content:flex-start}.shape-text.middle[data-v-5a268d2a]{justify-content:center}.shape-text.bottom[data-v-5a268d2a]{justify-content:flex-end}.show-text[data-v-5a268d2a]{pointer-events:none}.editable-element-shape[data-v-1d4bfa98]{position:absolute}.editable-element-shape.lock .line-path[data-v-1d4bfa98]{cursor:default}.element-content[data-v-1d4bfa98]{width:100%;height:100%;position:relative}.element-content svg[data-v-1d4bfa98]{transform-origin:0 0;overflow:visible}.line-path[data-v-1d4bfa98]{cursor:move}.chart[data-v-ee28fd7e]{display:flex}.chart-content[data-v-ee28fd7e]{transform-origin:0 0}.chart-content{--theme-color-1:#666;--theme-color-2:#666;--theme-color-3:#666;--theme-color-4:#666;--theme-color-5:#666;--theme-color-6:#666;--theme-color-7:#666;--theme-color-8:#666;--theme-color-9:#666;--theme-color-10:#666;--grid-color:rgba(0,0,0,0.4)}.chart-content .ct-series-a .ct-line,.chart-content .ct-series-a .ct-point{stroke:var(--theme-color-1)}.chart-content .ct-series-a .ct-area{fill:var(--theme-color-1)}.chart-content .ct-series-a .ct-bar{stroke:var(--theme-color-1)}.chart-content .ct-series-a .ct-slice-pie{fill:var(--theme-color-1)}.chart-content .ct-series-a .ct-slice-donut{stroke:var(--theme-color-1)}.chart-content .ct-series-b .ct-line,.chart-content .ct-series-b .ct-point{stroke:var(--theme-color-2)}.chart-content .ct-series-b .ct-area{fill:var(--theme-color-2)}.chart-content .ct-series-b .ct-bar{stroke:var(--theme-color-2)}.chart-content .ct-series-b .ct-slice-pie{fill:var(--theme-color-2)}.chart-content .ct-series-b .ct-slice-donut{stroke:var(--theme-color-2)}.chart-content .ct-series-c .ct-line,.chart-content .ct-series-c .ct-point{stroke:var(--theme-color-3)}.chart-content .ct-series-c .ct-area{fill:var(--theme-color-3)}.chart-content .ct-series-c .ct-bar{stroke:var(--theme-color-3)}.chart-content .ct-series-c .ct-slice-pie{fill:var(--theme-color-3)}.chart-content .ct-series-c .ct-slice-donut{stroke:var(--theme-color-3)}.chart-content .ct-series-d .ct-line,.chart-content .ct-series-d .ct-point{stroke:var(--theme-color-4)}.chart-content .ct-series-d .ct-area{fill:var(--theme-color-4)}.chart-content .ct-series-d .ct-bar{stroke:var(--theme-color-4)}.chart-content .ct-series-d .ct-slice-pie{fill:var(--theme-color-4)}.chart-content .ct-series-d .ct-slice-donut{stroke:var(--theme-color-4)}.chart-content .ct-series-e .ct-line,.chart-content .ct-series-e .ct-point{stroke:var(--theme-color-5)}.chart-content .ct-series-e .ct-area{fill:var(--theme-color-5)}.chart-content .ct-series-e .ct-bar{stroke:var(--theme-color-5)}.chart-content .ct-series-e .ct-slice-pie{fill:var(--theme-color-5)}.chart-content .ct-series-e .ct-slice-donut{stroke:var(--theme-color-5)}.chart-content .ct-series-f .ct-line,.chart-content .ct-series-f .ct-point{stroke:var(--theme-color-6)}.chart-content .ct-series-f .ct-area{fill:var(--theme-color-6)}.chart-content .ct-series-f .ct-bar{stroke:var(--theme-color-6)}.chart-content .ct-series-f .ct-slice-pie{fill:var(--theme-color-6)}.chart-content .ct-series-f .ct-slice-donut{stroke:var(--theme-color-6)}.chart-content .ct-series-g .ct-line,.chart-content .ct-series-g .ct-point{stroke:var(--theme-color-7)}.chart-content .ct-series-g .ct-area{fill:var(--theme-color-7)}.chart-content .ct-series-g .ct-bar{stroke:var(--theme-color-7)}.chart-content .ct-series-g .ct-slice-pie{fill:var(--theme-color-7)}.chart-content .ct-series-g .ct-slice-donut{stroke:var(--theme-color-7)}.chart-content .ct-series-h .ct-line,.chart-content .ct-series-h .ct-point{stroke:var(--theme-color-8)}.chart-content .ct-series-h .ct-area{fill:var(--theme-color-8)}.chart-content .ct-series-h .ct-bar{stroke:var(--theme-color-8)}.chart-content .ct-series-h .ct-slice-pie{fill:var(--theme-color-8)}.chart-content .ct-series-h .ct-slice-donut{stroke:var(--theme-color-8)}.chart-content .ct-series-i .ct-line,.chart-content .ct-series-i .ct-point{stroke:var(--theme-color-9)}.chart-content .ct-series-i .ct-area{fill:var(--theme-color-9)}.chart-content .ct-series-i .ct-bar{stroke:var(--theme-color-9)}.chart-content .ct-series-i .ct-slice-pie{fill:var(--theme-color-9)}.chart-content .ct-series-i .ct-slice-donut{stroke:var(--theme-color-9)}.chart-content .ct-grid{stroke:var(--grid-color)}.chart-content .ct-label{fill:var(--grid-color);color:var(--grid-color)}.legends{height:20px;justify-content:center;font-size:14px}.legend,.legends{display:flex;align-items:center}.legend+.legend{margin-left:10px}.legend .block{width:10px;height:10px;margin-right:5px}.editable-element-chart[data-v-138d40b9]{position:absolute}.editable-element-chart.lock .element-content[data-v-138d40b9]{cursor:default}.element-content[data-v-138d40b9]{width:100%;height:100%;overflow:hidden;cursor:move}.custom-textarea[data-v-59f468e0]{border:0;outline:0}.editable-table[data-v-5cfa4d0e],table[data-v-5cfa4d0e]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-5cfa4d0e]{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;border:0;word-wrap:break-word;--themeColor:$themeColor;--subThemeColor1:$themeColor;--subThemeColor2:$themeColor}table.theme tr:nth-child(2n) .cell[data-v-5cfa4d0e]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-5cfa4d0e]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-5cfa4d0e]:last-child,table.theme.col-header tr .cell[data-v-5cfa4d0e]:first-child,table.theme.row-footer tr:last-child .cell[data-v-5cfa4d0e],table.theme.row-header tr:first-child .cell[data-v-5cfa4d0e]{background-color:var(--themeColor)}table tr[data-v-5cfa4d0e]{height:36px}table .cell[data-v-5cfa4d0e]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle;font-size:14px;cursor:default}table .cell.selected[data-v-5cfa4d0e]:after{content:"";width:100%;height:100%;position:absolute;top:0;left:0;background-color:hsla(0,0%,40%,.4)}table .cell-text[data-v-5cfa4d0e]{min-height:32px;padding:5px;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:text}table .cell-text.active[data-v-5cfa4d0e]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.drag-line[data-v-5cfa4d0e]{position:absolute;top:0;bottom:0;width:3px;background-color:#d14424;margin-left:-1px;opacity:0;z-index:2;cursor:col-resize}.drag-line[data-v-5cfa4d0e]:hover{opacity:1}.editable-element-table[data-v-10d814ca]{position:absolute}.editable-element-table.lock .element-content[data-v-10d814ca]{cursor:default}.element-content[data-v-10d814ca]{width:100%;height:100%;position:relative;cursor:move}.table-mask[data-v-10d814ca]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .2s}.table-mask .mask-tip[data-v-10d814ca]{position:absolute;top:5px;left:5px;background-color:rgba(0,0,0,.5);color:#fff;padding:6px 12px;font-size:12px;transform-origin:0 0}.table-mask[data-v-10d814ca]:hover:not(.lock){opacity:.9}.mouse-selection[data-v-1619c258]{position:absolute;background-color:rgba(209,68,36,.1);border:1px solid #d14424;z-index:200}.mouse-selection.quadrant-1[data-v-1619c258]{transform-origin:0 0;transform:rotate(180deg)}.mouse-selection.quadrant-2[data-v-1619c258]{transform-origin:50% 0;transform:rotate(180deg)}.mouse-selection.quadrant-3[data-v-1619c258]{transform-origin:0 50%;transform:rotate(180deg)}.mouse-selection.quadrant-4[data-v-1619c258]{transform-origin:0 0;transform:rotate(0deg)}.grid-lines[data-v-1d945f13]{width:100%;height:100%;overflow:visible;z-index:999;pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.viewport-background[data-v-a9ca1b50]{width:100%;height:100%;background-position:50%;position:absolute}.alignment-line[data-v-2d3eddf5]{position:absolute;z-index:100}.alignment-line .line[data-v-2d3eddf5]{width:0;height:0;border:0 dashed #d14424}.alignment-line .line.vertical[data-v-2d3eddf5]{transform:translateY(-.5px);border-left-width:1px}.alignment-line .line.horizontal[data-v-2d3eddf5]{transform:translateX(-.5px);border-top-width:1px}.element-create-selection[data-v-04472140]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;cursor:crosshair}.selection[data-v-04472140]{position:absolute;opacity:.8}.selection[data-v-04472140]:not(.line){border:1px solid #d14424}.resize-handler[data-v-680e5917]{position:absolute;width:10px;height:10px;left:0;top:0;margin:-5px 0 0 -5px;border:1px solid #d14424;background-color:#fff;border-radius:1px}.resize-handler.bottom.rotate-135[data-v-680e5917],.resize-handler.left-bottom.rotate-90[data-v-680e5917],.resize-handler.left-top.rotate-0[data-v-680e5917],.resize-handler.left.rotate-45[data-v-680e5917],.resize-handler.right-bottom.rotate-0[data-v-680e5917],.resize-handler.right-top.rotate-90[data-v-680e5917],.resize-handler.right.rotate-45[data-v-680e5917],.resize-handler.top.rotate-135[data-v-680e5917]{cursor:nwse-resize}.resize-handler.bottom.rotate-0[data-v-680e5917],.resize-handler.left-bottom.rotate-135[data-v-680e5917],.resize-handler.left-top.rotate-45[data-v-680e5917],.resize-handler.left.rotate-90[data-v-680e5917],.resize-handler.right-bottom.rotate-45[data-v-680e5917],.resize-handler.right-top.rotate-135[data-v-680e5917],.resize-handler.right.rotate-90[data-v-680e5917],.resize-handler.top.rotate-0[data-v-680e5917]{cursor:ns-resize}.resize-handler.bottom.rotate-45[data-v-680e5917],.resize-handler.left-bottom.rotate-0[data-v-680e5917],.resize-handler.left-top.rotate-90[data-v-680e5917],.resize-handler.left.rotate-135[data-v-680e5917],.resize-handler.right-bottom.rotate-90[data-v-680e5917],.resize-handler.right-top.rotate-0[data-v-680e5917],.resize-handler.right.rotate-135[data-v-680e5917],.resize-handler.top.rotate-45[data-v-680e5917]{cursor:nesw-resize}.resize-handler.bottom.rotate-90[data-v-680e5917],.resize-handler.left-bottom.rotate-45[data-v-680e5917],.resize-handler.left-top.rotate-135[data-v-680e5917],.resize-handler.left.rotate-0[data-v-680e5917],.resize-handler.right-bottom.rotate-135[data-v-680e5917],.resize-handler.right-top.rotate-45[data-v-680e5917],.resize-handler.right.rotate-0[data-v-680e5917],.resize-handler.top.rotate-90[data-v-680e5917]{cursor:ew-resize}.border-line[data-v-630e246b]{position:absolute;width:0;height:0;left:0;top:0;border:0 dashed #d14424}.border-line.top[data-v-630e246b]{border-top-width:1px}.border-line.bottom[data-v-630e246b]{border-bottom-width:1px}.border-line.left[data-v-630e246b]{border-left-width:1px}.border-line.right[data-v-630e246b]{border-right-width:1px}.border-line.wide[data-v-630e246b]:before{content:"";position:absolute;background:transparent;cursor:move}.border-line.wide.top[data-v-630e246b]:before{top:-8px;left:-8px;width:calc(100% + 16px);height:16px}.border-line.wide.bottom[data-v-630e246b]:before{bottom:-8px;left:-8px;width:calc(100% + 16px);height:16px}.border-line.wide.left[data-v-630e246b]:before{top:-8px;left:-8px;width:16px;height:calc(100% + 16px)}.border-line.wide.right[data-v-630e246b]:before{top:-8px;right:-8px;width:16px;height:calc(100% + 16px)}.multi-select-operate[data-v-4def6455]{position:absolute;top:0;left:0;z-index:101}.rotate-handler[data-v-9a549510]{position:absolute;width:10px;height:10px;top:-25px;margin-left:-5px;border:1px solid #d14424;background-color:#fff;border-radius:1px;cursor:-webkit-grab;cursor:grab}.rotate-handler[data-v-9a549510]:active{cursor:-webkit-grabbing;cursor:grabbing}.image-element-operate.cliping[data-v-7dc35c8e]{visibility:hidden}.link-handler[data-v-9d9e1336]{height:30px;position:absolute;left:0;font-size:12px;padding:0 10px;background-color:#fff;box-shadow:3px 3px 3px rgba(0,0,0,.15);display:flex;align-items:center;color:#d14424}.link[data-v-9d9e1336]{max-width:300px;margin-right:20px;word-break:keep-all;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.btns[data-v-9d9e1336]{display:flex;align-items:center}.btns .btn[data-v-9d9e1336]{word-break:keep-all;cursor:pointer}.operate[data-v-46d959c4]{position:absolute;z-index:100;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.operate.multi-select[data-v-46d959c4]{opacity:0}.animation-index[data-v-46d959c4]{position:absolute;top:0;left:-24px;font-size:12px;width:18px;height:18px;background-color:#fff;color:#d14424;border:1px solid #d14424;display:flex;justify-content:center;align-items:center}.link-dialog[data-v-02317299]{padding:25px 10px 10px 10px}.btns[data-v-02317299]{margin-top:10px;text-align:right}.canvas[data-v-4edd93c1]{height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;background-color:#f9f9f9;position:relative}.viewport-wrapper[data-v-4edd93c1]{position:absolute;box-shadow:0 0 15px 0 rgba(0,0,0,.1)}.viewport[data-v-4edd93c1]{position:absolute;top:0;left:0;transform-origin:0 0}.shape-pool[data-v-612b80ef]{width:340px;max-height:540px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-612b80ef]{width:100%;font-size:13px;margin-bottom:10px;border-left:4px solid #aaa;background-color:#eee;padding:2px 0 2px 10px}.shape-list[data-v-612b80ef]{display:flex;flex-wrap:wrap;align-content:flex-start;margin-bottom:10px}.shape-item[data-v-612b80ef]{width:8%;margin-bottom:2.22222%;height:0;padding-bottom:8%;flex-shrink:0;position:relative;cursor:pointer}.shape-item[data-v-612b80ef]:not(:nth-child(10n)){margin-right:2.22222%}.shape-content[data-v-612b80ef]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center}.shape-content:hover .shape-path[data-v-612b80ef]{stroke:#d14424}.shape-content svg[data-v-612b80ef]:not(:root){overflow:visible}.line-pool[data-v-6302e570]{width:220px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-6302e570]{width:100%;font-size:13px;margin-bottom:10px;border-left:4px solid #aaa;background-color:#eee;padding:2px 0 2px 10px}.line-list[data-v-6302e570]{display:flex;flex-wrap:wrap;align-content:flex-start;margin-bottom:10px}.line-item[data-v-6302e570]{width:19%;margin-bottom:1.25%;height:0;padding-bottom:19%;flex-shrink:0;position:relative;cursor:pointer}.line-item[data-v-6302e570]:not(:nth-child(5n)){margin-right:1.25%}.line-content[data-v-6302e570]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;color:#999}.line-content[data-v-6302e570]:hover{color:#d14424}.line-content svg[data-v-6302e570]:not(:root){overflow:visible}.chart-pool[data-v-ab6a141a]{width:120px;margin-bottom:-5px;display:flex;flex-wrap:wrap;align-content:flex-start}.chart-item[data-v-ab6a141a]{width:32%;margin-bottom:2%;height:0;padding-bottom:32%;flex-shrink:0;position:relative;cursor:pointer}.chart-item[data-v-ab6a141a]:not(:nth-child(3n)){margin-right:2%}.chart-content[data-v-ab6a141a]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;color:#999}.chart-content[data-v-ab6a141a]:hover{color:#d14424}.table-generator[data-v-e325ce98]{width:100%;margin-top:-12px}.title[data-v-e325ce98]{height:28px;line-height:28px;background-color:#ededed;margin:0 -12px 12px -12px;padding:0 14px;font-size:12px;display:flex;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.title .right[data-v-e325ce98]{cursor:pointer}.title .right[data-v-e325ce98]:hover{color:#d14424}table[data-v-e325ce98]{border-collapse:separate}td[data-v-e325ce98]{width:23px;height:23px;line-height:23px;border:2px solid #fff;background-color:#f7f7f7}.cell[data-v-e325ce98]{width:100%;height:100%;border:1px solid #dcdcdc}.cell.active[data-v-e325ce98]{background-color:rgba(209,68,36,.1);border-color:#d14424}.custom[data-v-e325ce98]{width:230px}.custom .row[data-v-e325ce98]{display:flex;align-items:center}.custom .row+.row[data-v-e325ce98]{margin-top:10px}.btns[data-v-e325ce98]{margin-top:10px;text-align:right}.btns .btn[data-v-e325ce98]{margin-left:10px}.canvas-tool[data-v-59ae6536]{position:relative;border-bottom:1px solid #eee;background-color:#fff;display:flex;justify-content:space-between;padding:0 10px;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.left-handler[data-v-59ae6536]{display:flex;align-items:center}.add-element-handler[data-v-59ae6536]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex}.handler-item[data-v-59ae6536]{margin:0 10px;font-size:14px;cursor:pointer}.handler-item.disable[data-v-59ae6536]{opacity:.5}.right-handler[data-v-59ae6536]{display:flex;align-items:center}.right-handler .text[data-v-59ae6536]{width:40px;text-align:center}.right-handler .viewport-size[data-v-59ae6536]{font-size:13px}.base-element-image[data-v-b0d4d1b2]{position:absolute}.rotate-wrapper[data-v-b0d4d1b2]{width:100%;height:100%}.element-content[data-v-b0d4d1b2]{width:100%;height:100%;position:relative}.element-content .image-content[data-v-b0d4d1b2]{width:100%;height:100%;overflow:hidden;position:relative}.base-element-text[data-v-2ec235c4],.element-content img[data-v-b0d4d1b2]{position:absolute}.rotate-wrapper[data-v-2ec235c4]{width:100%;height:100%}.element-content[data-v-2ec235c4]{position:relative;padding:10px;line-height:1.5;word-break:break-word}.element-content .text[data-v-2ec235c4]{position:relative}.base-element-shape[data-v-3ad164fa]{position:absolute}.rotate-wrapper[data-v-3ad164fa]{width:100%;height:100%}.element-content[data-v-3ad164fa]{width:100%;height:100%;position:relative}.element-content svg[data-v-3ad164fa]{transform-origin:0 0;overflow:visible}.shape-text[data-v-3ad164fa]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;padding:10px;line-height:1.2;word-break:break-word}.shape-text.top[data-v-3ad164fa]{justify-content:flex-start}.shape-text.middle[data-v-3ad164fa]{justify-content:center}.shape-text.bottom[data-v-3ad164fa]{justify-content:flex-end}.editable-element-shape[data-v-448a7ca0]{position:absolute}.element-content[data-v-448a7ca0]{width:100%;height:100%;position:relative}.element-content svg[data-v-448a7ca0]{transform-origin:0 0;overflow:visible}.base-element-chart[data-v-2d25f60a]{position:absolute}.element-content[data-v-2d25f60a]{width:100%;height:100%;opacity:.5;display:flex;justify-content:center;align-items:center}.static-table[data-v-ccbfe89e],table[data-v-ccbfe89e]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-ccbfe89e]{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;border:0;word-wrap:break-word;--themeColor:$themeColor;--subThemeColor1:$themeColor;--subThemeColor2:$themeColor}table.theme tr:nth-child(2n) .cell[data-v-ccbfe89e]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-ccbfe89e]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-ccbfe89e]:last-child,table.theme.col-header tr .cell[data-v-ccbfe89e]:first-child,table.theme.row-footer tr:last-child .cell[data-v-ccbfe89e],table.theme.row-header tr:first-child .cell[data-v-ccbfe89e]{background-color:var(--themeColor)}table tr[data-v-ccbfe89e]{height:36px}table .cell[data-v-ccbfe89e]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle}table .cell-text[data-v-ccbfe89e]{min-height:32px;padding:5px;line-height:1.5}.base-element-table[data-v-dea016ac]{position:absolute}.element-content[data-v-dea016ac]{width:100%;height:100%;position:relative}.thumbnail-slide[data-v-4e59015e]{background-color:#fff;overflow:hidden}.elements[data-v-4e59015e]{transform-origin:0 0}.background[data-v-4e59015e]{width:100%;height:100%;background-position:50%;position:absolute}.layout-pool[data-v-775c4b6c]{width:394px;height:500px;padding:2px;margin-right:-12px;padding-right:12px;overflow:auto;display:flex;flex-wrap:wrap;align-content:flex-start}.layout-item[data-v-775c4b6c]{width:48%;margin-bottom:4%}.layout-item[data-v-775c4b6c]:not(:nth-child(2n)){margin-right:4%}.layout-item .thumbnail[data-v-775c4b6c]{outline:1px solid #eee;cursor:pointer}.layout-item .thumbnail[data-v-775c4b6c]:hover{outline-color:#d14424}.thumbnails[data-v-38044c5a]{border-right:1px solid #eee;background-color:#fff;display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.add-slide[data-v-38044c5a]{height:40px;font-size:12px;display:flex;flex-shrink:0;border-bottom:1px solid #eee;cursor:pointer}.add-slide .btn[data-v-38044c5a]{flex:1;display:flex;justify-content:center;align-items:center}.add-slide .btn[data-v-38044c5a]:hover{background-color:#f9f9f9}.add-slide .select-btn[data-v-38044c5a]{width:30px;display:flex;justify-content:center;align-items:center;border-left:1px solid #eee}.add-slide .select-btn[data-v-38044c5a]:hover{background-color:#f9f9f9}.add-slide .icon[data-v-38044c5a]{margin-right:3px;font-size:14px}.thumbnail-list[data-v-38044c5a]{padding:5px 0;flex:1;overflow:auto}.thumbnail-item[data-v-38044c5a]{display:flex;justify-content:center;align-items:center;padding:5px 0}.thumbnail-item .thumbnail[data-v-38044c5a]{outline:1px solid rgba(209,68,36,.15)}.thumbnail-item.active .label[data-v-38044c5a]{color:#d14424}.thumbnail-item.active .thumbnail[data-v-38044c5a],.thumbnail-item.selected .thumbnail[data-v-38044c5a]{outline-color:#d14424}.label[data-v-38044c5a]{font-size:12px;color:#999;width:20px;cursor:-webkit-grab;cursor:grab}.label[data-v-38044c5a]:active{cursor:-webkit-grabbing;cursor:grabbing}.row[data-v-b884607e]{width:100%;display:flex;align-items:center;margin-bottom:10px}.color-btn[data-v-39016b60]{display:flex;align-items:center;justify-content:center;padding:0!important}.color-block[data-v-39016b60]{height:20px;margin-left:8px;flex:1;outline:1px dashed hsla(0,0%,40%,.12)}.color-btn-icon[data-v-39016b60]{width:30px;font-size:12px;margin-top:2px;color:#bfbfbf}.row[data-v-2d8ce9c0]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-2d8ce9c0]{text-align:right}.row[data-v-5cca6474]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-5cca6474]{text-align:right}.text-style-panel[data-v-ee8b653e]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-ee8b653e]{width:100%;display:flex;align-items:center;margin-bottom:10px}.preset-style[data-v-ee8b653e]{display:flex;flex-wrap:wrap;margin-bottom:10px}.preset-style-item[data-v-ee8b653e]{width:50%;height:50px;border:1px solid #d6d6d6;box-sizing:border-box;display:flex;justify-content:center;align-items:center;position:relative;cursor:pointer;transition:all .2s}.preset-style-item[data-v-ee8b653e]:hover{border-color:#d14424;color:#d14424;z-index:1}.preset-style-item[data-v-ee8b653e]:nth-child(2n){margin-left:-1px}.preset-style-item[data-v-ee8b653e]:nth-child(n+3){margin-top:-1px}.text-color-btn[data-v-ee8b653e]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-ee8b653e]{width:16px;height:3px;margin-top:1px}.row[data-v-6b6342c9],.row[data-v-6bffd840]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-6bffd840]{text-align:right}.origin-image[data-v-6bffd840]{height:100px;background-size:contain;background-repeat:no-repeat;background-position:50%;background-color:#f9f9f9;margin-bottom:10px}.full-width-btn[data-v-6bffd840]{width:100%;margin-bottom:10px}.btn-icon[data-v-6bffd840]{margin-right:3px}.filter[data-v-6bffd840]{width:280px;font-size:12px}.filter-item[data-v-6bffd840]{padding:8px 5px;display:flex;justify-content:center;align-items:center}.filter-item .name[data-v-6bffd840]{width:60px}.filter-item .filter-slider[data-v-6bffd840]{flex:1;margin:0 6px}.filter-item .value[data-v-6bffd840]{width:40px;text-align:right}.clip[data-v-6bffd840]{width:260px;font-size:12px}.clip .title[data-v-6bffd840]{margin-bottom:5px}.shape-clip[data-v-6bffd840]{margin-bottom:10px;display:flex;flex-wrap:wrap;align-content:flex-start}.shape-clip-item[data-v-6bffd840]{display:flex;justify-content:center;align-items:center;cursor:pointer;width:16%;margin-bottom:5%}.shape-clip-item[data-v-6bffd840]:not(:nth-child(5n)){margin-right:5%}.shape-clip-item:hover .shape[data-v-6bffd840]{background-color:#ccc}.shape-clip-item .shape[data-v-6bffd840]{width:40px;height:40px;background-color:#e1e1e1}.shape-style-panel[data-v-a62499e8]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-a62499e8]{width:100%;display:flex;align-items:center;margin-bottom:10px}.text-color-btn[data-v-a62499e8]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-a62499e8]{width:16px;height:3px;margin-top:1px}.row[data-v-65b24fb3]{width:100%;display:flex;align-items:center;margin-bottom:10px}.line-btn[data-v-65b24fb3]{display:flex;align-items:center;justify-content:space-between;padding:0!important}.line-btn .line-wrapper[data-v-65b24fb3]{margin-left:8px}.line-wrapper[data-v-65b24fb3]{overflow:visible}.line-btn-icon[data-v-65b24fb3]{width:30px;font-size:12px;margin-top:2px;color:#bfbfbf}.preset-point-style[data-v-65b24fb3]{padding:0 10px}.preset-point-style+.preset-point-style[data-v-65b24fb3]{margin-top:10px}.chart-data-editor[data-v-9a62f784]{width:600px;position:relative}.editor-content[data-v-9a62f784]{width:100%;height:360px;position:relative;border-right:1px solid #ccc;border-bottom:1px solid #ccc;overflow:auto;overflow:overlay}.range-box[data-v-9a62f784]{position:absolute;top:0;left:0;z-index:100;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.temp-range[data-v-9a62f784]{width:0;height:0;position:absolute;top:0;left:0;background-color:hsla(0,0%,53.3%,.3)}.range-line[data-v-9a62f784]{width:0;height:0;position:absolute;left:0;top:0;border:0 solid #d14424}.range-line.t[data-v-9a62f784]{border-top-width:1px}.range-line.b[data-v-9a62f784]{border-bottom-width:1px}.range-line.l[data-v-9a62f784]{border-left-width:1px}.range-line.r[data-v-9a62f784]{border-right-width:1px}.resizable[data-v-9a62f784]{position:absolute;width:12px;height:12px;left:0;top:0;margin:-9px 0 0 -9px;cursor:nwse-resize}.resizable[data-v-9a62f784]:after{content:"";position:absolute;width:4px;height:12px;right:0;top:0;background-color:#d14424}.resizable[data-v-9a62f784]:before{content:"";position:absolute;width:12px;height:4px;right:0;bottom:0;background-color:#d14424}table[data-v-9a62f784]{width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;table-layout:fixed}table td[data-v-9a62f784]{text-align:center;border:1px solid #ccc;vertical-align:middle;width:100px;height:32px}table td.head[data-v-9a62f784]{background-color:rgba(209,68,36,.1)}table .item[data-v-9a62f784]{width:100%;height:100%;border:0;outline:0;font-size:13px;text-align:center;background-color:transparent}table .item.selected[data-v-9a62f784]{background-color:rgba(209,68,36,.02)}.btns[data-v-9a62f784]{margin-top:10px;display:flex;justify-content:space-between}.row[data-v-b77b4458]{width:100%;display:flex;align-items:center;margin-bottom:10px}.full-width-btn[data-v-b77b4458]{width:100%}.btn-icon[data-v-b77b4458]{margin-right:3px}.add-color-btn[data-v-b77b4458]{padding:0!important}.color-btn-wrap[data-v-b77b4458]{position:relative}.delete-color-btn[data-v-b77b4458]{position:absolute;width:30px;right:2px;top:2px;bottom:2px;display:flex;justify-content:center;align-items:center;background-color:#fff;cursor:pointer}.row[data-v-db114f8c]{width:100%;display:flex;align-items:center;margin-bottom:10px}.theme-switch[data-v-db114f8c]{margin-bottom:18px}.switch-wrapper[data-v-db114f8c]{text-align:right}.text-color-btn[data-v-db114f8c]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-db114f8c]{width:16px;height:3px;margin-top:1px}.row[data-v-655fed44]{width:100%;display:flex;align-items:center;margin-bottom:10px}.title[data-v-655fed44]{margin-bottom:10px}.label[data-v-655fed44]{text-align:center}.btn-icon[data-v-655fed44]{margin-right:3px}.icon-btn[data-v-655fed44]{cursor:pointer}.element-animation-btn[data-v-34dfe3c2]{width:100%}.duration[data-v-34dfe3c2]{width:100%;display:flex;align-items:center;margin:10px 0}.tip[data-v-34dfe3c2]{text-align:center;font-style:italic;padding-top:12px}.animation-pool[data-v-34dfe3c2]{width:400px;height:500px;overflow-y:auto;overflow-x:hidden;font-size:12px;margin-right:-12px;padding-right:12px}.type-title[data-v-34dfe3c2]{width:100%;font-size:13px;margin-bottom:10px;border-left:4px solid #aaa;background-color:#eee;padding:2px 0 2px 10px}.pool-item-wrapper[data-v-34dfe3c2]{display:flex;flex-wrap:wrap;align-content:flex-start}.pool-item[data-v-34dfe3c2]{width:24%;margin-bottom:1.33333%;margin-bottom:10px;height:40px;line-height:40px;text-align:center;cursor:pointer}.pool-item[data-v-34dfe3c2]:not(:nth-child(4n)){margin-right:1.33333%}.animation-box[data-v-34dfe3c2]{background-color:#f9f9f9}.sequence-item[data-v-34dfe3c2]{height:36px;display:flex;align-items:center;border:1px solid #eee;padding:6px;border-radius:2px;margin-bottom:8px;cursor:-webkit-grab;cursor:grab}.sequence-item[data-v-34dfe3c2]:active{cursor:-webkit-grabbing;cursor:grabbing}.sequence-item.active[data-v-34dfe3c2]{border-color:#d14424}.sequence-item .index[data-v-34dfe3c2]{flex:1}.sequence-item .text[data-v-34dfe3c2]{flex:6}.sequence-item .handler[data-v-34dfe3c2]{flex:2;font-size:15px;text-align:right}.sequence-item .handler-btn[data-v-34dfe3c2]{margin-left:8px;cursor:pointer}.slide-design-panel[data-v-7c0de296]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-7c0de296]{width:100%;display:flex;align-items:center;margin-bottom:10px}.title[data-v-7c0de296]{margin-bottom:10px}.title.dropdown[data-v-7c0de296]{display:flex;align-items:center;cursor:pointer}.title.dropdown .icon[data-v-7c0de296]{margin-left:5px;transition:transform .1s}.title.dropdown:not(.active) .icon[data-v-7c0de296]{transform:rotate(-90deg)}.background-image-wrapper[data-v-7c0de296]{margin-bottom:10px}.background-image[data-v-7c0de296]{height:0;padding-bottom:56.25%;border:1px dashed #eee;border-radius:2px;position:relative;transition:all .2s}.background-image[data-v-7c0de296]:hover{border-color:#d14424;color:#d14424}.background-image .content[data-v-7c0de296]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;background-position:50%;background-size:contain;background-repeat:no-repeat;cursor:pointer}.theme-list[data-v-7c0de296]{display:flex;flex-wrap:wrap;align-content:flex-start}.theme-item[data-v-7c0de296]{width:22%;margin-bottom:4%;padding-bottom:22%;border-radius:2px;position:relative;cursor:pointer}.theme-item[data-v-7c0de296]:not(:nth-child(4n)){margin-right:4%}.theme-item .theme-item-content[data-v-7c0de296]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;transition:box-shadow .2s}.theme-item .theme-item-content[data-v-7c0de296]:hover{box-shadow:0 0 4px #888}.theme-item .text[data-v-7c0de296]{font-size:16px}.theme-item .color-block[data-v-7c0de296]{width:28px;height:10px;margin-top:5px}.animation-pool[data-v-647e2618]{display:flex;flex-wrap:wrap;margin-bottom:10px}.animation-item[data-v-647e2618]{width:50%;height:115px;border:1px solid #d6d6d6;box-sizing:border-box;display:flex;flex-direction:column;justify-content:space-between;align-items:center;padding:25px 0 15px 0;position:relative;cursor:pointer}.animation-item.active[data-v-647e2618]{border-color:#d14424;z-index:1}.animation-item[data-v-647e2618]:nth-child(2n){margin-left:-1px}.animation-item[data-v-647e2618]:nth-child(n+3){margin-top:-1px}.animation-block[data-v-647e2618]{width:64px;height:36px;background:#666;position:relative;overflow:hidden}.animation-block.fade[data-v-647e2618]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:fade-647e2618 .3s linear;animation:fade-647e2618 .3s linear}.animation-block.slideX[data-v-647e2618]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideX-647e2618 .3s linear;animation:slideX-647e2618 .3s linear}.animation-block.slideY[data-v-647e2618]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideY-647e2618 .3s linear;animation:slideY-647e2618 .3s linear}.animation-text[data-v-647e2618]{font-size:12px;color:#333;text-align:center}@-webkit-keyframes fade-647e2618{0%{opacity:0}to{opacity:1}}@keyframes fade-647e2618{0%{opacity:0}to{opacity:1}}@-webkit-keyframes slideX-647e2618{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slideX-647e2618{0%{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slideY-647e2618{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideY-647e2618{0%{transform:translateY(100%)}to{transform:translateY(0)}}.row[data-v-88d13362]{width:100%;display:flex;align-items:center;margin-bottom:10px}.symbol-panel[data-v-48704658]{height:100%;display:flex;flex-direction:column}.symbol-panel .tabs[data-v-48704658]{display:flex;justify-content:space-around;align-items:center;border-bottom:1px solid #eee;margin-bottom:8px}.symbol-panel .tab[data-v-48704658]{padding:6px 10px;border-bottom:2px solid transparent;cursor:pointer}.symbol-panel .tab.active[data-v-48704658]{border-bottom:2px solid #d14424}.symbol-panel .pool[data-v-48704658]{padding:5px 12px;margin:0 -12px;flex:1;font-size:18px;overflow:auto;overflow:overlay;display:flex;flex-wrap:wrap;align-content:flex-start}.symbol-panel .symbol-item[data-v-48704658]{width:18%;margin-bottom:2.5%;height:0;padding-bottom:18%;position:relative;cursor:pointer;border:1px solid #eee}.symbol-panel .symbol-item[data-v-48704658]:not(:nth-child(5n)){margin-right:2.5%}.symbol-panel .symbol-item[data-v-48704658]:hover{color:#d14424}.symbol-panel .symbol-item .symbol[data-v-48704658]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#fff}.toolbar[data-v-5e3834d5]{border-left:1px solid #eee;background-color:#fff;display:flex;flex-direction:column}.tabs[data-v-5e3834d5]{height:40px;font-size:12px;flex-shrink:0;display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tab[data-v-5e3834d5]{flex:1;display:flex;justify-content:center;align-items:center;background-color:#f9f9f9;border-bottom:1px solid #eee;cursor:pointer}.tab.active[data-v-5e3834d5]{background-color:#fff;border-bottom-color:#fff}.tab+.tab[data-v-5e3834d5]{border-left:1px solid #eee}.content[data-v-5e3834d5]{padding:12px;font-size:13px;overflow:auto;overflow:overlay}.remark[data-v-21516eb9]{position:relative;border-top:1px solid #eee;background-color:#f9f9f9}.remark textarea[data-v-21516eb9]{width:100%;height:100%;overflow-y:auto;resize:none;border:0;outline:0;padding:8px;font-size:12px;background-color:transparent;position:absolute;top:0;right:0;bottom:0;left:0}.resize-handler[data-v-21516eb9]{height:7px;position:absolute;top:-3px;left:0;right:0;cursor:n-resize;z-index:2}.pptist-editor[data-v-55178b6a]{height:100%}.layout-header[data-v-55178b6a]{height:40px}.layout-content[data-v-55178b6a]{height:calc(100% - 40px);display:flex}.layout-content-left[data-v-55178b6a]{width:160px;height:100%;flex-shrink:0}.layout-content-center[data-v-55178b6a]{width:calc(100% - 420px)}.layout-content-center .center-top[data-v-55178b6a]{height:40px}.layout-content-right[data-v-55178b6a]{width:260px;height:100%}.screen-element-chart[data-v-85370c80]{position:absolute}.element-content[data-v-85370c80]{width:100%;height:100%}.link[data-v-11126f7d]{cursor:pointer}.screen-slide[data-v-a094625a]{position:absolute;top:0;left:0;transform-origin:0 0}.background[data-v-a094625a]{width:100%;height:100%;background-position:50%;position:absolute}.slide-thumbnails[data-v-26398174]{width:100%;height:100%;position:fixed;top:0;left:0;background-color:#1a1a1a;z-index:99}.return-button[data-v-26398174]{height:60px;padding:20px 30px 0}.return-button .icon[data-v-26398174]{color:#fff;font-size:36px;cursor:pointer}.return-button .icon[data-v-26398174]:hover{color:#d14424}.slide-thumbnails-content[data-v-26398174]{height:calc(100% - 100px);padding:20px 30px 30px 30px;display:flex;flex-wrap:wrap;align-content:flex-start;overflow:auto;overflow:overlay}.slide-thumbnails-content .thumbnail[data-v-26398174]{width:150px;outline:2px solid #aaa;margin-right:12px;margin-bottom:12px}.slide-thumbnails-content .thumbnail[data-v-26398174]:hover{outline-color:#d14424}.slide-thumbnails-content .thumbnail.active[data-v-26398174]{outline-width:3px;outline-color:#d14424}.writing-board[data-v-7ff9fa00]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:8;cursor:none}.blackboard[data-v-7ff9fa00]{width:100%;height:100%;background-color:#0f392b}.canvas[data-v-7ff9fa00]{position:absolute;top:0;right:0;bottom:0;left:0}.eraser[data-v-7ff9fa00],.pen[data-v-7ff9fa00]{pointer-events:none;position:fixed;z-index:9}.eraser .icon[data-v-7ff9fa00],.pen .icon[data-v-7ff9fa00]{filter:drop-shadow(2px 2px 2px #555)}.eraser[data-v-7ff9fa00]{display:flex;justify-content:center;align-items:center;border-radius:50%;border:4px solid rgba(85,85,85,.15);color:rgba(85,85,85,.75)}.writing-board-tool[data-v-7a2e5324]{font-size:12px}.writing-board-tool .tools[data-v-7a2e5324]{height:50px;position:fixed;bottom:5px;left:5px;z-index:11;padding:12px;background-color:#eee;border-radius:2px;display:flex;align-items:center}.writing-board-tool .btn[data-v-7a2e5324]{padding:5px 10px;cursor:pointer}.writing-board-tool .btn[data-v-7a2e5324]:hover{color:#d14424}.writing-board-tool .btn.active[data-v-7a2e5324]{background-color:rgba(209,68,36,.5);color:#fff}.writing-board-tool .icon[data-v-7a2e5324]{font-size:20px}.writing-board-tool .colors[data-v-7a2e5324]{display:flex;padding:0 10px}.writing-board-tool .color[data-v-7a2e5324]{width:16px;height:16px;border-radius:2px;cursor:pointer}.writing-board-tool .color[data-v-7a2e5324]:hover{transform:scale(1.15)}.writing-board-tool .color.active[data-v-7a2e5324]{transform:scale(1.3)}.writing-board-tool .color+.color[data-v-7a2e5324]{margin-left:8px}.pptist-screen[data-v-42d1fb1f]{width:100%;height:100%;position:relative;background-color:#111}.slide-list[data-v-42d1fb1f]{background:#1d1d1d;position:relative;width:100%;height:100%}.slide-item[data-v-42d1fb1f]{position:absolute;top:0;left:0;width:100%;height:100%}.slide-item.current[data-v-42d1fb1f]{z-index:2}.slide-item.hide[data-v-42d1fb1f]{opacity:0}.slide-item.turning-mode-no.before[data-v-42d1fb1f]{transform:translateY(-100%)}.slide-item.turning-mode-no.after[data-v-42d1fb1f]{transform:translateY(100%)}.slide-item.turning-mode-fade[data-v-42d1fb1f]{transition:opacity .75s}.slide-item.turning-mode-fade.after[data-v-42d1fb1f],.slide-item.turning-mode-fade.before[data-v-42d1fb1f]{pointer-events:none;opacity:0}.slide-item.turning-mode-slideX[data-v-42d1fb1f]{transition:transform .35s}.slide-item.turning-mode-slideX.before[data-v-42d1fb1f]{transform:translateX(-100%)}.slide-item.turning-mode-slideX.after[data-v-42d1fb1f]{transform:translateX(100%)}.slide-item.turning-mode-slideY[data-v-42d1fb1f]{transition:transform .35s}.slide-item.turning-mode-slideY.before[data-v-42d1fb1f]{transform:translateY(-100%)}.slide-item.turning-mode-slideY.after[data-v-42d1fb1f]{transform:translateY(100%)}.slide-content[data-v-42d1fb1f]{background-color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;justify-content:center;align-items:center}.tools[data-v-42d1fb1f]{position:fixed;bottom:8px;left:8px;font-size:25px;color:#666;z-index:10;cursor:pointer}.tool-btn[data-v-42d1fb1f]{opacity:.35}.tool-btn[data-v-42d1fb1f]:hover{opacity:.9}.tool-btn+.tool-btn[data-v-42d1fb1f]{margin-left:8px}.page-number[data-v-42d1fb1f]{position:fixed;bottom:8px;right:8px;padding:8px 12px;color:#666;background-color:#eee;border-radius:2px;z-index:10;cursor:pointer}#app{height:100%}.ProseMirror,.ProseMirror-static{outline:0;border:0;font-size:20px;word-break:break-word}.ProseMirror-static:not(.ProseMirror-static),.ProseMirror:not(.ProseMirror-static){-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ProseMirror-static ::-moz-selection,.ProseMirror ::-moz-selection{background-color:rgba(209,68,36,.3);color:inherit}.ProseMirror-static ::selection,.ProseMirror ::selection{background-color:rgba(209,68,36,.3);color:inherit}.ProseMirror-static p+p,.ProseMirror p+p{margin-top:5px}.ProseMirror-static ul,.ProseMirror ul{list-style-type:disc;-webkit-padding-start:20px;padding-inline-start:20px}.ProseMirror-static ul li,.ProseMirror ul li{list-style-type:disc}.ProseMirror-static ol,.ProseMirror ol{list-style-type:decimal;-webkit-padding-start:20px;padding-inline-start:20px}.ProseMirror-static ol li,.ProseMirror ol li{list-style-type:decimal}.ProseMirror-static code,.ProseMirror code{background-color:#eee;padding:1px 3px;margin:0 1px;border-radius:2px;font-family:inherit}.ProseMirror-static blockquote,.ProseMirror blockquote{overflow:hidden;padding-right:1.2em;padding-left:1.2em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ProseMirror-selectednode{outline:none!important}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}body,html{height:100%;overflow:hidden;background-color:#fff;color:#41464b}li,ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:""}table{border-collapse:collapse;border-spacing:0}a{text-decoration:none}::-webkit-scrollbar{width:5px;height:5px;background-color:#fff}::-webkit-scrollbar-thumb{background-color:#c1c1c1}.ant-popover{padding-top:5px!important}.ant-popover-arrow{display:none}.ant-popover-inner{box-shadow:3px 3px 3px rgba(0,0,0,.15);border:1px solid #eee}.ant-popover-inner-content{padding:12px!important}.ant-dropdown{min-width:120px}.ant-dropdown-menu{box-shadow:3px 3px 3px rgba(0,0,0,.15)}.ant-dropdown-menu-item:hover{background-color:rgba(209,68,36,.2)}.ant-btn.no-padding{padding:0}.ant-radio-button-wrapper{text-align:center}.ant-slider-track{background-color:#d14424}.ant-slider-handle{border-color:#d14424}.ant-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-item-option-active:not(.ant-select-item-option-disabled){background-color:rgba(209,68,36,.2)}.ant-tooltip-inner{font-size:12px}@font-face{font-family:仓耳小丸子;src:url(../fonts/仓耳小丸子.676e187a.ttf)}@font-face{font-family:优设标题黑;src:url(../fonts/优设标题黑.1726685c.ttf)}@font-face{font-family:峰广明锐体;src:url(../fonts/峰广明锐体.8bdb14f7.ttf)}@font-face{font-family:摄图摩登小方体;src:url(../fonts/摄图摩登小方体.de722238.ttf)}@font-face{font-family:站酷快乐体;src:url(../fonts/站酷快乐体.0aceab97.ttf)}@font-face{font-family:字制区喜脉体;src:url(../fonts/字制区喜脉体.fc4a0c7d.ttf)}@font-face{font-family:素材集市康康体;src:url(../fonts/素材集市康康体.8db9d61f.ttf)}@font-face{font-family:联盟起艺卢帅正锐黑体;src:url(../fonts/联盟起艺卢帅正锐黑体.42cb84f9.ttf)}@font-face{font-family:素材集市酷方体;src:url(../fonts/素材集市酷方体.8d33b29e.ttf)}@font-face{font-family:途牛类圆体;src:url(../fonts/途牛类圆体.abaea3c4.ttf)}@font-face{font-family:锐字真言体;src:url(../fonts/锐字真言体.1583afec.ttf)}@font-face{font-family:阿里汉仪智能黑体;src:url(../fonts/阿里汉仪智能黑体.08b44aa7.ttf)}.input[data-v-d6089858]{display:none}.checkbox-button[data-v-7cae2b90]{outline:0;background-color:#fff;border:1px solid #d9d9d9;font-size:13px;padding:0 15px;height:32px;text-align:center;cursor:pointer}.checkbox-button[data-v-7cae2b90]:hover{color:#d14424}.checkbox-button.checked[data-v-7cae2b90]{color:#fff;background-color:#d14424;border-color:#d14424}.checkbox-button.checked[data-v-7cae2b90]:hover{background:rgba(209,68,36,.9);border-color:rgba(209,68,36,.9)}.checkbox-button-group[data-v-7dafd0a9]{display:flex;align-items:center}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button{border-radius:0;border-left-width:0;border-right-width:0;display:inline-block}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button+.checkbox-button{border-left-width:1px}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px;border-left-width:1px}.checkbox-button-group[data-v-7dafd0a9] .checkbox-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right-width:1px}.checkerboard[data-v-0a544b87]{background-size:contain}.alpha-checkboard-wrap[data-v-6f2cb744],.alpha[data-v-6f2cb744],.checkerboard[data-v-0a544b87]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-checkboard-wrap[data-v-6f2cb744]{overflow:hidden}.alpha-gradient[data-v-6f2cb744]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-container[data-v-6f2cb744]{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.alpha-pointer[data-v-6f2cb744]{z-index:2;position:absolute}.alpha-picker[data-v-6f2cb744]{cursor:pointer;width:4px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;margin-top:1px;transform:translateX(-2px)}.hue[data-v-1766620e]{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);position:absolute;top:0;right:0;bottom:0;left:0}.hue-container[data-v-1766620e]{cursor:pointer;margin:0 2px;position:relative;height:100%}.hue-pointer[data-v-1766620e]{z-index:2;position:absolute;top:0}.hue-picker[data-v-1766620e]{cursor:pointer;margin-top:1px;width:4px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;transform:translateX(-2px)}.saturation-black[data-v-8982eb4a],.saturation-white[data-v-8982eb4a],.saturation[data-v-8982eb4a]{position:absolute;top:0;right:0;bottom:0;left:0;cursor:pointer}.saturation-white[data-v-8982eb4a]{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.saturation-black[data-v-8982eb4a]{background:linear-gradient(0deg,#000,transparent)}.saturation-pointer[data-v-8982eb4a]{cursor:pointer;position:absolute}.saturation-circle[data-v-8982eb4a]{width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}.editable-input[data-v-00ea8dfc]{width:100%;position:relative;overflow:hidden;text-align:center;font-size:14px}.editable-input[data-v-00ea8dfc]:after{content:"#";position:absolute;left:0;top:50%;transform:translateY(-50%);color:#999}.input-content[data-v-00ea8dfc]{width:100%;padding:3px;border:0;border-bottom:1px solid #ddd;outline:none;text-align:center}.input-label[data-v-00ea8dfc]{text-transform:capitalize}.color-picker[data-v-210672ee]{position:relative;width:240px;background:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:-10px}.picker-saturation-wrap[data-v-210672ee]{width:100%;padding-bottom:50%;position:relative;overflow:hidden}.picker-controls[data-v-210672ee]{display:flex}.picker-sliders[data-v-210672ee]{padding:4px 0;flex:1}.picker-hue-wrap[data-v-210672ee]{position:relative;height:10px}.picker-alpha-wrap[data-v-210672ee]{position:relative;height:10px;margin-top:4px;overflow:hidden}.picker-color-wrap[data-v-210672ee]{width:24px;height:24px;position:relative;margin-top:4px;margin-right:4px;outline:1px dashed hsla(0,0%,40%,.12)}.picker-color-wrap .checkerboard[data-v-210672ee]{background-size:auto}.picker-current-color[data-v-210672ee]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2}.picker-field[data-v-210672ee]{margin-bottom:8px}.picker-presets[data-v-210672ee]{display:flex;flex-wrap:wrap;align-content:flex-start}.picker-presets-color[data-v-210672ee]{width:7%;margin-bottom:3.33333%;height:0;padding-bottom:7%;flex-shrink:0;position:relative;cursor:pointer}.picker-presets-color[data-v-210672ee]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-presets[data-v-210672ee]{display:flex;flex-wrap:wrap;align-content:flex-start}.picker-gradient-col[data-v-210672ee]{width:7%;margin-bottom:3.33333%;display:flex;flex-direction:column}.picker-gradient-col[data-v-210672ee]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-color[data-v-210672ee]{width:100%;height:0;padding-bottom:100%;position:relative;cursor:pointer}.recent-colors-title[data-v-210672ee]{font-size:12px;margin-bottom:4px}.recent-colors[data-v-210672ee]{display:flex;flex-wrap:wrap;align-content:flex-start}.fullscreen-spin[data-v-6275c730]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:100;display:flex;justify-content:center;align-items:center;background-color:hsla(0,0%,94.5%,.7)}.menu-content[data-v-eb1555e8]{width:170px;padding:5px 0;background:#fff;border:1px solid #eee;box-shadow:3px 3px 3px rgba(0,0,0,.15);border-radius:2px;list-style:none;margin:0}.menu-item[data-v-eb1555e8]{padding:0 20px;color:#555;font-size:12px;transition:all .1s;white-space:nowrap;height:30px;line-height:30px;background-color:#fff;cursor:pointer}.menu-item:not(.disable):hover>.menu-item-content>.sub-menu[data-v-eb1555e8]{display:block}.menu-item:not(.disable):hover>.has-children.has-handler[data-v-eb1555e8]:after{transform:scale(1)}.menu-item[data-v-eb1555e8]:hover:not(.disable){background-color:rgba(209,68,36,.2)}.menu-item.divider[data-v-eb1555e8]{height:1px;overflow:hidden;margin:5px;background-color:#e5e5e5;line-height:0;padding:0}.menu-item.disable[data-v-eb1555e8]{color:#b1b1b1;cursor:no-drop}.menu-item-content[data-v-eb1555e8]{display:flex;align-items:center;justify-content:space-between;position:relative}.menu-item-content.has-children[data-v-eb1555e8]:before{content:"";display:inline-block;width:8px;height:8px;border-width:1px;border-style:solid;border-color:#666 #666 transparent transparent;position:absolute;right:0;top:50%;transform:translateY(-50%) rotate(45deg)}.menu-item-content.has-children.has-handler[data-v-eb1555e8]:after{content:"";display:inline-block;width:1px;height:24px;background-color:#f1f1f1;position:absolute;right:18px;top:3px;transform:scale(0);transition:transform .2s}.menu-item-content .sub-text[data-v-eb1555e8]{opacity:.6}.menu-item-content .sub-menu[data-v-eb1555e8]{width:120px;position:absolute;display:none;left:112%;top:-6px}.mask{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:9998}.contextmenu{position:fixed;z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} \ No newline at end of file diff --git a/index.html b/index.html index a9b6ab94..f639558c 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -PPTIST - 在线演示文稿
\ No newline at end of file +PPTIST - 在线演示文稿
\ No newline at end of file diff --git a/js/app.398096e5.js b/js/app.398096e5.js deleted file mode 100644 index 6f955851..00000000 --- a/js/app.398096e5.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var o,a,r=t[0],i=t[1],u=t[2],s=0,f=[];sPPTIST

",rotate:0,defaultFontName:"Microsoft Yahei",defaultColor:"#333"},{type:"text",id:"7stmVP",left:355,top:253.25,width:585,height:56,content:"

基于 Vue 3.x + TypeScript 的在线演示文稿应用

",rotate:0,defaultFontName:"Microsoft Yahei",defaultColor:"#333"},{type:"line",id:"FnpZs4",left:361,top:238,start:[0,0],end:[549,0],points:["",""],color:"#5b9bd5",style:"solid",width:2}],background:{type:"solid",color:"#ffffff"}}],k={themeColor:"#5b9bd5",fontColor:"#333",fontName:"Microsoft Yahei",backgroundColor:"#fff"},I=n("5530"),w=n("b85c"),S=(n("b0c0"),n("1913"),function(e,t){return Array.isArray(e)&&e.indexOf(t.type)>-1||t.type===e}),N=function(e,t){for(var n=e.depth;n>0;n--){var o=e.node(n);if(t(o))return{pos:n>0?e.before(n):0,start:e.start(n),depth:n,node:o}}},T=function(e){return function(t){return N(t.$from,e)}},L=function(e){return function(t){return T((function(t){return S(e,t)}))(t)}},V=function(e,t){var n=t.schema.nodes[e];return!!L(n)(t.selection)},_=function(e){var t,n,o=e.state,c=o.selection,l=o.doc,a=c.from,r=l.nodeAt(a)||l.nodeAt(a-1);return null!==(t=r)&&void 0!==t&&t.lastChild&&(r=r.lastChild),(null===(n=r)||void 0===n?void 0:n.marks)||[]},B=function(e,t,n){var o,c=Object(w["a"])(e);try{for(c.s();!(o=c.n()).done;){var l=o.value;if(l.type.name===t&&l.attrs[n])return l.attrs[n]}}catch(a){c.e(a)}finally{c.f()}return null},D=function(e,t){var n,o=Object(w["a"])(e);try{for(o.s();!(n=o.n()).done;){var c=n.value;if(c.type.name===t)return!0}}catch(l){o.e(l)}finally{o.f()}return!1},M=function(e,t){var n=e.state,o=n.selection,c=n.doc,l=o.from,a=o.to,r=!0,i="";return c.nodesBetween(l,a,(function(e){return r&&e.attrs[t]&&(r=!1,i=e.attrs[t]),r})),i},A={color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",align:"left"},z=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=Object(I["a"])(Object(I["a"])({},A),t);var n=_(e),o=D(n,"strong"),c=D(n,"em"),l=D(n,"underline"),a=D(n,"strikethrough"),r=D(n,"superscript"),i=D(n,"subscript"),u=D(n,"code"),d=B(n,"forecolor","color")||t.color,s=B(n,"backcolor","backcolor")||t.backcolor,f=B(n,"fontsize","fontsize")||t.fontsize,p=B(n,"fontname","fontname")||t.fontname,m=M(e,"align")||t.align,b=V("bullet_list",e.state),v=V("ordered_list",e.state),O=V("blockquote",e.state);return{bold:o,em:c,underline:l,strikethrough:a,superscript:r,subscript:i,code:u,color:d,backcolor:s,fontsize:f,fontname:p,align:m,bulletList:b,orderedList:v,blockquote:O}},P={bold:!1,em:!1,underline:!1,strikethrough:!1,superscript:!1,subscript:!1,code:!1,color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",align:"left",bulletList:!1,orderedList:!1,blockquote:!1},R={activeElementIdList:[],handleElementId:"",activeGroupElementId:"",canvasPercentage:90,canvasScale:1,thumbnailsFocus:!1,editorAreaFocus:!1,disableHotkeys:!1,showGridLines:!1,creatingElement:null,availableFonts:[],toolbarState:"slideDesign",viewportRatio:.5625,theme:k,slides:x,slideIndex:0,selectedSlidesIndex:[],snapshotCursor:-1,snapshotLength:0,ctrlKeyState:!1,shiftKeyState:!1,screening:!1,clipingImageElementId:"",richTextAttrs:P,selectedTableCells:[],isScaling:!1,editingShapeElementId:""},F=(n("d81d"),n("4de4"),n("caad"),n("2532"),n("7db0"),n("66cb")),H=n.n(F),U=[{id:"template",elements:[{type:"shape",id:"4cbRxp",left:0,top:200,width:546,height:362.5,viewBox:200,path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,opacity:.7,rotate:0},{type:"shape",id:"ookHrf",left:0,top:0,width:300,height:320,viewBox:200,path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,flipV:!0,rotate:0},{type:"text",id:"AkIh3E",left:355,top:95.11111111111111,width:585,height:116,lineHeight:1.2,content:"

输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",wordSpace:6},{type:"text",id:"7stmVP",left:355,top:253.25,width:585,height:56,content:"

请在此处输入副标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"line",id:"FnpZs4",left:361,top:238,start:[0,0],end:[549,0],points:["",""],color:"{{themeColor}}",style:"solid",width:2}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"ptNnUJ",left:145,top:148,width:711,height:77,lineHeight:1.2,content:"

在此处添加标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"mRHvQN",left:207.50000000000003,top:249.84259259259264,width:585,height:56,content:"

在此处添加副标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"line",id:"7CQDwc",left:323.09259259259267,top:238.33333333333334,start:[0,0],end:[354.8148148148148,0],points:["",""],color:"{{themeColor}}",style:"solid",width:4},{type:"shape",id:"09wqWw",left:-27.648148148148138,top:432.73148148148147,width:1056.2962962962963,height:162.96296296296296,viewBox:200,path:"M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"vSheCJ",left:183.5185185185185,top:175.5092592592593,width:605.1851851851851,height:185.18518518518516,viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0},{type:"shape",id:"Mpwv7x",left:211.29629629629628,top:201.80555555555557,width:605.1851851851851,height:185.18518518518516,viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,opacity:.7},{type:"text",id:"WQOTAp",left:304.9074074074074,top:198.10185185185182,width:417.9629629629629,height:140,content:"

感谢观看

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",wordSpace:5}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"MZVO1kkj",elements:[{type:"shape",id:"cql0h8",left:0,top:0,width:352.59259259259255,height:562.5,viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0},{type:"shape",id:"_RTaF4",left:171.4814814814814,top:100.13888888888887,width:362.22222222222223,height:362.22222222222223,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"rgba(255,255,255,0)",fixedRatio:!1,rotate:0,outline:{width:10,color:"{{backgroundColor}}",style:"solid"}},{type:"shape",id:"UZfo8N",left:216.66666666666663,top:145.32407407407408,width:271.85185185185185,height:271.85185185185185,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{backgroundColor}}",fixedRatio:!1,rotate:0,text:{content:"

01

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"ysqtBg",left:561.4814814814814,top:100.1388888888889,width:359.25925925925924,height:80,content:"

在此处输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"lXsoHa",left:572.5925925925925,top:202.3611111111111,width:257.77777777777777,height:260,content:"
  1. 在此处输入内容

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",lineHeight:2,fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"EBBnTr",left:360.5996472663139,top:141.8496472663139,width:278.80070546737215,height:278.80070546737215,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:0,color:"{{backgroundColor}}",style:"solid"}},{type:"shape",id:"gDIWDH",left:456.4373897707231,top:98.287037037037,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

1

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"DUWT7E",left:317.037037037037,top:237.68738977072314,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

4

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"pbhn38",left:456.43738977072303,top:377.08774250440916,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

3

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"CvMKrO",left:595.8377425044091,top:237.6873897707231,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

2

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"adudHB",left:402.962962962963,top:39.39814814814815,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"9UpDwg",left:402.962962962963,top:473.1018518518518,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"GERdpB",left:111.48148148148151,top:256.25,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"G5qoho",left:691.1111111111111,top:256.25,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"shape",id:"vdZcI6",left:415.18518518518516,top:196.4351851851852,width:169.62962962962962,height:169.62962962962962,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{backgroundColor}}",fixedRatio:!1,rotate:0}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"tYUmrx",left:156.66666666666683,top:149.02777777777771,width:264.4444444444445,height:264.4444444444445,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

01

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"0GVHf8",left:342.2222222222223,top:217.17592592592587,width:128.14814814814812,height:128.14814814814812,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{backgroundColor}}",fixedRatio:!1,rotate:0},{type:"text",id:"BO33Sv",left:378.8888888888889,top:235.24999999999994,width:464.4444444444444,height:92,content:"

在此处添加标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"Hj7ttp",left:69.35185185185185,top:49.21759259259262,width:420,height:63,lineHeight:1.2,content:"

1.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"FmKMNB",left:69.35185185185185,top:129.28240740740745,width:420,height:384,content:"

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"rI7ZeO",left:510.64814814814815,top:49.21759259259262,width:420,height:63,lineHeight:1.2,content:"

2.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"KspwGc",left:510.64814814814815,top:129.28240740740745,width:420,height:384,content:"

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"Rx63Jo",left:69.35185185185179,top:51.71759259259262,width:420,height:58,lineHeight:1.2,content:"

1.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"ulyuzE",left:69.35185185185179,top:131.78240740740745,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"kr35Ca",left:510.6481481481481,top:51.71759259259262,width:420,height:58,lineHeight:1.2,content:"

2.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"BNQSpC",left:510.6481481481481,top:131.78240740740745,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"Vr38Nu",left:69.35185185185185,top:301.71759259259255,width:420,height:58,lineHeight:1.2,content:"

3.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"IwKRSu",left:69.35185185185185,top:381.7824074074074,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"0Opr1v",left:510.64814814814815,top:301.71759259259255,width:420,height:58,lineHeight:1.2,content:"

4.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"4L9Uzz",left:510.64814814814815,top:381.7824074074074,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"GdEGxg",left:134.53703703703704,top:127.25,width:152.77777777777777,height:308,lineHeight:1.8,content:"

请在此处输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",wordSpace:8,fill:"{{themeColor}}"},{type:"text",id:"y5sAfw",left:332.8703703703704,top:127.25,width:532.5925925925926,height:50,content:"

请在此处输入内容1

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"VeuocM",left:332.8703703703704,top:212.0648148148148,width:532.5925925925926,height:50,content:"

请在此处输入内容2

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"RyFWQe",left:332.8703703703704,top:296.8796296296296,width:532.5925925925926,height:50,content:"

请在此处输入内容3

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"Q56viI",left:332.8703703703704,top:381.69444444444446,width:532.5925925925926,height:50,content:"

请在此处输入内容4

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"SUWirT",left:73.8888888888889,top:64.21296296296302,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

1

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"YjzN1M",left:148.70370370370372,top:64.21296296296302,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"fS09I7",left:527.5925925925926,top:64.21296296296302,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

2

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"qCnfB1",left:602.4074074074074,top:64.21296296296302,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"difAAT",left:73.8888888888889,top:221.25000000000003,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

3

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"EUlvMo",left:148.70370370370372,top:221.25000000000003,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"US_9jB",left:527.5925925925926,top:221.25000000000003,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

4

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"243MnQ",left:602.4074074074074,top:221.25000000000003,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"Y_KUj0",left:73.8888888888889,top:378.287037037037,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

5

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"9GglMe",left:148.70370370370372,top:378.287037037037,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"eSInje",left:527.5925925925926,top:378.287037037037,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

6

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"0S3yUg",left:602.4074074074074,top:378.287037037037,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}}],G={currentSlide:function(e){return e.slides[e.slideIndex]||null},currentSlideAnimations:function(e){var t=e.slides[e.slideIndex];if(!t)return null;var n=t.animations;if(!n)return null;var o=t.elements,c=o.map((function(e){return e.id}));return n.filter((function(e){return c.includes(e.elId)}))},layouts:function(e){var t=e.theme,n=t.themeColor,o=t.fontColor,c=t.fontName,l=t.backgroundColor,a=H()(o).isDark()?"rgba(230, 230, 230, 0.5)":"rgba(180, 180, 180, 0.5)",r=JSON.stringify(U).replaceAll("{{themeColor}}",n).replaceAll("{{fontColor}}",o).replaceAll("{{fontName}}",c).replaceAll("{{backgroundColor}}",l).replaceAll("{{subColor}}",a);return JSON.parse(r)},activeElementList:function(e){var t=e.slides[e.slideIndex];return t&&t.elements?t.elements.filter((function(t){return e.activeElementIdList.includes(t.id)})):[]},handleElement:function(e){var t=e.slides[e.slideIndex];return t&&t.elements&&t.elements.find((function(t){return e.handleElementId===t.id}))||null},canUndo:function(e){return e.snapshotCursor>0},canRedo:function(e){return e.snapshotCursor=0&&n.snapshotCursori&&(l.push(c[0]),r--),r>=2&&te.snapshots.update(c[r-2],{index:n.slideIndex}),t.next=15,te.snapshots.bulkDelete(l);case 15:o(y.SET_SNAPSHOT_CURSOR,r-1),o(y.SET_SNAPSHOT_LENGTH,r);case 17:case"end":return t.stop()}}),t)})))()})),Object(q["a"])(W,E.UN_DO,(function(e){return Object(X["a"])(regeneratorRuntime.mark((function t(){var n,o,c,l,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(n=e.state,o=e.commit,!(n.snapshotCursor<=0)){t.next=3;break}return t.abrupt("return");case 3:return c=n.snapshotCursor-1,t.next=6,te.snapshots.orderBy("id").toArray();case 6:l=t.sent,a=l[c],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,o(y.SET_SLIDES,i),o(y.UPDATE_SLIDE_INDEX,u),o(y.SET_SNAPSHOT_CURSOR,c),o(y.SET_ACTIVE_ELEMENT_ID_LIST,[]);case 14:case"end":return t.stop()}}),t)})))()})),Object(q["a"])(W,E.RE_DO,(function(e){return Object(X["a"])(regeneratorRuntime.mark((function t(){var n,o,c,l,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(n=e.state,o=e.commit,!(n.snapshotCursor>=n.snapshotLength-1)){t.next=3;break}return t.abrupt("return");case 3:return c=n.snapshotCursor+1,t.next=6,te.snapshots.orderBy("id").toArray();case 6:l=t.sent,a=l[c],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,o(y.SET_SLIDES,i),o(y.UPDATE_SLIDE_INDEX,u),o(y.SET_SNAPSHOT_CURSOR,c),o(y.SET_ACTIVE_ELEMENT_ID_LIST,[]);case 14:case"end":return t.stop()}}),t)})))()})),W),oe=n("2909"),ce=(n("a434"),n("99af"),n("c740"),n("2ef0")),le=[{label:"Arial",value:"Arial"},{label:"微软雅黑",value:"Microsoft Yahei"},{label:"宋体",value:"SimSun"},{label:"黑体",value:"SimHei"},{label:"楷体",value:"KaiTi"},{label:"新宋体",value:"NSimSun"},{label:"仿宋",value:"FangSong"},{label:"苹方",value:"PingFang SC"},{label:"华文黑体",value:"STHeiti"},{label:"华文楷体",value:"STKaiti"},{label:"华文宋体",value:"STSong"},{label:"华文仿宋",value:"STFangSong"},{label:"华文中宋",value:"STZhongSong"},{label:"华文琥珀",value:"STHupo"},{label:"华文新魏",value:"STXinwei"},{label:"华文隶书",value:"STLiti"},{label:"华文行楷",value:"STXingkai"},{label:"冬青黑体",value:"Hiragino Sans GB"},{label:"兰亭黑",value:"Lantinghei SC"},{label:"偏偏体",value:"Hanzipen SC"},{label:"手札体",value:"Hannotate SC"},{label:"宋体",value:"Songti SC"},{label:"娃娃体",value:"Wawati SC"},{label:"行楷",value:"Xingkai SC"},{label:"圆体",value:"Yuanti SC"},{label:"华文细黑",value:"STXihei"},{label:"幼圆",value:"YouYuan"},{label:"隶书",value:"LiSu"}],ae=[{label:"仓耳小丸子",value:"仓耳小丸子"},{label:"优设标题黑",value:"优设标题黑"},{label:"峰广明锐体",value:"峰广明锐体"},{label:"摄图摩登小方体",value:"摄图摩登小方体"},{label:"站酷快乐体",value:"站酷快乐体"},{label:"字制区喜脉体",value:"字制区喜脉体"},{label:"素材集市康康体",value:"素材集市康康体"},{label:"联盟起艺卢帅正锐黑体",value:"联盟起艺卢帅正锐黑体"},{label:"素材集市酷方体",value:"素材集市酷方体"},{label:"途牛类圆体",value:"途牛类圆体"},{label:"锐字真言体",value:"锐字真言体"},{label:"阿里汉仪智能黑体",value:"阿里汉仪智能黑体"}],re=(n("a15b"),function(e){if("string"!==typeof e)return!1;var t="Arial";if(e.toLowerCase()===t.toLowerCase())return!0;var n=100,o=100,c=100,l="a",a=document.createElement("canvas"),r=a.getContext("2d");if(!r)return!1;a.width=o,a.height=c,r.textAlign="center",r.fillStyle="black",r.textBaseline="middle";var i=function(e){r.clearRect(0,0,o,c),r.font="".concat(n,"px ").concat(e,", ").concat(t),r.fillText(l,o/2,c/2);var a=r.getImageData(0,0,o,c).data;return[].slice.call(a).filter((function(e){return 0!==e}))};return i(t).join("")!==i(e).join("")}),ie=(Y={},Object(q["a"])(Y,y.SET_ACTIVE_ELEMENT_ID_LIST,(function(e,t){1===t.length?e.handleElementId=t[0]:e.handleElementId="",e.activeElementIdList=t})),Object(q["a"])(Y,y.SET_HANDLE_ELEMENT_ID,(function(e,t){e.handleElementId=t})),Object(q["a"])(Y,y.SET_ACTIVE_GROUP_ELEMENT_ID,(function(e,t){e.activeGroupElementId=t})),Object(q["a"])(Y,y.SET_CANVAS_PERCENTAGE,(function(e,t){e.canvasPercentage=t})),Object(q["a"])(Y,y.SET_CANVAS_SCALE,(function(e,t){e.canvasScale=t})),Object(q["a"])(Y,y.SET_THUMBNAILS_FOCUS,(function(e,t){e.thumbnailsFocus=t})),Object(q["a"])(Y,y.SET_EDITORAREA_FOCUS,(function(e,t){e.editorAreaFocus=t})),Object(q["a"])(Y,y.SET_DISABLE_HOTKEYS_STATE,(function(e,t){e.disableHotkeys=t})),Object(q["a"])(Y,y.SET_GRID_LINES_STATE,(function(e,t){e.showGridLines=t})),Object(q["a"])(Y,y.SET_CREATING_ELEMENT,(function(e,t){e.creatingElement=t})),Object(q["a"])(Y,y.SET_AVAILABLE_FONTS,(function(e){e.availableFonts=le.filter((function(e){return re(e.value)}))})),Object(q["a"])(Y,y.SET_TOOLBAR_STATE,(function(e,t){e.toolbarState=t})),Object(q["a"])(Y,y.SET_CLIPING_IMAGE_ELEMENT_ID,(function(e,t){e.clipingImageElementId=t})),Object(q["a"])(Y,y.SET_RICHTEXT_ATTRS,(function(e,t){e.richTextAttrs=t})),Object(q["a"])(Y,y.SET_SELECTED_TABLE_CELLS,(function(e,t){e.selectedTableCells=t})),Object(q["a"])(Y,y.SET_SCALING_STATE,(function(e,t){e.isScaling=t})),Object(q["a"])(Y,y.SET_EDITING_SHAPE_ELEMENT_ID,(function(e,t){e.editingShapeElementId=t})),Object(q["a"])(Y,y.SET_THEME,(function(e,t){e.theme=Object(I["a"])(Object(I["a"])({},e.theme),t)})),Object(q["a"])(Y,y.SET_VIEWPORT_RATIO,(function(e,t){e.viewportRatio=t})),Object(q["a"])(Y,y.SET_SLIDES,(function(e,t){e.slides=t})),Object(q["a"])(Y,y.ADD_SLIDE,(function(e,t){var n,o=Array.isArray(t)?t:[t],c=e.slideIndex+1;(n=e.slides).splice.apply(n,[c,0].concat(Object(oe["a"])(o))),e.slideIndex=c})),Object(q["a"])(Y,y.UPDATE_SLIDE,(function(e,t){var n=e.slideIndex;e.slides[n]=Object(I["a"])(Object(I["a"])({},e.slides[n]),t)})),Object(q["a"])(Y,y.DELETE_SLIDE,(function(e,t){for(var n=Array.isArray(t)?t:[t],o=[],c=function(t){var c=e.slides.findIndex((function(e){return e.id===n[t]}));o.push(c)},l=0;lr&&(a=r),e.slideIndex=a,e.slides=e.slides.filter((function(e){return!n.includes(e.id)}))})),Object(q["a"])(Y,y.UPDATE_SLIDE_INDEX,(function(e,t){e.slideIndex=t})),Object(q["a"])(Y,y.UPDATE_SELECTED_SLIDES_INDEX,(function(e,t){e.selectedSlidesIndex=t})),Object(q["a"])(Y,y.ADD_ELEMENT,(function(e,t){var n=Array.isArray(t)?t:[t],o=e.slides[e.slideIndex].elements,c=[].concat(Object(oe["a"])(o),Object(oe["a"])(n));e.slides[e.slideIndex].elements=c})),Object(q["a"])(Y,y.UPDATE_ELEMENT,(function(e,t){var n=t.id,o=t.props,c="string"===typeof n?[n]:n,l=e.slideIndex,a=e.slides[l],r=a.elements.map((function(e){return c.includes(e.id)?Object(I["a"])(Object(I["a"])({},e),o):e}));e.slides[l].elements=r})),Object(q["a"])(Y,y.REMOVE_ELEMENT_PROPS,(function(e,t){var n=t.id,o=t.propName,c="string"===typeof o?[o]:o,l=e.slideIndex,a=e.slides[l],r=a.elements.map((function(e){return e.id===n?Object(ce["omit"])(e,c):e}));e.slides[l].elements=r})),Object(q["a"])(Y,y.SET_SNAPSHOT_CURSOR,(function(e,t){e.snapshotCursor=t})),Object(q["a"])(Y,y.SET_SNAPSHOT_LENGTH,(function(e,t){e.snapshotLength=t})),Object(q["a"])(Y,y.SET_CTRL_KEY_STATE,(function(e,t){e.ctrlKeyState=t})),Object(q["a"])(Y,y.SET_SHIFT_KEY_STATE,(function(e,t){e.shiftKeyState=t})),Object(q["a"])(Y,y.SET_SCREENING,(function(e,t){e.screening=t})),Y),ue=Symbol(),de=Object(C["a"])({state:R,getters:G,mutations:ie,actions:ne}),se=function(){return Object(C["b"])(ue)};Object(j["pushScopeId"])("data-v-55178b6a");var fe,pe,me,be,ve,Oe,he={class:"pptist-editor"},je={class:"layout-content"},ge={class:"layout-content-center"};function ye(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("EditorHeader"),r=Object(j["resolveComponent"])("Thumbnails"),i=Object(j["resolveComponent"])("CanvasTool"),u=Object(j["resolveComponent"])("Canvas"),d=Object(j["resolveComponent"])("Remark"),s=Object(j["resolveComponent"])("Toolbar");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",he,[Object(j["createVNode"])(a,{class:"layout-header"}),Object(j["createElementVNode"])("div",je,[Object(j["createVNode"])(r,{class:"layout-content-left"}),Object(j["createElementVNode"])("div",ge,[Object(j["createVNode"])(i,{class:"center-top"}),Object(j["createVNode"])(u,{class:"center-body",style:Object(j["normalizeStyle"])({height:"calc(100% - ".concat(e.remarkHeight+40,"px)")})},null,8,["style"]),Object(j["createVNode"])(d,{class:"center-bottom",height:e.remarkHeight,"onUpdate:height":t[0]||(t[0]=function(t){return e.remarkHeight=t}),style:Object(j["normalizeStyle"])({height:"".concat(e.remarkHeight,"px")})},null,8,["height","style"])]),Object(j["createVNode"])(s,{class:"layout-content-right"})])])}Object(j["popScopeId"])(),function(e){e["UP"]="up",e["DOWN"]="down",e["TOP"]="top",e["BOTTOM"]="bottom"}(fe||(fe={})),function(e){e["TOP"]="top",e["BOTTOM"]="bottom",e["LEFT"]="left",e["RIGHT"]="right",e["VERTICAL"]="vertical",e["HORIZONTAL"]="horizontal",e["CENTER"]="center"}(pe||(pe={})),function(e){e["T"]="top",e["B"]="bottom",e["L"]="left",e["R"]="right"}(me||(me={})),function(e){e["LEFT_TOP"]="left-top",e["TOP"]="top",e["RIGHT_TOP"]="right-top",e["LEFT"]="left",e["RIGHT"]="right",e["LEFT_BOTTOM"]="left-bottom",e["BOTTOM"]="bottom",e["RIGHT_BOTTOM"]="right-bottom"}(be||(be={})),function(e){e["START"]="start",e["END"]="end",e["MID"]="mid"}(ve||(ve={})),function(e){e["C"]="C",e["X"]="X",e["Z"]="Z",e["Y"]="Y",e["A"]="A",e["G"]="G",e["L"]="L",e["F"]="F",e["D"]="D",e["B"]="B",e["MINUS"]="-",e["EQUAL"]="=",e["DIGIT_0"]="0",e["DELETE"]="DELETE",e["UP"]="ARROWUP",e["DOWN"]="ARROWDOWN",e["LEFT"]="ARROWLEFT",e["RIGHT"]="ARROWRIGHT",e["ENTER"]="ENTER",e["SPACE"]=" ",e["TAB"]="TAB",e["BACKSPACE"]="BACKSPACE"}(Oe||(Oe={}));var Ee=[{type:"通用",children:[{label:"剪切",value:"Ctrl + X"},{label:"复制",value:"Ctrl + C"},{label:"粘贴",value:"Ctrl + V"},{label:"快速复制粘贴",value:"Ctrl + D"},{label:"全选",value:"Ctrl + A"},{label:"撤销",value:"Ctrl + Z"},{label:"恢复",value:"Ctrl + Y"},{label:"删除",value:"Delete / Backspace"},{label:"多选",value:"按住 Ctrl 或 Shift"}]},{type:"幻灯片放映",children:[{label:"开始放映幻灯片",value:"Ctrl + F"},{label:"切换上一页",value:"↑ / ←"},{label:"切换下一页",value:"↓ / → / Enter / Space"},{label:"退出放映",value:"ESC"}]},{type:"幻灯片编辑",children:[{label:"新建幻灯片",value:"Enter"},{label:"缩放画布",value:"Ctrl + 鼠标滚动"},{label:"放大画布",value:"Ctrl + ="},{label:"缩小画布",value:"Ctrl + -"},{label:"缩放画布到合适大小",value:"Ctrl + 0"},{label:"编辑上一页",value:"↑ / ← / 鼠标上滚"},{label:"编辑下一页",value:"↓ / → / 鼠标下滚"}]},{type:"元素操作",children:[{label:"移动",value:"↑ / ← / ↓ / →"},{label:"锁定",value:"Ctrl + L"},{label:"组合",value:"Ctrl + G"},{label:"取消组合",value:"Ctrl + Shift + G"},{label:"置顶层",value:"Alt + F"},{label:"置底层",value:"Alt + B"},{label:"锁定宽高比例",value:"按住 Ctrl 或 Shift"},{label:"创建水平 / 垂直线条",value:"按住 Ctrl 或 Shift"},{label:"切换焦点元素",value:"Tab"},{label:"确认图片裁剪",value:"Enter"}]},{type:"表格编辑",children:[{label:"聚焦到下一个单元格",value:"Tab"},{label:"在上方插入一行",value:"Ctrl + ↑"},{label:"在下方插入一行",value:"Ctrl + ↓"},{label:"在左侧插入一列",value:"Ctrl + ←"},{label:"在右侧插入一列",value:"Ctrl + →"}]},{type:"图表数据编辑",children:[{label:"聚焦到下一行",value:"Enter"}]},{type:"文本编辑",children:[{label:"加粗",value:"Ctrl + B"},{label:"斜体",value:"Ctrl + I"},{label:"下划线",value:"Ctrl + U"},{label:"删除线",value:"Ctrl + D"}]}],Ce=(n("3b18"),n("f64c")),xe=(n("a630"),n("3ca3"),function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6,t="_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",n=t.length,o="",c=0;c"),o=n.split("
"),c="",l=Object(w["a"])(o);try{for(l.s();!(t=l.n()).done;){var a=t.value;a&&(c+="
".concat(a,"
"))}}catch(r){l.e(r)}finally{l.f()}return c}),We=function(){var e=se(),t=Object(ce["debounce"])((function(){e.dispatch(E.ADD_SNAPSHOT)}),300,{trailing:!0}),n=Object(ce["throttle"])((function(){e.dispatch(E.RE_DO)}),100,{leading:!0,trailing:!1}),o=Object(ce["throttle"])((function(){e.dispatch(E.UN_DO)}),100,{leading:!0,trailing:!1});return{addHistorySnapshot:t,redo:n,undo:o}},Ye=(n("cb29"),function(e){return new Promise((function(t){var n=document.createElement("img");n.src=e,n.style.opacity="0",document.body.appendChild(n),n.onload=function(){var e=n.clientWidth,o=n.clientHeight;n.onload=null,n.onerror=null,document.body.removeChild(n),t({width:e,height:o})},n.onerror=function(){n.onload=null,n.onerror=null}}))}),Ze=function(e){return new Promise((function(t){var n=new FileReader;n.addEventListener("load",(function(){t(n.result)})),n.readAsDataURL(e)}))},Je=1e3,Ke=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.theme.themeColor})),n=Object(j["computed"])((function(){return e.state.theme.fontColor})),o=Object(j["computed"])((function(){return e.state.theme.fontName})),c=Object(j["computed"])((function(){return e.state.viewportRatio})),l=Object(j["computed"])((function(){return e.state.creatingElement})),a=We(),r=a.addHistorySnapshot,i=function(t){e.commit(y.ADD_ELEMENT,t),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[t.id]),l.value&&e.commit(y.SET_CREATING_ELEMENT,null),setTimeout((function(){e.commit(y.SET_EDITORAREA_FOCUS,!0)}),0),r()},u=function(e){Ye(e).then((function(t){var n=t.width,o=t.height,l=o/n;lJe?(n=Je,o=n*l):o>Je*c.value&&(o=Je*c.value,n=o/l),i({type:"image",id:xe(),src:e,width:n,height:o,left:(Je-n)/2,top:(Je*c.value-o)/2,fixedRatio:!0,rotate:0})}))},d=function(e){i({type:"chart",id:xe(),chartType:e,left:300,top:81.25,width:400,height:400,themeColor:[t.value],gridColor:n.value,data:{labels:["类别1","类别2","类别3","类别4","类别5"],series:[[12,19,5,2,18]]}})},s=function(e,l){for(var a={fontname:o.value,color:n.value},r=[],u=0;u1&&void 0!==arguments[1]?arguments[1]:"请输入内容",c=e.left,l=e.top,a=e.width,r=e.height;i({type:"text",id:xe(),left:c,top:l,width:a,height:r,content:t,rotate:0,defaultFontName:o.value,defaultColor:n.value})},p=function(e,n){var o=e.left,c=e.top,l=e.width,a=e.height,r={type:"shape",id:xe(),left:o,top:c,width:l,height:a,viewBox:n.viewBox,path:n.path,fill:t.value,fixedRatio:!1,rotate:0};n.special&&(r.special=!0),i(r)},m=function(e,n){var o=e.left,c=e.top,l=e.start,a=e.end,r={type:"line",id:xe(),left:o,top:c,start:l,end:a,points:n.points,color:t.value,style:n.style,width:2};n.isBroken&&(r.broken=[(l[0]+a[0])/2,(l[1]+a[1])/2]),n.isCurve&&(r.curve=[(l[0]+a[0])/2,(l[1]+a[1])/2]),i(r)};return{createImageElement:u,createChartElement:d,createTableElement:s,createTextElement:f,createShapeElement:p,createLineElement:m}},Qe=function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=We(),o=n.addHistorySnapshot,c=Ke(),l=c.createTextElement,a=function(n){var c,l=He(n),a=l.groupIdMap,r=l.elIdMap,i=t.value.elements.map((function(e){return e.id})),u=Object(w["a"])(n);try{for(u.s();!(c=u.n()).done;){var d=c.value,s=i.includes(d.id);d.id=r[d.id],s&&(d.left=d.left+10,d.top=d.top+10),d.groupId&&(d.groupId=a[d.groupId])}}catch(f){u.e(f)}finally{u.f()}e.commit(y.ADD_ELEMENT,n),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,Object.values(r)),o()},r=function(t){var n=t.map((function(e){var t,n=He(e.elements),o=n.groupIdMap,c=n.elIdMap,l=Object(w["a"])(e.elements);try{for(l.s();!(t=l.n()).done;){var a=t.value;a.id=c[a.id],a.groupId&&(a.groupId=o[a.groupId])}}catch(d){l.e(d)}finally{l.f()}if(e.animations){var r,i=Object(w["a"])(e.animations);try{for(i.s();!(r=i.n()).done;){var u=r.value;u.elId=c[u.elId]}}catch(d){i.e(d)}finally{i.f()}}return Object(I["a"])(Object(I["a"])({},e),{},{id:xe(8)})}));e.commit(y.ADD_SLIDE,n),o()},i=function(e){l({left:0,top:0,width:600,height:50},e)},u=function(e,t){var n=(null===t||void 0===t?void 0:t.onlySlide)||!1,o=(null===t||void 0===t?void 0:t.onlyElements)||!1,c=De(e);if("object"===Object(qe["a"])(c)){var l=c.type,u=c.data;"elements"!==l||n?"slides"!==l||o||r(u):a(u)}else if(!o&&!n){var d=Xe(c);i(d)}};return{addSlidesFromClipboard:r,pasteTextClipboardData:u}},$e=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slideIndex})),n=Object(j["computed"])((function(){return e.state.theme})),o=Object(j["computed"])((function(){return e.state.slides})),c=Object(j["computed"])((function(){return e.getters.currentSlide})),l=Object(j["computed"])((function(){return[].concat(Object(oe["a"])(e.state.selectedSlidesIndex),[t.value])})),a=Object(j["computed"])((function(){return o.value.filter((function(e,t){return l.value.includes(t)}))})),r=Object(j["computed"])((function(){return a.value.map((function(e){return e.id}))})),i=Qe(),u=i.pasteTextClipboardData,d=i.addSlidesFromClipboard,s=We(),f=s.addHistorySnapshot,p=function(){var t={id:xe(8),elements:[],background:{type:"solid",color:n.value.backgroundColor}};e.commit(y.UPDATE_SLIDE_INDEX,0),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.SET_SLIDES,[t])},m=function(n){n===Oe.UP&&t.value>0?e.commit(y.UPDATE_SLIDE_INDEX,t.value-1):n===Oe.DOWN&&t.value0&&void 0!==arguments[0]?arguments[0]:r.value;o.value.length===t.length?p():e.commit(y.DELETE_SLIDE,t),e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,[]),f()},C=function(){var e=Object(oe["a"])(r.value);b(),E(e)},x=function(){var t=Array.from(Array(o.value.length),(function(e,t){return t}));e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,t)};return{resetSlides:p,updateSlideIndex:m,copySlide:b,pasteSlide:v,createSlide:O,createSlideByTemplate:h,copyAndPasteSlide:g,deleteSlide:E,cutSlide:C,selectAllSlide:x}},et=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=We(),c=o.addHistorySnapshot,l=function(){var o,l=JSON.parse(JSON.stringify(n.value.elements)),a=Object(w["a"])(l);try{for(a.s();!(o=a.n()).done;){var r=o.value;t.value.includes(r.id)&&(r.lock=!0)}}catch(i){a.e(i)}finally{a.f()}e.commit(y.UPDATE_SLIDE,{elements:l}),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),c()},a=function(t){var o=JSON.parse(JSON.stringify(n.value.elements));if(t.groupId){var l,a=Object(w["a"])(o);try{for(a.s();!(l=a.n()).done;){var r=l.value;r.groupId===t.groupId&&(r.lock=!1)}}catch(s){a.e(s)}finally{a.f()}return o}var i,u=Object(w["a"])(o);try{for(u.s();!(i=u.n()).done;){var d=i.value;if(d.id===t.id){d.lock=!1;break}}}catch(s){u.e(s)}finally{u.f()}e.commit(y.UPDATE_SLIDE,{elements:o}),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[t.id]),c()};return{lockElement:l,unlockElement:a}},tt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.activeGroupElementId})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=function(){if(t.value.length){var c=[];c=n.value?o.value.elements.filter((function(e){return e.id!==n.value})):o.value.elements.filter((function(e){return!t.value.includes(e.id)})),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SLIDE,{elements:c}),l()}},r=function(){o.value.elements.length&&(e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SLIDE,{elements:[]}),l())};return{deleteElement:a,deleteAllElements:r}},nt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=Object(j["computed"])((function(){return e.state.handleElementId})),l=We(),a=l.addHistorySnapshot,r=Object(j["computed"])((function(){if(n.value.length<2)return!1;var e=n.value[0].groupId;if(!e)return!0;var t=n.value.every((function(t){return(t.groupId&&t.groupId)===e}));return!t})),i=function(){var c;if(n.value.length){var l,r=JSON.parse(JSON.stringify(o.value.elements)),i=xe(),u=[],d=Object(w["a"])(r);try{for(d.s();!(l=d.n()).done;){var s=l.value;t.value.includes(s.id)&&(s.groupId=i,u.push(s))}}catch(b){d.e(b)}finally{d.f()}var f=r.findIndex((function(e){return e.id===u[u.length-1].id})),p=u.map((function(e){return e.id}));r=r.filter((function(e){return!p.includes(e.id)}));var m=f-u.length+1;(c=r).splice.apply(c,[m,0].concat(u)),e.commit(y.UPDATE_SLIDE,{elements:r}),a()}},u=function(){if(n.value.length){var l=n.value.some((function(e){return e.groupId}));if(l){var r,i=JSON.parse(JSON.stringify(o.value.elements)),u=Object(w["a"])(i);try{for(u.s();!(r=u.n()).done;){var d=r.value;t.value.includes(d.id)&&d.groupId&&delete d.groupId}}catch(f){u.e(f)}finally{u.f()}e.commit(y.UPDATE_SLIDE,{elements:i});var s=c.value?[c.value]:[];e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,s),a()}}};return{canCombine:r,combineElements:i,uncombineElements:u}},ot=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Qe(),c=o.pasteTextClipboardData,l=tt(),a=l.deleteElement,r=function(){if(t.value.length){var o=Le(JSON.stringify({type:"elements",data:n.value}));_e(o).then((function(){e.commit(y.SET_EDITORAREA_FOCUS,!0)}))}},i=function(){r(),a()},u=function(){Be().then((function(e){c(e)})).catch((function(e){return Ce["a"].warning(e)}))},d=function(){r(),u()};return{copyElement:r,cutElement:i,pasteElement:u,quickCopyElement:d}},ct=function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=function(){var n=t.value.elements.filter((function(e){return!e.lock})),o=n.map((function(e){return e.id}));e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,o)};return{selectAllElement:n}},lt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.activeGroupElementId})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=function(c){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=[],i=function(e){var t=e.left,n=e.top;switch(c){case Oe.LEFT:t-=a;break;case Oe.RIGHT:t+=a;break;case Oe.UP:n-=a;break;case Oe.DOWN:n+=a;break;default:break}return Object(I["a"])(Object(I["a"])({},e),{},{left:t,top:n})};r=n.value?o.value.elements.map((function(e){return n.value===e.id?i(e):e})):o.value.elements.map((function(e){return t.value.includes(e.id)?i(e):e})),e.commit(y.UPDATE_SLIDE,{elements:r}),l()};return{moveElement:a}},at=function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=We(),o=n.addHistorySnapshot,c=function(e,t){return{minLevel:e.findIndex((function(e){return e.id===t[0].id})),maxLevel:e.findIndex((function(e){return e.id===t[t.length-1].id}))}},l=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return;var i=n[r+1],u=n.splice(a,o.length);if(i.groupId){var d=n.filter((function(e){return e.groupId===i.groupId}));n.splice.apply(n,[a+d.length,0].concat(Object(oe["a"])(u)))}else n.splice.apply(n,[a+1,0].concat(Object(oe["a"])(u)))}else{var s=e.findIndex((function(e){return e.id===t.id}));if(s===e.length-1)return;var f=n[s+1],p=n.splice(s,1)[0];if(f.groupId){var m=n.filter((function(e){return e.groupId===f.groupId}));n.splice(s+m.length,0,p)}else n.splice(s+1,0,p)}return n},a=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n[a-1],i=n.splice(a,o.length);if(r.groupId){var u=n.filter((function(e){return e.groupId===r.groupId}));n.splice.apply(n,[a-u.length,0].concat(Object(oe["a"])(i)))}else n.splice.apply(n,[a-1,0].concat(Object(oe["a"])(i)))}else{var d=e.findIndex((function(e){return e.id===t.id}));if(0===d)return;var s=n[d-1],f=n.splice(d,1)[0];if(s.groupId){var p=n.filter((function(e){return e.groupId===s.groupId}));n.splice(d-p.length,0,f)}else n.splice(d-1,0,f)}return n},r=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return null;var i=n.splice(a,o.length);n.push.apply(n,Object(oe["a"])(i))}else{var u=e.findIndex((function(e){return e.id===t.id}));if(u===e.length-1)return null;n.splice(u,1),n.push(t)}return n},i=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n.splice(a,o.length);n.unshift.apply(n,Object(oe["a"])(r))}else{var i=e.findIndex((function(e){return e.id===t.id}));if(0===i)return;n.splice(i,1),n.unshift(t)}return n},u=function(n,c){var u;c===fe.UP?u=l(t.value.elements,n):c===fe.DOWN?u=a(t.value.elements,n):c===fe.TOP?u=r(t.value.elements,n):c===fe.BOTTOM&&(u=i(t.value.elements,n)),u&&(e.commit(y.UPDATE_SLIDE,{elements:u}),o())};return{orderElement:u}},rt=function(){var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen&&e.webkitRequestFullScreen()},it=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},ut=function(){return document.mozFullScreen||document.webkitIsFullScreen||document.webkitFullScreen},dt=function(){var e=se(),t=function(){rt(),e.commit(y.SET_SCREENING,!0)},n=function(){e.commit(y.UPDATE_SLIDE_INDEX,0),t()},o=function(){e.commit(y.SET_SCREENING,!1),ut()&&it()};return{enterScreening:t,enterScreeningFromStart:n,exitScreening:o}},st=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasPercentage})),n=function(n){var o=t.value,c=5,l=120,a=60;"+"===n&&o<=l&&(o+=c),"-"===n&&o>=a&&(o-=c),e.commit(y.SET_CANVAS_PERCENTAGE,o)},o=function(t){e.commit(y.SET_CANVAS_PERCENTAGE,t)};return{scaleCanvas:n,setCanvasPercentage:o}},ft=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.ctrlKeyState})),n=Object(j["computed"])((function(){return e.state.shiftKeyState})),o=Object(j["computed"])((function(){return e.state.disableHotkeys})),c=Object(j["computed"])((function(){return e.state.activeElementIdList})),l=Object(j["computed"])((function(){return e.getters.handleElement})),a=Object(j["computed"])((function(){return e.getters.currentSlide})),r=Object(j["computed"])((function(){return e.state.editorAreaFocus})),i=Object(j["computed"])((function(){return e.state.thumbnailsFocus})),u=$e(),d=u.updateSlideIndex,s=u.copySlide,f=u.createSlide,p=u.deleteSlide,m=u.cutSlide,b=u.copyAndPasteSlide,v=u.selectAllSlide,O=nt(),h=O.combineElements,g=O.uncombineElements,E=tt(),C=E.deleteElement,x=et(),k=x.lockElement,I=ot(),w=I.copyElement,S=I.cutElement,N=I.quickCopyElement,T=ct(),L=T.selectAllElement,V=lt(),_=V.moveElement,B=at(),D=B.orderElement,M=We(),A=M.redo,z=M.undo,P=dt(),R=P.enterScreening,F=st(),H=F.scaleCanvas,U=F.setCanvasPercentage,G=function(){c.value.length?w():i.value&&s()},q=function(){c.value.length?S():i.value&&m()},X=function(){c.value.length?N():i.value&&b()},W=function(){r.value&&L(),i.value&&v()},Y=function(){r.value&&k()},Z=function(){r.value&&h()},J=function(){r.value&&g()},K=function(){c.value.length?C():i.value&&p()},Q=function(e){c.value.length?_(e):e!==Oe.UP&&e!==Oe.DOWN||d(e)},$=function(e){l.value&&D(l.value,e)},ee=function(){i.value&&f()},te=function(){if(a.value.elements.length)if(l.value){var t=a.value.elements.findIndex((function(e){return e.id===l.value.id})),n=t>=a.value.elements.length-1?0:t+1,o=a.value.elements[n].id;e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[o])}else{var c=a.value.elements[0];e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[c.id])}},ne=function(c){var l=c.ctrlKey,a=c.shiftKey,u=c.altKey,d=c.metaKey,s=l||d,f=c.key.toUpperCase();if(s&&!t.value&&e.commit(y.SET_CTRL_KEY_STATE,!0),a&&!n.value&&e.commit(y.SET_SHIFT_KEY_STATE,!0),s&&f===Oe.F&&(c.preventDefault(),R(),e.commit(y.SET_CTRL_KEY_STATE,!1)),r.value||i.value){if(s&&f===Oe.C){if(o.value)return;c.preventDefault(),G()}if(s&&f===Oe.X){if(o.value)return;c.preventDefault(),q()}if(s&&f===Oe.D){if(o.value)return;c.preventDefault(),X()}if(s&&f===Oe.Z){if(o.value)return;c.preventDefault(),z()}if(s&&f===Oe.Y){if(o.value)return;c.preventDefault(),A()}if(s&&f===Oe.A){if(o.value)return;c.preventDefault(),W()}if(s&&f===Oe.L){if(o.value)return;c.preventDefault(),Y()}if(!a&&s&&f===Oe.G){if(o.value)return;c.preventDefault(),Z()}if(a&&s&&f===Oe.G){if(o.value)return;c.preventDefault(),J()}if(u&&f===Oe.F){if(o.value)return;c.preventDefault(),$(fe.TOP)}if(u&&f===Oe.B){if(o.value)return;c.preventDefault(),$(fe.BOTTOM)}if(f===Oe.DELETE||f===Oe.BACKSPACE){if(o.value)return;c.preventDefault(),K()}if(f===Oe.UP){if(o.value)return;c.preventDefault(),Q(Oe.UP)}if(f===Oe.DOWN){if(o.value)return;c.preventDefault(),Q(Oe.DOWN)}if(f===Oe.LEFT){if(o.value)return;c.preventDefault(),Q(Oe.LEFT)}if(f===Oe.RIGHT){if(o.value)return;c.preventDefault(),Q(Oe.RIGHT)}if(f===Oe.ENTER){if(o.value)return;c.preventDefault(),ee()}if(f===Oe.MINUS){if(o.value)return;c.preventDefault(),H("-")}if(f===Oe.EQUAL){if(o.value)return;c.preventDefault(),H("+")}if(f===Oe.DIGIT_0){if(o.value)return;c.preventDefault(),U(90)}if(f===Oe.TAB){if(o.value)return;c.preventDefault(),te()}}},oe=function(){t.value&&e.commit(y.SET_CTRL_KEY_STATE,!1),n.value&&e.commit(y.SET_SHIFT_KEY_STATE,!1)};Object(j["onMounted"])((function(){document.addEventListener("keydown",ne),document.addEventListener("keyup",oe),window.addEventListener("blur",oe)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",ne),document.removeEventListener("keyup",oe),window.removeEventListener("blur",oe)}))},pt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.editorAreaFocus})),n=Object(j["computed"])((function(){return e.state.thumbnailsFocus})),o=Object(j["computed"])((function(){return e.state.disableHotkeys})),c=Qe(),l=c.pasteTextClipboardData,a=Ke(),r=a.createImageElement,i=function(e){Ze(e).then((function(e){return r(e)}))},u=function(e){if((t.value||n.value)&&!o.value&&e.clipboardData){var c=e.clipboardData.items,a=c[0];if(a){var r,u=Object(w["a"])(c);try{for(u.s();!(r=u.n()).done;){var d=r.value;if("file"===d.kind&&-1!==d.type.indexOf("image")){var s=d.getAsFile();return void(s&&i(s))}}}catch(f){u.e(f)}finally{u.f()}"string"===a.kind&&"text/plain"===a.type&&a.getAsString((function(e){return l(e)}))}}};Object(j["onMounted"])((function(){document.addEventListener("paste",u)})),Object(j["onUnmounted"])((function(){document.removeEventListener("paste",u)}))};Object(j["pushScopeId"])("data-v-13ca7328");var mt={class:"editor-header"},bt={class:"left"},vt={class:"menu-item"},Ot=Object(j["createTextVNode"])(),ht=Object(j["createElementVNode"])("span",{class:"text"},"文件",-1),jt=Object(j["createTextVNode"])("导出 JSON"),gt=Object(j["createTextVNode"])("导出 PPTX"),yt={class:"menu-item"},Et=Object(j["createTextVNode"])(),Ct=Object(j["createElementVNode"])("span",{class:"text"},"编辑",-1),xt=Object(j["createTextVNode"])("撤销"),kt=Object(j["createTextVNode"])("重做"),It=Object(j["createTextVNode"])("添加页面"),wt=Object(j["createTextVNode"])("删除页面"),St=Object(j["createTextVNode"])("重置幻灯片"),Nt={class:"menu-item"},Tt=Object(j["createTextVNode"])(),Lt=Object(j["createElementVNode"])("span",{class:"text"},"演示",-1),Vt=Object(j["createTextVNode"])("从头开始"),_t=Object(j["createTextVNode"])("从当前页开始"),Bt={class:"menu-item"},Dt=Object(j["createTextVNode"])(),Mt=Object(j["createElementVNode"])("span",{class:"text"},"帮助",-1),At=Object(j["createTextVNode"])("意见反馈"),zt=Object(j["createTextVNode"])("快捷键"),Pt={class:"right"},Rt={href:"https://github.com/pipipi-pikachu/PPTist",target:"_blank"},Ft={class:"menu-item"};function Ht(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconFolderClose"),r=Object(j["resolveComponent"])("MenuItem"),i=Object(j["resolveComponent"])("Menu"),u=Object(j["resolveComponent"])("Dropdown"),d=Object(j["resolveComponent"])("IconEdit"),s=Object(j["resolveComponent"])("IconPpt"),f=Object(j["resolveComponent"])("IconHelpcenter"),p=Object(j["resolveComponent"])("Tooltip"),m=Object(j["resolveComponent"])("IconGithub"),b=Object(j["resolveComponent"])("HotkeyDoc"),v=Object(j["resolveComponent"])("Drawer"),O=Object(j["resolveComponent"])("FullscreenSpin");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",mt,[Object(j["createElementVNode"])("div",bt,[Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[0]||(t[0]=function(t){return e.exportJSON()})},{default:Object(j["withCtx"])((function(){return[jt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.exportPPTX()})},{default:Object(j["withCtx"])((function(){return[gt]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",vt,[Object(j["createVNode"])(a),Ot,ht])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[2]||(t[2]=function(t){return e.undo()})},{default:Object(j["withCtx"])((function(){return[xt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[3]||(t[3]=function(t){return e.redo()})},{default:Object(j["withCtx"])((function(){return[kt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[4]||(t[4]=function(t){return e.createSlide()})},{default:Object(j["withCtx"])((function(){return[It]})),_:1}),Object(j["createVNode"])(r,{onClick:t[5]||(t[5]=function(t){return e.deleteSlide()})},{default:Object(j["withCtx"])((function(){return[wt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[6]||(t[6]=function(t){return e.toggleGridLines()})},{default:Object(j["withCtx"])((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e.showGridLines?"关闭网格线":"打开网格线"),1)]})),_:1}),Object(j["createVNode"])(r,{onClick:t[7]||(t[7]=function(t){return e.resetSlides()})},{default:Object(j["withCtx"])((function(){return[St]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",yt,[Object(j["createVNode"])(d),Et,Ct])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[8]||(t[8]=function(t){return e.enterScreeningFromStart()})},{default:Object(j["withCtx"])((function(){return[Vt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[9]||(t[9]=function(t){return e.enterScreening()})},{default:Object(j["withCtx"])((function(){return[_t]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Nt,[Object(j["createVNode"])(s),Tt,Lt])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[10]||(t[10]=function(t){return e.goIssues()})},{default:Object(j["withCtx"])((function(){return[At]})),_:1}),Object(j["createVNode"])(r,{onClick:t[11]||(t[11]=function(t){return e.hotkeyDrawerVisible=!0})},{default:Object(j["withCtx"])((function(){return[zt]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Bt,[Object(j["createVNode"])(f),Dt,Mt])]})),_:1})]),Object(j["createElementVNode"])("div",Pt,[Object(j["createVNode"])(p,{mouseLeaveDelay:0,title:"幻灯片放映"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:"menu-item",onClick:t[12]||(t[12]=function(t){return e.enterScreening()})},[Object(j["createVNode"])(s,{size:"18",fill:"#666",style:{"margin-top":"2px"}})])]})),_:1}),Object(j["createElementVNode"])("a",Rt,[Object(j["createElementVNode"])("div",Ft,[Object(j["createVNode"])(m,{size:"18",fill:"#666"})])])]),Object(j["createVNode"])(v,{width:"320",placement:"right",visible:e.hotkeyDrawerVisible,onClose:t[13]||(t[13]=function(t){return e.hotkeyDrawerVisible=!1})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b)]})),_:1},8,["visible"]),Object(j["createVNode"])(O,{loading:e.exporting,tip:"正在导出..."},null,8,["loading"])])}Object(j["popScopeId"])();var Ut=n("3835"),Gt=(n("9911"),n("cc71"),n("21a6")),qt=n("8f74"),Xt=["style","script","template"],Wt=["html","head","body","p","dt","dd","li","option","thead","th","tbody","tr","td","tfoot","colgroup"],Yt={li:["ul","ol","menu"],dt:["dl"],dd:["dl"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table"],td:["table"]},Zt=["!doctype","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],Jt=function(e,t){var n=t-e.position;Kt(e,n)},Kt=function(e,t){e.position=e.position+t},Qt=function(e,t){var n=!1;while(!n){var o=e.indexOf("<",t);if(-1===o)return o;var c=e.charAt(o+1);if("/"===c||"!"===c||/[A-Za-z0-9]/.test(c))return o;t=o+1}return-1},$t=function(e){var t=e.str,n=Qt(t,e.position);if(n!==e.position){-1===n&&(n=t.length);var o=t.slice(e.position,n);Jt(e,n),e.tokens.push({type:"text",content:o})}},en=function(e){var t=e.str;Kt(e,4);var n=t.indexOf("--\x3e",e.position),o=n+3;-1===n&&(n=o=t.length);var c=t.slice(e.position,n);Jt(e,o),e.tokens.push({type:"comment",content:c})},tn=function(e){var t=e.str,n=t.length,o=e.position;while(o"===c);if(l)break;o++}var a=o+1;while(a"===r);if(!i)break;a++}Jt(e,a);var u=t.slice(o,a);return e.tokens.push({type:"tag",content:u}),u},nn=function(e){var t=e.str,n=e.tokens,o=e.position,c=null,l=o,a=[],r=t.length;while(o"===i;if(d){o!==l&&a.push(t.slice(l,o));break}var s=/\s/.test(i);if(s)o!==l&&a.push(t.slice(l,o)),l=o+1,o++;else{var f="'"===i||'"'===i;f?(c=i,o++):o++}}}Jt(e,o);for(var p="attribute",m=0;m1){var h=b+O;n.push({type:p,content:h}),m+=1;continue}var j=a[m+2];if(m+=1,j){var g=b+"="+j;n.push({type:p,content:g}),m+=1;continue}}}if(Object(ce["endsWith"])(b,"=")){var y=a[m+1];if(y&&-1===y.indexOf("=")){var E=b+y;n.push({type:p,content:E}),m+=1;continue}var C=b.slice(0,-1);n.push({type:p,content:C})}else n.push({type:p,content:b})}},on=function(e,t){var n=t.str,o=t.tokens,c=e.toLowerCase(),l=n.length,a=t.position;while(a=0){var c=t[o].tagName;if(c===e)break;if(n.includes(c))return!0;o--}}return!1},dn=function(e,t){e.splice(t)},sn=function e(t){var n=t.stack,o=t.tokens,c=t.cursor,l=n[n.length-1].children,a=o.length;while(c-1)if(n[d].tagName===u){s=!0;break}while(c0){if(u===n[m].tagName){dn(n,m);var b=m-1;l=n[b].children;break}m-=1}}var v=[],O=void 0;while(c127&&o<2048?(t+=String.fromCharCode(o>>6|192),t+=String.fromCharCode(63&o|128)):(t+=String.fromCharCode(o>>12|224),t+=String.fromCharCode(o>>6&63|128),t+=String.fromCharCode(63&o|128))}return t},xn=function(e){var t,n,o,c,l,a,r,i="",u=0;e=Cn(e);while(u>2,l=(3&t)<<4|n>>4,a=(15&n)<<2|o>>6,r=63&o,isNaN(n)?a=r=64:isNaN(o)&&(r=64),i=i+yn.charAt(c)+yn.charAt(l)+yn.charAt(a)+yn.charAt(r);return i},kn=function(e){var t=new XMLSerializer,n=t.serializeToString(e);return En+xn(n)},In=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["ref"])(!1),o=function(){var e=new Blob([JSON.stringify(t.value)],{type:""});Object(Gt["saveAs"])(e,"pptist_slides.json")},c=function(e){var t=H()(e),n=t.getAlpha(),o=0===n?"#ffffff":t.setAlpha(1).toHexString();return{alpha:n,color:o}},l=function(e){var t=vn(e),n=[],o=function e(t){var o,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=Object(w["a"])(t);try{for(a.s();!(o=a.n()).done;){var r=o.value;if("tagName"in r&&["div","ul","li","p"].includes(r.tagName)&&n.length){var i=n[n.length-1];i.options||(i.options={}),i.options.breakLine=!0}var u=Object(I["a"])({},l),d="attributes"in r?r.attributes.find((function(e){return"style"===e.key})):null;if(d&&d.value){var s,f=d.value.split(";"),p=Object(w["a"])(f);try{for(p.s();!(s=p.n()).done;){var m=s.value,b=m.split(": "),v=Object(Ut["a"])(b,2),O=v[0],h=v[1],j=[Object(ce["trim"])(O),Object(ce["trim"])(h)],g=j[0],y=j[1];g&&y&&(u[g]=y)}}catch(x){p.e(x)}finally{p.f()}}if("tagName"in r&&("em"===r.tagName&&(u["font-style"]="italic"),"strong"===r.tagName&&(u["font-weight"]="bold"),"sup"===r.tagName&&(u["vertical-align"]="super"),"sub"===r.tagName&&(u["vertical-align"]="sub")),"tagName"in r&&"br"===r.tagName)n.push({text:"",options:{breakLine:!0}});else if("content"in r){var E=r.content.replace(/\n/g,"").replace(/ /g," "),C={};u["font-size"]&&(C.fontSize=.75*parseInt(u["font-size"])),u["color"]&&(C.color=c(u["color"]).color),u["background-color"]&&(C.highlight=c(u["background-color"]).color),u["text-decoration-line"]&&(-1!==u["text-decoration-line"].indexOf("underline")&&(C.underline={color:C.color||"#000000",style:"sng"}),-1!==u["text-decoration-line"].indexOf("line-through")&&(C.strike="sngStrike")),u["text-decoration"]&&(-1!==u["text-decoration"].indexOf("underline")&&(C.underline={color:C.color||"#000000",style:"sng"}),-1!==u["text-decoration"].indexOf("line-through")&&(C.strike="sngStrike")),u["vertical-align"]&&("super"===u["vertical-align"]&&(C.superscript=!0),"sub"===u["vertical-align"]&&(C.subscript=!0)),u["text-align"]&&(C.align=u["text-align"]),u["font-weight"]&&(C.bold="bold"===u["font-weight"]),u["font-style"]&&(C.italic="italic"===u["font-style"]),u["font-family"]&&(C.fontFace=u["font-family"]),n.push({text:E,options:C})}else"children"in r&&e(r.children,u)}}catch(x){a.e(x)}finally{a.f()}};return o(t),n},a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:1,y:1};return e.map((function(e){if(void 0!==e.close)return{close:!0};if("M"===e.type)return{x:e.x/100*t.x,y:e.y/100*t.y,moveTo:!0};if(e.curve){if("cubic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"cubic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y,x2:e.curve.x2/100*t.x,y2:e.curve.y2/100*t.y}};if("quadratic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"quadratic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y}}}return{x:e.x/100*t.x,y:e.y/100*t.y}}))},r=function(){n.value=!0;var e,o=new qt["a"],r=Object(w["a"])(t.value);try{for(r.s();!(e=r.n()).done;){var i=e.value,u=o.addSlide();if(i.background){var d=i.background;if("image"===d.type&&d.image)u.background={data:d.image};else if("solid"===d.type&&d.color){var s=c(d.color);u.background={color:s.color,transparency:100*(1-s.alpha)}}else if("gradient"===d.type&&d.gradientColor){var f=Object(Ut["a"])(d.gradientColor,2),p=f[0],m=f[1],b=H.a.mix(p,m).toHexString(),v=c(b);u.background={color:v.color,transparency:100*(1-v.alpha)}}}if(i.elements){var O,h=Object(w["a"])(i.elements);try{var j=function(){var e=O.value;if("text"===e.type){var t=l(e.content),n={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:"middle"};if(e.rotate&&(n.rotate=e.rotate),e.wordSpace&&(n.charSpacing=.75*e.wordSpace),e.lineHeight&&(n.lineSpacingMultiple=.75*e.lineHeight),e.fill){var r=c(e.fill),i=void 0===e.opacity?1:e.opacity;n.fill={color:r.color,transparency:100*(1-r.alpha*i)}}if(e.defaultColor&&(n.color=c(e.defaultColor).color),e.defaultFontName&&(n.fontFace=e.defaultFontName),e.shadow){var d=c(e.shadow.color);n.shadow={type:"outer",color:d.color.replace("#",""),opacity:d.alpha,blur:.75*e.shadow.blur,offset:(e.shadow.h+e.shadow.v)/2*.75,angle:45}}e.link&&(n.hyperlink={url:e.link}),u.addText(t,n)}else if("image"===e.type){var s={path:e.src,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};e.flipH&&(s.flipH=e.flipH),e.flipV&&(s.flipV=e.flipV),e.rotate&&(s.rotate=e.rotate),e.clip&&"ellipse"===e.clip.shape&&(s.rounding=!0),e.link&&(s.hyperlink={url:e.link}),u.addImage(s)}else if("shape"===e.type){if(e.special){var f=document.querySelector(".thumbnail-list .base-element-".concat(e.id," svg")),p=kn(f),m={data:p,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};e.rotate&&(m.rotate=e.rotate),e.link&&(m.hyperlink={url:e.link}),u.addImage(m)}else{var b,v,h={x:e.width/e.viewBox,y:e.height/e.viewBox},j=a(gn(e.path),h),g=c(e.fill),y=void 0===e.opacity?1:e.opacity,E={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fill:{color:g.color,transparency:100*(1-g.alpha*y)},points:j};if(e.flipH&&(E.flipH=e.flipH),e.flipV&&(E.flipV=e.flipV),null!==(b=e.outline)&&void 0!==b&&b.width)E.line={color:c((null===(v=e.outline)||void 0===v?void 0:v.color)||"#000000").color,width:.75*e.outline.width,dashType:"solid"===e.outline.style?"solid":"dash"};if(e.shadow){var C=c(e.shadow.color);E.shadow={type:"outer",color:C.color.replace("#",""),opacity:C.alpha,blur:.75*e.shadow.blur,offset:(e.shadow.h+e.shadow.v)/2*.75,angle:45}}e.link&&(E.hyperlink={url:e.link}),u.addShape("custGeom",E)}if(e.text){var x=l(e.text.content),k={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:e.text.align};e.rotate&&(k.rotate=e.rotate),e.text.defaultColor&&(k.color=c(e.text.defaultColor).color),e.text.defaultFontName&&(k.fontFace=e.text.defaultFontName),u.addText(x,k)}}else if("line"===e.type){var I=Ge(e),w=a(gn(I)),S=Pe(e),N=S.minX,T=S.maxX,L=S.minY,V=S.maxY,_={x:e.left/100,y:e.top/100,w:(T-N)/100,h:(V-L)/100,line:{color:c(e.color).color,width:.75*e.width,dashType:"solid"===e.style?"solid":"dash",beginArrowType:e.points[0]?"arrow":"none",endArrowType:e.points[1]?"arrow":"none"},points:w};u.addShape("custGeom",_)}else if("chart"===e.type){for(var B=[],D=0;D1||Q.rowspan>1)for(var $=Z;$1?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,elementList:e.elementList,scaleMultiElement:e.scaleMultiElement},null,8,["elementList","scaleMultiElement"])):Object(j["createCommentVNode"])("",!0),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.elementList,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(u,{key:t.id,elementInfo:t,isSelected:e.activeElementIdList.includes(t.id),isActive:e.handleElementId===t.id,isActiveGroupElement:e.activeGroupElementId===t.id,isMultiSelect:e.activeElementIdList.length>1,rotateElement:e.rotateElement,scaleElement:e.scaleElement,openLinkDialog:e.openLinkDialog,dragLineElement:e.dragLineElement},null,8,["elementInfo","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement"])})),128)),Object(j["createVNode"])(d)]),Object(j["createElementVNode"])("div",{class:"viewport",ref:"viewportRef",style:Object(j["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")})},[e.mouseSelectionState.isShow?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,top:e.mouseSelectionState.top,left:e.mouseSelectionState.left,width:e.mouseSelectionState.width,height:e.mouseSelectionState.height,quadrant:e.mouseSelectionState.quadrant},null,8,["top","left","width","height","quadrant"])):Object(j["createCommentVNode"])("",!0),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.elementList,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(f,{key:t.id,elementInfo:t,elementIndex:n+1,isMultiSelect:e.activeElementIdList.length>1,selectElement:e.selectElement,openLinkDialog:e.openLinkDialog},null,8,["elementInfo","elementIndex","isMultiSelect","selectElement","openLinkDialog"])})),128))],4)],4),Object(j["createVNode"])(m,{visible:e.linkDialogVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.linkDialogVisible=t}),footer:null,centered:"",width:540,destroyOnClose:""},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p,{onClose:t[1]||(t[1]=function(t){return e.linkDialogVisible=!1})})]})),_:1},8,["visible"])],544)),[[b,e.contextmenus],[v,e.removeEditorAreaFocus]])}Object(j["popScopeId"])();var Pn=function(){var e=window.getSelection();e&&e.removeAllRanges()},Rn=function(e){var t=Object(j["ref"])(0),n=Object(j["ref"])(0),o=se(),c=Object(j["computed"])((function(){return o.state.canvasPercentage})),l=Object(j["computed"])((function(){return o.state.viewportRatio})),a=function(){if(e.value){var a=e.value.clientWidth,r=e.value.clientHeight;if(r/a>l.value){var i=a*(c.value/100);o.commit(y.SET_CANVAS_SCALE,i/Je),t.value=(a-i)/2,n.value=(r-i*l.value)/2}else{var u=r*(c.value/100);o.commit(y.SET_CANVAS_SCALE,u/(Je*l.value)),t.value=(a-u/l.value)/2,n.value=(r-u)/2}}};Object(j["watch"])([c,l],a);var r=Object(j["computed"])((function(){return{width:Je,height:Je*l.value,left:t.value,top:n.value}})),i=new ResizeObserver(a);return Object(j["onMounted"])((function(){e.value&&i.observe(e.value)})),Object(j["onUnmounted"])((function(){e.value&&i.unobserve(e.value)})),{viewportStyles:r}},Fn=function(e,t){var n=se(),o=Object(j["computed"])((function(){return n.state.canvasScale})),c=Object(j["reactive"])({isShow:!1,top:0,left:0,width:0,height:0,quadrant:1}),l=function(l){if(t.value){var a=!0,r=t.value.getBoundingClientRect(),i=5,u=l.pageX,d=l.pageY,s=(u-r.x)/o.value,f=(d-r.y)/o.value;c.isShow=!1,c.quadrant=4,c.top=f,c.left=s,c.width=0,c.height=0,document.onmousemove=function(e){if(a){var t=e.pageX,n=e.pageY,l=(t-u)/o.value,r=(n-d)/o.value,s=Math.abs(l),f=Math.abs(r);if(!(s0&&r>0?p=4:l<0&&r<0?p=1:l>0&&r<0?p=2:l<0&&r>0&&(p=3),c.isShow=!0,c.quadrant=p,c.width=s,c.height=f}}},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null,a=!1;for(var t=[],o=0;or&&mi&&vr-u&&mi-d&&vr&&mi-d&&vr-u&&mi&&v0&&Math.abs(r-45)<=d?r-=r-45:r<0&&Math.abs(r+45)<=d?r-=r+45:r>0&&Math.abs(r-90)<=d?r-=r-90:r<0&&Math.abs(r+90)<=d?r-=r+90:r>0&&Math.abs(r-135)<=d?r-=r-135:r<0&&Math.abs(r+135)<=d?r-=r+135:r>0&&Math.abs(r-180)<=d?r-=r-180:r<0&&Math.abs(r+180)<=d&&(r-=r+180),e.value=e.value.map((function(e){return c.id===e.id?Object(I["a"])(Object(I["a"])({},e),{},{rotate:r}):e}))}},document.onmouseup=function(){a=!1,document.onmousemove=null,document.onmouseup=null,i!==r&&(n.commit(y.UPDATE_SLIDE,{elements:e.value}),l())}}};return{rotateElement:a}},qn={text:"文本",image:"图片",shape:"形状",line:"线条",chart:"图表",table:"表格"},Xn={text:20,image:20,shape:15,chart:200,table:20},Wn=function(e,t){var n=e.left,o=e.top,c=e.width,l=e.height,a=Math.sqrt(Math.pow(c,2)+Math.pow(l,2))/2,r=180*Math.atan(l/c)/Math.PI,i=(180-t-r)*Math.PI/180,u=(r-t)*Math.PI/180,d=(90-t)*Math.PI/180,s=t*Math.PI/180,f=c/2,p=l/2,m=n+f,b=o+p,v={left:m+a*Math.cos(i),top:b-a*Math.sin(i)},O={left:m+p*Math.cos(d),top:b-p*Math.sin(d)},h={left:m+a*Math.cos(u),top:b-a*Math.sin(u)},j={left:m+f*Math.cos(s),top:b+f*Math.sin(s)},g={left:m-a*Math.cos(i),top:b+a*Math.sin(i)},y={left:m-p*Math.sin(s),top:b+p*Math.cos(s)},E={left:m-a*Math.cos(u),top:b+a*Math.sin(u)},C={left:m-f*Math.cos(s),top:b-f*Math.sin(s)};return{leftTopPoint:v,topPoint:O,rightTopPoint:h,rightPoint:j,rightBottomPoint:g,bottomPoint:y,leftBottomPoint:E,leftPoint:C}},Yn=function(e,t){var n,o=(n={},Object(q["a"])(n,be.RIGHT_BOTTOM,t.leftTopPoint),Object(q["a"])(n,be.LEFT_BOTTOM,t.rightTopPoint),Object(q["a"])(n,be.LEFT_TOP,t.rightBottomPoint),Object(q["a"])(n,be.RIGHT_TOP,t.leftBottomPoint),Object(q["a"])(n,be.TOP,t.bottomPoint),Object(q["a"])(n,be.BOTTOM,t.topPoint),Object(q["a"])(n,be.LEFT,t.rightPoint),Object(q["a"])(n,be.RIGHT,t.leftPoint),n);return o[e]},Zn=function(e,t){var n=se(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),l=Object(j["computed"])((function(){return n.state.canvasScale})),a=Object(j["computed"])((function(){return n.state.viewportRatio})),r=Object(j["computed"])((function(){return n.getters.ctrlOrShiftKeyActive})),i=We(),u=i.addHistorySnapshot,d=function(i,d,s){var f=!0;n.commit(y.SET_SCALING_STATE,!0);var p,m=d.left,b=d.top,v=d.width,O=d.height,h="rotate"in d&&d.rotate?d.rotate:0,j=Math.PI*h/180,g=r.value||"fixedRatio"in d&&d.fixedRatio,E=v/O,C=i.pageX,x=i.pageY,k=Xn[d.type]||20,S=function(e){return e2&&void 0!==arguments[2])||arguments[2];if(a.value||n.commit(y.SET_EDITORAREA_FOCUS,!0),o.value.includes(u.id)){if(r.value){var s=[];if(u.groupId){var f=[];e.value.forEach((function(e){e.groupId===u.groupId&&f.push(e.id)})),s=o.value.filter((function(e){return!f.includes(e)}))}else s=o.value.filter((function(e){return e!==u.id}));s.length>0&&n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,s)}else if(c.value!==u.id)n.commit(y.SET_HANDLE_ELEMENT_ID,u.id);else if(l.value!==u.id){var p=i.pageX,m=i.pageY;i.target.onmouseup=function(e){var t=e.pageX,o=e.pageY;p===t&&m===o&&(n.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,u.id),e.target.onmouseup=null)}}}else{var b=[];if(b=r.value?[].concat(Object(oe["a"])(o.value),[u.id]):[u.id],u.groupId){var v=[];e.value.forEach((function(e){e.groupId===u.groupId&&v.push(e.id)})),b=[].concat(Object(oe["a"])(b),v)}n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,Object(ce["uniq"])(b)),n.commit(y.SET_HANDLE_ELEMENT_ID,u.id)}d&&t(i,u)},u=function(){var t=e.value.filter((function(e){return!e.lock})),o=t.map((function(e){return e.id}));n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,o)};return{selectElement:i,selectAllElement:u}},Kn=function(e,t){var n=se(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),l=Object(j["computed"])((function(){return n.state.canvasScale})),a=Object(j["computed"])((function(){return n.state.viewportRatio})),r=We(),i=r.addHistorySnapshot,u=function(r,u){if(o.value.includes(u.id)){var d,s=!0,f=Je,p=Je*a.value,m=5,b=JSON.parse(JSON.stringify(e.value)),v=b.filter((function(e){return o.value.includes(e.id)})),O=u.left,h=u.top,j=u.width,g="height"in u&&u.height?u.height:0,E="rotate"in u&&u.rotate?u.rotate:0,C=r.pageX,x=r.pageY,k=null,S=u.id===c.value,N=[],T=[],L=Object(w["a"])(e.value);try{for(L.s();!(d=L.n()).done;){var V=d.value;if("line"!==V.type&&((!S||V.id!==u.id)&&(S||!o.value.includes(V.id)))){var _=void 0,B=void 0,D=void 0,M=void 0;if("rotate"in V&&V.rotate){var A=Ae({left:V.left,top:V.top,width:V.width,height:V.height,rotate:V.rotate}),z=A.xRange,P=A.yRange;_=z[0],B=P[0],D=z[1]-z[0],M=P[1]-P[0]}else _=V.left,B=V.top,D=V.width,M=V.height;var R=_+D,F=B+M,H=B+M/2,U=_+D/2,G={value:B,range:[_,R]},q={value:F,range:[_,R]},X={value:H,range:[_,R]},W={value:_,range:[B,F]},Y={value:R,range:[B,F]},Z={value:U,range:[B,F]};N.push(G,q,X),T.push(W,Y,Z)}}}catch(ne){L.e(ne)}finally{L.f()}var J={value:0,range:[0,f]},K={value:p,range:[0,f]},Q={value:p/2,range:[0,f]},$={value:0,range:[0,p]},ee={value:f,range:[0,p]},te={value:f/2,range:[0,p]};N.push(J,K,Q),T.push($,ee,te),N=Fe(N),T=Fe(T),document.onmousemove=function(n){var c=n.pageX,a=n.pageY;if(!1!==k&&(k=Math.abs(C-c)v&&(A[0]=D-_,z[0]=0),b>O&&(A[1]=M-B,z[1]=0),e.value=e.value.map((function(e){if(e.id===l.id){var t=Object(I["a"])(Object(I["a"])({},e),{},{left:_,top:B,start:A,end:z});return a!==ve.MID?(l.broken&&(t.broken=[(A[0]+z[0])/2,(A[1]+z[1])/2]),l.curve&&(t.curve=[(A[0]+z[0])/2,(A[1]+z[1])/2])):(l.broken&&(t.broken=[j-_,g-B]),l.curve&&(t.curve=[j-_,g-B])),t}return e}))}},document.onmouseup=function(n){r=!1,document.onmousemove=null,document.onmouseup=null;var o=n.pageX,l=n.pageY;u===o&&d===l||(t.commit(y.UPDATE_SLIDE,{elements:e.value}),c())}};return{dragLineElement:l}},$n=function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.creatingElement})),c=function(t){var o=t.start,c=t.end;if(e.value){var l=e.value.getBoundingClientRect(),a=Object(Ut["a"])(o,2),r=a[0],i=a[1],u=Object(Ut["a"])(c,2),d=u[0],s=u[1],f=Math.min(r,d),p=Math.max(r,d),m=Math.min(i,s),b=Math.max(i,s),v=(f-l.x)/n.value,O=(m-l.y)/n.value,h=(p-f)/n.value,j=(b-m)/n.value;return{left:v,top:O,width:h,height:j}}},l=function(t){var o=t.start,c=t.end;if(e.value){var l=e.value.getBoundingClientRect(),a=Object(Ut["a"])(o,2),r=a[0],i=a[1],u=Object(Ut["a"])(c,2),d=u[0],s=u[1],f=Math.min(r,d),p=Math.max(r,d),m=Math.min(i,s),b=Math.max(i,s),v=(f-l.x)/n.value,O=(m-l.y)/n.value,h=(p-f)/n.value,j=(b-m)/n.value,g=[r===f?0:h,i===m?0:j],y=[d===f?0:h,s===m?0:j];return{left:v,top:O,start:g,end:y}}},a=Ke(),r=a.createTextElement,i=a.createShapeElement,u=a.createLineElement,d=function(e){if(o.value){var n=o.value.type;if("text"===n){var a=c(e);a&&r(a)}else if("shape"===n){var d=c(e);d&&i(d,o.value.data)}else if("line"===n){var s=l(e);s&&u(s,o.value.data)}t.commit(y.SET_CREATING_ELEMENT,null)}};return{insertElementFromCreateSelection:d}},eo=["id"];function to(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"editable-element",ref:"elementRef",id:"editable-element-".concat(e.elementInfo.id),style:Object(j["normalizeStyle"])({zIndex:e.elementIndex})},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,selectElement:e.selectElement,contextmenus:e.contextmenus},null,8,["elementInfo","selectElement","contextmenus"]))],12,eo)}var no;n("a9e3");(function(e){e["TEXT"]="text",e["IMAGE"]="image",e["SHAPE"]="shape",e["LINE"]="line",e["CHART"]="chart",e["TABLE"]="table"})(no||(no={}));var oo=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.viewportRatio})),o=Object(j["computed"])((function(){return e.getters.activeElementList})),c=Object(j["computed"])((function(){return e.getters.currentSlide})),l=We(),a=l.addHistorySnapshot,r=function(l){var r,i=Je,u=Je*n.value,d=Re(o.value),s=d.minX,f=d.maxX,p=d.minY,m=d.maxY,b=JSON.parse(JSON.stringify(c.value.elements)),v=Object(w["a"])(b);try{for(v.s();!(r=v.n()).done;){var O=r.value;if(t.value.includes(O.id)){if(l===pe.CENTER){var h=p+(m-p)/2-u/2,j=s+(f-s)/2-i/2;O.top=O.top-h,O.left=O.left-j}if(l===pe.TOP){var g=p-0;O.top=O.top-g}else if(l===pe.VERTICAL){var E=p+(m-p)/2-u/2;O.top=O.top-E}else if(l===pe.BOTTOM){var C=m-u;O.top=O.top-C}else if(l===pe.LEFT){var x=s-0;O.left=O.left-x}else if(l===pe.HORIZONTAL){var k=s+(f-s)/2-i/2;O.left=O.left-k}else if(l===pe.RIGHT){var I=f-i;O.left=O.left-I}}}}catch(S){v.e(S)}finally{v.f()}e.commit(y.UPDATE_SLIDE,{elements:b}),a()};return{alignElementToCanvas:r}};Object(j["pushScopeId"])("data-v-03ead815");var co=["src"];function lo(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ImageClipHandler"),r=Object(j["resolveComponent"])("ImageOutline"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-image",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[e.isCliping?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,src:e.elementInfo.src,clipData:e.elementInfo.clip,width:e.elementInfo.width,height:e.elementInfo.height,top:e.elementInfo.top,left:e.elementInfo.left,clipPath:e.clipShape.style,onClip:t[0]||(t[0]=function(t){return e.handleClip(t)})},null,8,["src","clipData","width","height","top","left","clipPath"])):Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(r,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createElementVNode"])("div",{class:"image-content",style:Object(j["normalizeStyle"])({clipPath:e.clipShape.style})},[Object(j["createElementVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:Object(j["normalizeStyle"])({top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter}),onDragstart:t[1]||(t[1]=Object(j["withModifiers"])((function(){}),["prevent"])),alt:""},null,44,co)],4)],36)),[[i,e.contextmenus]])],4)],6)}Object(j["popScopeId"])();var ao,ro,io=function(e){var t=Object(j["computed"])((function(){if(e.value){var t=e.value,n=t.h,o=t.v,c=t.blur,l=t.color;return"".concat(n,"px ").concat(o,"px ").concat(c,"px ").concat(l)}return""}));return{shadowStyle:t}},uo=function(e,t){var n=Object(j["computed"])((function(){var n="";return e.value&&t.value?n="rotateX(180deg) rotateY(180deg)":t.value?n="rotateX(180deg)":e.value&&(n="rotateY(180deg)"),n}));return{flipStyle:n}};(function(e){e["RECT"]="rect",e["ELLIPSE"]="ellipse",e["POLYGON"]="polygon"})(ao||(ao={})),function(e){e["RECT"]="rect",e["ROUNDRECT"]="roundRect",e["ELLIPSE"]="ellipse",e["TRIANGLE"]="triangle",e["PENTAGON"]="pentagon",e["RHOMBUS"]="rhombus",e["STAR"]="star"}(ro||(ro={}));var so={rect:{name:"矩形",type:ao.RECT,radius:"0",style:""},rect2:{name:"矩形2",type:ao.POLYGON,style:"polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)",createPath:function(e,t){return"M 0 0 L ".concat(.8*e," 0 L ").concat(e," ").concat(.2*t," L ").concat(e," ").concat(t," L 0 ").concat(t," Z")}},rect3:{name:"矩形3",type:ao.POLYGON,style:"polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)",createPath:function(e,t){return"M 0 0 L ".concat(.8*e," 0 L ").concat(e," ").concat(.2*t," L ").concat(e," ").concat(t," L ").concat(.2*e," ").concat(t," L 0 ").concat(.8*t," Z")}},roundRect:{name:"圆角矩形",type:ao.RECT,radius:"10%",style:"inset(0 0 0 0 round 10% 10% 10% 10%)"},ellipse:{name:"圆形",type:ao.ELLIPSE,style:"ellipse(50% 50% at 50% 50%)"},triangle:{name:"三角形",type:ao.POLYGON,style:"polygon(50% 0%, 0% 100%, 100% 100%)",createPath:function(e,t){return"M ".concat(.5*e," 0 L 0 ").concat(t," L ").concat(e," ").concat(t," Z")}},triangle2:{name:"三角形2",type:ao.POLYGON,style:"polygon(50% 100%, 0% 0%, 100% 0%)",createPath:function(e,t){return"M ".concat(.5*e," ").concat(t," L 0 0 L ").concat(e," 0 Z")}},triangle3:{name:"三角形3",type:ao.POLYGON,style:"polygon(0% 0%, 0% 100%, 100% 100%)",createPath:function(e,t){return"M 0 0 L 0 ".concat(t," L ").concat(e," ").concat(t," Z")}},rhombus:{name:"菱形",type:ao.POLYGON,style:"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)",createPath:function(e,t){return"M ".concat(.5*e," 0 L ").concat(e," ").concat(.5*t," L ").concat(.5*e," ").concat(t," L 0 ").concat(.5*t," Z")}},hexagon:{name:"六边形",type:ao.POLYGON,style:"polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)",createPath:function(e,t){return"M ".concat(.2*e," 0 L ").concat(.8*e," 0 L ").concat(e," ").concat(.5*t," L ").concat(.8*e," ").concat(t," L ").concat(.2*e," ").concat(t," L 0 ").concat(.5*t," Z")}},pentagon:{name:"五边形",type:ao.POLYGON,style:"polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)",createPath:function(e,t){return"M ".concat(.5*e," 0 L ").concat(e," ").concat(.38*t," L ").concat(.82*e," ").concat(t," L ").concat(.18*e," ").concat(t," L 0 ").concat(.38*t," Z")}},parallelogram:{name:"平行四边形",type:ao.POLYGON,style:"polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)",createPath:function(e,t){return"M ".concat(.3*e," 0 L ").concat(e," 0 L ").concat(.7*e," ").concat(t," L 0 ").concat(t," Z")}},parallelogram2:{name:"平行四边形2",type:ao.POLYGON,style:"polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)",createPath:function(e,t){return"M ".concat(.3*e," ").concat(t," L ").concat(e," ").concat(t," L ").concat(.7*e," 0 L 0 0 Z")}},trapezoid:{name:"梯形",type:ao.POLYGON,style:"polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)",createPath:function(e,t){return"M ".concat(.25*e," 0 L ").concat(.75*e," 0 L ").concat(e," ").concat(t," L 0 ").concat(t," Z")}},trapezoid2:{name:"梯形2",type:ao.POLYGON,style:"polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)",createPath:function(e,t){return"M 0 0 L ".concat(e," 0 L ").concat(.75*e," ").concat(t," L ").concat(.25*e," ").concat(t," Z")}}},fo=function(e){var t=Object(j["computed"])((function(){if(!e.value)return so.rect;var t=e.value.shape||ao.RECT;return so[t]})),n=Object(j["computed"])((function(){if(!e.value)return{top:"0",left:"0",width:"100%",height:"100%"};var t=Object(Ut["a"])(e.value.range,2),n=t[0],o=t[1],c=(o[0]-n[0])/100,l=(o[1]-n[1])/100,a=n[0]/c,r=n[1]/l;return{left:-a+"%",top:-r+"%",width:100/c+"%",height:100/l+"%"}}));return{clipShape:t,imgPosition:n}},po=(n("b64b"),function(e){var t=Object(j["computed"])((function(){if(!e.value)return"";for(var t="",n=0,o=Object.keys(e.value);na.width&&(p=a.width-i.width),m<0?m=0:m+i.height>a.height&&(m=a.height-i.height),f.left=p,f.top=m}},document.onmouseup=function(){n=!1,document.onmousemove=null,document.onmouseup=null,h(),setTimeout((function(){r.value=!1}),0)}},y=function(t,n){r.value=!0;var o=!0,a=50/e.width*100,i=50/e.height*100,u=t.pageX,s=t.pageY,p=d.value,m={left:f.left,top:f.top,width:f.width,height:f.height},b=f.width/f.height;document.onmousemove=function(t){if(o){var r,d,v,O,h=t.pageX,j=t.pageY,g=(h-u)/c.value/e.width*100,y=(j-s)/c.value/e.height*100;l.value&&("b-r"!==n&&"t-l"!==n||(y=g/b),"b-l"!==n&&"t-r"!==n||(y=-g/b)),"t-l"===n?(m.left+g<0&&(g=-m.left),m.top+y<0&&(y=-m.top),m.width-gp.width&&(g=p.width-(m.left+m.width)),m.top+y<0&&(y=-m.top),m.width+gp.height&&(y=p.height-(m.top+m.height)),m.width-gp.width&&(g=p.width-(m.left+m.width)),m.top+m.height+y>p.height&&(y=p.height-(m.top+m.height)),m.width+gp.height&&(y=p.height-(m.top+m.height)),m.height+yp.width&&(g=p.width-(m.left+m.width)),m.width+g\s$/,e)},ic=function(e){return Object(lc["g"])(/^(\d+)\.\s$/,e,(function(e){return{order:+e[1]}}),(function(e,t){return t.childCount+t.attrs.order===+e[1]}))},uc=function(e){return Object(lc["g"])(/^\s*([-+*])\s$/,e)},dc=function(e){return Object(lc["e"])(/^```$/,e)},sc=function(e){var t=[].concat(Object(oe["a"])(lc["d"]),[lc["a"],lc["b"]]);return t.push(rc(e.nodes.blockquote)),t.push(ic(e.nodes.ordered_list)),t.push(uc(e.nodes.bullet_list)),t.push(dc(e.nodes.code_block)),Object(lc["c"])({rules:t})},fc=function(e){return[sc(e),Object(ec["b"])(ac(e)),Object(ec["b"])(Jo["a"]),Object(nc["a"])(),Object(oc["a"])(),Object(tc["a"])()]},pc=n("2210"),mc=Object(I["a"])(Object(I["a"])({},cc["d"]),{},{content:"list_item+",group:"block"}),bc=Object(I["a"])(Object(I["a"])({},cc["a"]),{},{content:"list_item+",group:"block"}),vc=Object(I["a"])(Object(I["a"])({},cc["c"]),{},{content:"paragraph block*",group:"block"}),Oc={attrs:{align:{default:""}},content:"inline*",group:"block",parseDOM:[{tag:"p",getAttrs:function(e){var t=e.style.textAlign,n=e.getAttribute("align")||t||"";return n=/(left|right|center|justify)/.test(n)?n:"",{align:n}}}],toDOM:function(e){var t=e.attrs.align,n="";return t&&"left"!==t&&(n+="text-align: ".concat(t,";")),["p",{style:n},0]}},hc=Object(I["a"])(Object(I["a"])({},pc["b"]),{},{ordered_list:mc,bullet_list:bc,list_item:vc,paragraph:Oc}),jc={excludes:"subscript",parseDOM:[{tag:"sub"},{style:"vertical-align",getAttrs:function(e){return"sub"===e&&null}}],toDOM:function(){return["sub",0]}},gc={excludes:"superscript",parseDOM:[{tag:"sup"},{style:"vertical-align",getAttrs:function(e){return"super"===e&&null}}],toDOM:function(){return["sup",0]}},yc={parseDOM:[{tag:"strike"},{style:"text-decoration",getAttrs:function(e){return"line-through"===e&&null}},{style:"text-decoration-line",getAttrs:function(e){return"line-through"===e&&null}}],toDOM:function(){return["span",{style:"text-decoration-line: line-through"},0]}},Ec={parseDOM:[{tag:"u"},{style:"text-decoration",getAttrs:function(e){return"underline"===e&&null}},{style:"text-decoration-line",getAttrs:function(e){return"underline"===e&&null}}],toDOM:function(){return["span",{style:"text-decoration: underline"},0]}},Cc={attrs:{color:{}},parseDOM:[{style:"color",getAttrs:function(e){return e?{color:e}:{}}}],toDOM:function(e){var t=e.attrs.color,n="";return t&&(n+="color: ".concat(t,";")),["span",{style:n},0]}},xc={attrs:{backcolor:{}},inline:!0,group:"inline",parseDOM:[{tag:"span[style*=background-color]",getAttrs:function(e){return e?{backcolor:e}:{}}}],toDOM:function(e){var t=e.attrs.backcolor,n="";return t&&(n+="background-color: ".concat(t,";")),["span",{style:n},0]}},kc={attrs:{fontsize:{}},inline:!0,group:"inline",parseDOM:[{style:"font-size",getAttrs:function(e){return e?{fontsize:e}:{}}}],toDOM:function(e){var t=e.attrs.fontsize,n="";return t&&(n+="font-size: ".concat(t)),["span",{style:n},0]}},Ic={attrs:{fontname:{}},inline:!0,group:"inline",parseDOM:[{style:"font-family",getAttrs:function(e){return{fontname:e&&"string"===typeof e?e.replace(/[\"\']/g,""):""}}}],toDOM:function(e){var t=e.attrs.fontname,n="";return t&&(n+="font-family: ".concat(t)),["span",{style:n},0]}},wc=Object(I["a"])(Object(I["a"])({},pc["a"]),{},{subscript:jc,superscript:gc,strikethrough:yc,underline:Ec,forecolor:Cc,backcolor:xc,fontsize:kc,fontname:Ic}),Sc=hc,Nc=wc,Tc=new $o["i"]({nodes:Sc,marks:Nc}),Lc=function(e){var t="
".concat(e,"
"),n=new window.DOMParser,o=n.parseFromString(t,"text/html").body.firstElementChild;return $o["a"].fromSchema(Tc).parse(o)},Vc=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Qo["c"](e,Object(I["a"])({state:Ko["b"].create({doc:Lc(t),plugins:fc(Tc)})},n))},_c=n("1344");(function(e){e["RICH_TEXT_COMMAND"]="RICH_TEXT_COMMAND",e["OPEN_CHART_DATA_EDITOR"]="OPEN_CHART_DATA_EDITOR"})(Zo||(Zo={}));var Bc=Object(_c["a"])(),Dc=Bc,Mc=(n("6062"),function(e,t,n){var o=e,c=o.selection,l=o.doc;if(!c||!l)return e;var a=c.from,r=c.to,i=t.nodes,u=i.blockquote,d=i.list_item,s=i.paragraph,f=[];n=n||"";var p=new Set([u,d,s]);return l.nodesBetween(a,r,(function(e,t){var o=e.type,c=e.attrs.align||"";return c!==n&&p.has(o)&&f.push({node:e,pos:t,nodeType:o}),!0})),f.length?(f.forEach((function(t){var o=t.node,c=t.pos,l=t.nodeType,a=o.attrs;a=n?Object(I["a"])(Object(I["a"])({},a),{},{align:n}):Object(I["a"])(Object(I["a"])({},a),{},{align:null}),e=e.setNodeMarkup(c,l,a,o.marks)})),e):e}),Ac=function(e,t){var n=e.state,o=n.schema,c=n.selection,l=Mc(n.tr.setSelection(c),o,t);e.dispatch(l)},zc=function(e,t){return e.type===t.nodes.bullet_list||e.type===t.nodes.ordered_list},Pc=function(e,t){return function(n,o){var c=n.schema,l=n.selection,a=l.$from,r=l.$to,i=a.blockRange(r);if(!i)return!1;var u=T((function(e){return zc(e,c)}))(l);if(i.depth>=1&&u&&i.depth-u.depth<=1){if(u.node.type===e)return Object(cc["b"])(t)(n,o);if(zc(u.node,c)&&e.validContent(u.node.content)){var d=n.tr;return d.setNodeMarkup(u.pos,e),o&&o(d),!1}}return Object(cc["g"])(e)(n,o)}},Rc=Object(j["defineComponent"])({name:"prosemirror-editor",emits:["update","focus","blur"],props:{elementId:{type:String,required:!0},defaultColor:{type:String,required:!0},defaultFontName:{type:String,required:!0},editable:{type:Boolean,default:!1},value:{type:String,required:!0},autoFocus:{type:Boolean,default:!1}},setup:function(e,t){var n,o=t.emit,c=se(),l=Object(j["computed"])((function(){return c.state.handleElementId})),a=Object(j["ref"])(),r=Object(ce["debounce"])((function(){o("update",n.dom.innerHTML)}),300,{trailing:!0}),i=function(){"请输入内容"===e.value&&setTimeout((function(){Object(Jo["d"])(n.state,n.dispatch)}),0),c.commit(y.SET_DISABLE_HOTKEYS_STATE,!0),o("focus")},u=function(){c.commit(y.SET_DISABLE_HOTKEYS_STATE,!1),o("blur")},d=Object(ce["debounce"])((function(){var t=z(n,{color:e.defaultColor,fontname:e.defaultFontName});c.commit(y.SET_RICHTEXT_ATTRS,t)}),30,{trailing:!0}),s=function(){r(),d()},f=Object(j["computed"])((function(){return e.value}));Object(j["watch"])(f,(function(){if(n&&!n.hasFocus()){var e=n.state,t=e.doc,o=e.tr;n.dispatch(o.replaceRangeWith(0,t.content.size,Lc(f.value)))}})),Object(j["watch"])((function(){return e.editable}),(function(){n.setProps({editable:function(){return e.editable}})})),Object(j["onMounted"])((function(){n=Vc(a.value,f.value,{handleDOMEvents:{focus:i,blur:u,keydown:s,click:d},editable:function(){return e.editable}}),e.autoFocus&&n.focus()})),Object(j["onUnmounted"])((function(){n&&n.destroy()}));var p=function(t){if(l.value===e.elementId){var o,c="command"in t?[t]:t,a=Object(w["a"])(c);try{for(a.s();!(o=a.n()).done;){var i=o.value;if("fontname"===i.command&&i.value){var u=n.state.schema.marks.fontname.create({fontname:i.value}),s=n.state.selection.empty;s&&Object(Jo["d"])(n.state,n.dispatch);var f=n.state.selection,p=f.$from,m=f.$to;n.dispatch(n.state.tr.addMark(p.pos,m.pos,u))}else if("fontsize"===i.command&&i.value){var b=n.state.schema.marks.fontsize.create({fontsize:i.value}),v=n.state.selection.empty;v&&Object(Jo["d"])(n.state,n.dispatch);var O=n.state.selection,h=O.$from,j=O.$to;n.dispatch(n.state.tr.addMark(h.pos,j.pos,b))}else if("color"===i.command&&i.value){var g=n.state.schema.marks.forecolor.create({color:i.value}),y=n.state.selection.empty;y&&Object(Jo["d"])(n.state,n.dispatch);var E=n.state.selection,C=E.$from,x=E.$to;n.dispatch(n.state.tr.addMark(C.pos,x.pos,g))}else if("backcolor"===i.command&&i.value){var k=n.state.schema.marks.backcolor.create({backcolor:i.value}),I=n.state.selection.empty;I&&Object(Jo["d"])(n.state,n.dispatch);var S=n.state.selection,N=S.$from,T=S.$to;n.dispatch(n.state.tr.addMark(N.pos,T.pos,k))}else if("bold"===i.command){var L=n.state.selection.empty;L&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.strong)(n.state,n.dispatch)}else if("em"===i.command){var V=n.state.selection.empty;V&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.em)(n.state,n.dispatch)}else if("underline"===i.command){var _=n.state.selection.empty;_&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.underline)(n.state,n.dispatch)}else if("strikethrough"===i.command){var B=n.state.selection.empty;B&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.strikethrough)(n.state,n.dispatch)}else if("subscript"===i.command)Object(Jo["f"])(n.state.schema.marks.subscript)(n.state,n.dispatch);else if("superscript"===i.command)Object(Jo["f"])(n.state.schema.marks.superscript)(n.state,n.dispatch);else if("blockquote"===i.command)Object(Jo["g"])(n.state.schema.nodes.blockquote)(n.state,n.dispatch);else if("code"===i.command)Object(Jo["f"])(n.state.schema.marks.code)(n.state,n.dispatch);else if("align"===i.command&&i.value)Ac(n,i.value);else if("bulletList"===i.command){var D=n.state.schema.nodes,M=D.bullet_list,A=D.list_item;Pc(M,A)(n.state,n.dispatch)}else if("orderedList"===i.command){var z=n.state.schema.nodes,P=z.ordered_list,R=z.list_item;Pc(P,R)(n.state,n.dispatch)}else if("clear"===i.command){var F=n.state.selection.empty;F&&Object(Jo["d"])(n.state,n.dispatch);var H=n.state.selection,U=H.$from,G=H.$to;n.dispatch(n.state.tr.removeMark(U.pos,G.pos))}else"insert"===i.command&&i.value&&n.dispatch(n.state.tr.insertText(i.value))}}catch(q){a.e(q)}finally{a.f()}n.focus(),r(),d()}};return Dc.on(Zo.RICH_TEXT_COMMAND,p),Object(j["onUnmounted"])((function(){Dc.off(Zo.RICH_TEXT_COMMAND,p)})),{editorViewRef:a}}});n("5a85");Rc.render=Yo,Rc.__scopeId="data-v-3100bb88";var Fc=Rc,Hc=Object(j["defineComponent"])({name:"editable-element-text",components:{ElementOutline:Xo,ProsemirrorEditor:Fc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=se(),n=We(),o=n.addHistorySnapshot,c=Object(j["ref"])(),l=Object(j["computed"])((function(){return e.elementInfo.shadow})),a=io(l),r=a.shadowStyle,i=Object(j["computed"])((function(){return t.state.handleElementId})),u=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo,n))},d=Object(j["ref"])(-1),s=Object(j["computed"])((function(){return t.state.isScaling}));Object(j["watch"])(s,(function(){i.value===e.elementInfo.id&&(s.value||-1===d.value||(t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:d.value}}),d.value=-1))}));var f=function(n){var o=n[0].contentRect;if(c.value){var l=o.height;e.elementInfo.height!==l&&(s.value?d.value=l:t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:l}}))}},p=new ResizeObserver(f);Object(j["onMounted"])((function(){c.value&&p.observe(c.value)})),Object(j["onUnmounted"])((function(){c.value&&p.unobserve(c.value)}));var m=function(n){t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{content:n}}),o()};return{elementRef:c,shadowStyle:r,updateContent:m,handleSelectElement:u}}});n("b893");Hc.render=Ho,Hc.__scopeId="data-v-3c0937ee";var Uc=Hc;Object(j["pushScopeId"])("data-v-5a268d2a");var Gc={key:0},qc=["transform"],Xc=["d","fill","stroke","stroke-width","stroke-dasharray"],Wc=["innerHTML"];function Yc(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("GradientDefs"),r=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveComponent"])("ProsemirrorEditor"),u=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle,color:e.text.defaultColor,fontFamily:e.text.defaultFontName}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)}),onDblclick:t[3]||(t[3]=function(t){return e.enterEditing()})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:Object(j["withCtx"])((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createElementBlock"])("defs",Gc,[Object(j["createVNode"])(a,{id:"editabel-gradient-".concat(e.elementInfo.id),type:e.elementInfo.gradient.type,color1:e.elementInfo.gradient.color[0],color2:e.elementInfo.gradient.color[1],rotate:e.elementInfo.gradient.rotate},null,8,["id","type","color1","color2","rotate"])])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox,", ").concat(e.elementInfo.height/e.elementInfo.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createElementVNode"])("path",{"vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",d:e.elementInfo.path,fill:e.elementInfo.gradient?"url(#editabel-gradient-".concat(e.elementInfo.id,")"):e.elementInfo.fill,stroke:e.outlineColor,"stroke-width":e.outlineWidth,"stroke-dasharray":"dashed"===e.outlineStyle?"10 6":"0 0"},null,8,Xc)],8,qc)]})),_:1},8,["width","height"]),Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["shape-text",e.text.align])},[e.editable?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,elementId:e.elementInfo.id,defaultColor:e.text.defaultColor,defaultFontName:e.text.defaultFontName,editable:!e.elementInfo.lock,autoFocus:!0,value:e.text.content,onUpdate:t[0]||(t[0]=function(t){return e.updateText(t)}),onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(){}),["stop"]))},null,8,["elementId","defaultColor","defaultFontName","editable","value"])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"show-text ProseMirror-static",innerHTML:e.text.content},null,8,Wc))],2)],36),[[u,e.contextmenus]])],4)],6)}Object(j["popScopeId"])();var Zc=["id","gradientTransform"],Jc=["stop-color"],Kc=["stop-color"],Qc=["id"],$c=["stop-color"],el=["stop-color"];function tl(e,t,n,o,c,l){return"linear"===e.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("linearGradient",{key:0,id:e.id,x1:"0%",y1:"0%",x2:"100%",y2:"0%",gradientTransform:"rotate(".concat(e.rotate,",0.5,0.5)")},[Object(j["createElementVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,Jc),Object(j["createElementVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,Kc)],8,Zc)):(Object(j["openBlock"])(),Object(j["createElementBlock"])("radialGradient",{key:1,id:e.id},[Object(j["createElementVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,$c),Object(j["createElementVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,el)],8,Qc))}var nl=Object(j["defineComponent"])({name:"gradient-defs",props:{id:{type:String,required:!0},type:{type:String},color1:{type:String,required:!0},color2:{type:String,required:!0},rotate:{type:Number,default:0}}});nl.render=tl;var ol=nl,cl=Object(j["defineComponent"])({name:"editable-element-shape",components:{GradientDefs:ol,ProsemirrorEditor:Fc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=se(),n=We(),o=n.addHistorySnapshot,c=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},l=Object(j["computed"])((function(){return e.elementInfo.outline})),a=ho(l),r=a.outlineWidth,i=a.outlineStyle,u=a.outlineColor,d=Object(j["computed"])((function(){return e.elementInfo.shadow})),s=io(d),f=s.shadowStyle,p=Object(j["computed"])((function(){return e.elementInfo.flipH})),m=Object(j["computed"])((function(){return e.elementInfo.flipV})),b=uo(p,m),v=b.flipStyle,O=Object(j["ref"])(!1),h=function(){O.value=!0,t.commit(y.SET_EDITING_SHAPE_ELEMENT_ID,e.elementInfo.id)},g=function(){O.value=!1,t.commit(y.SET_EDITING_SHAPE_ELEMENT_ID,"")},E=Object(j["computed"])((function(){return t.state.handleElementId}));Object(j["watch"])(E,(function(){E.value!==e.elementInfo.id&&O.value&&g()}));var C=Object(j["computed"])((function(){var t={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"};return e.elementInfo.text?e.elementInfo.text:t})),x=function(n){var c=Object(I["a"])(Object(I["a"])({},C.value),{},{content:n});t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{text:c}}),o()};return{shadowStyle:f,outlineWidth:r,outlineStyle:i,outlineColor:u,flipStyle:v,editable:O,text:C,handleSelectElement:c,updateText:x,enterEditing:h}}});n("4bb1");cl.render=Yc,cl.__scopeId="data-v-5a268d2a";var ll=cl;Object(j["pushScopeId"])("data-v-1d4bfa98");var al=["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"],rl=["d"];function il(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinePointMarker"),r=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,id:e.elementInfo.id,position:"start",type:e.elementInfo.points[0],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0),e.elementInfo.points[1]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,id:e.elementInfo.id,position:"end",type:e.elementInfo.points[1],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0)]),Object(j["createElementVNode"])("path",{d:e.path,stroke:e.elementInfo.color,"stroke-width":e.elementInfo.width,"stroke-dasharray":e.lineDashArray,fill:"none","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":"","marker-start":e.elementInfo.points[0]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[0],"-start)"):"","marker-end":e.elementInfo.points[1]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[1],"-end)"):""},null,8,al),Object(j["withDirectives"])(Object(j["createElementVNode"])("path",{class:"line-path",d:e.path,stroke:"transparent","stroke-width":"20",fill:"none",onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)})},null,40,rl),[[i,e.contextmenus]])]})),_:1},8,["width","height"])],4)],6)}Object(j["popScopeId"])();var ul=["id","markerWidth","markerHeight","refX","refY"],dl=["d","fill","transform"];function sl(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("marker",{id:"".concat(e.id,"-").concat(e.type,"-").concat(e.position),markerUnits:"userSpaceOnUse",orient:"auto",markerWidth:3*e.size,markerHeight:3*e.size,refX:1.5*e.size,refY:1.5*e.size},[Object(j["createElementVNode"])("path",{d:e.path,fill:e.color,transform:"scale(".concat(.3*e.size,", ").concat(.3*e.size,") rotate(").concat(e.rotate,", 5, 5)")},null,8,dl)],8,ul)}var fl={dot:"m0 5a5 5 0 1 0 10 0a5 5 0 1 0 -10 0z",arrow:"M0,0 L10,5 0,10 Z"},pl={"arrow-start":180,"arrow-end":0},ml=Object(j["defineComponent"])({name:"line-point-marker",props:{id:{type:String,required:!0},position:{type:String,required:!0},type:{type:String,required:!0},color:{type:String},baseSize:{type:Number,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return fl[e.type]})),n=Object(j["computed"])((function(){return pl["".concat(e.type,"-").concat(e.position)]||0})),o=Object(j["computed"])((function(){return e.baseSize<2?2:e.baseSize}));return{path:t,rotate:n,size:o}}});ml.render=sl;var bl=ml,vl=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:bl},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=Object(j["computed"])((function(){return e.elementInfo.shadow})),o=io(n),c=o.shadowStyle,l=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),a=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),r=Object(j["computed"])((function(){return"dashed"===e.elementInfo.style?"10 6":"0 0"})),i=Object(j["computed"])((function(){return Ge(e.elementInfo)}));return{handleSelectElement:t,shadowStyle:c,svgWidth:l,svgHeight:a,lineDashArray:r,path:i}}});n("0d71");vl.render=il,vl.__scopeId="data-v-1d4bfa98";var Ol=vl;function hl(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline"),r=Object(j["resolveComponent"])("Chart"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-chart",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill}),onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)}),onDblclick:t[1]||(t[1]=function(t){return e.openDataEditor()})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,type:e.elementInfo.chartType,data:e.elementInfo.data,options:e.elementInfo.options,themeColor:e.elementInfo.themeColor,gridColor:e.elementInfo.gridColor},null,8,["width","height","type","data","options","themeColor","gridColor"])],36),[[i,e.contextmenus]])],6)}Object(j["pushScopeId"])("data-v-1f297efe");var jl={class:"chart"};function gl(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",jl,[Object(j["createElementVNode"])("div",{class:"chart-content",ref:"chartRef",style:Object(j["normalizeStyle"])({width:e.width+"px",height:e.height+"px",transform:"scale(".concat(1/e.slideScale,")")})},null,4)])}Object(j["popScopeId"])();var yl=n("ba48"),El=n.n(yl),Cl=(n("aa97"),Object(j["defineComponent"])({name:"chart",props:{width:{type:Number,required:!0},height:{type:Number,required:!0},type:{type:String,required:!0},data:{type:Object,required:!0},options:{type:Object},themeColor:{type:Array,required:!0},gridColor:{type:String}},setup:function(e){var t,n=Object(j["ref"])(),o=Object(j["inject"])("slideScale")||Object(j["ref"])(1),c=function(){var t=e.options||{},n=Object(I["a"])(Object(I["a"])({},t),{},{width:e.width*o.value,height:e.height*o.value}),c="pie"===e.type?Object(I["a"])(Object(I["a"])({},e.data),{},{series:e.data.series[0]}):e.data;return{data:c,options:n}},l=function(){if(n.value){var o=Object(ce["upperFirst"])(e.type),l=c(),a=l.data,r=l.options;t=new El.a[o](n.value,a,r)}},a=function(){if(t){var e=c(),n=e.data,o=e.options;t.update(n,o)}else l()};Object(j["watch"])([function(){return e.width},function(){return e.height},function(){return e.data},o],a),Object(j["onMounted"])(l);var r=function(){if(n.value){var t=[];if(10===e.themeColor.length)t=e.themeColor;else if(1===e.themeColor.length)t=H()(e.themeColor[0]).analogous(10).map((function(e){return e.toHexString()}));else{var o=e.themeColor.length,c=H()(e.themeColor[o-1]).analogous(11-o).map((function(e){return e.toHexString()}));t=[].concat(Object(oe["a"])(e.themeColor.slice(0,o-1)),Object(oe["a"])(c))}for(var l=0;l<10;l++)n.value.style.setProperty("--theme-color-".concat(l+1),t[l])}};Object(j["watch"])((function(){return e.themeColor}),r),Object(j["onMounted"])(r);var i=function(){n.value&&e.gridColor&&n.value.style.setProperty("--grid-color",e.gridColor)};return Object(j["watch"])((function(){return e.gridColor}),i),Object(j["onMounted"])(i),{slideScale:o,chartRef:n}}}));n("8d36"),n("d78b");Cl.render=gl,Cl.__scopeId="data-v-1f297efe";var xl=Cl,kl=Object(j["defineComponent"])({name:"editable-element-chart",components:{ElementOutline:Xo,Chart:xl},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=function(){Dc.emit(Zo.OPEN_CHART_DATA_EDITOR)};return{handleSelectElement:t,openDataEditor:n}}});n("5ef6");kl.render=hl,kl.__scopeId="data-v-30f6d5ed";var Il=kl;Object(j["pushScopeId"])("data-v-10d814ca");var wl={class:"element-content"};function Sl(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("EditableTable"),r=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-table",{lock:e.elementInfo.lock}]),ref:"elementRef",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",wl,[Object(j["createVNode"])(a,{onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(){}),["stop"])),data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme,editable:e.editable,onChange:t[1]||(t[1]=function(t){return e.updateTableCells(t)}),onChangeColWidths:t[2]||(t[2]=function(t){return e.updateColWidths(t)}),onChangeSelectedCells:t[3]||(t[3]=function(t){return e.updateSelectedCells(t)})},null,8,["data","width","colWidths","outline","theme","editable"]),!e.editable||e.elementInfo.lock?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:Object(j["normalizeClass"])(["table-mask",{lock:e.elementInfo.lock}]),onDblclick:t[4]||(t[4]=function(t){return e.startEdit()}),onMousedown:t[5]||(t[5]=function(t){return e.handleSelectElement(t)})},[Object(j["createElementVNode"])("div",{class:"mask-tip",style:Object(j["normalizeStyle"])({transform:"scale(".concat(1/e.canvasScale,")")})},"双击编辑",4)],34)):Object(j["createCommentVNode"])("",!0)],512),[[r,e.contextmenus]])],6)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-5cfa4d0e");var Nl={key:0,class:"handler"},Tl=["onMousedown"],Ll=["width"],Vl=["rowspan","colspan","data-cell-index","onMousedown","onMouseenter"],_l=["innerHTML"];function Bl(e,t,n,o,c,l){var a,r,i,u,d,s=Object(j["resolveComponent"])("CustomTextarea"),f=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"editable-table",style:Object(j["normalizeStyle"])({width:e.totalWidth+"px"})},[e.editable?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Nl,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.dragLinePosition,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"drag-line",key:n,style:Object(j["normalizeStyle"])({left:t+"px"}),onMousedown:function(t){return e.handleMousedownColHandler(t,n)}},null,44,Tl)})),128))])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("table",{class:Object(j["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(j["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(j["createElementVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,Ll)})),128))]),Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.tableCells,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("tr",{key:n},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t,o){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("td",{class:Object(j["normalizeClass"])(["cell",{selected:e.selectedCells.includes("".concat(n,"_").concat(o))&&e.selectedCells.length>1,active:e.activedCell==="".concat(n,"_").concat(o)}]),style:Object(j["normalizeStyle"])(Object(I["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(t.style))),key:t.id,rowspan:t.rowspan,colspan:t.colspan,"data-cell-index":"".concat(n,"_").concat(o),onMousedown:function(t){return e.handleCellMousedown(t,n,o)},onMouseenter:function(t){return e.handleCellMouseenter(n,o)}},[e.activedCell==="".concat(n,"_").concat(o)?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,class:Object(j["normalizeClass"])(["cell-text",{active:e.activedCell==="".concat(n,"_").concat(o)}]),contenteditable:"plaintext-only",value:t.text,onUpdateValue:function(t){return e.handleInput(t,n,o)},onInsertExcelData:function(t){return e.insertExcelData(t,n,o)}},null,8,["class","value","onUpdateValue","onInsertExcelData"])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"cell-text",innerHTML:e.formatText(t.text)},null,8,_l))],46,Vl)),[[j["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))],[f,function(t){return e.contextmenus(t)}]])})),128))])})),128))])],6)],4)}Object(j["popScopeId"])();var Dl=function(e){if(!e)return{};var t=e.bold,n=e.em,o=e.underline,c=e.strikethrough,l=e.color,a=e.backcolor,r=e.fontsize,i=e.fontname,u=e.align,d="".concat(o?"underline":""," ").concat(c?"line-through":"");return" "===d&&(d="none"),{fontWeight:t?"bold":"normal",fontStyle:n?"italic":"normal",textDecoration:d,color:l||"#000",backgroundColor:a||"",fontSize:r||"14px",fontFamily:i||"微软雅黑",textAlign:u||"left"}},Ml=function(e){return e.replace(/\n/g,"
").replace(/ /g," ")},Al=function(e){var t=Object(j["computed"])((function(){for(var t=[],n=0;n1||l.rowspan>1)for(var a=n;a=d&&m<=f&&v>=s&&v<=p&&u.push("".concat(m,"_").concat(v));return u}));Object(j["watch"])(g,(function(e,t){Object(ce["isEqual"])(e,t)||n("changeSelectedCells",g.value)}));var y=Object(j["computed"])((function(){return g.value.length>1?null:g.value[0]})),E=Object(j["computed"])((function(){if(!a.value.length)return null;var e=Object(Ut["a"])(a.value,2),t=e[0],n=e[1];if(!r.value.length)return{row:[t,t],col:[n,n]};var o=Object(Ut["a"])(r.value,2),c=o[0],l=o[1];if(t===c&&n===l)return{row:[t,t],col:[n,n]};var i=Math.min(t,c),u=Math.min(n,l),d=Math.max(t,c),s=Math.max(n,l);return{row:[i,d],col:[u,s]}})),C=function(){return l.value=!1},x=function(e,t,n){0===e.button&&(r.value=[],l.value=!0,a.value=[t,n])},k=function(e,t){l.value&&(r.value=[e,t])};Object(j["onMounted"])((function(){document.addEventListener("mouseup",C)})),Object(j["onUnmounted"])((function(){document.removeEventListener("mouseup",C)}));var w=function(e,t){return h.value.includes("".concat(e,"_").concat(t))},S=function(e){var t=i.value.length-1;a.value=[0,e],r.value=[t,e]},N=function(e){var t=i.value[e].length-1;a.value=[e,0],r.value=[e,t]},T=function(){var e=i.value.length-1,t=i.value[e].length-1;a.value=[0,0],r.value=[e,t]},L=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=i.value[e],o=[],c=0;c=0;u--)if(!w(u,r)){t[u][r].rowspan=t[u][r].rowspan-1;break}t.splice(e,1),i.value=t},V=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),o=[],c=0;c=0;u--)if(!w(r,u)){t[r][u].colspan=t[r][u].colspan-1;break}i.value=t.map((function(t){return t.splice(e,1),t})),f.value.splice(e,1),n("changeColWidths",f.value)},_=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=[],o=0;oi.value.length&&(a=t+c-i.value.length),o+l>i.value[0].length&&(r=o+l-i.value[0].length),(a||r)&&D(a,r),Object(j["nextTick"])((function(){for(var a=0;a1,n=e[0].length>1;return{canDeleteRow:t,canDeleteCol:n}},X=function(e,t){var n=g.value.length>1,o=i.value[e][t],c=n,l=!n&&(o.rowspan>1||o.colspan>1);return{canMerge:c,canSplit:l}},W=function(e){var t=e.dataset.cellIndex,n=+t.split("_")[0],o=+t.split("_")[1];g.value.includes("".concat(n,"_").concat(o))||(a.value=[n,o],r.value=[]);var c=X(n,o),l=c.canMerge,i=c.canSplit,u=q(),d=u.canDeleteRow,s=u.canDeleteCol;return[{text:"插入列",children:[{text:"到左侧",handler:function(){return B(o)}},{text:"到右侧",handler:function(){return B(o+1)}}]},{text:"插入行",children:[{text:"到上方",handler:function(){return _(n)}},{text:"到下方",handler:function(){return _(n+1)}}]},{text:"删除列",disable:!s,handler:function(){return V(o)}},{text:"删除行",disable:!d,handler:function(){return L(n)}},{divider:!0},{text:"合并单元格",disable:!l,handler:M},{text:"取消合并单元格",disable:!i,handler:function(){return A(n,o)}},{divider:!0},{text:"选中当前列",handler:function(){return S(o)}},{text:"选中当前行",handler:function(){return N(n)}},{text:"选中全部单元格",handler:T}]};return{getTextStyle:Dl,dragLinePosition:b,tableCells:i,colSizeList:f,totalWidth:p,hideCells:h,selectedCells:g,activedCell:y,selectedRange:E,handleCellMousedown:x,handleCellMouseenter:k,selectCol:S,selectRow:N,handleMousedownColHandler:z,contextmenus:W,handleInput:H,insertExcelData:U,subThemeColor:s,formatText:Ml}}});n("2c82");Ul.render=Bl,Ul.__scopeId="data-v-5cfa4d0e";var Gl=Ul,ql=Object(j["defineComponent"])({name:"editable-element-table",components:{EditableTable:Gl},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.handleElementId})),c=Object(j["ref"])(),l=We(),a=l.addHistorySnapshot,r=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},i=Object(j["ref"])(!1);Object(j["watch"])(o,(function(){o.value!==e.elementInfo.id&&(i.value=!1)})),Object(j["watch"])(i,(function(){t.commit(y.SET_DISABLE_HOTKEYS_STATE,i.value)}));var u=function(){e.elementInfo.lock||(i.value=!0)},d=Object(j["ref"])(-1),s=Object(j["computed"])((function(){return t.state.isScaling}));Object(j["watch"])(s,(function(){o.value===e.elementInfo.id&&(s.value&&(i.value=!1),s.value||-1===d.value||(t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:d.value}}),d.value=-1))}));var f=function(n){var o=n[0].contentRect;if(c.value){var l=o.height;e.elementInfo.height!==l&&(s.value?d.value=l:t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:l}}))}},p=new ResizeObserver(f);Object(j["onMounted"])((function(){c.value&&p.observe(c.value)})),Object(j["onUnmounted"])((function(){c.value&&p.unobserve(c.value)}));var m=function(n){t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{data:n}}),a()},b=function(n){var o=n.reduce((function(e,t){return e+t})),c=n.map((function(e){return e/o}));t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{width:o,colWidths:c}}),a()},v=function(e){Object(j["nextTick"])((function(){return t.commit(y.SET_SELECTED_TABLE_CELLS,e)}))};return{elementRef:c,canvasScale:n,handleSelectElement:r,updateTableCells:m,updateColWidths:b,editable:i,startEdit:u,updateSelectedCells:v}}});n("389d");ql.render=Sl,ql.__scopeId="data-v-10d814ca";var Xl=ql,Wl=Object(j["defineComponent"])({name:"editable-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},isMultiSelect:{type:Boolean,required:!0},selectElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,Fo),Object(q["a"])(t,no.TEXT,Uc),Object(q["a"])(t,no.SHAPE,ll),Object(q["a"])(t,no.LINE,Ol),Object(q["a"])(t,no.CHART,Il),Object(q["a"])(t,no.TABLE,Xl),t);return n[e.elementInfo.type]||null})),n=at(),o=n.orderElement,c=oo(),l=c.alignElementToCanvas,a=nt(),r=a.combineElements,i=a.uncombineElements,u=tt(),d=u.deleteElement,s=et(),f=s.lockElement,p=s.unlockElement,m=ot(),b=m.copyElement,v=m.pasteElement,O=m.cutElement,h=ct(),g=h.selectAllElement,y=function(){return e.elementInfo.lock?[{text:"解锁",handler:function(){return p(e.elementInfo)}}]:[{text:"剪切",subText:"Ctrl + X",handler:O},{text:"复制",subText:"Ctrl + C",handler:b},{text:"粘贴",subText:"Ctrl + V",handler:v},{divider:!0},{text:"水平居中",handler:function(){return l(pe.HORIZONTAL)},children:[{text:"水平垂直居中",handler:function(){return l(pe.CENTER)}},{text:"水平居中",handler:function(){return l(pe.HORIZONTAL)}},{text:"左对齐",handler:function(){return l(pe.LEFT)}},{text:"右对齐",handler:function(){return l(pe.RIGHT)}}]},{text:"垂直居中",handler:function(){return l(pe.VERTICAL)},children:[{text:"水平垂直居中",handler:function(){return l(pe.CENTER)}},{text:"垂直居中",handler:function(){return l(pe.VERTICAL)}},{text:"顶部对齐",handler:function(){return l(pe.TOP)}},{text:"底部对齐",handler:function(){return l(pe.BOTTOM)}}]},{divider:!0},{text:"置于顶层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,fe.TOP)},children:[{text:"置于顶层",handler:function(){return o(e.elementInfo,fe.TOP)}},{text:"上移一层",handler:function(){return o(e.elementInfo,fe.UP)}}]},{text:"置于底层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,fe.BOTTOM)},children:[{text:"置于底层",handler:function(){return o(e.elementInfo,fe.BOTTOM)}},{text:"下移一层",handler:function(){return o(e.elementInfo,fe.DOWN)}}]},{divider:!0},{text:"设置链接",handler:e.openLinkDialog},{text:e.elementInfo.groupId?"取消组合":"组合",subText:"Ctrl + G",handler:e.elementInfo.groupId?i:r,hide:!e.isMultiSelect},{text:"全选",subText:"Ctrl + A",handler:g},{text:"锁定",subText:"Ctrl + L",handler:f},{text:"删除",subText:"Delete",handler:d}]};return{currentElementComponent:t,contextmenus:y}}});Wl.render=to;var Yl=Wl;function Zl(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])("mouse-selection quadrant-".concat(n.quadrant)),style:Object(j["normalizeStyle"])({top:n.top+"px",left:n.left+"px",width:n.width+"px",height:n.height+"px"})},null,6)}var Jl={name:"mouse-selection",props:{top:{type:Number,required:!0},left:{type:Number,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},quadrant:{type:Number,required:!0,validator:function(e){return[1,2,3,4].includes(e)}}}};n("2007");Jl.render=Zl,Jl.__scopeId="data-v-1619c258";var Kl=Jl;function Ql(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("GridLines");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"viewport-background",style:Object(j["normalizeStyle"])(e.backgroundStyle)},[e.showGridLines?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0})):Object(j["createCommentVNode"])("",!0)],4)}Object(j["pushScopeId"])("data-v-1d945f13");var $l=["d","stroke"];function ea(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"grid-lines"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("path",{style:Object(j["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")}),d:e.path,fill:"none",stroke:e.gridColor,"stroke-width":"0.3","stroke-dasharray":"5"},null,12,$l)]})),_:1})}Object(j["popScopeId"])();var ta=Object(j["defineComponent"])({name:"grid-lines",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasScale})),n=Object(j["computed"])((function(){return e.state.viewportRatio})),o=Object(j["computed"])((function(){var t;return null===(t=e.getters.currentSlide)||void 0===t?void 0:t.background})),c=Object(j["computed"])((function(){var e,t=(null===(e=o.value)||void 0===e?void 0:e.color)||"#fff",n=["#000","#fff"];return H.a.mostReadable(t,n,{includeFallbackColors:!0}).setAlpha(.5).toRgbString()})),l=50,a=function(){for(var e=Je,t=Je*n.value,o="",c=0;c<=Math.floor(t/l);c++)o+="M0 ".concat(c*l," L").concat(e," ").concat(c*l," ");for(var a=0;a<=Math.floor(e/l);a++)o+="M".concat(a*l," 0 L").concat(a*l," ").concat(t," ");return o};return{canvasScale:t,gridColor:c,width:Je,height:Je*n.value,path:a()}}});n("f46c");ta.render=ea,ta.__scopeId="data-v-1d945f13";var na=ta,oa=function(e){var t=Object(j["computed"])((function(){if(!e.value)return{backgroundColor:"#fff"};var t=e.value,n=t.type,o=t.color,c=t.image,l=t.imageSize,a=t.gradientColor,r=t.gradientRotate,i=t.gradientType;if("solid"===n)return{backgroundColor:o};if("image"===n)return c?"repeat"===l?{backgroundImage:"url(".concat(c),backgroundRepeat:"repeat",backgroundSize:"contain"}:{backgroundImage:"url(".concat(c),backgroundRepeat:"no-repeat",backgroundSize:l||"cover"}:{backgroundColor:"#fff"};if("gradient"===n){var u=r||0,d=a?a[0]:"#fff",s=a?a[1]:"#fff";return"radial"===i?{backgroundImage:"radial-gradient(".concat(d,", ").concat(s)}:{backgroundImage:"linear-gradient(".concat(u,"deg, ").concat(d,", ").concat(s)}}return{backgroundColor:"#fff"}}));return{backgroundStyle:t}},ca=Object(j["defineComponent"])({name:"viewport-background",components:{GridLines:na},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.showGridLines})),n=Object(j["computed"])((function(){var t;return null===(t=e.getters.currentSlide)||void 0===t?void 0:t.background})),o=oa(n),c=o.backgroundStyle;return{showGridLines:t,backgroundStyle:c}}});n("f802");ca.render=Ql,ca.__scopeId="data-v-a9ca1b50";var la=ca;function aa(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"alignment-line",style:Object(j["normalizeStyle"])({left:e.left,top:e.top})},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["line",e.type]),style:Object(j["normalizeStyle"])(e.sizeStyle)},null,6)],4)}var ra=Object(j["defineComponent"])({name:"alignment-line",props:{type:{type:String,required:!0},axis:{type:Object,required:!0},length:{type:Number,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.axis.x*n.value+"px"})),c=Object(j["computed"])((function(){return e.axis.y*n.value+"px"})),l=Object(j["computed"])((function(){return"vertical"===e.type?{height:e.length*n.value+"px"}:{width:e.length*n.value+"px"}}));return{left:o,top:c,sizeStyle:l}}});n("92ad");ra.render=aa,ra.__scopeId="data-v-2d3eddf5";var ia=ra;Object(j["pushScopeId"])("data-v-04472140");var ua=["d"];function da(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"element-create-selection",ref:"selectionRef",onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.createSelection(t)}),["stop"]))},[e.start&&e.end?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:Object(j["normalizeClass"])(["selection",e.creatingElement.type]),style:Object(j["normalizeStyle"])(e.position)},["line"===e.creatingElement.type&&e.lineData?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,overflow:"visible",width:e.lineData.svgWidth,height:e.lineData.svgHeight},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("path",{d:e.lineData.path,stroke:"#d14424",fill:"none","stroke-width":"1","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":""},null,8,ua)]})),_:1},8,["width","height"])):Object(j["createCommentVNode"])("",!0)],6)):Object(j["createCommentVNode"])("",!0)],544)}Object(j["popScopeId"])();var sa=Object(j["defineComponent"])({name:"element-create-selection",emits:["created"],setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.ctrlOrShiftKeyActive})),l=Object(j["computed"])((function(){return o.state.creatingElement})),a=Object(j["ref"])(),r=Object(j["ref"])(),i=Object(j["ref"])(),u=Object(j["reactive"])({x:0,y:0});Object(j["onMounted"])((function(){if(i.value){var e=i.value.getBoundingClientRect(),t=e.x,n=e.y;u.x=t,u.y=n}}));var d=function(e){var t=!0,o=e.pageX,i=e.pageY;a.value=[o,i],document.onmousemove=function(e){if(l.value&&t){var n=e.pageX,a=e.pageY;if(c.value){var u=n-o,d=a-i,s=Math.abs(u),f=Math.abs(d);if("shape"===l.value.type){var p=d>0&&u<0||d<0&&u>0;s>f?a=p?i-u:i+u:n=p?o-d:o+d}else"line"===l.value.type&&(s>f?a=i:n=o)}r.value=[n,a]}},document.onmouseup=function(e){var c,u;document.onmousemove=null,document.onmouseup=null,t=!1;var d=e.pageX,s=e.pageY,f=30;if("line"===(null===(c=l.value)||void 0===c?void 0:c.type)&&(Math.abs(d-o)>=f||Math.abs(s-i)>=f))n("created",{start:a.value,end:r.value});else if("line"!==(null===(u=l.value)||void 0===u?void 0:u.type)&&Math.abs(d-o)>=f&&Math.abs(s-i)>=f)n("created",{start:a.value,end:r.value});else{var p=200,m=Math.min(d,o),b=Math.min(s,i),v=Math.max(d,o),O=Math.max(s,i),h=v-m>=f?v-m:p,j=O-b>=f?O-b:p;n("created",{start:[m,b],end:[m+h,b+j]})}}},s=Object(j["computed"])((function(){if(!a.value||!r.value)return null;if(!l.value||"line"!==l.value.type)return null;var e=Object(Ut["a"])(a.value,2),t=e[0],n=e[1],o=Object(Ut["a"])(r.value,2),c=o[0],i=o[1],u=Math.min(t,c),d=Math.max(t,c),s=Math.min(n,i),f=Math.max(n,i),p=d-u>=24?d-u:24,m=f-s>=24?f-s:24,b=t===u?0:d-u,v=n===s?0:f-s,O=c===u?0:d-u,h=i===s?0:f-s,j="M".concat(b,", ").concat(v," L").concat(O,", ").concat(h);return{svgWidth:p,svgHeight:m,startX:b,startY:v,endX:O,endY:h,path:j}})),f=Object(j["computed"])((function(){if(!a.value||!r.value)return{};var e=Object(Ut["a"])(a.value,2),t=e[0],n=e[1],o=Object(Ut["a"])(r.value,2),c=o[0],l=o[1],i=Math.min(t,c),d=Math.max(t,c),s=Math.min(n,l),f=Math.max(n,l),p=d-i,m=f-s;return{left:i-u.x+"px",top:s-u.y+"px",width:p+"px",height:m+"px"}}));return{selectionRef:i,start:a,end:r,creatingElement:l,createSelection:d,lineData:s,position:f}}});n("eec0");sa.render=da,sa.__scopeId="data-v-04472140";var fa=sa;function pa(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"multi-select-operate",style:Object(j["normalizeStyle"])({left:e.minX*e.canvasScale+"px",top:e.minY*e.canvasScale+"px"})},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.disableResize?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleMultiElement(n,{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY},t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))],4)}var ma=function(e,t){var n=Object(j["computed"])((function(){return[{direction:be.LEFT_TOP,style:{}},{direction:be.TOP,style:{left:e.value/2+"px"}},{direction:be.RIGHT_TOP,style:{left:e.value+"px"}},{direction:be.LEFT,style:{top:t.value/2+"px"}},{direction:be.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}},{direction:be.LEFT_BOTTOM,style:{top:t.value+"px"}},{direction:be.BOTTOM,style:{left:e.value/2+"px",top:t.value+"px"}},{direction:be.RIGHT_BOTTOM,style:{left:e.value+"px",top:t.value+"px"}}]})),o=Object(j["computed"])((function(){return[{direction:be.LEFT,style:{top:t.value/2+"px"}},{direction:be.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}}]})),c=Object(j["computed"])((function(){return[{type:me.T,style:{width:e.value+"px"}},{type:me.B,style:{top:t.value+"px",width:e.value+"px"}},{type:me.L,style:{height:t.value+"px"}},{type:me.R,style:{left:e.value+"px",height:t.value+"px"}}]}));return{resizeHandlers:n,textElementResizeHandlers:o,borderLines:c}};function ba(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["resize-handler",e.rotateClassName,e.type])},null,2)}var va=Object(j["defineComponent"])({name:"resize-handler",props:{type:{type:String,default:""},rotate:{type:Number,default:0}},setup:function(e){var t=Object(j["computed"])((function(){var t="rotate-",n=e.rotate;return n>-22.5&&n<=22.5?t+0:n>22.5&&n<=67.5?t+45:n>67.5&&n<=112.5?t+90:n>112.5&&n<=157.5?t+135:n>157.5||n<=-157.5?t+0:n>-157.5&&n<=-112.5?t+45:n>-112.5&&n<=-67.5?t+90:n>-67.5&&n<=-22.5?t+135:t+0}));return{rotateClassName:t}}});n("0606");va.render=ba,va.__scopeId="data-v-680e5917";var Oa=va;function ha(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["border-line",n.type,{wide:n.isWide}])},null,2)}var ja={name:"border-line",props:{type:{type:String,required:!0},isWide:{type:Boolean,default:!1}}};n("fb1d");ja.render=ha,ja.__scopeId="data-v-630e246b";var ga=ja,ya=Object(j["defineComponent"])({name:"multi-select-operate",components:{ResizeHandler:Oa,BorderLine:ga},props:{elementList:{type:Array,required:!0},scaleMultiElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.activeElementIdList})),o=Object(j["computed"])((function(){return t.state.canvasScale})),c=Object(j["computed"])((function(){return e.elementList.filter((function(e){return n.value.includes(e.id)}))})),l=Object(j["reactive"])({minX:0,maxX:0,minY:0,maxY:0}),a=Object(j["computed"])((function(){return(l.maxX-l.minX)*o.value})),r=Object(j["computed"])((function(){return(l.maxY-l.minY)*o.value})),i=ma(a,r),u=i.resizeHandlers,d=i.borderLines,s=function(){var e=Re(c.value),t=e.minX,n=e.maxX,o=e.minY,a=e.maxY;l.minX=t,l.maxX=n,l.minY=o,l.maxY=a};Object(j["watchEffect"])(s);var f=Object(j["computed"])((function(){return c.value.some((function(e){return!!("image"!==e.type&&"shape"!==e.type||e.rotate)}))}));return Object(I["a"])(Object(I["a"])({},Object(j["toRefs"])(l)),{},{canvasScale:o,borderLines:d,disableResize:f,resizeHandlers:u})}});n("de7c");ya.render=pa,ya.__scopeId="data-v-4def6455";var Ea=ya;Object(j["pushScopeId"])("data-v-46d959c4");var Ca={key:1,class:"animation-index"};function xa(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinkHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["operate",{"multi-select":e.isMultiSelect&&!e.isActive}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top*e.canvasScale+"px",left:e.elementInfo.left*e.canvasScale+"px",transform:"rotate(".concat(e.elementInfo.rotate,"deg)"),transformOrigin:"".concat(e.elementInfo.width*e.canvasScale/2,"px ").concat(e.elementInfo.height*e.canvasScale/2,"px")})},[e.isSelected?(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentOperateComponent),{key:0,elementInfo:e.elementInfo,isActiveGroupElement:e.isActiveGroupElement,isMultiSelect:e.isMultiSelect,rotateElement:e.rotateElement,scaleElement:e.scaleElement,dragLineElement:e.dragLineElement},null,8,["elementInfo","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","dragLineElement"])):Object(j["createCommentVNode"])("",!0),"elAnimation"===e.toolbarState&&-1!==e.elementIndexInAnimation?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ca,Object(j["toDisplayString"])(e.elementIndexInAnimation+1),1)):Object(j["createCommentVNode"])("",!0),e.isActive&&e.elementInfo.link?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:2,elementInfo:e.elementInfo,openLinkDialog:e.openLinkDialog,onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(){}),["stop"]))},null,8,["elementInfo","openLinkDialog"])):Object(j["createCommentVNode"])("",!0)],6)}function ka(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["image-element-operate",{cliping:e.isCliping}])},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:Object(j["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))],2)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-9a549510");var Ia={class:"rotate-handler"};function wa(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ia)}Object(j["popScopeId"])();var Sa={name:"rotate-handler"};n("8754");Sa.render=wa,Sa.__scopeId="data-v-9a549510";var Na=Sa,Ta=Object(j["defineComponent"])({name:"image-element-operate",inheritAttrs:!1,components:{RotateHandler:Na,ResizeHandler:Oa,BorderLine:ga},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.clipingImageElementId})),c=Object(j["computed"])((function(){return o.value===e.elementInfo.id})),l=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),a=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),r=ma(l,a),i=r.resizeHandlers,u=r.borderLines;return{isCliping:c,scaleWidth:l,resizeHandlers:i,borderLines:u}}});n("dc02");Ta.render=ka,Ta.__scopeId="data-v-7dc35c8e";var La=Ta,Va={class:"text-element-operate"};function _a(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Va,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:Object(j["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var Ba=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{RotateHandler:Na,ResizeHandler:Oa,BorderLine:ga},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),c=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=ma(o,c),a=l.textElementResizeHandlers,r=l.borderLines;return{scaleWidth:o,textElementResizeHandlers:a,borderLines:r}}});Ba.render=_a;var Da=Ba,Ma={class:"shape-element-operate"};function Aa(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ma,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:Object(j["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var za=Object(j["defineComponent"])({name:"shape-element-operate",inheritAttrs:!1,components:{RotateHandler:Na,ResizeHandler:Oa,BorderLine:ga},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),c=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=ma(o,c),a=l.resizeHandlers,r=l.borderLines;return{scaleWidth:o,resizeHandlers:a,borderLines:r}}});za.render=Aa;var Pa=za,Ra={class:"text-element-operate"};function Fa(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ra,[e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.dragLineElement(n,e.elementInfo,t.handler)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var Ha=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{ResizeHandler:Oa},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},dragLineElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){var t=[{handler:ve.START,style:{left:e.elementInfo.start[0]*n.value+"px",top:e.elementInfo.start[1]*n.value+"px"}},{handler:ve.END,style:{left:e.elementInfo.end[0]*n.value+"px",top:e.elementInfo.end[1]*n.value+"px"}}];if(e.elementInfo.curve||e.elementInfo.broken){var o=e.elementInfo.curve||e.elementInfo.broken;t.push({handler:ve.MID,style:{left:o[0]*n.value+"px",top:o[1]*n.value+"px"}})}return t}));return{resizeHandlers:o}}});Ha.render=Fa;var Ua=Ha,Ga={class:"chart-element-operate"};function qa(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ga,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var Xa=Object(j["defineComponent"])({name:"chart-element-operate",inheritAttrs:!1,components:{ResizeHandler:Oa,BorderLine:ga},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),c=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=ma(o,c),a=l.resizeHandlers,r=l.borderLines;return{scaleWidth:o,resizeHandlers:a,borderLines:r}}});Xa.render=qa;var Wa=Xa,Ya={class:"table-element-operate"};function Za(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ya,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var Ja=Object(j["defineComponent"])({name:"table-element-operate",inheritAttrs:!1,components:{ResizeHandler:Oa,BorderLine:ga},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.outline.width||1})),c=Object(j["computed"])((function(){return(e.elementInfo.width+o.value)*n.value})),l=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),a=ma(c,l),r=a.textElementResizeHandlers,i=a.borderLines;return{scaleWidth:c,textElementResizeHandlers:r,borderLines:i}}});Ja.render=Za;var Ka=Ja;Object(j["pushScopeId"])("data-v-9d9e1336");var Qa=["href"],$a={class:"btns"};function er(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Divider");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"link-handler",style:Object(j["normalizeStyle"])({top:e.elementInfo.height*e.canvasScale+10+"px"})},[Object(j["createElementVNode"])("a",{class:"link",href:e.elementInfo.link,target:"_blank"},Object(j["toDisplayString"])(e.elementInfo.link),9,Qa),Object(j["createElementVNode"])("div",$a,[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.openLinkDialog()})},"更换"),Object(j["createVNode"])(a,{type:"vertical"}),Object(j["createElementVNode"])("div",{class:"btn",onClick:t[1]||(t[1]=function(t){return e.removeLink(e.elementInfo)})},"移除")])],4)}Object(j["popScopeId"])();var tr=function(){var e=se(),t=We(),n=t.addHistorySnapshot,o=function(t,o){var c=/^(https?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$/;if(!o||!c.test(o))return Ce["a"].error("不是正确的网页链接地址"),!1;var l={link:o};return e.commit(y.UPDATE_ELEMENT,{id:t.id,props:l}),n(),!0},c=function(t){e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.id,propName:"link"}),n()};return{setLink:o,removeLink:c}},nr=Object(j["defineComponent"])({name:"link-handler",props:{elementInfo:{type:Object,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasScale})),n=tr(),o=n.removeLink;return{canvasScale:t,removeLink:o}}});n("e28d");nr.render=er,nr.__scopeId="data-v-9d9e1336";var or=nr,cr=Object(j["defineComponent"])({name:"operate",components:{LinkHandler:or},props:{elementInfo:{type:Object,required:!0},isSelected:{type:Boolean,required:!0},isActive:{type:Boolean,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0},dragLineElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.toolbarState})),c=Object(j["computed"])((function(){return t.getters.currentSlide})),l=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,La),Object(q["a"])(t,no.TEXT,Da),Object(q["a"])(t,no.SHAPE,Pa),Object(q["a"])(t,no.LINE,Ua),Object(q["a"])(t,no.CHART,Wa),Object(q["a"])(t,no.TABLE,Ka),t);return n[e.elementInfo.type]||null})),a=Object(j["computed"])((function(){var t=c.value.animations||[];return t.findIndex((function(t){return t.elId===e.elementInfo.id}))}));return{currentOperateComponent:l,canvasScale:n,toolbarState:o,elementIndexInAnimation:a}}});n("86da");cr.render=xa,cr.__scopeId="data-v-46d959c4";var lr=cr;Object(j["pushScopeId"])("data-v-02317299");var ar={class:"link-dialog"},rr={class:"btns"},ir=Object(j["createTextVNode"])("取消"),ur=Object(j["createTextVNode"])("确认");function dr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Input"),r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",ar,[Object(j["createVNode"])(a,{value:e.link,"onUpdate:value":t[0]||(t[0]=function(t){return e.link=t}),placeholder:"请输入网页链接地址"},null,8,["value"]),Object(j["createElementVNode"])("div",rr,[Object(j["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(j["withCtx"])((function(){return[ir]})),_:1}),Object(j["createVNode"])(r,{type:"primary",onClick:t[2]||(t[2]=function(t){return e.save()})},{default:Object(j["withCtx"])((function(){return[ur]})),_:1})])])}Object(j["popScopeId"])();var sr=Object(j["defineComponent"])({name:"link-dialog",emits:["close"],setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.handleElement})),l=Object(j["ref"])(""),a=tr(),r=a.setLink;Object(j["onMounted"])((function(){var e;null!==(e=c.value)&&void 0!==e&&e.link&&(l.value=c.value.link)}));var i=function(){return n("close")},u=function(){if(c.value){var e=r(c.value,l.value);e?i():l.value=""}};return{link:l,close:i,save:u}}});n("4cf7");sr.render=dr,sr.__scopeId="data-v-02317299";var fr=sr,pr=Object(j["defineComponent"])({name:"editor-canvas",components:{EditableElement:Yl,MouseSelection:Kl,ViewportBackground:la,AlignmentLine:ia,ElementCreateSelection:fa,MultiSelectOperate:Ea,Operate:lr,LinkDialog:fr},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.handleElementId})),o=Object(j["computed"])((function(){return e.state.activeGroupElementId})),c=Object(j["computed"])((function(){return e.state.editorAreaFocus})),l=Object(j["computed"])((function(){return e.state.ctrlKeyState})),a=Object(j["computed"])((function(){return e.getters.ctrlOrShiftKeyActive})),r=Object(j["ref"])(),i=Object(j["ref"])([]),u=Object(j["ref"])(!1),d=function(){return u.value=!0};Object(j["watch"])(n,(function(){e.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,"")}));var s=Object(j["computed"])((function(){return e.getters.currentSlide})),f=Object(j["ref"])([]),p=function(){f.value=s.value?JSON.parse(JSON.stringify(s.value.elements)):[]};Object(j["watchEffect"])(p);var m=Object(j["ref"])(),b=Object(j["computed"])((function(){return e.state.canvasScale})),v=Rn(m),O=v.viewportStyles;Hn(m);var h=Fn(f,r),g=h.mouseSelectionState,E=h.updateMouseSelection,C=Kn(f,i),x=C.dragElement,k=Qn(f),I=k.dragLineElement,w=Jn(f,x),S=w.selectElement,N=Zn(f,i),T=N.scaleElement,L=N.scaleMultiElement,V=Gn(f,r),_=V.rotateElement,B=ct(),D=B.selectAllElement,M=tt(),A=M.deleteAllElements,z=ot(),P=z.pasteElement,R=dt(),F=R.enterScreening,H=$e(),U=H.updateSlideIndex,G=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),a.value||E(t),c.value||e.commit(y.SET_EDITORAREA_FOCUS,!0),Pn()},q=function(){c.value&&e.commit(y.SET_EDITORAREA_FOCUS,!1)},X=st(),W=X.scaleCanvas,Y=Object(ce["throttle"])(W,100,{leading:!0,trailing:!1}),Z=Object(ce["throttle"])(U,300,{leading:!0,trailing:!1}),J=function(e){e.preventDefault(),l.value?e.deltaY>0?Y("-"):e.deltaY<0&&Y("+"):e.deltaY>0?Z(Oe.DOWN):e.deltaY<0&&Z(Oe.UP)},K=Object(j["computed"])((function(){return e.state.showGridLines})),Q=function(){e.commit(y.SET_GRID_LINES_STATE,!K.value)},$=Object(j["computed"])((function(){return e.state.creatingElement})),ee=$n(r),te=ee.insertElementFromCreateSelection,ne=function(){return[{text:"粘贴",subText:"Ctrl + V",handler:P},{text:"全选",subText:"Ctrl + A",handler:D},{text:"网格线",subText:K.value?"√":"",handler:Q},{text:"重置当前页",handler:A},{divider:!0},{text:"从当前页演示",subText:"Ctrl+F",handler:F}]};return Object(j["provide"])("slideScale",b),{elementList:f,activeElementIdList:t,handleElementId:n,activeGroupElementId:o,canvasRef:m,viewportRef:r,viewportStyles:O,canvasScale:b,mouseSelectionState:g,currentSlide:s,creatingElement:$,alignmentLines:i,linkDialogVisible:u,openLinkDialog:d,handleClickBlankArea:G,removeEditorAreaFocus:q,insertElementFromCreateSelection:te,selectElement:S,rotateElement:_,scaleElement:T,dragLineElement:I,scaleMultiElement:L,handleMousewheelCanvas:J,contextmenus:ne}}});n("6609");pr.render=zn,pr.__scopeId="data-v-4edd93c1";var mr=pr;Object(j["pushScopeId"])("data-v-59ae6536");var br={class:"canvas-tool"},vr={class:"left-handler"},Or={class:"add-element-handler"},hr={class:"right-handler"},jr={class:"text"};function gr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconBack"),r=Object(j["resolveComponent"])("Tooltip"),i=Object(j["resolveComponent"])("IconNext"),u=Object(j["resolveComponent"])("IconFontSize"),d=Object(j["resolveComponent"])("IconPicture"),s=Object(j["resolveComponent"])("FileInput"),f=Object(j["resolveComponent"])("ShapePool"),p=Object(j["resolveComponent"])("IconGraphicDesign"),m=Object(j["resolveComponent"])("Popover"),b=Object(j["resolveComponent"])("LinePool"),v=Object(j["resolveComponent"])("IconConnection"),O=Object(j["resolveComponent"])("ChartPool"),h=Object(j["resolveComponent"])("IconChartProportion"),g=Object(j["resolveComponent"])("TableGenerator"),y=Object(j["resolveComponent"])("IconInsertTable"),E=Object(j["resolveComponent"])("IconMinus"),C=Object(j["resolveComponent"])("IconPlus"),x=Object(j["resolveComponent"])("IconFullScreen");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",br,[Object(j["createElementVNode"])("div",vr,[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"撤销"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{class:Object(j["normalizeClass"])(["handler-item",{disable:!e.canUndo}]),onClick:t[0]||(t[0]=function(t){return e.undo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"重做"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{class:Object(j["normalizeClass"])(["handler-item",{disable:!e.canRedo}]),onClick:t[1]||(t[1]=function(t){return e.redo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"])]),Object(j["createElementVNode"])("div",Or,[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入文字"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{class:"handler-item",onClick:t[2]||(t[2]=function(t){return e.drawText()})})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(s,{onChange:t[3]||(t[3]=function(t){return e.insertImageElement(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图片"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(m,{trigger:"click",visible:e.shapePoolVisible,"onUpdate:visible":t[5]||(t[5]=function(t){return e.shapePoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{onSelect:t[4]||(t[4]=function(t){return e.drawShape(t)})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入形状"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(m,{trigger:"click",visible:e.linePoolVisible,"onUpdate:visible":t[7]||(t[7]=function(t){return e.linePoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{onSelect:t[6]||(t[6]=function(t){return e.drawLine(t)})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入线条"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(m,{trigger:"click",visible:e.chartPoolVisible,"onUpdate:visible":t[9]||(t[9]=function(t){return e.chartPoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O,{onSelect:t[8]||(t[8]=function(t){e.createChartElement(t),e.chartPoolVisible=!1})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图表"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(h,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(m,{trigger:"click",visible:e.tableGeneratorVisible,"onUpdate:visible":t[12]||(t[12]=function(t){return e.tableGeneratorVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g,{onClose:t[10]||(t[10]=function(t){return e.tableGeneratorVisible=!1}),onInsert:t[11]||(t[11]=function(t){var n=t.row,o=t.col;e.createTableElement(n,o),e.tableGeneratorVisible=!1})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入表格"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"])]),Object(j["createElementVNode"])("div",hr,[Object(j["createVNode"])(E,{class:"handler-item viewport-size",onClick:t[13]||(t[13]=function(t){return e.scaleCanvas("-")})}),Object(j["createElementVNode"])("span",jr,Object(j["toDisplayString"])(e.canvasScalePercentage),1),Object(j["createVNode"])(C,{class:"handler-item viewport-size",onClick:t[14]||(t[14]=function(t){return e.scaleCanvas("+")})}),Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"适配屏幕"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{class:"handler-item viewport-size-adaptation",onClick:t[15]||(t[15]=function(t){return e.setCanvasPercentage(90)})})]})),_:1},8,["mouseEnterDelay"])])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-612b80ef");var yr={class:"shape-pool"},Er={class:"category-name"},Cr={class:"shape-list"},xr=["onClick"],kr=["transform"],Ir=["d"];function wr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",yr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.shapeList,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"category",key:t.type},[Object(j["createElementVNode"])("div",Er,Object(j["toDisplayString"])(t.type),1),Object(j["createElementVNode"])("div",Cr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"shape-item",key:n},[Object(j["createElementVNode"])("div",{class:"shape-content",onClick:function(n){return e.selectShape(t)}},[Object(j["createVNode"])(a,{overflow:"visible",width:"18",height:"18"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("g",{transform:"scale(".concat(18/t.viewBox,", ").concat(18/t.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createElementVNode"])("path",{class:"shape-path","vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",fill:"transparent",stroke:"#999","stroke-width":"2",d:t.path},null,8,Ir)],8,kr)]})),_:2},1024)],8,xr)])})),128))])])})),128))])}Object(j["popScopeId"])();var Sr=[{type:"矩形",children:[{viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z"},{viewBox:200,path:"M 20 0 L 180 0 Q 200 0 200 20 L 200 180 Q 200 200 180 200 L 20 200 Q 0 200 0 180 L 0 20 Q 0 0 20 0 Z"},{viewBox:200,path:"M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 L 0 150 Z"},{viewBox:200,path:"M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 L 0 200"},{viewBox:200,path:"M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 L 0 50 Z"},{viewBox:200,path:"M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 60 200 Q 0 200 0 140 L 0 0 Z"},{viewBox:200,path:"M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 0 200 L 0 0 Z"},{viewBox:200,path:"M 0 50 Q 0 0 50 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 50 Z"}]},{type:"常用形状",children:[{viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z"},{viewBox:200,path:"M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z"},{viewBox:200,path:"M 100 0 A 100 100 102 1 0 200 100 L 100 100 L 100 0 Z"},{viewBox:200,path:"M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z"},{viewBox:200,path:"M 100 0 A 100 100 102 1 0 200 100 L 200 0 L 100 0 Z"},{viewBox:200,path:"M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z"},{viewBox:200,path:"M 100 0 L 0 200 L 200 200 L 100 0 Z"},{viewBox:200,path:"M 0 0 L 0 200 L 200 200 Z"},{viewBox:200,path:"M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z"},{viewBox:200,path:"M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z"},{viewBox:200,path:"M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z"},{viewBox:200,path:"M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z"},{viewBox:200,path:"M 100 0 L 0 90 L 50 200 L 150 200 L 200 90 L 100 0 Z"},{viewBox:200,path:"M 100 0 L 0 60 L 0 140 L 100 200 L 200 140 L 200 60 L 100 0 Z"},{viewBox:200,path:"M 60 0 L 140 0 L 200 60 L 200 140 L 140 200 L 60 200 L 0 140 L 0 60 L 60 0 Z"},{viewBox:200,path:"M 75 0 L 125 0 L 175 25 L 200 75 L 200 125 L 175 175 L 125 200 L 75 200 L 25 175 L 0 125 L 0 75 L 25 25 L 75 0 Z"},{viewBox:200,path:"M 100 0 L 0 50 L 0 200 L 200 200 L 200 50 L 100 0 Z"},{viewBox:200,path:"M 150 0 A 50 100 0 1 1 150 200 L 0 200 L 0 0 L 150 0 Z"},{viewBox:200,path:"M 150 0 A 50 100 0 1 1 150 200 L 0 200 A 50 100 0 0 0 0 0 L 150 0 Z"},{viewBox:200,path:"M 200 100 L 150 0 L 0 0 L 50 100 L 0 200 L 150 200 L 200 100 Z"},{viewBox:200,path:"M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z"},{viewBox:200,path:"M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z"},{viewBox:200,path:"M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z"},{viewBox:200,path:"M 50 0 L 150 0 L 150 50 L 200 50 L 200 150 L 150 150 L 150 200 L 50 200 L 50 150 L 0 150 L 0 50 L 50 50 L 50 0 Z"},{viewBox:200,path:"M 0 0 L 0 200 L 200 200 L 200 140 L 60 140 L 60 0 L 0 0 Z"},{viewBox:200,path:"M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z"},{viewBox:200,path:"M0 100 A100 100 0 1 1 0 101 Z M150 100 A50 50 0 1 0 150 101 Z"},{viewBox:200,path:"M 70 0 L 70 70 L 0 70 L 0 130 L 70 130 L 70 200 L 130 200 L 130 130 L 200 130 L 200 70 L 130 70 L 130 0 L 70 0 Z"},{viewBox:200,path:"M 40 0 L 0 40 L 60 100 L 0 160 L 40 200 L 100 140 L 160 200 L 200 160 L 140 100 L 200 40 L 160 0 L 100 60 L 40 0 Z"},{viewBox:200,path:"M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 L 0 0 Z"},{viewBox:200,path:"M 0 40 Q 0 0 40 0 L 160 0 Q 200 0 200 40 L 200 120 Q 200 160 160 160 L 100 160 L 60 200 L 60 160 L 40 160 Q 0 160 0 120 L 0 40 Z"},{viewBox:200,path:"M 180 160 A 100 100 0 1 0 100 200 L 200 200 L 200 160 L 180 160 Z"},{viewBox:200,path:"M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z"},{viewBox:200,path:"M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z"},{viewBox:200,path:"M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z"}]},{type:"箭头",children:[{viewBox:200,path:"M 100 0 L 0 100 L 50 100 L 50 200 L 150 200 L 150 100 L 200 100 L 100 0 Z"},{viewBox:200,path:"M 100 200 L 200 100 L 150 100 L 150 0 L 50 0 L 50 100 L 0 100 L 100 200 Z"},{viewBox:200,path:"M 0 100 L 100 0 L 100 50 L 200 50 L 200 150 L 100 150 L 100 200 L 0 100 Z"},{viewBox:200,path:"M 200 100 L 100 0 L 100 50 L 0 50 L 0 150 L 100 150 L 100 200 L 200 100 Z"},{viewBox:200,path:"M 100 0 L 0 60 L 60 60 L 60 140 L 0 140 L 100 200 L 200 140 L 140 140 L 140 60 L 200 60 L 100 0 Z"},{viewBox:200,path:"M 0 100 L 60 0 L 60 60 L 140 60 L 140 0 L 200 100 L 140 200 L 140 140 L 60 140 L 60 200 L 0 100 Z"},{viewBox:200,path:"M 100 0 L 60 40 L 80 40 L 80 80 L 40 80 L 40 60 L 0 100 L 40 140 L 40 120 L 80 120 L 80 160 L 60 160 L 100 200 L 140 160 L 120 160 L 120 120 L 160 120 L 160 140 L 200 100 L 160 60 L 160 80 L 120 80 L 120 40 L 140 40 L 100 0 Z"},{viewBox:200,path:"M 0 100 L 100 0 L 100 50 L 200 50 L 150 100 L 200 150 L 100 150 L 100 200 L 0 100 Z"},{viewBox:200,path:"M 200 100 L 100 0 L 100 50 L 0 50 L 50 100 L 0 150 L 100 150 L 100 200 L 200 100 Z"},{viewBox:200,path:"M 0 100 L 80 20 L 80 80 L 120 80 L 120 0 L 200 0 L 200 200 L 120 200 L 120 120 L 80 120 L 80 180 L 0 100 Z"},{viewBox:200,path:"M 200 100 L 120 20 L 120 80 L 80 80 L 80 0 L 0 0 L 0 200 L 80 200 L 80 120 L 120 120 L 120 180 L 200 100 Z"},{viewBox:200,path:"M 0 0 L 120 0 L 200 100 L 120 200 L 0 200 L 80 100 L 0 0 Z"},{viewBox:200,path:"M 80 0 L 200 0 L 120 100 L 200 200 L 80 200 L 0 100 L 80 0 Z"},{viewBox:200,path:"M 0 0 L 140 0 L 200 100 L 140 200 L 0 200 L 0 100 L 0 0 Z"},{viewBox:200,path:"M 60 0 L 200 0 L 200 100 L 200 200 L 60 200 L 0 100 L 60 0 Z"},{viewBox:200,path:"M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z"},{viewBox:200,path:"M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z"},{viewBox:200,path:"M 0 0 L 80 0 L 200 100 L 80 200 L 0 200 L 120 100 L 0 0 Z"},{viewBox:200,path:"M 200 0 L 120 0 L 0 100 L 120 200 L 200 200 L 80 100 L 200 0 Z"},{viewBox:200,path:"M 0 200 L 180 200 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 160 L 0 160 L 0 200 Z"},{viewBox:200,path:"M 0 200 L 0 20 L 160 20 L 160 0 L 200 40 L 160 80 L 160 60 L 40 60 L 40 200 L 0 200 Z"},{viewBox:200,path:"M 40 180 L 180 180 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 140 L 40 140 L 40 120 L 0 160 L 40 200 L 40 180 Z"},{viewBox:1024,path:"M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z",special:!0},{viewBox:1024,path:"M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z",special:!0}]},{type:"其他形状",children:[{viewBox:1024,path:"M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z",special:!0},{viewBox:1024,path:"M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z",special:!0},{viewBox:1024,path:"M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z",special:!0},{viewBox:1024,path:"M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z",special:!0},{viewBox:1024,path:"M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z",special:!0},{viewBox:1024,path:"M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z",special:!0},{viewBox:1024,path:"M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z",special:!0},{viewBox:1024,path:"M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z",special:!0},{viewBox:1024,path:"M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z",special:!0},{viewBox:1024,path:"M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z",special:!0},{viewBox:1024,path:"M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z",special:!0},{viewBox:1024,path:"M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z",special:!0},{viewBox:1024,path:"M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z",special:!0},{viewBox:1024,path:"M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z",special:!0},{viewBox:1024,path:"M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z",special:!0},{viewBox:1024,path:"M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z",special:!0}]}],Nr=Object(j["defineComponent"])({name:"shape-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=Sr,c=function(e){n("select",e)};return{shapeList:o,selectShape:c}}});n("e202");Nr.render=wr,Nr.__scopeId="data-v-612b80ef";var Tr=Nr;Object(j["pushScopeId"])("data-v-6302e570");var Lr={class:"line-pool"},Vr={class:"category-name"},_r={class:"line-list"},Br=["onClick"],Dr=["d","stroke-dasharray","marker-start","marker-end"];function Mr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinePointMarker"),r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Lr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.lineList,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"category",key:t.type},[Object(j["createElementVNode"])("div",Vr,Object(j["toDisplayString"])(t.type),1),Object(j["createElementVNode"])("div",_r,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"line-item",key:n},[Object(j["createElementVNode"])("div",{class:"line-content",onClick:function(n){return e.selectLine(t)}},[Object(j["createVNode"])(r,{overflow:"visible",width:"20",height:"20"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("defs",null,[t.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,class:"line-marker",id:"preset-line-".concat(n),position:"start",type:t.points[0],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(j["createCommentVNode"])("",!0),t.points[1]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,class:"line-marker",id:"preset-line-".concat(n),position:"end",type:t.points[1],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(j["createCommentVNode"])("",!0)]),Object(j["createElementVNode"])("path",{class:"line-path",d:t.path,stroke:"currentColor",fill:"none","stroke-width":"2","stroke-dasharray":"solid"===t.style?"0, 0":"4, 1","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":"","marker-start":t.points[0]?"url(#".concat("preset-line-".concat(n),"-",t.points[0],"-start)"):"","marker-end":t.points[1]?"url(#".concat("preset-line-".concat(n),"-",t.points[1],"-end)"):""},null,8,Dr)]})),_:2},1024)],8,Br)])})),128))])])})),128))])}Object(j["popScopeId"])();var Ar=[{type:"直线",children:[{path:"M 0 0 L 20 20",style:"solid",points:["",""]},{path:"M 0 0 L 20 20",style:"dashed",points:["",""]},{path:"M 0 0 L 20 20",style:"solid",points:["","arrow"]},{path:"M 0 0 L 20 20",style:"dashed",points:["","arrow"]},{path:"M 0 0 L 20 20",style:"solid",points:["","dot"]}]},{type:"折线、曲线",children:[{path:"M 0 0 L 0 20 L 20 20",style:"solid",points:["","arrow"],isBroken:!0},{path:"M 0 0 Q 0 20 20 20",style:"solid",points:["","arrow"],isCurve:!0}]}],zr=Object(j["defineComponent"])({name:"line-pool",emits:["select"],components:{LinePointMarker:bl},setup:function(e,t){var n=t.emit,o=Ar,c=function(e){n("select",e)};return{lineList:o,selectLine:c}}});n("805f");zr.render=Mr,zr.__scopeId="data-v-6302e570";var Pr=zr;Object(j["pushScopeId"])("data-v-ab6a141a");var Rr={class:"chart-pool"},Fr=["onClick"];function Hr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconChartLine"),r=Object(j["resolveComponent"])("IconChartHistogram"),i=Object(j["resolveComponent"])("IconChartPie");return Object(j["openBlock"])(),Object(j["createElementBlock"])("ul",Rr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.chartList,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("li",{class:"chart-item",key:n},[Object(j["createElementVNode"])("div",{class:"chart-content",onClick:function(n){return e.selectChart(t)}},["line"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,size:"24"})):"bar"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,size:"24"})):"pie"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:2,size:"24"})):Object(j["createCommentVNode"])("",!0)],8,Fr)])})),128))])}Object(j["popScopeId"])();var Ur=Object(j["defineComponent"])({name:"chart-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=["bar","line","pie"],c=function(e){n("select",e)};return{chartList:o,selectChart:c}}});n("f076");Ur.render=Hr,Ur.__scopeId="data-v-ab6a141a";var Gr=Ur;Object(j["pushScopeId"])("data-v-e325ce98");var qr={class:"table-generator"},Xr={class:"title"},Wr={class:"lef"},Yr=["onMouseenter"],Zr={key:1,class:"custom"},Jr={class:"row"},Kr=Object(j["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"行数:",-1),Qr={class:"row"},$r=Object(j["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"列数:",-1),ei={class:"btns"},ti=Object(j["createTextVNode"])("取消"),ni=Object(j["createTextVNode"])("确认");function oi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("InputNumber"),r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",qr,[Object(j["createElementVNode"])("div",Xr,[Object(j["createElementVNode"])("div",Wr,"表格 "+Object(j["toDisplayString"])(e.endCell.length?"".concat(e.endCell[0]," x ").concat(e.endCell[1]):""),1),Object(j["createElementVNode"])("div",{class:"right",onClick:t[0]||(t[0]=function(t){return e.isCustom=!e.isCustom})},Object(j["toDisplayString"])(e.isCustom?"返回":"自定义"),1)]),e.isCustom?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Zr,[Object(j["createElementVNode"])("div",Jr,[Kr,Object(j["createVNode"])(a,{min:1,max:20,value:e.customRow,"onUpdate:value":t[3]||(t[3]=function(t){return e.customRow=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createElementVNode"])("div",Qr,[$r,Object(j["createVNode"])(a,{min:1,max:20,value:e.customCol,"onUpdate:value":t[4]||(t[4]=function(t){return e.customCol=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createElementVNode"])("div",ei,[Object(j["createVNode"])(r,{class:"btn",onClick:t[5]||(t[5]=function(t){return e.close()})},{default:Object(j["withCtx"])((function(){return[ti]})),_:1}),Object(j["createVNode"])(r,{class:"btn",type:"primary",onClick:t[6]||(t[6]=function(t){return e.insertCustomTable()})},{default:Object(j["withCtx"])((function(){return[ni]})),_:1})])])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("table",{key:0,onMouseleave:t[1]||(t[1]=function(t){return e.endCell=[]}),onClick:t[2]||(t[2]=function(t){return e.handleClickTable()})},[Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(t){return Object(j["createElementVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(n){return Object(j["createElementVNode"])("td",{onMouseenter:function(o){return e.endCell=[t,n]},key:n},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["cell",{active:e.endCell.length&&t<=e.endCell[0]&&n<=e.endCell[1]}])},null,2)],40,Yr)})),64))])})),64))])],32))])}Object(j["popScopeId"])();var ci=Object(j["defineComponent"])({name:"table-generator",emits:["insert","close"],setup:function(e,t){var n=t.emit,o=Object(j["ref"])([]),c=Object(j["ref"])(3),l=Object(j["ref"])(3),a=Object(j["ref"])(!1),r=function(){if(o.value.length){var e=Object(Ut["a"])(o.value,2),t=e[0],c=e[1];n("insert",{row:t,col:c})}},i=function(){return c.value<1||c.value>20||l.value<1||l.value>20?Ce["a"].warning("行数/列数必须在0~20之间!"):(n("insert",{row:c.value,col:l.value}),void(a.value=!1))},u=function(){n("close"),a.value=!1};return{endCell:o,customRow:c,customCol:l,handleClickTable:r,insertCustomTable:i,isCustom:a,close:u}}});n("5a68");ci.render=oi,ci.__scopeId="data-v-e325ce98";var li=ci,ai=Object(j["defineComponent"])({name:"canvas-tool",components:{ShapePool:Tr,LinePool:Pr,ChartPool:Gr,TableGenerator:li},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasScale})),n=Object(j["computed"])((function(){return e.getters.canUndo})),o=Object(j["computed"])((function(){return e.getters.canRedo})),c=Object(j["computed"])((function(){return parseInt(100*t.value+"")+"%"})),l=st(),a=l.scaleCanvas,r=l.setCanvasPercentage,i=We(),u=i.redo,d=i.undo,s=Ke(),f=s.createImageElement,p=s.createChartElement,m=s.createTableElement,b=function(e){var t=e[0];t&&Ze(t).then((function(e){return f(e)}))},v=Object(j["ref"])(!1),O=Object(j["ref"])(!1),h=Object(j["ref"])(!1),g=Object(j["ref"])(!1),E=function(){e.commit(y.SET_CREATING_ELEMENT,{type:"text",data:null})},C=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"shape",data:t}),v.value=!1},x=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"line",data:t}),O.value=!1};return{scaleCanvas:a,setCanvasPercentage:r,canvasScalePercentage:c,canUndo:n,canRedo:o,redo:u,undo:d,insertImageElement:b,shapePoolVisible:v,linePoolVisible:O,chartPoolVisible:h,tableGeneratorVisible:g,drawText:E,drawShape:C,drawLine:x,createChartElement:p,createTableElement:m}}});n("f91d");ai.render=gr,ai.__scopeId="data-v-59ae6536";var ri=ai;Object(j["pushScopeId"])("data-v-38044c5a");var ii={class:"add-slide"},ui=Object(j["createTextVNode"])("添加幻灯片"),di={class:"select-btn"},si=["onMousedown"],fi={class:"label"};function pi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconPlus"),r=Object(j["resolveComponent"])("LayoutPool"),i=Object(j["resolveComponent"])("IconDown"),u=Object(j["resolveComponent"])("Popover"),d=Object(j["resolveComponent"])("ThumbnailSlide"),s=Object(j["resolveComponent"])("Draggable"),f=Object(j["resolveDirective"])("contextmenu"),p=Object(j["resolveDirective"])("click-outside");return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"thumbnails",onMousedown:t[3]||(t[3]=function(){return e.setThumbnailsFocus(!0)})},[Object(j["createElementVNode"])("div",ii,[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.createSlide()})},[Object(j["createVNode"])(a,{class:"icon"}),ui]),Object(j["createVNode"])(u,{trigger:"click",placement:"bottomLeft",visible:e.presetLayoutPopoverVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.presetLayoutPopoverVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onSelect:t[1]||(t[1]=function(t){e.createSlideByTemplate(t),e.presetLayoutPopoverVisible=!1})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",di,[Object(j["createVNode"])(i)])]})),_:1},8,["visible"])]),Object(j["createVNode"])(s,{class:"thumbnail-list",modelValue:e.slides,animation:300,scroll:!0,scrollSensitivity:50,setData:null,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(j["withCtx"])((function(t){var n=t.element,o=t.index;return[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["thumbnail-item",{active:e.slideIndex===o,selected:e.selectedSlidesIndex.includes(o)}]),onMousedown:function(t){return e.handleClickSlideThumbnail(t,o)}},[Object(j["createElementVNode"])("div",fi,Object(j["toDisplayString"])(e.fillDigit(o+1,2)),1),Object(j["createVNode"])(d,{class:"thumbnail",slide:n,size:120},null,8,["slide"])],42,si),[[f,e.contextmenusThumbnailItem]])]})),_:1},8,["modelValue","onEnd"])],544)),[[p,function(){return e.setThumbnailsFocus(!1)}],[f,e.contextmenusThumbnails]])}Object(j["popScopeId"])();var mi=n("b76a"),bi=n.n(mi);function vi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ThumbnailElement");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"thumbnail-slide",style:Object(j["normalizeStyle"])({width:e.size+"px",height:e.size*e.viewportRatio+"px"})},[Object(j["createElementVNode"])("div",{class:"elements",style:Object(j["normalizeStyle"])({width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")})},[Object(j["createElementVNode"])("div",{class:"background",style:Object(j["normalizeStyle"])(e.backgroundStyle)},null,4),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.id,elementInfo:e,elementIndex:t+1},null,8,["elementInfo","elementIndex"])})),128))],4)],4)}function Oi(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["base-element","base-element-".concat(e.elementInfo.id)]),style:Object(j["normalizeStyle"])({zIndex:e.elementIndex})},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,target:"thumbnail"},null,8,["elementInfo"]))],6)}Object(j["pushScopeId"])("data-v-b0d4d1b2");var hi=["src"];function ji(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ImageOutline");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-image",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px",transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle})},[Object(j["createVNode"])(a,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createElementVNode"])("div",{class:"image-content",style:Object(j["normalizeStyle"])({clipPath:e.clipShape.style})},[Object(j["createElementVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:Object(j["normalizeStyle"])({top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter}),alt:""},null,12,hi)],4)],4)],4)],4)}Object(j["popScopeId"])();var gi=Object(j["defineComponent"])({name:"base-element-image",components:{ImageOutline:To},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=io(t),o=n.shadowStyle,c=Object(j["computed"])((function(){return e.elementInfo.flipH})),l=Object(j["computed"])((function(){return e.elementInfo.flipV})),a=uo(c,l),r=a.flipStyle,i=Object(j["computed"])((function(){return e.elementInfo.clip})),u=fo(i),d=u.clipShape,s=u.imgPosition,f=Object(j["computed"])((function(){return e.elementInfo.filters})),p=po(f),m=p.filter;return{imgPosition:s,filter:m,flipStyle:r,shadowStyle:o,clipShape:d}}});n("a576");gi.render=ji,gi.__scopeId="data-v-b0d4d1b2";var yi=gi;Object(j["pushScopeId"])("data-v-2ec235c4");var Ei=["innerHTML"];function Ci(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-text",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill,opacity:e.elementInfo.opacity,textShadow:e.shadowStyle,lineHeight:e.elementInfo.lineHeight,letterSpacing:(e.elementInfo.wordSpace||0)+"px",color:e.elementInfo.defaultColor,fontFamily:e.elementInfo.defaultFontName})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createElementVNode"])("div",{class:"text ProseMirror-static",innerHTML:e.elementInfo.content},null,8,Ei)],4)],4)],4)}Object(j["popScopeId"])();var xi=Object(j["defineComponent"])({name:"base-element-text",components:{ElementOutline:Xo},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=io(t),o=n.shadowStyle;return{shadowStyle:o}}});n("5264");xi.render=Ci,xi.__scopeId="data-v-2ec235c4";var ki=xi;Object(j["pushScopeId"])("data-v-3ad164fa");var Ii={key:0},wi=["transform"],Si=["d","fill","stroke","stroke-width","stroke-dasharray"],Ni=["innerHTML"];function Ti(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("GradientDefs"),r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-shape",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle,color:e.text.defaultColor,fontFamily:e.text.defaultFontName})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:Object(j["withCtx"])((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createElementBlock"])("defs",Ii,[Object(j["createVNode"])(a,{id:"base-gradient-".concat(e.elementInfo.id),type:e.elementInfo.gradient.type,color1:e.elementInfo.gradient.color[0],color2:e.elementInfo.gradient.color[1],rotate:e.elementInfo.gradient.rotate},null,8,["id","type","color1","color2","rotate"])])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox,", ").concat(e.elementInfo.height/e.elementInfo.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createElementVNode"])("path",{"vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",d:e.elementInfo.path,fill:e.elementInfo.gradient?"url(#base-gradient-".concat(e.elementInfo.id,")"):e.elementInfo.fill,stroke:e.outlineColor,"stroke-width":e.outlineWidth,"stroke-dasharray":"dashed"===e.outlineStyle?"10 5":"0 0"},null,8,Si)],8,wi)]})),_:1},8,["width","height"]),Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["shape-text",e.text.align])},[Object(j["createElementVNode"])("div",{class:"ProseMirror-static",innerHTML:e.text.content},null,8,Ni)],2)],4)],4)],4)}Object(j["popScopeId"])();var Li=Object(j["defineComponent"])({name:"base-element-shape",components:{GradientDefs:ol},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.outline})),n=ho(t),o=n.outlineWidth,c=n.outlineStyle,l=n.outlineColor,a=Object(j["computed"])((function(){return e.elementInfo.shadow})),r=io(a),i=r.shadowStyle,u=Object(j["computed"])((function(){return e.elementInfo.flipH})),d=Object(j["computed"])((function(){return e.elementInfo.flipV})),s=uo(u,d),f=s.flipStyle,p=Object(j["computed"])((function(){var t={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"};return e.elementInfo.text?e.elementInfo.text:t}));return{shadowStyle:i,outlineWidth:o,outlineStyle:c,outlineColor:l,flipStyle:f,text:p}}});n("052f");Li.render=Ti,Li.__scopeId="data-v-3ad164fa";var Vi=Li;Object(j["pushScopeId"])("data-v-448a7ca0");var _i=["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"];function Bi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinePointMarker"),r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"editable-element-shape",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,id:e.elementInfo.id,position:"start",type:e.elementInfo.points[0],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0),e.elementInfo.points[1]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,id:e.elementInfo.id,position:"end",type:e.elementInfo.points[1],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0)]),Object(j["createElementVNode"])("path",{d:e.path,stroke:e.elementInfo.color,"stroke-width":e.elementInfo.width,"stroke-dasharray":e.lineDashArray,fill:"none","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":"","marker-start":e.elementInfo.points[0]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[0],"-start)"):"","marker-end":e.elementInfo.points[1]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[1],"-end)"):""},null,8,_i)]})),_:1},8,["width","height"])],4)],4)}Object(j["popScopeId"])();var Di=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:bl},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=io(t),o=n.shadowStyle,c=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),l=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),a=Object(j["computed"])((function(){return"dashed"===e.elementInfo.style?"10, 5":"0, 0"})),r=Object(j["computed"])((function(){return Ge(e.elementInfo)}));return{shadowStyle:o,svgWidth:c,svgHeight:l,lineDashArray:a,path:r}}});n("9743");Di.render=Bi,Di.__scopeId="data-v-448a7ca0";var Mi=Di;function Ai(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline"),r=Object(j["resolveComponent"])("IconChartHistogram"),i=Object(j["resolveComponent"])("IconChartHistogramOne"),u=Object(j["resolveComponent"])("IconChartLine"),d=Object(j["resolveComponent"])("IconChartLineArea"),s=Object(j["resolveComponent"])("IconChartScatter"),f=Object(j["resolveComponent"])("IconChartPie"),p=Object(j["resolveComponent"])("IconChartRing");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-chart",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),"bar"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"horizontalBar"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:1,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"line"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(u,{key:2,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"area"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:3,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"scatter"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:4,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"pie"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(f,{key:5,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"ring"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(p,{key:6,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):Object(j["createCommentVNode"])("",!0)],4)],4)}var zi=Object(j["defineComponent"])({name:"base-element-chart",components:{ElementOutline:Xo},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return Math.min(e.elementInfo.width,e.elementInfo.height)})),n=Object(j["computed"])((function(){var t=e.elementInfo.chartType,n=e.elementInfo.options;return"bar"===t?null!==n&&void 0!==n&&n.horizontalBars?"horizontalBar":"bar":"line"===t?null!==n&&void 0!==n&&n.showArea?"area":n&&!1===n.showLine?"scatter":"line":"pie"===t?null!==n&&void 0!==n&&n.donut?"ring":"pie":""}));return{size:t,chartType:n}}});n("b730");zi.render=Ai,zi.__scopeId="data-v-2d25f60a";var Pi=zi;Object(j["pushScopeId"])("data-v-dea016ac");var Ri={class:"element-content"};function Fi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("StaticTable");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-table",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(j["createElementVNode"])("div",Ri,[Object(j["createVNode"])(a,{data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme},null,8,["data","width","colWidths","outline","theme"])])],4)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-ccbfe89e");var Hi=["width"],Ui=["rowspan","colspan"],Gi=["innerHTML"];function qi(e,t,n,o,c,l){var a,r,i,u,d;return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"static-table",style:Object(j["normalizeStyle"])({width:e.totalWidth+"px"})},[Object(j["createElementVNode"])("table",{class:Object(j["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(j["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(j["createElementVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,Hi)})),128))]),Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.data,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("tr",{key:n},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t,o){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("td",{class:"cell",style:Object(j["normalizeStyle"])(Object(I["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(t.style))),key:t.id,rowspan:t.rowspan,colspan:t.colspan},[Object(j["createElementVNode"])("div",{class:"cell-text",innerHTML:e.formatText(t.text)},null,8,Gi)],12,Ui)),[[j["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))]])})),128))])})),128))])],6)],4)}Object(j["popScopeId"])();var Xi=Object(j["defineComponent"])({name:"static-table",props:{data:{type:Array,required:!0},width:{type:Number,required:!0},colWidths:{type:Array,required:!0},outline:{type:Object,required:!0},theme:{type:Object},editable:{type:Boolean,default:!0}},setup:function(e){var t=Object(j["ref"])([]),n=Object(j["computed"])((function(){return t.value.reduce((function(e,t){return e+t}))}));Object(j["watch"])([function(){return e.colWidths},function(){return e.width}],(function(){t.value=e.colWidths.map((function(t){return t*e.width}))}),{immediate:!0});var o=Object(j["computed"])((function(){return e.data})),c=Al(o),l=c.hideCells,a=Object(j["computed"])((function(){return e.theme})),r=zl(a),i=r.subThemeColor;return{colSizeList:t,totalWidth:n,hideCells:l,getTextStyle:Dl,formatText:Ml,subThemeColor:i}}});n("1360");Xi.render=qi,Xi.__scopeId="data-v-ccbfe89e";var Wi=Xi,Yi=Object(j["defineComponent"])({name:"base-element-table",components:{StaticTable:Wi},props:{elementInfo:{type:Object,required:!0}}});n("ba04");Yi.render=Fi,Yi.__scopeId="data-v-dea016ac";var Zi=Yi,Ji=Object(j["defineComponent"])({name:"base-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,yi),Object(q["a"])(t,no.TEXT,ki),Object(q["a"])(t,no.SHAPE,Vi),Object(q["a"])(t,no.LINE,Mi),Object(q["a"])(t,no.CHART,Pi),Object(q["a"])(t,no.TABLE,Zi),t);return n[e.elementInfo.type]||null}));return{currentElementComponent:t}}});Ji.render=Oi;var Ki=Ji,Qi=Object(j["defineComponent"])({name:"thumbnail-slide",components:{ThumbnailElement:Ki},props:{slide:{type:Object,required:!0},size:{type:Number,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=oa(o),l=c.backgroundStyle,a=Object(j["computed"])((function(){return e.size/Je}));return{scale:a,backgroundStyle:l,VIEWPORT_SIZE:Je,viewportRatio:n}}});n("2b61");Qi.render=vi,Qi.__scopeId="data-v-4e59015e";var $i=Qi;Object(j["pushScopeId"])("data-v-775c4b6c");var eu={class:"layout-pool"},tu=["onClick"];function nu(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ThumbnailSlide");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",eu,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.layouts,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"layout-item",key:t.id,onClick:function(n){return e.selectSlideTemplate(t)}},[Object(j["createVNode"])(a,{class:"thumbnail",slide:t,size:180},null,8,["slide"])],8,tu)})),128))])}Object(j["popScopeId"])();var ou=Object(j["defineComponent"])({name:"layout-pool",emits:["select"],components:{ThumbnailSlide:$i},setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.layouts})),l=function(e){n("select",e)};return{layouts:c,selectSlideTemplate:l}}});n("23aa");ou.render=nu,ou.__scopeId="data-v-775c4b6c";var cu=ou,lu=Object(j["defineComponent"])({name:"thumbnails",components:{Draggable:bi.a,ThumbnailSlide:$i,LayoutPool:cu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.state.slideIndex})),o=Object(j["computed"])((function(){return e.state.ctrlKeyState})),c=Object(j["computed"])((function(){return e.state.shiftKeyState})),l=Object(j["computed"])((function(){return[].concat(Object(oe["a"])(e.state.selectedSlidesIndex),[n.value])})),a=Object(j["ref"])(!1),r=$e(),i=r.copySlide,u=r.pasteSlide,d=r.createSlide,s=r.createSlideByTemplate,f=r.copyAndPasteSlide,p=r.deleteSlide,m=r.cutSlide,b=r.selectAllSlide,v=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),n.value!==t&&e.commit(y.UPDATE_SLIDE_INDEX,t)},O=function(t,a){var r=l.value.length>1;if(!r||!l.value.includes(a)||0===t.button)if(o.value)if(n.value===a){if(!r)return;var i=l.value.filter((function(e){return e!==a}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,i),v(l.value[0])}else if(l.value.includes(a)){var u=l.value.filter((function(e){return e!==a}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,u)}else{var d=[].concat(Object(oe["a"])(l.value),[a]);e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,d),v(a)}else if(c.value){if(n.value===a&&!r)return;var s=Math.min.apply(Math,Object(oe["a"])(l.value)),f=a;a1&&void 0!==arguments[1]?arguments[1]:0,c=u(),l=c.originClipRange,r=c.originWidth,d=c.originHeight,s=c.originLeft,f=c.originTop;if(o){var p,m=d/r,b=0,v=100;if(m>o){var O=(1-o/m)/2*100;p=[[b,O],[v,v-O]]}else{var h=(1-m/o)/2*100;p=[[h,b],[v-h,v]]}e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{clip:Object(I["a"])(Object(I["a"])({},t.value.clip),{},{shape:n,range:p}),left:s+r*(p[0][0]/100),top:f+d*(p[0][1]/100),width:r*(p[1][0]-p[0][0])/100,height:d*(p[1][1]-p[0][1])/100}})}else e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{clip:Object(I["a"])(Object(I["a"])({},t.value.clip),{},{shape:n,range:l})}});i(),a()},s=function(n){var o=n[0];o&&(Ze(o).then((function(n){var o={src:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o})})),a())},f=function(){if(t.value.clip){var n=u(),o=n.originWidth,c=n.originHeight,l=n.originLeft,r=n.originTop;e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{left:l,top:r,width:o,height:c}})}e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:["clip","outline","flip","shadow","filters"]}),a()},p=function(){var o=Object(I["a"])(Object(I["a"])({},n.value.background),{},{type:"image",image:t.value.src,imageSize:"cover"});e.commit(y.UPDATE_SLIDE,{background:o}),a()};return{clipPanelVisible:o,shapeClipPathOptions:Dd,ratioClipOptions:Md,filterOptions:c,handleElement:t,updateFilter:r,clipImage:i,presetImageClip:d,replaceImage:s,resetImage:f,setBackgroundImage:p}}});n("7751");Ad.render=wd,Ad.__scopeId="data-v-6bffd840";var zd=Ad;Object(j["pushScopeId"])("data-v-a62499e8");var Pd={class:"shape-style-panel"},Rd={class:"row"},Fd=Object(j["createTextVNode"])("纯色填充"),Hd=Object(j["createTextVNode"])("渐变填充"),Ud=Object(j["createElementVNode"])("div",{style:{flex:"1"}},null,-1),Gd=Object(j["createTextVNode"])("线性渐变"),qd=Object(j["createTextVNode"])("径向渐变"),Xd={class:"row"},Wd=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),Yd={class:"row"},Zd=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Jd={key:0,class:"row"},Kd=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1);function Qd(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SelectOption"),r=Object(j["resolveComponent"])("Select"),i=Object(j["resolveComponent"])("ColorPicker"),u=Object(j["resolveComponent"])("ColorButton"),d=Object(j["resolveComponent"])("Popover"),s=Object(j["resolveComponent"])("Slider"),f=Object(j["resolveComponent"])("ElementFlip"),p=Object(j["resolveComponent"])("Divider"),m=Object(j["resolveComponent"])("IconFontSize"),b=Object(j["resolveComponent"])("SelectOptGroup"),v=Object(j["resolveComponent"])("IconAddText"),O=Object(j["resolveComponent"])("InputGroup"),h=Object(j["resolveComponent"])("IconText"),g=Object(j["resolveComponent"])("Button"),y=Object(j["resolveComponent"])("Tooltip"),E=Object(j["resolveComponent"])("ButtonGroup"),C=Object(j["resolveComponent"])("IconTextBold"),x=Object(j["resolveComponent"])("CheckboxButton"),k=Object(j["resolveComponent"])("IconTextItalic"),I=Object(j["resolveComponent"])("IconTextUnderline"),w=Object(j["resolveComponent"])("IconFormat"),S=Object(j["resolveComponent"])("CheckboxButtonGroup"),N=Object(j["resolveComponent"])("IconAlignTextLeft"),T=Object(j["resolveComponent"])("RadioButton"),L=Object(j["resolveComponent"])("IconAlignTextCenter"),V=Object(j["resolveComponent"])("IconAlignTextRight"),_=Object(j["resolveComponent"])("RadioGroup"),B=Object(j["resolveComponent"])("IconAlignTextTopOne"),D=Object(j["resolveComponent"])("IconAlignTextMiddleOne"),M=Object(j["resolveComponent"])("IconAlignTextBottomOne"),A=Object(j["resolveComponent"])("ElementOutline"),z=Object(j["resolveComponent"])("ElementShadow"),P=Object(j["resolveComponent"])("ElementOpacity");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Pd,[Object(j["createElementVNode"])("div",Rd,[Object(j["createVNode"])(r,{style:{flex:"10"},value:e.fillType,onChange:t[0]||(t[0]=function(t){return e.updateFillType(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"fill"},{default:Object(j["withCtx"])((function(){return[Fd]})),_:1}),Object(j["createVNode"])(a,{value:"gradient"},{default:Object(j["withCtx"])((function(){return[Hd]})),_:1})]})),_:1},8,["value"]),Ud,"fill"===e.fillType?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.fill,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.fill,style:{flex:"10"}},null,8,["color"])]})),_:1})):(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,style:{flex:"10"},value:e.gradient.type,onChange:t[2]||(t[2]=function(t){return e.updateGradient({type:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"linear"},{default:Object(j["withCtx"])((function(){return[Gd]})),_:1}),Object(j["createVNode"])(a,{value:"radial"},{default:Object(j["withCtx"])((function(){return[qd]})),_:1})]})),_:1},8,["value"]))]),"gradient"===e.fillType?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",Xd,[Wd,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[0],"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateGradient({color:[t,e.gradient.color[1]]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.gradient.color[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",Yd,[Zd,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[1],"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateGradient({color:[e.gradient.color[0],t]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.gradient.color[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.gradient.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Jd,[Kd,Object(j["createVNode"])(s,{min:0,max:360,step:15,value:e.gradient.rotate,style:{flex:"3"},onChange:t[5]||(t[5]=function(t){return e.updateGradient({rotate:t})})},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)],64)):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(f),Object(j["createVNode"])(p),e.showTextTools?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:1},[Object(j["createVNode"])(O,{compact:"",class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"3"},value:e.richTextAttrs.fontname,onChange:t[6]||(t[6]=function(t){return e.emitRichTextCommand("fontname",t)})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m)]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{label:"系统字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",{style:Object(j["normalizeStyle"])({fontFamily:e.value})},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(b,{label:"在线字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(j["createVNode"])(r,{style:{flex:"2"},value:e.richTextAttrs.fontsize,onChange:t[7]||(t[7]=function(t){return e.emitRichTextCommand("fontsize",t)})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v)]})),default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.fontSizeOptions,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e,value:e},{default:Object(j["withCtx"])((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(j["createVNode"])(E,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.richTextAttrs.color,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.emitRichTextCommand("color",t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g,{class:"text-color-btn",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(h),Object(j["createElementVNode"])("div",{class:"text-color-block",style:Object(j["normalizeStyle"])({backgroundColor:e.richTextAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(j["createVNode"])(S,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},checked:e.richTextAttrs.bold,onClick:t[9]||(t[9]=function(t){return e.emitRichTextCommand("bold")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},checked:e.richTextAttrs.em,onClick:t[10]||(t[10]=function(t){return e.emitRichTextCommand("em")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(k)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},checked:e.richTextAttrs.underline,onClick:t[11]||(t[11]=function(t){return e.emitRichTextCommand("underline")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(I)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"清除格式"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},onClick:t[12]||(t[12]=function(t){return e.emitRichTextCommand("clear")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(_,{class:"row","button-style":"solid",value:e.richTextAttrs.align,onChange:t[13]||(t[13]=function(t){return e.emitRichTextCommand("align",t.target.value)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"left",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(N)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"center",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(L)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"right",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(V)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(_,{class:"row","button-style":"solid",value:e.textAlign,onChange:t[14]||(t[14]=function(t){return e.updateTextAlign(t.target.value)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顶对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"top",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(B)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"middle",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(D)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"底对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"bottom",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(M)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(p)],64)):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(A),Object(j["createVNode"])(p),Object(j["createVNode"])(z),Object(j["createVNode"])(p),Object(j["createVNode"])(P)])}Object(j["popScopeId"])();var $d=ae,es=Object(j["defineComponent"])({name:"shape-style-panel",components:{ElementOpacity:Nu,ElementOutline:Wu,ElementShadow:id,ElementFlip:_d,ColorButton:qu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.editingShapeElementId})),o=Object(j["computed"])((function(){return n.value===t.value.id})),c=Object(j["ref"])(),l=Object(j["ref"])(),a=Object(j["ref"])("fill"),r=Object(j["ref"])("middle");Object(j["watch"])(t,(function(){var e,n;t.value&&"shape"===t.value.type&&(c.value=t.value.fill||"#000",l.value=t.value.gradient||{type:"linear",rotate:0,color:[c.value,"#fff"]},a.value=t.value.gradient?"gradient":"fill",r.value=(null===(e=t.value)||void 0===e||null===(n=e.text)||void 0===n?void 0:n.align)||"middle")}),{deep:!0,immediate:!0});var i=We(),u=i.addHistorySnapshot,d=function(n){if("fill"===n)e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:"gradient"});else{var o={gradient:l.value};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o})}u()},s=function(n){var o={gradient:Object(I["a"])(Object(I["a"])({},l.value),n)};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),u()},f=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),u()},p=function(n){var o={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"},c=t.value.text||o,l={text:Object(I["a"])(Object(I["a"])({},c),{},{align:n})};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:l}),u()},m=Object(j["computed"])((function(){return e.state.richTextAttrs})),b=Object(j["computed"])((function(){return e.state.availableFonts})),v=["12px","14px","16px","18px","20px","22px","24px","28px","32px","36px","40px","44px","48px","54px","60px","66px","72px","76px","80px","88px","96px","104px","112px","120px"],O=function(e,t){Dc.emit(Zo.RICH_TEXT_COMMAND,{command:e,value:t})};return{fill:c,gradient:l,fillType:a,textAlign:r,richTextAttrs:m,availableFonts:b,fontSizeOptions:v,webFonts:$d,showTextTools:o,emitRichTextCommand:O,updateFillType:d,updateFill:f,updateGradient:s,updateTextAlign:p}}});n("7de2");es.render=Qd,es.__scopeId="data-v-a62499e8";var ts=es;Object(j["pushScopeId"])("data-v-65b24fb3");var ns={class:"line-style-panel"},os={class:"row"},cs=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"线条样式:",-1),ls=Object(j["createTextVNode"])("实线"),as=Object(j["createTextVNode"])("虚线"),rs={class:"row"},is=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"线条颜色:",-1),us={class:"row"},ds=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"线条宽度:",-1),ss={class:"row"},fs=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"起点样式:",-1),ps=Object(j["createTextVNode"])("无"),ms=Object(j["createTextVNode"])("箭头"),bs=Object(j["createTextVNode"])("圆点"),vs={class:"row"},Os=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"终点样式:",-1),hs=Object(j["createTextVNode"])("无"),js=Object(j["createTextVNode"])("箭头"),gs=Object(j["createTextVNode"])("圆点");function ys(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SelectOption"),r=Object(j["resolveComponent"])("Select"),i=Object(j["resolveComponent"])("ColorPicker"),u=Object(j["resolveComponent"])("ColorButton"),d=Object(j["resolveComponent"])("Popover"),s=Object(j["resolveComponent"])("InputNumber"),f=Object(j["resolveComponent"])("Divider"),p=Object(j["resolveComponent"])("ElementShadow");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",ns,[Object(j["createElementVNode"])("div",os,[cs,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.style,onChange:t[0]||(t[0]=function(t){return e.updateLine({style:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"solid"},{default:Object(j["withCtx"])((function(){return[ls]})),_:1}),Object(j["createVNode"])(a,{value:"dashed"},{default:Object(j["withCtx"])((function(){return[as]})),_:1})]})),_:1},8,["value"])]),Object(j["createElementVNode"])("div",rs,[is,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateLine({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",us,[ds,Object(j["createVNode"])(s,{value:e.handleElement.width,onChange:t[2]||(t[2]=function(t){return e.updateLine({width:t})}),style:{flex:"3"}},null,8,["value"])]),Object(j["createElementVNode"])("div",ss,[fs,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[0],onChange:t[3]||(t[3]=function(t){return e.updateLine({points:[t,e.handleElement.points[1]]})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:""},{default:Object(j["withCtx"])((function(){return[ps]})),_:1}),Object(j["createVNode"])(a,{value:"arrow"},{default:Object(j["withCtx"])((function(){return[ms]})),_:1}),Object(j["createVNode"])(a,{value:"dot"},{default:Object(j["withCtx"])((function(){return[bs]})),_:1})]})),_:1},8,["value"])]),Object(j["createElementVNode"])("div",vs,[Os,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[1],onChange:t[4]||(t[4]=function(t){return e.updateLine({points:[e.handleElement.points[0],t]})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:""},{default:Object(j["withCtx"])((function(){return[hs]})),_:1}),Object(j["createVNode"])(a,{value:"arrow"},{default:Object(j["withCtx"])((function(){return[js]})),_:1}),Object(j["createVNode"])(a,{value:"dot"},{default:Object(j["withCtx"])((function(){return[gs]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])(f),Object(j["createVNode"])(p)])}Object(j["popScopeId"])();var Es=Object(j["defineComponent"])({name:"line-style-panel",components:{ElementShadow:id,ColorButton:qu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=We(),o=n.addHistorySnapshot,c=function(n){e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:n}),o()};return{handleElement:t,updateLine:c}}});n("8df8");Es.render=ys,Es.__scopeId="data-v-65b24fb3";var Cs=Es;Object(j["pushScopeId"])("data-v-de85ffe4");var xs={class:"chart-style-panel"},ks=Object(j["createTextVNode"])(" 编辑图表数据 "),Is={class:"row"},ws=Object(j["createTextVNode"])("面积图样式"),Ss=Object(j["createTextVNode"])("散点图样式"),Ns={class:"row"},Ts=Object(j["createTextVNode"])("使用平滑曲线"),Ls={key:1,class:"row"},Vs=Object(j["createTextVNode"])("条形图样式"),_s={key:2,class:"row"},Bs=Object(j["createTextVNode"])("环形图样式"),Ds={class:"row"},Ms=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"背景填充:",-1),As={class:"row"},zs=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"网格颜色:",-1),Ps={style:{flex:"2"}},Rs={class:"color-btn-wrap",style:{flex:"3"}},Fs=["onClick"],Hs={key:3,class:"row"},Us=Object(j["createElementVNode"])("div",{style:{flex:"2"}},null,-1);function Gs(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconEdit"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Divider"),u=Object(j["resolveComponent"])("Checkbox"),d=Object(j["resolveComponent"])("ColorPicker"),s=Object(j["resolveComponent"])("ColorButton"),f=Object(j["resolveComponent"])("Popover"),p=Object(j["resolveComponent"])("IconCloseSmall"),m=Object(j["resolveComponent"])("Tooltip"),b=Object(j["resolveComponent"])("IconPlus"),v=Object(j["resolveComponent"])("ElementOutline"),O=Object(j["resolveComponent"])("ChartDataEditor"),h=Object(j["resolveComponent"])("Modal");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",xs,[Object(j["createVNode"])(r,{class:"full-width-btn",onClick:t[0]||(t[0]=function(t){return e.chartDataEditorVisible=!0})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{class:"btn-icon"}),ks]})),_:1}),Object(j["createVNode"])(i),"line"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",Is,[Object(j["createVNode"])(u,{onChange:t[1]||(t[1]=function(t){return e.updateOptions({showArea:t.target.checked})}),checked:e.showArea,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[ws]})),_:1},8,["checked"]),Object(j["createVNode"])(u,{onChange:t[2]||(t[2]=function(t){return e.updateOptions({showLine:!t.target.checked})}),checked:!e.showLine,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Ss]})),_:1},8,["checked"])]),Object(j["createElementVNode"])("div",Ns,[Object(j["createVNode"])(u,{onChange:t[3]||(t[3]=function(t){return e.updateOptions({lineSmooth:t.target.checked})}),checked:e.lineSmooth},{default:Object(j["withCtx"])((function(){return[Ts]})),_:1},8,["checked"])])],64)):Object(j["createCommentVNode"])("",!0),"bar"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ls,[Object(j["createVNode"])(u,{onChange:t[4]||(t[4]=function(t){return e.updateOptions({horizontalBars:t.target.checked})}),checked:e.horizontalBars},{default:Object(j["withCtx"])((function(){return[Vs]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),"pie"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",_s,[Object(j["createVNode"])(u,{onChange:t[5]||(t[5]=function(t){return e.updateOptions({donut:t.target.checked})}),checked:e.donut},{default:Object(j["withCtx"])((function(){return[Bs]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(i),Object(j["createElementVNode"])("div",Ds,[Ms,Object(j["createVNode"])(f,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{modelValue:e.fill,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(s,{color:e.fill,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",As,[zs,Object(j["createVNode"])(f,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{modelValue:e.gridColor,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.updateGridColor(t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(s,{color:e.gridColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])(i),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themeColor,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"row",key:n},[Object(j["createElementVNode"])("div",Ps,Object(j["toDisplayString"])(0===n?"主题配色:":""),1),Object(j["createVNode"])(f,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{modelValue:t,"onUpdate:modelValue":function(t){return e.updateTheme(t,n)}},null,8,["modelValue","onUpdate:modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Rs,[Object(j["createVNode"])(s,{color:t,style:{width:"100%"}},null,8,["color"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(j["withCtx"])((function(){return[0!==n?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:"delete-color-btn",onClick:Object(j["withModifiers"])((function(t){return e.deleteThemeColor(n)}),["stop"])},[Object(j["createVNode"])(p)],8,Fs)):Object(j["createCommentVNode"])("",!0)]})),_:2},1032,["mouseEnterDelay"])])]})),_:2},1024)])})),128)),e.themeColor.length<10?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Hs,[Us,Object(j["createVNode"])(r,{class:"add-color-btn",style:{flex:"3"},onClick:t[8]||(t[8]=function(t){return e.addThemeColor()})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b)]})),_:1})])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(i),Object(j["createVNode"])(v),Object(j["createVNode"])(h,{visible:e.chartDataEditorVisible,"onUpdate:visible":t[11]||(t[11]=function(t){return e.chartDataEditorVisible=t}),footer:null,centered:"",closable:!1,width:648,destroyOnClose:""},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O,{data:e.handleElement.data,onClose:t[9]||(t[9]=function(t){return e.chartDataEditorVisible=!1}),onSave:t[10]||(t[10]=function(t){return e.updateData(t)})},null,8,["data"])]})),_:1},8,["visible"])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-39c533c6");var qs={class:"chart-data-editor"},Xs={class:"editor-content"},Ws={class:"range-box"},Ys=["id","onFocus"],Zs={class:"btns"},Js=Object(j["createTextVNode"])("取消"),Ks=Object(j["createTextVNode"])("确认");function Qs(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",qs,[Object(j["createElementVNode"])("div",Xs,[Object(j["createElementVNode"])("div",Ws,[Object(j["createElementVNode"])("div",{class:"temp-range",style:Object(j["normalizeStyle"])({width:e.tempRangeSize.width+"px",height:e.tempRangeSize.height+"px"})},null,4),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.rangeLines,(function(e){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["range-line",e.type]),key:e.type,style:Object(j["normalizeStyle"])(e.style)},null,6)})),128)),Object(j["createElementVNode"])("div",{class:"resizable",style:Object(j["normalizeStyle"])(e.resizablePointStyle),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.changeSelectRange(t)}),["stop"]))},null,36)]),Object(j["createElementVNode"])("table",null,[Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(30,(function(t){return Object(j["createElementVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(7,(function(n){return Object(j["createElementVNode"])("td",{key:n,class:Object(j["normalizeClass"])({head:1===n&&t<=e.selectedRange[1]})},[Object(j["createElementVNode"])("input",{class:Object(j["normalizeClass"])(["item",{selected:t<=e.selectedRange[1]&&n<=e.selectedRange[0]}]),id:"cell-".concat(t-1,"-").concat(n-1),autocomplete:"off",onFocus:function(o){return e.focusCell=[t-1,n-1]}},null,42,Ys)],2)})),64))])})),64))])])]),Object(j["createElementVNode"])("div",Zs,[Object(j["createVNode"])(a,{class:"btn",onClick:t[1]||(t[1]=function(t){return e.closeEditor()})},{default:Object(j["withCtx"])((function(){return[Js]})),_:1}),Object(j["createVNode"])(a,{type:"primary",class:"btn",onClick:t[2]||(t[2]=function(t){return e.getTableData()})},{default:Object(j["withCtx"])((function(){return[Ks]})),_:1})])])}Object(j["popScopeId"])();var $s=100,ef=32,tf=Object(j["defineComponent"])({name:"chart-data-editor",emits:["save","close"],props:{data:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["ref"])([0,0]),c=Object(j["ref"])({width:0,height:0}),l=Object(j["ref"])(null),a=Object(j["computed"])((function(){var e=o.value[0]*$s,t=o.value[1]*ef;return[{type:"t",style:{width:e+"px"}},{type:"b",style:{top:t+"px",width:e+"px"}},{type:"l",style:{height:t+"px"}},{type:"r",style:{left:e+"px",height:t+"px"}}]})),r=Object(j["computed"])((function(){var e=o.value[0]*$s,t=o.value[1]*ef;return{left:e+"px",top:t+"px"}})),i=function(){for(var t=[],n=e.data,c=n.labels,l=n.series,a=c.length,r=l.length,i=0;i.5*$s&&(i+=$s-i%$s),u%ef>.5*ef&&(u+=ef-u%ef);var d=Math.round(u/ef),s=Math.round(i/$s);d<3&&(d=3),s<2&&(s=2),o.value=[s,d],c.value={width:0,height:0}}}};return{tempRangeSize:c,rangeLines:a,resizablePointStyle:r,selectedRange:o,focusCell:l,changeSelectRange:p,getTableData:s,closeEditor:f}}});n("3ca2");tf.render=Qs,tf.__scopeId="data-v-39c533c6";var nf=tf,of=Object(j["defineComponent"])({name:"chart-style-panel",components:{ElementOutline:Wu,ChartDataEditor:nf,ColorButton:qu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.theme})),o=Object(j["ref"])(!1),c=We(),l=c.addHistorySnapshot,a=Object(j["ref"])(),r=Object(j["ref"])([]),i=Object(j["ref"])(""),u=Object(j["ref"])(!0),d=Object(j["ref"])(!0),s=Object(j["ref"])(!1),f=Object(j["ref"])(!1),p=Object(j["ref"])(!1);Object(j["watch"])(t,(function(){if(t.value&&"chart"===t.value.type){if(a.value=t.value.fill||"#000",t.value.options){var e=t.value.options,n=e.lineSmooth,o=e.showLine,c=e.showArea,l=e.horizontalBars,m=e.donut;void 0!==n&&(u.value=n),void 0!==o&&(d.value=o),void 0!==c&&(s.value=c),void 0!==l&&(f.value=l),void 0!==m&&(p.value=m)}r.value=t.value.themeColor,i.value=t.value.gridColor||"rgba(0, 0, 0, 0.4)"}}),{deep:!0,immediate:!0});var m=function(n){o.value=!1;var c={data:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),l()},b=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},v=function(n){var o=t.value.options||{},c=Object(I["a"])(Object(I["a"])({},o),n),a={options:c};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:a}),l()},O=function(n,o){var c={themeColor:r.value.map((function(e,t){return t===o?n:e}))};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),l()},h=function(){var o={themeColor:[].concat(Object(oe["a"])(r.value),[n.value.themeColor])};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},g=function(n){var o={themeColor:r.value.filter((function(e,t){return t!==n}))};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},E=function(n){var o={gridColor:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},C=function(){return o.value=!0};return Dc.on(Zo.OPEN_CHART_DATA_EDITOR,C),Object(j["onUnmounted"])((function(){Dc.off(Zo.OPEN_CHART_DATA_EDITOR,C)})),{chartDataEditorVisible:o,handleElement:t,updateData:m,fill:a,updateFill:b,lineSmooth:u,showLine:d,showArea:s,horizontalBars:f,donut:p,updateOptions:v,themeColor:r,gridColor:i,updateTheme:O,addThemeColor:h,deleteThemeColor:g,updateGridColor:E}}});n("da70");of.render=Gs,of.__scopeId="data-v-de85ffe4";var cf=of;Object(j["pushScopeId"])("data-v-db114f8c");var lf={class:"table-style-panel"},af={class:"row"},rf=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"行数:",-1),uf={class:"row"},df=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"列数:",-1),sf={class:"row theme-switch"},ff=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"启用主题表格:",-1),pf={class:"switch-wrapper",style:{flex:"3"}},mf={class:"row"},bf=Object(j["createTextVNode"])("标题行"),vf=Object(j["createTextVNode"])("汇总行"),Of={class:"row"},hf=Object(j["createTextVNode"])("第一列"),jf=Object(j["createTextVNode"])("最后一列"),gf={class:"row"},yf=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"主题颜色:",-1);function Ef(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconFontSize"),r=Object(j["resolveComponent"])("SelectOption"),i=Object(j["resolveComponent"])("SelectOptGroup"),u=Object(j["resolveComponent"])("Select"),d=Object(j["resolveComponent"])("IconAddText"),s=Object(j["resolveComponent"])("InputGroup"),f=Object(j["resolveComponent"])("ColorPicker"),p=Object(j["resolveComponent"])("IconText"),m=Object(j["resolveComponent"])("Button"),b=Object(j["resolveComponent"])("Tooltip"),v=Object(j["resolveComponent"])("Popover"),O=Object(j["resolveComponent"])("IconFill"),h=Object(j["resolveComponent"])("ButtonGroup"),g=Object(j["resolveComponent"])("IconTextBold"),y=Object(j["resolveComponent"])("CheckboxButton"),E=Object(j["resolveComponent"])("IconTextItalic"),C=Object(j["resolveComponent"])("IconTextUnderline"),x=Object(j["resolveComponent"])("IconStrikethrough"),k=Object(j["resolveComponent"])("CheckboxButtonGroup"),I=Object(j["resolveComponent"])("IconAlignTextLeft"),w=Object(j["resolveComponent"])("RadioButton"),S=Object(j["resolveComponent"])("IconAlignTextCenter"),N=Object(j["resolveComponent"])("IconAlignTextRight"),T=Object(j["resolveComponent"])("RadioGroup"),L=Object(j["resolveComponent"])("Divider"),V=Object(j["resolveComponent"])("ElementOutline"),_=Object(j["resolveComponent"])("InputNumber"),B=Object(j["resolveComponent"])("Switch"),D=Object(j["resolveComponent"])("Checkbox"),M=Object(j["resolveComponent"])("ColorButton");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",lf,[Object(j["createVNode"])(s,{compact:"",class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{style:{flex:"3"},value:e.textAttrs.fontname,onChange:t[0]||(t[0]=function(t){return e.updateTextAttrs({fontname:t})})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a)]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{label:"系统字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",{style:Object(j["normalizeStyle"])({fontFamily:e.value})},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(i,{label:"在线字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(j["createVNode"])(u,{style:{flex:"2"},value:e.textAttrs.fontsize,onChange:t[1]||(t[1]=function(t){return e.updateTextAttrs({fontsize:t})})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d)]})),default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.fontSizeOptions,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e,value:e},{default:Object(j["withCtx"])((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(j["createVNode"])(h,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateTextAttrs({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{class:"text-color-btn",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p),Object(j["createElementVNode"])("div",{class:"text-color-block",style:Object(j["normalizeStyle"])({backgroundColor:e.textAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(v,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.backcolor,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateTextAttrs({backcolor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"单元格填充"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{class:"text-color-btn",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O),Object(j["createElementVNode"])("div",{class:"text-color-block",style:Object(j["normalizeStyle"])({backgroundColor:e.textAttrs.backcolor})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(j["createVNode"])(k,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.bold,onClick:t[4]||(t[4]=function(t){return e.updateTextAttrs({bold:!e.textAttrs.bold})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.em,onClick:t[5]||(t[5]=function(t){return e.updateTextAttrs({em:!e.textAttrs.em})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(E)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.underline,onClick:t[6]||(t[6]=function(t){return e.updateTextAttrs({underline:!e.textAttrs.underline})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除线"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.strikethrough,onClick:t[7]||(t[7]=function(t){return e.updateTextAttrs({strikethrough:!e.textAttrs.strikethrough})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(T,{class:"row","button-style":"solid",value:e.textAttrs.align,onChange:t[8]||(t[8]=function(t){return e.updateTextAttrs({align:t.target.value})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w,{value:"left",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(I)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w,{value:"center",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(S)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w,{value:"right",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(N)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(L),Object(j["createVNode"])(V,{fixed:!0}),Object(j["createVNode"])(L),Object(j["createElementVNode"])("div",af,[rf,Object(j["createVNode"])(_,{min:e.minRowCount,max:20,value:e.rowCount,"onUpdate:value":t[9]||(t[9]=function(t){return e.rowCount=t}),onPressEnter:t[10]||(t[10]=function(t){return e.setTableRow(t)}),onBlur:t[11]||(t[11]=function(t){return e.setTableRow(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createElementVNode"])("div",uf,[df,Object(j["createVNode"])(_,{min:e.minColCount,max:20,value:e.colCount,"onUpdate:value":t[12]||(t[12]=function(t){return e.colCount=t}),onPressEnter:t[13]||(t[13]=function(t){return e.setTableCol(t)}),onBlur:t[14]||(t[14]=function(t){return e.setTableCol(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createVNode"])(L),Object(j["createElementVNode"])("div",sf,[ff,Object(j["createElementVNode"])("div",pf,[Object(j["createVNode"])(B,{checked:e.hasTheme,onChange:t[15]||(t[15]=function(t){return e.toggleTheme(t)})},null,8,["checked"])])]),e.hasTheme?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",mf,[Object(j["createVNode"])(D,{onChange:t[16]||(t[16]=function(t){return e.updateTheme({rowHeader:t.target.checked})}),checked:e.theme.rowHeader,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[bf]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[17]||(t[17]=function(t){return e.updateTheme({rowFooter:t.target.checked})}),checked:e.theme.rowFooter,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[vf]})),_:1},8,["checked"])]),Object(j["createElementVNode"])("div",Of,[Object(j["createVNode"])(D,{onChange:t[18]||(t[18]=function(t){return e.updateTheme({colHeader:t.target.checked})}),checked:e.theme.colHeader,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[hf]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[19]||(t[19]=function(t){return e.updateTheme({colFooter:t.target.checked})}),checked:e.theme.colFooter,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[jf]})),_:1},8,["checked"])]),Object(j["createElementVNode"])("div",gf,[yf,Object(j["createVNode"])(v,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.theme.color,"onUpdate:modelValue":t[20]||(t[20]=function(t){return e.updateTheme({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(M,{color:e.theme.color,style:{flex:"3"}},null,8,["color"])]})),_:1})])],64)):Object(j["createCommentVNode"])("",!0)])}Object(j["popScopeId"])();var Cf=ae,xf=Object(j["defineComponent"])({name:"table-style-panel",components:{ElementOutline:Wu,ColorButton:qu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.selectedTableCells})),o=Object(j["computed"])((function(){return e.state.theme.themeColor})),c=Object(j["computed"])((function(){return e.state.availableFonts})),l=["12px","14px","16px","18px","20px","22px","24px","28px","32px"],a=Object(j["ref"])({bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}),r=Object(j["ref"])(),i=Object(j["ref"])(!1),u=Object(j["ref"])(0),d=Object(j["ref"])(0),s=Object(j["ref"])(0),f=Object(j["ref"])(0);Object(j["watch"])(t,(function(){t.value&&"table"===t.value.type&&(r.value=t.value.theme,i.value=!!r.value,u.value=t.value.data.length,d.value=t.value.data[0].length,s.value=t.value.data.length,f.value=t.value.data[0].length)}),{deep:!0,immediate:!0});var p=We(),m=p.addHistorySnapshot,b=function(){if(t.value&&"table"===t.value.type){var e=0,o=0;if(n.value.length){var c=n.value[0];e=+c.split("_")[0],o=+c.split("_")[1]}var l=t.value.data[e][o].style;a.value=l?{bold:!!l.bold,em:!!l.em,underline:!!l.underline,strikethrough:!!l.strikethrough,color:l.color||"#000",backcolor:l.backcolor||"#000",fontsize:l.fontsize||"12px",fontname:l.fontname||"微软雅黑",align:l.align||"left"}:{bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}}};Object(j["onMounted"])((function(){n.value.length&&b()})),Object(j["watch"])(n,b);var v=function(o){for(var c=JSON.parse(JSON.stringify(t.value.data)),l=0;l
X
Y
',1),Pf={class:"row"},Rf=Object(j["createElementVNode"])("div",{style:{flex:"3"}},"大小:",-1),Ff={key:1,style:{flex:"1"}},Hf=Object(j["createStaticVNode"])('
',1),Uf={class:"row"},Gf=Object(j["createElementVNode"])("div",{style:{flex:"3"}},"旋转:",-1),qf=Object(j["createElementVNode"])("div",{style:{flex:"1"}},null,-1);function Xf(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconSendToBack"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("IconBringToFrontOne"),u=Object(j["resolveComponent"])("ButtonGroup"),d=Object(j["resolveComponent"])("IconBringToFront"),s=Object(j["resolveComponent"])("IconSentToBack"),f=Object(j["resolveComponent"])("Divider"),p=Object(j["resolveComponent"])("IconAlignLeft"),m=Object(j["resolveComponent"])("Tooltip"),b=Object(j["resolveComponent"])("IconAlignVertically"),v=Object(j["resolveComponent"])("IconAlignRight"),O=Object(j["resolveComponent"])("IconAlignTop"),h=Object(j["resolveComponent"])("IconAlignHorizontally"),g=Object(j["resolveComponent"])("IconAlignBottom"),y=Object(j["resolveComponent"])("InputNumber"),E=Object(j["resolveComponent"])("IconLock"),C=Object(j["resolveComponent"])("IconUnlock"),x=Object(j["resolveComponent"])("IconRotate");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Sf,[Nf,Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.orderElement(e.handleElement,"top")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{class:"btn-icon"}),Tf]})),_:1}),Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.orderElement(e.handleElement,"bottom")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{class:"btn-icon"}),Lf]})),_:1})]})),_:1}),Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.orderElement(e.handleElement,"up")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{class:"btn-icon"}),Vf]})),_:1}),Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.orderElement(e.handleElement,"down")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(s,{class:"btn-icon"}),_f]})),_:1})]})),_:1}),Object(j["createVNode"])(f),Bf,Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElementToCanvas("left")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElementToCanvas("horizontal")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElementToCanvas("right")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.alignElementToCanvas("top")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.alignElementToCanvas("vertical")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(h)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.alignElementToCanvas("bottom")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(f),Object(j["createElementVNode"])("div",Df,[Mf,Object(j["createVNode"])(y,{step:5,value:e.left,onChange:t[10]||(t[10]=function(t){return e.updateLeft(t)}),style:{flex:"4"}},null,8,["value"]),Af,Object(j["createVNode"])(y,{step:5,value:e.top,onChange:t[11]||(t[11]=function(t){return e.updateTop(t)}),style:{flex:"4"}},null,8,["value"])]),zf,"line"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",Pf,[Rf,Object(j["createVNode"])(y,{min:e.minSize,max:1500,step:5,value:e.width,onChange:t[12]||(t[12]=function(t){return e.updateWidth(t)}),style:{flex:"4"}},null,8,["min","value"]),["image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[e.fixedRatio?(Object(j["openBlock"])(),Object(j["createBlock"])(m,{key:0,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"解除宽高比锁定"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(E,{style:{flex:"1"},class:"icon-btn",onClick:t[13]||(t[13]=function(t){return e.updateFixedRatio(!1)})})]})),_:1},8,["mouseEnterDelay"])):(Object(j["openBlock"])(),Object(j["createBlock"])(m,{key:1,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"宽高比锁定"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(C,{style:{flex:"1"},class:"icon-btn",onClick:t[14]||(t[14]=function(t){return e.updateFixedRatio(!0)})})]})),_:1},8,["mouseEnterDelay"]))],64)):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ff)),Object(j["createVNode"])(y,{min:e.minSize,max:800,step:5,disabled:"text"===e.handleElement.type,value:e.height,onChange:t[15]||(t[15]=function(t){return e.updateHeight(t)}),style:{flex:"4"}},null,8,["min","disabled","value"])]),Hf],64)):Object(j["createCommentVNode"])("",!0),["text","image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:1},[Object(j["createVNode"])(f),Object(j["createElementVNode"])("div",Uf,[Gf,Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"逆时针旋转"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{class:"icon-btn",onClick:t[16]||(t[16]=function(t){return e.updateRotate45("-")}),style:{flex:"2"}})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顺时针旋转"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{class:"icon-btn",onClick:t[17]||(t[17]=function(t){return e.updateRotate45("+")}),style:Object(j["normalizeStyle"])({flex:2,transform:"rotateY(180deg)"})},null,8,["style"])]})),_:1},8,["mouseEnterDelay"]),qf,Object(j["createVNode"])(y,{min:-180,max:180,step:5,value:e.rotate,onChange:t[18]||(t[18]=function(t){return e.updateRotate(t)}),style:{flex:"4"}},null,8,["value"])])],64)):Object(j["createCommentVNode"])("",!0)])}Object(j["popScopeId"])();var Wf=Object(j["defineComponent"])({name:"element-positopn-panel",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(0),o=Object(j["ref"])(0),c=Object(j["ref"])(0),l=Object(j["ref"])(0),a=Object(j["ref"])(0),r=Object(j["ref"])(!1),i=Object(j["computed"])((function(){return t.value&&Xn[t.value.type]||20}));Object(j["watch"])(t,(function(){t.value&&(n.value=Object(ce["round"])(t.value.left,1),o.value=Object(ce["round"])(t.value.top,1),r.value="fixedRatio"in t.value&&!!t.value.fixedRatio,"line"!==t.value.type&&(c.value=Object(ce["round"])(t.value.width,1),l.value=Object(ce["round"])(t.value.height,1),a.value="rotate"in t.value&&void 0!==t.value.rotate?Object(ce["round"])(t.value.rotate,1):0))}),{deep:!0,immediate:!0});var u=at(),d=u.orderElement,s=oo(),f=s.alignElementToCanvas,p=We(),m=p.addHistorySnapshot,b=function(n){var o={left:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},v=function(n){var o={top:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},O=function(n){var o={width:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},h=function(n){var o={height:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},g=function(n){var o={rotate:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},E=function(n){var o={fixedRatio:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},C=function(n){var o=45*Math.floor(a.value/45);"+"===n?o+=45:"-"===n&&(o-=45),o<-180&&(o=-180),o>180&&(o=180);var c={rotate:o};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),m()};return{handleElement:t,orderElement:d,alignElementToCanvas:f,left:n,top:o,width:c,height:l,rotate:a,fixedRatio:r,minSize:i,updateLeft:b,updateTop:v,updateWidth:O,updateHeight:h,updateRotate:g,updateFixedRatio:E,updateRotate45:C}}});n("9c08");Wf.render=Xf,Wf.__scopeId="data-v-655fed44";var Yf=Wf;Object(j["pushScopeId"])("data-v-34dfe3c2");var Zf={class:"element-animation-panel"},Jf={key:0,class:"element-animation"},Kf={class:"animation-pool"},Qf={class:"type-title"},$f={class:"pool-item-wrapper"},ep=["onMouseenter","onClick"],tp=Object(j["createTextVNode"])(" 图表元素暂不支持动画 "),np={key:2,class:"duration"},op=Object(j["createElementVNode"])("div",{style:{flex:"4"}},"持续时间(毫秒):",-1),cp={key:1,class:"tip"},lp=Object(j["createTextVNode"])(" 选中画布中的元素添加动画"),ap={class:"index"},rp={class:"text"},ip={class:"handler"};function up(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconEffects"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Popover"),u=Object(j["resolveComponent"])("InputNumber"),d=Object(j["resolveComponent"])("IconClick"),s=Object(j["resolveComponent"])("Divider"),f=Object(j["resolveComponent"])("IconPlayOne"),p=Object(j["resolveComponent"])("Tooltip"),m=Object(j["resolveComponent"])("IconCloseSmall"),b=Object(j["resolveComponent"])("Draggable");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Zf,[e.handleElement?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Jf,["chart"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,trigger:"click",visible:e.animationPoolVisible,"onUpdate:visible":t[1]||(t[1]=function(t){return e.animationPoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Kf,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"pool-type",key:n.name},[Object(j["createElementVNode"])("div",Qf,Object(j["toDisplayString"])(n.name)+":",1),Object(j["createElementVNode"])("div",$f,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(n.children,(function(n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"pool-item",key:n.name,onMouseenter:function(t){return e.hoverPreviewAnimation=n.value},onMouseleave:t[0]||(t[0]=function(t){return e.hoverPreviewAnimation=""}),onClick:function(t){return e.addAnimation(n.value)}},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["animation-box",["animate__animated","animate__faster",e.hoverPreviewAnimation===n.value&&"animate__".concat(n.value)]])},Object(j["toDisplayString"])(n.name),3)],40,ep)})),128))])])})),128))])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{class:"element-animation-btn"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{style:{"margin-right":"5px"}}),Object(j["createTextVNode"])(" "+Object(j["toDisplayString"])(e.handleElementAnimationName||"点击选择动画"),1)]})),_:1})]})),_:1},8,["visible"])):(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,class:"element-animation-btn",disabled:""},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{style:{"margin-right":"5px"}}),tp]})),_:1})),e.handleElementAnimation?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",np,[op,Object(j["createVNode"])(u,{min:100,max:5e3,step:100,value:e.handleElementAnimation.duration,onChange:t[2]||(t[2]=function(t){return e.updateElementAnimationDuration(t)}),style:{flex:"3"}},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",cp,[Object(j["createVNode"])(d),lp])),Object(j["createVNode"])(s),Object(j["createVNode"])(b,{class:"animation-sequence",modelValue:e.animationSequence,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(j["withCtx"])((function(t){var n,o=t.element,c=t.index;return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["sequence-item",{active:(null===(n=e.handleElement)||void 0===n?void 0:n.id)===o.elId}])},[Object(j["createElementVNode"])("div",ap,Object(j["toDisplayString"])(c+1),1),Object(j["createElementVNode"])("div",rp,"【"+Object(j["toDisplayString"])(o.elType)+"】"+Object(j["toDisplayString"])(o.animationType),1),Object(j["createElementVNode"])("div",ip,[Object(j["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"预览"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{class:"handler-btn",onClick:function(t){return e.runAnimation(o.elId,o.type,o.duration)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"]),Object(j["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{class:"handler-btn",onClick:function(t){return e.deleteAnimation(o.elId)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"])])],2)]})),_:1},8,["modelValue","onEnd"])])}Object(j["popScopeId"])();var dp,sp=[{type:"bounce",name:"弹跳",children:[{name:"弹入",value:"bounceIn"},{name:"向右弹入",value:"bounceInLeft"},{name:"向左弹入",value:"bounceInRight"},{name:"向上弹入",value:"bounceInUp"},{name:"向下弹入",value:"bounceInDown"}]},{type:"fade",name:"浮现",children:[{name:"浮入",value:"fadeIn"},{name:"向下浮入",value:"fadeInDown"},{name:"向下长距浮入",value:"fadeInDownBig"},{name:"向右浮入",value:"fadeInLeft"},{name:"向右长距浮入",value:"fadeInLeftBig"},{name:"向左浮入",value:"fadeInRight"},{name:"向左长距浮入",value:"fadeInRightBig"},{name:"向上浮入",value:"fadeInUp"},{name:"向上长距浮入",value:"fadeInUpBig"},{name:"从左上浮入",value:"fadeInTopLeft"},{name:"从右上浮入",value:"fadeInTopRight"},{name:"从左下浮入",value:"fadeInBottomLeft"},{name:"从右下浮入",value:"fadeInBottomRight"}]},{type:"rotate",name:"旋转",children:[{name:"旋转进入",value:"rotateIn"},{name:"绕左下旋转进入",value:"rotateInDownLeft"},{name:"绕右下旋转进入",value:"rotateInDownRight"},{name:"绕左上旋转进入",value:"rotateInUpLeft"},{name:"绕右上旋转进入",value:"rotateInUpRight"}]},{type:"zoom",name:"缩放",children:[{name:"放大进入",value:"zoomIn"},{name:"向下放大进入",value:"zoomInDown"},{name:"从左放大进入",value:"zoomInLeft"},{name:"从右放大进入",value:"zoomInRight"},{name:"向上放大进入",value:"zoomInUp"}]},{type:"slide",name:"滑入",children:[{name:"向下滑入",value:"slideInDown"},{name:"从右滑入",value:"slideInLeft"},{name:"从左滑入",value:"slideInRight"},{name:"向上滑入",value:"slideInUp"}]},{type:"flip",name:"翻转",children:[{name:"X轴翻转进入",value:"flipInX"},{name:"Y轴翻转进入",value:"flipInY"}]},{type:"back",name:"放大滑入",children:[{name:"向下放大滑入",value:"backInDown"},{name:"从左放大滑入",value:"backInLeft"},{name:"从右放大滑入",value:"backInRight"},{name:"向上放大滑入",value:"backInUp"}]},{type:"lightSpeed",name:"飞入",children:[{name:"从右飞入",value:"lightSpeedInRight"},{name:"从左飞入",value:"lightSpeedInLeft"}]}],fp=1e3,pp={},mp=Object(w["a"])(sp);try{for(mp.s();!(dp=mp.n()).done;){var bp,vp=dp.value,Op=Object(w["a"])(vp.children);try{for(Op.s();!(bp=Op.n()).done;){var hp=bp.value;pp[hp.value]=hp.name}}catch(tj){Op.e(tj)}finally{Op.f()}}}catch(tj){mp.e(tj)}finally{mp.f()}var jp=Object(j["defineComponent"])({name:"element-animation-panel",components:{Draggable:bi.a},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.getters.currentSlideAnimations})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=Object(j["ref"])(""),l=Object(j["ref"])(!1),a=We(),r=a.addHistorySnapshot,i=sp,u=Object(j["computed"])((function(){if(!n.value)return[];var e,t=[],c=Object(w["a"])(n.value);try{var l=function(){var n=e.value,c=o.value.elements.find((function(e){return e.id===n.elId}));if(!c)return"continue";var l=qn[c.type],a=pp[n.type];t.push(Object(I["a"])(Object(I["a"])({},n),{},{elType:l,animationType:a}))};for(c.s();!(e=c.n()).done;)l()}catch(tj){c.e(tj)}finally{c.f()}return t})),d=Object(j["computed"])((function(){if(!t.value)return null;var e=n.value||[],o=e.find((function(e){return e.elId===t.value.id}));return o||null})),s=Object(j["computed"])((function(){return d.value?pp[d.value.type]:null})),f=function(t){var o=n.value.filter((function(e){return e.elId!==t}));e.commit(y.UPDATE_SLIDE,{animations:o}),r()},p=function(t){var o=t.newIndex,c=t.oldIndex;if(c!==o){var l=JSON.parse(JSON.stringify(n.value)),a=l[c];l.splice(c,1),l.splice(o,0,a),e.commit(y.UPDATE_SLIDE,{animations:l}),r()}},m=function(e,t,n){var o="animate__",c=document.querySelector("#editable-element-".concat(e," [class^=editable-element-]"));if(c){var l="".concat(o).concat(t);document.documentElement.style.setProperty("--animate-duration","".concat(n,"ms")),c.classList.add("".concat(o,"animated"),l);var a=function(){document.documentElement.style.removeProperty("--animate-duration"),c.classList.remove("".concat(o,"animated"),l)};c.addEventListener("animationend",a,{once:!0})}},b=function(o){if(n.value){var c=n.value.map((function(e){return e.elId===t.value.id?Object(I["a"])(Object(I["a"])({},e),{},{type:o}):e}));e.commit(y.UPDATE_SLIDE,{animations:c}),l.value=!1,r();var a=n.value.find((function(e){return e.elId===t.value.id})),i=(null===a||void 0===a?void 0:a.duration)||fp;m(t.value.id,o,i)}},v=function(o){if(n.value&&!(o<100||o>5e3)){var c=n.value.map((function(e){return e.elId===t.value.id?Object(I["a"])(Object(I["a"])({},e),{},{duration:o}):e}));e.commit(y.UPDATE_SLIDE,{animations:c}),r()}},O=function(o){if(s.value)b(o);else{var c=n.value?JSON.parse(JSON.stringify(n.value)):[];c.push({elId:t.value.id,type:o,duration:fp}),e.commit(y.UPDATE_SLIDE,{animations:c}),l.value=!1,r(),m(t.value.id,o,fp)}};return{handleElement:t,animationPoolVisible:l,animations:i,animationSequence:u,hoverPreviewAnimation:c,handleElementAnimation:d,handleElementAnimationName:s,addAnimation:O,deleteAnimation:f,handleDragEnd:p,runAnimation:m,updateElementAnimationDuration:v}}});n("2ecf");jp.render=up,jp.__scopeId="data-v-34dfe3c2";var gp=jp;Object(j["pushScopeId"])("data-v-7c0de296");var yp={class:"slide-design-panel"},Ep=Object(j["createElementVNode"])("div",{class:"title"},"背景填充",-1),Cp={class:"row"},xp=Object(j["createTextVNode"])("纯色填充"),kp=Object(j["createTextVNode"])("图片填充"),Ip=Object(j["createTextVNode"])("渐变填充"),wp=Object(j["createElementVNode"])("div",{style:{flex:"1"}},null,-1),Sp=Object(j["createTextVNode"])("缩放"),Np=Object(j["createTextVNode"])("拼贴"),Tp=Object(j["createTextVNode"])("缩放铺满"),Lp=Object(j["createTextVNode"])("线性渐变"),Vp=Object(j["createTextVNode"])("径向渐变"),_p={key:0,class:"background-image-wrapper"},Bp={class:"background-image"},Dp={key:1,class:"background-gradient-wrapper"},Mp={class:"row"},Ap=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),zp={class:"row"},Pp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Rp={key:0,class:"row"},Fp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1),Hp={class:"row"},Up=Object(j["createTextVNode"])("应用背景到全部"),Gp={class:"row"},qp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"画布尺寸:",-1),Xp=Object(j["createTextVNode"])("宽屏 16 : 9"),Wp=Object(j["createTextVNode"])("宽屏 16 :10"),Yp=Object(j["createTextVNode"])("标准 4 :3"),Zp=Object(j["createElementVNode"])("div",{class:"title"},"全局主题",-1),Jp={class:"row"},Kp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"字体:",-1),Qp={class:"row"},$p=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"字体颜色:",-1),em={class:"row"},tm=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"背景颜色:",-1),nm={class:"row"},om=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"主题色:",-1),cm=Object(j["createTextVNode"])(" 预置主题 "),lm={key:2,class:"theme-list"},am=["onClick"],rm={class:"theme-item-content"},im={class:"row"},um=Object(j["createTextVNode"])("应用主题到全部");function dm(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SelectOption"),r=Object(j["resolveComponent"])("Select"),i=Object(j["resolveComponent"])("ColorPicker"),u=Object(j["resolveComponent"])("ColorButton"),d=Object(j["resolveComponent"])("Popover"),s=Object(j["resolveComponent"])("IconPlus"),f=Object(j["resolveComponent"])("FileInput"),p=Object(j["resolveComponent"])("Slider"),m=Object(j["resolveComponent"])("Button"),b=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("SelectOptGroup"),O=Object(j["resolveComponent"])("IconDown");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",yp,[Ep,Object(j["createElementVNode"])("div",Cp,[Object(j["createVNode"])(r,{style:{flex:"10"},value:e.background.type,onChange:t[0]||(t[0]=function(t){return e.updateBackgroundType(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"solid"},{default:Object(j["withCtx"])((function(){return[xp]})),_:1}),Object(j["createVNode"])(a,{value:"image"},{default:Object(j["withCtx"])((function(){return[kp]})),_:1}),Object(j["createVNode"])(a,{value:"gradient"},{default:Object(j["withCtx"])((function(){return[Ip]})),_:1})]})),_:1},8,["value"]),wp,"solid"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateBackground({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.background.color||"#fff",style:{flex:"10"}},null,8,["color"])]})),_:1})):"image"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,style:{flex:"10"},value:e.background.imageSize||"cover",onChange:t[2]||(t[2]=function(t){return e.updateBackground({imageSize:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"contain"},{default:Object(j["withCtx"])((function(){return[Sp]})),_:1}),Object(j["createVNode"])(a,{value:"repeat"},{default:Object(j["withCtx"])((function(){return[Np]})),_:1}),Object(j["createVNode"])(a,{value:"cover"},{default:Object(j["withCtx"])((function(){return[Tp]})),_:1})]})),_:1},8,["value"])):(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:2,style:{flex:"10"},value:e.background.gradientType,onChange:t[3]||(t[3]=function(t){return e.updateBackground({gradientType:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"linear"},{default:Object(j["withCtx"])((function(){return[Lp]})),_:1}),Object(j["createVNode"])(a,{value:"radial"},{default:Object(j["withCtx"])((function(){return[Vp]})),_:1})]})),_:1},8,["value"]))]),"image"===e.background.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",_p,[Object(j["createVNode"])(f,{onChange:t[4]||(t[4]=function(t){return e.uploadBackgroundImage(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Bp,[Object(j["createElementVNode"])("div",{class:"content",style:Object(j["normalizeStyle"])({backgroundImage:"url(".concat(e.background.image,")")})},[Object(j["createVNode"])(s)],4)])]})),_:1})])):Object(j["createCommentVNode"])("",!0),"gradient"===e.background.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Dp,[Object(j["createElementVNode"])("div",Mp,[Ap,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[0],"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.updateBackground({gradientColor:[t,e.background.gradientColor[1]]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.background.gradientColor[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",zp,[Pp,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[1],"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.updateBackground({gradientColor:[e.background.gradientColor[0],t]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.background.gradientColor[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.background.gradientType?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Rp,[Fp,Object(j["createVNode"])(p,{min:0,max:360,step:15,value:e.background.gradientRotate,style:{flex:"3"},onChange:t[7]||(t[7]=function(t){return e.updateBackground({gradientRotate:t})})},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",Hp,[Object(j["createVNode"])(m,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.applyBackgroundAllSlide()})},{default:Object(j["withCtx"])((function(){return[Up]})),_:1})]),Object(j["createVNode"])(b),Object(j["createElementVNode"])("div",Gp,[qp,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.viewportRatio,onChange:t[9]||(t[9]=function(t){return e.updateViewportRatio(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:.5625},{default:Object(j["withCtx"])((function(){return[Xp]})),_:1},8,["value"]),Object(j["createVNode"])(a,{value:.625},{default:Object(j["withCtx"])((function(){return[Wp]})),_:1},8,["value"]),Object(j["createVNode"])(a,{value:.75},{default:Object(j["withCtx"])((function(){return[Yp]})),_:1},8,["value"])]})),_:1},8,["value"])]),Object(j["createVNode"])(b),Zp,Object(j["createElementVNode"])("div",Jp,[Kp,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.theme.fontName,onChange:t[10]||(t[10]=function(t){return e.updateTheme({fontName:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{label:"系统字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",{style:Object(j["normalizeStyle"])({fontFamily:e.value})},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(v,{label:"在线字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"])]),Object(j["createElementVNode"])("div",Qp,[$p,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.fontColor,"onUpdate:modelValue":t[11]||(t[11]=function(t){return e.updateTheme({fontColor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.theme.fontColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",em,[tm,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.backgroundColor,"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.updateTheme({backgroundColor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.theme.backgroundColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",nm,[om,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.themeColor,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.updateTheme({themeColor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.theme.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["title dropdown",{active:e.showPresetThemes}]),onClick:t[14]||(t[14]=function(t){return e.togglePresetThemesVisible()}),style:{"margin-top":"20px"}},[cm,Object(j["createVNode"])(O,{class:"icon"})],2),e.showPresetThemes?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",lm,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themes,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"theme-item",key:n,style:Object(j["normalizeStyle"])({backgroundColor:t.background}),onClick:function(n){return e.updateTheme({fontColor:t.text,backgroundColor:t.background,themeColor:t.color})}},[Object(j["createElementVNode"])("div",rm,[Object(j["createElementVNode"])("div",{class:"text",style:Object(j["normalizeStyle"])({color:t.text})},"Aa",4),Object(j["createElementVNode"])("div",{class:"color-block",style:Object(j["normalizeStyle"])({backgroundColor:t.color})},null,4)])],12,am)})),128))])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",im,[Object(j["createVNode"])(m,{style:{flex:"1"},onClick:t[15]||(t[15]=function(t){return e.applyThemeAllSlide()})},{default:Object(j["withCtx"])((function(){return[um]})),_:1})])])}Object(j["popScopeId"])();var sm=[{color:"#d14424",background:"#ffffff",text:"#333"},{color:"#42464b",background:"#ffffff",text:"#333"},{color:"#5d82ba",background:"#ffffff",text:"#333"},{color:"#005a6f",background:"#ffffff",text:"#333"},{color:"#d0614c",background:"#dfb044",text:"#333"},{color:"#86a1ad",background:"#dfdbd4",text:"#333"},{color:"#697586",background:"#d5c4a4",text:"#333"},{color:"#333333",background:"#7acfa6",text:"#333"},{color:"#42464b",background:"#415065",text:"#fff"},{color:"#0c5999",background:"#35a2cd",text:"#fff"},{color:"#c49a41",background:"#8c4357",text:"#fff"},{color:"#dfaa00",background:"#2e4e7d",text:"#fff"},{color:"#d1ad88",background:"#f99070",text:"#fff"},{color:"#464d52",background:"#657984",text:"#fff"},{color:"#ffcfb6",background:"#1e4c6f",text:"#fff"},{color:"#c3a043",background:"#43292a",text:"#fff"},{color:"#464d52",background:"#60546f",text:"#fff"},{color:"#df9636",background:"#5b89a0",text:"#fff"},{color:"#b898a4",background:"#93716b",text:"#fff"},{color:"#c47a11",background:"#187db1",text:"#fff"},{color:"#333333",background:"#759564",text:"#fff"},{color:"#355b5e",background:"#424b50",text:"#fff"},{color:"#d29090",background:"#942a32",text:"#fff"},{color:"#00cfdf",background:"#3b434d",text:"#fff"},{color:"#424246",background:"#c70042",text:"#fff"},{color:"#2e4155",background:"#b35d44",text:"#fff"},{color:"#11bfce",background:"#8f98aa",text:"#fff"},{color:"#333333",background:"#549688",text:"#fff"}],fm=sm,pm=ae,mm=Object(j["defineComponent"])({name:"slide-design-panel",components:{ColorButton:qu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.state.theme})),o=Object(j["computed"])((function(){return e.state.availableFonts})),c=Object(j["computed"])((function(){return e.state.viewportRatio})),l=Object(j["computed"])((function(){return e.getters.currentSlide})),a=Object(j["computed"])((function(){return l.value.background?l.value.background:{type:"solid",value:"#fff"}})),r=We(),i=r.addHistorySnapshot,u=function(t){if("solid"===t){var n=Object(I["a"])(Object(I["a"])({},a.value),{},{type:"solid",color:a.value.color||"#fff"});e.commit(y.UPDATE_SLIDE,{background:n})}else if("image"===t){var o=Object(I["a"])(Object(I["a"])({},a.value),{},{type:"image",image:a.value.image||"",imageSize:a.value.imageSize||"cover"});e.commit(y.UPDATE_SLIDE,{background:o})}else{var c=Object(I["a"])(Object(I["a"])({},a.value),{},{type:"gradient",gradientType:a.value.gradientType||"linear",gradientColor:a.value.gradientColor||["#fff","#fff"],gradientRotate:a.value.gradientRotate||0});e.commit(y.UPDATE_SLIDE,{background:c})}i()},d=function(t){e.commit(y.UPDATE_SLIDE,{background:Object(I["a"])(Object(I["a"])({},a.value),t)}),i()},s=function(e){var t=e[0];t&&Ze(t).then((function(e){return d({image:e})}))},f=function(){var n=t.value.map((function(e){return Object(I["a"])(Object(I["a"])({},e),{},{background:l.value.background})}));e.commit(y.SET_SLIDES,n),i()},p=function(t){e.commit(y.SET_THEME,t)},m=function(){var o,c=JSON.parse(JSON.stringify(t.value)),l=n.value,a=l.themeColor,r=l.backgroundColor,u=l.fontColor,d=l.fontName,s=Object(w["a"])(c);try{for(s.s();!(o=s.n()).done;){var f=o.value;f.background&&"image"===f.background.type||(f.background=Object(I["a"])(Object(I["a"])({},f.background),{},{type:"solid",color:r}));var p,m=f.elements,b=Object(w["a"])(m);try{for(b.s();!(p=b.n()).done;){var v=p.value;if("shape"===v.type)v.fill=a;else if("line"===v.type)v.color=a;else if("text"===v.type)v.defaultColor=u,v.defaultFontName=d,v.fill&&(v.fill=a);else if("table"===v.type){v.theme&&(v.theme.color=a);var O,h=Object(w["a"])(v.data);try{for(h.s();!(O=h.n()).done;){var j,g=O.value,E=Object(w["a"])(g);try{for(E.s();!(j=E.n()).done;){var C=j.value;C.style&&(C.style.color=u,C.style.fontname=d)}}catch(tj){E.e(tj)}finally{E.f()}}}catch(tj){h.e(tj)}finally{h.f()}}else"chart"===v.type&&(v.themeColor=[a],v.gridColor=u)}}catch(tj){b.e(tj)}finally{b.f()}}}catch(tj){s.e(tj)}finally{s.f()}e.commit(y.SET_SLIDES,c),i()},b=Object(j["ref"])(!0),v=function(){b.value=!b.value},O=function(t){e.commit(y.SET_VIEWPORT_RATIO,t)};return{availableFonts:o,background:a,updateBackgroundType:u,updateBackground:d,uploadBackgroundImage:s,applyBackgroundAllSlide:f,themes:fm,theme:n,webFonts:pm,updateTheme:p,applyThemeAllSlide:m,viewportRatio:c,updateViewportRatio:O,showPresetThemes:b,togglePresetThemesVisible:v}}});n("c991");mm.render=dm,mm.__scopeId="data-v-7c0de296";var bm=mm;Object(j["pushScopeId"])("data-v-647e2618");var vm={class:"slide-animation-panel"},Om={class:"animation-pool"},hm=["onClick"],jm={class:"animation-text"},gm=Object(j["createTextVNode"])("应用到全部");function ym(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",vm,[Object(j["createElementVNode"])("div",Om,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["animation-item",{active:e.currentTurningMode===t.value}]),key:t.label,onClick:function(n){return e.updateTurningMode(t.value)}},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["animation-block",t.value])},null,2),Object(j["createElementVNode"])("div",jm,Object(j["toDisplayString"])(t.label),1)],10,hm)})),128))]),Object(j["createVNode"])(a,{style:{width:"100%"},onClick:t[0]||(t[0]=function(t){return e.applyAllSlide()})},{default:Object(j["withCtx"])((function(){return[gm]})),_:1})])}Object(j["popScopeId"])();var Em=Object(j["defineComponent"])({name:"slide-animation-panel",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=Object(j["computed"])((function(){return n.value.turningMode||"slideY"})),c=[{label:"无",value:"no"},{label:"淡入淡出",value:"fade"},{label:"左右推移",value:"slideX"},{label:"上下推移",value:"slideY"}],l=We(),a=l.addHistorySnapshot,r=function(t){t!==o.value&&(e.commit(y.UPDATE_SLIDE,{turningMode:t}),a())},i=function(){var o=t.value.map((function(e){return Object(I["a"])(Object(I["a"])({},e),{},{turningMode:n.value.turningMode})}));e.commit(y.SET_SLIDES,o),a()};return{currentTurningMode:o,animations:c,updateTurningMode:r,applyAllSlide:i}}});n("ccf6");Em.render=ym,Em.__scopeId="data-v-647e2618";var Cm=Em;Object(j["pushScopeId"])("data-v-88d13362");var xm={class:"multi-position-panel"},km=Object(j["createTextVNode"])("水平均匀分布"),Im=Object(j["createTextVNode"])("垂直均匀分布"),wm=Object(j["createTextVNode"])("组合"),Sm=Object(j["createTextVNode"])("取消组合");function Nm(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconAlignLeft"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconAlignHorizontally"),d=Object(j["resolveComponent"])("IconAlignRight"),s=Object(j["resolveComponent"])("ButtonGroup"),f=Object(j["resolveComponent"])("IconAlignTop"),p=Object(j["resolveComponent"])("IconAlignVertically"),m=Object(j["resolveComponent"])("IconAlignBottom"),b=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("IconGroup"),O=Object(j["resolveComponent"])("IconUngroup");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",xm,[Object(j["createVNode"])(s,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.alignElement("left")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.alignElement("horizontal")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.alignElement("right")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(s,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.alignElement("top")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElement("vertical")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElement("bottom")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),e.displayItemCount>2?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.uniformHorizontalDisplay()})},{default:Object(j["withCtx"])((function(){return[km]})),_:1}),Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.uniformVerticalDisplay()})},{default:Object(j["withCtx"])((function(){return[Im]})),_:1})]})),_:1})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(b),Object(j["createVNode"])(s,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{disabled:!e.canCombine,onClick:t[8]||(t[8]=function(t){return e.combineElements()}),style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{style:{"margin-right":"3px"}}),wm]})),_:1},8,["disabled"]),Object(j["createVNode"])(r,{disabled:e.canCombine,onClick:t[9]||(t[9]=function(t){return e.uncombineElements()}),style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O,{style:{"margin-right":"3px"}}),Sm]})),_:1},8,["disabled"])]})),_:1})])}Object(j["popScopeId"])();var Tm=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=function(c){var a,r=Re(n.value),i=r.minX,u=r.maxX,d=r.minY,s=r.maxY,f=JSON.parse(JSON.stringify(o.value.elements)),p={},m=Object(w["a"])(n.value);try{var b=function(){var e=a.value;if(e.groupId&&!p[e.groupId]){var t=n.value.filter((function(t){return t.groupId===e.groupId}));p[e.groupId]=Re(t)}};for(m.s();!(a=m.n()).done;)b()}catch(tj){m.e(tj)}finally{m.f()}if(c===pe.LEFT)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.minX-i;e.left=e.left-o}else if("rotate"in e&&e.rotate){var c=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),l=c.offsetX;e.left=i-l}else e.left=i}));else if(c===pe.RIGHT)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.maxX-u;e.left=e.left-o}else{var c="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;if("rotate"in e&&e.rotate){var l=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=l.offsetX;e.left=u-c+a}else e.left=u-c}}));else if(c===pe.TOP)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.minY-d;e.top=e.top-o}else if("rotate"in e&&e.rotate){var c=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),l=c.offsetY;e.top=d-l}else e.top=d}));else if(c===pe.BOTTOM)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.maxY-s;e.top=e.top-o}else{var c="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;if("rotate"in e&&e.rotate){var l=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=l.offsetY;e.top=s-c+a}else e.top=s-c}}));else if(c===pe.HORIZONTAL){var v=(i+u)/2;f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=(n.maxX+n.minX)/2,c=o-v;e.left=e.left-c}else{var l="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;e.left=v-l/2}}))}else if(c===pe.VERTICAL){var O=(d+s)/2;f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=(n.maxY+n.minY)/2,c=o-O;e.top=e.top-c}else{var l="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;e.top=O-l/2}}))}e.commit(y.UPDATE_SLIDE,{elements:f}),l()};return{alignActiveElement:a}},Lm=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=Object(j["computed"])((function(){var e,t=0,o=[],c=Object(w["a"])(n.value);try{for(c.s();!(e=c.n()).done;){var l=e.value;l.groupId?o.includes(l.groupId)||(o.push(l.groupId),t+=1):t+=1}}catch(tj){c.e(tj)}finally{c.f()}return t})),r=function(){var c,a=Re(n.value),r=a.minX,i=a.maxX,u=JSON.parse(JSON.stringify(n.value)),d=JSON.parse(JSON.stringify(o.value.elements)),s=[],f=[],p=Object(w["a"])(u);try{var m=function(){var e=c.value;if(e.groupId){var t=f.find((function(t){return t.groupId===e.groupId}));t?f=f.map((function(t){return t.groupId===e.groupId?Object(I["a"])(Object(I["a"])({},t),{},{els:[].concat(Object(oe["a"])(t.els),[e])}):t})):f.push({groupId:e.groupId,els:[e]})}else{var n=Pe(e),o=n.minX,l=n.maxX;s.push({min:o,max:l,el:e})}};for(p.s();!(c=p.n()).done;)m()}catch(tj){p.e(tj)}finally{p.f()}var b,v=[],O=Object(w["a"])(f);try{for(O.s();!(b=O.n()).done;){var h=b.value,j=Re(h.els),g=j.minX,E=j.maxX;v.push({min:g,max:E,els:h.els})}}catch(tj){O.e(tj)}finally{O.f()}var C=[].concat(s,v);C.sort((function(e,t){return e.min-t.min}));var x,k=0,S=Object(w["a"])(C);try{for(S.s();!(x=S.n()).done;){var N=x.value,T=N.max-N.min;k+=T}}catch(tj){S.e(tj)}finally{S.f()}var L=(i-r-k)/(C.length-1),V=[],_=C[0],B={min:_.min,max:_.max};if("el"in _)V.push({pos:_.min,el:_.el});else{var D,M=Object(w["a"])(_.els);try{for(M.s();!(D=M.n()).done;){var A=D.value,z=Pe(A),P=z.minX;V.push({pos:P,el:A})}}catch(tj){M.e(tj)}finally{M.f()}}for(var R=1;R","l","o","g","l","g","l","n","⨂","⨁","⨄","⨃","⨅","⨆","√","∛","∜","∝","∞","∟","∠","∡","∢","∧","∨","∩","∪","∫","∬","∭","∮","∯","∰","∱","∲","∳","∴","∵","∼","∽","∾","∿","≃","≄","≅","≆","≇","≈","≊","≋","≌","≍","≎","≏","≐","≑","≒","≓","≔","≕","≤","≥","≦","≧","≨","≩","≪","≫","≺","≻","≼","≽","≾","≿","⊀","⊁","⊂","⊃","⊄","⊅","⊆","⊇","⊈","⊉","⊊","⊋","⊏","⊐","⊑","⊒","⊓","⊔","⊢","⊣","⊤","⊥","⊦","⊧","⊨","⊩","⊪","⊫","⊬","⊭","⊮","⊯","⊲","⊳","⊴","⊵","⋀","⋁","⋂","⋃","⋉","⋊","⋋","⋌","⟨","⟩","⟪","⟫","⟮","⟯","⧼","⧽","⦰"]},{key:"arrow",label:"箭头",children:["←","↑","→","↓","↔","↕","↖","↗","↘","↙","↚","↛","↜","↝","↞","↟","↠","↡","↢","↣","↤","↥","↦","↧","↨","↫","↬","↭","↮","↯","↰","↱","↲","↳","↴","↵","↶","↷","↸","↹","↺","↻","↼","↽","↾","↿","⇀","⇁","⇂","⇃","⇄","⇅","⇆","⇇","⇈","⇉","⇊","⇋","⇌","⇍","⇎","⇏","⇐","⇑","⇒","⇓","⇔","⇕","⇖","⇗","⇘","⇙","⇚","⇛","⇜","⇝","⇞","⇟","⇠","⇡","⇢","⇣","⇤","⇥","⇦","⇧","⇨","⇩","⇪","⇫","⇬","⇭","⇮","⇯","⇰","⇱","⇲","⇳","⇴","⇵","⇶","⇷","⇸","⇹","⇺","⇻","⇼","⇽","⇾","⇿"]},{key:"graph",label:"图形",children:["▢","▣","▤","▥","▦","▧","▨","▩","▭","▮","▯","▰","▱","▲","▷","▼","◁","◈","◉","◍","◐","◑","◒","◓","◔","◕","◧","◨","◩","◪","◫","◬","◭","◮"]}],Hm=Fm,Um=Object(j["defineComponent"])({name:"symbol-panel",setup:function(){var e=Object(j["ref"])(Hm[0].key),t=Object(j["computed"])((function(){var t=Hm.find((function(t){return t.key===e.value}));return(null===t||void 0===t?void 0:t.children)||[]})),n=function(e){Dc.emit(Zo.RICH_TEXT_COMMAND,{command:"insert",value:e})};return{symbolPoolList:Hm,symbolPool:t,selectedSymbolKey:e,selectSymbol:n}}});n("1d1a");Um.render=Rm,Um.__scopeId="data-v-48704658";var Gm=Um,qm=Object(j["defineComponent"])({name:"toolbar",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.toolbarState})),n=Object(j["computed"])((function(){return e.getters.handleElement})),o=Object(j["computed"])((function(){var e;return"text"===(null===(e=n.value)||void 0===e?void 0:e.type)?[{label:"样式",value:fu.EL_STYLE},{label:"符号",value:fu.SYMBOL},{label:"位置",value:fu.EL_POSITION},{label:"动画",value:fu.EL_ANIMATION}]:[{label:"样式",value:fu.EL_STYLE},{label:"位置",value:fu.EL_POSITION},{label:"动画",value:fu.EL_ANIMATION}]})),c=[{label:"设计",value:fu.SLIDE_DESIGN},{label:"切换",value:fu.SLIDE_ANIMATION},{label:"动画",value:fu.EL_ANIMATION}],l=[{label:"位置",value:fu.MULTI_POSITION},{label:"样式",value:fu.EL_STYLE}],a=function(t){e.commit(y.SET_TOOLBAR_STATE,t)},r=Object(j["computed"])((function(){return e.state.activeElementIdList})),i=Object(j["computed"])((function(){return r.value.length?r.value.length>1?l:o.value:c}));Object(j["watch"])(i,(function(){var n=i.value.map((function(e){return e.value}));n.includes(t.value)||e.commit(y.SET_TOOLBAR_STATE,n[0])}));var u=Object(j["computed"])((function(){var e,n=(e={},Object(q["a"])(e,fu.EL_STYLE,wf),Object(q["a"])(e,fu.EL_POSITION,Yf),Object(q["a"])(e,fu.EL_ANIMATION,gp),Object(q["a"])(e,fu.SLIDE_DESIGN,bm),Object(q["a"])(e,fu.SLIDE_ANIMATION,Cm),Object(q["a"])(e,fu.MULTI_POSITION,_m),Object(q["a"])(e,fu.SYMBOL,Gm),e);return n[t.value]||null}));return{toolbarState:t,currentTabs:i,setToolbarState:a,currentPanelComponent:u}}});n("2b96");qm.render=su,qm.__scopeId="data-v-5e3834d5";var Xm=qm;Object(j["pushScopeId"])("data-v-21516eb9");var Wm={class:"remark"},Ym=["value"];function Zm(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Wm,[Object(j["createElementVNode"])("div",{class:"resize-handler",onMousedown:t[0]||(t[0]=function(t){return e.resize(t)})},null,32),Object(j["createElementVNode"])("textarea",{value:e.remark,placeholder:"点击输入演讲者备注",onInput:t[1]||(t[1]=function(t){return e.handleInput(t)})},null,40,Ym)])}Object(j["popScopeId"])();var Jm=Object(j["defineComponent"])({name:"remark",emits:["update:height"],props:{height:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.currentSlide})),l=Object(j["computed"])((function(){var e;return(null===(e=c.value)||void 0===e?void 0:e.remark)||""})),a=function(e){var t=e.target.value;o.commit(y.UPDATE_SLIDE,{remark:t})},r=function(t){var o=!0,c=t.pageY,l=e.height;document.onmousemove=function(e){if(o){var t=e.pageY,a=t-c,r=-a+l;r<40&&(r=40),r>120&&(r=120),n("update:height",r)}},document.onmouseup=function(){o=!1,document.onmousemove=null,document.onmouseup=null}};return{remark:l,handleInput:a,resize:r}}});n("53f7");Jm.render=Zm,Jm.__scopeId="data-v-21516eb9";var Km=Jm,Qm=Object(j["defineComponent"])({name:"editor",components:{EditorHeader:Mn,Canvas:mr,CanvasTool:ri,Thumbnails:au,Toolbar:Xm,Remark:Km},setup:function(){var e=Object(j["ref"])(40);return ft(),pt(),{remarkHeight:e}}});n("1fecb");Qm.render=ye,Qm.__scopeId="data-v-55178b6a";var $m=Qm;Object(j["pushScopeId"])("data-v-42d1fb1f");var eb={class:"pptist-screen"},tb={class:"tools"};function nb(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ScreenSlide"),r=Object(j["resolveComponent"])("SlideThumbnails"),i=Object(j["resolveComponent"])("WritingBoardTool"),u=Object(j["resolveComponent"])("IconLeftTwo"),d=Object(j["resolveComponent"])("IconRightTwo"),s=Object(j["resolveComponent"])("IconWrite"),f=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",eb,[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:"slide-list",onMousewheel:t[0]||(t[0]=function(t){return e.mousewheelListener(t)}),onTouchstart:t[1]||(t[1]=function(t){return e.touchStartListener(t)}),onTouchend:t[2]||(t[2]=function(t){return e.touchEndListener(t)})},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["slide-item","turning-mode-".concat(t.turningMode||"slideY"),{current:n===e.slideIndex,before:ne.slideIndex,hide:(n===e.slideIndex-1||n===e.slideIndex+1)&&t.turningMode!==e.currentSlide.turningMode}]),key:t.id},[Object(j["createElementVNode"])("div",{class:"slide-content",style:Object(j["normalizeStyle"])({width:e.slideWidth+"px",height:e.slideHeight+"px"})},[Object(j["createVNode"])(a,{slide:t,scale:e.scale,animationIndex:e.animationIndex},null,8,["slide","scale","animationIndex"])],4)],2)})),128))],544),[[f,e.contextmenus]]),e.slideThumbnailModelVisible?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,turnSlideToIndex:e.turnSlideToIndex,onClose:t[3]||(t[3]=function(t){return e.slideThumbnailModelVisible=!1})},null,8,["turnSlideToIndex"])):Object(j["createCommentVNode"])("",!0),e.writingBoardToolVisible?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:1,onClose:t[4]||(t[4]=function(t){return e.writingBoardToolVisible=!1})})):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",tb,[Object(j["createVNode"])(u,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[5]||(t[5]=function(t){return e.execPrev()})}),Object(j["createVNode"])(d,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[6]||(t[6]=function(t){return e.execNext()})}),Object(j["createVNode"])(s,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[7]||(t[7]=function(t){return e.writingBoardToolVisible=!0})})]),e.showPageNumber?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:2,class:"page-number",onClick:t[8]||(t[8]=function(t){return e.slideThumbnailModelVisible=!0})},Object(j["toDisplayString"])(e.slideIndex+1)+" / "+Object(j["toDisplayString"])(e.slides.length),1)):Object(j["createCommentVNode"])("",!0)])}function ob(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ScreenElement");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"screen-slide",style:Object(j["normalizeStyle"])({width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")})},[Object(j["createElementVNode"])("div",{class:"background",style:Object(j["normalizeStyle"])(Object(I["a"])({},e.backgroundStyle))},null,4),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:t.id,elementInfo:t,elementIndex:n+1,animationIndex:e.animationIndex},null,8,["elementInfo","elementIndex","animationIndex"])})),128))],4)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-11126f7d");var cb=["id","title"];function lb(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["screen-element",{link:e.elementInfo.link}]),id:"screen-element-".concat(e.elementInfo.id),style:Object(j["normalizeStyle"])({zIndex:e.elementIndex,color:e.theme.fontColor,fontFamily:e.theme.fontName,visibility:e.needWaitAnimation?"hidden":"visible"}),title:e.elementInfo.link||"",onClick:t[0]||(t[0]=function(t){return e.openLink()})},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo},null,8,["elementInfo"]))],14,cb)}function ab(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline"),r=Object(j["resolveComponent"])("Chart");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"screen-element-chart",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,type:e.elementInfo.chartType,data:e.elementInfo.data,options:e.elementInfo.options,themeColor:e.elementInfo.themeColor,gridColor:e.elementInfo.gridColor},null,8,["width","height","type","data","options","themeColor","gridColor"])],4)],4)}Object(j["popScopeId"])();var rb=Object(j["defineComponent"])({name:"screen-element-chart",components:{ElementOutline:Xo,Chart:xl},props:{elementInfo:{type:Object,required:!0}}});n("1539");rb.render=ab,rb.__scopeId="data-v-1423f8c2";var ib=rb,ub=Object(j["defineComponent"])({name:"screen-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},animationIndex:{type:Number,default:-1}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,yi),Object(q["a"])(t,no.TEXT,ki),Object(q["a"])(t,no.SHAPE,Vi),Object(q["a"])(t,no.LINE,Mi),Object(q["a"])(t,no.CHART,ib),Object(q["a"])(t,no.TABLE,Zi),t);return n[e.elementInfo.type]||null})),n=se(),o=Object(j["computed"])((function(){return n.state.theme})),c=Object(j["computed"])((function(){return n.getters.currentSlide})),l=Object(j["computed"])((function(){var t=c.value.animations||[],n=t.findIndex((function(t){return t.elId===e.elementInfo.id}));return-1!==n&&n>=e.animationIndex})),a=function(){e.elementInfo.link&&window.open(e.elementInfo.link)};return{currentElementComponent:t,needWaitAnimation:l,theme:o,openLink:a}}});n("a247");ub.render=lb,ub.__scopeId="data-v-11126f7d";var db=ub,sb=Object(j["defineComponent"])({name:"screen-slide",components:{ScreenElement:db},props:{slide:{type:Object,required:!0},scale:{type:Number,required:!0},animationIndex:{type:Number,default:-1}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=oa(o),l=c.backgroundStyle;return{backgroundStyle:l,VIEWPORT_SIZE:Je,viewportRatio:n}}});n("7599");sb.render=ob,sb.__scopeId="data-v-a094625a";var fb=sb;Object(j["pushScopeId"])("data-v-26398174");var pb={class:"slide-thumbnails"},mb={class:"return-button"},bb={class:"slide-thumbnails-content"},vb=["onClick"];function Ob(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconArrowCircleLeft"),r=Object(j["resolveComponent"])("ThumbnailSlide");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",pb,[Object(j["createElementVNode"])("div",mb,[Object(j["createVNode"])(a,{class:"icon",onClick:t[0]||(t[0]=function(t){return e.close()})})]),Object(j["createElementVNode"])("div",bb,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["thumbnail",{active:n===e.slideIndex}]),key:t.id,onClick:function(t){return e.turnSlideToIndex(n)}},[Object(j["createVNode"])(r,{slide:t,size:150},null,8,["slide"])],10,vb)})),128))])])}Object(j["popScopeId"])();var hb=Object(j["defineComponent"])({name:"slide-thumbnails",emits:["close"],components:{ThumbnailSlide:$i},props:{turnSlideToIndex:{type:Function}},setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.state.slides})),l=Object(j["computed"])((function(){return o.state.slideIndex})),a=function(){return n("close")};return{slides:c,slideIndex:l,close:a}}});n("2ab2");hb.render=Ob,hb.__scopeId="data-v-26398174";var jb=hb;Object(j["pushScopeId"])("data-v-7a2e5324");var gb={class:"writing-board-tool"},yb={class:"tools"},Eb={class:"colors"},Cb=["onClick"];function xb(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("WritingBoard"),r=Object(j["resolveComponent"])("IconWrite"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconErase"),d=Object(j["resolveComponent"])("IconClear"),s=Object(j["resolveComponent"])("IconFill"),f=Object(j["resolveComponent"])("IconClose");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",gb,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Teleport"],{to:"body"},[Object(j["createVNode"])(a,{ref:"writingBoardRef",color:e.writingBoardColor,blackboard:e.blackboard,model:e.writingBoardModel},null,8,["color","blackboard","model"])])),Object(j["createElementVNode"])("div",yb,[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"画笔"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["btn",{active:"pen"===e.writingBoardModel}]),onClick:t[0]||(t[0]=function(t){return e.changePen()})},[Object(j["createVNode"])(r,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"橡皮擦"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["btn",{active:"eraser"===e.writingBoardModel}]),onClick:t[1]||(t[1]=function(t){return e.changeEraser()})},[Object(j["createVNode"])(u,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"清除墨迹"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[2]||(t[2]=function(t){return e.clearCanvas()})},[Object(j["createVNode"])(d,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"黑板"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["btn",{active:e.blackboard}]),onClick:t[3]||(t[3]=function(t){return e.blackboard=!e.blackboard})},[Object(j["createVNode"])(s,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createElementVNode"])("div",Eb,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.writingBoardColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["color",{active:t===e.writingBoardColor}]),key:t,style:Object(j["normalizeStyle"])({backgroundColor:t}),onClick:function(n){return e.changeColor(t)}},null,14,Cb)})),128))]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"关闭画笔"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[4]||(t[4]=function(t){return e.closeWritingBoard()})},[Object(j["createVNode"])(f,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"])])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-7ff9fa00");var kb={class:"writing-board",ref:"writingBoardRef"},Ib={key:0,class:"blackboard"};function wb(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconWrite");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",kb,[e.blackboard?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ib)):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("canvas",{class:"canvas",ref:"canvasRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMousedown(t)}),onMousemove:t[1]||(t[1]=function(t){return e.handleMousemove(t)}),onMouseup:t[2]||(t[2]=function(t){return e.handleMouseup()}),onTouchstart:t[3]||(t[3]=function(t){return e.handleMousedown(t)}),onTouchmove:t[4]||(t[4]=function(t){return e.handleMousemove(t)}),onTouchend:t[5]||(t[5]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseleave:t[6]||(t[6]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseenter:t[7]||(t[7]=function(t){return e.mouseInCanvas=!0})},null,544),e.mouseInCanvas&&"pen"===e.model?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"pen",style:Object(j["normalizeStyle"])({left:e.mouse.x-e.penSize/2+"px",top:e.mouse.y-36+e.penSize/2+"px",color:e.color})},[Object(j["createVNode"])(a,{class:"icon",size:"36"})],4)):Object(j["createCommentVNode"])("",!0),e.mouseInCanvas&&"eraser"===e.model?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:2,class:"eraser",style:Object(j["normalizeStyle"])({left:e.mouse.x-e.rubberSize/2+"px",top:e.mouse.y-e.rubberSize/2+"px",width:e.rubberSize+"px",height:e.rubberSize+"px"})},null,4)):Object(j["createCommentVNode"])("",!0)],512)}Object(j["popScopeId"])();var Sb=6,Nb=80,Tb=Object(j["defineComponent"])({name:"writing-board",props:{color:{type:String,default:"#ffcc00"},model:{type:String,default:"pen"},blackboard:{type:Boolean,default:!1}},setup:function(e){var t=null,n=Object(j["ref"])(),o=Object(j["ref"])(),c={x:0,y:0},l=!1,a=0,r=-1,i=Object(j["reactive"])({x:0,y:0}),u=function(e,t){i.x=e,i.y=t},d=Object(j["ref"])(!1),s=function(){o.value&&n.value&&(t=o.value.getContext("2d"),t&&(o.value.width=n.value.clientWidth,o.value.height=n.value.clientHeight,o.value.style.width=n.value.clientWidth+"px",o.value.style.height=n.value.clientHeight+"px",t.lineCap="round",t.lineJoin="round"))};Object(j["onMounted"])(s);var f=function(n,o,l){if(t){var a=c.x,r=c.y;t.lineWidth=l,t.strokeStyle=e.color,t.beginPath(),t.moveTo(a,r),t.lineTo(n,o),t.stroke(),t.closePath()}},p=function(e,n){var l,a,r,i;if(t&&o.value){var u=c.x,d=c.y,s=Nb/2,f=s*Math.sin(Math.atan((n-d)/(e-u))),p=s*Math.cos(Math.atan((n-d)/(e-u))),m=[u+f,d-p],b=[u-f,d+p],v=[e+f,n-p],O=[e-f,n+p];t.save(),t.beginPath(),t.arc(e,n,s,0,2*Math.PI),t.clip(),t.clearRect(0,0,o.value.width,o.value.height),t.restore(),t.save(),t.beginPath(),(l=t).moveTo.apply(l,m),(a=t).lineTo.apply(a,v),(r=t).lineTo.apply(r,O),(i=t).lineTo.apply(i,b),t.closePath(),t.clip(),t.clearRect(0,0,o.value.width,o.value.height),t.restore()}},m=function(e,t){var n=c.x,o=c.y;return Math.sqrt((e-n)*(e-n)+(t-o)*(t-o))},b=function(e,t){var n,o=10,c=.1,l=Sb,a=3,i=e/t;return n=i<=c?l:i>=o?a:l-i/o*l,-1===r?n:1*n/3+2*r/3},v=function(t,n){var o=(new Date).getTime();if("pen"===e.model){var l=m(t,n),i=o-a,u=b(l,i);f(t,n,u),r=u}else p(t,n);c={x:t,y:n},a=(new Date).getTime()},O=function(e){var t=e instanceof MouseEvent?e.offsetX:e.changedTouches[0].pageX,n=e instanceof MouseEvent?e.offsetY:e.changedTouches[0].pageY;l=!0,c={x:t,y:n},a=(new Date).getTime(),e instanceof TouchEvent&&(u(t,n),d.value=!0)},h=function(e){var t=e instanceof MouseEvent?e.offsetX:e.changedTouches[0].pageX,n=e instanceof MouseEvent?e.offsetY:e.changedTouches[0].pageY;u(t,n),l&&v(t,n)},g=function(){l&&(l=!1)},y=function(){t&&o.value&&t.clearRect(0,0,o.value.width,o.value.height)};return{mouse:i,mouseInCanvas:d,penSize:Sb,rubberSize:Nb,writingBoardRef:n,canvasRef:o,handleMousedown:O,handleMousemove:h,handleMouseup:g,clearCanvas:y}}});n("097f");Tb.render=wb,Tb.__scopeId="data-v-7ff9fa00";var Lb=Tb,Vb=["#000000","#ffffff","#1e497b","#4e81bb","#e2534d","#9aba60","#8165a0","#47acc5","#f9974c"],_b=Object(j["defineComponent"])({name:"writing-board-tool",emits:["close"],components:{WritingBoard:Lb},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(),c=Object(j["ref"])("#e2534d"),l=Object(j["ref"])("pen"),a=Object(j["ref"])(!1),r=function(){l.value="pen"},i=function(){l.value="eraser"},u=function(){o.value.clearCanvas()},d=function(e){"pen"!==l.value&&(l.value="pen"),c.value=e},s=function(){n("close")};return{writingBoardRef:o,writingBoardColors:Vb,writingBoardColor:c,writingBoardModel:l,blackboard:a,changePen:r,changeEraser:i,clearCanvas:u,changeColor:d,closeWritingBoard:s}}});n("4c08");_b.render=xb,_b.__scopeId="data-v-7a2e5324";var Bb=_b,Db=Object(j["defineComponent"])({name:"screen",components:{ScreenSlide:fb,SlideThumbnails:jb,WritingBoardTool:Bb},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.state.slideIndex})),o=Object(j["computed"])((function(){return e.state.viewportRatio})),c=Object(j["computed"])((function(){return e.getters.currentSlide})),l=Object(j["ref"])(0),a=Object(j["ref"])(0),r=Object(j["computed"])((function(){return l.value/Je})),i=Object(j["ref"])(!1),u=Object(j["ref"])(!1),d=Object(j["ref"])(!1),s=function(){var e,t,n=document.body.clientWidth,c=document.body.clientHeight;c/n===o.value?(e=n,t=c):c/n>o.value?(e=n,t=n*o.value):(e=c/o.value,t=c),l.value=e,a.value=t},f=dt(),p=f.exitScreening,m=function(){s(),ut()||p()};Object(j["onMounted"])((function(){s(),window.addEventListener("resize",m)})),Object(j["onUnmounted"])((function(){window.removeEventListener("resize",m)}));var b=Object(j["computed"])((function(){return c.value.animations||[]})),v=Object(j["ref"])(0),O=function(){var e="animate__",t=b.value[v.value];v.value+=1;var n=document.querySelector("#screen-element-".concat(t.elId," [class^=base-element-]"));if(n){var o="".concat(e).concat(t.type);document.documentElement.style.setProperty("--animate-duration","".concat(t.duration,"ms")),n.classList.add("".concat(e,"animated"),o);var c=function(){document.documentElement.style.removeProperty("--animate-duration"),n.classList.remove("".concat(e,"animated"),o)};n.addEventListener("animationend",c,{once:!0})}},h=Object(j["ref"])(0),g=function(){h.value&&(clearInterval(h.value),h.value=0)};Object(j["onUnmounted"])(g);var E=Object(ce["throttle"])((function(e){Ce["a"].success(e)}),1e3,{leading:!0,trailing:!1}),C=function(){if(b.value.length&&v.value>0)v.value-=1;else if(n.value>0){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1);var t=b.value?b.value.length:0;v.value=t}else E("已经是第一页了")},x=function(){b.value.length&&v.value0&&x()}),500,{leading:!0,trailing:!1}),w=Object(j["ref"])(null),S=function(e){w.value={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY}},N=function(e){if(w.value){var t=Math.abs(w.value.x-e.changedTouches[0].pageX),n=e.changedTouches[0].pageY-w.value.y;Math.abs(n)>t&&Math.abs(n)>50&&(w.value=null,n>0?C():x())}},T=function(e){var t=e.key.toUpperCase();t===Oe.UP||t===Oe.LEFT?C():t!==Oe.DOWN&&t!==Oe.RIGHT&&t!==Oe.SPACE&&t!==Oe.ENTER||x()};Object(j["onMounted"])((function(){document.addEventListener("keydown",T)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",T)}));var L=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1),v.value=0},V=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value+1),v.value=0},_=function(t){u.value=!1,e.commit(y.UPDATE_SLIDE_INDEX,t),v.value=0},B=function(){return[{text:"上一页",subText:"↑ ←",disable:n.value<=0,handler:function(){return L()}},{text:"下一页",subText:"↓ →",disable:n.value>=t.value.length-1,handler:function(){return V()}},{text:"第一页",disable:0===n.value,handler:function(){return _(0)}},{text:"最后一页",disable:n.value===t.value.length-1,handler:function(){return _(t.value.length-1)}},{divider:!0},{text:"显示页码",subText:i.value?"√":"",handler:function(){return i.value=!i.value}},{text:"查看所有幻灯片",handler:function(){return u.value=!0}},{text:"画笔",handler:function(){return d.value=!0}},{divider:!0},{text:h.value?"取消自动放映":"自动放映",handler:h.value?g:k},{text:"结束放映",subText:"ESC",handler:p}]};return Object(j["provide"])("slideScale",r),{slides:t,slideIndex:n,currentSlide:c,slideWidth:l,slideHeight:a,scale:r,mousewheelListener:I,touchStartListener:S,touchEndListener:N,animationIndex:v,contextmenus:B,execPrev:C,execNext:x,slideThumbnailModelVisible:u,turnSlideToIndex:_,writingBoardToolVisible:d,showPageNumber:i}}});n("b6a8");Db.render=nb,Db.__scopeId="data-v-42d1fb1f";var Mb=Db,Ab=Object(j["defineComponent"])({name:"app",components:{Editor:$m,Screen:Mb},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.screening}));return window.onbeforeunload=function(){return!1},Object(j["onMounted"])((function(){e.commit(y.SET_AVAILABLE_FONTS),e.dispatch(E.INIT_SNAPSHOT_DATABASE)})),{screening:t}}});n("0679");Ab.render=g;var zb=Ab,Pb=(n("793f"),n("41ed"),n("77ed"),n("5952"),n("c860"),n("ae3f"),n("8c56"),n("9312")),Rb=n("84e7b"),Fb=n("1e27"),Hb=n("8845"),Ub=n("a3ef"),Gb=n("8331"),qb=n("4040"),Xb=n("f745"),Wb=n("2e2d"),Yb=n("6010"),Zb=n("1fcb"),Jb=n("500e"),Kb=n("0996"),Qb=n("1646"),$b=n("fbe7"),ev=n("b8af"),tv=n("bf2c"),nv=n("fd52"),ov=n("f259"),cv=n("1b1c"),lv=n("bde2"),av=n("23fa"),rv=n("5a28"),iv=n("c53e"),uv=n("8377"),dv=n("246f"),sv=n("33a2"),fv=n("fdbcb"),pv=n("ccc7"),mv=n("e3b9"),bv=n("3a3e"),vv=n("2e67"),Ov=n("e792"),hv=n("e483"),jv=n("eac5"),gv=n("694b"),yv=n("e9ec"),Ev=n("ea01"),Cv=n("74f3"),xv=n("4bad"),kv=n("e7f4"),Iv=n("eb50"),wv=n("0be2"),Sv=n("a90c"),Nv=n("c90a"),Tv=n("d41d"),Lv=n("2c06"),Vv=n("a5dc"),_v=n("8678"),Bv=n("d7fb"),Dv=n("ce42"),Mv=n("7abc"),Av=n("5b20"),zv=n("69de"),Pv=n("d0c6"),Rv=n("dcc2"),Fv=n("f1d2"),Hv=n("d16b"),Uv=n("a5f1"),Gv=n("df0d"),qv=n("70f2"),Xv=n("b7c8"),Wv=n("f99d"),Yv=n("40bb"),Zv=n("ae33"),Jv=n("8c1a"),Kv=n("b7b3"),Qv=n("96be"),$v=n("5a69"),eO=n("f9e5"),tO=n("bbce"),nO=n("77ad"),oO=n("46cd"),cO=n("3ee3"),lO=n("dde4"),aO=n("cead"),rO=n("fa00"),iO=n("e970"),uO=n("f3c2"),dO=n("7312"),sO=n("5294b"),fO=n("9fbc"),pO={install:function(e){e.component("IconFontSize",fO["a"]),e.component("IconPicture",sO["a"]),e.component("IconGraphicDesign",dO["a"]),e.component("IconConnection",uO["a"]),e.component("IconChartProportion",iO["a"]),e.component("IconInsertTable",rO["a"]),e.component("IconLock",aO["a"]),e.component("IconUnlock",lO["a"]),e.component("IconFullScreen",cO["a"]),e.component("IconBack",oO["a"]),e.component("IconNext",nO["a"]),e.component("IconAlignTop",tO["a"]),e.component("IconAlignLeft",eO["a"]),e.component("IconAlignRight",$v["a"]),e.component("IconAlignBottom",Qv["a"]),e.component("IconAlignVertically",Kv["a"]),e.component("IconAlignHorizontally",Jv["a"]),e.component("IconBringToFront",Zv["a"]),e.component("IconSentToBack",Yv["a"]),e.component("IconBringToFrontOne",Wv["a"]),e.component("IconSendToBack",Xv["a"]),e.component("IconGroup",qv["a"]),e.component("IconUngroup",Gv["a"]),e.component("IconFill",Uv["a"]),e.component("IconBackgroundColor",Hv["a"]),e.component("IconPlatte",Fv["a"]),e.component("IconTailoring",Rv["a"]),e.component("IconColorFilter",Pv["a"]),e.component("IconFlipVertically",zv["a"]),e.component("IconFlipHorizontally",Av["a"]),e.component("IconText",Mv["a"]),e.component("IconAddText",Dv["a"]),e.component("IconAlignTextLeft",Bv["a"]),e.component("IconAlignTextRight",_v["a"]),e.component("IconAlignTextCenter",Vv["a"]),e.component("IconRowHeight",Lv["a"]),e.component("IconFullwidth",Tv["a"]),e.component("IconCode",Nv["a"]),e.component("IconTextBold",Sv["a"]),e.component("IconTextItalic",wv["a"]),e.component("IconTextUnderline",Iv["a"]),e.component("IconStrikethrough",kv["a"]),e.component("IconQuote",xv["a"]),e.component("IconList",Cv["a"]),e.component("IconOrderedList",Ev["a"]),e.component("IconUpOne",yv["a"]),e.component("IconDownOne",gv["a"]),e.component("IconFormat",jv["a"]),e.component("IconAlignTextTopOne",hv["a"]),e.component("IconAlignTextBottomOne",Ov["a"]),e.component("IconAlignTextMiddleOne",vv["a"]),e.component("IconDown",bv["a"]),e.component("IconLeftTwo",mv["a"]),e.component("IconRightTwo",pv["a"]),e.component("IconPlus",fv["a"]),e.component("IconMinus",sv["a"]),e.component("IconClose",dv["a"]),e.component("IconCloseSmall",uv["a"]),e.component("IconChartHistogram",iv["a"]),e.component("IconChartHistogramOne",rv["a"]),e.component("IconChartLine",av["a"]),e.component("IconChartLineArea",lv["a"]),e.component("IconChartScatter",cv["a"]),e.component("IconChartPie",ov["a"]),e.component("IconChartRing",nv["a"]),e.component("IconPlayOne",tv["a"]),e.component("IconPpt",ev["a"]),e.component("IconHelpcenter",$b["a"]),e.component("IconGithub",Qb["a"]),e.component("IconWrite",Kb["a"]),e.component("IconErase",Jb["a"]),e.component("IconEffects",Zb["a"]),e.component("IconRotate",Yb["a"]),e.component("IconEdit",Wb["a"]),e.component("IconUndo",Xb["a"]),e.component("IconTransform",qb["a"]),e.component("IconClick",Gb["a"]),e.component("IconTheme",Ub["a"]),e.component("IconArrowCircleLeft",Hb["a"]),e.component("IconLogout",Fb["a"]),e.component("IconClear",Rb["a"]),e.component("IconFolderClose",Pb["a"])}};Object(j["pushScopeId"])("data-v-d6089858");var mO=["accept"];function bO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"file-input",onClick:t[1]||(t[1]=function(t){return e.handleClick()})},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0),Object(j["createElementVNode"])("input",{class:"input",type:"file",name:"upload",ref:"inputRef",accept:e.accept,onChange:t[0]||(t[0]=function(t){return e.handleChange(t)})},null,40,mO)])}Object(j["popScopeId"])();var vO=Object(j["defineComponent"])({name:"file-input",emits:["change"],props:{accept:{type:String,default:"image/*"}},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(),c=function(){o.value&&(o.value.value="",o.value.click())},l=function(e){var t=e.target.files;t&&n("change",t)};return{handleClick:c,handleChange:l,inputRef:o}}});n("f349");vO.render=bO,vO.__scopeId="data-v-d6089858";var OO=vO,hO={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",version:"1.1"};function jO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("svg",hO,[Object(j["renderSlot"])(e.$slots,"default")])}var gO={name:"svg-wrapper"};gO.render=jO;var yO=gO;function EO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("button",{class:Object(j["normalizeClass"])(["checkbox-button",{checked:n.checked}])},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)],2)}var CO={name:"checkbox-button",props:{checked:{type:Boolean,default:!1}}};n("782e");CO.render=EO,CO.__scopeId="data-v-7cae2b90";var xO=CO;Object(j["pushScopeId"])("data-v-7dafd0a9");var kO={class:"checkbox-button-group"};function IO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",kO,[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)])}Object(j["popScopeId"])();var wO={name:"checkbox-button-group"};n("69d5");wO.render=IO,wO.__scopeId="data-v-7dafd0a9";var SO=wO;Object(j["pushScopeId"])("data-v-210672ee");var NO={class:"color-picker"},TO={class:"picker-saturation-wrap"},LO={class:"picker-controls"},VO={class:"picker-color-wrap"},_O={class:"picker-sliders"},BO={class:"picker-hue-wrap"},DO={class:"picker-alpha-wrap"},MO={class:"picker-field"},AO={class:"picker-presets"},zO=["onClick"],PO={class:"picker-gradient-presets"},RO=["onClick"],FO={class:"picker-presets"},HO=["onClick"],UO={key:0,class:"recent-colors-title"},GO={class:"recent-colors"},qO=["onClick"];function XO(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Saturation"),r=Object(j["resolveComponent"])("Checkboard"),i=Object(j["resolveComponent"])("Hue"),u=Object(j["resolveComponent"])("Alpha"),d=Object(j["resolveComponent"])("EditableInput");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",NO,[Object(j["createElementVNode"])("div",TO,[Object(j["createVNode"])(a,{value:e.color,hue:e.hue,onColorChange:t[0]||(t[0]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createElementVNode"])("div",LO,[Object(j["createElementVNode"])("div",VO,[Object(j["createElementVNode"])("div",{class:"picker-current-color",style:Object(j["normalizeStyle"])({background:e.currentColor})},null,4),Object(j["createVNode"])(r)]),Object(j["createElementVNode"])("div",_O,[Object(j["createElementVNode"])("div",BO,[Object(j["createVNode"])(i,{value:e.color,hue:e.hue,onColorChange:t[1]||(t[1]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createElementVNode"])("div",DO,[Object(j["createVNode"])(u,{value:e.color,onColorChange:t[2]||(t[2]=function(t){return e.changeColor(t)})},null,8,["value"])])])]),Object(j["createElementVNode"])("div",MO,[Object(j["createVNode"])(d,{value:e.color,onColorChange:t[3]||(t[3]=function(t){return e.changeColor(t)})},null,8,["value"])]),Object(j["createElementVNode"])("div",AO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themeColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"picker-presets-color",key:t,style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,zO)})),128))]),Object(j["createElementVNode"])("div",PO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.presetColors,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"picker-gradient-col",key:n},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"picker-gradient-color",key:t,style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,RO)})),128))])})),128))]),Object(j["createElementVNode"])("div",FO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.standardColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:t,class:"picker-presets-color",style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,HO)})),128))]),e.recentColors.length?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",UO,"最近使用:")):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",GO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.recentColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:t,class:"picker-presets-color",style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,qO)})),128))])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-6f2cb744");var WO={class:"alpha"},YO={class:"alpha-checkboard-wrap"},ZO=Object(j["createElementVNode"])("div",{class:"alpha-picker"},null,-1),JO=[ZO];function KO(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Checkboard");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",WO,[Object(j["createElementVNode"])("div",YO,[Object(j["createVNode"])(a)]),Object(j["createElementVNode"])("div",{class:"alpha-gradient",style:Object(j["normalizeStyle"])({background:e.gradientColor})},null,4),Object(j["createElementVNode"])("div",{class:"alpha-container",ref:"alphaRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[Object(j["createElementVNode"])("div",{class:"alpha-pointer",style:Object(j["normalizeStyle"])({left:100*e.color.a+"%"})},JO,4)],544)])}function QO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"checkerboard",style:Object(j["normalizeStyle"])(e.bgStyle)},null,4)}Object(j["popScopeId"])();var $O={},eh=function(e,t,n){var o=document.createElement("canvas");o.width=o.height=2*n;var c=o.getContext("2d");return c?(c.fillStyle=e,c.fillRect(0,0,o.width,o.height),c.fillStyle=t,c.fillRect(0,0,n,n),c.translate(n,n),c.fillRect(0,0,n,n),o.toDataURL()):null},th=function(e,t,n){var o=e+","+t+","+n;if($O[o])return $O[o];var c=eh(e,t,n);return $O[o]=c,c},nh=Object(j["defineComponent"])({name:"checkboard",emits:["colorChange"],props:{size:{type:Number,default:8},white:{type:String,default:"#fff"},grey:{type:String,default:"#e6e6e6"}},setup:function(e){var t=Object(j["computed"])((function(){var t=th(e.white,e.grey,e.size);return{backgroundImage:"url(".concat(t,")")}}));return{bgStyle:t}}});n("7e17");nh.render=QO,nh.__scopeId="data-v-0a544b87";var oh=nh,ch=Object(j["defineComponent"])({name:"alpha",components:{Checkboard:oh},emits:["colorChange"],props:{value:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["computed"])((function(){return e.value})),c=Object(j["computed"])((function(){var e=[o.value.r,o.value.g,o.value.b].join(",");return"linear-gradient(to right, rgba(".concat(e,", 0) 0%, rgba(").concat(e,", 1) 100%)")})),l=Object(j["ref"])(),a=function(e){if(e.preventDefault(),l.value){var t,c=l.value.clientWidth,a=l.value.getBoundingClientRect().left+window.pageXOffset,r=e.pageX-a;t=r<0?0:r>c?1:Math.round(100*r/c)/100,o.value.a!==t&&n("colorChange",{r:o.value.r,g:o.value.g,b:o.value.b,a:t})}},r=function e(){window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",e)},i=function(e){a(e),window.addEventListener("mousemove",a),window.addEventListener("mouseup",r)};return Object(j["onUnmounted"])(r),{alphaRef:l,gradientColor:c,handleMouseDown:i,color:o}}});n("f418");ch.render=KO,ch.__scopeId="data-v-6f2cb744";var lh=ch;Object(j["pushScopeId"])("data-v-1766620e");var ah={class:"hue"},rh=Object(j["createElementVNode"])("div",{class:"hue-picker"},null,-1),ih=[rh];function uh(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",ah,[Object(j["createElementVNode"])("div",{class:"hue-container",ref:"hueRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[Object(j["createElementVNode"])("div",{class:"hue-pointer",style:Object(j["normalizeStyle"])({left:e.pointerLeft})},ih,4)],544)])}Object(j["popScopeId"])();var dh=Object(j["defineComponent"])({name:"hue",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(0),c=Object(j["ref"])(""),l=Object(j["computed"])((function(){var t=H()(e.value).toHsl();return-1!==e.hue&&(t.h=e.hue),t})),a=Object(j["computed"])((function(){return 0===l.value.h&&"right"===c.value?"100%":100*l.value.h/360+"%"}));Object(j["watch"])((function(){return e.value}),(function(){var t=H()(e.value).toHsl(),n=0===t.s?e.hue:t.h;0!==n&&n-o.value>0&&(c.value="right"),0!==n&&n-o.value<0&&(c.value="left"),o.value=n}));var r=Object(j["ref"])(),i=function(t){if(t.preventDefault(),r.value){var o,c,a=r.value.clientWidth,i=r.value.getBoundingClientRect().left+window.pageXOffset,u=t.pageX-i;u<0?o=0:u>a?o=360:(c=100*u/a,o=360*c/100),-1!==e.hue&&l.value.h===o||n("colorChange",{h:o,l:l.value.l,s:l.value.s,a:l.value.a})}},u=function e(){window.removeEventListener("mousemove",i),window.removeEventListener("mouseup",e)},d=function(e){i(e),window.addEventListener("mousemove",i),window.addEventListener("mouseup",u)};return Object(j["onUnmounted"])(u),{hueRef:r,handleMouseDown:d,pointerLeft:a}}});n("468f");dh.render=uh,dh.__scopeId="data-v-1766620e";var sh=dh;Object(j["pushScopeId"])("data-v-8982eb4a");var fh=Object(j["createElementVNode"])("div",{class:"saturation-white"},null,-1),ph=Object(j["createElementVNode"])("div",{class:"saturation-black"},null,-1),mh=Object(j["createElementVNode"])("div",{class:"saturation-circle"},null,-1),bh=[mh];function vh(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"saturation",ref:"saturationRef",style:Object(j["normalizeStyle"])({background:e.bgColor}),onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[fh,ph,Object(j["createElementVNode"])("div",{class:"saturation-pointer",style:Object(j["normalizeStyle"])({top:e.pointerTop,left:e.pointerLeft})},bh,4)],36)}Object(j["popScopeId"])();var Oh=Object(j["defineComponent"])({name:"saturation",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["computed"])((function(){var t=H()(e.value).toHsv();return-1!==e.hue&&(t.h=e.hue),t})),c=Object(j["computed"])((function(){return"hsl(".concat(o.value.h,", 100%, 50%)")})),l=Object(j["computed"])((function(){return-100*o.value.v+1+100+"%"})),a=Object(j["computed"])((function(){return 100*o.value.s+"%"})),r=Object(ce["throttle"])((function(e){n("colorChange",e)}),20,{leading:!0,trailing:!1}),i=Object(j["ref"])(),u=function(e){if(e.preventDefault(),i.value){var t=i.value.clientWidth,n=i.value.clientHeight,c=i.value.getBoundingClientRect().left+window.pageXOffset,l=i.value.getBoundingClientRect().top+window.pageYOffset,a=Object(ce["clamp"])(e.pageX-c,0,t),u=Object(ce["clamp"])(e.pageY-l,0,n),d=a/t,s=Object(ce["clamp"])(-u/n+1,0,1);r({h:o.value.h,s:d,v:s,a:o.value.a})}},d=function e(){window.removeEventListener("mousemove",u),window.removeEventListener("mouseup",e)},s=function(e){u(e),window.addEventListener("mousemove",u),window.addEventListener("mouseup",d)};return Object(j["onUnmounted"])(d),{saturationRef:i,bgColor:c,handleMouseDown:s,pointerTop:l,pointerLeft:a}}});n("a46e");Oh.render=vh,Oh.__scopeId="data-v-8982eb4a";var hh=Oh;Object(j["pushScopeId"])("data-v-00ea8dfc");var jh={class:"editable-input"},gh=["value"];function yh(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",jh,[Object(j["createElementVNode"])("input",{class:"input-content",value:e.val,onInput:t[0]||(t[0]=function(t){return e.handleInput(t)})},null,40,gh)])}Object(j["popScopeId"])();var Eh=Object(j["defineComponent"])({name:"editable-input",emits:["colorChange"],props:{value:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["computed"])((function(){var t="";return t=e.value.a<1?H()(e.value).toHex8String().toUpperCase():H()(e.value).toHexString().toUpperCase(),t.replace("#","")})),c=function(e){var t=e.target.value;t.length>=6&&n("colorChange",H()(t).toRgb())};return{val:o,handleInput:c}}});n("1a34");Eh.render=yh,Eh.__scopeId="data-v-00ea8dfc";var Ch=Eh,xh="RECENT_COLORS",kh=[["#7f7f7f","#f2f2f2"],["#0d0d0d","#808080"],["#1c1a10","#ddd8c3"],["#0e243d","#c6d9f0"],["#233f5e","#dae5f0"],["#632623","#f2dbdb"],["#4d602c","#eaf1de"],["#3f3150","#e6e0ec"],["#1e5867","#d9eef3"],["#99490f","#fee9da"]],Ih=function(e,t,n){for(var o=H()(e).toRgb(),c=H()(t).toRgb(),l=(c.r-o.r)/n,a=(c.g-o.g)/n,r=(c.b-o.b)/n,i=[],u=0;ut&&(c.value=c.value.slice(0,t))}}),300,{trailing:!0});Object(j["onMounted"])((function(){var e=localStorage.getItem(xh);e&&(c.value=JSON.parse(e))})),Object(j["watch"])(c,(function(){var e=JSON.stringify(c.value);localStorage.setItem(xh,e)}));var f=function(e){"h"in e?(o.value=e.h,l.value=H()(e).toRgb()):(o.value=H()(e).toHsl().h,l.value=e),s()};return{themeColors:a,standardColors:r,presetColors:i,color:l,hue:o,currentColor:u,changeColor:f,selectPresetColor:d,recentColors:c}}});n("6c3c");Sh.render=XO,Sh.__scopeId="data-v-210672ee";var Nh=Sh;Object(j["pushScopeId"])("data-v-6275c730");var Th={key:0,class:"fullscreen-spin"};function Lh(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Spin");return n.loading?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Th,[Object(j["createVNode"])(a,{tip:n.tip,size:"large"},null,8,["tip"])])):Object(j["createCommentVNode"])("",!0)}Object(j["popScopeId"])();var Vh={name:"fullscreen-spin",props:{loading:{type:Boolean,default:!1},tip:{type:String,default:""}}};n("3f8e");Vh.render=Lh,Vh.__scopeId="data-v-6275c730";var _h=Vh,Bh={install:function(e){e.component("FileInput",OO),e.component("SvgWrapper",yO),e.component("CheckboxButton",xO),e.component("CheckboxButtonGroup",SO),e.component("ColorPicker",Nh),e.component("FullscreenSpin",_h)}};function Dh(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("MenuContent");return Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,[Object(j["createElementVNode"])("div",{class:"mask",onContextmenu:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.removeContextmenu()}),["prevent"])),onMousedown:t[1]||(t[1]=function(t){return e.removeContextmenu()})},null,32),Object(j["createElementVNode"])("div",{class:"contextmenu",style:Object(j["normalizeStyle"])({left:e.style.left+"px",top:e.style.top+"px"}),onContextmenu:t[2]||(t[2]=Object(j["withModifiers"])((function(){}),["prevent"]))},[Object(j["createVNode"])(a,{menus:e.menus,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])],36)],64)}Object(j["pushScopeId"])("data-v-eb1555e8");var Mh={class:"menu-content"},Ah=["onClick"],zh={class:"text"},Ph={key:0,class:"sub-text"};function Rh(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("menu-content",!0);return Object(j["openBlock"])(),Object(j["createElementBlock"])("ul",Mh,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.menus,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:t.text||n},[t.hide?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])("li",{key:0,class:Object(j["normalizeClass"])(["menu-item",{divider:t.divider,disable:t.disable}]),onClick:Object(j["withModifiers"])((function(n){return e.handleClickMenuItem(t)}),["stop"])},[t.divider?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:Object(j["normalizeClass"])(["menu-item-content",{"has-children":t.children,"has-handler":t.handler}])},[Object(j["createElementVNode"])("span",zh,Object(j["toDisplayString"])(t.text),1),t.subText&&!t.children?(Object(j["openBlock"])(),Object(j["createElementBlock"])("span",Ph,Object(j["toDisplayString"])(t.subText),1)):Object(j["createCommentVNode"])("",!0),t.children&&t.children.length?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,class:"sub-menu",menus:t.children,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])):Object(j["createCommentVNode"])("",!0)],2))],10,Ah))],64)})),128))])}Object(j["popScopeId"])();var Fh=Object(j["defineComponent"])({name:"menu-content",props:{menus:{type:Array,required:!0},handleClickMenuItem:{type:Function,required:!0}}});n("0c74");Fh.render=Rh,Fh.__scopeId="data-v-eb1555e8";var Hh=Fh,Uh=Object(j["defineComponent"])({name:"contextmenu",components:{MenuContent:Hh},props:{axis:{type:Object,required:!0},el:{type:Object,required:!0},menus:{type:Array,required:!0},removeContextmenu:{type:Function,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){var t=170,n=30,o=11,c=5,l=e.axis,a=l.x,r=l.y,i=e.menus.filter((function(e){return!(e.divider||e.hide)})).length,u=e.menus.filter((function(e){return e.divider})).length,d=t,s=i*n+u*o+2*c,f=document.body.clientWidth,p=document.body.clientHeight;return{left:f<=a+d?a-d:a,top:p<=r+s?r-s:r}})),n=function(t){t.disable||t.children&&!t.handler||(t.handler&&t.handler(e.el),e.removeContextmenu())};return{style:t,handleClickMenuItem:n}}});n("b8378");Uh.render=Dh;var Gh=Uh,qh="CTX_CONTEXTMENU_HANDLER",Xh=function(e,t,n){t.stopPropagation(),t.preventDefault();var o=n.value(e);if(o){var c=null,l=function t(){c&&(document.body.removeChild(c),c=null),e.classList.remove("contextmenu-active"),document.body.removeEventListener("scroll",t),window.removeEventListener("resize",t)},a={axis:{x:t.x,y:t.y},el:e,menus:o,removeContextmenu:l};c=document.createElement("div");var r=Object(j["createVNode"])(Gh,a,null);Object(j["render"])(r,c),document.body.appendChild(c),e.classList.add("contextmenu-active"),document.body.addEventListener("scroll",l),window.addEventListener("resize",l)}},Wh={mounted:function(e,t){e[qh]=function(n){return Xh(e,n,t)},e.addEventListener("contextmenu",e[qh])},unmounted:function(e){e&&e[qh]&&(e.removeEventListener("contextmenu",e[qh]),delete e[qh])}},Yh=Wh,Zh="CTX_CLICK_OUTSIDE_HANDLER",Jh=function(e,t,n){var o=n.value,c=t.composedPath(),l=c?c.indexOf(e)<0:!e.contains(t.target);l&&o(t)},Kh={mounted:function(e,t){e[Zh]=function(n){return Jh(e,n,t)},setTimeout((function(){document.addEventListener("click",e[Zh])}),0)},unmounted:function(e){e[Zh]&&(document.removeEventListener("click",e[Zh]),delete e[Zh])}},Qh=Kh,$h={install:function(e){e.directive("contextmenu",Yh),e.directive("click-outside",Qh)}},ej=Object(j["createApp"])(zb);ej.component("InputNumber",h["a"]),ej.component("Divider",O["a"]),ej.component("Button",v["a"]),ej.component("ButtonGroup",v["a"].Group),ej.component("Tooltip",b["a"]),ej.component("Popover",m["a"]),ej.component("Slider",p["a"]),ej.component("Select",f["a"]),ej.component("SelectOption",f["a"].Option),ej.component("SelectOptGroup",f["a"].OptGroup),ej.component("Switch",s["a"]),ej.component("Radio",d["a"]),ej.component("RadioGroup",d["a"].Group),ej.component("RadioButton",d["a"].Button),ej.component("Input",u["a"]),ej.component("InputGroup",u["a"].Group),ej.component("Modal",i["a"]),ej.component("Dropdown",r["a"]),ej.component("Menu",a["a"]),ej.component("MenuItem",a["a"].Item),ej.component("Checkbox",l["a"]),ej.component("Drawer",c["a"]),ej.component("Spin",o["a"]),ej.use(pO),ej.use(Bh),ej.use($h),ej.use(de,ue),ej.mount("#app")},cdff:function(e,t,n){},d4cb:function(e,t,n){},d572:function(e,t,n){},d5a9:function(e,t,n){},d64e:function(e,t,n){},d78b:function(e,t,n){"use strict";n("4872")},d9a3:function(e,t,n){"use strict";n("0eae")},da70:function(e,t,n){"use strict";n("afc3")},db88:function(e,t,n){},dbe5:function(e,t,n){},dc02:function(e,t,n){"use strict";n("a25b")},dc5e:function(e,t,n){},dc61:function(e,t,n){},dc83:function(e,t,n){"use strict";n("f6ff")},ddb2:function(e,t,n){},de7c:function(e,t,n){"use strict";n("fad2")},e02b:function(e,t,n){},e09c:function(e,t,n){},e1f8:function(e,t,n){},e202:function(e,t,n){"use strict";n("3040")},e28d:function(e,t,n){"use strict";n("8eb5")},e3dc:function(e,t,n){},e640:function(e,t,n){},e983:function(e,t,n){},ec3f:function(e,t,n){},eec0:function(e,t,n){"use strict";n("e983")},ef0f:function(e,t,n){"use strict";n("930c")},f076:function(e,t,n){"use strict";n("e09c")},f2d4:function(e,t,n){},f33f:function(e,t,n){"use strict";n("a9ab")},f349:function(e,t,n){"use strict";n("013f")},f354:function(e,t,n){},f418:function(e,t,n){"use strict";n("0f92")},f46c:function(e,t,n){"use strict";n("58d7")},f6ff:function(e,t,n){},f802:function(e,t,n){"use strict";n("84e7")},f8f9:function(e,t,n){},f91d:function(e,t,n){"use strict";n("4c37")},fad2:function(e,t,n){},fb1d:function(e,t,n){"use strict";n("d572")},fc4d:function(e,t,n){},fff2:function(e,t,n){}}); -//# sourceMappingURL=app.398096e5.js.map \ No newline at end of file diff --git a/js/app.398096e5.js.map b/js/app.398096e5.js.map deleted file mode 100644 index 33224c4a..00000000 --- a/js/app.398096e5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?356f","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?8515","webpack:///./src/App.vue?25ed","webpack:///./src/components/WritingBoard.vue?f94d","webpack:///./src/components/Contextmenu/MenuContent.vue?1231","webpack:///./src/views/components/element/LineElement/index.vue?e49f","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?cb4a","webpack:///./src/views/components/element/TableElement/StaticTable.vue?e859","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?bd6e","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?f10a","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?a4df","webpack:///./src/components/ColorPicker/EditableInput.vue?fcbe","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?7ab2","webpack:///./src/views/Editor/index.vue?0894","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?185b","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?495c","webpack:///./src/views/Screen/SlideThumbnails.vue?6302","webpack:///./src/views/components/ThumbnailSlide/index.vue?a2a6","webpack:///./src/views/Editor/Toolbar/index.vue?769d","webpack:///./src/views/components/element/TableElement/EditableTable.vue?24e1","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?a2a5","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?18ea","webpack:///./src/views/components/element/TableElement/index.vue?93b4","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?6d48","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?9d02","webpack:///./src/components/FullscreenSpin.vue?15ae","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?0499","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/ColorPicker/Hue.vue?69c4","webpack:///./src/views/components/element/ShapeElement/index.vue?afd1","webpack:///./src/views/Screen/WritingBoardTool.vue?6079","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?9b3b","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?b50b","webpack:///./src/views/Editor/Remark/index.vue?caa4","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?98f4","webpack:///./src/views/components/element/ProsemirrorEditor.vue?6643","webpack:///./src/views/components/element/ChartElement/index.vue?fa2a","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?de61","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?6c64","webpack:///./src/views/Editor/Canvas/index.vue?ad26","webpack:///./src/components/CheckboxButtonGroup.vue?3a3e","webpack:///./src/components/ColorPicker/index.vue?6fd0","webpack:///./src/views/components/element/ImageElement/index.vue?85ca","webpack:///./src/views/Screen/ScreenSlide.vue?6e86","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?a022","webpack:///./src/components/CheckboxButton.vue?2273","webpack:///./src/views/Editor/Thumbnails/index.vue?0477","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?a0ca","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?0096","webpack:///./src/components/ColorPicker/Checkboard.vue?ff3f","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?c46e","webpack:///./src/views/Editor/Canvas/Operate/index.vue?40b0","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?ba52","webpack:///./src/views/components/element/ChartElement/Chart.vue?917f","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?ae92","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?fb4e","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?832c","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?f65b","webpack:///./src/views/Screen/ScreenElement.vue?8435","webpack:///./src/components/ColorPicker/Saturation.vue?55e5","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?7f0a","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?a16c","webpack:///./src/views/Screen/index.vue?5c9b","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?8b3d","webpack:///./src/components/Contextmenu/index.vue?06fd","webpack:///./src/views/components/element/TextElement/index.vue?0593","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?04c5","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?152c","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?4b63","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?0953","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?cfc0","webpack:///./src/App.vue","webpack:///./src/store/constants.ts","webpack:///./src/mocks/slides.ts","webpack:///./src/mocks/theme.ts","webpack:///./src/utils/prosemirror/utils.ts","webpack:///./src/store/state.ts","webpack:///./src/mocks/layout.ts","webpack:///./src/store/getters.ts","webpack:///./src/utils/database.ts","webpack:///./src/store/actions.ts","webpack:///./src/configs/font.ts","webpack:///./src/utils/font.ts","webpack:///./src/store/mutations.ts","webpack:///./src/store/index.ts","webpack:///./src/types/edit.ts","webpack:///./src/configs/hotkey.ts","webpack:///./src/views/Editor/index.vue","webpack:///./src/utils/common.ts","webpack:///./src/utils/crypto.ts","webpack:///./src/utils/clipboard.ts","webpack:///./src/utils/element.ts","webpack:///./src/utils/textParser.ts","webpack:///./src/hooks/useHistorySnapshot.ts","webpack:///./src/utils/image.ts","webpack:///./src/configs/canvas.ts","webpack:///./src/hooks/useCreateElement.ts","webpack:///./src/hooks/usePasteTextClipboardData.ts","webpack:///./src/hooks/useSlideHandler.ts","webpack:///./src/hooks/useLockElement.ts","webpack:///./src/hooks/useDeleteElement.ts","webpack:///./src/hooks/useCombineElement.ts","webpack:///./src/hooks/useCopyAndPasteElement.ts","webpack:///./src/hooks/useSelectAllElement.ts","webpack:///./src/hooks/useMoveElement.ts","webpack:///./src/hooks/useOrderElement.ts","webpack:///./src/utils/fullscreen.ts","webpack:///./src/hooks/useScreening.ts","webpack:///./src/hooks/useScaleCanvas.ts","webpack:///./src/hooks/useGlobalHotkey.ts","webpack:///./src/hooks/usePasteEvent.ts","webpack:///./src/views/Editor/EditorHeader/index.vue","webpack:///./src/utils/htmlParser/tags.ts","webpack:///./src/utils/htmlParser/lexer.ts","webpack:///./src/utils/htmlParser/parser.ts","webpack:///./src/utils/htmlParser/format.ts","webpack:///./src/utils/htmlParser/index.ts","webpack:///./src/utils/svgPathParser.ts","webpack:///./src/utils/svg2Base64.ts","webpack:///./src/hooks/useExport.ts","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?98af","webpack:///./src/views/Editor/EditorHeader/index.vue?ac7b","webpack:///./src/views/Editor/EditorHeader/index.vue?0c5a","webpack:///./src/views/Editor/Canvas/index.vue","webpack:///./src/utils/selection.ts","webpack:///./src/views/Editor/Canvas/hooks/useViewportSize.ts","webpack:///./src/views/Editor/Canvas/hooks/useMouseSelection.ts","webpack:///./src/views/Editor/Canvas/hooks/useDropImageOrText.ts","webpack:///./src/views/Editor/Canvas/hooks/useRotateElement.ts","webpack:///./src/configs/element.ts","webpack:///./src/views/Editor/Canvas/hooks/useScaleElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useSelectElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragLineElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useInsertFromCreateSelection.ts","webpack:///./src/views/Editor/Canvas/EditableElement.vue","webpack:///./src/types/slides.ts","webpack:///./src/hooks/useAlignElementToCanvas.ts","webpack:///./src/views/components/element/ImageElement/index.vue","webpack:///./src/views/components/element/hooks/useElementShadow.ts","webpack:///./src/configs/imageClip.ts","webpack:///./src/views/components/element/hooks/useElementFlip.ts","webpack:///./src/views/components/element/ImageElement/useClipImage.ts","webpack:///./src/views/components/element/ImageElement/useFilter.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue","webpack:///./src/views/components/element/hooks/useElementOutline.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?b8d0","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?8b4e","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?b2f6","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?87cf","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?8d2c","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?00b2","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?8881","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?f84d","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?90b3","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?59cd","webpack:///./src/views/components/element/ImageElement/index.vue?7284","webpack:///./src/views/components/element/ImageElement/index.vue?18e8","webpack:///./src/views/components/element/TextElement/index.vue","webpack:///./src/views/components/element/ElementOutline.vue","webpack:///./src/views/components/element/ElementOutline.vue?3f74","webpack:///./src/views/components/element/ElementOutline.vue?8633","webpack:///./src/views/components/element/ProsemirrorEditor.vue","webpack:///./src/utils/emitter.ts","webpack:///./src/utils/prosemirror/plugins/keymap.ts","webpack:///./src/utils/prosemirror/plugins/inputrules.ts","webpack:///./src/utils/prosemirror/plugins/index.ts","webpack:///./src/utils/prosemirror/schema/nodes.ts","webpack:///./src/utils/prosemirror/schema/marks.ts","webpack:///./src/utils/prosemirror/schema/index.ts","webpack:///./src/utils/prosemirror/index.ts","webpack:///./src/utils/prosemirror/commands/setTextAlign.ts","webpack:///./src/utils/prosemirror/commands/toggleList.ts","webpack:///./src/views/components/element/ProsemirrorEditor.vue?8d9a","webpack:///./src/views/components/element/ProsemirrorEditor.vue?e4c0","webpack:///./src/views/components/element/TextElement/index.vue?f1a2","webpack:///./src/views/components/element/TextElement/index.vue?6e22","webpack:///./src/views/components/element/ShapeElement/index.vue","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?2333","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?fbe6","webpack:///./src/views/components/element/ShapeElement/index.vue?c8a7","webpack:///./src/views/components/element/ShapeElement/index.vue?a321","webpack:///./src/views/components/element/LineElement/index.vue","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?9702","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?0e0f","webpack:///./src/views/components/element/LineElement/index.vue?a024","webpack:///./src/views/components/element/LineElement/index.vue?8fb3","webpack:///./src/views/components/element/ChartElement/index.vue","webpack:///./src/views/components/element/ChartElement/Chart.vue","webpack:///./src/views/components/element/ChartElement/Chart.vue?10d5","webpack:///./src/views/components/element/ChartElement/Chart.vue?9c6f","webpack:///./src/views/components/element/ChartElement/index.vue?e4b0","webpack:///./src/views/components/element/ChartElement/index.vue?2e94","webpack:///./src/views/components/element/TableElement/index.vue","webpack:///./src/views/components/element/TableElement/EditableTable.vue","webpack:///./src/views/components/element/TableElement/utils.ts","webpack:///./src/views/components/element/TableElement/useHideCells.ts","webpack:///./src/views/components/element/TableElement/useSubThemeColor.ts","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?aea3","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?e254","webpack:///./src/views/components/element/TableElement/EditableTable.vue?8831","webpack:///./src/views/components/element/TableElement/EditableTable.vue?4197","webpack:///./src/views/components/element/TableElement/index.vue?7604","webpack:///./src/views/components/element/TableElement/index.vue?1057","webpack:///./src/views/Editor/Canvas/EditableElement.vue?381f","webpack:///./src/views/Editor/Canvas/EditableElement.vue?de80","webpack:///./src/views/Editor/Canvas/MouseSelection.vue","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?8b4c","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?8ddc","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue","webpack:///./src/views/Editor/Canvas/GridLines.vue","webpack:///./src/views/Editor/Canvas/GridLines.vue?f828","webpack:///./src/views/Editor/Canvas/GridLines.vue?ee36","webpack:///./src/hooks/useSlideBackgroundStyle.ts","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?0b0c","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?d49d","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?b5a1","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?52c1","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?e8f4","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?464b","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue","webpack:///./src/views/Editor/Canvas/hooks/useCommonOperate.ts","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?93e1","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?06a8","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?e6a8","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?c893","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?d499","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?65a2","webpack:///./src/views/Editor/Canvas/Operate/index.vue","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?f60b","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?6579","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?2229","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?2d82","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?84ca","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?592c","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?c074","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?5f30","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?df88","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?121c","webpack:///./src/views/Editor/Canvas/Operate/ChartElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ChartElementOperate.vue?4d68","webpack:///./src/views/Editor/Canvas/Operate/ChartElementOperate.vue?054d","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?ce2a","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?bf02","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue","webpack:///./src/hooks/useLink.ts","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?f4b2","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?2811","webpack:///./src/views/Editor/Canvas/Operate/index.vue?4919","webpack:///./src/views/Editor/Canvas/Operate/index.vue?3933","webpack:///./src/views/Editor/Canvas/LinkDialog.vue","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?3e63","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?214a","webpack:///./src/views/Editor/Canvas/index.vue?3cd8","webpack:///./src/views/Editor/Canvas/index.vue?2ed7","webpack:///./src/views/Editor/CanvasTool/index.vue","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue","webpack:///./src/configs/shapes.ts","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?ddb3","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?8e86","webpack:///./src/views/Editor/CanvasTool/LinePool.vue","webpack:///./src/configs/lines.ts","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?cda8","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?1c05","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?cfe0","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?067e","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?3234","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?9744","webpack:///./src/views/Editor/CanvasTool/index.vue?0ffc","webpack:///./src/views/Editor/CanvasTool/index.vue?a532","webpack:///./src/views/Editor/Thumbnails/index.vue","webpack:///./src/views/components/ThumbnailSlide/index.vue","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?9dd5","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?32f2","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?ac4f","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?6911","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?c63c","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?a27a","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?24f7","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?3b6b","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?b511","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?aa7f","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue","webpack:///./src/views/components/element/TableElement/StaticTable.vue","webpack:///./src/views/components/element/TableElement/StaticTable.vue?a3ae","webpack:///./src/views/components/element/TableElement/StaticTable.vue?b2de","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?341a","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?a02b","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?2f2d","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?944e","webpack:///./src/views/components/ThumbnailSlide/index.vue?ef6c","webpack:///./src/views/components/ThumbnailSlide/index.vue?8be7","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?9a35","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?4d9d","webpack:///./src/views/Editor/Thumbnails/index.vue?1806","webpack:///./src/views/Editor/Thumbnails/index.vue?ccb9","webpack:///./src/views/Editor/Toolbar/index.vue","webpack:///./src/types/toolbar.ts","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?5b98","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?a078","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?f8b9","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?da97","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?3bfa","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?fb3b","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?d5a3","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?270f","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?655d","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?5a19","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?e3e2","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?4679","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?b46c","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?fd61","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?11b1","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?e0af","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?f4cd","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?e25e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?8789","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?2855","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?ef13","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?b3de","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?ea14","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?0d68","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?7c3a","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?72ab","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?ed09","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?e2ca","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue","webpack:///./src/configs/animation.ts","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?9b7c","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?afe1","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue","webpack:///./src/configs/theme.ts","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?c66e","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?7ed2","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?0069","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?7cbb","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue","webpack:///./src/hooks/useAlignActiveElement.ts","webpack:///./src/hooks/useUniformDisplayElement.ts","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?d8f3","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?e1fe","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue","webpack:///./src/configs/symbol.ts","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?4863","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?be6f","webpack:///./src/views/Editor/Toolbar/index.vue?2e1e","webpack:///./src/views/Editor/Toolbar/index.vue?f66c","webpack:///./src/views/Editor/Remark/index.vue","webpack:///./src/views/Editor/Remark/index.vue?59ff","webpack:///./src/views/Editor/Remark/index.vue?58d2","webpack:///./src/views/Editor/index.vue?a4f9","webpack:///./src/views/Editor/index.vue?894c","webpack:///./src/views/Screen/index.vue","webpack:///./src/views/Screen/ScreenSlide.vue","webpack:///./src/views/Screen/ScreenElement.vue","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?fccb","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?f992","webpack:///./src/views/Screen/ScreenElement.vue?e100","webpack:///./src/views/Screen/ScreenElement.vue?5632","webpack:///./src/views/Screen/ScreenSlide.vue?749f","webpack:///./src/views/Screen/ScreenSlide.vue?67b9","webpack:///./src/views/Screen/SlideThumbnails.vue","webpack:///./src/views/Screen/SlideThumbnails.vue?6af1","webpack:///./src/views/Screen/SlideThumbnails.vue?02c0","webpack:///./src/views/Screen/WritingBoardTool.vue","webpack:///./src/components/WritingBoard.vue","webpack:///./src/components/WritingBoard.vue?419f","webpack:///./src/components/WritingBoard.vue?f8b8","webpack:///./src/views/Screen/WritingBoardTool.vue?b982","webpack:///./src/views/Screen/WritingBoardTool.vue?2e1b","webpack:///./src/views/Screen/index.vue?4bb4","webpack:///./src/views/Screen/index.vue?5535","webpack:///./src/App.vue?1d14","webpack:///./src/App.vue?97f5","webpack:///./src/plugins/icon.ts","webpack:///./src/components/FileInput.vue","webpack:///./src/components/FileInput.vue?c273","webpack:///./src/components/FileInput.vue?ebff","webpack:///./src/components/SvgWrapper.vue","webpack:///./src/components/SvgWrapper.vue?a337","webpack:///./src/components/SvgWrapper.vue?4c4a","webpack:///./src/components/CheckboxButton.vue","webpack:///./src/components/CheckboxButton.vue?a662","webpack:///./src/components/CheckboxButton.vue?e089","webpack:///./src/components/CheckboxButtonGroup.vue","webpack:///./src/components/CheckboxButtonGroup.vue?2771","webpack:///./src/components/CheckboxButtonGroup.vue?3ae2","webpack:///./src/components/ColorPicker/index.vue","webpack:///./src/components/ColorPicker/Alpha.vue","webpack:///./src/components/ColorPicker/Checkboard.vue","webpack:///./src/components/ColorPicker/Checkboard.vue?23ca","webpack:///./src/components/ColorPicker/Checkboard.vue?d504","webpack:///./src/components/ColorPicker/Alpha.vue?103b","webpack:///./src/components/ColorPicker/Alpha.vue?8cd5","webpack:///./src/components/ColorPicker/Hue.vue","webpack:///./src/components/ColorPicker/Hue.vue?8d53","webpack:///./src/components/ColorPicker/Hue.vue?e08e","webpack:///./src/components/ColorPicker/Saturation.vue","webpack:///./src/components/ColorPicker/Saturation.vue?7dac","webpack:///./src/components/ColorPicker/Saturation.vue?b755","webpack:///./src/components/ColorPicker/EditableInput.vue","webpack:///./src/components/ColorPicker/EditableInput.vue?6a4f","webpack:///./src/components/ColorPicker/EditableInput.vue?f9ac","webpack:///./src/components/ColorPicker/index.vue?5336","webpack:///./src/components/ColorPicker/index.vue?4c0a","webpack:///./src/components/FullscreenSpin.vue","webpack:///./src/components/FullscreenSpin.vue?6b0d","webpack:///./src/components/FullscreenSpin.vue?6c95","webpack:///./src/plugins/component.ts","webpack:///./src/components/Contextmenu/index.vue","webpack:///./src/components/Contextmenu/MenuContent.vue","webpack:///./src/components/Contextmenu/MenuContent.vue?e94a","webpack:///./src/components/Contextmenu/MenuContent.vue?bb2c","webpack:///./src/components/Contextmenu/index.vue?93d7","webpack:///./src/components/Contextmenu/index.vue?d39d","webpack:///./src/plugins/directive/contextmenu.ts","webpack:///./src/plugins/directive/clickOutside.ts","webpack:///./src/plugins/directive/index.ts","webpack:///./src/main.ts","webpack:///./src/views/components/element/ChartElement/Chart.vue?bd9c","webpack:///./src/views/components/element/ElementOutline.vue?a889","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?9b09","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?f5db","webpack:///./src/views/Editor/EditorHeader/index.vue?d286","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?a30e","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?1546","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?67c7","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?a93a","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?e4d6","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?61ac","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?243e","webpack:///./src/components/FileInput.vue?91ff","webpack:///./src/components/ColorPicker/Alpha.vue?2574","webpack:///./src/views/Editor/Canvas/GridLines.vue?7b03","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?f419","webpack:///./src/views/Editor/CanvasTool/index.vue?8553","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?efe0"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","screening","MutationTypes","ActionTypes","elements","type","left","top","width","height","viewBox","path","fill","fixedRatio","opacity","rotate","flipV","lineHeight","content","defaultFontName","defaultColor","start","end","points","color","style","background","themeColor","fontColor","fontName","backgroundColor","equalNodeType","nodeType","node","Array","isArray","indexOf","findParentNodeClosestToPos","$pos","predicate","depth","pos","before","findParentNode","_ref","$from","findParentNodeOfType","selection","isActiveOfParentNodeType","state","schema","nodes","getMarkAttrs","view","doc","from","nodeAt","lastChild","marks","markType","attr","mark","attrs","getAttrValueInSelection","to","keepChecking","nodesBetween","_defaultAttrs","backcolor","fontsize","fontname","align","defaultAttrs","isBold","isEm","isUnderline","isStrikethrough","isSuperscript","isSubscript","isCode","isBulletList","isOrderedList","isBlockquote","bold","em","underline","strikethrough","superscript","subscript","bulletList","orderedList","blockquote","defaultRichTextAttrs","activeElementIdList","handleElementId","activeGroupElementId","canvasPercentage","canvasScale","thumbnailsFocus","editorAreaFocus","disableHotkeys","showGridLines","creatingElement","availableFonts","toolbarState","viewportRatio","theme","slides","slideIndex","selectedSlidesIndex","snapshotCursor","snapshotLength","ctrlKeyState","shiftKeyState","clipingImageElementId","richTextAttrs","selectedTableCells","isScaling","editingShapeElementId","wordSpace","outline","text","getters","currentSlide","currentSlideAnimations","animations","els","elIds","el","filter","animation","includes","elId","layouts","subColor","isDark","layoutsString","JSON","stringify","replaceAll","parse","activeElementList","element","handleElement","find","canUndo","canRedo","ctrlOrShiftKeyActive","version","stores","snapshots","table","snapshotDB","actions","INIT_SNAPSHOT_DATABASE","commit","orderBy","toArray","lastSnapshot","clear","newFirstSnapshot","index","add","SET_SNAPSHOT_CURSOR","SET_SNAPSHOT_LENGTH","ADD_SNAPSHOT","allKeys","needDeleteKeys","snapshot","snapshotLengthLimit","update","bulkDelete","UN_DO","SET_SLIDES","UPDATE_SLIDE_INDEX","SET_ACTIVE_ELEMENT_ID_LIST","RE_DO","SYS_FONTS","label","WEB_FONTS","isSupportFont","arial","toLowerCase","size","str","canvas","document","createElement","ctx","getContext","textAlign","fillStyle","textBaseline","getDotArray","_fontFamily","clearRect","font","fillText","imageData","getImageData","item","join","mutations","SET_HANDLE_ELEMENT_ID","SET_ACTIVE_GROUP_ELEMENT_ID","SET_CANVAS_PERCENTAGE","percentage","SET_CANVAS_SCALE","scale","SET_THUMBNAILS_FOCUS","isFocus","SET_EDITORAREA_FOCUS","SET_DISABLE_HOTKEYS_STATE","disable","SET_GRID_LINES_STATE","show","SET_CREATING_ELEMENT","SET_AVAILABLE_FONTS","SET_TOOLBAR_STATE","SET_CLIPING_IMAGE_ELEMENT_ID","SET_RICHTEXT_ATTRS","SET_SELECTED_TABLE_CELLS","cells","SET_SCALING_STATE","SET_EDITING_SHAPE_ELEMENT_ID","ellId","SET_THEME","themeProps","SET_VIEWPORT_RATIO","ADD_SLIDE","slide","addIndex","UPDATE_SLIDE","props","DELETE_SLIDE","slideId","slidesId","deleteSlidesIndex","findIndex","newIndex","Math","min","maxIndex","UPDATE_SELECTED_SLIDES_INDEX","ADD_ELEMENT","currentSlideEls","newEls","UPDATE_ELEMENT","elIdList","REMOVE_ELEMENT_PROPS","propName","propsNames","cursor","SET_CTRL_KEY_STATE","isActive","SET_SHIFT_KEY_STATE","SET_SCREENING","ElementOrderCommands","ElementAlignCommands","OperateBorderLines","OperateResizeHandlers","OperateLineHandlers","KEYS","class","remarkHeight","HOTKEY_DOC","children","createRandomCode","len","charset","maxLen","ret","randomIndex","floor","random","digit","CRYPTO_KEY","msg","AES","encrypt","toString","ciphertext","bytes","decrypt","enc","Utf8","Promise","reject","fakeElement","clipboard","action","container","body","on","destroy","appendChild","click","removeChild","readClipboard","navigator","readText","then","clipboardData","pasteExcelClipboardString","lines","split","pop","colCount","getRectRotatedRange","radius","sqrt","pow","auxiliaryAngle","atan","PI","tlbraRadian","trblaRadian","middleLeft","middleTop","xAxis","cos","yAxis","sin","xRange","max","yRange","getRectRotatedOffset","originXRange","originYRange","rotatedXRange","rotatedYRange","offsetX","offsetY","getElementRange","minX","maxX","minY","maxY","getElementListRange","elementList","leftValues","topValues","rightValues","bottomValues","forEach","uniqAlignLines","uniqLines","line","_line","uniqLine","rangeMin","range","rangeMax","groupIdMap","elIdMap","groupId","rgba","toRgb","subRgba1","g","b","a","subRgba2","getLineElementPath","broken","mid","curve","htmlText","replace","paragraphs","string","paragraph","store","addHistorySnapshot","dispatch","trailing","redo","leading","undo","getImageSize","src","img","onload","imgWidth","clientWidth","imgHeight","clientHeight","onerror","getImageDataURL","file","reader","FileReader","addEventListener","readAsDataURL","VIEWPORT_SIZE","useHistorySnapshot","setTimeout","createImageElement","createChartElement","chartType","gridColor","labels","series","createTableElement","row","col","rowCells","colspan","rowspan","DEFAULT_CELL_WIDTH","DEFAULT_CELL_HEIGHT","colWidths","rowHeader","rowFooter","colHeader","colFooter","createTextElement","position","createShapeElement","newElement","special","createLineElement","isBroken","isCurve","useCreateElement","addElementsFromClipboard","currentSlideElementIdList","inCurrentSlide","values","addSlidesFromClipboard","newSlides","createTextElementFromClipboard","pasteTextClipboardData","options","onlySlide","onlyElements","selectedSlides","selectedSlidesId","usePasteTextClipboardData","resetSlides","emptySlide","updateSlideIndex","command","UP","DOWN","copySlide","pasteSlide","catch","err","message","warning","createSlide","createSlideByTemplate","newSlide","copyAndPasteSlide","deleteSlide","targetSlidesId","cutSlide","selectAllSlide","newSelectedSlidesIndex","lockElement","newElementList","lock","unlockElement","deleteElement","deleteAllElements","canCombine","firstGroupId","inSameGroup","every","combineElements","combineElementList","combineElementMaxLevel","_element","combineElementIdList","insertLevel","uncombineElements","hasElementInGroup","some","handleElementIdList","useDeleteElement","copyElement","cutElement","pasteElement","quickCopyElement","selectAllElement","unlockedElements","newActiveElementIdList","moveElement","step","move","LEFT","RIGHT","getCombineElementLevelRange","minLevel","maxLevel","moveUpElement","copyOfElementList","nextElement","movedElementList","nextCombineElementList","level","movedElement","moveDownElement","prevElement","prevCombineElementList","moveTopElement","moveBottomElement","unshift","orderElement","TOP","BOTTOM","enterFullscreen","docElm","documentElement","requestFullscreen","mozRequestFullScreen","webkitRequestFullScreen","exitFullscreen","mozCancelFullScreen","webkitCancelFullScreen","isFullscreen","mozFullScreen","webkitIsFullScreen","webkitFullScreen","enterScreening","enterScreeningFromStart","exitScreening","scaleCanvas","setCanvasPercentage","ctrlKeyActive","shiftKeyActive","useSlideHandler","useCombineElement","useLockElement","useCopyAndPasteElement","useSelectAllElement","useMoveElement","useOrderElement","useScreening","useScaleCanvas","copy","cut","quickCopy","selectAll","combine","uncombine","remove","order","tabActiveElement","currentIndex","nextIndex","nextElementId","firstElement","keydownListener","ctrlKey","shiftKey","altKey","metaKey","ctrlOrMetaKeyActive","toUpperCase","F","preventDefault","C","X","D","Z","Y","A","L","G","B","DELETE","BACKSPACE","ENTER","MINUS","EQUAL","DIGIT_0","TAB","keyupListener","removeEventListener","pasteImageFile","imageFile","dataURL","pasteListener","clipboardDataItems","items","clipboardDataFirstItem","kind","getAsFile","getAsString","href","target","trigger","overlay","exportJSON","exportPPTX","toggleGridLines","goIssues","hotkeyDrawerVisible","mouseLeaveDelay","title","placement","visible","loading","exporting","tip","childlessTags","closingTags","closingTagAncestorBreakers","li","dt","dd","tbody","thead","tfoot","tr","td","voidTags","jumpPosition","movePositopn","findTextEnd","isEnd","textEnd","char","charAt","test","lexText","tokens","lexComment","contentEnd","commentEnd","lexTagName","isTagChar","tagName","quote","wordBegin","words","isQuoteEnd","isTagEnd","isWordEnd","isQuoteStart","word","isNotPair","secondWord","newWord","thirdWord","safeTagName","nextTag","tagState","lexTag","textStart","secondChar","tagStartClose","close","firstChar","tagEndClose","isComment","safeTag","lexer","root","stack","tagParents","parentTagName","rewindStack","newLength","token","tagToken","shouldRewind","isClosingTag","shouldRewindToAutoClose","previousIndex","attributes","tagEndToken","_token","elementNode","hasChildren","innerState","splitHead","sep","idx","unquote","car","formatAttributes","attribute","parts","trim","format","typeMap","1","2","4","8","16","32","64","128","256","512","pathData","commands","x","y","relative","x1","y1","x2","y2","lastPoint","cubicBezierPoints","px","py","cx","cy","rx","rX","ry","rY","xAxisRotation","xRot","largeArcFlag","lArcFlag","sweepFlag","cbPoint","characters","PREFIX","utf8Encode","utftext","charCodeAt","String","fromCharCode","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","isNaN","svg2Base64","XMLS","XMLSerializer","svg","serializeToString","blob","Blob","formatColor","_color","alpha","getAlpha","setAlpha","toHexString","formatHTML","html","ast","slices","obj","baseStyleObj","lastSlice","breakLine","styleObj","styleAttr","styleArr","styleItem","_key","_value","fontSize","parseInt","highlight","strike","italic","fontFace","formatPoints","point","undefined","moveTo","pptx","pptxSlide","addSlide","image","transparency","gradientColor","color1","color2","mix","textProps","w","h","valign","charSpacing","lineSpacingMultiple","shadow","blur","offset","v","angle","link","hyperlink","url","addText","flipH","clip","shape","rounding","addImage","svgRef","querySelector","base64SVG","fillColor","dashType","addShape","beginArrowType","endArrowType","chartData","chartColors","analogous","supplement","ChartType","bar","barDir","horizontalBars","showArea","area","showLine","scatter","lineSize","lineSmooth","donut","doughnut","holeSize","pie","addChart","hiddenCells","rowData","cell","tableData","subThemeColors","_row","cellOptions","colW","border","pt","addTable","writeFile","fileName","error","hotkeys","hotkey","setup","render","__scopeId","components","HotkeyDoc","useExport","open","ref","$event","handleMousewheelCanvas","handleClickBlankArea","insertElementFromCreateSelection","alignmentLines","axis","scaleMultiElement","elementInfo","isSelected","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement","mouseSelectionState","isShow","quadrant","elementIndex","selectElement","linkDialogVisible","footer","centered","destroyOnClose","contextmenus","removeEditorAreaFocus","removeAllRanges","getSelection","canvasRef","viewportLeft","viewportTop","setViewportPosition","canvasWidth","canvasHeight","viewportActualWidth","viewportActualHeight","viewportStyles","resizeObserver","ResizeObserver","observe","unobserve","viewportRef","updateMouseSelection","isMouseDown","viewportRect","getBoundingClientRect","minSelectionRange","startPageX","pageX","startPageY","pageY","onmousemove","currentPageX","currentPageY","offsetWidth","offsetHeight","abs","onmouseup","inRangeElementList","mouseSelectionLeft","mouseSelectionTop","mouseSelectionWidth","mouseSelectionHeight","isInclude","inRangeElement","groupElementList","groupElement","inRangeElementIdList","elementRef","handleDrop","dataTransfer","dataTransferItem","ondragleave","ondrop","ondragenter","ondragover","getAngleFromCoordinate","radian","atan2","elOriginRotate","elLeft","elTop","elWidth","elHeight","centerX","centerY","mouseX","mouseY","sorptionRange","ELEMENT_TYPE_ZH","chart","MIN_SIZE","getRotateElementPoints","taRadian","raRadian","halfWidth","halfHeight","leftTopPoint","topPoint","rightTopPoint","rightPoint","rightBottomPoint","bottomPoint","leftBottomPoint","leftPoint","direction","oppositeMap","RIGHT_BOTTOM","LEFT_BOTTOM","LEFT_TOP","RIGHT_TOP","elOriginLeft","elOriginTop","elOriginWidth","elOriginHeight","elRotate","rotateRadian","aspectRatio","minSize","getSizeWithinRange","baseLeft","baseTop","horizontalLines","verticalLines","oppositePoint","edgeWidth","edgeHeight","right","bottom","topLine","bottomLine","leftLine","rightLine","edgeTopLine","edgeBottomLine","edgeHorizontalCenterLine","edgeLeftLine","edgeRightLine","edgeVerticalCenterLine","alignedAdsorption","currentX","currentY","_alignmentLines","isVerticalAdsorbed","isHorizontalAdsorbed","correctionVal","revisedX","revisedY","currentPoints","currentOppositePoint","currentBaseLeft","currentBaseTop","moveX","moveY","operateWidth","operateHeight","originElementList","currentMinX","currentMaxX","currentMinY","currentMaxY","currentOppositeWidth","currentOppositeHeight","widthScale","heightScale","originElement","originEl","startMove","newActiveIdList","groupMembersId","dragElement","originActiveElementList","isMisoperation","horizontalCenterLine","verticalCenterLine","targetMinX","targetMaxX","targetMinY","targetMaxY","targetLeft","targetTop","targetCenterX","targetCenterY","adsorptionPoints","startX","startY","endX","endY","midX","midY","START","adsorptionPoint","END","newEl","MID","formatCreateSelection","selectionData","formatCreateSelectionForLine","_start","_end","currentElementComponent","ElementTypes","alignElementToCanvas","viewportWidth","viewportHeight","CENTER","VERTICAL","HORIZONTAL","isCliping","clipData","clipPath","clipShape","handleClip","handleSelectElement","draggable","alt","ClipPathTypes","ClipPaths","shadowStyle","flipStyle","CLIPPATHS","rect","RECT","rect2","POLYGON","createPath","rect3","roundRect","ellipse","ELLIPSE","triangle","triangle2","triangle3","rhombus","hexagon","pentagon","parallelogram","parallelogram2","trapezoid","trapezoid2","imgPosition","filters","overflow","vector-effect","stroke-linecap","stroke-miterlimit","stroke-linejoin","stroke","outlineColor","stroke-width","outlineWidth","stroke-dasharray","outlineStyle","Number","required","default","useElementOutline","Function","ImageRectOutline","ImageEllipseOutline","ImagePolygonOutline","useClipImage","shape-rendering","clipWrapperPositionStyle","bottomImgPositionStyle","topImgPositionStyle","topImgWrapperPositionStyle","moveClipRange","scaleClipRange","emits","emit","isSettingClipRange","currentRange","getClipDataTransformInfo","topImgWrapperPosition","bottomWidth","bottomHeight","topLeft","topTop","topWidth","topHeight","initClipPosition","clipedEmitData","keyboardListener","updateRange","retPosition","bottomPosition","originPositopn","minWidth","minHeight","targetWidth","targetHeight","ImageOutline","ImageClipHandler","useElementShadow","useElementFlip","useFilter","stopPropagation","originClip","_props","elementId","editable","updateContent","EmitterEvents","cmd","strong","list_item","match","childCount","rules","ordered_list","bullet_list","code_block","_orderedList","group","_bulletList","parseDOM","tag","getAttrs","dom","getAttribute","toDOM","excludes","forecolor","inline","schemaNodes","schemaMarks","htmlString","parser","DOMParser","parseFromString","firstElementChild","fromSchema","plugins","emitter","mitt","alignment","listItem","tasks","allowedNodeTypes","Set","has","task","setNodeMarkup","alignmentCommand","setSelection","isList","listType","itemType","$to","blockRange","parentList","validContent","Boolean","autoFocus","editorView","editorViewRef","handleInput","innerHTML","handleFocus","handleBlur","handleClick","handleKeydown","textContent","hasFocus","replaceRangeWith","setProps","handleDOMEvents","focus","keydown","execCommand","payload","empty","addMark","removeMark","insertText","RICH_TEXT_COMMAND","off","ElementOutline","ProsemirrorEditor","canMove","realHeightCache","updateTextElementHeight","entries","contentRect","realHeight","enterEditing","gradient","transform","updateText","gradientTransform","stop-color","GradientDefs","exitEditing","defaultText","_text","svgWidth","svgHeight","baseSize","lineDashArray","marker-start","marker-end","markerUnits","orient","markerWidth","markerHeight","refX","refY","pathMap","dot","arrow","rotateMap","LinePointMarker","openDataEditor","chartRef","slideScale","getDataAndOptions","propsOptopns","renderChart","updateChart","updateTheme","colors","setProperty","updateGridColor","Chart","OPEN_CHART_DATA_EDITOR","updateTableCells","widths","updateColWidths","updateSelectedCells","startEdit","totalWidth","dragLinePosition","handleMousedownColHandler","subThemeColor","colSizeList","span","tableCells","rowIndex","colIndex","data-cell-index","handleCellMousedown","handleCellMouseenter","activedCell","contenteditable","insertExcelData","formatText","hideCells","getTextStyle","textDecoration","fontWeight","fontStyle","fontFamily","immediate","textareaRef","onpaste","excelData","CustomTextarea","isStartSelect","startCell","endCell","set","newData","useSubThemeColor","reduce","removeSelectedCells","useHideCells","selectedCells","oldValue","selectedRange","handleMouseup","button","isHideCell","selectCol","maxRow","selectRow","maxCol","deleteRow","_tableCells","targetCells","hideCellsPos","deleteCol","insertRow","insertCol","fillTable","rowCount","defaultCell","newRows","mergeCells","splitCells","originWidth","round","clearSelectedCellText","tabActiveCell","getNextCell","nextRow","nextCol","nextCell","textRef","fillRowCount","fillColCount","getEffectiveTableCells","effectiveTableCells","_rowCells","checkCanDeleteRowOrCol","canDeleteRow","canDeleteCol","checkCanMergeOrSplit","isMultiSelected","targetCell","canMerge","canSplit","cellIndex","dataset","handler","divider","EditableTable","updateTableElementHeight","elementTypeMap","IMAGE","ImageElement","TEXT","TextElement","SHAPE","ShapeElement","LINE","LineElement","CHART","ChartElement","TABLE","TableElement","useAlignElementToCanvas","subText","hide","validator","backgroundStyle","bgColor","colorList","mostReadable","includeFallbackColors","toRgbString","gridSize","getPath","imageSize","gradientRotate","gradientType","backgroundImage","backgroundRepeat","backgroundSize","GridLines","useSlideBackgroundStyle","sizeStyle","createSelection","lineData","selectionRef","absX","absY","isOpposite","endPageX","endPageY","defaultSize","_startX","_startY","_endX","_endY","borderLines","disableResize","resizeHandlers","textElementResizeHandlers","T","R","rotateClassName","prefix","isWide","ResizeHandler","BorderLine","localActiveElementList","useCommonOperate","setRange","currentOperateComponent","elementIndexInAnimation","scaleWidth","inheritAttrs","RotateHandler","scaleHeight","handlers","midHandler","removeLink","setLink","linkRegExp","useLink","LinkHandler","ImageElementOperate","TextElementOperate","ShapeElementOperate","LineElementOperate","ChartElementOperate","TableElementOperate","placeholder","save","success","EditableElement","MouseSelection","ViewportBackground","AlignmentLine","ElementCreateSelection","MultiSelectOperate","Operate","LinkDialog","setLocalElementList","useViewportSize","useDropImageOrText","useMouseSelection","useDragElement","useDragLineElement","useSelectElement","useScaleElement","useRotateElement","throttleScaleCanvas","throttleUpdateSlideIndex","deltaY","useInsertFromCreateSelection","mouseEnterDelay","drawText","files","insertImageElement","shapePoolVisible","drawShape","linePoolVisible","drawLine","chartPoolVisible","tableGeneratorVisible","canvasScalePercentage","shapeList","selectShape","SHAPE_LIST","lineList","selectLine","LINE_LIST","chartList","selectChart","isCustom","customRow","customCol","insertCustomTable","handleClickTable","ShapePool","LinePool","ChartPool","TableGenerator","setThumbnailsFocus","presetLayoutPopoverVisible","modelValue","scroll","scrollSensitivity","setData","handleDragEnd","itemKey","handleClickSlideThumbnail","fillDigit","contextmenusThumbnailItem","contextmenusThumbnails","strokeWidth","_chartType","_options","StaticTable","BaseImageElement","BaseTextElement","BaseShapeElement","BaseLineElement","BaseChartElement","BaseTableElement","ThumbnailElement","selectSlideTemplate","ThumbnailSlide","Draggable","LayoutPool","changSlideIndex","minIndex","eventData","oldIndex","_slides","_slide","currentTabs","tab","setToolbarState","currentPanelComponent","ToolbarStates","SYMBOL","EL_ANIMATION","EL_STYLE","EL_POSITION","SLIDE_DESIGN","SLIDE_ANIMATION","MULTI_POSITION","presetStyles","emitBatchRichTextCommand","compact","emitRichTextCommand","suffixIcon","webFonts","fontSizeOptions","updateFill","checked","button-style","updateLineHeight","lineHeightOptions","updateWordSpace","wordSpaceOptions","updateOpacity","deep","fixed","hasOutline","toggleOutline","updateOutline","ColorButton","outlineProps","hasShadow","toggleShadow","updateShadow","shadowProps","ElementOpacity","ElementShadow","clipImage","clipPanelVisible","shapeClipPathOptions","presetImageClip","ratioClipOptions","ratio","filterOptions","updateFilter","replaceImage","resetImage","setBackgroundImage","updateFlip","flipProps","defaultFilters","unit","ElementFlip","originFilters","getImageElementDataBeforeClip","imgLeft","imgTop","originClipRange","originHeight","originLeft","originTop","imageRatio","distance","fillType","updateFillType","updateGradient","showTextTools","updateTextAlign","gradientProps","updateLine","chartDataEditorVisible","updateOptions","deleteThemeColor","addThemeColor","closable","updateData","rangeLines","resizablePointStyle","changeSelectRange","autocomplete","focusCell","closeEditor","getTableData","CELL_WIDTH","CELL_HEIGHT","tempRangeSize","initData","_data","inputRef","moveNextRow","labelsItem","labelInputRef","seriesItem","valueInputRef","ChartDataEditor","_lineSmooth","_showLine","_showArea","_horizontalBars","_donut","optionProps","newOptions","textAttrs","updateTextAttrs","minRowCount","setTableRow","minColCount","setTableCol","hasTheme","toggleTheme","updateTextAttrState","selectedCell","textAttrProp","themeProp","currentTheme","newTableCells","newColSizeList","panelMap","TextStylePanel","ImageStylePanel","ShapeStylePanel","LineStylePanel","ChartStylePanel","TableStylePanel","updateLeft","updateTop","updateWidth","updateFixedRatio","disabled","updateHeight","updateRotate45","updateRotate","_rotate","animationPoolVisible","hoverPreviewAnimation","addAnimation","handleElementAnimationName","handleElementAnimation","duration","updateElementAnimationDuration","animationSequence","elType","animationType","runAnimation","deleteAnimation","ANIMATIONS","defaultDuration","animationTypes","elRef","animationName","classList","handleAnimationEnd","removeProperty","once","updateElementAnimation","animationItem","updateBackgroundType","updateBackground","uploadBackgroundImage","applyBackgroundAllSlide","updateViewportRatio","showPresetThemes","togglePresetThemesVisible","themes","applyThemeAllSlide","PRESET_THEMES","newBackground","currentTurningMode","updateTurningMode","applyAllSlide","turningMode","alignElement","displayItemCount","uniformHorizontalDisplay","uniformVerticalDisplay","alignActiveElement","groupElementRangeMap","activeElement","groupElements","horizontalCenter","center","verticalCenter","count","groupIdList","copyOfActiveElementList","singleElemetList","groupList","groupEl","formatedGroupList","groupItem","list","sort","itemA","itemB","sortedElementData","firstItem","lastPos","lastWidth","currentPos","currentWidth","sortedItem","totalHeight","lastHeight","currentHeight","useAlignActiveElement","useUniformDisplayElement","symbolPoolList","selectedSymbolKey","symbolPool","selectSymbol","SYMBOL_LIST","selectedSymbol","elementTabs","slideTabs","multiSelectTabs","currentTabsValue","ElementStylePanel","ElementPositionPanel","ElementAnimationPanel","SlideDesignPanel","SlideAnimationPanel","MultiPositionPanel","SymbolPanel","resize","remark","newHeight","EditorHeader","Canvas","CanvasTool","Thumbnails","Toolbar","Remark","useGlobalHotkey","usePasteEvent","mousewheelListener","touchStartListener","touchEndListener","animationIndex","slideThumbnailModelVisible","turnSlideToIndex","writingBoardToolVisible","execPrev","execNext","showPageNumber","openLink","ScreenChartElement","needWaitAnimation","ScreenElement","writingBoardColor","blackboard","model","writingBoardModel","changePen","changeEraser","clearCanvas","writingBoardColors","changeColor","closeWritingBoard","handleMousedown","handleMousemove","mouseInCanvas","penSize","rubberSize","writingBoardRef","lastTime","lastLineWidth","mouse","updateMousePosition","initCanvas","lineCap","lineJoin","draw","posX","posY","lineWidth","lastPosX","lastPosY","strokeStyle","beginPath","lineTo","closePath","erase","sinRadius","cosRadius","rectPoint1","rectPoint2","rectPoint3","rectPoint4","arc","restore","getDistance","getLineWidth","maxV","minV","maxWidth","handleMove","time","Date","getTime","MouseEvent","changedTouches","TouchEvent","WritingBoard","ScreenSlide","SlideThumbnails","WritingBoardTool","slideWidth","slideHeight","setSlideContentSize","winWidth","winHeight","windowResizeListener","autoPlayTimer","closeAutoPlay","clearInterval","throttleMassage","lastIndex","autoPlay","setInterval","touchInfo","SPACE","turnPrevSlide","turnNextSlide","Editor","Screen","onbeforeunload","install","app","component","accept","handleChange","xmlns","xmlnsXlink","hue","currentColor","themeColors","selectPresetColor","presetColors","standardColors","recentColors","handleMouseDown","bgStyle","checkboardCache","renderCheckboard","white","grey","fillRect","translate","toDataURL","getCheckboard","checkboard","Checkboard","rgbaStr","alphaRef","containerWidth","xOffset","pageXOffset","unbindEventListeners","pointerLeft","oldHue","pullDirection","hsla","toHsl","hueRef","percent","hsva","toHsv","pointerTop","emitChangeEvent","param","saturationRef","containerHeight","yOffset","pageYOffset","saturation","bright","val","_hex","toHex8String","RECENT_COLORS","presetColorConfig","startColor","endColor","_startColor","_endColor","rStep","gStep","bStep","gradientColorArr","Alpha","Hue","Saturation","EditableInput","rgbaString","colorString","updateRecentColorsCache","maxLength","recentColorsCache","localStorage","getItem","setItem","FileInput","SvgWrapper","CheckboxButton","CheckboxButtonGroup","ColorPicker","FullscreenSpin","removeContextmenu","menus","handleClickMenuItem","menu","MenuContent","MENU_WIDTH","MENU_HEIGHT","DIVIDER_HEIGHT","PADDING","menuCount","dividerCount","menuWidth","menuHeight","screenWidth","screenHeight","CTX_CONTEXTMENU_HANDLER","event","binding","vm","Contextmenu","ContextmenuDirective","mounted","unmounted","CTX_CLICK_OUTSIDE_HANDLER","clickListener","composedPath","isClickOutside","contains","ClickOutsideDirective","directive","App","Group","Option","OptGroup","Button","Item","use","mount"],"mappings":"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S,IACTC,KAAM,uDAER,CACED,QAAS,IACTC,KAAM,4CAER,CACED,QAAS,IACTC,KAAM,yDAER,CACED,QAAS,IACTC,KAAM,+CAER,CACED,QAAS,IACTC,KAAM,uDAER,CACED,QAAS,IACTC,KAAM,yCAER,CACED,QAAS,IACTC,KAAM,uCAER,CACED,QAAS,IACTC,KAAM,6BAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,4CAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,iDAER,CACED,QAAS,IACTC,KAAM,wDAER,CACED,QAAS,IACTC,KAAM,iEAER,CACED,QAAS,IACTC,KAAM,gFAER,CACED,QAAS,IACTC,KAAM,oHAER,CACED,QAAS,IACTC,KAAM,uDAER,CACED,QAAS,IACTC,KAAM,0DAER,CACED,QAAS,IACTC,KAAM,uEAER,CACED,QAAS,IACTC,KAAM,kEAER,CACED,QAAS,IACTC,KAAM,+CAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,oHAER,CACED,QAAS,IACTC,KAAM,6DAER,CACED,QAAS,IACTC,KAAM,wEAER,CACED,QAAS,IACTC,KAAM,iEAER,CACED,QAAS,IACTC,KAAM,oHAER,CACED,QAAS,IACTC,KAAM,sHAER,CACED,QAAS,IACTC,KAAM,uEAER,CACED,QAAS,IACTC,KAAM,oIAER,CACED,QAAS,IACTC,KAAM,qEAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,2EAER,CACED,QAAS,IACTC,KAAM,6HAKZ,CACEN,KAAM,KACNqQ,SAAU,CACR,CACEhQ,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,qGAER,CACED,QAAS,IACTC,KAAM,qGAER,CACED,QAAS,IACTC,KAAM,qOAER,CACE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","file":"js/app.398096e5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseShapeElement.vue?vue&type=style&index=0&id=3ad164fa&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ResizeHandler.vue?vue&type=style&index=0&id=680e5917&lang=scss&scoped=true\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&id=0af9d1a8&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WritingBoard.vue?vue&type=style&index=0&id=7ff9fa00&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=1d4bfa98&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TextStylePanel.vue?vue&type=style&index=0&id=ee8b653e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./StaticTable.vue?vue&type=style&index=0&id=ccbfe89e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ColorButton.vue?vue&type=style&index=0&id=39016b60&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ScreenChartElement.vue?vue&type=style&index=0&id=1423f8c2&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageEllipseOutline.vue?vue&type=style&index=0&id=6655f0f0&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EditableInput.vue?vue&type=style&index=0&id=00ea8dfc&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SymbolPanel.vue?vue&type=style&index=0&id=48704658&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=55178b6a&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MouseSelection.vue?vue&type=style&index=0&id=1619c258&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LayoutPool.vue?vue&type=style&index=0&id=775c4b6c&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SlideThumbnails.vue?vue&type=style&index=0&id=26398174&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=4e59015e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=5e3834d5&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EditableTable.vue?vue&type=style&index=0&id=5cfa4d0e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementAnimationPanel.vue?vue&type=style&index=0&id=34dfe3c2&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MultiPositionPanel.vue?vue&type=style&index=0&id=88d13362&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=10d814ca&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TableStylePanel.vue?vue&type=style&index=0&id=db114f8c&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ChartDataEditor.vue?vue&type=style&index=0&id=39c533c6&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./FullscreenSpin.vue?vue&type=style&index=0&id=6275c730&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageClipHandler.vue?vue&type=style&index=0&id=9e358576&lang=scss&scoped=true\"","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=5a268d2a&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WritingBoardTool.vue?vue&type=style&index=0&id=7a2e5324&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LinkDialog.vue?vue&type=style&index=0&id=02317299&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseTextElement.vue?vue&type=style&index=0&id=2ec235c4&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=21516eb9&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ProsemirrorEditor.vue?vue&type=style&index=0&id=3100bb88&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=30f6d5ed&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImagePolygonOutline.vue?vue&type=style&index=0&id=8d85e878&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementOpacity.vue?vue&type=style&index=0&id=b884607e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=4edd93c1&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CheckboxButtonGroup.vue?vue&type=style&index=0&id=7dafd0a9&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=210672ee&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=03ead815&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ScreenSlide.vue?vue&type=style&index=0&id=a094625a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageStylePanel.vue?vue&type=style&index=0&id=6bffd840&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CheckboxButton.vue?vue&type=style&index=0&id=7cae2b90&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=38044c5a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementOutline.vue?vue&type=style&index=0&id=2d8ce9c0&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ShapeStylePanel.vue?vue&type=style&index=0&id=a62499e8&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LinePool.vue?vue&type=style&index=0&id=6302e570&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=46d959c4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./RotateHandler.vue?vue&type=style&index=0&id=9a549510&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Chart.vue?vue&type=style&index=0&id=1f297efe&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LineStylePanel.vue?vue&type=style&index=0&id=65b24fb3&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AlignmentLine.vue?vue&type=style&index=0&id=2d3eddf5&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseLineElement.vue?vue&type=style&index=0&id=448a7ca0&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementPositionPanel.vue?vue&type=style&index=0&id=655fed44&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ScreenElement.vue?vue&type=style&index=0&id=11126f7d&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseImageElement.vue?vue&type=style&index=0&id=b0d4d1b2&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageRectOutline.vue?vue&type=style&index=0&id=4126ab7f&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=42d1fb1f&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseChartElement.vue?vue&type=style&index=0&id=2d25f60a&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=83da70aa&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=3c0937ee&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseTableElement.vue?vue&type=style&index=0&id=dea016ac&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementShadow.vue?vue&type=style&index=0&id=5cca6474&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SlideDesignPanel.vue?vue&type=style&index=0&id=7c0de296&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SlideAnimationPanel.vue?vue&type=style&index=0&id=647e2618&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementFlip.vue?vue&type=style&index=0&id=6b6342c9&lang=scss&scoped=true\"","\n\n\n\n","export const enum MutationTypes {\r\n\r\n // editor\r\n SET_ACTIVE_ELEMENT_ID_LIST = 'setActiveElementIdList',\r\n SET_HANDLE_ELEMENT_ID = 'setHandleElementId',\r\n SET_ACTIVE_GROUP_ELEMENT_ID = 'setActiveGroupElementId',\r\n SET_CANVAS_PERCENTAGE = 'setCanvasPercentage',\r\n SET_CANVAS_SCALE = 'setCanvasScale',\r\n SET_THUMBNAILS_FOCUS = 'setThumbnailsFocus',\r\n SET_EDITORAREA_FOCUS = 'setEditorAreaFocus',\r\n SET_DISABLE_HOTKEYS_STATE = 'setDisableHotkeysState',\r\n SET_GRID_LINES_STATE = 'setGridLinesState',\r\n SET_CREATING_ELEMENT = 'setCreatingElement',\r\n SET_AVAILABLE_FONTS = 'setAvailableFonts',\r\n SET_TOOLBAR_STATE = 'setToolbarState',\r\n SET_CLIPING_IMAGE_ELEMENT_ID = 'setClipingImageElementId',\r\n SET_RICHTEXT_ATTRS = 'setRichTextAttrs',\r\n SET_SELECTED_TABLE_CELLS = 'setSelectedTableCells',\r\n SET_SCALING_STATE = 'setScalingState',\r\n SET_EDITING_SHAPE_ELEMENT_ID = 'setEditingShapeElementId',\r\n\r\n // slides\r\n SET_THEME = 'setTheme',\r\n SET_VIEWPORT_RATIO = 'setViewportRatio',\r\n SET_SLIDES = 'setSlides',\r\n ADD_SLIDE = 'addSlide',\r\n UPDATE_SLIDE = 'updateSlide',\r\n DELETE_SLIDE = 'deleteSlide',\r\n UPDATE_SLIDE_INDEX = 'updateSlideIndex',\r\n UPDATE_SELECTED_SLIDES_INDEX = 'updateSelectedSlidesIndex',\r\n ADD_ELEMENT = 'addElement',\r\n UPDATE_ELEMENT = 'updateElement',\r\n REMOVE_ELEMENT_PROPS = 'removeElementProps',\r\n\r\n // snapshot\r\n SET_SNAPSHOT_CURSOR = 'setSnapshotCursor',\r\n SET_SNAPSHOT_LENGTH = 'setSnapshotLength',\r\n\r\n // keyboard\r\n SET_CTRL_KEY_STATE = 'setCtrlKeyState',\r\n SET_SHIFT_KEY_STATE = 'setShiftKeyState',\r\n\r\n // screen\r\n SET_SCREENING = 'setScreening',\r\n}\r\n\r\nexport const enum ActionTypes {\r\n INIT_SNAPSHOT_DATABASE = 'initSnapshotDatabase',\r\n ADD_SNAPSHOT = 'addSnapshot',\r\n UN_DO = 'undo',\r\n RE_DO = 'redo',\r\n}","import { Slide } from '@/types/slides'\n\nexport const slides: Slide[] = [\n {\n id: 'test123456',\n elements: [\n {\n type: 'shape',\n id: '4cbRxp',\n left: 0,\n top: 200,\n width: 546,\n height: 362.5,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '#5b9bd5',\n fixedRatio: false,\n opacity: 0.7,\n rotate: 0\n },\n {\n type: 'shape',\n id: 'ookHrf',\n left: 0,\n top: 0,\n width: 300,\n height: 320,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '#5b9bd5',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'idn7Mx',\n left: 355,\n top: 65.25,\n width: 585,\n height: 188,\n lineHeight: 1.2,\n content: '

PPTIST

',\n rotate: 0,\n defaultFontName: 'Microsoft Yahei',\n defaultColor: '#333'\n },\n {\n type: 'text',\n id: '7stmVP',\n left: 355,\n top: 253.25,\n width: 585,\n height: 56,\n content: '

基于 Vue 3.x + TypeScript 的在线演示文稿应用

',\n rotate: 0,\n defaultFontName: 'Microsoft Yahei',\n defaultColor: '#333'\n },\n {\n type: 'line',\n id: 'FnpZs4',\n left: 361,\n top: 238,\n start: [0, 0],\n end: [549, 0],\n points: ['', ''],\n color: '#5b9bd5',\n style: 'solid',\n width: 2,\n },\n ],\n background: {\n type: 'solid',\n color: '#ffffff',\n },\n }\n]","import { SlideTheme } from '@/types/slides'\n\nexport const theme: SlideTheme = {\n themeColor: '#5b9bd5',\n fontColor: '#333',\n fontName: 'Microsoft Yahei',\n backgroundColor: '#fff',\n}","import { Node, NodeType, ResolvedPos, Mark } from 'prosemirror-model'\nimport { EditorState, Selection } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\n\nconst equalNodeType = (nodeType: NodeType, node: Node) => {\n return Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1 || node.type === nodeType\n}\n\nconst findParentNodeClosestToPos = ($pos: ResolvedPos, predicate: (node: Node) => boolean) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i)\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node,\n }\n }\n }\n}\n\nexport const findParentNode = (predicate: (node: Node) => boolean) => {\n return (_ref: Selection) => findParentNodeClosestToPos(_ref.$from, predicate)\n}\n\nexport const findParentNodeOfType = (nodeType: NodeType) => {\n return (selection: Selection) => {\n return findParentNode((node: Node) => {\n return equalNodeType(nodeType, node)\n })(selection)\n }\n}\n\nexport const isActiveOfParentNodeType = (nodeType: string, state: EditorState) => {\n const node = state.schema.nodes[nodeType]\n return !!findParentNodeOfType(node)(state.selection)\n}\n\nexport const getMarkAttrs = (view: EditorView) => {\n const { selection, doc } = view.state\n const { from } = selection\n\n let node = doc.nodeAt(from) || doc.nodeAt(from - 1)\n if (node?.lastChild) node = node.lastChild\n\n return node?.marks || []\n}\n\nexport const getAttrValue = (marks: Mark[], markType: string, attr: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType && mark.attrs[attr]) return mark.attrs[attr]\n }\n return null\n}\n\nexport const isActiveMark = (marks: Mark[], markType: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType) return true\n }\n return false\n}\n\nexport const getAttrValueInSelection = (view: EditorView, attr: string) => {\n const { selection, doc } = view.state\n const { from, to } = selection\n\n let keepChecking = true\n let value = ''\n doc.nodesBetween(from, to, node => {\n if (keepChecking && node.attrs[attr]) {\n keepChecking = false\n value = node.attrs[attr]\n }\n return keepChecking\n })\n return value\n}\n\ninterface DefaultAttrs {\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: string;\n}\nconst _defaultAttrs: DefaultAttrs = {\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n align: 'left',\n}\nexport const getTextAttrs = (view: EditorView, defaultAttrs: DefaultAttrs = {}) => {\n defaultAttrs = { ..._defaultAttrs, ...defaultAttrs }\n\n const marks = getMarkAttrs(view)\n\n const isBold = isActiveMark(marks, 'strong')\n const isEm = isActiveMark(marks, 'em')\n const isUnderline = isActiveMark(marks, 'underline')\n const isStrikethrough = isActiveMark(marks, 'strikethrough')\n const isSuperscript = isActiveMark(marks, 'superscript')\n const isSubscript = isActiveMark(marks, 'subscript')\n const isCode = isActiveMark(marks, 'code')\n const color = getAttrValue(marks, 'forecolor', 'color') || defaultAttrs.color\n const backcolor = getAttrValue(marks, 'backcolor', 'backcolor') || defaultAttrs.backcolor\n const fontsize = getAttrValue(marks, 'fontsize', 'fontsize') || defaultAttrs.fontsize\n const fontname = getAttrValue(marks, 'fontname', 'fontname') || defaultAttrs.fontname\n const align = getAttrValueInSelection(view, 'align') || defaultAttrs.align\n const isBulletList = isActiveOfParentNodeType('bullet_list', view.state)\n const isOrderedList = isActiveOfParentNodeType('ordered_list', view.state)\n const isBlockquote = isActiveOfParentNodeType('blockquote', view.state)\n\n return {\n bold: isBold,\n em: isEm,\n underline: isUnderline,\n strikethrough: isStrikethrough,\n superscript: isSuperscript,\n subscript: isSubscript,\n code: isCode,\n color: color,\n backcolor: backcolor,\n fontsize: fontsize,\n fontname: fontname,\n align: align,\n bulletList: isBulletList,\n orderedList: isOrderedList,\n blockquote: isBlockquote,\n }\n}\n\nexport type TextAttrs = ReturnType\n\nexport const defaultRichTextAttrs: TextAttrs = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n superscript: false,\n subscript: false,\n code: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n align: 'left',\n bulletList: false,\n orderedList: false,\n blockquote: false,\n}","import { Slide, SlideTheme } from '@/types/slides'\r\nimport { CreatingElement } from '@/types/edit'\r\nimport { ToolbarState } from '@/types/toolbar'\r\nimport { slides } from '@/mocks/slides'\r\nimport { theme } from '@/mocks/theme'\r\nimport { SYS_FONTS } from '@/configs/font'\r\nimport { TextAttrs, defaultRichTextAttrs } from '@/utils/prosemirror/utils'\r\n\r\nexport interface State {\r\n activeElementIdList: string[];\r\n handleElementId: string;\r\n activeGroupElementId: string;\r\n canvasPercentage: number;\r\n canvasScale: number;\r\n thumbnailsFocus: boolean;\r\n editorAreaFocus: boolean;\r\n disableHotkeys: boolean;\r\n showGridLines: boolean;\r\n creatingElement: CreatingElement | null;\r\n availableFonts: typeof SYS_FONTS;\r\n toolbarState: ToolbarState;\r\n theme: SlideTheme;\r\n viewportRatio: number;\r\n slides: Slide[];\r\n slideIndex: number;\r\n selectedSlidesIndex: number[];\r\n snapshotCursor: number;\r\n snapshotLength: number;\r\n ctrlKeyState: boolean;\r\n shiftKeyState: boolean;\r\n screening: boolean;\r\n clipingImageElementId: string;\r\n richTextAttrs: TextAttrs;\r\n selectedTableCells: string[];\r\n isScaling: boolean;\r\n editingShapeElementId: string;\r\n}\r\n\r\nexport const state: State = {\r\n activeElementIdList: [], // 被选中的元素ID集合,包含 handleElementId\r\n handleElementId: '', // 正在操作的元素ID\r\n activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID\r\n canvasPercentage: 90, // 画布可视区域百分比\r\n canvasScale: 1, // 画布缩放比例(基于宽度1000px)\r\n thumbnailsFocus: false, // 左侧导航缩略图区域聚焦\r\n editorAreaFocus: false, // 编辑区域聚焦\r\n disableHotkeys: false, // 禁用快捷键\r\n showGridLines: false, // 显示网格线\r\n creatingElement: null, // 正在插入的元素信息,需要绘制插入的元素需要(文字、形状、线条)\r\n availableFonts: [], // 当前环境可用字体\r\n toolbarState: 'slideDesign', // 右侧工具栏状态\r\n viewportRatio: 0.5625, // 可是区域比例,默认16:9\r\n theme: theme, // 主题样式\r\n slides: slides, // 幻灯片页面数据\r\n slideIndex: 0, // 当前页面索引\r\n selectedSlidesIndex: [], // 当前被选中的页面索引集合\r\n snapshotCursor: -1, // 历史快照指针\r\n snapshotLength: 0, // 历史快照长度\r\n ctrlKeyState: false, // ctrl键按下状态\r\n shiftKeyState: false, // shift键按下状态\r\n screening: false, // 是否进入放映状态\r\n clipingImageElementId: '', // 当前正在裁剪的图片ID \r\n richTextAttrs: defaultRichTextAttrs, // 富文本状态\r\n selectedTableCells: [], // 选中的表格单元格\r\n isScaling: false, // 正在进行元素缩放\r\n editingShapeElementId: '', // 当前正处在编辑文字状态的形状ID \r\n}","/* eslint-disable max-lines */\n\nimport { Slide } from '@/types/slides'\n\nexport const layouts: Slide[] = [\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: '4cbRxp',\n left: 0,\n top: 200,\n width: 546,\n height: 362.5,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n opacity: 0.7,\n rotate: 0\n },\n {\n type: 'shape',\n id: 'ookHrf',\n left: 0,\n top: 0,\n width: 300,\n height: 320,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'AkIh3E',\n left: 355,\n top: 95.11111111111111,\n width: 585,\n height: 116,\n lineHeight: 1.2,\n content: '

输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n wordSpace: 6\n },\n {\n type: 'text',\n id: '7stmVP',\n left: 355,\n top: 253.25,\n width: 585,\n height: 56,\n content: '

请在此处输入副标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n },\n {\n type: 'line',\n id: 'FnpZs4',\n left: 361,\n top: 238,\n start: [0, 0],\n end: [549, 0],\n points: ['', ''],\n color: '{{themeColor}}',\n style: 'solid',\n width: 2,\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'ptNnUJ',\n left: 145,\n top: 148,\n width: 711,\n height: 77,\n lineHeight: 1.2,\n content: '

在此处添加标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: 'mRHvQN',\n left: 207.50000000000003,\n top: 249.84259259259264,\n width: 585,\n height: 56,\n content: '

在此处添加副标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'line',\n id: '7CQDwc',\n left: 323.09259259259267,\n top: 238.33333333333334,\n start: [0, 0],\n end: [354.8148148148148, 0],\n points: ['', ''],\n color: '{{themeColor}}',\n style: 'solid',\n width: 4\n }, \n {\n type: 'shape',\n id: '09wqWw',\n left: -27.648148148148138,\n top: 432.73148148148147,\n width: 1056.2962962962963,\n height: 162.96296296296296,\n viewBox: 200,\n path: 'M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'vSheCJ',\n left: 183.5185185185185,\n top: 175.5092592592593,\n width: 605.1851851851851,\n height: 185.18518518518516,\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0\n }, \n {\n type: 'shape',\n id: 'Mpwv7x',\n left: 211.29629629629628,\n top: 201.80555555555557,\n width: 605.1851851851851,\n height: 185.18518518518516,\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n opacity: 0.7\n }, \n {\n type: 'text',\n id: 'WQOTAp',\n left: 304.9074074074074,\n top: 198.10185185185182,\n width: 417.9629629629629,\n height: 140,\n content: '

感谢观看

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n wordSpace: 5\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'MZVO1kkj',\n elements: [\n {\n type: 'shape',\n id: 'cql0h8',\n left: 0,\n top: 0,\n width: 352.59259259259255,\n height: 562.5,\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0\n },\n {\n type: 'shape',\n id: '_RTaF4',\n left: 171.4814814814814,\n top: 100.13888888888887,\n width: 362.22222222222223,\n height: 362.22222222222223,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: 'rgba(255,255,255,0)',\n fixedRatio: false,\n rotate: 0,\n outline: {\n width: 10,\n color: '{{backgroundColor}}',\n style: 'solid'\n }\n },\n {\n type: 'shape',\n id: 'UZfo8N',\n left: 216.66666666666663,\n top: 145.32407407407408,\n width: 271.85185185185185,\n height: 271.85185185185185,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{backgroundColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

01

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n },\n {\n type: 'text',\n id: 'ysqtBg',\n left: 561.4814814814814,\n top: 100.1388888888889,\n width: 359.25925925925924,\n height: 80,\n content: '

在此处输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n },\n {\n type: 'text',\n id: 'lXsoHa',\n left: 572.5925925925925,\n top: 202.3611111111111,\n width: 257.77777777777777,\n height: 260,\n content: '
  1. 在此处输入内容

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n lineHeight: 2,\n fill: '{{subColor}}'\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'EBBnTr',\n left: 360.5996472663139,\n top: 141.8496472663139,\n width: 278.80070546737215,\n height: 278.80070546737215,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 0,\n color: '{{backgroundColor}}',\n style: 'solid'\n }\n }, \n {\n type: 'shape',\n id: 'gDIWDH',\n left: 456.4373897707231,\n top: 98.287037037037,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

1

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'shape',\n id: 'DUWT7E',\n left: 317.037037037037,\n top: 237.68738977072314,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

4

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'shape',\n id: 'pbhn38',\n left: 456.43738977072303,\n top: 377.08774250440916,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

3

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'shape',\n id: 'CvMKrO',\n left: 595.8377425044091,\n top: 237.6873897707231,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

2

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'adudHB',\n left: 402.962962962963,\n top: 39.39814814814815,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: '9UpDwg',\n left: 402.962962962963,\n top: 473.1018518518518,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: 'GERdpB',\n left: 111.48148148148151,\n top: 256.25,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: 'G5qoho',\n left: 691.1111111111111,\n top: 256.25,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'shape',\n id: 'vdZcI6',\n left: 415.18518518518516,\n top: 196.4351851851852,\n width: 169.62962962962962,\n height: 169.62962962962962,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{backgroundColor}}',\n fixedRatio: false,\n rotate: 0\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'tYUmrx',\n left: 156.66666666666683,\n top: 149.02777777777771,\n width: 264.4444444444445,\n height: 264.4444444444445,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

01

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n },\n {\n type: 'shape',\n id: '0GVHf8',\n left: 342.2222222222223,\n top: 217.17592592592587,\n width: 128.14814814814812,\n height: 128.14814814814812,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{backgroundColor}}',\n fixedRatio: false,\n rotate: 0\n },\n {\n type: 'text',\n id: 'BO33Sv',\n left: 378.8888888888889,\n top: 235.24999999999994,\n width: 464.4444444444444,\n height: 92,\n content: '

在此处添加标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'Hj7ttp',\n left: 69.35185185185185,\n top: 49.21759259259262,\n width: 420,\n height: 63,\n lineHeight: 1.2,\n content: '

1.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'FmKMNB',\n left: 69.35185185185185,\n top: 129.28240740740745,\n width: 420,\n height: 384,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'rI7ZeO',\n left: 510.64814814814815,\n top: 49.21759259259262,\n width: 420,\n height: 63,\n lineHeight: 1.2,\n content: '

2.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'KspwGc',\n left: 510.64814814814815,\n top: 129.28240740740745,\n width: 420,\n height: 384,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'Rx63Jo',\n left: 69.35185185185179,\n top: 51.71759259259262,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

1.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'ulyuzE',\n left: 69.35185185185179,\n top: 131.78240740740745,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'kr35Ca',\n left: 510.6481481481481,\n top: 51.71759259259262,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

2.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'BNQSpC',\n left: 510.6481481481481,\n top: 131.78240740740745,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'Vr38Nu',\n left: 69.35185185185185,\n top: 301.71759259259255,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

3.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'IwKRSu',\n left: 69.35185185185185,\n top: 381.7824074074074,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: '0Opr1v',\n left: 510.64814814814815,\n top: 301.71759259259255,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

4.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: '4L9Uzz',\n left: 510.64814814814815,\n top: 381.7824074074074,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'GdEGxg',\n left: 134.53703703703704,\n top: 127.25,\n width: 152.77777777777777,\n height: 308,\n lineHeight: 1.8,\n content: '

请在此处输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n wordSpace: 8,\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'y5sAfw',\n left: 332.8703703703704,\n top: 127.25,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容1

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'VeuocM',\n left: 332.8703703703704,\n top: 212.0648148148148,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容2

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'RyFWQe',\n left: 332.8703703703704,\n top: 296.8796296296296,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容3

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'Q56viI',\n left: 332.8703703703704,\n top: 381.69444444444446,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容4

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'SUWirT',\n left: 73.8888888888889,\n top: 64.21296296296302,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

1

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'YjzN1M',\n left: 148.70370370370372,\n top: 64.21296296296302,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'fS09I7',\n left: 527.5925925925926,\n top: 64.21296296296302,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

2

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'qCnfB1',\n left: 602.4074074074074,\n top: 64.21296296296302,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n },\n {\n type: 'shape',\n id: 'difAAT',\n left: 73.8888888888889,\n top: 221.25000000000003,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

3

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'EUlvMo',\n left: 148.70370370370372,\n top: 221.25000000000003,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'US_9jB',\n left: 527.5925925925926,\n top: 221.25000000000003,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

4

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: '243MnQ',\n left: 602.4074074074074,\n top: 221.25000000000003,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'Y_KUj0',\n left: 73.8888888888889,\n top: 378.287037037037,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

5

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: '9GglMe',\n left: 148.70370370370372,\n top: 378.287037037037,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'eSInje',\n left: 527.5925925925926,\n top: 378.287037037037,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

6

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: '0S3yUg',\n left: 602.4074074074074,\n top: 378.287037037037,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n]","import { GetterTree } from 'vuex'\r\nimport tinycolor from 'tinycolor2'\r\nimport { State } from './state'\r\nimport { layouts } from '@/mocks/layout'\r\n\r\nexport const getters: GetterTree = {\r\n currentSlide(state) {\r\n return state.slides[state.slideIndex] || null\r\n },\r\n\r\n currentSlideAnimations(state) {\r\n const currentSlide = state.slides[state.slideIndex]\r\n if (!currentSlide) return null\r\n const animations = currentSlide.animations\r\n if (!animations) return null\r\n\r\n const els = currentSlide.elements\r\n const elIds = els.map(el => el.id)\r\n return animations.filter(animation => elIds.includes(animation.elId))\r\n },\r\n\r\n layouts(state) {\r\n const {\r\n themeColor,\r\n fontColor,\r\n fontName,\r\n backgroundColor,\r\n } = state.theme\r\n\r\n const subColor = tinycolor(fontColor).isDark() ? 'rgba(230, 230, 230, 0.5)' : 'rgba(180, 180, 180, 0.5)'\r\n\r\n const layoutsString = JSON.stringify(layouts)\r\n .replaceAll('{{themeColor}}', themeColor)\r\n .replaceAll('{{fontColor}}', fontColor)\r\n .replaceAll('{{fontName}}', fontName)\r\n .replaceAll('{{backgroundColor}}', backgroundColor)\r\n .replaceAll('{{subColor}}', subColor)\r\n \r\n return JSON.parse(layoutsString)\r\n },\r\n\r\n activeElementList(state) {\r\n const currentSlide = state.slides[state.slideIndex]\r\n if (!currentSlide || !currentSlide.elements) return []\r\n return currentSlide.elements.filter(element => state.activeElementIdList.includes(element.id))\r\n },\r\n\r\n handleElement(state) {\r\n const currentSlide = state.slides[state.slideIndex]\r\n if (!currentSlide || !currentSlide.elements) return null\r\n return currentSlide.elements.find(element => state.handleElementId === element.id) || null\r\n },\r\n\r\n canUndo(state) {\r\n return state.snapshotCursor > 0\r\n },\r\n\r\n canRedo(state) {\r\n return state.snapshotCursor < state.snapshotLength - 1\r\n },\r\n\r\n ctrlOrShiftKeyActive(state) {\r\n return state.ctrlKeyState || state.shiftKeyState\r\n },\r\n}","import Dexie from 'dexie'\nimport { Slide } from '@/types/slides'\n\nexport interface Snapshot {\n index: number;\n slides: Slide[];\n}\n\nclass SnapshotDatabase extends Dexie {\n public snapshots: Dexie.Table\n\n public constructor() {\n super('SnapshotDatabase')\n this.version(1).stores({\n snapshots: '++id'\n })\n this.snapshots = this.table('snapshots')\n }\n}\n\nexport const snapshotDB = new SnapshotDatabase()","import { ActionTree } from 'vuex'\nimport { IndexableTypeArray } from 'dexie'\nimport { State } from './state'\nimport { ActionTypes, MutationTypes } from './constants'\nimport { snapshotDB, Snapshot } from '@/utils/database'\n\nexport const actions: ActionTree = {\n async [ActionTypes.INIT_SNAPSHOT_DATABASE]({ commit, state }) {\n const snapshots: Snapshot[] = await snapshotDB.snapshots.orderBy('id').toArray()\n const lastSnapshot = snapshots.slice(-1)[0]\n\n if (lastSnapshot) {\n snapshotDB.snapshots.clear()\n }\n\n const newFirstSnapshot = {\n index: state.slideIndex,\n slides: state.slides,\n }\n await snapshotDB.snapshots.add(newFirstSnapshot)\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, 0)\n commit(MutationTypes.SET_SNAPSHOT_LENGTH, 1)\n },\n\n async [ActionTypes.ADD_SNAPSHOT]({ state, commit }) {\n\n // 获取当前indexeddb中全部快照的ID\n const allKeys = await snapshotDB.snapshots.orderBy('id').keys()\n\n let needDeleteKeys: IndexableTypeArray = []\n\n // 记录需要删除的快照ID\n // 若当前快照指针不处在最后一位,那么再添加快照时,应该将当前指针位置后面的快照全部删除,对应的实际情况是:\n // 用户撤回多次后,再进行操作(添加快照),此时原先被撤销的快照都应该被删除\n if (state.snapshotCursor >= 0 && state.snapshotCursor < allKeys.length - 1) {\n needDeleteKeys = allKeys.slice(state.snapshotCursor + 1)\n }\n\n // 添加新快照\n const snapshot = {\n index: state.slideIndex,\n slides: state.slides,\n }\n await snapshotDB.snapshots.add(snapshot)\n\n // 计算当前快照长度,用于设置快照指针的位置(此时指针应该处在最后一位,即:快照长度 - 1)\n let snapshotLength = allKeys.length - needDeleteKeys.length + 1\n\n // 快照数量超过长度限制时,应该将头部多余的快照删除\n const snapshotLengthLimit = 20\n if (snapshotLength > snapshotLengthLimit) {\n needDeleteKeys.push(allKeys[0])\n snapshotLength--\n }\n\n // 快照数大于1时,需要保证撤回操作后维持页面焦点不变:也就是将倒数第二个快照对应的索引设置为当前页的索引\n // https://github.com/pipipi-pikachu/PPTist/issues/27\n if (snapshotLength >= 2) {\n snapshotDB.snapshots.update(allKeys[snapshotLength - 2] as number, { index: state.slideIndex })\n }\n\n await snapshotDB.snapshots.bulkDelete(needDeleteKeys)\n\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, snapshotLength - 1)\n commit(MutationTypes.SET_SNAPSHOT_LENGTH, snapshotLength)\n },\n\n async [ActionTypes.UN_DO]({ state, commit }) {\n if (state.snapshotCursor <= 0) return\n\n const snapshotCursor = state.snapshotCursor - 1\n const snapshots: Snapshot[] = await snapshotDB.snapshots.orderBy('id').toArray()\n const snapshot = snapshots[snapshotCursor]\n const { index, slides } = snapshot\n\n const slideIndex = index > slides.length - 1 ? slides.length - 1 : index\n\n commit(MutationTypes.SET_SLIDES, slides)\n commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex)\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, snapshotCursor)\n commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n },\n\n async [ActionTypes.RE_DO]({ state, commit }) {\n if (state.snapshotCursor >= state.snapshotLength - 1) return\n\n const snapshotCursor = state.snapshotCursor + 1\n const snapshots: Snapshot[] = await snapshotDB.snapshots.orderBy('id').toArray()\n const snapshot = snapshots[snapshotCursor]\n const { index, slides } = snapshot\n\n const slideIndex = index > slides.length - 1 ? slides.length - 1 : index\n\n commit(MutationTypes.SET_SLIDES, slides)\n commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex)\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, snapshotCursor)\n commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n },\n}","export const SYS_FONTS = [\n { label: 'Arial', value: 'Arial' },\n { label: '微软雅黑', value: 'Microsoft Yahei' },\n { label: '宋体', value: 'SimSun' },\n { label: '黑体', value: 'SimHei' },\n { label: '楷体', value: 'KaiTi' },\n { label: '新宋体', value: 'NSimSun' },\n { label: '仿宋', value: 'FangSong' },\n { label: '苹方', value: 'PingFang SC' },\n { label: '华文黑体', value: 'STHeiti' },\n { label: '华文楷体', value: 'STKaiti' },\n { label: '华文宋体', value: 'STSong' },\n { label: '华文仿宋', value: 'STFangSong' },\n { label: '华文中宋', value: 'STZhongSong' },\n { label: '华文琥珀', value: 'STHupo' },\n { label: '华文新魏', value: 'STXinwei' },\n { label: '华文隶书', value: 'STLiti' },\n { label: '华文行楷', value: 'STXingkai' },\n { label: '冬青黑体', value: 'Hiragino Sans GB' },\n { label: '兰亭黑', value: 'Lantinghei SC' },\n { label: '偏偏体', value: 'Hanzipen SC' },\n { label: '手札体', value: 'Hannotate SC' },\n { label: '宋体', value: 'Songti SC' },\n { label: '娃娃体', value: 'Wawati SC' },\n { label: '行楷', value: 'Xingkai SC' },\n { label: '圆体', value: 'Yuanti SC' },\n { label: '华文细黑', value: 'STXihei' },\n { label: '幼圆', value: 'YouYuan' },\n { label: '隶书', value: 'LiSu' },\n]\n\nexport const WEB_FONTS = [\n { label: '仓耳小丸子', value: '仓耳小丸子' },\n { label: '优设标题黑', value: '优设标题黑' },\n { label: '峰广明锐体', value: '峰广明锐体' },\n { label: '摄图摩登小方体', value: '摄图摩登小方体' },\n { label: '站酷快乐体', value: '站酷快乐体' },\n { label: '字制区喜脉体', value: '字制区喜脉体' },\n { label: '素材集市康康体', value: '素材集市康康体' },\n { label: '联盟起艺卢帅正锐黑体', value: '联盟起艺卢帅正锐黑体' },\n { label: '素材集市酷方体', value: '素材集市酷方体' },\n { label: '途牛类圆体', value: '途牛类圆体' },\n { label: '锐字真言体', value: '锐字真言体' },\n { label: '阿里汉仪智能黑体', value: '阿里汉仪智能黑体' },\n]","/**\n * 判断操作系统是否存在某字体\n * @param fontName 字体名\n */\nexport const isSupportFont = (fontName: string) => {\n if (typeof fontName !== 'string') return false\n\n const arial = 'Arial'\n if (fontName.toLowerCase() === arial.toLowerCase()) return true\n\n const size = 100\n const width = 100\n const height = 100\n const str = 'a'\n\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n\n if (!ctx) return false\n\n canvas.width = width\n canvas.height = height\n ctx.textAlign = 'center'\n ctx.fillStyle = 'black'\n ctx.textBaseline = 'middle'\n\n const getDotArray = (_fontFamily: string) => {\n ctx.clearRect(0, 0, width, height)\n ctx.font = `${size}px ${_fontFamily}, ${arial}`\n ctx.fillText(str, width / 2, height / 2)\n const imageData = ctx.getImageData(0, 0, width, height).data\n return [].slice.call(imageData).filter(item => item !== 0)\n }\n\n return getDotArray(arial).join('') !== getDotArray(fontName).join('')\n}","import { MutationTree } from 'vuex'\r\nimport { omit } from 'lodash'\r\nimport { MutationTypes } from './constants'\r\nimport { State } from './state'\r\nimport { Slide, PPTElement, SlideTheme } from '@/types/slides'\r\nimport { CreatingElement } from '@/types/edit'\r\nimport { SYS_FONTS } from '@/configs/font'\r\nimport { isSupportFont } from '@/utils/font'\r\nimport { ToolbarState } from '@/types/toolbar'\r\nimport { TextAttrs } from '@/utils/prosemirror/utils'\r\n\r\ninterface RemoveElementPropData {\r\n id: string;\r\n propName: string | string[];\r\n}\r\n\r\ninterface UpdateElementData {\r\n id: string | string[];\r\n props: Partial;\r\n}\r\n\r\nexport const mutations: MutationTree = {\r\n\r\n // editor\r\n\r\n [MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST](state, activeElementIdList: string[]) {\r\n if (activeElementIdList.length === 1) state.handleElementId = activeElementIdList[0]\r\n else state.handleElementId = ''\r\n \r\n state.activeElementIdList = activeElementIdList\r\n },\r\n \r\n [MutationTypes.SET_HANDLE_ELEMENT_ID](state, handleElementId: string) {\r\n state.handleElementId = handleElementId\r\n },\r\n \r\n [MutationTypes.SET_ACTIVE_GROUP_ELEMENT_ID](state, activeGroupElementId: string) {\r\n state.activeGroupElementId = activeGroupElementId\r\n },\r\n\r\n [MutationTypes.SET_CANVAS_PERCENTAGE](state, percentage: number) {\r\n state.canvasPercentage = percentage\r\n },\r\n\r\n [MutationTypes.SET_CANVAS_SCALE](state, scale: number) {\r\n state.canvasScale = scale\r\n },\r\n\r\n [MutationTypes.SET_THUMBNAILS_FOCUS](state, isFocus: boolean) {\r\n state.thumbnailsFocus = isFocus\r\n },\r\n\r\n [MutationTypes.SET_EDITORAREA_FOCUS](state, isFocus: boolean) {\r\n state.editorAreaFocus = isFocus\r\n },\r\n\r\n [MutationTypes.SET_DISABLE_HOTKEYS_STATE](state, disable: boolean) {\r\n state.disableHotkeys = disable\r\n },\r\n\r\n [MutationTypes.SET_GRID_LINES_STATE](state, show: boolean) {\r\n state.showGridLines = show\r\n },\r\n\r\n [MutationTypes.SET_CREATING_ELEMENT](state, element: CreatingElement | null) {\r\n state.creatingElement = element\r\n },\r\n\r\n [MutationTypes.SET_AVAILABLE_FONTS](state) {\r\n state.availableFonts = SYS_FONTS.filter(font => isSupportFont(font.value))\r\n },\r\n\r\n [MutationTypes.SET_TOOLBAR_STATE](state, toolbarState: ToolbarState) {\r\n state.toolbarState = toolbarState\r\n },\r\n\r\n [MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID](state, elId: string) {\r\n state.clipingImageElementId = elId\r\n },\r\n\r\n [MutationTypes.SET_RICHTEXT_ATTRS](state, attrs: TextAttrs) {\r\n state.richTextAttrs = attrs\r\n },\r\n\r\n [MutationTypes.SET_SELECTED_TABLE_CELLS](state, cells: string[]) {\r\n state.selectedTableCells = cells\r\n },\r\n\r\n [MutationTypes.SET_SCALING_STATE](state, isScaling: boolean) {\r\n state.isScaling = isScaling\r\n },\r\n\r\n [MutationTypes.SET_EDITING_SHAPE_ELEMENT_ID](state, ellId: string) {\r\n state.editingShapeElementId = ellId\r\n },\r\n\r\n // slides\r\n\r\n [MutationTypes.SET_THEME](state, themeProps: Partial) {\r\n state.theme = { ...state.theme, ...themeProps }\r\n },\r\n\r\n [MutationTypes.SET_VIEWPORT_RATIO](state, viewportRatio: number) {\r\n state.viewportRatio = viewportRatio\r\n },\r\n\r\n [MutationTypes.SET_SLIDES](state, slides: Slide[]) {\r\n state.slides = slides\r\n },\r\n\r\n [MutationTypes.ADD_SLIDE](state, slide: Slide | Slide[]) {\r\n const slides = Array.isArray(slide) ? slide : [slide]\r\n const addIndex = state.slideIndex + 1\r\n state.slides.splice(addIndex, 0, ...slides)\r\n state.slideIndex = addIndex\r\n },\r\n\r\n [MutationTypes.UPDATE_SLIDE](state, props: Partial) {\r\n const slideIndex = state.slideIndex\r\n state.slides[slideIndex] = { ...state.slides[slideIndex], ...props }\r\n },\r\n\r\n [MutationTypes.DELETE_SLIDE](state, slideId: string | string[]) {\r\n const slidesId = Array.isArray(slideId) ? slideId : [slideId]\r\n\r\n const deleteSlidesIndex = []\r\n for (let i = 0; i < slidesId.length; i++) {\r\n const index = state.slides.findIndex(item => item.id === slidesId[i])\r\n deleteSlidesIndex.push(index)\r\n }\r\n let newIndex = Math.min(...deleteSlidesIndex)\r\n\r\n const maxIndex = state.slides.length - slidesId.length - 1\r\n if (newIndex > maxIndex) newIndex = maxIndex\r\n\r\n state.slideIndex = newIndex\r\n state.slides = state.slides.filter(item => !slidesId.includes(item.id))\r\n },\r\n\r\n [MutationTypes.UPDATE_SLIDE_INDEX](state, index: number) {\r\n state.slideIndex = index\r\n },\r\n\r\n [MutationTypes.UPDATE_SELECTED_SLIDES_INDEX](state, selectedSlidesIndex: number[]) {\r\n state.selectedSlidesIndex = selectedSlidesIndex\r\n },\r\n\r\n [MutationTypes.ADD_ELEMENT](state, element: PPTElement | PPTElement[]) {\r\n const elements = Array.isArray(element) ? element : [element]\r\n const currentSlideEls = state.slides[state.slideIndex].elements\r\n const newEls = [...currentSlideEls, ...elements]\r\n state.slides[state.slideIndex].elements = newEls\r\n },\r\n\r\n [MutationTypes.UPDATE_ELEMENT](state, data: UpdateElementData) {\r\n const { id, props } = data\r\n const elIdList = typeof id === 'string' ? [id] : id\r\n\r\n const slideIndex = state.slideIndex\r\n const slide = state.slides[slideIndex]\r\n const elements = slide.elements.map(el => {\r\n return elIdList.includes(el.id) ? { ...el, ...props } : el\r\n })\r\n state.slides[slideIndex].elements = (elements as PPTElement[])\r\n },\r\n\r\n [MutationTypes.REMOVE_ELEMENT_PROPS](state, data: RemoveElementPropData) {\r\n const { id, propName } = data\r\n const propsNames = typeof propName === 'string' ? [propName] : propName\r\n\r\n const slideIndex = state.slideIndex\r\n const slide = state.slides[slideIndex]\r\n const elements = slide.elements.map(el => {\r\n return el.id === id ? omit(el, propsNames) : el\r\n })\r\n state.slides[slideIndex].elements = (elements as PPTElement[])\r\n },\r\n\r\n // snapshot\r\n\r\n [MutationTypes.SET_SNAPSHOT_CURSOR](state, cursor: number) {\r\n state.snapshotCursor = cursor\r\n },\r\n\r\n [MutationTypes.SET_SNAPSHOT_LENGTH](state, length: number) {\r\n state.snapshotLength = length\r\n },\r\n\r\n // keyboard\r\n\r\n [MutationTypes.SET_CTRL_KEY_STATE](state, isActive: boolean) {\r\n state.ctrlKeyState = isActive\r\n },\r\n [MutationTypes.SET_SHIFT_KEY_STATE](state, isActive: boolean) {\r\n state.shiftKeyState = isActive\r\n },\r\n\r\n // screen\r\n\r\n [MutationTypes.SET_SCREENING](state, screening) {\r\n state.screening = screening\r\n },\r\n}","import { InjectionKey } from 'vue'\nimport { createStore, Store, useStore as baseUseStore } from 'vuex'\nimport { state, State } from './state'\nimport { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { MutationTypes, ActionTypes } from './constants'\n\nexport { MutationTypes, ActionTypes }\n\nexport const key: InjectionKey> = Symbol()\n\nexport const store = createStore({\n state,\n getters,\n mutations,\n actions,\n})\n\nexport const useStore = () => baseUseStore(key)","import { ShapePoolItem } from '@/configs/shapes'\r\nimport { LinePoolItem } from '@/configs/lines'\r\n\r\nexport type ElementOrderCommand = 'up' | 'down' | 'top' | 'bottom'\r\n\r\nexport const enum ElementOrderCommands {\r\n UP = 'up',\r\n DOWN = 'down',\r\n TOP = 'top',\r\n BOTTOM = 'bottom',\r\n}\r\n\r\nexport type ElementAlignCommand = 'top'| 'bottom' | 'left' | 'right' | 'vertical' | 'horizontal' | 'center'\r\n\r\nexport const enum ElementAlignCommands {\r\n TOP = 'top',\r\n BOTTOM = 'bottom',\r\n LEFT = 'left',\r\n RIGHT = 'right',\r\n VERTICAL = 'vertical',\r\n HORIZONTAL = 'horizontal',\r\n CENTER = 'center',\r\n}\r\n\r\nexport type OperateBorderLine = 'top' | 'bottom' | 'left' | 'right'\r\n\r\nexport const enum OperateBorderLines {\r\n T = 'top',\r\n B = 'bottom',\r\n L = 'left',\r\n R = 'right',\r\n}\r\n\r\nexport type OperateResizeHandler = '' | 'left-top' | 'top' | 'right-top' | 'left' | 'right' | 'left-bottom' | 'bottom' | 'right-bottom'\r\n\r\nexport const enum OperateResizeHandlers {\r\n LEFT_TOP = 'left-top',\r\n TOP = 'top',\r\n RIGHT_TOP = 'right-top',\r\n LEFT = 'left',\r\n RIGHT = 'right',\r\n LEFT_BOTTOM = 'left-bottom',\r\n BOTTOM = 'bottom',\r\n RIGHT_BOTTOM = 'right-bottom',\r\n}\r\n\r\nexport type OperateLineHandler = 'start' | 'end' | 'mid'\r\n\r\nexport const enum OperateLineHandlers {\r\n START = 'start',\r\n END = 'end',\r\n MID = 'mid',\r\n}\r\n\r\nexport interface AlignmentLineAxis {\r\n x: number; \r\n y: number;\r\n}\r\n\r\nexport interface AlignmentLineProps {\r\n type: 'vertical' | 'horizontal';\r\n axis: AlignmentLineAxis;\r\n length: number;\r\n}\r\n\r\nexport interface MultiSelectRange {\r\n minX: number;\r\n maxX: number;\r\n minY: number;\r\n maxY: number;\r\n}\r\n\r\nexport type ImageClipDataRange = [[number, number], [number, number]]\r\n\r\nexport interface ImageClipData {\r\n range: ImageClipDataRange;\r\n path: string;\r\n}\r\n\r\nexport interface ImageClipedEmitData {\r\n range: ImageClipDataRange;\r\n position: {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n };\r\n}\r\n\r\nexport interface CreateElementSelectionData {\r\n start: [number, number];\r\n end: [number, number];\r\n}\r\n\r\nexport interface CreatingTextElement {\r\n type: 'text';\r\n}\r\nexport interface CreatingShapeElement {\r\n type: 'shape';\r\n data: ShapePoolItem;\r\n}\r\nexport interface CreatingLineElement {\r\n type: 'line';\r\n data: LinePoolItem;\r\n}\r\nexport type CreatingElement = CreatingTextElement | CreatingShapeElement | CreatingLineElement","export const enum KEYS {\n C = 'C',\n X = 'X',\n Z = 'Z',\n Y = 'Y',\n A = 'A',\n G = 'G',\n L = 'L',\n F = 'F',\n D = 'D',\n B = 'B',\n MINUS = '-',\n EQUAL = '=',\n DIGIT_0 = '0',\n DELETE = 'DELETE',\n UP = 'ARROWUP',\n DOWN = 'ARROWDOWN',\n LEFT = 'ARROWLEFT',\n RIGHT = 'ARROWRIGHT',\n ENTER = 'ENTER',\n SPACE = ' ',\n TAB = 'TAB',\n BACKSPACE = 'BACKSPACE',\n}\n\nexport const HOTKEY_DOC = [\n {\n type: '通用',\n children: [\n { label: '剪切', value: 'Ctrl + X' },\n { label: '复制', value: 'Ctrl + C' },\n { label: '粘贴', value: 'Ctrl + V' },\n { label: '快速复制粘贴', value: 'Ctrl + D' },\n { label: '全选', value: 'Ctrl + A' },\n { label: '撤销', value: 'Ctrl + Z' },\n { label: '恢复', value: 'Ctrl + Y' },\n { label: '删除', value: 'Delete / Backspace' },\n { label: '多选', value: '按住 Ctrl 或 Shift' },\n ],\n },\n {\n type: '幻灯片放映',\n children: [\n { label: '开始放映幻灯片', value: 'Ctrl + F' },\n { label: '切换上一页', value: '↑ / ←' },\n { label: '切换下一页', value: '↓ / → / Enter / Space' },\n { label: '退出放映', value: 'ESC' },\n ],\n },\n {\n type: '幻灯片编辑',\n children: [\n { label: '新建幻灯片', value: 'Enter' },\n { label: '缩放画布', value: 'Ctrl + 鼠标滚动' },\n { label: '放大画布', value: 'Ctrl + =' },\n { label: '缩小画布', value: 'Ctrl + -' },\n { label: '缩放画布到合适大小', value: 'Ctrl + 0' },\n { label: '编辑上一页', value: '↑ / ← / 鼠标上滚' },\n { label: '编辑下一页', value: '↓ / → / 鼠标下滚' },\n ],\n },\n {\n type: '元素操作',\n children: [\n { label: '移动', value: '↑ / ← / ↓ / →' },\n { label: '锁定', value: 'Ctrl + L' },\n { label: '组合', value: 'Ctrl + G' },\n { label: '取消组合', value: 'Ctrl + Shift + G' },\n { label: '置顶层', value: 'Alt + F' },\n { label: '置底层', value: 'Alt + B' },\n { label: '锁定宽高比例', value: '按住 Ctrl 或 Shift' },\n { label: '创建水平 / 垂直线条', value: '按住 Ctrl 或 Shift' },\n { label: '切换焦点元素', value: 'Tab' },\n { label: '确认图片裁剪', value: 'Enter' },\n ],\n },\n {\n type: '表格编辑',\n children: [\n { label: '聚焦到下一个单元格', value: 'Tab' },\n { label: '在上方插入一行', value: 'Ctrl + ↑' },\n { label: '在下方插入一行', value: 'Ctrl + ↓' },\n { label: '在左侧插入一列', value: 'Ctrl + ←' },\n { label: '在右侧插入一列', value: 'Ctrl + →' },\n ],\n },\n {\n type: '图表数据编辑',\n children: [\n { label: '聚焦到下一行', value: 'Enter' },\n ],\n },\n {\n type: '文本编辑',\n children: [\n { label: '加粗', value: 'Ctrl + B' },\n { label: '斜体', value: 'Ctrl + I' },\n { label: '下划线', value: 'Ctrl + U' },\n { label: '删除线', value: 'Ctrl + D' },\n ],\n },\n]","\n\n\n\n","import { padStart } from 'lodash'\n\n/**\n * 生成随机码\n * @param len 随机码长度\n */\nexport const createRandomCode = (len = 6) => {\n const charset = `_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`\n const maxLen = charset.length\n let ret = ''\n for (let i = 0; i < len; i++) {\n const randomIndex = Math.floor(Math.random() * maxLen)\n ret += charset[randomIndex]\n }\n return ret\n}\n\n/**\n * 补足数字位数\n * @param digit 数字\n * @param len 位数\n */\nexport const fillDigit = (digit: number, len: number) => {\n return padStart('' + digit, len, '0')\n}","import CryptoJS from 'crypto-js'\n\nconst CRYPTO_KEY = 'pptist'\n\n/**\n * 加密\n * @param msg 待加密字符串\n */\nexport const encrypt = (msg: string) => {\n return CryptoJS.AES.encrypt(msg, CRYPTO_KEY).toString()\n}\n\n/**\n * 解密\n * @param ciphertext 待解密字符串\n */\nexport const decrypt = (ciphertext: string) => {\n const bytes = CryptoJS.AES.decrypt(ciphertext, CRYPTO_KEY)\n return bytes.toString(CryptoJS.enc.Utf8)\n}","import Clipboard from 'clipboard'\nimport { decrypt } from '@/utils/crypto'\n\n/**\n * 复制文本到剪贴板\n * @param text 文本内容\n */\nexport const copyText = (text: string) => {\n return new Promise((resolve, reject) => {\n const fakeElement = document.createElement('button')\n const clipboard = new Clipboard(fakeElement, {\n text: () => text,\n action: () => 'copy',\n container: document.body,\n })\n clipboard.on('success', e => {\n clipboard.destroy()\n resolve(e)\n })\n clipboard.on('error', e => {\n clipboard.destroy()\n reject(e)\n })\n document.body.appendChild(fakeElement)\n fakeElement.click()\n document.body.removeChild(fakeElement)\n })\n}\n\n// 读取剪贴板\nexport const readClipboard = (): Promise => {\n return new Promise((resolve, reject) => {\n if (navigator.clipboard?.readText) {\n navigator.clipboard.readText().then(text => {\n if (!text) reject('剪贴板为空或者不包含文本')\n return resolve(text)\n })\n }\n else reject('浏览器不支持或禁止访问剪贴板,请使用快捷键 Ctrl + V')\n })\n}\n\n// 解析加密后的剪贴板内容\nexport const pasteCustomClipboardString = (text: string) => {\n let clipboardData\n try {\n clipboardData = JSON.parse(decrypt(text))\n }\n catch {\n clipboardData = text\n }\n\n return clipboardData\n}\n\n// 尝试解析剪贴板内容是否为Excel表格(或类似的)数据格式\nexport const pasteExcelClipboardString = (text: string): string[][] | boolean => {\n const lines: string[] = text.split('\\r\\n')\n\n if (lines[lines.length - 1] === '') lines.pop()\n\n let colCount = -1\n const data: string[][] = []\n for (const index in lines) {\n data[index] = lines[index].split('\\t')\n\n if (data[index].length === 1) return false\n if (colCount === -1) colCount = data[index].length\n else if (colCount !== data[index].length) return false\n }\n return data\n}","import tinycolor from 'tinycolor2'\r\nimport { PPTElement, PPTLineElement } from '@/types/slides'\r\nimport { createRandomCode } from '@/utils/common'\r\n\r\ninterface RotatedElementData {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n rotate: number;\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置范围\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedRange = (element: RotatedElementData) => {\r\n const { left, top, width, height, rotate = 0 } = element\r\n\r\n const radius = Math.sqrt( Math.pow(width, 2) + Math.pow(height, 2) ) / 2\r\n const auxiliaryAngle = Math.atan(height / width) * 180 / Math.PI\r\n\r\n const tlbraRadian = (180 - rotate - auxiliaryAngle) * Math.PI / 180\r\n const trblaRadian = (auxiliaryAngle - rotate) * Math.PI / 180\r\n\r\n const middleLeft = left + width / 2\r\n const middleTop = top + height / 2\r\n\r\n const xAxis = [\r\n middleLeft + radius * Math.cos(tlbraRadian),\r\n middleLeft + radius * Math.cos(trblaRadian),\r\n middleLeft - radius * Math.cos(tlbraRadian),\r\n middleLeft - radius * Math.cos(trblaRadian),\r\n ]\r\n const yAxis = [\r\n middleTop - radius * Math.sin(tlbraRadian),\r\n middleTop - radius * Math.sin(trblaRadian),\r\n middleTop + radius * Math.sin(tlbraRadian),\r\n middleTop + radius * Math.sin(trblaRadian),\r\n ]\r\n\r\n return {\r\n xRange: [Math.min(...xAxis), Math.max(...xAxis)],\r\n yRange: [Math.min(...yAxis), Math.max(...yAxis)],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置与旋转之前位置的偏离距离\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedOffset = (element: RotatedElementData) => {\r\n const { xRange: originXRange, yRange: originYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: 0,\r\n })\r\n const { xRange: rotatedXRange, yRange: rotatedYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n return {\r\n offsetX: rotatedXRange[0] - originXRange[0],\r\n offsetY: rotatedYRange[0] - originYRange[0],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的位置范围\r\n * @param element 元素信息\r\n */\r\nexport const getElementRange = (element: PPTElement) => {\r\n let minX, maxX, minY, maxY\r\n\r\n if (element.type === 'line') {\r\n minX = element.left\r\n maxX = element.left + Math.max(element.start[0], element.end[0])\r\n minY = element.top\r\n maxY = element.top + Math.max(element.start[1], element.end[1])\r\n }\r\n else if ('rotate' in element && element.rotate) {\r\n const { left, top, width, height, rotate } = element\r\n const { xRange, yRange } = getRectRotatedRange({ left, top, width, height, rotate })\r\n minX = xRange[0]\r\n maxX = xRange[1]\r\n minY = yRange[0]\r\n maxY = yRange[1]\r\n }\r\n else {\r\n minX = element.left\r\n maxX = element.left + element.width\r\n minY = element.top\r\n maxY = element.top + element.height\r\n }\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\n/**\r\n * 计算一组元素在画布中的位置范围\r\n * @param elementList 一组元素信息\r\n */\r\nexport const getElementListRange = (elementList: PPTElement[]) => {\r\n const leftValues: number[] = []\r\n const topValues: number[] = []\r\n const rightValues: number[] = []\r\n const bottomValues: number[] = []\r\n\r\n elementList.forEach(element => {\r\n const { minX, maxX, minY, maxY } = getElementRange(element)\r\n leftValues.push(minX)\r\n topValues.push(minY)\r\n rightValues.push(maxX)\r\n bottomValues.push(maxY)\r\n })\r\n\r\n const minX = Math.min(...leftValues)\r\n const maxX = Math.max(...rightValues)\r\n const minY = Math.min(...topValues)\r\n const maxY = Math.max(...bottomValues)\r\n\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\nexport interface AlignLine {\r\n value: number;\r\n range: [number, number];\r\n}\r\n\r\n/**\r\n * 将一组对齐吸附线进行去重:同位置的的多条对齐吸附线仅留下一条,取该位置所有对齐吸附线的最大值和最小值为新的范围\r\n * @param lines 一组对齐吸附线信息\r\n */\r\nexport const uniqAlignLines = (lines: AlignLine[]) => {\r\n const uniqLines: AlignLine[] = []\r\n lines.forEach(line => {\r\n const index = uniqLines.findIndex(_line => _line.value === line.value)\r\n if (index === -1) uniqLines.push(line)\r\n else {\r\n const uniqLine = uniqLines[index]\r\n const rangeMin = Math.min(uniqLine.range[0], line.range[0])\r\n const rangeMax = Math.max(uniqLine.range[1], line.range[1])\r\n const range: [number, number] = [rangeMin, rangeMax]\r\n const _line = { value: line.value, range }\r\n uniqLines[index] = _line\r\n }\r\n })\r\n return uniqLines\r\n}\r\n\r\n/**\r\n * 以元素列表为基础,为每一个元素生成新的ID,并关联到旧ID形成一个字典\r\n * 主要用于复制元素时,维持数据中各处元素ID原有的关系\r\n * 例如:原本两个组合的元素拥有相同的groupId,复制后依然会拥有另一个相同的groupId\r\n * @param elements 元素列表数据\r\n */\r\nexport const createElementIdMap = (elements: PPTElement[]) => {\r\n const groupIdMap = {}\r\n const elIdMap = {}\r\n for (const element of elements) {\r\n const groupId = element.groupId\r\n if (groupId && !groupIdMap[groupId]) {\r\n groupIdMap[groupId] = createRandomCode()\r\n }\r\n elIdMap[element.id] = createRandomCode()\r\n }\r\n return {\r\n groupIdMap,\r\n elIdMap,\r\n }\r\n}\r\n\r\n/**\r\n * 根据表格的主题色,获取对应用于配色的子颜色\r\n * @param themeColor 主题色\r\n */\r\nexport const getTableSubThemeColor = (themeColor: string) => {\r\n const rgba = tinycolor(themeColor).toRgb()\r\n const subRgba1 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.3 }\r\n const subRgba2 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.1 }\r\n return [\r\n `rgba(${[subRgba1.r, subRgba1.g, subRgba1.b, subRgba1.a].join(',')})`,\r\n `rgba(${[subRgba2.r, subRgba2.g, subRgba2.b, subRgba2.a].join(',')})`,\r\n ]\r\n}\r\n\r\n/**\r\n * 获取线条元素路径字符串\r\n * @param element 线条元素\r\n */\r\nexport const getLineElementPath = (element: PPTLineElement) => {\r\n const start = element.start.join(',')\r\n const end = element.end.join(',')\r\n if (element.broken) {\r\n const mid = element.broken.join(',')\r\n return `M${start} L${mid} L${end}`\r\n }\r\n if (element.curve) {\r\n const mid = element.curve.join(',')\r\n return `M${start} Q${mid} ${end}`\r\n }\r\n return `M${start} L${end}`\r\n}","/**\r\n * 将普通文本转为带段落信息的HTML字符串\r\n * @param text 文本\r\n */\r\nexport const parseText2Paragraphs = (text: string) => {\r\n const htmlText = text.replace(/[\\n\\r]+/g, '
')\r\n const paragraphs = htmlText.split('
')\r\n let string = ''\r\n for (const paragraph of paragraphs) {\r\n if (paragraph) string += `
${paragraph}
`\r\n }\r\n return string\r\n}","import { debounce, throttle} from 'lodash'\nimport { ActionTypes, useStore } from '@/store'\n\nexport default () => {\n const store = useStore()\n\n // 添加历史快照(历史记录)\n const addHistorySnapshot = debounce(function() {\n store.dispatch(ActionTypes.ADD_SNAPSHOT)\n }, 300, { trailing: true })\n\n // 重做\n const redo = throttle(function() {\n store.dispatch(ActionTypes.RE_DO)\n }, 100, { leading: true, trailing: false })\n\n // 撤销\n const undo = throttle(function() {\n store.dispatch(ActionTypes.UN_DO)\n }, 100, { leading: true, trailing: false })\n\n return {\n addHistorySnapshot,\n redo,\n undo,\n }\n}","interface ImageSize {\n width: number;\n height: number;\n}\n\n/**\n * 获取图片的原始宽高\n * @param src 图片地址\n */\nexport const getImageSize = (src: string): Promise => {\n return new Promise(resolve => {\n const img = document.createElement('img')\n img.src = src\n img.style.opacity = '0'\n document.body.appendChild(img)\n\n img.onload = () => {\n const imgWidth = img.clientWidth\n const imgHeight = img.clientHeight\n \n img.onload = null\n img.onerror = null\n\n document.body.removeChild(img)\n\n resolve({ width: imgWidth, height: imgHeight })\n }\n\n img.onerror = () => {\n img.onload = null\n img.onerror = null\n }\n })\n}\n\n/**\n * 读取图片文件的dataURL\n * @param file 图片文件\n */\nexport const getImageDataURL = (file: File): Promise => {\n return new Promise(resolve => {\n const reader = new FileReader()\n reader.addEventListener('load', () => {\n resolve(reader.result as string)\n })\n reader.readAsDataURL(file)\n })\n}","export const VIEWPORT_SIZE = 1000","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { createRandomCode } from '@/utils/common'\nimport { getImageSize } from '@/utils/image'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { PPTLineElement, ChartType, PPTElement, TableCell, TableCellStyle, PPTShapeElement } from '@/types/slides'\nimport { ShapePoolItem } from '@/configs/shapes'\nimport { LinePoolItem } from '@/configs/lines'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface CommonElementPosition {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface LineElementPosition {\n top: number;\n left: number;\n start: [number, number];\n end: [number, number];\n}\n\nexport default () => {\n const store = useStore()\n const themeColor = computed(() => store.state.theme.themeColor)\n const fontColor = computed(() => store.state.theme.fontColor)\n const fontName = computed(() => store.state.theme.fontName)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const creatingElement = computed(() => store.state.creatingElement)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 创建(插入)一个元素并将其设置为被选中元素\n const createElement = (element: PPTElement) => {\n store.commit(MutationTypes.ADD_ELEMENT, element)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [element.id])\n\n if (creatingElement.value) store.commit(MutationTypes.SET_CREATING_ELEMENT, null)\n\n setTimeout(() => {\n store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n }, 0)\n\n addHistorySnapshot()\n }\n\n /**\n * 创建图片元素\n * @param src 图片地址\n */\n const createImageElement = (src: string) => {\n getImageSize(src).then(({ width, height }) => {\n const scale = height / width\n \n if (scale < viewportRatio.value && width > VIEWPORT_SIZE) {\n width = VIEWPORT_SIZE\n height = width * scale\n }\n else if (height > VIEWPORT_SIZE * viewportRatio.value) {\n height = VIEWPORT_SIZE * viewportRatio.value\n width = height / scale\n }\n\n createElement({\n type: 'image',\n id: createRandomCode(),\n src,\n width,\n height,\n left: (VIEWPORT_SIZE - width) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - height) / 2,\n fixedRatio: true,\n rotate: 0,\n })\n })\n }\n \n /**\n * 创建图表元素\n * @param chartType 图表类型\n */\n const createChartElement = (chartType: ChartType) => {\n createElement({\n type: 'chart',\n id: createRandomCode(),\n chartType,\n left: 300,\n top: 81.25,\n width: 400,\n height: 400,\n themeColor: [themeColor.value],\n gridColor: fontColor.value,\n data: {\n labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],\n series: [\n [12, 19, 5, 2, 18],\n ],\n },\n })\n }\n \n /**\n * 创建表格元素\n * @param row 行数\n * @param col 列数\n */\n const createTableElement = (row: number, col: number) => {\n const style: TableCellStyle = {\n fontname: fontName.value,\n color: fontColor.value,\n }\n const data: TableCell[][] = []\n for (let i = 0; i < row; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < col; j++) {\n rowCells.push({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '', style })\n }\n data.push(rowCells)\n }\n\n const DEFAULT_CELL_WIDTH = 100\n const DEFAULT_CELL_HEIGHT = 36\n\n const colWidths: number[] = new Array(col).fill(1 / col)\n\n const width = col * DEFAULT_CELL_WIDTH\n const height = row * DEFAULT_CELL_HEIGHT\n\n createElement({\n type: 'table',\n id: createRandomCode(),\n width,\n height,\n colWidths,\n data,\n left: (VIEWPORT_SIZE - width) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - height) / 2,\n outline: {\n width: 2,\n style: 'solid',\n color: '#eeece1',\n },\n theme: {\n color: themeColor.value,\n rowHeader: true,\n rowFooter: false,\n colHeader: false,\n colFooter: false,\n },\n })\n }\n \n /**\n * 创建文本元素\n * @param position 位置大小信息\n * @param content 文本内容\n */\n const createTextElement = (position: CommonElementPosition, content = '请输入内容') => {\n const { left, top, width, height } = position\n createElement({\n type: 'text',\n id: createRandomCode(),\n left, \n top, \n width, \n height,\n content,\n rotate: 0,\n defaultFontName: fontName.value,\n defaultColor: fontColor.value,\n })\n }\n \n /**\n * 创建形状元素\n * @param position 位置大小信息\n * @param data 形状路径信息\n */\n const createShapeElement = (position: CommonElementPosition, data: ShapePoolItem) => {\n const { left, top, width, height } = position\n const newElement: PPTShapeElement = {\n type: 'shape',\n id: createRandomCode(),\n left, \n top, \n width, \n height,\n viewBox: data.viewBox,\n path: data.path,\n fill: themeColor.value,\n fixedRatio: false,\n rotate: 0,\n }\n if (data.special) newElement.special = true\n createElement(newElement)\n }\n \n /**\n * 创建线条元素\n * @param position 位置大小信息\n * @param data 线条的路径和样式\n */\n const createLineElement = (position: LineElementPosition, data: LinePoolItem) => {\n const { left, top, start, end } = position\n\n const newElement: PPTLineElement = {\n type: 'line',\n id: createRandomCode(),\n left, \n top, \n start,\n end,\n points: data.points,\n color: themeColor.value,\n style: data.style,\n width: 2,\n }\n if (data.isBroken) newElement.broken = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n if (data.isCurve) newElement.curve = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n createElement(newElement)\n }\n\n return {\n createImageElement,\n createChartElement,\n createTableElement,\n createTextElement,\n createShapeElement,\n createLineElement,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { pasteCustomClipboardString } from '@/utils/clipboard'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { createElementIdMap } from '@/utils/element'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useCreateElement from '@/hooks/useCreateElement'\n\ninterface PasteTextClipboardDataOptions {\n onlySlide?: boolean;\n onlyElements?: boolean;\n}\n\nexport default () => {\n const store = useStore()\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n const { createTextElement } = useCreateElement()\n\n /**\n * 粘贴元素(一组)\n * @param elements 元素列表数据\n */\n const addElementsFromClipboard = (elements: PPTElement[]) => {\n const { groupIdMap, elIdMap } = createElementIdMap(elements)\n const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id)\n \n for (const element of elements) {\n const inCurrentSlide = currentSlideElementIdList.includes(element.id)\n \n element.id = elIdMap[element.id]\n\n if (inCurrentSlide) {\n element.left = element.left + 10\n element.top = element.top + 10\n }\n\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n store.commit(MutationTypes.ADD_ELEMENT, elements)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, Object.values(elIdMap))\n addHistorySnapshot()\n }\n\n /**\n * 粘贴页面\n * @param slide 页面数据\n */\n const addSlidesFromClipboard = (slides: Slide[]) => {\n const newSlides = slides.map(slide => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n if (slide.animations) {\n for (const animation of slide.animations) {\n animation.elId = elIdMap[animation.elId]\n }\n }\n return {\n ...slide,\n id: createRandomCode(8),\n }\n })\n store.commit(MutationTypes.ADD_SLIDE, newSlides)\n addHistorySnapshot()\n }\n\n /**\n * 粘贴普通文本:创建为新的文本元素\n * @param text 文本\n */\n const createTextElementFromClipboard = (text: string) => {\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, text)\n }\n\n /**\n * 解析剪贴板内容,根据解析结果选择合适的粘贴方式\n * @param text 剪贴板内容\n * @param options 配置项:onlySlide -- 仅处理页面粘贴;onlyElements -- 仅处理元素粘贴;\n */\n const pasteTextClipboardData = (text: string, options?: PasteTextClipboardDataOptions) => {\n const onlySlide = options?.onlySlide || false\n const onlyElements = options?.onlyElements || false\n\n const clipboardData = pasteCustomClipboardString(text)\n\n // 元素或页面\n if (typeof clipboardData === 'object') {\n const { type, data } = clipboardData\n\n if (type === 'elements' && !onlySlide) addElementsFromClipboard(data)\n else if (type === 'slides' && !onlyElements) addSlidesFromClipboard(data)\n }\n\n // 普通文本\n else if (!onlyElements && !onlySlide) {\n const string = parseText2Paragraphs(clipboardData)\n createTextElementFromClipboard(string)\n }\n }\n\n return {\n addSlidesFromClipboard,\n pasteTextClipboardData,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { copyText, readClipboard } from '@/utils/clipboard'\nimport { encrypt } from '@/utils/crypto'\nimport { createElementIdMap } from '@/utils/element'\nimport { KEYS } from '@/configs/hotkey'\nimport { message } from 'ant-design-vue'\nimport usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const slideIndex = computed(() => store.state.slideIndex)\n const theme = computed(() => store.state.theme)\n const slides = computed(() => store.state.slides)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const selectedSlidesIndex = computed(() => [...store.state.selectedSlidesIndex, slideIndex.value])\n const selectedSlides = computed(() => slides.value.filter((item, index) => selectedSlidesIndex.value.includes(index)))\n const selectedSlidesId = computed(() => selectedSlides.value.map(item => item.id))\n\n const { pasteTextClipboardData, addSlidesFromClipboard } = usePasteTextClipboardData()\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 重置幻灯片\n const resetSlides = () => {\n const emptySlide = {\n id: createRandomCode(8),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, 0)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.SET_SLIDES, [emptySlide])\n }\n\n /**\n * 移动页面焦点\n * @param command 移动页面焦点命令:上移、下移\n */\n const updateSlideIndex = (command: string) => {\n if (command === KEYS.UP && slideIndex.value > 0) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1)\n }\n else if (command === KEYS.DOWN && slideIndex.value < slides.value.length - 1) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1)\n }\n }\n\n // 将当前页面数据加密后复制到剪贴板\n const copySlide = () => {\n const text = encrypt(JSON.stringify({\n type: 'slides',\n data: selectedSlides.value,\n }))\n\n copyText(text).then(() => {\n store.commit(MutationTypes.SET_THUMBNAILS_FOCUS, true)\n })\n }\n\n // 尝试将剪贴板页面数据解密后添加到下一页(粘贴)\n const pasteSlide = () => {\n readClipboard().then(text => {\n pasteTextClipboardData(text, { onlySlide: true })\n }).catch(err => message.warning(err))\n }\n\n // 创建一页空白页并添加到下一页\n const createSlide = () => {\n const emptySlide = {\n id: createRandomCode(8),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.ADD_SLIDE, emptySlide)\n addHistorySnapshot()\n }\n\n // 根据模板创建新页面\n const createSlideByTemplate = (slide: Slide) => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n const newSlide = {\n ...slide,\n id: createRandomCode(8),\n }\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.ADD_SLIDE, newSlide)\n addHistorySnapshot()\n }\n\n // 将当前页复制一份到下一页\n const copyAndPasteSlide = () => {\n const slide = JSON.parse(JSON.stringify(currentSlide.value))\n addSlidesFromClipboard([slide])\n }\n\n // 删除当前页,若将删除全部页面,则执行重置幻灯片操作\n const deleteSlide = (targetSlidesId = selectedSlidesId.value) => {\n if (slides.value.length === targetSlidesId.length) resetSlides()\n else store.commit(MutationTypes.DELETE_SLIDE, targetSlidesId)\n\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, [])\n\n addHistorySnapshot()\n }\n\n // 将当前页复制后删除(剪切)\n // 由于复制操作会导致多选状态消失,所以需要提前将需要删除的页面ID进行缓存\n const cutSlide = () => {\n const targetSlidesId = [...selectedSlidesId.value]\n copySlide()\n deleteSlide(targetSlidesId)\n }\n\n // 选中全部幻灯片\n const selectAllSlide = () => {\n const newSelectedSlidesIndex = Array.from(Array(slides.value.length), (item, index) => index)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n }\n\n return {\n resetSlides,\n updateSlideIndex,\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 锁定选中的元素,并清空选中元素状态\n const lockElement = () => {\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n \n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id)) element.lock = true\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n addHistorySnapshot()\n }\n\n /**\n * 解除元素的锁定状态,并将其设置为当前选择元素\n * @param handleElement 需要解锁的元素\n */\n const unlockElement = (handleElement: PPTElement) => {\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n\n if (handleElement.groupId) {\n for (const element of newElementList) {\n if (element.groupId === handleElement.groupId) element.lock = false\n }\n return newElementList\n }\n \n for (const element of newElementList) {\n if (element.id === handleElement.id) {\n element.lock = false\n break\n }\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [handleElement.id])\n addHistorySnapshot()\n }\n\n return {\n lockElement,\n unlockElement,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 删除全部选中元素\n // 组合元素成员中,存在被选中可独立操作的元素时,优先删除该元素。否则默认删除所有被选中的元素\n const deleteElement = () => {\n if (!activeElementIdList.value.length) return\n\n let newElementList: PPTElement[] = []\n if (activeGroupElementId.value) {\n newElementList = currentSlide.value.elements.filter(el => el.id !== activeGroupElementId.value)\n }\n else {\n newElementList = currentSlide.value.elements.filter(el => !activeElementIdList.value.includes(el.id))\n }\n\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n // 删除内面内全部元素(无论是否选中)\n const deleteAllElements = () => {\n if (!currentSlide.value.elements.length) return\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: [] })\n addHistorySnapshot()\n }\n\n return {\n deleteElement,\n deleteAllElements,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeElementList = computed(() => store.getters.activeElementList)\n const currentSlide = computed(() => store.getters.currentSlide)\n const handleElementId = computed(() => store.state.handleElementId)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 判断当前选中的元素是否可以组合\n */\n const canCombine = computed(() => {\n if (activeElementList.value.length < 2) return false\n\n const firstGroupId = activeElementList.value[0].groupId\n if (!firstGroupId) return true\n\n const inSameGroup = activeElementList.value.every(el => (el.groupId && el.groupId) === firstGroupId)\n return !inSameGroup\n })\n\n /**\n * 组合当前选中的元素:给当前选中的元素赋予一个相同的分组ID\n */\n const combineElements = () => {\n if (!activeElementList.value.length) return\n\n // 生成一个新元素列表进行后续操作\n let newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n\n // 生成分组ID\n const groupId = createRandomCode()\n\n // 收集需要组合的元素列表,并赋上唯一分组ID\n const combineElementList: PPTElement[] = []\n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id)) {\n element.groupId = groupId\n combineElementList.push(element)\n }\n }\n\n // 确保该组合内所有元素成员的层级是连续的,具体操作方法为:\n // 先获取到该组合内最上层元素的层级,将本次需要组合的元素从新元素列表中移除,\n // 再根据最上层元素的层级位置,将上面收集到的需要组合的元素列表一起插入到新元素列表中合适的位置\n const combineElementMaxLevel = newElementList.findIndex(_element => _element.id === combineElementList[combineElementList.length - 1].id)\n const combineElementIdList = combineElementList.map(_element => _element.id)\n newElementList = newElementList.filter(_element => !combineElementIdList.includes(_element.id))\n\n const insertLevel = combineElementMaxLevel - combineElementList.length + 1\n newElementList.splice(insertLevel, 0, ...combineElementList)\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n /**\n * 取消组合元素:移除选中元素的分组ID\n */\n const uncombineElements = () => {\n if (!activeElementList.value.length) return\n const hasElementInGroup = activeElementList.value.some(item => item.groupId)\n if (!hasElementInGroup) return\n \n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id) && element.groupId) delete element.groupId\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n\n // 取消组合后,需要重置激活元素状态\n // 默认重置为当前正在操作的元素,如果不存在则重置为空\n const handleElementIdList = handleElementId.value ? [handleElementId.value] : []\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, handleElementIdList)\n addHistorySnapshot()\n }\n\n return {\n canCombine,\n combineElements,\n uncombineElements,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { copyText, readClipboard } from '@/utils/clipboard'\nimport { encrypt } from '@/utils/crypto'\nimport { message } from 'ant-design-vue'\nimport usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'\nimport useDeleteElement from './useDeleteElement'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeElementList = computed(() => store.getters.activeElementList)\n\n const { pasteTextClipboardData } = usePasteTextClipboardData()\n const { deleteElement } = useDeleteElement()\n\n // 将选中元素数据加密后复制到剪贴板\n const copyElement = () => {\n if (!activeElementIdList.value.length) return\n\n const text = encrypt(JSON.stringify({\n type: 'elements',\n data: activeElementList.value,\n }))\n\n copyText(text).then(() => {\n store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n })\n }\n\n // 将选中元素复制后删除(剪切)\n const cutElement = () => {\n copyElement()\n deleteElement()\n }\n\n // 尝试将剪贴板元素数据解密后进行粘贴\n const pasteElement = () => {\n readClipboard().then(text => {\n pasteTextClipboardData(text)\n }).catch(err => message.warning(err))\n }\n\n // 将选中元素复制后立刻粘贴\n const quickCopyElement = () => {\n copyElement()\n pasteElement()\n }\n\n return {\n copyElement,\n cutElement,\n pasteElement,\n quickCopyElement,\n }\n}","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { Slide } from '@/types/slides'\r\n\r\nexport default () => {\r\n const store = useStore()\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n // 将当前页面全部元素设置为被选择状态\r\n const selectAllElement = () => {\r\n const unlockedElements = currentSlide.value.elements.filter(el => !el.lock)\r\n const newActiveElementIdList = unlockedElements.map(el => el.id)\r\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, newActiveElementIdList)\r\n }\r\n\r\n return {\r\n selectAllElement,\r\n }\r\n}","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { PPTElement, Slide } from '@/types/slides'\r\nimport { KEYS } from '@/configs/hotkey'\r\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\r\n\r\nexport default () => {\r\n const store = useStore()\r\n const activeElementIdList = computed(() => store.state.activeElementIdList)\r\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 将元素向指定方向移动指定的距离\r\n * 组合元素成员中,存在被选中可独立操作的元素时,优先移动该元素。否则默认移动所有被选中的元素\r\n * @param command 移动方向\r\n * @param step 移动距离\r\n */\r\n const moveElement = (command: string, step = 1) => {\r\n let newElementList: PPTElement[] = []\r\n\r\n const move = (el: PPTElement) => {\r\n let { left, top } = el\r\n switch (command) {\r\n case KEYS.LEFT: \r\n left = left - step\r\n break\r\n case KEYS.RIGHT: \r\n left = left + step\r\n break\r\n case KEYS.UP: \r\n top = top - step\r\n break\r\n case KEYS.DOWN: \r\n top = top + step\r\n break\r\n default: break\r\n }\r\n return { ...el, left, top }\r\n }\r\n\r\n if (activeGroupElementId.value) {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeGroupElementId.value === el.id ? move(el) : el\r\n })\r\n }\r\n else {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeElementIdList.value.includes(el.id) ? move(el) : el\r\n })\r\n }\r\n\r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n moveElement,\r\n }\r\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { ElementOrderCommand, ElementOrderCommands } from '@/types/edit'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 获取组合元素层级范围\n * @param elementList 本页所有元素列表\n * @param combineElementList 组合元素列表\n */\n const getCombineElementLevelRange = (elementList: PPTElement[], combineElementList: PPTElement[]) => {\n return {\n minLevel: elementList.findIndex(_element => _element.id === combineElementList[0].id),\n maxLevel: elementList.findIndex(_element => _element.id === combineElementList[combineElementList.length - 1].id),\n }\n }\n\n /**\n * 上移一层\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveUpElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n // 如果被操作的元素是组合元素成员,需要将该组合全部成员一起进行移动\n if (element.groupId) {\n\n // 获取到该组合全部成员,以及所有成员的层级范围\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel, maxLevel } = getCombineElementLevelRange(elementList, combineElementList)\n\n // 已经处在顶层,无法继续移动\n if (maxLevel === elementList.length - 1) return\n\n // 通过组合成员范围的最大值,获取到该组合上一层的元素,然后将该组合元素从元素列表中移除(并缓存被移除的元素列表)\n // 若上层元素处在另一个组合中,则将上述被移除的组合元素插入到该上层组合上方\n // 若上层元素不处于任何分组中,则将上述被移除的组合元素插入到该上层元素上方\n const nextElement = copyOfElementList[maxLevel + 1]\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n\n if (nextElement.groupId) {\n const nextCombineElementList = copyOfElementList.filter(_element => _element.groupId === nextElement.groupId)\n copyOfElementList.splice(minLevel + nextCombineElementList.length, 0, ...movedElementList)\n }\n else copyOfElementList.splice(minLevel + 1, 0, ...movedElementList)\n }\n\n // 如果被操作的元素不是组合元素成员\n else {\n\n // 获取该元素在列表中的层级\n const level = elementList.findIndex(item => item.id === element.id)\n\n // 已经处在顶层,无法继续移动\n if (level === elementList.length - 1) return\n\n // 获取到该组合上一层的元素,然后将该组合元素从元素列表中移除(并缓存被移除的元素列表)\n const nextElement = copyOfElementList[level + 1]\n const movedElement = copyOfElementList.splice(level, 1)[0]\n\n // 通过组合成员范围的最大值,获取到该组合上一层的元素,然后将该组合元素从元素列表中移除(并缓存被移除的元素列表)\n // 若上层元素处在另一个组合中,则将上述被移除的组合元素插入到该上层组合上方\n // 若上层元素不处于任何分组中,则将上述被移除的组合元素插入到该上层元素上方\n if (nextElement.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === nextElement.groupId)\n copyOfElementList.splice(level + combineElementList.length, 0, movedElement)\n }\n else copyOfElementList.splice(level + 1, 0, movedElement)\n }\n\n return copyOfElementList\n }\n\n /**\n * 下移一层,操作方式同上移\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveDownElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n if (element.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel } = getCombineElementLevelRange(elementList, combineElementList)\n if (minLevel === 0) return\n\n const prevElement = copyOfElementList[minLevel - 1]\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n\n if (prevElement.groupId) {\n const prevCombineElementList = copyOfElementList.filter(_element => _element.groupId === prevElement.groupId)\n copyOfElementList.splice(minLevel - prevCombineElementList.length, 0, ...movedElementList)\n }\n else copyOfElementList.splice(minLevel - 1, 0, ...movedElementList)\n }\n\n else {\n const level = elementList.findIndex(item => item.id === element.id)\n if (level === 0) return\n\n const prevElement = copyOfElementList[level - 1]\n const movedElement = copyOfElementList.splice(level, 1)[0]\n\n if (prevElement.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === prevElement.groupId)\n copyOfElementList.splice(level - combineElementList.length, 0, movedElement)\n }\n else copyOfElementList.splice(level - 1, 0, movedElement)\n }\n\n return copyOfElementList\n }\n\n /**\n * 置顶层\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveTopElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n // 如果被操作的元素是组合元素成员,需要将该组合全部成员一起进行移动\n if (element.groupId) {\n\n // 获取到该组合全部成员,以及所有成员的层级范围\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel, maxLevel } = getCombineElementLevelRange(elementList, combineElementList)\n\n // 已经处在顶层,无法继续移动\n if (maxLevel === elementList.length - 1) return null\n\n // 将该组合元素从元素列表中移除,然后将被移除的元素添加到元素列表顶部\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n copyOfElementList.push(...movedElementList)\n }\n\n // 如果被操作的元素不是组合元素成员\n else {\n\n // 获取该元素在列表中的层级\n const level = elementList.findIndex(item => item.id === element.id)\n\n // 已经处在顶层,无法继续移动\n if (level === elementList.length - 1) return null\n\n // 将该组合元素从元素列表中移除,然后将被移除的元素添加到元素列表底部\n copyOfElementList.splice(level, 1)\n copyOfElementList.push(element)\n }\n\n return copyOfElementList\n }\n\n /**\n * 置底层,操作方式同置顶\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveBottomElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n if (element.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel } = getCombineElementLevelRange(elementList, combineElementList)\n if (minLevel === 0) return\n\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n copyOfElementList.unshift(...movedElementList)\n }\n\n else {\n const level = elementList.findIndex(item => item.id === element.id)\n if (level === 0) return\n\n copyOfElementList.splice(level, 1)\n copyOfElementList.unshift(element)\n }\n\n return copyOfElementList\n }\n\n /**\n * 调整元素层级\n * @param element 需要调整层级的元素\n * @param command 调整命令:上移、下移、置顶、置底\n */\n const orderElement = (element: PPTElement, command: ElementOrderCommand) => {\n let newElementList\n \n if (command === ElementOrderCommands.UP) newElementList = moveUpElement(currentSlide.value.elements, element)\n else if (command === ElementOrderCommands.DOWN) newElementList = moveDownElement(currentSlide.value.elements, element)\n else if (command === ElementOrderCommands.TOP) newElementList = moveTopElement(currentSlide.value.elements, element)\n else if (command === ElementOrderCommands.BOTTOM) newElementList = moveBottomElement(currentSlide.value.elements, element)\n\n if (!newElementList) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n return {\n orderElement,\n }\n}","// 进入全屏\nexport const enterFullscreen = () => {\n const docElm = document.documentElement\n if (docElm.requestFullscreen) docElm.requestFullscreen() \n else if (docElm.mozRequestFullScreen) docElm.mozRequestFullScreen() \n else if (docElm.webkitRequestFullScreen) docElm.webkitRequestFullScreen()\n}\n\n// 退出全屏\nexport const exitFullscreen = () => {\n if (document.exitFullscreen) document.exitFullscreen()\n else if (document.mozCancelFullScreen) document.mozCancelFullScreen()\n else if (document.webkitCancelFullScreen) document.webkitCancelFullScreen()\n}\n\n// 判断是否全屏\nexport const isFullscreen = () => (\n document.mozFullScreen || \n document.webkitIsFullScreen || \n document.webkitFullScreen\n)","import { MutationTypes, useStore } from '@/store'\nimport { enterFullscreen, exitFullscreen, isFullscreen } from '@/utils/fullscreen'\n\nexport default () => {\n const store = useStore()\n\n // 进入放映状态(从当前页开始)\n const enterScreening = () => {\n enterFullscreen()\n store.commit(MutationTypes.SET_SCREENING, true)\n }\n\n // 进入放映状态(从第一页开始)\n const enterScreeningFromStart = () => {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, 0)\n enterScreening()\n }\n\n // 退出放映状态\n const exitScreening = () => {\n store.commit(MutationTypes.SET_SCREENING, false)\n if (isFullscreen()) exitFullscreen()\n }\n\n return {\n enterScreening,\n enterScreeningFromStart,\n exitScreening,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\n\nexport default () => {\n const store = useStore()\n const canvasPercentage = computed(() => store.state.canvasPercentage)\n\n /**\n * 缩放画布百分比\n * @param command 缩放命令:放大、缩小\n */\n const scaleCanvas = (command: '+' | '-') => {\n let percentage = canvasPercentage.value\n const step = 5\n const max = 120\n const min = 60\n if (command === '+' && percentage <= max) percentage += step\n if (command === '-' && percentage >= min) percentage -= step\n \n store.commit(MutationTypes.SET_CANVAS_PERCENTAGE, percentage)\n }\n\n /**\n * 设置画笔百分比\n * @param percentage 百分比(小数形式,如0.8)\n */\n const setCanvasPercentage = (percentage: number) => {\n store.commit(MutationTypes.SET_CANVAS_PERCENTAGE, percentage)\n }\n \n return {\n scaleCanvas,\n setCanvasPercentage,\n }\n}","import { computed, onMounted, onUnmounted } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { ElementOrderCommand, ElementOrderCommands } from '@/types/edit'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { KEYS } from '@/configs/hotkey'\n\nimport useSlideHandler from './useSlideHandler'\nimport useLockElement from './useLockElement'\nimport useDeleteElement from './useDeleteElement'\nimport useCombineElement from './useCombineElement'\nimport useCopyAndPasteElement from './useCopyAndPasteElement'\nimport useSelectAllElement from './useSelectAllElement'\nimport useMoveElement from './useMoveElement'\nimport useOrderElement from './useOrderElement'\nimport useHistorySnapshot from './useHistorySnapshot'\nimport useScreening from './useScreening'\nimport useScaleCanvas from './useScaleCanvas'\n\nexport default () => {\n const store = useStore()\n\n const ctrlKeyActive = computed(() => store.state.ctrlKeyState)\n const shiftKeyActive = computed(() => store.state.shiftKeyState)\n const disableHotkeys = computed(() => store.state.disableHotkeys)\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const handleElement = computed(() => store.getters.handleElement)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const thumbnailsFocus = computed(() => store.state.thumbnailsFocus)\n\n const {\n updateSlideIndex,\n copySlide,\n createSlide,\n deleteSlide,\n cutSlide,\n copyAndPasteSlide,\n selectAllSlide,\n } = useSlideHandler()\n\n const { combineElements, uncombineElements } = useCombineElement()\n const { deleteElement } = useDeleteElement()\n const { lockElement } = useLockElement()\n const { copyElement, cutElement, quickCopyElement } = useCopyAndPasteElement()\n const { selectAllElement } = useSelectAllElement()\n const { moveElement } = useMoveElement()\n const { orderElement } = useOrderElement()\n const { redo, undo } = useHistorySnapshot()\n const { enterScreening } = useScreening()\n const { scaleCanvas, setCanvasPercentage } = useScaleCanvas()\n\n const copy = () => {\n if (activeElementIdList.value.length) copyElement()\n else if (thumbnailsFocus.value) copySlide()\n }\n\n const cut = () => {\n if (activeElementIdList.value.length) cutElement()\n else if (thumbnailsFocus.value) cutSlide()\n }\n\n const quickCopy = () => {\n if (activeElementIdList.value.length) quickCopyElement()\n else if (thumbnailsFocus.value) copyAndPasteSlide()\n }\n\n const selectAll = () => {\n if (editorAreaFocus.value) selectAllElement()\n if (thumbnailsFocus.value) selectAllSlide()\n }\n\n const lock = () => {\n if (!editorAreaFocus.value) return\n lockElement()\n }\n const combine = () => {\n if (!editorAreaFocus.value) return\n combineElements()\n }\n\n const uncombine = () => {\n if (!editorAreaFocus.value) return\n uncombineElements()\n }\n\n const remove = () => {\n if (activeElementIdList.value.length) deleteElement()\n else if (thumbnailsFocus.value) deleteSlide()\n }\n\n const move = (key: string) => {\n if (activeElementIdList.value.length) moveElement(key)\n else if (key === KEYS.UP || key === KEYS.DOWN) updateSlideIndex(key)\n }\n\n const order = (command: ElementOrderCommand) => {\n if (!handleElement.value) return\n orderElement(handleElement.value, command)\n }\n\n const create = () => {\n if (!thumbnailsFocus.value) return\n createSlide()\n }\n\n const tabActiveElement = () => {\n if (!currentSlide.value.elements.length) return\n if (!handleElement.value) {\n const firstElement = currentSlide.value.elements[0]\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [firstElement.id])\n return\n }\n\n const currentIndex = currentSlide.value.elements.findIndex(el => el.id === handleElement.value.id)\n const nextIndex = currentIndex >= currentSlide.value.elements.length - 1 ? 0 : currentIndex + 1\n const nextElementId = currentSlide.value.elements[nextIndex].id\n\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [nextElementId])\n }\n\n const keydownListener = (e: KeyboardEvent) => {\n const { ctrlKey, shiftKey, altKey, metaKey } = e\n const ctrlOrMetaKeyActive = ctrlKey || metaKey\n \n const key = e.key.toUpperCase()\n\n if (ctrlOrMetaKeyActive && !ctrlKeyActive.value) store.commit(MutationTypes.SET_CTRL_KEY_STATE, true)\n if (shiftKey && !shiftKeyActive.value) store.commit(MutationTypes.SET_SHIFT_KEY_STATE, true)\n\n if (ctrlOrMetaKeyActive && key === KEYS.F) {\n e.preventDefault()\n enterScreening()\n store.commit(MutationTypes.SET_CTRL_KEY_STATE, false)\n }\n \n if (!editorAreaFocus.value && !thumbnailsFocus.value) return \n\n if (ctrlOrMetaKeyActive && key === KEYS.C) {\n if (disableHotkeys.value) return\n e.preventDefault()\n copy()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.X) {\n if (disableHotkeys.value) return\n e.preventDefault()\n cut()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.D) {\n if (disableHotkeys.value) return\n e.preventDefault()\n quickCopy()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.Z) {\n if (disableHotkeys.value) return\n e.preventDefault()\n undo()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.Y) {\n if (disableHotkeys.value) return\n e.preventDefault()\n redo()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.A) {\n if (disableHotkeys.value) return\n e.preventDefault()\n selectAll()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.L) {\n if (disableHotkeys.value) return\n e.preventDefault()\n lock()\n }\n if (!shiftKey && ctrlOrMetaKeyActive && key === KEYS.G) {\n if (disableHotkeys.value) return\n e.preventDefault()\n combine()\n }\n if (shiftKey && ctrlOrMetaKeyActive && key === KEYS.G) {\n if (disableHotkeys.value) return\n e.preventDefault()\n uncombine()\n }\n if (altKey && key === KEYS.F) {\n if (disableHotkeys.value) return\n e.preventDefault()\n order(ElementOrderCommands.TOP)\n }\n if (altKey && key === KEYS.B) {\n if (disableHotkeys.value) return\n e.preventDefault()\n order(ElementOrderCommands.BOTTOM)\n }\n if (key === KEYS.DELETE || key === KEYS.BACKSPACE) {\n if (disableHotkeys.value) return\n e.preventDefault()\n remove()\n }\n if (key === KEYS.UP) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.UP)\n }\n if (key === KEYS.DOWN) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.DOWN)\n }\n if (key === KEYS.LEFT) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.LEFT)\n }\n if (key === KEYS.RIGHT) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.RIGHT)\n }\n if (key === KEYS.ENTER) {\n if (disableHotkeys.value) return\n e.preventDefault()\n create()\n }\n if (key === KEYS.MINUS) {\n if (disableHotkeys.value) return\n e.preventDefault()\n scaleCanvas('-')\n }\n if (key === KEYS.EQUAL) {\n if (disableHotkeys.value) return\n e.preventDefault()\n scaleCanvas('+')\n }\n if (key === KEYS.DIGIT_0) {\n if (disableHotkeys.value) return\n e.preventDefault()\n setCanvasPercentage(90)\n }\n if (key === KEYS.TAB) {\n if (disableHotkeys.value) return\n e.preventDefault()\n tabActiveElement()\n }\n }\n \n const keyupListener = () => {\n if (ctrlKeyActive.value) store.commit(MutationTypes.SET_CTRL_KEY_STATE, false)\n if (shiftKeyActive.value) store.commit(MutationTypes.SET_SHIFT_KEY_STATE, false)\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n document.addEventListener('keyup', keyupListener)\n window.addEventListener('blur', keyupListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n document.removeEventListener('keyup', keyupListener)\n window.removeEventListener('blur', keyupListener)\n })\n}","import { computed, onMounted, onUnmounted } from 'vue'\nimport { useStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport usePasteTextClipboardData from './usePasteTextClipboardData'\nimport useCreateElement from './useCreateElement'\n\nexport default () => {\n const store = useStore()\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const thumbnailsFocus = computed(() => store.state.thumbnailsFocus)\n const disableHotkeys = computed(() => store.state.disableHotkeys)\n\n const { pasteTextClipboardData } = usePasteTextClipboardData()\n const { createImageElement } = useCreateElement()\n\n // 粘贴图片到幻灯片元素\n const pasteImageFile = (imageFile: File) => {\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n\n /**\n * 粘贴事件监听\n * @param e ClipboardEvent\n */\n const pasteListener = (e: ClipboardEvent) => {\n if (!editorAreaFocus.value && !thumbnailsFocus.value) return\n if (disableHotkeys.value) return\n\n if (!e.clipboardData) return\n\n const clipboardDataItems = e.clipboardData.items\n const clipboardDataFirstItem = clipboardDataItems[0]\n\n if (!clipboardDataFirstItem) return\n\n // 如果剪贴板内有图片,优先尝试读取图片\n for (const item of clipboardDataItems) {\n if (item.kind === 'file' && item.type.indexOf('image') !== -1) {\n const imageFile = item.getAsFile()\n if (imageFile) pasteImageFile(imageFile)\n return\n }\n }\n \n // 如果剪贴板内没有图片,但有文字内容,尝试解析文字内容\n if (clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => pasteTextClipboardData(text))\n }\n }\n\n onMounted(() => {\n document.addEventListener('paste', pasteListener)\n })\n onUnmounted(() => {\n document.removeEventListener('paste', pasteListener)\n })\n}","\n\n\n\n","export const childlessTags = ['style', 'script', 'template']\n\nexport const closingTags = ['html', 'head', 'body', 'p', 'dt', 'dd', 'li', 'option', 'thead', 'th', 'tbody', 'tr', 'td', 'tfoot', 'colgroup']\n\nexport const closingTagAncestorBreakers = {\n li: ['ul', 'ol', 'menu'],\n dt: ['dl'],\n dd: ['dl'],\n tbody: ['table'],\n thead: ['table'],\n tfoot: ['table'],\n tr: ['table'],\n td: ['table'],\n}\n\nexport const voidTags = ['!doctype', 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']","import { startsWith, endsWith } from 'lodash'\nimport { Token } from './types'\nimport { childlessTags } from './tags'\n\ninterface State {\n str: string;\n position: number;\n tokens: Token[];\n}\n\nconst jumpPosition = (state: State, end: number) => {\n const len = end - state.position\n movePositopn(state, len)\n}\n\nconst movePositopn = (state: State, len: number) => {\n state.position = state.position + len\n}\n\nconst findTextEnd = (str: string, index: number) => {\n const isEnd = false\n while (!isEnd) {\n const textEnd = str.indexOf('<', index)\n if (textEnd === -1) {\n return textEnd\n }\n const char = str.charAt(textEnd + 1)\n if (char === '/' || char === '!' || /[A-Za-z0-9]/.test(char)) {\n return textEnd\n }\n index = textEnd + 1\n }\n return -1\n}\n\nconst lexText = (state: State) => {\n const { str } = state\n let textEnd = findTextEnd(str, state.position)\n if (textEnd === state.position) return\n if (textEnd === -1) {\n textEnd = str.length\n }\n\n const content = str.slice(state.position, textEnd)\n jumpPosition(state, textEnd)\n\n state.tokens.push({\n type: 'text', \n content, \n })\n}\n\nconst lexComment = (state: State) => {\n const { str } = state\n\n movePositopn(state, 4)\n let contentEnd = str.indexOf('-->', state.position)\n let commentEnd = contentEnd + 3\n if (contentEnd === -1) {\n contentEnd = commentEnd = str.length\n }\n\n const content = str.slice(state.position, contentEnd)\n jumpPosition(state, commentEnd)\n\n state.tokens.push({\n type: 'comment',\n content,\n })\n}\n\nconst lexTagName = (state: State) => {\n const { str } = state\n const len = str.length\n let start = state.position\n\n while (start < len) {\n const char = str.charAt(start)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (isTagChar) break\n start++\n }\n\n let end = start + 1\n while (end < len) {\n const char = str.charAt(end)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (!isTagChar) break\n end++\n }\n\n jumpPosition(state, end)\n const tagName = str.slice(start, end)\n state.tokens.push({\n type: 'tag',\n content: tagName\n })\n return tagName\n}\n\nconst lexTagAttributes = (state: State) => {\n const { str, tokens } = state\n let cursor = state.position\n let quote = null\n let wordBegin = cursor\n const words = []\n const len = str.length\n while (cursor < len) {\n const char = str.charAt(cursor)\n if (quote) {\n const isQuoteEnd = char === quote\n if (isQuoteEnd) quote = null\n cursor++\n continue\n }\n\n const isTagEnd = char === '/' || char === '>'\n if (isTagEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n break\n }\n\n const isWordEnd = /\\s/.test(char)\n if (isWordEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n wordBegin = cursor + 1\n cursor++\n continue\n }\n\n const isQuoteStart = char === '\\'' || char === '\"'\n if (isQuoteStart) {\n quote = char\n cursor++\n continue\n }\n\n cursor++\n }\n jumpPosition(state, cursor)\n\n const type = 'attribute'\n for (let i = 0; i < words.length; i++) {\n const word = words[i]\n\n const isNotPair = word.indexOf('=') === -1\n if (isNotPair) {\n const secondWord = words[i + 1]\n if (secondWord && startsWith(secondWord, '=')) {\n if (secondWord.length > 1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n const thirdWord = words[i + 2]\n i += 1\n if (thirdWord) {\n const newWord = word + '=' + thirdWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n }\n }\n if (endsWith(word, '=')) {\n const secondWord = words[i + 1]\n if (secondWord && secondWord.indexOf('=') === -1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n\n const newWord = word.slice(0, -1)\n tokens.push({ type, content: newWord })\n continue\n }\n\n tokens.push({ type, content: word })\n }\n}\n\nconst lexSkipTag = (tagName: string, state: State) => {\n const { str, tokens } = state\n const safeTagName = tagName.toLowerCase()\n const len = str.length\n let index = state.position\n \n while (index < len) {\n const nextTag = str.indexOf(' {\n const { str } = state\n const secondChar = str.charAt(state.position + 1)\n const tagStartClose = secondChar === '/'\n movePositopn(state, tagStartClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-start',\n close: tagStartClose,\n })\n\n const tagName = lexTagName(state)\n lexTagAttributes(state)\n\n const firstChar = str.charAt(state.position)\n const tagEndClose = firstChar === '/'\n movePositopn(state, tagEndClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-end',\n close: tagEndClose,\n })\n return tagName\n}\n\nconst lex = (state: State) => {\n const str = state.str\n const len = str.length\n\n while (state.position < len) {\n const start = state.position\n lexText(state)\n\n if (state.position === start) {\n const isComment = startsWith(str, '!--', start + 1)\n if (isComment) lexComment(state)\n else {\n const tagName = lexTag(state)\n const safeTag = tagName.toLowerCase()\n if (childlessTags.includes(safeTag)) lexSkipTag(tagName, state)\n }\n }\n }\n}\n\nexport const lexer = (str: string): Token[] => {\n const state = {\n str,\n position: 0,\n tokens: [],\n }\n lex(state)\n return state.tokens\n}","import { Token, HTMLNode, TagToken, NormalElement, TagEndToken, AttributeToken, TextToken } from './types'\nimport { closingTags, closingTagAncestorBreakers, voidTags } from './tags'\n\ninterface StackItem {\n tagName: string | null;\n children: HTMLNode[];\n}\n\ninterface State {\n stack: StackItem[];\n cursor: number;\n tokens: Token[];\n}\n\nexport const parser = (tokens: Token[]) => {\n const root: StackItem = { tagName: null, children: [] }\n const state: State = { tokens, cursor: 0, stack: [root] }\n parse(state)\n return root.children\n}\n\nexport const hasTerminalParent = (tagName: string, stack: StackItem[]) => {\n const tagParents = closingTagAncestorBreakers[tagName]\n if (tagParents) {\n let currentIndex = stack.length - 1\n while (currentIndex >= 0) {\n const parentTagName = stack[currentIndex].tagName\n if (parentTagName === tagName) break\n if (tagParents.includes(parentTagName)) return true\n currentIndex--\n }\n }\n return false\n}\n\nexport const rewindStack = (stack: StackItem[], newLength: number) => {\n stack.splice(newLength)\n}\n\nexport const parse = (state: State) => {\n const { stack, tokens } = state\n let { cursor } = state\n let nodes = stack[stack.length - 1].children\n const len = tokens.length\n \n while (cursor < len) {\n const token = tokens[cursor]\n if (token.type !== 'tag-start') {\n nodes.push(token as TextToken)\n cursor++\n continue\n }\n\n const tagToken = tokens[++cursor] as TagToken\n cursor++\n const tagName = tagToken.content.toLowerCase()\n if (token.close) {\n let index = stack.length\n let shouldRewind = false\n while (--index > -1) {\n if (stack[index].tagName === tagName) {\n shouldRewind = true\n break\n }\n }\n while (cursor < len) {\n if (tokens[cursor].type !== 'tag-end') break\n cursor++\n }\n if (shouldRewind) {\n rewindStack(stack, index)\n break\n } \n else continue\n }\n\n const isClosingTag = closingTags.includes(tagName)\n let shouldRewindToAutoClose = isClosingTag\n if (shouldRewindToAutoClose) {\n shouldRewindToAutoClose = !hasTerminalParent(tagName, stack)\n }\n\n if (shouldRewindToAutoClose) {\n let currentIndex = stack.length - 1\n while (currentIndex > 0) {\n if (tagName === stack[currentIndex].tagName) {\n rewindStack(stack, currentIndex)\n const previousIndex = currentIndex - 1\n nodes = stack[previousIndex].children\n break\n }\n currentIndex = currentIndex - 1\n }\n }\n\n const attributes = []\n let tagEndToken: TagEndToken | undefined\n while (cursor < len) {\n const _token = tokens[cursor]\n if (_token.type === 'tag-end') {\n tagEndToken = _token\n break\n }\n attributes.push((_token as AttributeToken).content)\n cursor++\n }\n\n if (!tagEndToken) break\n\n cursor++\n const children: HTMLNode[] = []\n const elementNode: NormalElement = {\n type: 'element',\n tagName: tagToken.content,\n attributes,\n children,\n }\n nodes.push(elementNode)\n\n const hasChildren = !(tagEndToken.close || voidTags.includes(tagName))\n if (hasChildren) {\n stack.push({tagName, children})\n const innerState = { tokens, cursor, stack }\n parse(innerState)\n cursor = innerState.cursor\n }\n }\n state.cursor = cursor\n}","import { HTMLNode, CommentOrTextAST, ElementAST, AST } from './types'\n\nexport const splitHead = (str: string, sep: string) => {\n const idx = str.indexOf(sep)\n if (idx === -1) return [str]\n return [str.slice(0, idx), str.slice(idx + sep.length)]\n}\n\nconst unquote = (str: string) => {\n const car = str.charAt(0)\n const end = str.length - 1\n const isQuoteStart = car === '\"' || car === \"'\"\n if (isQuoteStart && car === str.charAt(end)) {\n return str.slice(1, end)\n }\n return str\n}\n\nconst formatAttributes = (attributes: string[]) => {\n return attributes.map(attribute => {\n const parts = splitHead(attribute.trim(), '=')\n const key = parts[0]\n const value = typeof parts[1] === 'string' ? unquote(parts[1]) : null\n return { key, value }\n })\n}\n\nexport const format = (nodes: HTMLNode[]): AST[] => {\n return nodes.map(node => { \n if (node.type === 'element') {\n const children = format(node.children)\n const item: ElementAST = {\n type: 'element',\n tagName: node.tagName.toLowerCase(),\n attributes: formatAttributes(node.attributes),\n children,\n }\n return item\n }\n\n const item: CommentOrTextAST = {\n type: node.type,\n content: node.content,\n }\n return item\n })\n}","// 参考:https://github.com/andrejewski/himalaya 用TypeScript重写并简化部分功能\n\nimport { lexer } from './lexer'\nimport { parser } from './parser'\nimport { format } from './format'\nimport { toHTML } from './stringify'\nimport type { AST } from './types'\n\nexport const toAST = (str: string) => {\n const tokens = lexer(str)\n const nodes = parser(tokens)\n return format(nodes)\n}\n\nexport { toHTML, AST }","import { SVGPathData } from 'svg-pathdata'\nimport arcToBezier from 'svg-arc-to-cubic-bezier'\n\nconst typeMap = {\n 1: 'Z',\n 2: 'M',\n 4: 'H',\n 8: 'V',\n 16: 'L',\n 32: 'C',\n 64: 'S',\n 128: 'Q',\n 256: 'T',\n 512: 'A',\n}\n\n/**\n * 简单解析SVG路径\n * @param d SVG path d属性\n */\nexport const parseSvgPath = (d: string) => {\n const pathData = new SVGPathData(d)\n\n const ret = pathData.commands.map(item => {\n return { ...item, type: typeMap[item.type] }\n })\n return ret\n}\n\nexport type SvgPath = ReturnType\n\n/**\n * 解析SVG路径,并将圆弧(A)类型的路径转为三次贝塞尔(C)类型的路径\n * @param d SVG path d属性\n */\nexport const toPoints = (d: string) => {\n const pathData = new SVGPathData(d)\n \n const points = []\n for (const item of pathData.commands) {\n const type = typeMap[item.type]\n\n if (item.type === 2 || item.type === 16) {\n points.push({\n x: item.x,\n y: item.y,\n relative: item.relative,\n type,\n })\n }\n if (item.type === 32) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'cubic',\n x1: item.x1,\n y1: item.y1,\n x2: item.x2,\n y2: item.y2,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 128) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'quadratic',\n x1: item.x1,\n y1: item.y1,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 512) {\n const lastPoint = points[points.length - 1]\n if (!['M', 'L', 'Q', 'C'].includes(lastPoint.type)) continue\n\n const cubicBezierPoints = arcToBezier({\n px: lastPoint.x as number,\n py: lastPoint.y as number,\n cx: item.x,\n cy: item.y,\n rx: item.rX,\n ry: item.rY,\n xAxisRotation: item.xRot,\n largeArcFlag: item.lArcFlag,\n sweepFlag: item.sweepFlag,\n })\n for (const cbPoint of cubicBezierPoints) {\n points.push({\n x: cbPoint.x, \n y: cbPoint.y,\n curve: {\n type: 'cubic',\n x1: cbPoint.x1,\n y1: cbPoint.y1,\n x2: cbPoint.x2,\n y2: cbPoint.y2,\n },\n relative: false,\n type: 'C',\n })\n }\n }\n else if (item.type === 1) {\n points.push({ close: true, type })\n }\n else continue\n }\n return points\n}\n\nexport type SvgPoints = ReturnType","// svg转base64图片,参考:https://github.com/scriptex/svg64\n\nconst characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nconst PREFIX = 'data:image/svg+xml;base64,'\n\nconst utf8Encode = (string: string) => {\n string = string.replace(/\\r\\n/g, '\\n')\n let utftext = ''\n\n for (let n = 0; n < string.length; n++) {\n const c = string.charCodeAt(n)\n\n if (c < 128) {\n utftext += String.fromCharCode(c)\n }\n else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode((c >> 6) | 192)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n else {\n utftext += String.fromCharCode((c >> 12) | 224)\n utftext += String.fromCharCode(((c >> 6) & 63) | 128)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n }\n\n return utftext\n}\n\nconst encode = (input: string) => {\n let output = ''\n let chr1, chr2, chr3, enc1, enc2, enc3, enc4\n let i = 0\n input = utf8Encode(input)\n while (i < input.length) {\n chr1 = input.charCodeAt(i++)\n chr2 = input.charCodeAt(i++)\n chr3 = input.charCodeAt(i++)\n enc1 = chr1 >> 2\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)\n enc4 = chr3 & 63\n if (isNaN(chr2)) enc3 = enc4 = 64\n else if (isNaN(chr3)) enc4 = 64\n output = output + characters.charAt(enc1) + characters.charAt(enc2) + characters.charAt(enc3) + characters.charAt(enc4)\n }\n return output\n}\n\nexport const svg2Base64 = (element: Element) => {\n const XMLS = new XMLSerializer()\n const svg = XMLS.serializeToString(element)\n\n return PREFIX + encode(svg)\n}","import { computed, ref } from 'vue'\nimport { trim } from 'lodash'\nimport { saveAs } from 'file-saver'\nimport pptxgen from 'pptxgenjs'\nimport tinycolor from 'tinycolor2'\nimport { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element'\nimport { AST, toAST } from '@/utils/htmlParser'\nimport { SvgPoints, toPoints } from '@/utils/svgPathParser'\nimport { svg2Base64 } from '@/utils/svg2Base64'\nimport { useStore } from '@/store'\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n\n const exporting = ref(false)\n \n // 导出JSON文件\n const exportJSON = () => {\n const blob = new Blob([JSON.stringify(slides.value)], { type: '' })\n saveAs(blob, 'pptist_slides.json')\n }\n\n // 格式化颜色值为 透明度 + HexString,供pptxgenjs使用\n const formatColor = (_color: string) => {\n const c = tinycolor(_color)\n const alpha = c.getAlpha()\n const color = alpha === 0 ? '#ffffff' : c.setAlpha(1).toHexString()\n return {\n alpha,\n color,\n }\n }\n\n type FormatColor = ReturnType\n\n // 将HTML字符串格式化为pptxgenjs所需的格式\n // 核心思路:将HTML字符串按样式分片平铺,每个片段需要继承祖先元素的样式信息,遇到块级元素需要换行\n const formatHTML = (html: string) => {\n const ast = toAST(html)\n\n const slices: pptxgen.TextProps[] = []\n const parse = (obj: AST[], baseStyleObj = {}) => {\n for (const item of obj) {\n if ('tagName' in item && ['div', 'ul', 'li', 'p'].includes(item.tagName) && slices.length) {\n const lastSlice = slices[slices.length - 1]\n if (!lastSlice.options) lastSlice.options = {}\n lastSlice.options.breakLine = true\n }\n\n const styleObj = { ...baseStyleObj }\n const styleAttr = 'attributes' in item ? item.attributes.find(attr => attr.key === 'style') : null\n if (styleAttr && styleAttr.value) {\n const styleArr = styleAttr.value.split(';')\n for (const styleItem of styleArr) {\n const [_key, _value] = styleItem.split(': ')\n const [key, value] = [trim(_key), trim(_value)]\n if (key && value) styleObj[key] = value\n }\n }\n\n if ('tagName' in item) {\n if (item.tagName === 'em') {\n styleObj['font-style'] = 'italic'\n }\n if (item.tagName === 'strong') {\n styleObj['font-weight'] = 'bold'\n }\n if (item.tagName === 'sup') {\n styleObj['vertical-align'] = 'super'\n }\n if (item.tagName === 'sub') {\n styleObj['vertical-align'] = 'sub'\n }\n }\n\n if ('tagName' in item && item.tagName === 'br') {\n slices.push({ text: '', options: { breakLine: true } })\n }\n else if ('content' in item) {\n const text = item.content.replace(/\\n/g, '').replace(/ /g, ' ')\n const options: pptxgen.TextPropsOptions = {}\n\n if (styleObj['font-size']) {\n options.fontSize = parseInt(styleObj['font-size']) * 0.75\n }\n if (styleObj['color']) {\n options.color = formatColor(styleObj['color']).color\n }\n if (styleObj['background-color']) {\n options.highlight = formatColor(styleObj['background-color']).color\n }\n if (styleObj['text-decoration-line']) {\n if (styleObj['text-decoration-line'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration-line'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['text-decoration']) {\n if (styleObj['text-decoration'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['vertical-align']) {\n if (styleObj['vertical-align'] === 'super') options.superscript = true\n if (styleObj['vertical-align'] === 'sub') options.subscript = true\n }\n if (styleObj['text-align']) options.align = styleObj['text-align']\n if (styleObj['font-weight']) options.bold = styleObj['font-weight'] === 'bold'\n if (styleObj['font-style']) options.italic = styleObj['font-style'] === 'italic'\n if (styleObj['font-family']) options.fontFace = styleObj['font-family']\n\n slices.push({ text, options })\n }\n else if ('children' in item) parse(item.children, styleObj)\n }\n }\n parse(ast)\n return slices\n }\n\n type Points = Array<\n | { x: number; y: number; moveTo?: boolean }\n | { x: number; y: number; curve: { type: 'arc'; hR: number; wR: number; stAng: number; swAng: number } }\n | { x: number; y: number; curve: { type: 'quadratic'; x1: number; y1: number } }\n | { x: number; y: number; curve: { type: 'cubic'; x1: number; y1: number; x2: number; y2: number } }\n | { close: true }\n >\n\n // 将SVG路径信息格式化为pptxgenjs所需要的格式\n const formatPoints = (points: SvgPoints, scale = { x: 1, y: 1 }): Points => {\n return points.map(point => {\n if (point.close !== undefined) {\n return { close: true }\n }\n else if (point.type === 'M') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n moveTo: true,\n }\n }\n else if (point.curve) {\n if (point.curve.type === 'cubic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'cubic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n x2: (point.curve.x2 as number) / 100 * scale.x,\n y2: (point.curve.y2 as number) / 100 * scale.y,\n },\n }\n }\n else if (point.curve.type === 'quadratic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'quadratic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n },\n }\n }\n }\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n }\n })\n }\n\n // 导出PPTX文件\n const exportPPTX = () => {\n exporting.value = true\n const pptx = new pptxgen()\n\n for (const slide of slides.value) {\n const pptxSlide = pptx.addSlide()\n\n if (slide.background) {\n const background = slide.background\n if (background.type === 'image' && background.image) {\n pptxSlide.background = { data: background.image }\n }\n else if (background.type === 'solid' && background.color) {\n const c = formatColor(background.color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n else if (background.type === 'gradient' && background.gradientColor) {\n const [color1, color2] = background.gradientColor\n const color = tinycolor.mix(color1, color2).toHexString()\n const c = formatColor(color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n }\n\n if (!slide.elements) continue\n\n for (const el of slide.elements) {\n if (el.type === 'text') {\n const textProps = formatHTML(el.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: 'middle',\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.wordSpace) options.charSpacing = el.wordSpace * 0.75\n if (el.lineHeight) options.lineSpacingMultiple = el.lineHeight * 0.75\n if (el.fill) {\n const c = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n options.fill = { color: c.color, transparency: (1 - c.alpha * opacity) * 100 }\n }\n if (el.defaultColor) options.color = formatColor(el.defaultColor).color\n if (el.defaultFontName) options.fontFace = el.defaultFontName\n if (el.shadow) {\n const c = formatColor(el.shadow.color)\n options.shadow = {\n type: 'outer',\n color: c.color.replace('#', ''),\n opacity: c.alpha,\n blur: el.shadow.blur * 0.75,\n offset: (el.shadow.h + el.shadow.v) / 2 * 0.75,\n angle: 45,\n }\n }\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addText(textProps, options)\n }\n\n else if (el.type === 'image') {\n const options: pptxgen.ImageProps = {\n path: el.src,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.rotate) options.rotate = el.rotate\n if (el.clip && el.clip.shape === 'ellipse') options.rounding = true\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addImage(options)\n }\n\n else if (el.type === 'shape') {\n if (el.special) {\n const svgRef = document.querySelector(`.thumbnail-list .base-element-${el.id} svg`) as HTMLElement\n const base64SVG = svg2Base64(svgRef)\n\n const options: pptxgen.ImageProps = {\n data: base64SVG,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addImage(options)\n }\n else {\n const scale = {\n x: el.width / el.viewBox,\n y: el.height / el.viewBox,\n }\n const points = formatPoints(toPoints(el.path), scale)\n \n const fillColor = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n \n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fill: { color: fillColor.color, transparency: (1 - fillColor.alpha * opacity) * 100 },\n points,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.outline?.width) {\n options.line = {\n color: formatColor(el.outline?.color || '#000000').color, \n width: el.outline.width * 0.75, \n dashType: el.outline.style === 'solid' ? 'solid' : 'dash',\n }\n }\n if (el.shadow) {\n const c = formatColor(el.shadow.color)\n options.shadow = {\n type: 'outer',\n color: c.color.replace('#', ''),\n opacity: c.alpha,\n blur: el.shadow.blur * 0.75,\n offset: (el.shadow.h + el.shadow.v) / 2 * 0.75,\n angle: 45,\n }\n }\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n if (el.text) {\n const textProps = formatHTML(el.text.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: el.text.align,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.text.defaultColor) options.color = formatColor(el.text.defaultColor).color\n if (el.text.defaultFontName) options.fontFace = el.text.defaultFontName\n\n pptxSlide.addText(textProps, options)\n }\n }\n\n else if (el.type === 'line') {\n const path = getLineElementPath(el)\n const points = formatPoints(toPoints(path))\n const { minX, maxX, minY, maxY } = getElementRange(el)\n\n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: (maxX - minX) / 100,\n h: (maxY - minY) / 100,\n line: {\n color: formatColor(el.color).color, \n width: el.width * 0.75, \n dashType: el.style === 'solid' ? 'solid' : 'dash',\n beginArrowType: el.points[0] ? 'arrow' : 'none',\n endArrowType: el.points[1] ? 'arrow' : 'none',\n },\n points,\n }\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n\n else if (el.type === 'chart') {\n const chartData = []\n for (let i = 0; i < el.data.series.length; i++) {\n const item = el.data.series[i]\n chartData.push({\n name: `系列${i + 1}`,\n labels: el.data.labels,\n values: item,\n })\n }\n\n let chartColors: string[] = []\n if (el.themeColor.length === 10) chartColors = el.themeColor.map(color => formatColor(color).color)\n else if (el.themeColor.length === 1) chartColors = tinycolor(el.themeColor[0]).analogous(10).map(color => formatColor(color.toHexString()).color)\n else {\n const len = el.themeColor.length\n const supplement = tinycolor(el.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n chartColors = [...el.themeColor.slice(0, len - 1), ...supplement].map(color => formatColor(color).color)\n }\n \n const options: pptxgen.IChartOpts = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n chartColors: el.chartType === 'pie' ? chartColors : chartColors.slice(0, el.data.series.length),\n }\n\n if (el.fill) options.fill = formatColor(el.fill).color\n\n let type = pptx.ChartType.bar\n if (el.chartType === 'bar') {\n type = pptx.ChartType.bar\n options.barDir = el.options?.horizontalBars ? 'bar' : 'col'\n }\n else if (el.chartType === 'line') {\n if (el.options?.showArea) type = pptx.ChartType.area\n else if (el.options?.showLine === false) {\n type = pptx.ChartType.scatter\n\n chartData.unshift({ name: 'X-Axis', values: Array(el.data.series[0].length).fill(0).map((v, i) => i) })\n options.lineSize = 0\n }\n else type = pptx.ChartType.line\n\n if (el.options?.lineSmooth) options.lineSmooth = true\n }\n else if (el.chartType === 'pie') {\n if (el.options?.donut) {\n type = pptx.ChartType.doughnut\n options.holeSize = 75\n }\n else type = pptx.ChartType.pie\n }\n \n pptxSlide.addChart(type, chartData, options)\n }\n\n else if (el.type === 'table') {\n const hiddenCells = []\n for (let i = 0; i < el.data.length; i++) {\n const rowData = el.data[i]\n\n for (let j = 0; j < rowData.length; j++) {\n const cell = rowData[j]\n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) hiddenCells.push(`${row}_${col}`)\n }\n }\n }\n }\n\n const tableData = []\n\n const theme = el.theme\n let themeColor: FormatColor | null = null\n let subThemeColors: FormatColor[] = []\n if (theme) {\n themeColor = formatColor(theme.color)\n subThemeColors = getTableSubThemeColor(theme.color).map(item => formatColor(item))\n }\n\n for (let i = 0; i < el.data.length; i++) {\n const row = el.data[i]\n const _row = []\n\n for (let j = 0; j < row.length; j++) {\n const cell = row[j]\n const cellOptions: pptxgen.TableCellProps = {\n colspan: cell.colspan,\n rowspan: cell.rowspan,\n bold: cell.style?.bold || false,\n italic: cell.style?.em || false,\n underline: { style: cell.style?.underline ? 'sng' : 'none' },\n align: cell.style?.align || 'left',\n valign: 'middle',\n fontFace: cell.style?.fontname || '微软雅黑',\n fontSize: (cell.style?.fontsize ? parseInt(cell.style?.fontsize) : 14) * 0.75,\n }\n if (theme && themeColor) {\n let c: FormatColor\n if (i % 2 === 0) c = subThemeColors[1]\n else c = subThemeColors[0]\n\n if (theme.rowHeader && i === 0) c = themeColor\n else if (theme.rowFooter && i === el.data.length - 1) c = themeColor\n else if (theme.colHeader && j === 0) c = themeColor\n else if (theme.colFooter && j === row.length - 1) c = themeColor\n\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.backcolor) {\n const c = formatColor(cell.style.backcolor)\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.color) cellOptions.color = formatColor(cell.style.color).color\n\n if (!hiddenCells.includes(`${i}_${j}`)) {\n _row.push({\n text: cell.text,\n options: cellOptions,\n })\n }\n }\n if (_row.length) tableData.push(_row)\n }\n\n const options: pptxgen.TableProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n colW: el.colWidths.map(item => el.width * item / 100),\n }\n if (el.outline.width && el.outline.color) {\n options.border = {\n type: el.outline.style === 'solid' ? 'solid' : 'dash',\n pt: el.outline.width * 0.75,\n color: formatColor(el.outline.color).color,\n }\n }\n\n pptxSlide.addTable(tableData, options)\n }\n }\n }\n pptx.writeFile({ fileName: `pptist.pptx` }).then(() => exporting.value = false).catch(() => {\n exporting.value = false\n message.error('导出失败')\n })\n }\n\n return {\n exporting,\n exportJSON,\n exportPPTX,\n }\n}","\n\n\n\n","import { render } from \"./HotkeyDoc.vue?vue&type=template&id=47d0351b&scoped=true\"\nimport script from \"./HotkeyDoc.vue?vue&type=script&lang=js\"\nexport * from \"./HotkeyDoc.vue?vue&type=script&lang=js\"\n\nimport \"./HotkeyDoc.vue?vue&type=style&index=0&id=47d0351b&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-47d0351b\"\n\nexport default script","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useExport from '@/hooks/useExport'\n\nimport HotkeyDoc from './HotkeyDoc.vue'\n\nexport default defineComponent({\n name: 'editor-header',\n components: {\n HotkeyDoc,\n },\n setup() {\n const store = useStore()\n\n const { enterScreening, enterScreeningFromStart } = useScreening()\n const { createSlide, deleteSlide, resetSlides } = useSlideHandler()\n const { redo, undo } = useHistorySnapshot()\n const { exporting, exportJSON, exportPPTX } = useExport()\n\n const showGridLines = computed(() => store.state.showGridLines)\n const toggleGridLines = () => {\n store.commit(MutationTypes.SET_GRID_LINES_STATE, !showGridLines.value)\n }\n\n const hotkeyDrawerVisible = ref(false)\n\n const goIssues = () => {\n window.open('https://github.com/pipipi-pikachu/PPTist/issues')\n }\n\n return {\n redo,\n undo,\n showGridLines,\n hotkeyDrawerVisible,\n exporting,\n enterScreening,\n enterScreeningFromStart,\n createSlide,\n deleteSlide,\n toggleGridLines,\n resetSlides,\n exportJSON,\n exportPPTX,\n goIssues,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=13ca7328&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=13ca7328&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-13ca7328\"\n\nexport default script","\n\n\n\n","// 清除文字选区\nexport const removeAllRanges = () => {\n const selection = window.getSelection()\n selection && selection.removeAllRanges()\n}","import { ref, computed, onMounted, onUnmounted, Ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nexport default (canvasRef: Ref) => {\n const viewportLeft = ref(0)\n const viewportTop = ref(0)\n\n const store = useStore()\n const canvasPercentage = computed(() => store.state.canvasPercentage)\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n // 计算画布可视区域的位置\n const setViewportPosition = () => {\n if (!canvasRef.value) return\n const canvasWidth = canvasRef.value.clientWidth\n const canvasHeight = canvasRef.value.clientHeight\n\n if (canvasHeight / canvasWidth > viewportRatio.value) {\n const viewportActualWidth = canvasWidth * (canvasPercentage.value / 100)\n store.commit(MutationTypes.SET_CANVAS_SCALE, viewportActualWidth / VIEWPORT_SIZE)\n viewportLeft.value = (canvasWidth - viewportActualWidth) / 2\n viewportTop.value = (canvasHeight - viewportActualWidth * viewportRatio.value) / 2\n }\n else {\n const viewportActualHeight = canvasHeight * (canvasPercentage.value / 100)\n store.commit(MutationTypes.SET_CANVAS_SCALE, viewportActualHeight / (VIEWPORT_SIZE * viewportRatio.value))\n viewportLeft.value = (canvasWidth - viewportActualHeight / viewportRatio.value) / 2\n viewportTop.value = (canvasHeight - viewportActualHeight) / 2\n }\n }\n\n // 可视区域缩放或比例变化时,更新可视区域的位置\n watch([canvasPercentage, viewportRatio], setViewportPosition)\n\n // 画布可视区域位置和大小的样式\n const viewportStyles = computed(() => ({\n width: VIEWPORT_SIZE,\n height: VIEWPORT_SIZE * viewportRatio.value,\n left: viewportLeft.value,\n top: viewportTop.value,\n }))\n\n // 监听画布尺寸发生变化时,更新可视区域的位置\n const resizeObserver = new ResizeObserver(setViewportPosition)\n\n onMounted(() => {\n if (canvasRef.value) resizeObserver.observe(canvasRef.value)\n })\n onUnmounted(() => {\n if (canvasRef.value) resizeObserver.unobserve(canvasRef.value)\n })\n\n return {\n viewportStyles,\n }\n}","import { Ref, reactive, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementRange } from '@/utils/element'\n\nexport default (elementList: Ref, viewportRef: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const mouseSelectionState = reactive({\n isShow: false,\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n quadrant: 1,\n })\n\n // 更新鼠标框选范围\n const updateMouseSelection = (e: MouseEvent) => {\n if (!viewportRef.value) return\n\n let isMouseDown = true\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n const minSelectionRange = 5\n \n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const left = (startPageX - viewportRect.x) / canvasScale.value\n const top = (startPageY - viewportRect.y) / canvasScale.value\n\n // 确定框选的起始位置和其他默认值初始化\n mouseSelectionState.isShow = false\n mouseSelectionState.quadrant = 4\n mouseSelectionState.top = top\n mouseSelectionState.left = left\n mouseSelectionState.width = 0\n mouseSelectionState.height = 0\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const offsetWidth = (currentPageX - startPageX) / canvasScale.value\n const offsetHeight = (currentPageY - startPageY) / canvasScale.value\n\n const width = Math.abs(offsetWidth)\n const height = Math.abs(offsetHeight)\n\n if ( width < minSelectionRange || height < minSelectionRange ) return\n \n // 计算鼠标框选(移动)的方向\n // 按四个象限的位置区分,如右下角为第四象限\n let quadrant = 0\n if ( offsetWidth > 0 && offsetHeight > 0 ) quadrant = 4\n else if ( offsetWidth < 0 && offsetHeight < 0 ) quadrant = 1\n else if ( offsetWidth > 0 && offsetHeight < 0 ) quadrant = 2\n else if ( offsetWidth < 0 && offsetHeight > 0 ) quadrant = 3\n\n // 更新框选范围\n mouseSelectionState.isShow = true\n mouseSelectionState.quadrant = quadrant\n mouseSelectionState.width = width\n mouseSelectionState.height = height\n }\n\n document.onmouseup = () => {\n document.onmousemove = null\n document.onmouseup = null\n isMouseDown = false\n\n // 计算画布中的元素是否处在鼠标选择范围中,处在范围中的元素设置为被选中状态\n let inRangeElementList: PPTElement[] = []\n for (let i = 0; i < elementList.value.length; i++) {\n const element = elementList.value[i]\n const mouseSelectionLeft = mouseSelectionState.left\n const mouseSelectionTop = mouseSelectionState.top\n const mouseSelectionWidth = mouseSelectionState.width\n const mouseSelectionHeight = mouseSelectionState.height\n\n const quadrant = mouseSelectionState.quadrant\n\n const { minX, maxX, minY, maxY } = getElementRange(element)\n\n // 计算元素是否处在框选范围内时,四个框选方向的计算方式有差异\n let isInclude = false\n if (quadrant === 4) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > mouseSelectionTop && \n maxY < mouseSelectionTop + mouseSelectionHeight\n }\n else if (quadrant === 1) {\n isInclude = minX > (mouseSelectionLeft - mouseSelectionWidth) && \n maxX < (mouseSelectionLeft - mouseSelectionWidth) + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (quadrant === 2) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (quadrant === 3) {\n isInclude = minX > (mouseSelectionLeft - mouseSelectionWidth) && \n maxX < (mouseSelectionLeft - mouseSelectionWidth) + mouseSelectionWidth && \n minY > mouseSelectionTop && \n maxY < mouseSelectionTop + mouseSelectionHeight\n }\n\n // 被锁定的元素即使在范围内,也不需要设置为选中状态\n if (isInclude && !element.lock) inRangeElementList.push(element)\n }\n\n // 如果范围内有组合元素的成员,需要该组全部成员都处在范围内,才会被设置为选中状态\n inRangeElementList = inRangeElementList.filter(inRangeElement => {\n if (inRangeElement.groupId) {\n const inRangeElementIdList = inRangeElementList.map(inRangeElement => inRangeElement.id)\n const groupElementList = elementList.value.filter(element => element.groupId === inRangeElement.groupId)\n return groupElementList.every(groupElement => inRangeElementIdList.includes(groupElement.id))\n }\n return true\n })\n const inRangeElementIdList = inRangeElementList.map(inRangeElement => inRangeElement.id)\n if (inRangeElementIdList.length) store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, inRangeElementIdList)\n\n mouseSelectionState.isShow = false\n }\n }\n\n return {\n mouseSelectionState,\n updateMouseSelection,\n }\n}","import { computed, onMounted, onUnmounted, Ref } from 'vue'\nimport { useStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (elementRef: Ref) => {\n const store = useStore()\n const disableHotkeys = computed(() => store.state.disableHotkeys)\n\n const { createImageElement, createTextElement } = useCreateElement()\n\n // 拖拽元素到画布中\n const handleDrop = (e: DragEvent) => {\n if (!e.dataTransfer || e.dataTransfer.items.length === 0) return\n const dataTransferItem = e.dataTransfer.items[0]\n\n // 检查事件对象中是否存在图片,存在则插入图片,否则继续检查是否存在文字,存在则插入文字\n if (dataTransferItem.kind === 'file' && dataTransferItem.type.indexOf('image') !== -1) {\n const imageFile = dataTransferItem.getAsFile()\n if (imageFile) {\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n }\n else if (dataTransferItem.kind === 'string' && dataTransferItem.type === 'text/plain') {\n dataTransferItem.getAsString(text => {\n if (disableHotkeys.value) return\n const string = parseText2Paragraphs(text)\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, string)\n })\n }\n }\n\n onMounted(() => {\n elementRef.value && elementRef.value.addEventListener('drop', handleDrop)\n\n document.ondragleave = e => e.preventDefault()\n document.ondrop = e => e.preventDefault()\n document.ondragenter = e => e.preventDefault()\n document.ondragover = e => e.preventDefault()\n })\n onUnmounted(() => {\n elementRef.value && elementRef.value.removeEventListener('drop', handleDrop)\n\n document.ondragleave = null\n document.ondrop = null\n document.ondragenter = null\n document.ondragover = null\n })\n}","import { Ref, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTTextElement, PPTImageElement, PPTShapeElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\n/**\n * 计算给定坐标到原点连线的弧度\n * @param x 坐标x\n * @param y 坐标y\n */\nconst getAngleFromCoordinate = (x: number, y: number) => {\n const radian = Math.atan2(x, y)\n const angle = 180 / Math.PI * radian\n return angle\n}\n\nexport default (elementList: Ref, viewportRef: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 旋转元素\n const rotateElement = (element: PPTTextElement | PPTImageElement | PPTShapeElement) => {\n let isMouseDown = true\n let angle = 0\n const elOriginRotate = element.rotate || 0\n\n const elLeft = element.left\n const elTop = element.top\n const elWidth = element.width\n const elHeight = element.height\n\n // 元素中心点(旋转中心点)\n const centerX = elLeft + elWidth / 2\n const centerY = elTop + elHeight / 2\n\n if (!viewportRef.value) return\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n // 计算当前鼠标位置相对元素中心点连线的角度(弧度)\n const mouseX = (e.pageX - viewportRect.left) / canvasScale.value\n const mouseY = (e.pageY - viewportRect.top) / canvasScale.value\n const x = mouseX - centerX\n const y = centerY - mouseY\n\n angle = getAngleFromCoordinate(x, y)\n\n // 靠近45倍数的角度时有吸附效果\n const sorptionRange = 5\n if ( Math.abs(angle) <= sorptionRange ) angle = 0\n else if ( angle > 0 && Math.abs(angle - 45) <= sorptionRange ) angle -= (angle - 45)\n else if ( angle < 0 && Math.abs(angle + 45) <= sorptionRange ) angle -= (angle + 45)\n else if ( angle > 0 && Math.abs(angle - 90) <= sorptionRange ) angle -= (angle - 90)\n else if ( angle < 0 && Math.abs(angle + 90) <= sorptionRange ) angle -= (angle + 90)\n else if ( angle > 0 && Math.abs(angle - 135) <= sorptionRange ) angle -= (angle - 135)\n else if ( angle < 0 && Math.abs(angle + 135) <= sorptionRange ) angle -= (angle + 135)\n else if ( angle > 0 && Math.abs(angle - 180) <= sorptionRange ) angle -= (angle - 180)\n else if ( angle < 0 && Math.abs(angle + 180) <= sorptionRange ) angle -= (angle + 180)\n\n elementList.value = elementList.value.map(el => element.id === el.id ? { ...el, rotate: angle } : el)\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n if (elOriginRotate === angle) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n rotateElement,\n }\n}","export const ELEMENT_TYPE_ZH = {\n text: '文本',\n image: '图片',\n shape: '形状',\n line: '线条',\n chart: '图表',\n table: '表格',\n}\n\nexport const MIN_SIZE = {\n text: 20,\n image: 20,\n shape: 15,\n chart: 200,\n table: 20,\n}","import { computed, Ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTImageElement, PPTLineElement, PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandlers, AlignmentLineProps, MultiSelectRange } from '@/types/edit'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { MIN_SIZE } from '@/configs/element'\nimport { AlignLine, uniqAlignLines } from '@/utils/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface RotateElementData {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n/**\n * 计算旋转后的元素八个缩放点的位置\n * @param element 元素原始位置大小信息\n * @param angle 旋转角度\n */\nconst getRotateElementPoints = (element: RotateElementData, angle: number) => {\n const { left, top, width, height } = element\n\n const radius = Math.sqrt( Math.pow(width, 2) + Math.pow(height, 2) ) / 2\n const auxiliaryAngle = Math.atan(height / width) * 180 / Math.PI\n\n const tlbraRadian = (180 - angle - auxiliaryAngle) * Math.PI / 180\n const trblaRadian = (auxiliaryAngle - angle) * Math.PI / 180\n const taRadian = (90 - angle) * Math.PI / 180\n const raRadian = angle * Math.PI / 180\n\n const halfWidth = width / 2\n const halfHeight = height / 2\n\n const middleLeft = left + halfWidth\n const middleTop = top + halfHeight\n\n const leftTopPoint = {\n left: middleLeft + radius * Math.cos(tlbraRadian),\n top: middleTop - radius * Math.sin(tlbraRadian),\n }\n const topPoint = {\n left: middleLeft + halfHeight * Math.cos(taRadian),\n top: middleTop - halfHeight * Math.sin(taRadian),\n }\n const rightTopPoint = {\n left: middleLeft + radius * Math.cos(trblaRadian),\n top: middleTop - radius * Math.sin(trblaRadian),\n }\n const rightPoint = {\n left: middleLeft + halfWidth * Math.cos(raRadian),\n top: middleTop + halfWidth * Math.sin(raRadian),\n }\n const rightBottomPoint = {\n left: middleLeft - radius * Math.cos(tlbraRadian),\n top: middleTop + radius * Math.sin(tlbraRadian),\n }\n const bottomPoint = {\n left: middleLeft - halfHeight * Math.sin(raRadian),\n top: middleTop + halfHeight * Math.cos(raRadian),\n }\n const leftBottomPoint = {\n left: middleLeft - radius * Math.cos(trblaRadian),\n top: middleTop + radius * Math.sin(trblaRadian),\n }\n const leftPoint = {\n left: middleLeft - halfWidth * Math.cos(raRadian),\n top: middleTop - halfWidth * Math.sin(raRadian),\n }\n\n return { leftTopPoint, topPoint, rightTopPoint, rightPoint, rightBottomPoint, bottomPoint, leftBottomPoint, leftPoint }\n}\n\n/**\n * 获取元素某缩放点相对的另一个点的位置,如:【上】对应【下】、【左上】对应【右下】\n * @param direction 当前操作的缩放点\n * @param points 旋转后的元素八个缩放点的位置\n */\nconst getOppositePoint = (direction: string, points: ReturnType): { left: number; top: number } => {\n const oppositeMap = {\n [OperateResizeHandlers.RIGHT_BOTTOM]: points.leftTopPoint,\n [OperateResizeHandlers.LEFT_BOTTOM]: points.rightTopPoint,\n [OperateResizeHandlers.LEFT_TOP]: points.rightBottomPoint,\n [OperateResizeHandlers.RIGHT_TOP]: points.leftBottomPoint,\n [OperateResizeHandlers.TOP]: points.bottomPoint,\n [OperateResizeHandlers.BOTTOM]: points.topPoint,\n [OperateResizeHandlers.LEFT]: points.rightPoint,\n [OperateResizeHandlers.RIGHT]: points.leftPoint,\n }\n return oppositeMap[direction]\n}\n\nexport default (\n elementList: Ref,\n alignmentLines: Ref,\n) => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const canvasScale = computed(() => store.state.canvasScale)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 缩放元素\n const scaleElement = (e: MouseEvent, element: Exclude, command: OperateResizeHandlers) => {\n let isMouseDown = true\n store.commit(MutationTypes.SET_SCALING_STATE, true)\n\n const elOriginLeft = element.left\n const elOriginTop = element.top\n const elOriginWidth = element.width\n const elOriginHeight = element.height\n \n const elRotate = ('rotate' in element && element.rotate) ? element.rotate : 0\n const rotateRadian = Math.PI * elRotate / 180\n\n const fixedRatio = ctrlOrShiftKeyActive.value || ('fixedRatio' in element && element.fixedRatio)\n const aspectRatio = elOriginWidth / elOriginHeight\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n // 元素最小缩放限制\n const minSize = MIN_SIZE[element.type] || 20\n const getSizeWithinRange = (size: number) => size < minSize ? minSize : size\n\n let points: ReturnType\n let baseLeft = 0\n let baseTop = 0\n let horizontalLines: AlignLine[] = []\n let verticalLines: AlignLine[] = []\n\n // 旋转后的元素进行缩放时,引入基点的概念,以当前操作的缩放点相对的点为基点\n // 例如拖动右下角缩放时,左上角为基点,需要保持左上角不变然后修改其他的点的位置来达到所放的效果\n if ('rotate' in element && element.rotate) {\n const { left, top, width, height } = element\n points = getRotateElementPoints({ left, top, width, height }, elRotate)\n const oppositePoint = getOppositePoint(command, points)\n\n baseLeft = oppositePoint.left\n baseTop = oppositePoint.top\n }\n\n // 未旋转的元素具有缩放时的对齐吸附功能,在这处收集对齐对齐吸附线\n // 包括页面内除目标元素外的其他元素在画布中的各个可吸附对齐位置:上下左右四边\n // 其中线条和被旋转过的元素不参与吸附对齐\n else {\n const edgeWidth = VIEWPORT_SIZE\n const edgeHeight = VIEWPORT_SIZE * viewportRatio.value\n const isActiveGroupElement = element.id === activeGroupElementId.value\n \n for (const el of elementList.value) {\n if ('rotate' in el && el.rotate) continue\n if (el.type === 'line') continue\n if (isActiveGroupElement && el.id === element.id) continue\n if (!isActiveGroupElement && activeElementIdList.value.includes(el.id)) continue\n\n const left = el.left\n const top = el.top\n const width = el.width\n const height = el.height\n const right = left + width\n const bottom = top + height\n\n const topLine: AlignLine = { value: top, range: [left, right] }\n const bottomLine: AlignLine = { value: bottom, range: [left, right] }\n const leftLine: AlignLine = { value: left, range: [top, bottom] }\n const rightLine: AlignLine = { value: right, range: [top, bottom] }\n\n horizontalLines.push(topLine, bottomLine)\n verticalLines.push(leftLine, rightLine)\n }\n\n // 画布可视区域的四个边界、水平中心、垂直中心\n const edgeTopLine: AlignLine = { value: 0, range: [0, edgeWidth] }\n const edgeBottomLine: AlignLine = { value: edgeHeight, range: [0, edgeWidth] }\n const edgeHorizontalCenterLine: AlignLine = { value: edgeHeight / 2, range: [0, edgeWidth] }\n const edgeLeftLine: AlignLine = { value: 0, range: [0, edgeHeight] }\n const edgeRightLine: AlignLine = { value: edgeWidth, range: [0, edgeHeight] }\n const edgeVerticalCenterLine: AlignLine = { value: edgeWidth / 2, range: [0, edgeHeight] }\n\n horizontalLines.push(edgeTopLine, edgeBottomLine, edgeHorizontalCenterLine)\n verticalLines.push(edgeLeftLine, edgeRightLine, edgeVerticalCenterLine)\n \n horizontalLines = uniqAlignLines(horizontalLines)\n verticalLines = uniqAlignLines(verticalLines)\n }\n \n // 对齐吸附方法\n // 将收集到的对齐吸附线与计算的目标元素当前的位置大小相关数据做对比,差值小于设定的值时执行自动缩放校正\n // 水平和垂直两个方向需要分开计算\n const alignedAdsorption = (currentX: number | null, currentY: number | null) => {\n const sorptionRange = 5\n\n const _alignmentLines: AlignmentLineProps[] = []\n let isVerticalAdsorbed = false\n let isHorizontalAdsorbed = false\n const correctionVal = { offsetX: 0, offsetY: 0 }\n \n if (currentY || currentY === 0) {\n for (let i = 0; i < horizontalLines.length; i++) {\n const { value, range } = horizontalLines[i]\n const min = Math.min(...range, currentX || 0)\n const max = Math.max(...range, currentX || 0)\n \n if (Math.abs(currentY - value) < sorptionRange && !isHorizontalAdsorbed) {\n correctionVal.offsetY = currentY - value\n isHorizontalAdsorbed = true\n _alignmentLines.push({ type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100 })\n }\n }\n }\n if (currentX || currentX === 0) {\n for (let i = 0; i < verticalLines.length; i++) {\n const { value, range } = verticalLines[i]\n const min = Math.min(...range, (currentY || 0))\n const max = Math.max(...range, (currentY || 0))\n\n if (Math.abs(currentX - value) < sorptionRange && !isVerticalAdsorbed) {\n correctionVal.offsetX = currentX - value\n isVerticalAdsorbed = true\n _alignmentLines.push({ type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100 })\n }\n }\n }\n alignmentLines.value = _alignmentLines\n return correctionVal\n }\n\n // 开始缩放\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = currentPageX - startPageX\n const y = currentPageY - startPageY\n\n let width = elOriginWidth\n let height = elOriginHeight\n let left = elOriginLeft\n let top = elOriginTop\n \n // 元素被旋转的情况下,需要根据元素旋转的角度,重新计算需要缩放的距离(鼠标按下后移动的距离)\n if (elRotate) {\n const revisedX = (Math.cos(rotateRadian) * x + Math.sin(rotateRadian) * y) / canvasScale.value\n let revisedY = (Math.cos(rotateRadian) * y - Math.sin(rotateRadian) * x) / canvasScale.value\n\n // 锁定宽高比例(仅四个角可能触发,四条边不会触发)\n // 以水平方向上缩放的距离为基础,计算垂直方向上的缩放距离,保持二者具有相同的缩放比例\n if (fixedRatio) {\n if (command === OperateResizeHandlers.RIGHT_BOTTOM || command === OperateResizeHandlers.LEFT_TOP) revisedY = revisedX / aspectRatio\n if (command === OperateResizeHandlers.LEFT_BOTTOM || command === OperateResizeHandlers.RIGHT_TOP) revisedY = -revisedX / aspectRatio\n }\n\n // 根据不同的操作点分别计算元素缩放后的大小和位置\n // 需要注意:\n // 此处计算的位置需要在后面重新进行校正,因为旋转后再缩放事实上会改变元素基点的位置(虽然视觉上基点保持不动,但这是【旋转】+【移动】共同作用的结果)\n // 但此处计算的大小不需要重新校正,因为前面已经重新计算需要缩放的距离,相当于大小已经经过了校正\n if (command === OperateResizeHandlers.RIGHT_BOTTOM) {\n width = getSizeWithinRange(elOriginWidth + revisedX)\n height = getSizeWithinRange(elOriginHeight + revisedY)\n }\n else if (command === OperateResizeHandlers.LEFT_BOTTOM) {\n width = getSizeWithinRange(elOriginWidth - revisedX)\n height = getSizeWithinRange(elOriginHeight + revisedY)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.LEFT_TOP) {\n width = getSizeWithinRange(elOriginWidth - revisedX)\n height = getSizeWithinRange(elOriginHeight - revisedY)\n left = elOriginLeft - (width - elOriginWidth)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.RIGHT_TOP) {\n width = getSizeWithinRange(elOriginWidth + revisedX)\n height = getSizeWithinRange(elOriginHeight - revisedY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.TOP) {\n height = getSizeWithinRange(elOriginHeight - revisedY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.BOTTOM) {\n height = getSizeWithinRange(elOriginHeight + revisedY)\n }\n else if (command === OperateResizeHandlers.LEFT) {\n width = getSizeWithinRange(elOriginWidth - revisedX)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.RIGHT) {\n width = getSizeWithinRange(elOriginWidth + revisedX)\n }\n\n // 获取当前元素的基点坐标,与初始状态时的基点坐标进行对比,并计算差值进行元素位置的校正\n const currentPoints = getRotateElementPoints({ width, height, left, top }, elRotate)\n const currentOppositePoint = getOppositePoint(command, currentPoints)\n const currentBaseLeft = currentOppositePoint.left\n const currentBaseTop = currentOppositePoint.top\n\n const offsetX = currentBaseLeft - baseLeft\n const offsetY = currentBaseTop - baseTop\n\n left = left - offsetX\n top = top - offsetY\n }\n\n // 元素未被旋转的情况下,正常计算新的位置大小即可,无需复杂的校正等工作\n // 额外需要处理对齐吸附相关的操作\n // 锁定宽高比例相关的操作同上,不再赘述\n else {\n let moveX = x / canvasScale.value\n let moveY = y / canvasScale.value\n\n if (fixedRatio) {\n if (command === OperateResizeHandlers.RIGHT_BOTTOM || command === OperateResizeHandlers.LEFT_TOP) moveY = moveX / aspectRatio\n if (command === OperateResizeHandlers.LEFT_BOTTOM || command === OperateResizeHandlers.RIGHT_TOP) moveY = -moveX / aspectRatio\n }\n\n if (command === OperateResizeHandlers.RIGHT_BOTTOM) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + elOriginWidth + moveX, elOriginTop + elOriginHeight + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = moveY * aspectRatio\n else moveY = moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth + moveX)\n height = getSizeWithinRange(elOriginHeight + moveY)\n }\n else if (command === OperateResizeHandlers.LEFT_BOTTOM) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + moveX, elOriginTop + elOriginHeight + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = -moveY * aspectRatio\n else moveY = -moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth - moveX)\n height = getSizeWithinRange(elOriginHeight + moveY)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.LEFT_TOP) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + moveX, elOriginTop + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = moveY * aspectRatio\n else moveY = moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth - moveX)\n height = getSizeWithinRange(elOriginHeight - moveY)\n left = elOriginLeft - (width - elOriginWidth)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.RIGHT_TOP) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + elOriginWidth + moveX, elOriginTop + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = -moveY * aspectRatio\n else moveY = -moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth + moveX)\n height = getSizeWithinRange(elOriginHeight - moveY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.LEFT) {\n const { offsetX } = alignedAdsorption(elOriginLeft + moveX, null)\n moveX = moveX - offsetX\n width = getSizeWithinRange(elOriginWidth - moveX)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.RIGHT) {\n const { offsetX } = alignedAdsorption(elOriginLeft + elOriginWidth + moveX, null)\n moveX = moveX - offsetX\n width = getSizeWithinRange(elOriginWidth + moveX)\n }\n else if (command === OperateResizeHandlers.TOP) {\n const { offsetY } = alignedAdsorption(null, elOriginTop + moveY)\n moveY = moveY - offsetY\n height = getSizeWithinRange(elOriginHeight - moveY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.BOTTOM) {\n const { offsetY } = alignedAdsorption(null, elOriginTop + elOriginHeight + moveY)\n moveY = moveY - offsetY\n height = getSizeWithinRange(elOriginHeight + moveY)\n }\n }\n \n elementList.value = elementList.value.map(el => element.id === el.id ? { ...el, left, top, width, height } : el)\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n alignmentLines.value = []\n \n if (startPageX === e.pageX && startPageY === e.pageY) return\n \n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n store.commit(MutationTypes.SET_SCALING_STATE, false)\n \n addHistorySnapshot()\n }\n }\n\n // 多选元素缩放\n const scaleMultiElement = (e: MouseEvent, range: MultiSelectRange, command: OperateResizeHandlers) => {\n let isMouseDown = true\n \n const { minX, maxX, minY, maxY } = range\n const operateWidth = maxX - minX\n const operateHeight = maxY - minY\n const aspectRatio = operateWidth / operateHeight\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const originElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList.value))\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = (currentPageX - startPageX) / canvasScale.value\n let y = (currentPageY - startPageY) / canvasScale.value\n\n // 锁定宽高比例,逻辑同上\n if (ctrlOrShiftKeyActive.value) {\n if (command === OperateResizeHandlers.RIGHT_BOTTOM || command === OperateResizeHandlers.LEFT_TOP) y = x / aspectRatio\n if (command === OperateResizeHandlers.LEFT_BOTTOM || command === OperateResizeHandlers.RIGHT_TOP) y = -x / aspectRatio\n }\n\n // 所有选中元素的整体范围\n let currentMinX = minX\n let currentMaxX = maxX\n let currentMinY = minY\n let currentMaxY = maxY\n\n if (command === OperateResizeHandlers.RIGHT_BOTTOM) {\n currentMaxX = maxX + x\n currentMaxY = maxY + y\n }\n else if (command === OperateResizeHandlers.LEFT_BOTTOM) {\n currentMinX = minX + x\n currentMaxY = maxY + y\n }\n else if (command === OperateResizeHandlers.LEFT_TOP) {\n currentMinX = minX + x\n currentMinY = minY + y\n }\n else if (command === OperateResizeHandlers.RIGHT_TOP) {\n currentMaxX = maxX + x\n currentMinY = minY + y\n }\n else if (command === OperateResizeHandlers.TOP) {\n currentMinY = minY + y\n }\n else if (command === OperateResizeHandlers.BOTTOM) {\n currentMaxY = maxY + y\n }\n else if (command === OperateResizeHandlers.LEFT) {\n currentMinX = minX + x\n }\n else if (command === OperateResizeHandlers.RIGHT) {\n currentMaxX = maxX + x\n }\n\n // 所有选中元素的整体宽高\n const currentOppositeWidth = currentMaxX - currentMinX\n const currentOppositeHeight = currentMaxY - currentMinY\n\n // 当前正在操作元素宽高占所有选中元素的整体宽高的比例\n let widthScale = currentOppositeWidth / operateWidth\n let heightScale = currentOppositeHeight / operateHeight\n\n if (widthScale <= 0) widthScale = 0\n if (heightScale <= 0) heightScale = 0\n \n // 根据前面计算的比例,计算并修改所有选中元素的位置大小\n elementList.value = elementList.value.map(el => {\n if ((el.type === 'image' || el.type === 'shape') && activeElementIdList.value.includes(el.id)) {\n const originElement = originElementList.find(originEl => originEl.id === el.id) as PPTImageElement | PPTShapeElement\n return {\n ...el,\n width: originElement.width * widthScale,\n height: originElement.height * heightScale,\n left: currentMinX + (originElement.left - minX) * widthScale,\n top: currentMinY + (originElement.top - minY) * heightScale,\n }\n }\n return el\n })\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n if (startPageX === e.pageX && startPageY === e.pageY) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n scaleElement,\n scaleMultiElement,\n }\n}","import { Ref, computed } from 'vue'\nimport { uniq } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\n\nexport default (\n elementList: Ref,\n moveElement: (e: MouseEvent, element: PPTElement) => void,\n) => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const handleElementId = computed(() => store.state.handleElementId)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n // 选中元素\n // startMove 表示是否需要再选中操作后进入到开始移动的状态\n const selectElement = (e: MouseEvent, element: PPTElement, startMove = true) => {\n if (!editorAreaFocus.value) store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n\n // 如果目标元素当前未被选中,则将他设为选中状态\n // 此时如果按下Ctrl键或Shift键,则进入多选状态,将当前已选中的元素和目标元素一起设置为选中状态,否则仅将目标元素设置为选中状态\n // 如果目标元素是分组成员,需要将该组合的其他元素一起设置为选中状态\n if (!activeElementIdList.value.includes(element.id)) {\n let newActiveIdList: string[] = []\n\n if (ctrlOrShiftKeyActive.value) {\n newActiveIdList = [...activeElementIdList.value, element.id]\n }\n else newActiveIdList = [element.id]\n \n if (element.groupId) {\n const groupMembersId: string[] = []\n elementList.value.forEach((el: PPTElement) => {\n if (el.groupId === element.groupId) groupMembersId.push(el.id)\n })\n newActiveIdList = [...newActiveIdList, ...groupMembersId]\n }\n\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, uniq(newActiveIdList))\n store.commit(MutationTypes.SET_HANDLE_ELEMENT_ID, element.id)\n }\n\n // 如果目标元素已被选中,且按下了Ctrl键或Shift键,则取消其被选中状态\n // 除非目标元素是最后的一个被选中元素,或者目标元素所在的组合是最后一组选中组合\n // 如果目标元素是分组成员,需要将该组合的其他元素一起取消选中状态\n else if (ctrlOrShiftKeyActive.value) {\n let newActiveIdList: string[] = []\n\n if (element.groupId) {\n const groupMembersId: string[] = []\n elementList.value.forEach((el: PPTElement) => {\n if (el.groupId === element.groupId) groupMembersId.push(el.id)\n })\n newActiveIdList = activeElementIdList.value.filter(id => !groupMembersId.includes(id))\n }\n else {\n newActiveIdList = activeElementIdList.value.filter(id => id !== element.id)\n }\n\n if (newActiveIdList.length > 0) {\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, newActiveIdList)\n }\n }\n\n // 如果目标元素已被选中,同时目标元素不是当前操作元素,则将其设置为当前操作元素\n else if (handleElementId.value !== element.id) {\n store.commit(MutationTypes.SET_HANDLE_ELEMENT_ID, element.id)\n }\n\n // 如果目标元素已被选中,同时也是当前操作元素,那么当目标元素在该状态下再次被点击时,将被设置为多选元素中的激活成员\n else if (activeGroupElementId.value !== element.id) {\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n ;(e.target as HTMLElement).onmouseup = (e: MouseEvent) => {\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n if (startPageX === currentPageX && startPageY === currentPageY) {\n store.commit(MutationTypes.SET_ACTIVE_GROUP_ELEMENT_ID, element.id)\n ;(e.target as HTMLElement).onmouseup = null\n }\n }\n }\n\n if (startMove) moveElement(e, element)\n }\n\n // 选中页面内的全部元素\n const selectAllElement = () => {\n const unlockedElements = elementList.value.filter(el => !el.lock)\n const newActiveElementIdList = unlockedElements.map(el => el.id)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, newActiveElementIdList)\n }\n\n return {\n selectElement,\n selectAllElement,\n }\n}\n","import { Ref, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { AlignmentLineProps } from '@/types/edit'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { getRectRotatedRange, AlignLine, uniqAlignLines } from '@/utils/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default (\n elementList: Ref,\n alignmentLines: Ref,\n) => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const canvasScale = computed(() => store.state.canvasScale)\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const dragElement = (e: MouseEvent, element: PPTElement) => {\n if (!activeElementIdList.value.includes(element.id)) return\n let isMouseDown = true\n\n const edgeWidth = VIEWPORT_SIZE\n const edgeHeight = VIEWPORT_SIZE * viewportRatio.value\n \n const sorptionRange = 5\n\n const originElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList.value))\n const originActiveElementList = originElementList.filter(el => activeElementIdList.value.includes(el.id))\n \n const elOriginLeft = element.left\n const elOriginTop = element.top\n const elOriginWidth = element.width\n const elOriginHeight = ('height' in element && element.height) ? element.height : 0\n const elOriginRotate = ('rotate' in element && element.rotate) ? element.rotate : 0\n \n const startPageX = e.pageX\n const startPageY = e.pageY\n\n let isMisoperation: boolean | null = null\n\n const isActiveGroupElement = element.id === activeGroupElementId.value\n\n // 收集对齐对齐吸附线\n // 包括页面内除目标元素外的其他元素在画布中的各个可吸附对齐位置:上下左右四边,水平中心、垂直中心\n // 其中线条和被旋转过的元素需要重新计算他们在画布中的中心点位置的范围\n let horizontalLines: AlignLine[] = []\n let verticalLines: AlignLine[] = []\n\n for (const el of elementList.value) {\n if (el.type === 'line') continue\n if (isActiveGroupElement && el.id === element.id) continue\n if (!isActiveGroupElement && activeElementIdList.value.includes(el.id)) continue\n\n let left, top, width, height\n if ('rotate' in el && el.rotate) {\n const { xRange, yRange } = getRectRotatedRange({\n left: el.left,\n top: el.top,\n width: el.width,\n height: el.height,\n rotate: el.rotate,\n })\n left = xRange[0]\n top = yRange[0]\n width = xRange[1] - xRange[0]\n height = yRange[1] - yRange[0]\n }\n else {\n left = el.left\n top = el.top\n width = el.width\n height = el.height\n }\n \n const right = left + width\n const bottom = top + height\n const centerX = top + height / 2\n const centerY = left + width / 2\n\n const topLine: AlignLine = { value: top, range: [left, right] }\n const bottomLine: AlignLine = { value: bottom, range: [left, right] }\n const horizontalCenterLine: AlignLine = { value: centerX, range: [left, right] }\n const leftLine: AlignLine = { value: left, range: [top, bottom] }\n const rightLine: AlignLine = { value: right, range: [top, bottom] }\n const verticalCenterLine: AlignLine = { value: centerY, range: [top, bottom] }\n\n horizontalLines.push(topLine, bottomLine, horizontalCenterLine)\n verticalLines.push(leftLine, rightLine, verticalCenterLine)\n }\n\n // 画布可视区域的四个边界、水平中心、垂直中心\n const edgeTopLine: AlignLine = { value: 0, range: [0, edgeWidth] }\n const edgeBottomLine: AlignLine = { value: edgeHeight, range: [0, edgeWidth] }\n const edgeHorizontalCenterLine: AlignLine = { value: edgeHeight / 2, range: [0, edgeWidth] }\n const edgeLeftLine: AlignLine = { value: 0, range: [0, edgeHeight] }\n const edgeRightLine: AlignLine = { value: edgeWidth, range: [0, edgeHeight] }\n const edgeVerticalCenterLine: AlignLine = { value: edgeWidth / 2, range: [0, edgeHeight] }\n\n horizontalLines.push(edgeTopLine, edgeBottomLine, edgeHorizontalCenterLine)\n verticalLines.push(edgeLeftLine, edgeRightLine, edgeVerticalCenterLine)\n \n // 对齐吸附线去重\n horizontalLines = uniqAlignLines(horizontalLines)\n verticalLines = uniqAlignLines(verticalLines)\n\n // 开始移动\n document.onmousemove = e => {\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n // 如果鼠标滑动距离过小,则将操作判定为误操作:\n // 如果误操作标记为null,表示是第一次触发移动,需要计算当前是否是误操作\n // 如果误操作标记为true,表示当前还处在误操作范围内,但仍然需要继续计算检查后续操作是否还处于误操作\n // 如果误操作标记为false,表示已经脱离了误操作范围,不需要再次计算\n if (isMisoperation !== false) {\n isMisoperation = Math.abs(startPageX - currentPageX) < sorptionRange && \n Math.abs(startPageY - currentPageY) < sorptionRange\n }\n if (!isMouseDown || isMisoperation) return\n\n const moveX = (currentPageX - startPageX) / canvasScale.value\n const moveY = (currentPageY - startPageY) / canvasScale.value\n\n // 基础目标位置\n let targetLeft = elOriginLeft + moveX\n let targetTop = elOriginTop + moveY\n\n // 计算目标元素在画布中的位置范围,用于吸附对齐\n // 需要区分单选和多选两种情况,其中多选状态下需要计算多选元素的整体范围;单选状态下需要继续区分线条、普通元素、旋转后的普通元素三种情况\n let targetMinX: number, targetMaxX: number, targetMinY: number, targetMaxY: number\n\n if (activeElementIdList.value.length === 1 || isActiveGroupElement) {\n if (elOriginRotate) {\n const { xRange, yRange } = getRectRotatedRange({\n left: targetLeft,\n top: targetTop,\n width: elOriginWidth,\n height: elOriginHeight,\n rotate: elOriginRotate,\n })\n targetMinX = xRange[0]\n targetMaxX = xRange[1]\n targetMinY = yRange[0]\n targetMaxY = yRange[1]\n }\n else if (element.type === 'line') {\n targetMinX = targetLeft\n targetMaxX = targetLeft + Math.max(element.start[0], element.end[0])\n targetMinY = targetTop\n targetMaxY = targetTop + Math.max(element.start[1], element.end[1])\n }\n else {\n targetMinX = targetLeft\n targetMaxX = targetLeft + elOriginWidth\n targetMinY = targetTop\n targetMaxY = targetTop + elOriginHeight\n }\n }\n else {\n const leftValues = []\n const topValues = []\n const rightValues = []\n const bottomValues = []\n \n for (let i = 0; i < originActiveElementList.length; i++) {\n const element = originActiveElementList[i]\n const left = element.left + moveX\n const top = element.top + moveY\n const width = element.width\n const height = ('height' in element && element.height) ? element.height : 0\n const rotate = ('rotate' in element && element.rotate) ? element.rotate : 0\n\n if ('rotate' in element && element.rotate) {\n const { xRange, yRange } = getRectRotatedRange({ left, top, width, height, rotate })\n leftValues.push(xRange[0])\n topValues.push(yRange[0])\n rightValues.push(xRange[1])\n bottomValues.push(yRange[1])\n }\n else if (element.type === 'line') {\n leftValues.push(left)\n topValues.push(top)\n rightValues.push(left + Math.max(element.start[0], element.end[0]))\n bottomValues.push(top + Math.max(element.start[1], element.end[1]))\n }\n else {\n leftValues.push(left)\n topValues.push(top)\n rightValues.push(left + width)\n bottomValues.push(top + height)\n }\n }\n\n targetMinX = Math.min(...leftValues)\n targetMaxX = Math.max(...rightValues)\n targetMinY = Math.min(...topValues)\n targetMaxY = Math.max(...bottomValues)\n }\n \n const targetCenterX = targetMinX + (targetMaxX - targetMinX) / 2\n const targetCenterY = targetMinY + (targetMaxY - targetMinY) / 2\n\n // 将收集到的对齐吸附线与计算的目标元素位置范围做对比,二者的差小于设定的值时执行自动对齐校正\n // 水平和垂直两个方向需要分开计算\n const _alignmentLines: AlignmentLineProps[] = []\n let isVerticalAdsorbed = false\n let isHorizontalAdsorbed = false\n for (let i = 0; i < horizontalLines.length; i++) {\n const { value, range } = horizontalLines[i]\n const min = Math.min(...range, targetMinX, targetMaxX)\n const max = Math.max(...range, targetMinX, targetMaxX)\n \n if (Math.abs(targetMinY - value) < sorptionRange && !isHorizontalAdsorbed) {\n targetTop = targetTop - (targetMinY - value)\n isHorizontalAdsorbed = true\n _alignmentLines.push({type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100})\n }\n if (Math.abs(targetMaxY - value) < sorptionRange && !isHorizontalAdsorbed) {\n targetTop = targetTop - (targetMaxY - value)\n isHorizontalAdsorbed = true\n _alignmentLines.push({type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100})\n }\n if (Math.abs(targetCenterY - value) < sorptionRange && !isHorizontalAdsorbed) {\n targetTop = targetTop - (targetCenterY - value)\n isHorizontalAdsorbed = true\n _alignmentLines.push({type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100})\n }\n }\n for (let i = 0; i < verticalLines.length; i++) {\n const { value, range } = verticalLines[i]\n const min = Math.min(...range, targetMinY, targetMaxY)\n const max = Math.max(...range, targetMinY, targetMaxY)\n\n if (Math.abs(targetMinX - value) < sorptionRange && !isVerticalAdsorbed) {\n targetLeft = targetLeft - (targetMinX - value)\n isVerticalAdsorbed = true\n _alignmentLines.push({type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100})\n }\n if (Math.abs(targetMaxX - value) < sorptionRange && !isVerticalAdsorbed) {\n targetLeft = targetLeft - (targetMaxX - value)\n isVerticalAdsorbed = true\n _alignmentLines.push({type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100})\n }\n if (Math.abs(targetCenterX - value) < sorptionRange && !isVerticalAdsorbed) {\n targetLeft = targetLeft - (targetCenterX - value)\n isVerticalAdsorbed = true\n _alignmentLines.push({type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100})\n }\n }\n alignmentLines.value = _alignmentLines\n \n // 单选状态下,或者当前选中的多个元素中存在正在操作的元素时,仅修改正在操作的元素的位置\n if (activeElementIdList.value.length === 1 || isActiveGroupElement) {\n elementList.value = elementList.value.map(el => {\n return el.id === element.id ? { ...el, left: targetLeft, top: targetTop } : el\n })\n }\n\n // 多选状态下,除了修改正在操作的元素的位置,其他被选中的元素也需要修改位置信息\n // 其他被选中的元素的位置信息通过正在操作的元素的移动偏移量来进行计算\n else {\n const handleElement = elementList.value.find(el => el.id === element.id)\n if (!handleElement) return\n\n elementList.value = elementList.value.map(el => {\n if (activeElementIdList.value.includes(el.id)) {\n if (el.id === element.id) {\n return {\n ...el,\n left: targetLeft,\n top: targetTop,\n }\n }\n return {\n ...el,\n left: el.left + (targetLeft - handleElement.left),\n top: el.top + (targetTop - handleElement.top),\n }\n }\n return el\n })\n }\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n alignmentLines.value = []\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n if (startPageX === currentPageX && startPageY === currentPageY) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragElement,\n }\n}","import { Ref, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTLineElement } from '@/types/slides'\nimport { OperateLineHandler, OperateLineHandlers } from '@/types/edit'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface AdsorptionPoint {\n x: number;\n y: number;\n}\n\nexport default (elementList: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 拖拽线条端点\n const dragLineElement = (e: MouseEvent, element: PPTLineElement, command: OperateLineHandler) => {\n let isMouseDown = true\n\n const sorptionRange = 8\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const adsorptionPoints: AdsorptionPoint[] = []\n\n // 获取所有线条以外的未旋转的元素的8个缩放点作为吸附位置\n for (let i = 0; i < elementList.value.length; i++) {\n const _element = elementList.value[i]\n if (_element.type === 'line' || ('rotate' in _element && _element.rotate)) continue\n\n const left = _element.left\n const top = _element.top\n const width = _element.width\n const height = _element.height\n \n const right = left + width\n const bottom = top + height\n const centerX = top + height / 2\n const centerY = left + width / 2\n\n const topPoint = { x: centerY, y: top }\n const bottomPoint = { x: centerY, y: bottom }\n const leftPoint = { x: left, y: centerX }\n const rightPoint = { x: right, y: centerX }\n\n const leftTopPoint = { x: left, y: top }\n const rightTopPoint = { x: right, y: top }\n const leftBottomPoint = { x: left, y: bottom }\n const rightBottomPoint = { x: right, y: bottom }\n\n adsorptionPoints.push(\n topPoint,\n bottomPoint,\n leftPoint,\n rightPoint,\n leftTopPoint,\n rightTopPoint,\n leftBottomPoint,\n rightBottomPoint,\n )\n }\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const moveX = (currentPageX - startPageX) / canvasScale.value\n const moveY = (currentPageY - startPageY) / canvasScale.value\n \n // 线条起点和终点在编辑区域中的位置\n let startX = element.left + element.start[0]\n let startY = element.top + element.start[1]\n let endX = element.left + element.end[0]\n let endY = element.top + element.end[1]\n\n const mid = element.broken || element.curve || [0, 0]\n let midX = element.left + mid[0]\n let midY = element.top + mid[1]\n\n // 拖拽起点或终点的位置\n // 水平和垂直方向上有吸附\n if (command === OperateLineHandlers.START) {\n startX = startX + moveX\n startY = startY + moveY\n\n if (Math.abs(startX - endX) < sorptionRange) startX = endX\n if (Math.abs(startY - endY) < sorptionRange) startY = endY\n\n for (const adsorptionPoint of adsorptionPoints) {\n const { x, y } = adsorptionPoint\n if (Math.abs(x - startX) < sorptionRange && Math.abs(y - startY) < sorptionRange) {\n startX = x\n startY = y\n break\n }\n }\n }\n else if (command === OperateLineHandlers.END) {\n endX = endX + moveX\n endY = endY + moveY\n\n if (Math.abs(startX - endX) < sorptionRange) endX = startX\n if (Math.abs(startY - endY) < sorptionRange) endY = startY\n\n for (const adsorptionPoint of adsorptionPoints) {\n const { x, y } = adsorptionPoint\n if (Math.abs(x - endX) < sorptionRange && Math.abs(y - endY) < sorptionRange) {\n endX = x\n endY = y\n break\n }\n }\n }\n else {\n midX = midX + moveX\n midY = midY + moveY\n\n if (Math.abs(midX - startX) < sorptionRange) midX = startX\n if (Math.abs(midY - startY) < sorptionRange) midY = startY\n if (Math.abs(midX - endX) < sorptionRange) midX = endX\n if (Math.abs(midY - endY) < sorptionRange) midY = endY\n if (Math.abs(midX - (startX + endX) / 2) < sorptionRange && Math.abs(midY - (startY + endY) / 2) < sorptionRange) {\n midX = (startX + endX) / 2\n midY = (startY + endY) / 2\n }\n }\n\n // 计算更新起点和终点基于自身元素位置的坐标\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n const start: [number, number] = [0, 0]\n const end: [number, number] = [maxX - minX, maxY - minY]\n if (startX > endX) {\n start[0] = maxX - minX\n end[0] = 0\n }\n if (startY > endY) {\n start[1] = maxY - minY\n end[1] = 0\n }\n\n elementList.value = elementList.value.map(el => {\n if (el.id === element.id) {\n const newEl: PPTLineElement = {\n ...(el as PPTLineElement),\n left: minX,\n top: minY,\n start: start,\n end: end,\n }\n if (command !== OperateLineHandlers.MID) {\n if (element.broken) newEl.broken = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n if (element.curve) newEl.curve = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n }\n else {\n if (element.broken) newEl.broken = [midX - minX, midY - minY]\n if (element.curve) newEl.curve = [midX - minX, midY - minY]\n }\n return newEl\n }\n return el\n })\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n if (startPageX === currentPageX && startPageY === currentPageY) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragLineElement,\n }\n}","import { computed, Ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { CreateElementSelectionData, CreatingLineElement, CreatingShapeElement } from '@/types/edit'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (viewportRef: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const creatingElement = computed(() => store.state.creatingElement)\n\n // 通过鼠标框选时的起点和终点,计算选区的位置大小\n const formatCreateSelection = (selectionData: CreateElementSelectionData) => {\n const { start, end } = selectionData\n\n if (!viewportRef.value) return\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n const [startX, startY] = start\n const [endX, endY] = end\n const minX = Math.min(startX, endX)\n const maxX = Math.max(startX, endX)\n const minY = Math.min(startY, endY)\n const maxY = Math.max(startY, endY)\n\n const left = (minX - viewportRect.x) / canvasScale.value\n const top = (minY - viewportRect.y) / canvasScale.value\n const width = (maxX - minX) / canvasScale.value\n const height = (maxY - minY) / canvasScale.value\n\n return { left, top, width, height }\n }\n\n // 通过鼠标框选时的起点和终点,计算线条在画布中的位置和起点终点\n const formatCreateSelectionForLine = (selectionData: CreateElementSelectionData) => {\n const { start, end } = selectionData\n\n if (!viewportRef.value) return\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n const [startX, startY] = start\n const [endX, endY] = end\n const minX = Math.min(startX, endX)\n const maxX = Math.max(startX, endX)\n const minY = Math.min(startY, endY)\n const maxY = Math.max(startY, endY)\n\n const left = (minX - viewportRect.x) / canvasScale.value\n const top = (minY - viewportRect.y) / canvasScale.value\n const width = (maxX - minX) / canvasScale.value\n const height = (maxY - minY) / canvasScale.value\n\n const _start: [number, number] = [\n startX === minX ? 0 : width,\n startY === minY ? 0 : height,\n ]\n const _end: [number, number] = [\n endX === minX ? 0 : width,\n endY === minY ? 0 : height,\n ]\n\n return {\n left,\n top,\n start: _start,\n end: _end,\n }\n }\n\n const { createTextElement, createShapeElement, createLineElement } = useCreateElement()\n\n // 根据鼠标选区的位置大小插入元素\n const insertElementFromCreateSelection = (selectionData: CreateElementSelectionData) => {\n if (!creatingElement.value) return\n\n const type = creatingElement.value.type\n if (type === 'text') {\n const position = formatCreateSelection(selectionData)\n position && createTextElement(position)\n }\n else if (type === 'shape') {\n const position = formatCreateSelection(selectionData)\n position && createShapeElement(position, (creatingElement.value as CreatingShapeElement).data)\n }\n else if (type === 'line') {\n const position = formatCreateSelectionForLine(selectionData)\n position && createLineElement(position, (creatingElement.value as CreatingLineElement).data)\n }\n store.commit(MutationTypes.SET_CREATING_ELEMENT, null)\n }\n\n return {\n insertElementFromCreateSelection,\n }\n}","\n\n","import { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\n\nexport const enum ElementTypes {\n TEXT = 'text',\n IMAGE = 'image',\n SHAPE = 'shape',\n LINE = 'line',\n CHART = 'chart',\n TABLE = 'table',\n}\n\n/**\n * 元素阴影\n * \n * h: 水平偏移量\n * \n * v: 垂直偏移量\n * \n * blur: 模糊程度\n * \n * color: 阴影颜色\n */\nexport interface PPTElementShadow {\n h: number;\n v: number;\n blur: number;\n color: string;\n}\n\n/**\n * 元素边框\n * \n * style?: 边框样式(实线或虚线)\n * \n * width?: 边框宽度\n * \n * color?: 边框颜色\n */\nexport interface PPTElementOutline {\n style?: 'dashed' | 'solid';\n width?: number;\n color?: string;\n}\n\n\n/**\n * 元素通用属性\n * \n * id: 元素ID\n * \n * left: 元素水平方向位置(距离画布左侧)\n * \n * top: 元素垂直方向位置(距离画布顶部)\n * \n * lock?: 锁定元素\n * \n * groupId?: 组合ID(拥有相同组合ID的元素即为同一组合元素成员)\n * \n * width: 元素宽度\n * \n * height: 元素高度\n * \n * link?: 超链接地址\n */\ninterface PPTBaseElement {\n id: string;\n left: number;\n top: number;\n lock?: boolean;\n groupId?: string;\n width: number;\n height: number;\n link?: string;\n}\n\n\n/**\n * 文本元素\n * \n * type: 元素类型(text)\n * \n * content: 文本内容(HTML字符串)\n * \n * rotate: 旋转角度\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * outline?: 边框\n * \n * fill?: 填充色\n * \n * lineHeight?: 行高(倍),默认1.5\n * \n * wordSpace?: 字间距,默认0\n * \n * opacity?: 不透明度,默认1\n * \n * shadow?: 阴影\n */\nexport interface PPTTextElement extends PPTBaseElement {\n type: 'text';\n content: string;\n rotate: number;\n defaultFontName: string;\n defaultColor: string;\n outline?: PPTElementOutline;\n fill?: string;\n lineHeight?: number;\n wordSpace?: number;\n opacity?: number;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 图片翻转、形状翻转\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n */\nexport interface ImageOrShapeFlip {\n flipH?: boolean;\n flipV?: boolean;\n}\n\n/**\n * 图片滤镜\n * \n * https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter\n * \n * 'blur'?: 模糊,默认0(px)\n * \n * 'brightness'?: 亮度,默认100(%)\n * \n * 'contrast'?: 对比度,默认100(%)\n * \n * 'grayscale'?: 灰度,默认0(%)\n * \n * 'saturate'?: 饱和度,默认100(%)\n * \n * 'hue-rotate'?: 色相旋转,默认0(deg)\n * \n * 'opacity'?: 不透明度,默认100(%)\n */\nexport interface ImageElementFilters {\n 'blur'?: string;\n 'brightness'?: string;\n 'contrast'?: string;\n 'grayscale'?: string;\n 'saturate'?: string;\n 'hue-rotate'?: string;\n 'opacity'?: string;\n}\n\n/**\n * 图片裁剪\n * \n * range: 裁剪范围,例如:[[10, 10], [90, 90]] 表示裁取原图从左上角 10%, 10% 到 90%, 90% 的范围\n * \n * shape: 裁剪形状,见 configs/imageClip.ts CLIPPATHS \n */\nexport interface ImageElementClip {\n range: [[number, number], [number, number]];\n shape: string;\n}\n\n/**\n * 图片元素\n * \n * type: 元素类型(image)\n * \n * fixedRatio: 固定图片宽高比例\n * \n * src: 图片地址\n * \n * rotate: 旋转角度\n * \n * outline?: 边框\n * \n * filters?: 图片滤镜\n * \n * clip?: 裁剪信息\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n */\nexport interface PPTImageElement extends PPTBaseElement {\n type: 'image';\n fixedRatio: boolean;\n src: string;\n rotate: number;\n outline?: PPTElementOutline;\n filters?: ImageElementFilters;\n clip?: ImageElementClip;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 形状渐变\n * \n * type: 渐变类型(径向、线性)\n * \n * color: 渐变颜色\n * \n * rotate: 渐变角度(线性渐变)\n */\nexport interface ShapeGradient {\n type: 'linear' | 'radial';\n color: [string, string];\n rotate: number;\n}\n\n/**\n * 形状内文本\n * \n * content: 文本内容(HTML字符串)\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * align: 文本对齐方向(垂直方向)\n */\nexport interface ShapeText {\n content: string;\n defaultFontName: string;\n defaultColor: string;\n align: 'top' | 'middle' | 'bottom';\n}\n\n/**\n * 形状元素\n * \n * type: 元素类型(shape)\n * \n * viewBox: SVG的viewBox属性,默认为正方形,例如 1000 表示 '0 0 1000 1000'\n * \n * path: 形状路径,SVG path 的 d 属性\n * \n * fixedRatio: 固定形状宽高比例\n * \n * fill: 填充,不存在渐变时生效\n * \n * gradient?: 渐变,该属性存在时将优先作为填充\n * \n * rotate: 旋转角度\n * \n * outline?: 边框\n * \n * opacity?: 不透明度\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n * \n * special?: 特殊形状(标记一些难以解析的形状,例如路径使用了 L Q C A 以外的类型,该类形状在导出后将变为图片的形式)\n * \n * text?: 形状内文本\n */\nexport interface PPTShapeElement extends PPTBaseElement {\n type: 'shape';\n viewBox: number;\n path: string;\n fixedRatio: boolean;\n fill: string;\n gradient?: ShapeGradient;\n rotate: number;\n outline?: PPTElementOutline;\n opacity?: number;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n special?: boolean;\n text?: ShapeText;\n}\n\n\nexport type LinePoint = '' | 'arrow' | 'dot' \n\n/**\n * 线条元素\n * \n * type: 元素类型(line)\n * \n * start: 起点位置([x, y])\n * \n * end: 终点位置([x, y])\n * \n * style: 线条样式(实线、虚线)\n * \n * color: 线条颜色\n * \n * points: 端点样式([起点样式, 终点样式],可选:无、箭头、圆点)\n * \n * shadow?: 阴影\n * \n * broken?: 折线中点位置([x, y])\n * \n * curve?: 曲线中点位置([x, y])\n */\nexport interface PPTLineElement extends Omit {\n type: 'line';\n start: [number, number];\n end: [number, number];\n style: 'solid' | 'dashed';\n color: string;\n points: [LinePoint, LinePoint];\n shadow?: PPTElementShadow;\n broken?: [number, number];\n curve?: [number, number];\n}\n\n\nexport type ChartType = 'bar' | 'line' | 'pie'\nexport interface ChartData {\n labels: string[];\n series: number[][];\n}\n\n/**\n * 图表元素\n * \n * type: 元素类型(chart)\n * \n * fill?: 填充色\n * \n * chartType: 图表类型\n * \n * data: 图表数据\n * \n * options?: 图表配置项\n * \n * outline?: 边框\n * \n * themeColor: 主题色\n * \n * gridColor?: 网格&坐标颜色\n */\nexport interface PPTChartElement extends PPTBaseElement {\n type: 'chart';\n fill?: string;\n chartType: ChartType;\n data: ChartData;\n options?: ILineChartOptions & IBarChartOptions & IPieChartOptions;\n outline?: PPTElementOutline;\n themeColor: string[];\n gridColor?: string;\n}\n\n\n/**\n * 表格单元格样式\n * \n * bold?: 加粗\n * \n * em?: 斜体\n * \n * underline?: 下划线\n * \n * strikethrough?: 删除线\n * \n * color?: 字体颜色\n * \n * backcolor?: 填充色\n * \n * fontsize?: 字体大小\n * \n * fontname?: 字体\n * \n * align?: 对齐方式\n */\nexport interface TableCellStyle {\n bold?: boolean;\n em?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: 'left' | 'center' | 'right';\n}\n\n\n/**\n * 表格单元格\n * \n * id: 单元格ID\n * \n * colspan: 合并列数\n * \n * rowspan: 合并行数\n * \n * text: 文字内容\n * \n * style?: 单元格样式\n */\nexport interface TableCell {\n id: string;\n colspan: number;\n rowspan: number;\n text: string;\n style?: TableCellStyle;\n}\n\n/**\n * 表格主题\n * \n * color: 主题色\n * \n * rowHeader: 标题行\n * \n * rowFooter: 汇总行\n * \n * colHeader: 第一列\n * \n * colFooter: 最后一列\n */\nexport interface TableTheme {\n color: string;\n rowHeader: boolean;\n rowFooter: boolean;\n colHeader: boolean;\n colFooter: boolean;\n}\n\n/**\n * 表格元素\n * \n * type: 元素类型(table)\n * \n * outline: 边框\n * \n * theme?: 主题\n * \n * colWidths: 列宽数组,如[30, 50, 20]表示三列宽度分别为30%, 50%, 20%\n * \n * data: 表格数据\n */\nexport interface PPTTableElement extends PPTBaseElement {\n type: 'table';\n outline: PPTElementOutline;\n theme?: TableTheme;\n colWidths: number[];\n data: TableCell[][];\n}\n\n\nexport type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement\n\n\n/**\n * 元素动画\n * \n * elId: 元素ID\n * \n * type: 动画类型\n * \n * duration: 动画持续时间\n */\nexport interface PPTAnimation {\n elId: string;\n type: string;\n duration: number;\n}\n\n/**\n * 幻灯片背景\n * \n * type: 背景类型(纯色、图片、渐变)\n * \n * color?: 背景颜色(纯色)\n * \n * image?: 图片地址(图片)\n * \n * imageSize?: 图片填充方式\n * \n * gradientType?: 渐变类型(线性、径向)\n * \n * gradientColor?: 渐变颜色\n * \n * gradientRotate?: 渐变角度(线性)\n */\nexport interface SlideBackground {\n type: 'solid' | 'image' | 'gradient';\n color?: string;\n image?: string;\n imageSize?: 'cover' | 'contain' | 'repeat';\n gradientType?: 'linear' | 'radial';\n gradientColor?: [string, string];\n gradientRotate?: number;\n}\n\n/**\n * 幻灯片页面\n * \n * id: 页面ID\n * \n * elements: 元素集合\n * \n * remark?: 备注\n * \n * background?: 页面背景\n * \n * animations?: 元素动画集合\n * \n * turningMode?: 翻页方式\n */\nexport interface Slide {\n id: string;\n elements: PPTElement[];\n remark?: string;\n background?: SlideBackground;\n animations?: PPTAnimation[];\n turningMode?: 'no' | 'fade' | 'slideX' | 'slideY';\n}\n\n/**\n * 幻灯片主题\n * \n * backgroundColor: 页面背景颜色\n * \n * themeColor: 主题色,用于默认创建的形状颜色等\n * \n * fontColor: 字体颜色\n * \n * fontName: 字体\n */\nexport interface SlideTheme {\n backgroundColor: string;\n themeColor: string;\n fontColor: string;\n fontName: string;\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { ElementAlignCommand, ElementAlignCommands } from '@/types/edit'\nimport { getElementListRange } from '@/utils/element'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useHistorySnapshot from './useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const activeElementList = computed(() => store.getters.activeElementList)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 将所有选中的元素对齐到画布\n * @param command 对齐方向\n */\n const alignElementToCanvas = (command: ElementAlignCommand) => {\n const viewportWidth = VIEWPORT_SIZE\n const viewportHeight = VIEWPORT_SIZE * viewportRatio.value\n const { minX, maxX, minY, maxY } = getElementListRange(activeElementList.value)\n \n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n for (const element of newElementList) {\n if (!activeElementIdList.value.includes(element.id)) continue\n \n // 水平垂直居中\n if (command === ElementAlignCommands.CENTER) {\n const offsetY = minY + (maxY - minY) / 2 - viewportHeight / 2\n const offsetX = minX + (maxX - minX) / 2 - viewportWidth / 2\n element.top = element.top - offsetY \n element.left = element.left - offsetX \n }\n\n // 顶部对齐\n if (command === ElementAlignCommands.TOP) {\n const offsetY = minY - 0\n element.top = element.top - offsetY \n }\n\n // 垂直居中\n else if (command === ElementAlignCommands.VERTICAL) {\n const offsetY = minY + (maxY - minY) / 2 - viewportHeight / 2\n element.top = element.top - offsetY \n }\n\n // 底部对齐\n else if (command === ElementAlignCommands.BOTTOM) {\n const offsetY = maxY - viewportHeight\n element.top = element.top - offsetY \n }\n \n // 左侧对齐\n else if (command === ElementAlignCommands.LEFT) {\n const offsetX = minX - 0\n element.left = element.left - offsetX \n }\n\n // 水平居中\n else if (command === ElementAlignCommands.HORIZONTAL) {\n const offsetX = minX + (maxX - minX) / 2 - viewportWidth / 2\n element.left = element.left - offsetX \n }\n\n // 右侧对齐\n else if (command === ElementAlignCommands.RIGHT) {\n const offsetX = maxX - viewportWidth\n element.left = element.left - offsetX \n }\n }\n \n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n return {\n alignElementToCanvas,\n }\n}","\n\n\n\n\n","import { computed, Ref } from 'vue'\nimport { PPTElementShadow } from '@/types/slides'\n\n// 计算元素的阴影样式\nexport default (shadow: Ref) => {\n const shadowStyle = computed(() => {\n if (shadow.value) {\n const { h, v, blur, color } = shadow.value\n return `${h}px ${v}px ${blur}px ${color}`\n }\n return ''\n })\n\n return {\n shadowStyle,\n }\n}","export const enum ClipPathTypes {\n RECT = 'rect',\n ELLIPSE = 'ellipse',\n POLYGON = 'polygon',\n}\n\nexport const enum ClipPaths {\n RECT = 'rect',\n ROUNDRECT = 'roundRect',\n ELLIPSE = 'ellipse',\n TRIANGLE = 'triangle',\n PENTAGON = 'pentagon',\n RHOMBUS = 'rhombus',\n STAR = 'star',\n}\n\nexport const CLIPPATHS = {\n rect: {\n name: '矩形',\n type: ClipPathTypes.RECT,\n radius: '0',\n style: '',\n },\n rect2: {\n name: '矩形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L 0 ${height} Z`\n },\n },\n rect3: {\n name: '矩形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.8} Z`\n },\n },\n roundRect: {\n name: '圆角矩形',\n type: ClipPathTypes.RECT,\n radius: '10%',\n style: 'inset(0 0 0 0 round 10% 10% 10% 10%)',\n },\n ellipse: {\n name: '圆形',\n type: ClipPathTypes.ELLIPSE,\n style: 'ellipse(50% 50% at 50% 50%)',\n },\n triangle: {\n name: '三角形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n triangle2: {\n name: '三角形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 100%, 0% 0%, 100% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} ${height} L 0 0 L ${width} 0 Z`\n },\n },\n triangle3: {\n name: '三角形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n rhombus: {\n name: '菱形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${height * 0.5} L ${width * 0.5} ${height} L 0 ${height * 0.5} Z`\n },\n },\n hexagon: {\n name: '六边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.2} 0 L ${width * 0.8} 0 L ${width} ${height * 0.5} L ${width * 0.8} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.5} Z`\n },\n },\n pentagon: {\n name: '五边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${0.38 * height} L ${0.82 * width} ${height} L ${0.18 * width} ${height} L 0 ${0.38 * height} Z`\n },\n },\n parallelogram: {\n name: '平行四边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} 0 L ${width} 0 L ${width * 0.7} ${height} L 0 ${height} Z`\n },\n },\n parallelogram2: {\n name: '平行四边形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} ${height} L ${width} ${height} L ${width * 0.7} 0 L 0 0 Z`\n },\n },\n trapezoid: {\n name: '梯形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.25} 0 L ${width * 0.75} 0 L ${width} ${height} L 0 ${height} Z`\n },\n },\n trapezoid2: {\n name: '梯形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width} 0 L ${width * 0.75} ${height} L ${width * 0.25} ${height} Z`\n },\n },\n}","import { computed, Ref } from 'vue'\n\n// 计算元素的翻转样式\nexport default (flipH: Ref, flipV: Ref) => {\n const flipStyle = computed(() => {\n let style = ''\n \n if (flipH.value && flipV.value) style = 'rotateX(180deg) rotateY(180deg)'\n else if (flipV.value) style = 'rotateX(180deg)'\n else if (flipH.value) style = 'rotateY(180deg)'\n\n return style\n })\n\n return {\n flipStyle,\n }\n}","import { computed, Ref } from 'vue'\nimport { CLIPPATHS, ClipPathTypes } from '@/configs/imageClip'\nimport { ImageElementClip } from '@/types/slides'\n\nexport default (clip: Ref) => {\n const clipShape = computed(() => {\n if (!clip.value) return CLIPPATHS.rect\n const shape = clip.value.shape || ClipPathTypes.RECT\n\n return CLIPPATHS[shape]\n })\n\n const imgPosition = computed(() => {\n if (!clip.value) {\n return {\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n }\n }\n\n const [start, end] = clip.value.range\n\n const widthScale = (end[0] - start[0]) / 100\n const heightScale = (end[1] - start[1]) / 100\n const left = start[0] / widthScale\n const top = start[1] / heightScale\n\n return {\n left: -left + '%',\n top: -top + '%',\n width: 100 / widthScale + '%',\n height: 100 / heightScale + '%',\n }\n })\n\n return {\n clipShape,\n imgPosition,\n }\n}","import { computed, Ref } from 'vue'\nimport { ImageElementFilters } from '@/types/slides'\n\nexport default (filters: Ref) => {\n const filter = computed(() => {\n if (!filters.value) return ''\n let filter = ''\n for (const key of Object.keys(filters.value)) {\n filter += `${key}(${filters.value[key]}) `\n }\n return filter\n })\n\n return {\n filter,\n }\n}","\n\n","\n\n\n\n","import { computed, Ref } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\n\n// 计算边框相关属性值,主要是对默认值的处理\nexport default (outline: Ref) => {\n const outlineWidth = computed(() => outline.value?.width ?? 0)\n const outlineStyle = computed(() => outline.value?.style || 'solid')\n const outlineColor = computed(() => outline.value?.color || '#d14424')\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n}","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'image-rect-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n radius: {\n type: String,\n default: '0',\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ImageRectOutline.vue?vue&type=template&id=4126ab7f&scoped=true\"\nimport script from \"./ImageRectOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageRectOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageRectOutline.vue?vue&type=style&index=0&id=4126ab7f&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4126ab7f\"\n\nexport default script","\n\n\n\n","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'image-ellipse-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ImageEllipseOutline.vue?vue&type=template&id=6655f0f0&scoped=true\"\nimport script from \"./ImageEllipseOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageEllipseOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageEllipseOutline.vue?vue&type=style&index=0&id=6655f0f0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6655f0f0\"\n\nexport default script","\n\n\n\n","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'image-polygon-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n createPath: {\n type: Function,\n required: true,\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ImagePolygonOutline.vue?vue&type=template&id=8d85e878&scoped=true\"\nimport script from \"./ImagePolygonOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ImagePolygonOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ImagePolygonOutline.vue?vue&type=style&index=0&id=8d85e878&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-8d85e878\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTImageElement } from '@/types/slides'\nimport useClipImage from '../useClipImage'\n\nimport ImageRectOutline from './ImageRectOutline.vue'\nimport ImageEllipseOutline from './ImageEllipseOutline.vue'\nimport ImagePolygonOutline from './ImagePolygonOutline.vue'\n\nexport default defineComponent({\n name: 'image-outline',\n components: {\n ImageRectOutline,\n ImageEllipseOutline,\n ImagePolygonOutline,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const clip = computed(() => props.elementInfo.clip)\n const { clipShape } = useClipImage(clip)\n\n return {\n clipShape,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=6b56be7d\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, reactive, ref } from 'vue'\nimport { useStore } from '@/store'\nimport { KEYS } from '@/configs/hotkey'\nimport { ImageClipData, ImageClipDataRange, ImageClipedEmitData } from '@/types/edit'\n\ntype ScaleClipRangeType = 't-l' | 't-r' | 'b-l' | 'b-r'\n\nexport default defineComponent({\n name: 'image-clip-handler',\n emits: ['clip'],\n props: {\n src: {\n type: String,\n required: true,\n },\n clipData: {\n type: Object as PropType,\n },\n clipPath: {\n type: String,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n top: {\n type: Number,\n required: true,\n },\n left: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n const clipWrapperPositionStyle = reactive({\n top: '0',\n left: '0',\n })\n const isSettingClipRange = ref(false)\n const currentRange = ref(null)\n\n // 获取裁剪区域信息(裁剪区域占原图的宽高比例,处在原图中的位置)\n const getClipDataTransformInfo = () => {\n const [start, end] = props.clipData ? props.clipData.range : [[0, 0], [100, 100]]\n\n const widthScale = (end[0] - start[0]) / 100\n const heightScale = (end[1] - start[1]) / 100\n const left = start[0] / widthScale\n const top = start[1] / heightScale\n\n return { widthScale, heightScale, left, top }\n }\n \n // 底层图片位置大小(遮罩区域图片)\n const imgPosition = computed(() => {\n const { widthScale, heightScale, left, top } = getClipDataTransformInfo()\n return {\n left: -left,\n top: -top,\n width: 100 / widthScale,\n height: 100 / heightScale,\n }\n })\n\n // 底层图片位置大小样式(遮罩区域图片)\n const bottomImgPositionStyle = computed(() => {\n return {\n top: imgPosition.value.top + '%',\n left: imgPosition.value.left + '%',\n width: imgPosition.value.width + '%',\n height: imgPosition.value.height + '%',\n }\n })\n\n // 顶层图片容器位置大小(裁剪高亮区域)\n const topImgWrapperPosition = reactive({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n })\n\n // 顶层图片容器位置大小样式(裁剪高亮区域)\n const topImgWrapperPositionStyle = computed(() => {\n return {\n top: topImgWrapperPosition.top + '%',\n left: topImgWrapperPosition.left + '%',\n width: topImgWrapperPosition.width + '%',\n height: topImgWrapperPosition.height + '%',\n }\n })\n\n // 顶层图片位置大小样式(裁剪区域图片)\n const topImgPositionStyle = computed(() => {\n const bottomWidth = imgPosition.value.width\n const bottomHeight = imgPosition.value.height\n \n const topLeft = topImgWrapperPosition.left\n const topTop = topImgWrapperPosition.top\n const topWidth = topImgWrapperPosition.width\n const topHeight = topImgWrapperPosition.height\n \n return {\n left: -topLeft * (100 / topWidth) + '%',\n top: -topTop * (100 / topHeight) + '%',\n width: bottomWidth / topWidth * 100 + '%',\n height: bottomHeight / topHeight * 100 + '%',\n }\n })\n\n // 初始化裁剪位置信息\n const initClipPosition = () => {\n const { left, top } = getClipDataTransformInfo()\n topImgWrapperPosition.left = left\n topImgWrapperPosition.top = top\n topImgWrapperPosition.width = 100\n topImgWrapperPosition.height = 100\n \n clipWrapperPositionStyle.top = -top + '%'\n clipWrapperPositionStyle.left = -left + '%'\n }\n\n // 执行裁剪:计算裁剪后的图片位置大小和裁剪信息,并将数据同步出去\n const handleClip = () => {\n if (isSettingClipRange.value) return\n\n if (!currentRange.value) {\n emit('clip', null)\n return\n }\n\n const { left, top } = getClipDataTransformInfo()\n\n const position = {\n left: (topImgWrapperPosition.left - left) / 100 * props.width,\n top: (topImgWrapperPosition.top - top) / 100 * props.height,\n width: (topImgWrapperPosition.width - 100) / 100 * props.width,\n height: (topImgWrapperPosition.height - 100) / 100 * props.height,\n }\n\n const clipedEmitData: ImageClipedEmitData = {\n range: currentRange.value,\n position,\n }\n emit('clip', clipedEmitData)\n }\n\n // 快捷键监听:回车确认裁剪\n const keyboardListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ENTER) handleClip()\n }\n\n onMounted(() => {\n initClipPosition()\n document.addEventListener('keydown', keyboardListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keyboardListener)\n })\n\n // 计算并更新裁剪区域范围数据\n const updateRange = () => {\n const retPosition = {\n left: parseInt(topImgPositionStyle.value.left),\n top: parseInt(topImgPositionStyle.value.top),\n width: parseInt(topImgPositionStyle.value.width),\n height: parseInt(topImgPositionStyle.value.height),\n }\n\n const widthScale = 100 / retPosition.width\n const heightScale = 100 / retPosition.height\n\n const start: [number, number] = [\n -retPosition.left * widthScale,\n -retPosition.top * heightScale,\n ]\n const end: [number, number] = [\n widthScale * 100 + start[0],\n heightScale * 100 + start[1],\n ]\n\n currentRange.value = [start, end]\n }\n\n // 移动裁剪区域\n const moveClipRange = (e: MouseEvent) => {\n isSettingClipRange.value = true\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n const bottomPosition = imgPosition.value\n const originPositopn = {\n left: topImgWrapperPosition.left,\n top: topImgWrapperPosition.top,\n width: topImgWrapperPosition.width,\n height: topImgWrapperPosition.height,\n }\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100\n const moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100\n\n let targetLeft = originPositopn.left + moveX\n let targetTop = originPositopn.top + moveY\n\n if (targetLeft < 0) targetLeft = 0\n else if (targetLeft + originPositopn.width > bottomPosition.width) {\n targetLeft = bottomPosition.width - originPositopn.width\n }\n if (targetTop < 0) targetTop = 0\n else if (targetTop + originPositopn.height > bottomPosition.height) {\n targetTop = bottomPosition.height - originPositopn.height\n }\n \n topImgWrapperPosition.left = targetLeft\n topImgWrapperPosition.top = targetTop\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n updateRange()\n\n setTimeout(() => {\n isSettingClipRange.value = false\n }, 0)\n }\n }\n\n // 缩放裁剪区域\n const scaleClipRange = (e: MouseEvent, type: ScaleClipRangeType) => {\n isSettingClipRange.value = true\n let isMouseDown = true\n\n const minWidth = 50 / props.width * 100\n const minHeight = 50 / props.height * 100\n \n const startPageX = e.pageX\n const startPageY = e.pageY\n const bottomPosition = imgPosition.value\n const originPositopn = {\n left: topImgWrapperPosition.left,\n top: topImgWrapperPosition.top,\n width: topImgWrapperPosition.width,\n height: topImgWrapperPosition.height,\n }\n\n const aspectRatio = topImgWrapperPosition.width / topImgWrapperPosition.height\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n let moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100\n let moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100\n\n if (ctrlOrShiftKeyActive.value) {\n if (type === 'b-r' || type === 't-l') moveY = moveX / aspectRatio\n if (type === 'b-l' || type === 't-r') moveY = -moveX / aspectRatio\n }\n\n let targetLeft, targetTop, targetWidth, targetHeight\n\n if (type === 't-l') {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top + moveY\n }\n else if (type === 't-r') {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width + moveX\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top + moveY\n }\n else if (type === 'b-l') {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else if (type === 'b-r') {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width + moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === 't') {\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top + moveY\n }\n else if (type === 'b') {\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === 'l') {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n targetHeight = originPositopn.height\n targetWidth = originPositopn.width + moveX\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n \n topImgWrapperPosition.left = targetLeft\n topImgWrapperPosition.top = targetTop\n topImgWrapperPosition.width = targetWidth\n topImgWrapperPosition.height = targetHeight\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n updateRange()\n\n setTimeout(() => isSettingClipRange.value = false, 0)\n }\n }\n\n return {\n clipWrapperPositionStyle,\n bottomImgPositionStyle,\n topImgWrapperPositionStyle,\n topImgPositionStyle,\n handleClip,\n moveClipRange,\n scaleClipRange,\n }\n },\n})\n","import { render } from \"./ImageClipHandler.vue?vue&type=template&id=9e358576&scoped=true\"\nimport script from \"./ImageClipHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageClipHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageClipHandler.vue?vue&type=style&index=0&id=9e358576&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9e358576\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { ImageElementClip, PPTImageElement } from '@/types/slides'\nimport { ImageClipedEmitData } from '@/types/edit'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useClipImage from './useClipImage'\nimport useFilter from './useFilter'\n\nimport ImageOutline from './ImageOutline/index.vue'\nimport ImageClipHandler from './ImageClipHandler.vue'\n\nexport default defineComponent({\n name: 'editable-element-image',\n components: {\n ImageOutline,\n ImageClipHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTImageElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const clipingImageElementId = computed(() => store.state.clipingImageElementId)\n const isCliping = computed(() => clipingImageElementId.value === props.elementInfo.id)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const clip = computed(() => props.elementInfo.clip)\n const { clipShape, imgPosition } = useClipImage(clip)\n\n const filters = computed(() => props.elementInfo.filters)\n const { filter } = useFilter(filters)\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n props.selectElement(e, props.elementInfo)\n }\n\n const handleClip = (data: ImageClipedEmitData) => {\n store.commit(MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID, '')\n \n if (!data) return\n\n const { range, position } = data\n const originClip: ImageElementClip = props.elementInfo.clip || { shape: 'rect', range: [[0, 0], [100, 100]] }\n \n const _props = {\n clip: { ...originClip, range },\n left: props.elementInfo.left + position.left,\n top: props.elementInfo.top + position.top,\n width: props.elementInfo.width + position.width,\n height: props.elementInfo.height + position.height,\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: props.elementInfo.id, props: _props })\n \n addHistorySnapshot()\n }\n\n return {\n isCliping,\n handleClip,\n clipingImageElementId,\n shadowStyle,\n handleSelectElement,\n clipShape,\n imgPosition,\n filter,\n flipStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=03ead815&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=03ead815&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-03ead815\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'element-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ElementOutline.vue?vue&type=template&id=2ddaa919&scoped=true\"\nimport script from \"./ElementOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementOutline.vue?vue&type=style&index=0&id=2ddaa919&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2ddaa919\"\n\nexport default script","\n\n\n\n\n","import mitt, { Emitter } from 'mitt'\n\nexport const enum EmitterEvents {\n RICH_TEXT_COMMAND = 'RICH_TEXT_COMMAND',\n OPEN_CHART_DATA_EDITOR = 'OPEN_CHART_DATA_EDITOR',\n}\n\nexport interface RichTextCommand {\n command: string;\n value?: string;\n}\n\ntype Events = {\n [EmitterEvents.RICH_TEXT_COMMAND]: RichTextCommand | RichTextCommand[];\n [EmitterEvents.OPEN_CHART_DATA_EDITOR]: void;\n} \n\nconst emitter: Emitter = mitt()\n\nexport default emitter","import { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list'\nimport { Schema } from 'prosemirror-model'\nimport { undo, redo } from 'prosemirror-history'\nimport { undoInputRule } from 'prosemirror-inputrules'\nimport {\n toggleMark,\n selectParentNode,\n joinUp,\n joinDown,\n Command,\n} from 'prosemirror-commands'\n\nexport const buildKeymap = (schema: Schema) => {\n const keys = {}\n const bind = (key: string, cmd: Command) => keys[key] = cmd\n\n bind('Alt-ArrowUp', joinUp)\n bind('Alt-ArrowDown', joinDown)\n bind('Ctrl-z', undo)\n bind('Ctrl-y', redo)\n bind('Backspace', undoInputRule)\n bind('Escape', selectParentNode)\n bind('Ctrl-b', toggleMark(schema.marks.strong))\n bind('Ctrl-i', toggleMark(schema.marks.em))\n bind('Ctrl-u', toggleMark(schema.marks.underline))\n bind('Ctrl-d', toggleMark(schema.marks.strikethrough))\n\n bind('Enter', splitListItem(schema.nodes.list_item))\n bind('Mod-[', liftListItem(schema.nodes.list_item))\n bind('Mod-]', sinkListItem(schema.nodes.list_item))\n\n return keys\n}","import { NodeType, Schema } from 'prosemirror-model'\nimport {\n inputRules,\n wrappingInputRule,\n textblockTypeInputRule,\n smartQuotes,\n emDash,\n ellipsis,\n} from 'prosemirror-inputrules'\n\nconst blockQuoteRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*>\\s$/, nodeType)\n\nconst orderedListRule = (nodeType: NodeType) => (\n wrappingInputRule(\n /^(\\d+)\\.\\s$/, \n nodeType, \n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n )\n)\n\nconst bulletListRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)\n\nconst codeBlockRule = (nodeType: NodeType) => textblockTypeInputRule(/^```$/, nodeType)\n\nexport const buildInputRules = (schema: Schema) => {\n const rules = [\n ...smartQuotes,\n ellipsis,\n emDash,\n ]\n rules.push(blockQuoteRule(schema.nodes.blockquote))\n rules.push(orderedListRule(schema.nodes.ordered_list))\n rules.push(bulletListRule(schema.nodes.bullet_list))\n rules.push(codeBlockRule(schema.nodes.code_block))\n\n return inputRules({ rules })\n}","import { keymap } from 'prosemirror-keymap'\nimport { Schema } from 'prosemirror-model'\nimport { history } from 'prosemirror-history'\nimport { baseKeymap } from 'prosemirror-commands'\nimport { dropCursor } from 'prosemirror-dropcursor'\nimport { gapCursor } from 'prosemirror-gapcursor'\n\nimport { buildKeymap } from './keymap'\nimport { buildInputRules } from './inputrules'\n\nexport const buildPlugins = (schema: Schema) => {\n return [\n buildInputRules(schema),\n keymap(buildKeymap(schema)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n ]\n}","import { nodes } from 'prosemirror-schema-basic'\nimport { Node, NodeSpec } from 'prosemirror-model'\nimport { orderedList, bulletList, listItem } from 'prosemirror-schema-list'\n\nconst _orderedList: NodeSpec = {\n ...orderedList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _bulletList: NodeSpec = {\n ...bulletList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _listItem: NodeSpec = {\n ...listItem,\n content: 'paragraph block*',\n group: 'block',\n}\n\nconst paragraph: NodeSpec = {\n attrs: {\n align: {\n default: '',\n },\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: dom => {\n const { textAlign } = (dom as HTMLElement).style\n let align = (dom as HTMLElement).getAttribute('align') || textAlign || ''\n align = /(left|right|center|justify)/.test(align) ? align : ''\n \n return { align }\n }\n }\n ],\n toDOM: (node: Node) => {\n const { align } = node.attrs\n let style = ''\n if (align && align !== 'left') style += `text-align: ${align};`\n\n return ['p', { style }, 0]\n },\n}\n\nexport default {\n ...nodes,\n 'ordered_list': _orderedList,\n 'bullet_list': _bulletList,\n 'list_item': _listItem,\n paragraph,\n}\n","import { marks } from 'prosemirror-schema-basic'\nimport { MarkSpec } from 'prosemirror-model'\n\nconst subscript: MarkSpec = {\n excludes: 'subscript',\n parseDOM: [\n { tag: 'sub' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'sub' && null\n },\n ],\n toDOM: () => ['sub', 0],\n}\n\nconst superscript: MarkSpec = {\n excludes: 'superscript',\n parseDOM: [\n { tag: 'sup' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'super' && null\n },\n ],\n toDOM: () => ['sup', 0],\n}\n\nconst strikethrough: MarkSpec = {\n parseDOM: [\n { tag: 'strike' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'line-through' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'line-through' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration-line: line-through' }, 0],\n}\n\nconst underline: MarkSpec = {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'underline' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'underline' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration: underline' }, 0],\n}\n\nconst forecolor: MarkSpec = {\n attrs: {\n color: {},\n },\n parseDOM: [\n {\n style: 'color',\n getAttrs: color => color ? { color } : {}\n },\n ],\n toDOM: mark => {\n const { color } = mark.attrs\n let style = ''\n if (color) style += `color: ${color};`\n return ['span', { style }, 0]\n },\n}\n\nconst backcolor: MarkSpec = {\n attrs: {\n backcolor: {},\n },\n inline: true,\n group: 'inline',\n parseDOM: [\n {\n tag: 'span[style*=background-color]',\n getAttrs: backcolor => backcolor ? { backcolor } : {}\n },\n ],\n toDOM: mark => {\n const { backcolor } = mark.attrs\n let style = ''\n if (backcolor) style += `background-color: ${backcolor};`\n return ['span', { style }, 0]\n },\n}\n\nconst fontsize: MarkSpec = {\n attrs: {\n fontsize: {},\n },\n inline: true,\n group: 'inline',\n parseDOM: [\n {\n style: 'font-size',\n getAttrs: fontsize => fontsize ? { fontsize } : {}\n },\n ],\n toDOM: mark => {\n const { fontsize } = mark.attrs\n let style = ''\n if (fontsize) style += `font-size: ${fontsize}`\n return ['span', { style }, 0]\n },\n}\n\nconst fontname: MarkSpec = {\n attrs: {\n fontname: {},\n },\n inline: true,\n group: 'inline',\n parseDOM: [\n {\n style: 'font-family',\n getAttrs: fontname => {\n return { fontname: fontname && typeof fontname === 'string' ? fontname.replace(/[\\\"\\']/g, '') : '' }\n }\n },\n ],\n toDOM: mark => {\n const { fontname } = mark.attrs\n let style = ''\n if (fontname) style += `font-family: ${fontname}`\n return ['span', { style }, 0]\n },\n}\n\nexport default {\n ...marks,\n subscript,\n superscript,\n strikethrough,\n underline,\n forecolor,\n backcolor,\n fontsize,\n fontname,\n}","import nodes from './nodes'\nimport marks from './marks'\n\nexport const schemaNodes = nodes\nexport const schemaMarks = marks\n","import { EditorState } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\nimport { Schema, DOMParser } from 'prosemirror-model'\n\nimport { buildPlugins } from './plugins/index'\nimport { schemaNodes, schemaMarks } from './schema/index'\n\nconst schema = new Schema({\n nodes: schemaNodes,\n marks: schemaMarks,\n})\n\nexport const createDocument = (content: string) => {\n const htmlString = `
${content}
`\n const parser = new window.DOMParser()\n const element = parser.parseFromString(htmlString, 'text/html').body.firstElementChild\n return DOMParser.fromSchema(schema).parse(element as Element)\n}\n\nexport const initProsemirrorEditor = (dom: Element, content: string, props = {}) => {\n return new EditorView(dom, {\n state: EditorState.create({\n doc: createDocument(content),\n plugins: buildPlugins(schema),\n }),\n ...props,\n })\n}","import { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\n\nexport const setTextAlign = (tr: Transaction, schema: Schema, alignment: string) => {\n const { selection, doc } = tr\n if (!selection || !doc) return tr\n\n const { from, to } = selection\n const { nodes } = schema\n\n const blockquote = nodes.blockquote\n const listItem = nodes.list_item\n const paragraph = nodes.paragraph\n\n interface Task {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }\n\n const tasks: Task[] = []\n alignment = alignment || ''\n\n const allowedNodeTypes = new Set([blockquote, listItem, paragraph])\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type\n const align = node.attrs.align || ''\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n })\n }\n return true\n })\n\n if (!tasks.length) return tr\n\n tasks.forEach(task => {\n const { node, pos, nodeType } = task\n let { attrs } = node\n if (alignment) attrs = { ...attrs, align: alignment }\n else attrs = { ...attrs, align: null }\n tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks)\n })\n\n return tr\n}\n\nexport const alignmentCommand = (view: EditorView, alignment: string) => {\n const { state } = view\n const { schema, selection } = state\n const tr = setTextAlign(\n state.tr.setSelection(selection),\n schema,\n alignment,\n )\n view.dispatch(tr)\n}","import { wrapInList, liftListItem } from 'prosemirror-schema-list'\nimport { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction, EditorState } from 'prosemirror-state'\nimport { findParentNode } from '../utils'\n\nconst isList = (node: Node, schema: Schema) => {\n return (\n node.type === schema.nodes.bullet_list ||\n node.type === schema.nodes.ordered_list\n )\n}\n\nexport const toggleList = (listType: NodeType, itemType: NodeType) => {\n return (state: EditorState, dispatch: (tr: Transaction) => void) => {\n const { schema, selection } = state\n const { $from, $to } = selection\n const range = $from.blockRange($to)\n\n if (!range) return false\n\n const parentList = findParentNode((node: Node) => isList(node, schema))(selection)\n\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (parentList.node.type === listType) {\n return liftListItem(itemType)(state, dispatch)\n }\n\n if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {\n const { tr } = state\n tr.setNodeMarkup(parentList.pos, listType)\n\n if (dispatch) dispatch(tr)\n\n return false\n }\n }\n\n return wrapInList(listType)(state, dispatch)\n }\n}\n","\nimport { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { debounce } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { EditorView } from 'prosemirror-view'\nimport { toggleMark, wrapIn, selectAll } from 'prosemirror-commands'\nimport { initProsemirrorEditor, createDocument } from '@/utils/prosemirror'\nimport { getTextAttrs } from '@/utils/prosemirror/utils'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { alignmentCommand } from '@/utils/prosemirror/commands/setTextAlign'\nimport { toggleList } from '@/utils/prosemirror/commands/toggleList'\n\nexport default defineComponent({\n name: 'prosemirror-editor',\n emits: ['update', 'focus', 'blur'],\n props: {\n elementId: {\n type: String,\n required: true,\n },\n defaultColor: {\n type: String,\n required: true,\n },\n defaultFontName: {\n type: String,\n required: true,\n },\n editable: {\n type: Boolean,\n default: false,\n },\n value: {\n type: String,\n required: true,\n },\n autoFocus: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const handleElementId = computed(() => store.state.handleElementId)\n\n const editorViewRef = ref()\n let editorView: EditorView\n\n // 富文本的各种交互事件监听:\n // 聚焦时取消全局快捷键事件\n // 输入文字时同步数据到vuex\n // 点击鼠标和键盘时同步富文本状态到工具栏\n const handleInput = debounce(function() {\n emit('update', editorView.dom.innerHTML)\n }, 300, { trailing: true })\n\n const handleFocus = () => {\n if (props.value === '请输入内容') {\n setTimeout(() => {\n selectAll(editorView.state, editorView.dispatch)\n }, 0)\n }\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, true)\n emit('focus')\n }\n\n const handleBlur = () => {\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, false)\n emit('blur')\n }\n\n const handleClick = debounce(function() {\n const attrs = getTextAttrs(editorView, {\n color: props.defaultColor,\n fontname: props.defaultFontName,\n })\n store.commit(MutationTypes.SET_RICHTEXT_ATTRS, attrs)\n }, 30, { trailing: true })\n\n const handleKeydown = () => {\n handleInput()\n handleClick()\n }\n\n // 将富文本内容同步到DOM\n const textContent = computed(() => props.value)\n watch(textContent, () => {\n if (!editorView) return\n if (editorView.hasFocus()) return\n\n const { doc, tr } = editorView.state\n editorView.dispatch(tr.replaceRangeWith(0, doc.content.size, createDocument(textContent.value)))\n })\n\n // 打开/关闭编辑器的编辑模式\n watch(() => props.editable, () => {\n editorView.setProps({ editable: () => props.editable })\n })\n\n // Prosemirror编辑器的初始化和卸载\n onMounted(() => {\n editorView = initProsemirrorEditor((editorViewRef.value as Element), textContent.value, {\n handleDOMEvents: {\n focus: handleFocus,\n blur: handleBlur,\n keydown: handleKeydown,\n click: handleClick,\n },\n editable: () => props.editable,\n })\n if (props.autoFocus) editorView.focus()\n })\n onUnmounted(() => {\n editorView && editorView.destroy()\n })\n \n // 执行富文本命令(可以是一个或多个)\n // 部分命令在执行前先判断当前选区是否为空,如果选区为空先进行全选操作\n const execCommand = (payload: RichTextCommand | RichTextCommand[]) => {\n if (handleElementId.value !== props.elementId) return\n\n const commands = ('command' in payload) ? [payload] : payload\n\n for (const item of commands) {\n if (item.command === 'fontname' && item.value) {\n const mark = editorView.state.schema.marks.fontname.create({ fontname: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'fontsize' && item.value) {\n const mark = editorView.state.schema.marks.fontsize.create({ fontsize: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'color' && item.value) {\n const mark = editorView.state.schema.marks.forecolor.create({ color: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'backcolor' && item.value) {\n const mark = editorView.state.schema.marks.backcolor.create({ backcolor: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'bold') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.strong)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'em') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.em)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'underline') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.underline)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'strikethrough') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.strikethrough)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'subscript') {\n toggleMark(editorView.state.schema.marks.subscript)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'superscript') {\n toggleMark(editorView.state.schema.marks.superscript)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'blockquote') {\n wrapIn(editorView.state.schema.nodes.blockquote)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'code') {\n toggleMark(editorView.state.schema.marks.code)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'align' && item.value) {\n alignmentCommand(editorView, item.value)\n }\n else if (item.command === 'bulletList') {\n const { bullet_list: bulletList, list_item: listItem } = editorView.state.schema.nodes\n toggleList(bulletList, listItem)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'orderedList') {\n const { ordered_list: orderedList, list_item: listItem } = editorView.state.schema.nodes\n toggleList(orderedList, listItem)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'clear') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.removeMark($from.pos, $to.pos))\n }\n else if (item.command === 'insert' && item.value) {\n editorView.dispatch(editorView.state.tr.insertText(item.value))\n }\n }\n\n editorView.focus()\n handleInput()\n handleClick()\n }\n\n emitter.on(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n onUnmounted(() => {\n emitter.off(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n })\n\n return {\n editorViewRef,\n }\n },\n})\n","import { render } from \"./ProsemirrorEditor.vue?vue&type=template&id=3100bb88&scoped=true\"\nimport script from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ProsemirrorEditor.vue?vue&type=style&index=0&id=3100bb88&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3100bb88\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-text',\n components: {\n ElementOutline,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTextElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const elementRef = ref()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const handleElementId = computed(() => store.state.handleElementId)\n\n const handleSelectElement = (e: MouseEvent, canMove = true) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo, canMove)\n }\n\n // 监听文本元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n const isScaling = computed(() => store.state.isScaling)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTextElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeight },\n })\n }\n else realHeightCache.value = realHeight\n }\n }\n const resizeObserver = new ResizeObserver(updateTextElementHeight)\n\n onMounted(() => {\n if (elementRef.value) resizeObserver.observe(elementRef.value)\n })\n onUnmounted(() => {\n if (elementRef.value) resizeObserver.unobserve(elementRef.value)\n })\n\n const updateContent = (content: string) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { content },\n })\n \n addHistorySnapshot()\n }\n\n return {\n elementRef,\n shadowStyle,\n updateContent,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=3c0937ee&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3c0937ee&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3c0937ee\"\n\nexport default script","\n\n\n\n\n","\r\n\r\n","\r\nimport { defineComponent, PropType } from 'vue'\r\n\r\nexport default defineComponent({\r\n name: 'gradient-defs',\r\n props: {\r\n id: {\r\n type: String,\r\n required: true,\r\n },\r\n type: {\r\n type: String as PropType<'linear' | 'radial'>,\r\n },\r\n color1: {\r\n type: String,\r\n required: true,\r\n },\r\n color2: {\r\n type: String,\r\n required: true,\r\n },\r\n rotate: {\r\n type: Number,\r\n default: 0,\r\n },\r\n },\r\n})\r\n","import { render } from \"./GradientDefs.vue?vue&type=template&id=b787d5ea\"\nimport script from \"./GradientDefs.vue?vue&type=script&lang=ts\"\nexport * from \"./GradientDefs.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport GradientDefs from './GradientDefs.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n GradientDefs,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const editable = ref(false)\n\n const enterEditing = () => {\n editable.value = true\n store.commit(MutationTypes.SET_EDITING_SHAPE_ELEMENT_ID, props.elementInfo.id)\n }\n\n const exitEditing = () => {\n editable.value = false\n store.commit(MutationTypes.SET_EDITING_SHAPE_ELEMENT_ID, '')\n }\n \n const handleElementId = computed(() => store.state.handleElementId)\n watch(handleElementId, () => {\n if (handleElementId.value !== props.elementInfo.id) {\n if (editable.value) exitEditing()\n }\n })\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n const updateText = (content: string) => {\n const _text = { ...text.value, content }\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { text: _text },\n })\n \n addHistorySnapshot()\n }\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n editable,\n text,\n handleSelectElement,\n updateText,\n enterEditing,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5a268d2a&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=5a268d2a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5a268d2a\"\n\nexport default script","\n\n\n\n\n","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\n\nconst pathMap = {\n dot: 'm0 5a5 5 0 1 0 10 0a5 5 0 1 0 -10 0z',\n arrow: 'M0,0 L10,5 0,10 Z',\n}\nconst rotateMap = {\n 'arrow-start': 180,\n 'arrow-end': 0,\n}\n\nexport default defineComponent({\n name: 'line-point-marker',\n props: {\n id: {\n type: String,\n required: true,\n },\n position: {\n type: String as PropType<'start' | 'end'>,\n required: true,\n },\n type: {\n type: String as PropType<'dot' | 'arrow'>,\n required: true,\n },\n color: {\n type: String,\n },\n baseSize: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const path = computed(() => pathMap[props.type])\n const rotate = computed(() => rotateMap[`${props.type}-${props.position}`] || 0)\n const size = computed(() => props.baseSize < 2 ? 2 : props.baseSize)\n\n return {\n path,\n rotate,\n size,\n }\n },\n})\n","import { render } from \"./LinePointMarker.vue?vue&type=template&id=62085f5a\"\nimport script from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\nexport * from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10 6' : '0 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n handleSelectElement,\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=1d4bfa98&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=1d4bfa98&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1d4bfa98\"\n\nexport default script","\r\n\r\n\r\n\r\n\r\n","\n\n\n\n\n\n","\nimport { defineComponent, inject, onMounted, PropType, ref, Ref, watch } from 'vue'\nimport { upperFirst } from 'lodash'\nimport tinycolor from 'tinycolor2'\nimport Chartist, {\n IChartistLineChart,\n IChartistBarChart,\n IChartistPieChart,\n ILineChartOptions,\n IBarChartOptions,\n IPieChartOptions,\n} from 'chartist'\nimport { ChartData, ChartType } from '@/types/slides'\n\nimport 'chartist/dist/scss/chartist.scss'\n\nexport default defineComponent({\n name: 'chart',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n type: {\n type: String as PropType,\n required: true,\n },\n data: {\n type: Object as PropType,\n required: true,\n },\n options: {\n type: Object as PropType,\n },\n themeColor: {\n type: Array as PropType,\n required: true,\n },\n gridColor: {\n type: String,\n },\n },\n setup(props) {\n const chartRef = ref()\n const slideScale: Ref = inject('slideScale') || ref(1)\n\n let chart: IChartistLineChart | IChartistBarChart | IChartistPieChart | undefined\n\n const getDataAndOptions = () => {\n const propsOptopns = props.options || {}\n const options = {\n ...propsOptopns,\n width: props.width * slideScale.value,\n height: props.height * slideScale.value,\n }\n const data = props.type === 'pie' ? { ...props.data, series: props.data.series[0] } : props.data\n return { data, options }\n }\n\n const renderChart = () => {\n if (!chartRef.value) return\n\n const type = upperFirst(props.type)\n const { data, options } = getDataAndOptions()\n chart = new Chartist[type](chartRef.value, data, options)\n }\n\n const updateChart = () => {\n if (!chart) {\n renderChart()\n return\n }\n const { data, options } = getDataAndOptions()\n chart.update(data, options)\n }\n\n watch([\n () => props.width,\n () => props.height,\n () => props.data,\n slideScale,\n ], updateChart)\n\n onMounted(renderChart)\n\n // 更新主题配色:\n // 如果当前所设置的主题色数小于10,剩余部分获取最后一个主题色的相近颜色作为配色\n const updateTheme = () => {\n if (!chartRef.value) return\n\n let colors: string[] = []\n if (props.themeColor.length === 10) colors = props.themeColor\n else if (props.themeColor.length === 1) colors = tinycolor(props.themeColor[0]).analogous(10).map(color => color.toHexString())\n else {\n const len = props.themeColor.length\n const supplement = tinycolor(props.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n colors = [...props.themeColor.slice(0, len - 1), ...supplement]\n }\n\n for (let i = 0; i < 10; i++) {\n chartRef.value.style.setProperty(`--theme-color-${i + 1}`, colors[i])\n }\n }\n\n watch(() => props.themeColor, updateTheme)\n onMounted(updateTheme)\n\n // 更新网格颜色,包括坐标的文字部分\n const updateGridColor = () => {\n if (!chartRef.value) return\n if (props.gridColor) chartRef.value.style.setProperty(`--grid-color`, props.gridColor)\n }\n\n watch(() => props.gridColor, updateGridColor)\n onMounted(updateGridColor)\n\n return {\n slideScale,\n chartRef,\n }\n },\n})\n","import { render } from \"./Chart.vue?vue&type=template&id=1f297efe&scoped=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport \"./Chart.vue?vue&type=style&index=0&id=1f297efe&lang=scss&scoped=true\"\nimport \"./Chart.vue?vue&type=style&index=1&id=1f297efe&lang=scss\"\nscript.render = render\nscript.__scopeId = \"data-v-1f297efe\"\n\nexport default script","\r\nimport { defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\r\nimport emitter, { EmitterEvents } from '@/utils/emitter'\r\n\r\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\r\nimport Chart from './Chart.vue'\r\n\r\nexport default defineComponent({\r\n name: 'editable-element-chart',\r\n components: {\r\n ElementOutline,\r\n Chart,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n selectElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTChartElement, canMove?: boolean) => void>,\r\n required: true,\r\n },\r\n contextmenus: {\r\n type: Function as PropType<() => ContextmenuItem[]>,\r\n },\r\n },\r\n setup(props) {\r\n const handleSelectElement = (e: MouseEvent) => {\r\n if (props.elementInfo.lock) return\r\n e.stopPropagation()\r\n\r\n props.selectElement(e, props.elementInfo)\r\n }\r\n\r\n const openDataEditor = () => {\r\n emitter.emit(EmitterEvents.OPEN_CHART_DATA_EDITOR)\r\n }\r\n\r\n return {\r\n handleSelectElement,\r\n openDataEditor,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=30f6d5ed&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=30f6d5ed&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-30f6d5ed\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","import { TableCellStyle } from '@/types/slides'\n\n/**\n * 计算单元格文本样式\n * @param style 单元格文本样式原数据\n */\nexport const getTextStyle = (style?: TableCellStyle) => {\n if (!style) return {}\n const {\n bold,\n em,\n underline,\n strikethrough,\n color,\n backcolor,\n fontsize,\n fontname,\n align,\n } = style\n\n let textDecoration = `${underline ? 'underline' : ''} ${strikethrough ? 'line-through' : ''}`\n if (textDecoration === ' ') textDecoration = 'none'\n \n return {\n fontWeight: bold ? 'bold' : 'normal',\n fontStyle: em ? 'italic' : 'normal',\n textDecoration,\n color: color || '#000',\n backgroundColor: backcolor || '',\n fontSize: fontsize || '14px',\n fontFamily: fontname || '微软雅黑',\n textAlign: align || 'left',\n }\n}\n\nexport const formatText = (text: string) => {\n return text.replace(/\\n/g, '
').replace(/ /g, ' ')\n}","import { computed, Ref } from 'vue'\nimport { TableCell } from '@/types/slides'\n\n// 计算无效的单元格位置(被合并的单元格位置)集合\n\nexport default (cells: Ref) => {\n const hideCells = computed(() => {\n const hideCells = []\n \n for (let i = 0; i < cells.value.length; i++) {\n const rowCells = cells.value[i]\n\n for (let j = 0; j < rowCells.length; j++) {\n const cell = rowCells[j]\n \n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) {\n hideCells.push(`${row}_${col}`)\n }\n }\n }\n }\n }\n return hideCells\n })\n\n return {\n hideCells,\n }\n}","import { ref, Ref, watch } from 'vue'\nimport { TableTheme } from '@/types/slides'\nimport { getTableSubThemeColor } from '@/utils/element'\n\n// 通过表格的主题色计算辅助颜色\n\nexport default (theme: Ref) => {\n const subThemeColor = ref(['', ''])\n watch(() => theme.value, () => {\n if (theme.value) {\n subThemeColor.value = getTableSubThemeColor(theme.value.color)\n }\n }, { immediate: true })\n\n return {\n subThemeColor,\n }\n}","\n\n\n\n","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { pasteCustomClipboardString, pasteExcelClipboardString } from '@/utils/clipboard'\n\nexport default defineComponent({\n name: 'custom-textarea',\n emits: ['updateValue', 'insertExcelData'],\n props: {\n value: {\n type: String,\n default: '',\n },\n contenteditable: {\n type: [Boolean, String],\n default: false,\n },\n },\n setup(props, { emit }) {\n const textareaRef = ref()\n const text = ref('')\n const isFocus = ref(false)\n\n // 自定义v-modal,同步数据\n // 当文本框聚焦时,不执行数据同步\n watch(() => props.value, () => {\n if (isFocus.value) return\n text.value = props.value\n if (textareaRef.value) textareaRef.value.innerHTML = props.value\n }, { immediate: true })\n\n const handleInput = () => {\n if (!textareaRef.value) return\n const text = textareaRef.value.innerHTML\n emit('updateValue', text)\n }\n\n // 聚焦时更新焦点标记,并监听粘贴事件\n const handleFocus = () => {\n isFocus.value = true\n\n if (!textareaRef.value) return\n textareaRef.value.onpaste = (e: ClipboardEvent) => {\n e.preventDefault()\n if (!e.clipboardData) return\n\n const clipboardDataFirstItem = e.clipboardData.items[0]\n\n if (clipboardDataFirstItem && clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => {\n const clipboardData = pasteCustomClipboardString(text)\n if (typeof clipboardData === 'object') return\n \n const excelData = pasteExcelClipboardString(text)\n if (excelData) {\n emit('insertExcelData', excelData)\n if (textareaRef.value) textareaRef.value.innerHTML = excelData[0][0]\n return\n }\n\n emit('updateValue', text)\n document.execCommand('insertText', false, text)\n })\n }\n }\n }\n\n // 失焦时更新焦点标记,清除粘贴事件监听\n const handleBlur = () => {\n isFocus.value = false\n if (textareaRef.value) textareaRef.value.onpaste = null\n }\n\n // 清除粘贴事件监听\n onUnmounted(() => {\n if (textareaRef.value) textareaRef.value.onpaste = null\n })\n\n return {\n textareaRef,\n handleFocus,\n handleInput,\n handleBlur,\n text,\n }\n },\n})\n","import { render } from \"./CustomTextarea.vue?vue&type=template&id=59f468e0&scoped=true\"\nimport script from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\nexport * from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\n\nimport \"./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-59f468e0\"\n\nexport default script","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { debounce, isEqual } from 'lodash'\nimport { useStore } from '@/store'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { KEYS } from '@/configs/hotkey'\nimport { createRandomCode } from '@/utils/common'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nimport CustomTextarea from './CustomTextarea.vue'\n\nexport default defineComponent({\n name: 'editable-table',\n emits: ['change', 'changeColWidths', 'changeSelectedCells'],\n components: {\n CustomTextarea,\n },\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n \n const isStartSelect = ref(false)\n const startCell = ref([])\n const endCell = ref([])\n\n const tableCells = computed({\n get() {\n return props.data\n },\n set(newData) {\n emit('change', newData)\n },\n })\n\n // 主题辅助色\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n // 计算表格每一列的列宽和总宽度\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n \n // 清除全部单元格的选中状态\n // 表格处于不可编辑状态时也需要清除\n const removeSelectedCells = () => {\n startCell.value = []\n endCell.value = []\n }\n\n watch(() => props.editable, () => {\n if (!props.editable) removeSelectedCells()\n })\n\n // 用于拖拽列宽的操作节点位置\n const dragLinePosition = computed(() => {\n const dragLinePosition: number[] = []\n for (let i = 1; i < colSizeList.value.length + 1; i++) {\n const pos = colSizeList.value.slice(0, i).reduce((a, b) => (a + b))\n dragLinePosition.push(pos)\n }\n return dragLinePosition\n })\n\n // 无效的单元格位置(被合并的单元格位置)集合\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n // 当前选中的单元格集合\n const selectedCells = computed(() => {\n if (!startCell.value.length) return []\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return [`${startX}_${startY}`]\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return [`${startX}_${startY}`]\n\n const selectedCells = []\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n for (let j = 0; j < rowCells.length; j++) {\n if (i >= minX && i <= maxX && j >= minY && j <= maxY) selectedCells.push(`${i}_${j}`)\n }\n }\n return selectedCells\n })\n\n watch(selectedCells, (value, oldValue) => {\n if (isEqual(value, oldValue)) return\n emit('changeSelectedCells', selectedCells.value)\n })\n\n // 当前激活的单元格:当且仅当只有一个选中单元格时,该单元格为激活的单元格\n const activedCell = computed(() => {\n if (selectedCells.value.length > 1) return null\n return selectedCells.value[0]\n })\n\n // 当前选中的单元格位置范围\n const selectedRange = computed(() => {\n if (!startCell.value.length) return null\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return { row: [startX, startX], col: [startY, startY] }\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return { row: [startX, startX], col: [startY, startY] }\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n return {\n row: [minX, maxX],\n col: [minY, maxY],\n }\n })\n\n // 设置选中单元格状态(鼠标点击或拖选)\n const handleMouseup = () => isStartSelect.value = false\n\n const handleCellMousedown = (e: MouseEvent, rowIndex: number, colIndex: number) => {\n if (e.button === 0) {\n endCell.value = []\n isStartSelect.value = true\n startCell.value = [rowIndex, colIndex]\n }\n }\n\n const handleCellMouseenter = (rowIndex: number, colIndex: number) => {\n if (!isStartSelect.value) return\n endCell.value = [rowIndex, colIndex]\n }\n\n onMounted(() => {\n document.addEventListener('mouseup', handleMouseup)\n })\n onUnmounted(() => {\n document.removeEventListener('mouseup', handleMouseup)\n })\n\n // 判断某位置是否为无效单元格(被合并掉的位置)\n const isHideCell = (rowIndex: number, colIndex: number) => hideCells.value.includes(`${rowIndex}_${colIndex}`)\n\n // 选中指定的列\n const selectCol = (index: number) => {\n const maxRow = tableCells.value.length - 1\n startCell.value = [0, index]\n endCell.value = [maxRow, index]\n }\n\n // 选中指定的行\n const selectRow = (index: number) => {\n const maxCol = tableCells.value[index].length - 1\n startCell.value = [index, 0]\n endCell.value = [index, maxCol]\n }\n\n // 选中全部单元格\n const selectAll = () => {\n const maxRow = tableCells.value.length - 1\n const maxCol = tableCells.value[maxRow].length - 1\n startCell.value = [0, 0]\n endCell.value = [maxRow, maxCol]\n }\n\n // 删除一行\n const deleteRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const targetCells = tableCells.value[rowIndex]\n const hideCellsPos = []\n for (let i = 0; i < targetCells.length; i++) {\n if (isHideCell(rowIndex, i)) hideCellsPos.push(i)\n }\n \n for (const pos of hideCellsPos) {\n for (let i = rowIndex; i >= 0; i--) {\n if (!isHideCell(i, pos)) {\n _tableCells[i][pos].rowspan = _tableCells[i][pos].rowspan - 1\n break\n }\n }\n }\n\n _tableCells.splice(rowIndex, 1)\n tableCells.value = _tableCells\n }\n\n // 删除一列\n const deleteCol = (colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const hideCellsPos = []\n for (let i = 0; i < tableCells.value.length; i++) {\n if (isHideCell(i, colIndex)) hideCellsPos.push(i)\n }\n\n for (const pos of hideCellsPos) {\n for (let i = colIndex; i >= 0; i--) {\n if (!isHideCell(pos, i)) {\n _tableCells[pos][i].colspan = _tableCells[pos][i].colspan - 1\n break\n }\n }\n }\n\n tableCells.value = _tableCells.map(item => {\n item.splice(colIndex, 1)\n return item\n })\n colSizeList.value.splice(colIndex, 1)\n emit('changeColWidths', colSizeList.value)\n }\n \n // 插入一行\n const insertRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const rowCells: TableCell[] = []\n for (let i = 0; i < _tableCells[0].length; i++) {\n rowCells.push({\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n })\n }\n\n _tableCells.splice(rowIndex, 0, rowCells)\n tableCells.value = _tableCells\n }\n\n // 插入一列\n const insertCol = (colIndex: number) => {\n tableCells.value = tableCells.value.map(item => {\n const cell = {\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n }\n item.splice(colIndex, 0, cell)\n return item\n })\n colSizeList.value.splice(colIndex, 0, 100)\n emit('changeColWidths', colSizeList.value)\n }\n\n // 填充指定的行/列数\n const fillTable = (rowCount: number, colCount: number) => {\n let _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n const defaultCell = { colspan: 1, rowspan: 1, text: '' }\n \n if (rowCount) {\n const newRows = []\n for (let i = 0; i < rowCount; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < _tableCells[0].length; j++) {\n rowCells.push({\n ...defaultCell,\n id: createRandomCode(),\n })\n }\n newRows.push(rowCells)\n }\n _tableCells = [..._tableCells, ...newRows]\n }\n if (colCount) {\n _tableCells = _tableCells.map(item => {\n const cells: TableCell[] = []\n for (let i = 0; i < colCount; i++) {\n const cell = {\n ...defaultCell,\n id: createRandomCode(),\n }\n cells.push(cell)\n }\n return [...item, ...cells]\n })\n colSizeList.value = [...colSizeList.value, ...new Array(colCount).fill(100)]\n emit('changeColWidths', colSizeList.value)\n }\n\n tableCells.value = _tableCells\n }\n \n // 合并单元格\n const mergeCells = () => {\n const [startX, startY] = startCell.value\n const [endX, endY] = endCell.value\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n \n _tableCells[minX][minY].rowspan = maxX - minX + 1\n _tableCells[minX][minY].colspan = maxY - minY + 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 拆分单元格\n const splitCells = (rowIndex: number, colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n _tableCells[rowIndex][colIndex].rowspan = 1\n _tableCells[rowIndex][colIndex].colspan = 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 鼠标拖拽调整列宽\n const handleMousedownColHandler = (e: MouseEvent, colIndex: number) => {\n removeSelectedCells()\n let isMouseDown = true\n\n const originWidth = colSizeList.value[colIndex]\n const startPageX = e.pageX\n\n const minWidth = 50\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n const moveX = (e.pageX - startPageX) / canvasScale.value\n const width = originWidth + moveX < minWidth ? minWidth : Math.round(originWidth + moveX)\n\n colSizeList.value[colIndex] = width\n }\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n emit('changeColWidths', colSizeList.value)\n }\n }\n\n // 清空选中单元格内的文字\n const clearSelectedCellText = () => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n for (let i = 0; i < _tableCells.length; i++) {\n for (let j = 0; j < _tableCells[i].length; j++) {\n if (selectedCells.value.includes(`${i}_${j}`)) {\n _tableCells[i][j].text = ''\n }\n }\n }\n tableCells.value = _tableCells\n }\n\n // 将焦点移动到下一个单元格\n // 当前行右边有单元格时,焦点右移\n // 当前行右边无单元格(已处在行末),且存在下一行时,焦点移动至下一行行首\n // 当前行右边无单元格(已处在行末),且不存在下一行(已处在最后一行)时,新建一行并将焦点移动至下一行行首\n const tabActiveCell = () => {\n const getNextCell = (i: number, j: number): [number, number] | null => {\n if (!tableCells.value[i]) return null\n if (!tableCells.value[i][j]) return getNextCell(i + 1, 0)\n if (isHideCell(i, j)) return getNextCell(i, j + 1)\n return [i, j]\n }\n\n endCell.value = []\n\n const nextRow = startCell.value[0]\n const nextCol = startCell.value[1] + 1\n\n const nextCell = getNextCell(nextRow, nextCol)\n if (!nextCell) {\n insertRow(nextRow + 1)\n startCell.value = [nextRow + 1, 0]\n }\n else startCell.value = nextCell\n\n // 移动焦点后自动聚焦文本\n nextTick(() => {\n const textRef = document.querySelector('.cell-text.active') as HTMLInputElement\n if (textRef) textRef.focus()\n })\n }\n\n // 表格快捷键监听\n const keydownListener = (e: KeyboardEvent) => {\n if (!props.editable || !selectedCells.value.length) return\n\n const key = e.key.toUpperCase()\n if (selectedCells.value.length < 2) {\n if (key === KEYS.TAB) {\n e.preventDefault()\n tabActiveCell()\n }\n if (e.ctrlKey && key === KEYS.UP) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex)\n }\n if (e.ctrlKey && key === KEYS.DOWN) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex + 1)\n }\n if (e.ctrlKey && key === KEYS.LEFT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex)\n }\n if (e.ctrlKey && key === KEYS.RIGHT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex + 1)\n }\n }\n else if (key === KEYS.DELETE) {\n clearSelectedCellText()\n }\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n })\n\n // 单元格文字输入时更新表格数据\n const handleInput = debounce(function(value, rowIndex, colIndex) {\n tableCells.value[rowIndex][colIndex].text = value\n emit('change', tableCells.value)\n }, 300, { trailing: true })\n\n // 插入来自Excel的数据,表格的行/列数不够时自动补足\n const insertExcelData = (data: string[][], rowIndex: number, colIndex: number) => {\n const maxRow = data.length\n const maxCol = data[0].length\n\n let fillRowCount = 0\n let fillColCount = 0\n if (rowIndex + maxRow > tableCells.value.length) fillRowCount = rowIndex + maxRow - tableCells.value.length\n if (colIndex + maxCol > tableCells.value[0].length) fillColCount = colIndex + maxCol - tableCells.value[0].length\n if (fillRowCount || fillColCount) fillTable(fillRowCount, fillColCount)\n\n nextTick(() => {\n for (let i = 0; i < maxRow; i++) {\n for (let j = 0; j < maxCol; j++) {\n if (tableCells.value[rowIndex + i][colIndex + j]) {\n tableCells.value[rowIndex + i][colIndex + j].text = data[i][j]\n }\n }\n }\n emit('change', tableCells.value)\n })\n }\n\n // 获取有效的单元格(排除掉被合并的单元格)\n const getEffectiveTableCells = () => {\n const effectiveTableCells = []\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n const _rowCells = []\n for (let j = 0; j < rowCells.length; j++) {\n if (!isHideCell(i, j)) _rowCells.push(rowCells[j])\n }\n if (_rowCells.length) effectiveTableCells.push(_rowCells)\n }\n\n return effectiveTableCells\n }\n\n // 检查是否可以删除行和列:有效的行/列数大于1\n const checkCanDeleteRowOrCol = () => {\n const effectiveTableCells = getEffectiveTableCells()\n const canDeleteRow = effectiveTableCells.length > 1\n const canDeleteCol = effectiveTableCells[0].length > 1\n\n return { canDeleteRow, canDeleteCol }\n }\n\n // 检查是否可以合并或拆分\n // 必须多选才可以合并\n // 必须单选且所选单元格为合并单元格才可以拆分\n const checkCanMergeOrSplit = (rowIndex: number, colIndex: number) => {\n const isMultiSelected = selectedCells.value.length > 1\n const targetCell = tableCells.value[rowIndex][colIndex]\n\n const canMerge = isMultiSelected\n const canSplit = !isMultiSelected && (targetCell.rowspan > 1 || targetCell.colspan > 1)\n\n return { canMerge, canSplit }\n }\n\n const contextmenus = (el: HTMLElement): ContextmenuItem[] => {\n const cellIndex = el.dataset.cellIndex as string\n const rowIndex = +cellIndex.split('_')[0]\n const colIndex = +cellIndex.split('_')[1]\n\n if (!selectedCells.value.includes(`${rowIndex}_${colIndex}`)) {\n startCell.value = [rowIndex, colIndex]\n endCell.value = []\n }\n\n const { canMerge, canSplit } = checkCanMergeOrSplit(rowIndex, colIndex)\n const { canDeleteRow, canDeleteCol } = checkCanDeleteRowOrCol()\n\n return [\n {\n text: '插入列',\n children: [\n { text: '到左侧', handler: () => insertCol(colIndex) },\n { text: '到右侧', handler: () => insertCol(colIndex + 1) },\n ],\n },\n {\n text: '插入行',\n children: [\n { text: '到上方', handler: () => insertRow(rowIndex) },\n { text: '到下方', handler: () => insertRow(rowIndex + 1) },\n ],\n },\n {\n text: '删除列',\n disable: !canDeleteCol,\n handler: () => deleteCol(colIndex),\n },\n {\n text: '删除行',\n disable: !canDeleteRow,\n handler: () => deleteRow(rowIndex),\n },\n { divider: true },\n {\n text: '合并单元格',\n disable: !canMerge,\n handler: mergeCells,\n },\n {\n text: '取消合并单元格',\n disable: !canSplit,\n handler: () => splitCells(rowIndex, colIndex),\n },\n { divider: true },\n {\n text: '选中当前列',\n handler: () => selectCol(colIndex),\n },\n {\n text: '选中当前行',\n handler: () => selectRow(rowIndex),\n },\n {\n text: '选中全部单元格',\n handler: selectAll,\n },\n ]\n }\n\n return {\n getTextStyle,\n dragLinePosition,\n tableCells,\n colSizeList,\n totalWidth,\n hideCells,\n selectedCells,\n activedCell,\n selectedRange,\n handleCellMousedown,\n handleCellMouseenter,\n selectCol,\n selectRow,\n handleMousedownColHandler,\n contextmenus,\n handleInput,\n insertExcelData,\n subThemeColor,\n formatText,\n }\n },\n})\n","import { render } from \"./EditableTable.vue?vue&type=template&id=5cfa4d0e&scoped=true\"\nimport script from \"./EditableTable.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableTable.vue?vue&type=script&lang=ts\"\n\nimport \"./EditableTable.vue?vue&type=style&index=0&id=5cfa4d0e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5cfa4d0e\"\n\nexport default script","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTableElement, TableCell } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport EditableTable from './EditableTable.vue'\n\nexport default defineComponent({\n name: 'editable-element-table',\n components: {\n EditableTable,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const handleElementId = computed(() => store.state.handleElementId)\n \n const elementRef = ref()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n\n // 更新表格的可编辑状态,表格处于编辑状态时需要禁用全局快捷键\n const editable = ref(false)\n\n watch(handleElementId, () => {\n if (handleElementId.value !== props.elementInfo.id) editable.value = false\n })\n\n watch(editable, () => {\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, editable.value)\n })\n\n const startEdit = () => {\n if (!props.elementInfo.lock) editable.value = true\n }\n\n // 监听表格元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n const isScaling = computed(() => store.state.isScaling)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (isScaling.value) editable.value = false\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTableElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeight },\n })\n }\n else realHeightCache.value = realHeight\n }\n }\n\n const resizeObserver = new ResizeObserver(updateTableElementHeight)\n\n onMounted(() => {\n if (elementRef.value) resizeObserver.observe(elementRef.value)\n })\n onUnmounted(() => {\n if (elementRef.value) resizeObserver.unobserve(elementRef.value)\n })\n\n // 更新表格内容数据\n const updateTableCells = (data: TableCell[][]) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { data },\n })\n addHistorySnapshot()\n }\n\n // 更新表格的列宽数据\n const updateColWidths = (widths: number[]) => {\n const width = widths.reduce((a, b) => a + b)\n const colWidths = widths.map(item => item / width)\n\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { width, colWidths },\n })\n addHistorySnapshot()\n }\n\n // 更新表格当前选中的单元格\n const updateSelectedCells = (cells: string[]) => {\n nextTick(() => store.commit(MutationTypes.SET_SELECTED_TABLE_CELLS, cells))\n }\n\n return {\n elementRef,\n canvasScale,\n handleSelectElement,\n updateTableCells,\n updateColWidths,\n editable,\n startEdit,\n updateSelectedCells,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=10d814ca&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=10d814ca&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-10d814ca\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { ElementTypes, PPTElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\n\nimport useLockElement from '@/hooks/useLockElement'\nimport useDeleteElement from '@/hooks/useDeleteElement'\nimport useCombineElement from '@/hooks/useCombineElement'\nimport useOrderElement from '@/hooks/useOrderElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useCopyAndPasteElement from '@/hooks/useCopyAndPasteElement'\nimport useSelectAllElement from '@/hooks/useSelectAllElement'\n\nimport { ElementOrderCommands, ElementAlignCommands } from '@/types/edit'\n\nimport ImageElement from '@/views/components/element/ImageElement/index.vue'\nimport TextElement from '@/views/components/element/TextElement/index.vue'\nimport ShapeElement from '@/views/components/element/ShapeElement/index.vue'\nimport LineElement from '@/views/components/element/LineElement/index.vue'\nimport ChartElement from '@/views/components/element/ChartElement/index.vue'\nimport TableElement from '@/views/components/element/TableElement/index.vue'\n\nexport default defineComponent({\n name: 'editable-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTElement, canMove?: boolean) => void>,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: ImageElement,\n [ElementTypes.TEXT]: TextElement,\n [ElementTypes.SHAPE]: ShapeElement,\n [ElementTypes.LINE]: LineElement,\n [ElementTypes.CHART]: ChartElement,\n [ElementTypes.TABLE]: TableElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const { orderElement } = useOrderElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { combineElements, uncombineElements } = useCombineElement()\n const { deleteElement } = useDeleteElement()\n const { lockElement, unlockElement } = useLockElement()\n const { copyElement, pasteElement, cutElement } = useCopyAndPasteElement()\n const { selectAllElement } = useSelectAllElement()\n\n const contextmenus = (): ContextmenuItem[] => {\n if (props.elementInfo.lock) {\n return [{\n text: '解锁', \n handler: () => unlockElement(props.elementInfo),\n }]\n }\n\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutElement,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copyElement,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteElement,\n },\n { divider: true },\n {\n text: '水平居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER), },\n { text: '水平居中', handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL) },\n { text: '左对齐', handler: () => alignElementToCanvas(ElementAlignCommands.LEFT) },\n { text: '右对齐', handler: () => alignElementToCanvas(ElementAlignCommands.RIGHT) },\n ],\n },\n {\n text: '垂直居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER) },\n { text: '垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL) },\n { text: '顶部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.TOP) },\n { text: '底部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.BOTTOM) },\n ],\n },\n { divider: true },\n {\n text: '置于顶层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP),\n children: [\n { text: '置于顶层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP) },\n { text: '上移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.UP) },\n ],\n },\n {\n text: '置于底层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM),\n children: [\n { text: '置于底层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM) },\n { text: '下移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.DOWN) },\n ],\n },\n { divider: true },\n {\n text: '设置链接',\n handler: props.openLinkDialog,\n },\n {\n text: props.elementInfo.groupId ? '取消组合' : '组合',\n subText: 'Ctrl + G',\n handler: props.elementInfo.groupId ? uncombineElements : combineElements,\n hide: !props.isMultiSelect,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllElement,\n },\n {\n text: '锁定',\n subText: 'Ctrl + L',\n handler: lockElement,\n },\n {\n text: '删除',\n subText: 'Delete',\n handler: deleteElement,\n },\n ]\n }\n\n return {\n currentElementComponent,\n contextmenus,\n }\n },\n})\n","import { render } from \"./EditableElement.vue?vue&type=template&id=cbbbf8fc\"\nimport script from \"./EditableElement.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableElement.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","\nexport default {\n name: 'mouse-selection',\n props: {\n top: {\n type: Number,\n required: true,\n },\n left: {\n type: Number,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n quadrant: {\n type: Number,\n required: true,\n validator(value: number) {\n return [1, 2, 3, 4].includes(value)\n },\n },\n }\n}\n","import { render } from \"./MouseSelection.vue?vue&type=template&id=1619c258&scoped=true\"\nimport script from \"./MouseSelection.vue?vue&type=script&lang=ts\"\nexport * from \"./MouseSelection.vue?vue&type=script&lang=ts\"\n\nimport \"./MouseSelection.vue?vue&type=style&index=0&id=1619c258&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1619c258\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","\nimport { defineComponent, computed } from 'vue'\nimport tinycolor from 'tinycolor2'\nimport { useStore } from '@/store'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { SlideBackground } from '@/types/slides'\n\nexport default defineComponent({\n name: 'grid-lines',\n setup() {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const background = computed(() => store.getters.currentSlide?.background)\n\n // 计算网格线的颜色,避免与背景的颜色太接近\n const gridColor = computed(() => {\n const bgColor = background.value?.color || '#fff'\n const colorList = ['#000', '#fff']\n return tinycolor.mostReadable(bgColor, colorList, { includeFallbackColors: true }).setAlpha(.5).toRgbString()\n })\n\n const gridSize = 50\n\n // 计算网格路径\n const getPath = () => {\n const maxX = VIEWPORT_SIZE\n const maxY = VIEWPORT_SIZE * viewportRatio.value\n\n let path = ''\n for (let i = 0; i <= Math.floor(maxY / gridSize); i++) {\n path += `M0 ${i * gridSize} L${maxX} ${i * gridSize} `\n }\n for (let i = 0; i <= Math.floor(maxX / gridSize); i++) {\n path += `M${i * gridSize} 0 L${i * gridSize} ${maxY} `\n }\n return path\n }\n\n return {\n canvasScale,\n gridColor,\n width: VIEWPORT_SIZE,\n height: VIEWPORT_SIZE * viewportRatio.value,\n path: getPath(),\n }\n },\n})\n","import { render } from \"./GridLines.vue?vue&type=template&id=1d945f13&scoped=true\"\nimport script from \"./GridLines.vue?vue&type=script&lang=ts\"\nexport * from \"./GridLines.vue?vue&type=script&lang=ts\"\n\nimport \"./GridLines.vue?vue&type=style&index=0&id=1d945f13&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1d945f13\"\n\nexport default script","import { Ref, computed } from 'vue'\nimport { SlideBackground } from '@/types/slides'\n\n// 将页面背景数据转换为css样式\nexport default (background: Ref) => {\n const backgroundStyle = computed(() => {\n if (!background.value) return { backgroundColor: '#fff' }\n\n const {\n type,\n color,\n image,\n imageSize,\n gradientColor,\n gradientRotate,\n gradientType,\n } = background.value\n\n // 纯色背景\n if (type === 'solid') return { backgroundColor: color }\n\n // 背景图模式\n // 包括:背景图、背景大小,是否重复\n else if (type === 'image') {\n if (!image) return { backgroundColor: '#fff' }\n if (imageSize === 'repeat') {\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'repeat',\n backgroundSize: 'contain',\n }\n }\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: imageSize || 'cover',\n }\n }\n\n // 渐变色背景\n else if (type === 'gradient') {\n const rotate = gradientRotate || 0\n const color1 = gradientColor ? gradientColor[0] : '#fff'\n const color2 = gradientColor ? gradientColor[1] : '#fff'\n \n if (gradientType === 'radial') return { backgroundImage: `radial-gradient(${color1}, ${color2}` }\n return { backgroundImage: `linear-gradient(${rotate}deg, ${color1}, ${color2}` }\n }\n\n return { backgroundColor: '#fff' }\n })\n\n return {\n backgroundStyle,\n }\n}","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { SlideBackground } from '@/types/slides'\nimport GridLines from './GridLines.vue'\nimport useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'\n\nexport default defineComponent({\n name: 'viewport-background',\n components: {\n GridLines,\n },\n setup() {\n const store = useStore()\n const showGridLines = computed(() => store.state.showGridLines)\n const background = computed(() => store.getters.currentSlide?.background)\n\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n return {\n showGridLines,\n backgroundStyle,\n }\n },\n})\n","import { render } from \"./ViewportBackground.vue?vue&type=template&id=a9ca1b50&scoped=true\"\nimport script from \"./ViewportBackground.vue?vue&type=script&lang=ts\"\nexport * from \"./ViewportBackground.vue?vue&type=script&lang=ts\"\n\nimport \"./ViewportBackground.vue?vue&type=style&index=0&id=a9ca1b50&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a9ca1b50\"\n\nexport default script","\n\n\n\n","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { AlignmentLineAxis } from '@/types/edit'\n\nexport default defineComponent({\n name: 'alignment-line',\n props: {\n type: {\n type: String as PropType<'vertical' | 'horizontal'>,\n required: true,\n },\n axis: {\n type: Object as PropType,\n required: true,\n },\n length: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n // 吸附对齐线的位置\n const left = computed(() => props.axis.x * canvasScale.value + 'px')\n const top = computed(() => props.axis.y * canvasScale.value + 'px')\n\n // 吸附对齐线的长度\n const sizeStyle = computed(() => {\n if (props.type === 'vertical') return { height: props.length * canvasScale.value + 'px' }\n return { width: props.length * canvasScale.value + 'px' }\n })\n\n return {\n left,\n top,\n sizeStyle,\n }\n },\n})\n","import { render } from \"./AlignmentLine.vue?vue&type=template&id=2d3eddf5&scoped=true\"\nimport script from \"./AlignmentLine.vue?vue&type=script&lang=ts\"\nexport * from \"./AlignmentLine.vue?vue&type=script&lang=ts\"\n\nimport \"./AlignmentLine.vue?vue&type=style&index=0&id=2d3eddf5&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2d3eddf5\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, reactive, ref } from 'vue'\nimport { useStore } from '@/store'\n\nexport default defineComponent({\n name: 'element-create-selection',\n emits: ['created'],\n setup(props, { emit }) {\n const store = useStore()\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n const creatingElement = computed(() => store.state.creatingElement)\n\n const start = ref<[number, number]>()\n const end = ref<[number, number]>()\n\n const selectionRef = ref()\n const offset = reactive({\n x: 0,\n y: 0,\n })\n onMounted(() => {\n if (!selectionRef.value) return\n const { x, y } = selectionRef.value.getBoundingClientRect()\n offset.x = x\n offset.y = y\n })\n\n // 鼠标拖动创建元素生成位置大小\n // 获取范围的起始位置和终点位置\n const createSelection = (e: MouseEvent) => {\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n start.value = [startPageX, startPageY]\n\n document.onmousemove = e => {\n if (!creatingElement.value || !isMouseDown) return\n\n let currentPageX = e.pageX\n let currentPageY = e.pageY\n\n // 按住Ctrl键或者Shift键时:\n // 对于非线条元素需要锁定宽高比例,对于线条元素需要锁定水平或垂直方向\n if (ctrlOrShiftKeyActive.value) {\n const moveX = currentPageX - startPageX\n const moveY = currentPageY - startPageY\n\n // 水平和垂直方向的拖动距离,后面以拖动距离较大的方向为基础计算另一方向的数据\n const absX = Math.abs(moveX)\n const absY = Math.abs(moveY)\n\n if (creatingElement.value.type === 'shape') {\n\n // 判断是否为反向拖动:从左上到右下为正向操作,此外所有情况都是反向操作\n const isOpposite = (moveY > 0 && moveX < 0) || (moveY < 0 && moveX > 0)\n\n if (absX > absY) {\n currentPageY = isOpposite ? startPageY - moveX : startPageY + moveX\n }\n else {\n currentPageX = isOpposite ? startPageX - moveY : startPageX + moveY\n }\n }\n\n else if (creatingElement.value.type === 'line') {\n if (absX > absY) currentPageY = startPageY\n else currentPageX = startPageX\n }\n }\n\n end.value = [currentPageX, currentPageY]\n }\n\n document.onmouseup = e => {\n document.onmousemove = null\n document.onmouseup = null\n isMouseDown = false\n\n const endPageX = e.pageX\n const endPageY = e.pageY\n\n const minSize = 30\n\n if (\n creatingElement.value?.type === 'line' &&\n (Math.abs(endPageX - startPageX) >= minSize || Math.abs(endPageY - startPageY) >= minSize)\n ) {\n emit('created', {\n start: start.value,\n end: end.value,\n })\n }\n else if (\n creatingElement.value?.type !== 'line' &&\n (Math.abs(endPageX - startPageX) >= minSize && Math.abs(endPageY - startPageY) >= minSize)\n ) {\n emit('created', {\n start: start.value,\n end: end.value,\n })\n }\n else {\n const defaultSize = 200\n const minX = Math.min(endPageX, startPageX)\n const minY = Math.min(endPageY, startPageY)\n const maxX = Math.max(endPageX, startPageX)\n const maxY = Math.max(endPageY, startPageY)\n const offsetX = maxX - minX >= minSize ? maxX - minX : defaultSize\n const offsetY = maxY - minY >= minSize ? maxY - minY : defaultSize\n emit('created', {\n start: [minX, minY],\n end: [minX + offsetX, minY + offsetY],\n })\n }\n }\n }\n\n // 绘制线条的路径相关数据(仅当绘制元素类型为线条时使用)\n const lineData = computed(() => {\n if (!start.value || !end.value) return null\n if (!creatingElement.value || creatingElement.value.type !== 'line') return null\n\n const [_startX, _startY] = start.value\n const [_endX, _endY] = end.value\n const minX = Math.min(_startX, _endX)\n const maxX = Math.max(_startX, _endX)\n const minY = Math.min(_startY, _endY)\n const maxY = Math.max(_startY, _endY)\n\n const svgWidth = maxX - minX >= 24 ? maxX - minX : 24\n const svgHeight = maxY - minY >= 24 ? maxY - minY : 24\n\n const startX = _startX === minX ? 0 : maxX - minX\n const startY = _startY === minY ? 0 : maxY - minY\n const endX = _endX === minX ? 0 : maxX - minX\n const endY = _endY === minY ? 0 : maxY - minY\n\n const path = `M${startX}, ${startY} L${endX}, ${endY}`\n\n return {\n svgWidth,\n svgHeight,\n startX,\n startY,\n endX,\n endY,\n path,\n }\n })\n\n // 根据生成范围的起始位置和终点位置,计算元素创建时的位置和大小\n const position = computed(() => {\n if (!start.value || !end.value) return {}\n\n const [startX, startY] = start.value\n const [endX, endY] = end.value\n const minX = Math.min(startX, endX)\n const maxX = Math.max(startX, endX)\n const minY = Math.min(startY, endY)\n const maxY = Math.max(startY, endY)\n\n const width = maxX - minX\n const height = maxY - minY\n\n return {\n left: minX - offset.x + 'px',\n top: minY - offset.y + 'px',\n width: width + 'px',\n height: height + 'px',\n }\n })\n\n return {\n selectionRef,\n start,\n end,\n creatingElement,\n createSelection,\n lineData,\n position,\n }\n },\n})\n","import { render } from \"./ElementCreateSelection.vue?vue&type=template&id=04472140&scoped=true\"\nimport script from \"./ElementCreateSelection.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementCreateSelection.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementCreateSelection.vue?vue&type=style&index=0&id=04472140&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-04472140\"\n\nexport default script","\n\n\n\n","import { computed, Ref } from 'vue'\nimport { OperateResizeHandlers, OperateBorderLines } from '@/types/edit'\n\nexport default (width: Ref, height: Ref) => {\n // 元素缩放点\n const resizeHandlers = computed(() => {\n return [\n { direction: OperateResizeHandlers.LEFT_TOP, style: {} },\n { direction: OperateResizeHandlers.TOP, style: {left: width.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.RIGHT_TOP, style: {left: width.value + 'px'} },\n { direction: OperateResizeHandlers.LEFT, style: {top: height.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.RIGHT, style: {left: width.value + 'px', top: height.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.LEFT_BOTTOM, style: {top: height.value + 'px'} },\n { direction: OperateResizeHandlers.BOTTOM, style: {left: width.value / 2 + 'px', top: height.value + 'px'} },\n { direction: OperateResizeHandlers.RIGHT_BOTTOM, style: {left: width.value + 'px', top: height.value + 'px'} },\n ]\n })\n\n // 文本元素缩放点\n const textElementResizeHandlers = computed(() => {\n return [\n { direction: OperateResizeHandlers.LEFT, style: {top: height.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.RIGHT, style: {left: width.value + 'px', top: height.value / 2 + 'px'} },\n ]\n })\n\n // 元素选中边框线\n const borderLines = computed(() => {\n return [\n { type: OperateBorderLines.T, style: {width: width.value + 'px'} },\n { type: OperateBorderLines.B, style: {top: height.value + 'px', width: width.value + 'px'} },\n { type: OperateBorderLines.L, style: {height: height.value + 'px'} },\n { type: OperateBorderLines.R, style: {left: width.value + 'px', height: height.value + 'px'} },\n ]\n })\n\n return {\n resizeHandlers,\n textElementResizeHandlers,\n borderLines,\n }\n}","\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { OperateResizeHandler } from '@/types/edit'\n\nexport default defineComponent({\n name: 'resize-handler',\n props: {\n type: {\n type: String as PropType,\n default: '',\n },\n rotate: {\n type: Number,\n default: 0,\n },\n },\n setup(props) {\n const rotateClassName = computed(() => {\n const prefix = 'rotate-'\n const rotate = props.rotate\n if (rotate > -22.5 && rotate <= 22.5) return prefix + 0\n else if (rotate > 22.5 && rotate <= 67.5) return prefix + 45\n else if (rotate > 67.5 && rotate <= 112.5) return prefix + 90\n else if (rotate > 112.5 && rotate <= 157.5) return prefix + 135\n else if (rotate > 157.5 || rotate <= -157.5) return prefix + 0\n else if (rotate > -157.5 && rotate <= -112.5) return prefix + 45\n else if (rotate > -112.5 && rotate <= -67.5) return prefix + 90\n else if (rotate > -67.5 && rotate <= -22.5) return prefix + 135\n return prefix + 0\n })\n\n return {\n rotateClassName,\n }\n },\n})\n","import { render } from \"./ResizeHandler.vue?vue&type=template&id=680e5917&scoped=true\"\nimport script from \"./ResizeHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./ResizeHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./ResizeHandler.vue?vue&type=style&index=0&id=680e5917&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-680e5917\"\n\nexport default script","\n\n\n\n","\nimport { PropType } from 'vue'\nimport { OperateBorderLine } from '@/types/edit'\n\nexport default {\n name: 'border-line',\n props: {\n type: {\n type: String as PropType,\n required: true,\n },\n isWide: {\n type: Boolean,\n default: false,\n },\n },\n}\n","import { render } from \"./BorderLine.vue?vue&type=template&id=630e246b&scoped=true\"\nimport script from \"./BorderLine.vue?vue&type=script&lang=ts\"\nexport * from \"./BorderLine.vue?vue&type=script&lang=ts\"\n\nimport \"./BorderLine.vue?vue&type=style&index=0&id=630e246b&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-630e246b\"\n\nexport default script","\nimport { computed, defineComponent, reactive, PropType, watchEffect, toRefs } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementListRange } from '@/utils/element'\nimport { OperateResizeHandler, MultiSelectRange } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'multi-select-operate',\n components: {\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementList: {\n type: Array as PropType,\n required: true,\n },\n scaleMultiElement: {\n type: Function as PropType<(e: MouseEvent, range: MultiSelectRange, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const canvasScale = computed(() => store.state.canvasScale)\n const localActiveElementList = computed(() => props.elementList.filter(el => activeElementIdList.value.includes(el.id)))\n\n const range = reactive({\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0,\n })\n\n // 根据多选元素整体在画布中的范围,计算边框线和缩放点的位置信息\n const width = computed(() => (range.maxX - range.minX) * canvasScale.value)\n const height = computed(() => (range.maxY - range.minY) * canvasScale.value)\n const { resizeHandlers, borderLines } = useCommonOperate(width, height)\n\n // 计算多选元素整体在画布中的范围\n const setRange = () => {\n const { minX, maxX, minY, maxY } = getElementListRange(localActiveElementList.value)\n range.minX = minX\n range.maxX = maxX\n range.minY = minY\n range.maxY = maxY\n }\n watchEffect(setRange)\n\n // 禁用多选状态下缩放:仅未旋转的图片和形状可以在多选状态下缩放\n const disableResize = computed(() => {\n return localActiveElementList.value.some(item => {\n if (\n (item.type === 'image' || item.type === 'shape') && \n !item.rotate\n ) return false\n return true\n })\n })\n\n return {\n ...toRefs(range),\n canvasScale,\n borderLines,\n disableResize,\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./MultiSelectOperate.vue?vue&type=template&id=4def6455&scoped=true\"\nimport script from \"./MultiSelectOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./MultiSelectOperate.vue?vue&type=script&lang=ts\"\n\nimport \"./MultiSelectOperate.vue?vue&type=style&index=0&id=4def6455&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4def6455\"\n\nexport default script","\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","\n\n\n\n","\nexport default {\n name: 'rotate-handler',\n}\n","import { render } from \"./RotateHandler.vue?vue&type=template&id=9a549510&scoped=true\"\nimport script from \"./RotateHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./RotateHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./RotateHandler.vue?vue&type=style&index=0&id=9a549510&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9a549510\"\n\nexport default script","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { useStore } from '@/store'\r\nimport { PPTImageElement } from '@/types/slides'\r\nimport { OperateResizeHandler } from '@/types/edit'\r\nimport useCommonOperate from '../hooks/useCommonOperate'\r\n\r\nimport RotateHandler from './RotateHandler.vue'\r\nimport ResizeHandler from './ResizeHandler.vue'\r\nimport BorderLine from './BorderLine.vue'\r\n\r\nexport default defineComponent({\r\n name: 'image-element-operate',\r\n inheritAttrs: false,\r\n components: {\r\n RotateHandler,\r\n ResizeHandler,\r\n BorderLine,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: PPTImageElement) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTImageElement, command: OperateResizeHandler) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const store = useStore()\r\n const canvasScale = computed(() => store.state.canvasScale)\r\n const clipingImageElementId = computed(() => store.state.clipingImageElementId)\r\n const isCliping = computed(() => clipingImageElementId.value === props.elementInfo.id)\r\n\r\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\r\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\r\n const { resizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\r\n\r\n return {\r\n isCliping,\r\n scaleWidth,\r\n resizeHandlers,\r\n borderLines,\r\n }\r\n },\r\n})\r\n","import { render } from \"./ImageElementOperate.vue?vue&type=template&id=7dc35c8e&scoped=true\"\nimport script from \"./ImageElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageElementOperate.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageElementOperate.vue?vue&type=style&index=0&id=7dc35c8e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7dc35c8e\"\n\nexport default script","\r\n\r\n","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { useStore } from '@/store'\r\n\r\nimport { PPTTextElement } from '@/types/slides'\r\nimport { OperateResizeHandler } from '@/types/edit'\r\nimport useCommonOperate from '../hooks/useCommonOperate'\r\n\r\nimport RotateHandler from './RotateHandler.vue'\r\nimport ResizeHandler from './ResizeHandler.vue'\r\nimport BorderLine from './BorderLine.vue'\r\n\r\nexport default defineComponent({\r\n name: 'text-element-operate',\r\n inheritAttrs: false,\r\n components: {\r\n RotateHandler,\r\n ResizeHandler,\r\n BorderLine,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: PPTTextElement) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTTextElement, command: OperateResizeHandler) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const store = useStore()\r\n const canvasScale = computed(() => store.state.canvasScale)\r\n\r\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\r\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\r\n\r\n const { textElementResizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\r\n\r\n return {\r\n scaleWidth,\r\n textElementResizeHandlers,\r\n borderLines,\r\n }\r\n },\r\n})\r\n","import { render } from \"./TextElementOperate.vue?vue&type=template&id=1c6ae133\"\nimport script from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandler } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport RotateHandler from './RotateHandler.vue'\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'shape-element-operate',\n inheritAttrs: false,\n components: {\n RotateHandler,\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n rotateElement: {\n type: Function as PropType<(element: PPTShapeElement) => void>,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\n const { resizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\n\n return {\n scaleWidth,\n resizeHandlers,\n borderLines,\n }\n },\n})\n","import { render } from \"./ShapeElementOperate.vue?vue&type=template&id=1d01ac74\"\nimport script from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTLineElement } from '@/types/slides'\nimport { OperateLineHandler, OperateLineHandlers } from '@/types/edit'\n\nimport ResizeHandler from './ResizeHandler.vue'\n\nexport default defineComponent({\n name: 'text-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n dragLineElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, command: OperateLineHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const resizeHandlers = computed(() => {\n const handlers = [\n {\n handler: OperateLineHandlers.START,\n style: {\n left: props.elementInfo.start[0] * canvasScale.value + 'px',\n top: props.elementInfo.start[1] * canvasScale.value + 'px',\n }\n },\n {\n handler: OperateLineHandlers.END,\n style: {\n left: props.elementInfo.end[0] * canvasScale.value + 'px',\n top: props.elementInfo.end[1] * canvasScale.value + 'px',\n }\n },\n ]\n\n if (props.elementInfo.curve || props.elementInfo.broken) {\n const midHandler = (props.elementInfo.curve || props.elementInfo.broken) as [number, number]\n\n handlers.push({\n handler: OperateLineHandlers.MID,\n style: {\n left: midHandler[0] * canvasScale.value + 'px',\n top: midHandler[1] * canvasScale.value + 'px',\n }\n })\n }\n return handlers\n })\n\n return {\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./LineElementOperate.vue?vue&type=template&id=019938f6\"\nimport script from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandler } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'chart-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\n const { resizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\n\n return {\n scaleWidth,\n resizeHandlers,\n borderLines,\n }\n },\n})\n","import { render } from \"./ChartElementOperate.vue?vue&type=template&id=4218643e\"\nimport script from \"./ChartElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTTableElement } from '@/types/slides'\nimport { OperateResizeHandler } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'table-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const outlineWidth = computed(() => props.elementInfo.outline.width || 1)\n\n const scaleWidth = computed(() => (props.elementInfo.width + outlineWidth.value) * canvasScale.value)\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\n\n const { textElementResizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\n\n return {\n scaleWidth,\n textElementResizeHandlers,\n borderLines,\n }\n },\n})\n","import { render } from \"./TableElementOperate.vue?vue&type=template&id=459ab724\"\nimport script from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","import { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const store = useStore()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const setLink = (handleElement: PPTElement, link: string) => {\n const linkRegExp = /^(https?):\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+([\\w\\-.,@?^=%&:\\/~+#]*[\\w\\-@?^=%&\\/~+#])?$/\n if (!link || !linkRegExp.test(link)) {\n message.error('不是正确的网页链接地址')\n return false\n }\n const props = { link }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.id, props })\n addHistorySnapshot()\n\n return true\n }\n\n const removeLink = (handleElement: PPTElement) => {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.id, propName: 'link' })\n addHistorySnapshot()\n }\n\n return {\n setLink,\n removeLink,\n }\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nexport default defineComponent({\n name: 'link-handler',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup() {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const { removeLink } = useLink()\n\n return {\n canvasScale,\n removeLink,\n }\n },\n})\n","import { render } from \"./LinkHandler.vue?vue&type=template&id=9d9e1336&scoped=true\"\nimport script from \"./LinkHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkHandler.vue?vue&type=style&index=0&id=9d9e1336&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9d9e1336\"\n\nexport default script","\r\nimport { defineComponent, PropType, computed } from 'vue'\r\nimport { useStore } from '@/store'\r\nimport { ElementTypes, PPTElement, Slide } from '@/types/slides'\r\nimport { OperateLineHandler, OperateResizeHandler } from '@/types/edit'\r\n\r\nimport ImageElementOperate from './ImageElementOperate.vue'\r\nimport TextElementOperate from './TextElementOperate.vue'\r\nimport ShapeElementOperate from './ShapeElementOperate.vue'\r\nimport LineElementOperate from './LineElementOperate.vue'\r\nimport ChartElementOperate from './ChartElementOperate.vue'\r\nimport TableElementOperate from './TableElementOperate.vue'\r\nimport LinkHandler from './LinkHandler.vue'\r\n\r\nexport default defineComponent({\r\n name: 'operate',\r\n components: {\r\n LinkHandler,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isSelected: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActive: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: PPTElement) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTElement, command: OperateResizeHandler) => void>,\r\n required: true,\r\n },\r\n dragLineElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTElement, command: OperateLineHandler) => void>,\r\n required: true,\r\n },\r\n openLinkDialog: {\r\n type: Function as PropType<() => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const store = useStore()\r\n const canvasScale = computed(() => store.state.canvasScale)\r\n const toolbarState = computed(() => store.state.toolbarState)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const currentOperateComponent = computed(() => {\r\n const elementTypeMap = {\r\n [ElementTypes.IMAGE]: ImageElementOperate,\r\n [ElementTypes.TEXT]: TextElementOperate,\r\n [ElementTypes.SHAPE]: ShapeElementOperate,\r\n [ElementTypes.LINE]: LineElementOperate,\r\n [ElementTypes.CHART]: ChartElementOperate,\r\n [ElementTypes.TABLE]: TableElementOperate,\r\n }\r\n return elementTypeMap[props.elementInfo.type] || null\r\n })\r\n\r\n const elementIndexInAnimation = computed(() => {\r\n const animations = currentSlide.value.animations || []\r\n return animations.findIndex(animation => animation.elId === props.elementInfo.id)\r\n })\r\n\r\n return {\r\n currentOperateComponent,\r\n canvasScale,\r\n toolbarState,\r\n elementIndexInAnimation,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=46d959c4&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=46d959c4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-46d959c4\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nexport default defineComponent({\n name: 'link-dialog',\n emits: ['close'],\n setup(props, { emit }) {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const link = ref('')\n\n const { setLink } = useLink()\n\n onMounted(() => {\n if (handleElement.value?.link) link.value = handleElement.value.link\n })\n\n const close = () => emit('close')\n\n const save = () => {\n if (handleElement.value) {\n const success = setLink(handleElement.value, link.value)\n if (success) close()\n else link.value = ''\n }\n }\n\n return {\n link,\n close,\n save,\n }\n },\n})\n","import { render } from \"./LinkDialog.vue?vue&type=template&id=02317299&scoped=true\"\nimport script from \"./LinkDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkDialog.vue?vue&type=style&index=0&id=02317299&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-02317299\"\n\nexport default script","\nimport { computed, defineComponent, provide, ref, watch, watchEffect } from 'vue'\nimport { throttle } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { AlignmentLineProps } from '@/types/edit'\nimport { removeAllRanges } from '@/utils/selection'\nimport { KEYS } from '@/configs/hotkey'\n\nimport useViewportSize from './hooks/useViewportSize'\nimport useMouseSelection from './hooks/useMouseSelection'\nimport useDropImageOrText from './hooks/useDropImageOrText'\nimport useRotateElement from './hooks/useRotateElement'\nimport useScaleElement from './hooks/useScaleElement'\nimport useSelectElement from './hooks/useSelectElement'\nimport useDragElement from './hooks/useDragElement'\nimport useDragLineElement from './hooks/useDragLineElement'\nimport useInsertFromCreateSelection from './hooks/useInsertFromCreateSelection'\n\nimport useDeleteElement from '@/hooks/useDeleteElement'\nimport useCopyAndPasteElement from '@/hooks/useCopyAndPasteElement'\nimport useSelectAllElement from '@/hooks/useSelectAllElement'\nimport useScaleCanvas from '@/hooks/useScaleCanvas'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\n\nimport EditableElement from './EditableElement.vue'\nimport MouseSelection from './MouseSelection.vue'\nimport ViewportBackground from './ViewportBackground.vue'\nimport AlignmentLine from './AlignmentLine.vue'\nimport ElementCreateSelection from './ElementCreateSelection.vue'\nimport MultiSelectOperate from './Operate/MultiSelectOperate.vue'\nimport Operate from './Operate/index.vue'\nimport LinkDialog from './LinkDialog.vue'\n\nexport default defineComponent({\n name: 'editor-canvas',\n components: {\n EditableElement,\n MouseSelection,\n ViewportBackground,\n AlignmentLine,\n ElementCreateSelection,\n MultiSelectOperate,\n Operate,\n LinkDialog,\n },\n setup() {\n const store = useStore()\n\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const handleElementId = computed(() => store.state.handleElementId)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const ctrlKeyState = computed(() => store.state.ctrlKeyState)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n const viewportRef = ref()\n const alignmentLines = ref([])\n\n const linkDialogVisible = ref(false)\n const openLinkDialog = () => linkDialogVisible.value = true\n\n watch(handleElementId, () => {\n store.commit(MutationTypes.SET_ACTIVE_GROUP_ELEMENT_ID, '')\n })\n\n const currentSlide = computed(() => store.getters.currentSlide)\n const elementList = ref([])\n const setLocalElementList = () => {\n elementList.value = currentSlide.value ? JSON.parse(JSON.stringify(currentSlide.value.elements)) : []\n }\n watchEffect(setLocalElementList)\n\n const canvasRef = ref()\n const canvasScale = computed(() => store.state.canvasScale)\n const { viewportStyles } = useViewportSize(canvasRef)\n\n useDropImageOrText(canvasRef)\n\n const { mouseSelectionState, updateMouseSelection } = useMouseSelection(elementList, viewportRef)\n\n const { dragElement } = useDragElement(elementList, alignmentLines)\n const { dragLineElement } = useDragLineElement(elementList)\n const { selectElement } = useSelectElement(elementList, dragElement)\n const { scaleElement, scaleMultiElement } = useScaleElement(elementList, alignmentLines)\n const { rotateElement } = useRotateElement(elementList, viewportRef)\n\n const { selectAllElement } = useSelectAllElement()\n const { deleteAllElements } = useDeleteElement()\n const { pasteElement } = useCopyAndPasteElement()\n const { enterScreening } = useScreening()\n const { updateSlideIndex } = useSlideHandler()\n\n // 点击画布的空白区域:清空焦点元素、设置画布焦点、清除文字选区\n const handleClickBlankArea = (e: MouseEvent) => {\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n if (!ctrlOrShiftKeyActive.value) updateMouseSelection(e)\n if (!editorAreaFocus.value) store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n removeAllRanges()\n }\n\n // 移除画布编辑区域焦点\n const removeEditorAreaFocus = () => {\n if (editorAreaFocus.value) store.commit(MutationTypes.SET_EDITORAREA_FOCUS, false)\n }\n\n // 滚动鼠标\n const { scaleCanvas } = useScaleCanvas()\n const throttleScaleCanvas = throttle(scaleCanvas, 100, { leading: true, trailing: false })\n const throttleUpdateSlideIndex = throttle(updateSlideIndex, 300, { leading: true, trailing: false })\n\n const handleMousewheelCanvas = (e: WheelEvent) => {\n e.preventDefault()\n\n // 按住Ctrl键时:缩放画布\n if (ctrlKeyState.value) {\n if (e.deltaY > 0) throttleScaleCanvas('-')\n else if (e.deltaY < 0) throttleScaleCanvas('+')\n }\n // 上下翻页\n else {\n if (e.deltaY > 0) throttleUpdateSlideIndex(KEYS.DOWN)\n else if (e.deltaY < 0) throttleUpdateSlideIndex(KEYS.UP)\n }\n }\n\n // 开关网格线\n const showGridLines = computed(() => store.state.showGridLines)\n const toggleGridLines = () => {\n store.commit(MutationTypes.SET_GRID_LINES_STATE, !showGridLines.value)\n }\n\n // 在鼠标绘制的范围插入元素\n const creatingElement = computed(() => store.state.creatingElement)\n const { insertElementFromCreateSelection } = useInsertFromCreateSelection(viewportRef)\n\n const contextmenus = (): ContextmenuItem[] => {\n return [\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteElement,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllElement,\n },\n {\n text: '网格线',\n subText: showGridLines.value ? '√' : '',\n handler: toggleGridLines,\n },\n {\n text: '重置当前页',\n handler: deleteAllElements,\n },\n { divider: true },\n {\n text: '从当前页演示',\n subText: 'Ctrl+F',\n handler: enterScreening,\n },\n ]\n }\n\n provide('slideScale', canvasScale)\n\n return {\n elementList,\n activeElementIdList,\n handleElementId,\n activeGroupElementId,\n canvasRef,\n viewportRef,\n viewportStyles,\n canvasScale,\n mouseSelectionState,\n currentSlide,\n creatingElement,\n alignmentLines,\n linkDialogVisible,\n openLinkDialog,\n handleClickBlankArea,\n removeEditorAreaFocus,\n insertElementFromCreateSelection,\n selectElement,\n rotateElement,\n scaleElement,\n dragLineElement,\n scaleMultiElement,\n handleMousewheelCanvas,\n contextmenus,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=4edd93c1&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=4edd93c1&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4edd93c1\"\n\nexport default script","\n\n\n\n","\n\n\n\n","export interface ShapePoolItem {\n viewBox: number;\n path: string;\n special?: boolean;\n}\n\nexport const SHAPE_LIST = [\n {\n type: '矩形',\n children: [\n {\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 20 0 L 180 0 Q 200 0 200 20 L 200 180 Q 200 200 180 200 L 20 200 Q 0 200 0 180 L 0 20 Q 0 0 20 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 L 0 150 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 L 0 200'\n },\n {\n viewBox: 200,\n path: 'M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 L 0 50 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 60 200 Q 0 200 0 140 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 0 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 50 Q 0 0 50 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 50 Z'\n },\n ]\n },\n\n {\n type: '常用形状',\n children: [\n {\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z',\n },\n {\n viewBox: 200,\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 100 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 200 0 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 200 L 200 200 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 90 L 50 200 L 150 200 L 200 90 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 60 L 0 140 L 100 200 L 200 140 L 200 60 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 60 0 L 140 0 L 200 60 L 200 140 L 140 200 L 60 200 L 0 140 L 0 60 L 60 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 75 0 L 125 0 L 175 25 L 200 75 L 200 125 L 175 175 L 125 200 L 75 200 L 25 175 L 0 125 L 0 75 L 25 25 L 75 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 50 L 0 200 L 200 200 L 200 50 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 150 0 A 50 100 0 1 1 150 200 L 0 200 L 0 0 L 150 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 150 0 A 50 100 0 1 1 150 200 L 0 200 A 50 100 0 0 0 0 0 L 150 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 150 0 L 0 0 L 50 100 L 0 200 L 150 200 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 50 0 L 150 0 L 150 50 L 200 50 L 200 150 L 150 150 L 150 200 L 50 200 L 50 150 L 0 150 L 0 50 L 50 50 L 50 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 L 200 140 L 60 140 L 60 0 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z'\n },\n {\n viewBox: 200,\n path: 'M0 100 A100 100 0 1 1 0 101 Z M150 100 A50 50 0 1 0 150 101 Z'\n },\n {\n viewBox: 200,\n path: 'M 70 0 L 70 70 L 0 70 L 0 130 L 70 130 L 70 200 L 130 200 L 130 130 L 200 130 L 200 70 L 130 70 L 130 0 L 70 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 40 0 L 0 40 L 60 100 L 0 160 L 40 200 L 100 140 L 160 200 L 200 160 L 140 100 L 200 40 L 160 0 L 100 60 L 40 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 40 Q 0 0 40 0 L 160 0 Q 200 0 200 40 L 200 120 Q 200 160 160 160 L 100 160 L 60 200 L 60 160 L 40 160 Q 0 160 0 120 L 0 40 Z'\n },\n {\n viewBox: 200,\n path: 'M 180 160 A 100 100 0 1 0 100 200 L 200 200 L 200 160 L 180 160 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z',\n },\n {\n viewBox: 200,\n path: 'M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z',\n },\n ],\n },\n \n {\n type: '箭头',\n children: [\n {\n viewBox: 200,\n path: 'M 100 0 L 0 100 L 50 100 L 50 200 L 150 200 L 150 100 L 200 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 200 L 200 100 L 150 100 L 150 0 L 50 0 L 50 100 L 0 100 L 100 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 100 0 L 100 50 L 200 50 L 200 150 L 100 150 L 100 200 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 100 0 L 100 50 L 0 50 L 0 150 L 100 150 L 100 200 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 60 L 60 60 L 60 140 L 0 140 L 100 200 L 200 140 L 140 140 L 140 60 L 200 60 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 60 0 L 60 60 L 140 60 L 140 0 L 200 100 L 140 200 L 140 140 L 60 140 L 60 200 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 60 40 L 80 40 L 80 80 L 40 80 L 40 60 L 0 100 L 40 140 L 40 120 L 80 120 L 80 160 L 60 160 L 100 200 L 140 160 L 120 160 L 120 120 L 160 120 L 160 140 L 200 100 L 160 60 L 160 80 L 120 80 L 120 40 L 140 40 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 100 0 L 100 50 L 200 50 L 150 100 L 200 150 L 100 150 L 100 200 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 100 0 L 100 50 L 0 50 L 50 100 L 0 150 L 100 150 L 100 200 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 80 20 L 80 80 L 120 80 L 120 0 L 200 0 L 200 200 L 120 200 L 120 120 L 80 120 L 80 180 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 120 20 L 120 80 L 80 80 L 80 0 L 0 0 L 0 200 L 80 200 L 80 120 L 120 120 L 120 180 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 120 0 L 200 100 L 120 200 L 0 200 L 80 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 80 0 L 200 0 L 120 100 L 200 200 L 80 200 L 0 100 L 80 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 140 0 L 200 100 L 140 200 L 0 200 L 0 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 60 0 L 200 0 L 200 100 L 200 200 L 60 200 L 0 100 L 60 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 80 0 L 200 100 L 80 200 L 0 200 L 120 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 120 0 L 0 100 L 120 200 L 200 200 L 80 100 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 L 180 200 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 160 L 0 160 L 0 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 L 0 20 L 160 20 L 160 0 L 200 40 L 160 80 L 160 60 L 40 60 L 40 200 L 0 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 40 180 L 180 180 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 140 L 40 140 L 40 120 L 0 160 L 40 200 L 40 180 Z'\n },\n {\n viewBox: 1024,\n path: 'M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z',\n special: true,\n },\n ],\n },\n\n {\n type: '其他形状',\n children: [\n {\n viewBox: 1024,\n path: 'M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z',\n special: true,\n },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { SHAPE_LIST, ShapePoolItem } from '@/configs/shapes'\n\nexport default defineComponent({\n name: 'shape-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const shapeList = SHAPE_LIST\n\n const selectShape = (shape: ShapePoolItem) => {\n emit('select', shape)\n }\n\n return {\n shapeList,\n selectShape,\n }\n },\n})\n","import { render } from \"./ShapePool.vue?vue&type=template&id=612b80ef&scoped=true\"\nimport script from \"./ShapePool.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapePool.vue?vue&type=script&lang=ts\"\n\nimport \"./ShapePool.vue?vue&type=style&index=0&id=612b80ef&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-612b80ef\"\n\nexport default script","\n\n\n\n","import { LinePoint } from '@/types/slides'\n\n\nexport interface LinePoolItem {\n path: string;\n style: 'solid' | 'dashed';\n points: [LinePoint, LinePoint];\n isBroken?: boolean;\n isCurve?: boolean;\n}\n\ninterface PresetLine {\n type: string;\n children: LinePoolItem[];\n}\n\nexport const LINE_LIST: PresetLine[] = [\n {\n type: '直线',\n children: [\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'dot'] },\n ],\n },\n {\n type: '折线、曲线',\n children: [\n { path: 'M 0 0 L 0 20 L 20 20', style: 'solid', points: ['', 'arrow'], isBroken: true },\n { path: 'M 0 0 Q 0 20 20 20', style: 'solid', points: ['', 'arrow'], isCurve: true },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { LINE_LIST, LinePoolItem } from '@/configs/lines'\n\nimport LinePointMarker from '@/views/components/element/LineElement/LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'line-pool',\n emits: ['select'],\n components: {\n LinePointMarker,\n },\n setup(props, { emit }) {\n const lineList = LINE_LIST\n\n const selectLine = (line: LinePoolItem) => {\n emit('select', line)\n }\n\n return {\n lineList,\n selectLine,\n }\n },\n})\n","import { render } from \"./LinePool.vue?vue&type=template&id=6302e570&scoped=true\"\nimport script from \"./LinePool.vue?vue&type=script&lang=ts\"\nexport * from \"./LinePool.vue?vue&type=script&lang=ts\"\n\nimport \"./LinePool.vue?vue&type=style&index=0&id=6302e570&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6302e570\"\n\nexport default script","\n\n\n\n","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'chart-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const chartList = ['bar', 'line', 'pie']\n\n const selectChart = (chart: string) => {\n emit('select', chart)\n }\n\n return {\n chartList,\n selectChart,\n }\n },\n})\n","import { render } from \"./ChartPool.vue?vue&type=template&id=ab6a141a&scoped=true\"\nimport script from \"./ChartPool.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartPool.vue?vue&type=script&lang=ts\"\n\nimport \"./ChartPool.vue?vue&type=style&index=0&id=ab6a141a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ab6a141a\"\n\nexport default script","\n\n\n\n","\nimport { defineComponent, ref } from 'vue'\n\nimport { message } from 'ant-design-vue'\n\nexport default defineComponent({\n name: 'table-generator',\n emits: ['insert', 'close'],\n setup(props, { emit }) {\n const endCell = ref([])\n const customRow = ref(3)\n const customCol = ref(3)\n const isCustom = ref(false)\n\n const handleClickTable = () => {\n if (!endCell.value.length) return\n const [row, col] = endCell.value\n emit('insert', { row, col })\n }\n\n const insertCustomTable = () => {\n if (customRow.value < 1 || customRow.value > 20) return message.warning('行数/列数必须在0~20之间!')\n if (customCol.value < 1 || customCol.value > 20) return message.warning('行数/列数必须在0~20之间!')\n emit('insert', { row: customRow.value, col: customCol.value })\n isCustom.value = false\n }\n\n const close = () => {\n emit('close')\n isCustom.value = false\n }\n\n return {\n endCell,\n customRow,\n customCol,\n handleClickTable,\n insertCustomTable,\n isCustom,\n close,\n }\n },\n})\n","import { render } from \"./TableGenerator.vue?vue&type=template&id=e325ce98&scoped=true\"\nimport script from \"./TableGenerator.vue?vue&type=script&lang=ts\"\nexport * from \"./TableGenerator.vue?vue&type=script&lang=ts\"\n\nimport \"./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-e325ce98\"\n\nexport default script","\nimport { defineComponent, computed, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport { ShapePoolItem } from '@/configs/shapes'\nimport { LinePoolItem } from '@/configs/lines'\nimport useScaleCanvas from '@/hooks/useScaleCanvas'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nimport ShapePool from './ShapePool.vue'\nimport LinePool from './LinePool.vue'\nimport ChartPool from './ChartPool.vue'\nimport TableGenerator from './TableGenerator.vue'\n\nexport default defineComponent({\n name: 'canvas-tool',\n components: {\n ShapePool,\n LinePool,\n ChartPool,\n TableGenerator,\n },\n setup() {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const canUndo = computed(() => store.getters.canUndo)\n const canRedo = computed(() => store.getters.canRedo)\n\n const canvasScalePercentage = computed(() => parseInt(canvasScale.value * 100 + '') + '%')\n\n const { scaleCanvas, setCanvasPercentage } = useScaleCanvas()\n const { redo, undo } = useHistorySnapshot()\n\n const { createImageElement, createChartElement, createTableElement } = useCreateElement()\n\n const insertImageElement = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n\n const shapePoolVisible = ref(false)\n const linePoolVisible = ref(false)\n const chartPoolVisible = ref(false)\n const tableGeneratorVisible = ref(false)\n\n // 绘制文字范围\n const drawText = () => {\n store.commit(MutationTypes.SET_CREATING_ELEMENT, {\n type: 'text',\n data: null,\n })\n }\n\n // 绘制形状范围\n const drawShape = (shape: ShapePoolItem) => {\n store.commit(MutationTypes.SET_CREATING_ELEMENT, {\n type: 'shape',\n data: shape,\n })\n shapePoolVisible.value = false\n }\n\n // 绘制线条路径\n const drawLine = (line: LinePoolItem) => {\n store.commit(MutationTypes.SET_CREATING_ELEMENT, {\n type: 'line',\n data: line,\n })\n linePoolVisible.value = false\n }\n\n return {\n scaleCanvas,\n setCanvasPercentage,\n canvasScalePercentage,\n canUndo,\n canRedo,\n redo,\n undo,\n insertImageElement,\n shapePoolVisible,\n linePoolVisible,\n chartPoolVisible,\n tableGeneratorVisible,\n drawText,\n drawShape,\n drawLine,\n createChartElement,\n createTableElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=59ae6536&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=59ae6536&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-59ae6536\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\n\n","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTImageElement } from '@/types/slides'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useClipImage from './useClipImage'\nimport useFilter from './useFilter'\n\nimport ImageOutline from './ImageOutline/index.vue'\n\nexport default defineComponent({\n name: 'base-element-image',\n components: {\n ImageOutline,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n \n const clip = computed(() => props.elementInfo.clip)\n const { clipShape, imgPosition } = useClipImage(clip)\n\n const filters = computed(() => props.elementInfo.filters)\n const { filter } = useFilter(filters)\n\n return {\n imgPosition,\n filter,\n flipStyle,\n shadowStyle,\n clipShape,\n }\n },\n})\n","import { render } from \"./BaseImageElement.vue?vue&type=template&id=b0d4d1b2&scoped=true\"\nimport script from \"./BaseImageElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseImageElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseImageElement.vue?vue&type=style&index=0&id=b0d4d1b2&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-b0d4d1b2\"\n\nexport default script","\n\n\n\n\n","\nimport { defineComponent, PropType, computed } from 'vue'\nimport { PPTTextElement } from '@/types/slides'\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\n\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nexport default defineComponent({\n name: 'base-element-text',\n components: {\n ElementOutline,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n return {\n shadowStyle,\n }\n },\n})\n","import { render } from \"./BaseTextElement.vue?vue&type=template&id=2ec235c4&scoped=true\"\nimport script from \"./BaseTextElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseTextElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseTextElement.vue?vue&type=style&index=0&id=2ec235c4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2ec235c4\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\n\nimport GradientDefs from './GradientDefs.vue'\n\nexport default defineComponent({\n name: 'base-element-shape',\n components: {\n GradientDefs,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n text,\n }\n },\n})\n","import { render } from \"./BaseShapeElement.vue?vue&type=template&id=3ad164fa&scoped=true\"\nimport script from \"./BaseShapeElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseShapeElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseShapeElement.vue?vue&type=style&index=0&id=3ad164fa&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3ad164fa\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10, 5' : '0, 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./BaseLineElement.vue?vue&type=template&id=448a7ca0&scoped=true\"\nimport script from \"./BaseLineElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseLineElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseLineElement.vue?vue&type=style&index=0&id=448a7ca0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-448a7ca0\"\n\nexport default script","\r\n\r\n\r\n\r\n\r\n","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\n\r\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\r\n\r\nexport default defineComponent({\r\n name: 'base-element-chart',\r\n components: {\r\n ElementOutline,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const size = computed(() => Math.min(props.elementInfo.width, props.elementInfo.height))\r\n\r\n const chartType = computed(() => {\r\n const _chartType = props.elementInfo.chartType\r\n const _options = props.elementInfo.options\r\n\r\n if (_chartType === 'bar') {\r\n if (_options?.horizontalBars) return 'horizontalBar'\r\n return 'bar'\r\n }\r\n else if (_chartType === 'line') {\r\n if (_options?.showArea) return 'area'\r\n else if (_options && _options.showLine === false) return 'scatter'\r\n return 'line'\r\n }\r\n else if (_chartType === 'pie') {\r\n if (_options?.donut) return 'ring'\r\n return 'pie'\r\n }\r\n\r\n return ''\r\n })\r\n\r\n return {\r\n size,\r\n chartType,\r\n }\r\n },\r\n})\r\n","import { render } from \"./BaseChartElement.vue?vue&type=template&id=2d25f60a&scoped=true\"\nimport script from \"./BaseChartElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseChartElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseChartElement.vue?vue&type=style&index=0&id=2d25f60a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2d25f60a\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nexport default defineComponent({\n name: 'static-table',\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props) {\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n return {\n colSizeList,\n totalWidth,\n hideCells,\n getTextStyle,\n formatText,\n subThemeColor,\n }\n },\n})\n","import { render } from \"./StaticTable.vue?vue&type=template&id=ccbfe89e&scoped=true\"\nimport script from \"./StaticTable.vue?vue&type=script&lang=ts\"\nexport * from \"./StaticTable.vue?vue&type=script&lang=ts\"\n\nimport \"./StaticTable.vue?vue&type=style&index=0&id=ccbfe89e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ccbfe89e\"\n\nexport default script","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTTableElement } from '@/types/slides'\n\nimport StaticTable from './StaticTable.vue'\n\nexport default defineComponent({\n name: 'base-element-table',\n components: {\n StaticTable,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./BaseTableElement.vue?vue&type=template&id=dea016ac&scoped=true\"\nimport script from \"./BaseTableElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseTableElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseTableElement.vue?vue&type=style&index=0&id=dea016ac&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-dea016ac\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { ElementTypes, PPTElement } from '@/types/slides'\n\nimport BaseImageElement from '@/views/components/element/ImageElement/BaseImageElement.vue'\nimport BaseTextElement from '@/views/components/element/TextElement/BaseTextElement.vue'\nimport BaseShapeElement from '@/views/components/element/ShapeElement/BaseShapeElement.vue'\nimport BaseLineElement from '@/views/components/element/LineElement/BaseLineElement.vue'\nimport BaseChartElement from '@/views/components/element/ChartElement/BaseChartElement.vue'\nimport BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue'\n\nexport default defineComponent({\n name: 'base-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: BaseImageElement,\n [ElementTypes.TEXT]: BaseTextElement,\n [ElementTypes.SHAPE]: BaseShapeElement,\n [ElementTypes.LINE]: BaseLineElement,\n [ElementTypes.CHART]: BaseChartElement,\n [ElementTypes.TABLE]: BaseTableElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n return {\n currentElementComponent,\n }\n },\n})\n","import { render } from \"./ThumbnailElement.vue?vue&type=template&id=61cf450e\"\nimport script from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'\n\nimport ThumbnailElement from './ThumbnailElement.vue'\n\nexport default defineComponent({\n name: 'thumbnail-slide',\n components: {\n ThumbnailElement,\n },\n props: {\n slide: {\n type: Object as PropType,\n required: true,\n },\n size: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n const scale = computed(() => props.size / VIEWPORT_SIZE)\n\n return {\n scale,\n backgroundStyle,\n VIEWPORT_SIZE,\n viewportRatio,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=4e59015e&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=4e59015e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4e59015e\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { Slide } from '@/types/slides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'layout-pool',\n emits: ['select'],\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const store = useStore()\n const layouts = computed(() => store.getters.layouts)\n\n const selectSlideTemplate = (slide: Slide) => {\n emit('select', slide)\n }\n\n return {\n layouts,\n selectSlideTemplate,\n }\n },\n})\n","import { render } from \"./LayoutPool.vue?vue&type=template&id=775c4b6c&scoped=true\"\nimport script from \"./LayoutPool.vue?vue&type=script&lang=ts\"\nexport * from \"./LayoutPool.vue?vue&type=script&lang=ts\"\n\nimport \"./LayoutPool.vue?vue&type=style&index=0&id=775c4b6c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-775c4b6c\"\n\nexport default script","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { fillDigit } from '@/utils/common'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useScreening from '@/hooks/useScreening'\n\nimport Draggable from 'vuedraggable'\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\nimport LayoutPool from './LayoutPool.vue'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n Draggable,\n ThumbnailSlide,\n LayoutPool,\n },\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const slideIndex = computed(() => store.state.slideIndex)\n const ctrlKeyState = computed(() => store.state.ctrlKeyState)\n const shiftKeyState = computed(() => store.state.shiftKeyState)\n const selectedSlidesIndex = computed(() => [...store.state.selectedSlidesIndex, slideIndex.value])\n\n const presetLayoutPopoverVisible = ref(false)\n\n const {\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n } = useSlideHandler()\n\n // 切换页面\n const changSlideIndex = (index: number) => {\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n\n if (slideIndex.value === index) return\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, index)\n }\n\n // 点击缩略图\n const handleClickSlideThumbnail = (e: MouseEvent, index: number) => {\n const isMultiSelected = selectedSlidesIndex.value.length > 1\n\n if (isMultiSelected && selectedSlidesIndex.value.includes(index) && e.button !== 0) return\n\n // 按住Ctrl键,点选幻灯片,再次点击已选中的页面则取消选中\n if (ctrlKeyState.value) {\n if (slideIndex.value === index) {\n if (!isMultiSelected) return\n\n const newSelectedSlidesIndex = selectedSlidesIndex.value.filter(item => item !== index)\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n changSlideIndex(selectedSlidesIndex.value[0])\n }\n else {\n if (selectedSlidesIndex.value.includes(index)) {\n const newSelectedSlidesIndex = selectedSlidesIndex.value.filter(item => item !== index)\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n }\n else {\n const newSelectedSlidesIndex = [...selectedSlidesIndex.value, index]\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n changSlideIndex(index)\n }\n }\n }\n // 按住Shift键,选择范围内的全部幻灯片\n else if (shiftKeyState.value) {\n if (slideIndex.value === index && !isMultiSelected) return\n\n let minIndex = Math.min(...selectedSlidesIndex.value)\n let maxIndex = index\n\n if (index < minIndex) {\n maxIndex = Math.max(...selectedSlidesIndex.value)\n minIndex = index\n }\n\n const newSelectedSlidesIndex = []\n for (let i = minIndex; i <= maxIndex; i++) newSelectedSlidesIndex.push(i)\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n changSlideIndex(index)\n }\n // 正常切换页面\n else {\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, [])\n changSlideIndex(index)\n }\n }\n\n const thumbnailsFocus = computed(() => store.state.thumbnailsFocus)\n\n // 设置缩略图工具栏聚焦状态(只有聚焦状态下,该部分的快捷键才能生效)\n const setThumbnailsFocus = (focus: boolean) => {\n if (thumbnailsFocus.value === focus) return\n store.commit(MutationTypes.SET_THUMBNAILS_FOCUS, focus)\n\n if (!focus) store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, [])\n }\n\n // 拖拽调整顺序后进行数据的同步\n const handleDragEnd = (eventData: { newIndex: number; oldIndex: number }) => {\n const { newIndex, oldIndex } = eventData\n if (oldIndex === newIndex) return\n\n const _slides = JSON.parse(JSON.stringify(slides.value))\n const _slide = _slides[oldIndex]\n _slides.splice(oldIndex, 1)\n _slides.splice(newIndex, 0, _slide)\n store.commit(MutationTypes.SET_SLIDES, _slides)\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, newIndex)\n }\n\n const { enterScreening } = useScreening()\n\n const contextmenusThumbnails = (): ContextmenuItem[] => {\n return [\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '开始演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n const contextmenusThumbnailItem = (): ContextmenuItem[] => {\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutSlide,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copySlide,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n { divider: true },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '复制页面',\n subText: 'Ctrl + D',\n handler: copyAndPasteSlide,\n },\n {\n text: '删除页面',\n subText: 'Delete',\n handler: () => deleteSlide(),\n },\n { divider: true },\n {\n text: '从当前页演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n return {\n slides,\n slideIndex,\n selectedSlidesIndex,\n presetLayoutPopoverVisible,\n createSlide,\n createSlideByTemplate,\n setThumbnailsFocus,\n handleClickSlideThumbnail,\n contextmenusThumbnails,\n contextmenusThumbnailItem,\n fillDigit,\n handleDragEnd,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=38044c5a&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=38044c5a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-38044c5a\"\n\nexport default script","\n\n\n\n","export type ToolbarState = 'symbol' | 'elAnimation' | 'elStyle' | 'elPosition' | 'slideDesign' | 'slideAnimation' | 'multiPosition'\n\nexport const ToolbarStates = {\n SYMBOL: 'symbol',\n EL_ANIMATION: 'elAnimation',\n EL_STYLE: 'elStyle',\n EL_POSITION: 'elPosition',\n SLIDE_DESIGN: 'slideDesign',\n SLIDE_ANIMATION: 'slideAnimation',\n MULTI_POSITION: 'multiPosition',\n}","\n\n","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-opacity',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const opacity = ref()\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n opacity.value = 'opacity' in handleElement.value && handleElement.value.opacity !== undefined ? handleElement.value.opacity : 1\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateOpacity = (value: number) => {\n const props = { opacity: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n opacity,\n updateOpacity,\n }\n },\n})\n","import { render } from \"./ElementOpacity.vue?vue&type=template&id=b884607e&scoped=true\"\nimport script from \"./ElementOpacity.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementOpacity.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementOpacity.vue?vue&type=style&index=0&id=b884607e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-b884607e\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nexport default {\n name: 'color-button',\n props: {\n color: {\n type: String,\n required: true,\n },\n },\n}\n","import { render } from \"./ColorButton.vue?vue&type=template&id=39016b60&scoped=true\"\nimport script from \"./ColorButton.vue?vue&type=script&lang=ts\"\nexport * from \"./ColorButton.vue?vue&type=script&lang=ts\"\n\nimport \"./ColorButton.vue?vue&type=style&index=0&id=39016b60&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-39016b60\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTElementOutline } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './ColorButton.vue'\n\nexport default defineComponent({\n name: 'element-outline',\n components: {\n ColorButton,\n },\n props: {\n fixed: {\n type: Boolean,\n default: false,\n },\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const outline = ref()\n const hasOutline = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n outline.value = 'outline' in handleElement.value ? handleElement.value.outline : undefined\n hasOutline.value = !!outline.value\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateOutline = (outlineProps: Partial) => {\n const props = { outline: { ...outline.value, ...outlineProps } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const toggleOutline = (checked: boolean) => {\n if (checked) {\n const props = { outline: { width: 2, color: '#000', style: 'solid' } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n else {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.value.id, propName: 'outline' })\n }\n addHistorySnapshot()\n }\n\n return {\n outline,\n hasOutline,\n toggleOutline,\n updateOutline,\n }\n },\n})\n","import { render } from \"./ElementOutline.vue?vue&type=template&id=2d8ce9c0&scoped=true\"\nimport script from \"./ElementOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementOutline.vue?vue&type=style&index=0&id=2d8ce9c0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2d8ce9c0\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTElementShadow } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './ColorButton.vue'\n\nexport default defineComponent({\n name: 'element-shadow',\n components: {\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const shadow = ref()\n const hasShadow = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n shadow.value = 'shadow' in handleElement.value ? handleElement.value.shadow : undefined\n hasShadow.value = !!shadow.value\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateShadow = (shadowProps: Partial) => {\n const props = { shadow: { ...shadow.value, ...shadowProps } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const toggleShadow = (checked: boolean) => {\n if (checked) {\n const props = { shadow: { h: 1, v: 1, blur: 2, color: '#000' } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n else {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.value.id, propName: 'shadow' })\n }\n addHistorySnapshot()\n }\n\n return {\n shadow,\n hasShadow,\n toggleShadow,\n updateShadow,\n }\n },\n})\n","import { render } from \"./ElementShadow.vue?vue&type=template&id=5cca6474&scoped=true\"\nimport script from \"./ElementShadow.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementShadow.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementShadow.vue?vue&type=style&index=0&id=5cca6474&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5cca6474\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\n\nconst presetStyles = [\n {\n label: '大标题',\n style: {\n fontSize: '26px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '48px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '小标题',\n style: {\n fontSize: '22px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '36px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '正文',\n style: {\n fontSize: '20px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '20px' },\n ],\n },\n {\n label: '正文[小]',\n style: {\n fontSize: '18px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '18px' },\n ],\n },\n {\n label: '注释 1',\n style: {\n fontSize: '16px',\n fontStyle: 'italic',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'em' },\n ],\n },\n {\n label: '注释 2',\n style: {\n fontSize: '16px',\n textDecoration: 'underline',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'underline' },\n ],\n },\n]\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'text-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const richTextAttrs = computed(() => store.state.richTextAttrs)\n\n const fill = ref()\n const lineHeight = ref()\n const wordSpace = ref()\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'text') return\n\n fill.value = handleElement.value.fill || '#000'\n lineHeight.value = handleElement.value.lineHeight || 1.5\n wordSpace.value = handleElement.value.wordSpace || 0\n }, { deep: true, immediate: true })\n\n const availableFonts = computed(() => store.state.availableFonts)\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n '36px', '40px', '44px', '48px', '54px', '60px', '66px', '72px', '76px',\n '80px', '88px', '96px', '104px', '112px', '120px',\n ]\n const lineHeightOptions = [0.9, 1.0, 1.15, 1.2, 1.4, 1.5, 1.8, 2.0, 2.5, 3.0]\n const wordSpaceOptions = [0, 1, 2, 3, 4, 5, 6, 8, 10]\n\n // 发射富文本设置命令\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n // 发射富文本设置命令(批量)\n const emitBatchRichTextCommand = (payload: RichTextCommand[]) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, payload)\n }\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置行高\n const updateLineHeight = (value: number) => {\n const props = { lineHeight: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置字间距\n const updateWordSpace = (value: number) => {\n const props = { wordSpace: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置文本框填充\n const updateFill = (value: string) => {\n const props = { fill: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n fill,\n lineHeight,\n wordSpace,\n richTextAttrs,\n availableFonts,\n webFonts,\n fontSizeOptions,\n lineHeightOptions,\n wordSpaceOptions,\n updateLineHeight,\n updateWordSpace,\n updateFill,\n emitRichTextCommand,\n emitBatchRichTextCommand,\n presetStyles,\n }\n },\n})\n","import { render } from \"./TextStylePanel.vue?vue&type=template&id=ee8b653e&scoped=true\"\nimport script from \"./TextStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./TextStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./TextStylePanel.vue?vue&type=style&index=0&id=ee8b653e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ee8b653e\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTImageElement, PPTShapeElement, ImageOrShapeFlip } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-flip',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const flipH = ref(false)\n const flipV = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value || !['image', 'shape'].includes(handleElement.value.type)) return\n\n flipH.value = !!handleElement.value.flipH\n flipV.value = !!handleElement.value.flipV\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateFlip = (flipProps: ImageOrShapeFlip) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props: flipProps })\n addHistorySnapshot()\n }\n\n return {\n flipH,\n flipV,\n updateFlip,\n }\n },\n})\n","import { render } from \"./ElementFlip.vue?vue&type=template&id=6b6342c9&scoped=true\"\nimport script from \"./ElementFlip.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementFlip.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementFlip.vue?vue&type=style&index=0&id=6b6342c9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6b6342c9\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTImageElement, Slide } from '@/types/slides'\nimport { CLIPPATHS } from '@/configs/imageClip'\nimport { getImageDataURL } from '@/utils/image'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ElementFlip from '../common/ElementFlip.vue'\n\ninterface FilterOption {\n label: string;\n key: string;\n default: number;\n value: number;\n unit: string;\n max: number;\n step: number;\n}\n\nconst defaultFilters: FilterOption[] = [\n { label: '模糊', key: 'blur', default: 0, value: 0, unit: 'px', max: 10, step: 1 },\n { label: '亮度', key: 'brightness', default: 100, value: 100, unit: '%', max: 200, step: 5 },\n { label: '对比度', key: 'contrast', default: 100, value: 100, unit: '%', max: 200, step: 5 },\n { label: '灰度', key: 'grayscale', default: 0, value: 0, unit: '%', max: 100, step: 5 },\n { label: '饱和度', key: 'saturate', default: 100, value: 100, unit: '%', max: 200, step: 5 },\n { label: '色相', key: 'hue-rotate', default: 0, value: 0, unit: 'deg', max: 360, step: 10 },\n { label: '不透明度', key: 'opacity', default: 100, value: 100, unit: '%', max: 100, step: 5 },\n]\n\nconst shapeClipPathOptions = CLIPPATHS\nconst ratioClipOptions = [\n {\n label: '纵横比(方形)',\n children: [\n { key: '1:1', ratio: 1 / 1 },\n ],\n },\n {\n label: '纵横比(纵向)',\n children: [\n { key: '2:3', ratio: 3 / 2 },\n { key: '3:4', ratio: 4 / 3 },\n { key: '3:5', ratio: 5 / 3 },\n { key: '4:5', ratio: 5 / 4 },\n ],\n },\n {\n label: '纵横比(横向)',\n children: [\n { key: '3:2', ratio: 2 / 3 },\n { key: '4:3', ratio: 3 / 4 },\n { key: '5:3', ratio: 3 / 5 },\n { key: '5:4', ratio: 4 / 5 },\n ],\n },\n {\n children: [\n { key: '16:9', ratio: 9 / 16 },\n { key: '16:10', ratio: 10 / 16 },\n ],\n },\n]\n\nexport default defineComponent({\n name: 'image-style-panel',\n components: {\n ElementOutline,\n ElementShadow,\n ElementFlip,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const clipPanelVisible = ref(false)\n\n const filterOptions = ref(JSON.parse(JSON.stringify(defaultFilters)))\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'image') return\n \n const filters = handleElement.value.filters\n if (filters) {\n filterOptions.value = defaultFilters.map(item => {\n if (filters[item.key] !== undefined) return { ...item, value: parseInt(filters[item.key]) }\n return item\n })\n }\n else filterOptions.value = JSON.parse(JSON.stringify(defaultFilters))\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置滤镜\n const updateFilter = (filter: FilterOption, value: number) => {\n const originFilters = handleElement.value.filters || {}\n const filters = { ...originFilters, [filter.key]: `${value}${filter.unit}` }\n const props = { filters }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 打开自由裁剪\n const clipImage = () => {\n store.commit(MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID, handleElement.value.id)\n clipPanelVisible.value = false\n }\n\n // 获取原始图片的位置大小\n const getImageElementDataBeforeClip = () => {\n\n // 图片当前的位置大小和裁剪范围\n const imgWidth = handleElement.value.width\n const imgHeight = handleElement.value.height\n const imgLeft = handleElement.value.left\n const imgTop = handleElement.value.top\n const originClipRange = handleElement.value.clip ? handleElement.value.clip.range : [[0, 0], [100, 100]]\n\n const originWidth = imgWidth / ((originClipRange[1][0] - originClipRange[0][0]) / 100)\n const originHeight = imgHeight / ((originClipRange[1][1] - originClipRange[0][1]) / 100)\n const originLeft = imgLeft - originWidth * (originClipRange[0][0] / 100)\n const originTop = imgTop - originHeight * (originClipRange[0][1] / 100)\n\n return {\n originClipRange,\n originWidth,\n originHeight,\n originLeft,\n originTop,\n }\n }\n\n // 预设裁剪\n const presetImageClip = (shape: string, ratio = 0) => {\n const {\n originClipRange,\n originWidth,\n originHeight,\n originLeft,\n originTop,\n } = getImageElementDataBeforeClip()\n \n // 纵横比裁剪(形状固定为矩形)\n if (ratio) {\n const imageRatio = originHeight / originWidth\n\n const min = 0\n const max = 100\n let range\n\n if (imageRatio > ratio) {\n const distance = ((1 - ratio / imageRatio) / 2) * 100\n range = [[min, distance], [max, max - distance]]\n }\n else {\n const distance = ((1 - imageRatio / ratio) / 2) * 100\n range = [[distance, min], [max - distance, max]]\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: handleElement.value.id,\n props: {\n clip: { ...handleElement.value.clip, shape, range },\n left: originLeft + originWidth * (range[0][0] / 100),\n top: originTop + originHeight * (range[0][1] / 100),\n width: originWidth * (range[1][0] - range[0][0]) / 100,\n height: originHeight * (range[1][1] - range[0][1]) / 100,\n },\n })\n }\n // 形状裁剪(保持当前裁剪范围)\n else {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: handleElement.value.id,\n props: {\n clip: { ...handleElement.value.clip, shape, range: originClipRange }\n },\n })\n }\n clipImage()\n addHistorySnapshot()\n }\n\n // 替换图片(保持当前的样式)\n const replaceImage = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => {\n const props = { src: dataURL }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n })\n addHistorySnapshot()\n }\n\n // 重置图片:清除全部样式\n const resetImage = () => {\n if (handleElement.value.clip) {\n const {\n originWidth,\n originHeight,\n originLeft,\n originTop,\n } = getImageElementDataBeforeClip()\n\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: handleElement.value.id,\n props: {\n left: originLeft,\n top: originTop,\n width: originWidth,\n height: originHeight,\n },\n })\n }\n\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, {\n id: handleElement.value.id,\n propName: ['clip', 'outline', 'flip', 'shadow', 'filters'],\n })\n addHistorySnapshot()\n }\n\n // 将图片设置为背景\n const setBackgroundImage = () => {\n const background = {\n ...currentSlide.value.background,\n type: 'image',\n image: handleElement.value.src,\n imageSize: 'cover',\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background })\n addHistorySnapshot()\n }\n\n return {\n clipPanelVisible,\n shapeClipPathOptions,\n ratioClipOptions,\n filterOptions,\n handleElement,\n updateFilter,\n clipImage,\n presetImageClip,\n replaceImage,\n resetImage,\n setBackgroundImage,\n }\n },\n})\n","import { render } from \"./ImageStylePanel.vue?vue&type=template&id=6bffd840&scoped=true\"\nimport script from \"./ImageStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageStylePanel.vue?vue&type=style&index=0&id=6bffd840&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6bffd840\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTShapeElement, ShapeGradient, ShapeText } from '@/types/slides'\nimport { WEB_FONTS } from '@/configs/font'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ElementFlip from '../common/ElementFlip.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'shape-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n ElementFlip,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const editingShapeElementId = computed(() => store.state.editingShapeElementId)\n\n const showTextTools = computed(() => {\n return editingShapeElementId.value === handleElement.value.id\n })\n\n const fill = ref()\n const gradient = ref()\n const fillType = ref('fill')\n const textAlign = ref('middle')\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'shape') return\n fill.value = handleElement.value.fill || '#000'\n\n gradient.value = handleElement.value.gradient || { type: 'linear', rotate: 0, color: [fill.value, '#fff'] }\n\n fillType.value = handleElement.value.gradient ? 'gradient' : 'fill'\n\n textAlign.value = handleElement.value?.text?.align || 'middle'\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置填充类型:渐变、纯色\n const updateFillType = (type: 'gradient' | 'fill') => {\n if (type === 'fill') {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, {\n id: handleElement.value.id,\n propName: 'gradient',\n })\n }\n else {\n const props = { gradient: gradient.value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n addHistorySnapshot()\n }\n\n // 设置渐变填充\n const updateGradient = (gradientProps: Partial) => {\n const props = { gradient: { ...gradient.value, ...gradientProps } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n const props = { fill: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const updateTextAlign = (align: 'top' | 'middle' | 'bottom') => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n const _text = handleElement.value.text || defaultText\n const props = { text: { ..._text, align } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const richTextAttrs = computed(() => store.state.richTextAttrs)\n const availableFonts = computed(() => store.state.availableFonts)\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n '36px', '40px', '44px', '48px', '54px', '60px', '66px', '72px', '76px',\n '80px', '88px', '96px', '104px', '112px', '120px',\n ]\n\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n return {\n fill,\n gradient,\n fillType,\n textAlign,\n richTextAttrs,\n availableFonts,\n fontSizeOptions,\n webFonts,\n showTextTools,\n emitRichTextCommand,\n updateFillType,\n updateFill,\n updateGradient,\n updateTextAlign,\n }\n },\n})\n","import { render } from \"./ShapeStylePanel.vue?vue&type=template&id=a62499e8&scoped=true\"\nimport script from \"./ShapeStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapeStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ShapeStylePanel.vue?vue&type=style&index=0&id=a62499e8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a62499e8\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTLineElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nexport default defineComponent({\n name: 'line-style-panel',\n components: {\n ElementShadow,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateLine = (props: Partial) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n updateLine,\n }\n }\n})\n","import { render } from \"./LineStylePanel.vue?vue&type=template&id=65b24fb3&scoped=true\"\nimport script from \"./LineStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./LineStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./LineStylePanel.vue?vue&type=style&index=0&id=65b24fb3&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-65b24fb3\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref } from 'vue'\nimport { ChartData } from '@/types/slides'\nimport { KEYS } from '@/configs/hotkey'\n\nconst CELL_WIDTH = 100\nconst CELL_HEIGHT = 32\n\nexport default defineComponent({\n name: 'chart-data-editor',\n emits: ['save', 'close'],\n props: {\n data: {\n type: Object as PropType,\n required: true,\n }\n },\n setup(props, { emit }) {\n const selectedRange = ref([0, 0])\n const tempRangeSize = ref({ width: 0, height: 0 })\n const focusCell = ref<[number, number] | null>(null)\n\n // 当前选区的边框线条位置\n const rangeLines = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return [\n { type: 't', style: {width: width + 'px'} },\n { type: 'b', style: {top: height + 'px', width: width + 'px'} },\n { type: 'l', style: {height: height + 'px'} },\n { type: 'r', style: {left: width + 'px', height: height + 'px'} },\n ]\n })\n\n // 当前选区的缩放点位置\n const resizablePointStyle = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return { left: width + 'px', top: height + 'px' }\n })\n\n // 初始化图表数据:将数据格式化并填充到DOM\n const initData = () => {\n const _data: string[][] = []\n\n const { labels, series } = props.data\n const rowCount = labels.length\n const colCount = series.length\n\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row = [labels[rowIndex]]\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n row.push(series[colIndex][rowIndex] + '')\n }\n _data.push(row)\n }\n\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n for (let colIndex = 0; colIndex < colCount + 1; colIndex++) {\n const inputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = _data[rowIndex][colIndex] + ''\n }\n }\n\n selectedRange.value = [colCount + 1, rowCount]\n }\n\n onMounted(initData)\n\n // 快捷键监听:回车移动焦点到下一行\n const moveNextRow = () => {\n if (!focusCell.value) return\n\n const [rowIndex, colIndex] = focusCell.value\n const inputRef = document.querySelector(`#cell-${rowIndex + 1}-${colIndex}`) as HTMLInputElement\n inputRef && inputRef.focus()\n }\n\n const keyboardListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ENTER) moveNextRow()\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keyboardListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keyboardListener)\n })\n\n // 获取当前图表DOM中的数据,整理格式化后传递出去\n const getTableData = () => {\n const [col, row] = selectedRange.value\n\n const labels: string[] = []\n const series: number[][] = []\n\n // 第一列为系列名,实际数据从第二列开始\n for (let rowIndex = 0; rowIndex < row; rowIndex++) {\n let labelsItem = `类别${rowIndex + 1}`\n const labelInputRef = document.querySelector(`#cell-${rowIndex}-0`) as HTMLInputElement\n if (labelInputRef && labelInputRef.value) labelsItem = labelInputRef.value\n labels.push(labelsItem)\n }\n\n for (let colIndex = 1; colIndex < col; colIndex++) {\n const seriesItem = []\n for (let rowIndex = 0; rowIndex < row; rowIndex++) {\n const valueInputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n let value = 0\n if (valueInputRef && valueInputRef.value && !!(+valueInputRef.value)) {\n value = +valueInputRef.value\n }\n seriesItem.push(value)\n }\n series.push(seriesItem)\n }\n const data = { labels, series }\n emit('save', data)\n }\n\n // 关闭图表数据编辑器\n const closeEditor = () => emit('close')\n\n // 鼠标拖拽修改选中的数据范围\n const changeSelectRange = (e: MouseEvent) => {\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const originWidth = selectedRange.value[0] * CELL_WIDTH\n const originHeight = selectedRange.value[1] * CELL_HEIGHT\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = currentPageX - startPageX\n const y = currentPageY - startPageY\n\n const width = originWidth + x\n const height = originHeight + y\n\n tempRangeSize.value = { width, height }\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n const endPageX = e.pageX\n const endPageY = e.pageY\n\n if (startPageX === endPageX && startPageY === endPageY) return\n\n // 拖拽结束时,范围超过格子一半自动扩大到下一格(如拖动到一格半多的位置,会自动扩展到两格,横竖都同理)\n let width = tempRangeSize.value.width\n let height = tempRangeSize.value.height\n if (width % CELL_WIDTH > CELL_WIDTH * 0.5) width = width + (CELL_WIDTH - width % CELL_WIDTH)\n if (height % CELL_HEIGHT > CELL_HEIGHT * 0.5) height = height + (CELL_HEIGHT - height % CELL_HEIGHT)\n\n let row = Math.round(height / CELL_HEIGHT)\n let col = Math.round(width / CELL_WIDTH)\n\n if (row < 3) row = 3\n if (col < 2) col = 2\n\n selectedRange.value = [col, row]\n tempRangeSize.value = { width: 0, height: 0 }\n }\n }\n\n return {\n tempRangeSize,\n rangeLines,\n resizablePointStyle,\n selectedRange,\n focusCell,\n changeSelectRange,\n getTableData,\n closeEditor,\n }\n },\n})\n","import { render } from \"./ChartDataEditor.vue?vue&type=template&id=39c533c6&scoped=true\"\nimport script from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ChartDataEditor.vue?vue&type=style&index=0&id=39c533c6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-39c533c6\"\n\nexport default script","\nimport { computed, defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\nimport { MutationTypes, useStore } from '@/store'\nimport { ChartData, PPTChartElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '../../common/ElementOutline.vue'\nimport ColorButton from '../../common/ColorButton.vue'\nimport ChartDataEditor from './ChartDataEditor.vue'\n\nexport default defineComponent({\n name: 'chart-style-panel',\n components: {\n ElementOutline,\n ChartDataEditor,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const theme = computed(() => store.state.theme)\n\n const chartDataEditorVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const fill = ref()\n\n const themeColor = ref([])\n const gridColor = ref('')\n\n const lineSmooth = ref(true)\n const showLine = ref(true)\n const showArea = ref(false)\n const horizontalBars = ref(false)\n const donut = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'chart') return\n fill.value = handleElement.value.fill || '#000'\n\n if (handleElement.value.options) {\n const {\n lineSmooth: _lineSmooth,\n showLine: _showLine,\n showArea: _showArea,\n horizontalBars: _horizontalBars,\n donut: _donut,\n } = handleElement.value.options\n\n if (_lineSmooth !== undefined) lineSmooth.value = _lineSmooth as boolean\n if (_showLine !== undefined) showLine.value = _showLine\n if (_showArea !== undefined) showArea.value = _showArea\n if (_horizontalBars !== undefined) horizontalBars.value = _horizontalBars\n if (_donut !== undefined) donut.value = _donut\n }\n\n themeColor.value = handleElement.value.themeColor\n gridColor.value = handleElement.value.gridColor || 'rgba(0, 0, 0, 0.4)'\n }, { deep: true, immediate: true })\n\n // 设置图表数据\n const updateData = (data: ChartData) => {\n chartDataEditorVisible.value = false\n const props = { data }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n const props = { fill: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置其他选项:柱状图转条形图、折线图转面积图、折线图转散点图、饼图转环形图、折线图开关平滑曲线\n const updateOptions = (optionProps: ILineChartOptions & IBarChartOptions & IPieChartOptions) => {\n const options = handleElement.value.options || {}\n const newOptions = { ...options, ...optionProps }\n const props = { options: newOptions }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置主题色\n const updateTheme = (color: string, index: number) => {\n const props = {\n themeColor: themeColor.value.map((c, i) => i === index ? color : c),\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 添加主题色\n const addThemeColor = () => {\n const props = {\n themeColor: [...themeColor.value, theme.value.themeColor],\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 删除主题色\n const deleteThemeColor = (index: number) => {\n const props = {\n themeColor: themeColor.value.filter((c, i) => i !== index),\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置网格颜色\n const updateGridColor = (gridColor: string) => {\n const props = { gridColor }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const openDataEditor = () => chartDataEditorVisible.value = true\n\n emitter.on(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n onUnmounted(() => {\n emitter.off(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n })\n\n return {\n chartDataEditorVisible,\n handleElement,\n updateData,\n fill,\n updateFill,\n lineSmooth,\n showLine,\n showArea,\n horizontalBars,\n donut,\n updateOptions,\n themeColor,\n gridColor,\n updateTheme,\n addThemeColor,\n deleteThemeColor,\n updateGridColor,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=de85ffe4&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=de85ffe4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-de85ffe4\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTableElement, TableCell, TableCellStyle, TableTheme } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport { message } from 'ant-design-vue'\n\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'table-style-panel',\n components: {\n ElementOutline,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const selectedCells = computed(() => store.state.selectedTableCells)\n const themeColor = computed(() => store.state.theme.themeColor)\n \n const availableFonts = computed(() => store.state.availableFonts)\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n ]\n\n const textAttrs = ref({\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n })\n\n const theme = ref()\n const hasTheme = ref(false)\n const rowCount = ref(0)\n const colCount = ref(0)\n const minRowCount = ref(0)\n const minColCount = ref(0)\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n \n theme.value = handleElement.value.theme\n hasTheme.value = !!theme.value\n\n rowCount.value = handleElement.value.data.length\n colCount.value = handleElement.value.data[0].length\n\n minRowCount.value = handleElement.value.data.length\n minColCount.value = handleElement.value.data[0].length\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 更新当前选中单元格的文本样式状态\n const updateTextAttrState = () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n\n let rowIndex = 0\n let colIndex = 0\n if (selectedCells.value.length) {\n const selectedCell = selectedCells.value[0]\n rowIndex = +selectedCell.split('_')[0]\n colIndex = +selectedCell.split('_')[1]\n }\n const style = handleElement.value.data[rowIndex][colIndex].style\n\n if (!style) {\n textAttrs.value = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n }\n }\n else {\n textAttrs.value = {\n bold: !!style.bold,\n em: !!style.em,\n underline: !!style.underline,\n strikethrough: !!style.strikethrough,\n color: style.color || '#000',\n backcolor: style.backcolor || '#000',\n fontsize: style.fontsize || '12px',\n fontname: style.fontname || '微软雅黑',\n align: style.align || 'left',\n }\n }\n }\n\n onMounted(() => {\n if (selectedCells.value.length) updateTextAttrState()\n })\n\n watch(selectedCells, updateTextAttrState)\n\n // 设置单元格内容文本样式\n const updateTextAttrs = (textAttrProp: Partial) => {\n const data: TableCell[][] = JSON.parse(JSON.stringify(handleElement.value.data))\n\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].length; j++) {\n if (!selectedCells.value.length || selectedCells.value.includes(`${i}_${j}`)) {\n const style = data[i][j].style || {}\n data[i][j].style = { ...style, ...textAttrProp }\n }\n }\n }\n const props = { data }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n\n addHistorySnapshot()\n updateTextAttrState()\n }\n\n // 更新表格主题:主题色、标题行、汇总行、第一列、最后一列\n const updateTheme = (themeProp: Partial) => {\n const currentTheme = theme.value || {}\n const props = { theme: { ...currentTheme, ...themeProp } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 开启/关闭表格主题\n const toggleTheme = (checked: boolean) => {\n if (checked) {\n const props = {\n theme: {\n color: themeColor.value,\n rowHeader: true,\n rowFooter: false,\n colHeader: false,\n colFooter: false,\n }\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n else {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.value.id, propName: 'theme' })\n }\n addHistorySnapshot()\n }\n\n // 设置表格行数(只能增加)\n const setTableRow = (e: KeyboardEvent) => {\n const value = +(e.target as HTMLInputElement).value\n const rowCount = handleElement.value.data.length\n\n if (value === rowCount) return\n if (value < rowCount) return message.warning('设置行数不能少于当前值')\n\n const rowCells: TableCell[] = new Array(colCount.value).fill({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '' })\n const newTableCells: TableCell[][] = new Array(value - rowCount).fill(rowCells)\n\n const tableCells: TableCell[][] = JSON.parse(JSON.stringify(handleElement.value.data))\n tableCells.push(...newTableCells)\n\n const props = { data: tableCells }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n\n // 设置表格列数(只能增加)\n const setTableCol = (e: KeyboardEvent) => {\n const value = +(e.target as HTMLInputElement).value\n const colCount = handleElement.value.data[0].length\n\n if (value === colCount) return\n if (value < colCount) return message.warning('设置列数不能少于当前值')\n\n const tableCells = handleElement.value.data.map(item => {\n const cells: TableCell[] = new Array(value - colCount).fill({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '' })\n item.push(...cells)\n return item\n })\n\n const colSizeList = handleElement.value.colWidths.map(item => item * handleElement.value.width)\n const newColSizeList = new Array(value - colCount).fill(100)\n colSizeList.push(...newColSizeList)\n\n const width = handleElement.value.width + 100 * (value - colCount)\n const colWidths = colSizeList.map(item => item / width)\n\n const props = {\n width,\n data: tableCells,\n colWidths,\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n availableFonts,\n fontSizeOptions,\n textAttrs,\n updateTextAttrs,\n theme,\n rowCount,\n colCount,\n minRowCount,\n minColCount,\n hasTheme,\n toggleTheme,\n updateTheme,\n setTableRow,\n setTableCol,\n webFonts,\n }\n },\n})\n","import { render } from \"./TableStylePanel.vue?vue&type=template&id=db114f8c&scoped=true\"\nimport script from \"./TableStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./TableStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./TableStylePanel.vue?vue&type=style&index=0&id=db114f8c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-db114f8c\"\n\nexport default script","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { ElementTypes, PPTElement } from '@/types/slides'\n\nimport TextStylePanel from './TextStylePanel.vue'\nimport ImageStylePanel from './ImageStylePanel.vue'\nimport ShapeStylePanel from './ShapeStylePanel.vue'\nimport LineStylePanel from './LineStylePanel.vue'\nimport ChartStylePanel from './ChartStylePanel/index.vue'\nimport TableStylePanel from './TableStylePanel.vue'\n\nexport default defineComponent({\n name: 'element-style-panel',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const currentPanelComponent = computed(() => {\n if (!handleElement.value) return null\n \n const panelMap = {\n [ElementTypes.TEXT]: TextStylePanel,\n [ElementTypes.IMAGE]: ImageStylePanel,\n [ElementTypes.SHAPE]: ShapeStylePanel,\n [ElementTypes.LINE]: LineStylePanel,\n [ElementTypes.CHART]: ChartStylePanel,\n [ElementTypes.TABLE]: TableStylePanel,\n }\n return panelMap[handleElement.value.type] || null\n })\n\n return {\n handleElement,\n currentPanelComponent,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=3eb3d748\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { round } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { MIN_SIZE } from '@/configs/element'\nimport useOrderElement from '@/hooks/useOrderElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-positopn-panel',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const left = ref(0)\n const top = ref(0)\n const width = ref(0)\n const height = ref(0)\n const rotate = ref(0)\n const fixedRatio = ref(false)\n\n const minSize = computed(() => {\n if (!handleElement.value) return 20\n return MIN_SIZE[handleElement.value.type] || 20\n })\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n\n left.value = round(handleElement.value.left, 1)\n top.value = round(handleElement.value.top, 1)\n\n fixedRatio.value = 'fixedRatio' in handleElement.value && !!handleElement.value.fixedRatio\n\n if (handleElement.value.type !== 'line') {\n width.value = round(handleElement.value.width, 1)\n height.value = round(handleElement.value.height, 1)\n rotate.value = 'rotate' in handleElement.value && handleElement.value.rotate !== undefined ? round(handleElement.value.rotate, 1) : 0\n }\n }, { deep: true, immediate: true })\n\n const { orderElement } = useOrderElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置元素位置\n const updateLeft = (value: number) => {\n const props = { left: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n const updateTop = (value: number) => {\n const props = { top: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置元素宽度、高度、旋转角度\n const updateWidth = (value: number) => {\n const props = { width: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n const updateHeight = (value: number) => {\n const props = { height: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n const updateRotate = (value: number) => {\n const props = { rotate: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 固定元素的宽高比\n const updateFixedRatio = (value: boolean) => {\n const props = { fixedRatio: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 将元素旋转45度(顺时针或逆时针)\n const updateRotate45 = (command: '+' | '-') => {\n let _rotate = Math.floor(rotate.value / 45) * 45\n if (command === '+') _rotate = _rotate + 45\n else if (command === '-') _rotate = _rotate - 45\n\n if (_rotate < -180) _rotate = -180\n if (_rotate > 180) _rotate = 180\n\n const props = { rotate: _rotate }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n orderElement,\n alignElementToCanvas,\n left,\n top,\n width,\n height,\n rotate,\n fixedRatio,\n minSize,\n updateLeft,\n updateTop,\n updateWidth,\n updateHeight,\n updateRotate,\n updateFixedRatio,\n updateRotate45,\n }\n },\n})\n","import { render } from \"./ElementPositionPanel.vue?vue&type=template&id=655fed44&scoped=true\"\nimport script from \"./ElementPositionPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementPositionPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementPositionPanel.vue?vue&type=style&index=0&id=655fed44&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-655fed44\"\n\nexport default script","\n\n\n\n","export const ANIMATIONS = [\r\n {\r\n type: 'bounce',\r\n name: '弹跳',\r\n children: [\r\n { name: '弹入', value: 'bounceIn' },\r\n { name: '向右弹入', value: 'bounceInLeft' },\r\n { name: '向左弹入', value: 'bounceInRight' },\r\n { name: '向上弹入', value: 'bounceInUp' },\r\n { name: '向下弹入', value: 'bounceInDown' },\r\n ],\r\n },\r\n {\r\n type: 'fade',\r\n name: '浮现',\r\n children: [\r\n { name: '浮入', value: 'fadeIn' },\r\n { name: '向下浮入', value: 'fadeInDown' },\r\n { name: '向下长距浮入', value: 'fadeInDownBig' },\r\n { name: '向右浮入', value: 'fadeInLeft' },\r\n { name: '向右长距浮入', value: 'fadeInLeftBig' },\r\n { name: '向左浮入', value: 'fadeInRight' },\r\n { name: '向左长距浮入', value: 'fadeInRightBig' },\r\n { name: '向上浮入', value: 'fadeInUp' },\r\n { name: '向上长距浮入', value: 'fadeInUpBig' },\r\n { name: '从左上浮入', value: 'fadeInTopLeft' },\r\n { name: '从右上浮入', value: 'fadeInTopRight' },\r\n { name: '从左下浮入', value: 'fadeInBottomLeft' },\r\n { name: '从右下浮入', value: 'fadeInBottomRight' },\r\n ],\r\n },\r\n {\r\n type: 'rotate',\r\n name: '旋转',\r\n children: [\r\n { name: '旋转进入', value: 'rotateIn' },\r\n { name: '绕左下旋转进入', value: 'rotateInDownLeft' },\r\n { name: '绕右下旋转进入', value: 'rotateInDownRight' },\r\n { name: '绕左上旋转进入', value: 'rotateInUpLeft' },\r\n { name: '绕右上旋转进入', value: 'rotateInUpRight' },\r\n ],\r\n },\r\n {\r\n type: 'zoom',\r\n name: '缩放',\r\n children: [\r\n { name: '放大进入', value: 'zoomIn' },\r\n { name: '向下放大进入', value: 'zoomInDown' },\r\n { name: '从左放大进入', value: 'zoomInLeft' },\r\n { name: '从右放大进入', value: 'zoomInRight' },\r\n { name: '向上放大进入', value: 'zoomInUp' },\r\n ],\r\n },\r\n {\r\n type: 'slide',\r\n name: '滑入',\r\n children: [\r\n { name: '向下滑入', value: 'slideInDown' },\r\n { name: '从右滑入', value: 'slideInLeft' },\r\n { name: '从左滑入', value: 'slideInRight' },\r\n { name: '向上滑入', value: 'slideInUp' },\r\n ],\r\n },\r\n {\r\n type: 'flip',\r\n name: '翻转',\r\n children: [\r\n { name: 'X轴翻转进入', value: 'flipInX' },\r\n { name: 'Y轴翻转进入', value: 'flipInY' },\r\n ],\r\n },\r\n {\r\n type: 'back',\r\n name: '放大滑入',\r\n children: [\r\n { name: '向下放大滑入', value: 'backInDown' },\r\n { name: '从左放大滑入', value: 'backInLeft' },\r\n { name: '从右放大滑入', value: 'backInRight' },\r\n { name: '向上放大滑入', value: 'backInUp' },\r\n ],\r\n },\r\n {\r\n type: 'lightSpeed',\r\n name: '飞入',\r\n children: [\r\n { name: '从右飞入', value: 'lightSpeedInRight' },\r\n { name: '从左飞入', value: 'lightSpeedInLeft' },\r\n ],\r\n },\r\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTAnimation, PPTElement, Slide } from '@/types/slides'\nimport { ANIMATIONS } from '@/configs/animation'\nimport { ELEMENT_TYPE_ZH } from '@/configs/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport Draggable from 'vuedraggable'\n\nconst defaultDuration = 1000\n\nconst animationTypes: { [key: string]: string } = {}\nfor (const type of ANIMATIONS) {\n for (const animation of type.children) {\n animationTypes[animation.value] = animation.name\n }\n}\n\nexport default defineComponent({\n name: 'element-animation-panel',\n components: {\n Draggable,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const currentSlideAnimations = computed(() => store.getters.currentSlideAnimations)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const hoverPreviewAnimation = ref('')\n const animationPoolVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const animations = ANIMATIONS\n\n // 当前页面的动画列表\n const animationSequence = computed(() => {\n if (!currentSlideAnimations.value) return []\n const animationSequence = []\n for (const animation of currentSlideAnimations.value) {\n const el = currentSlide.value.elements.find(el => el.id === animation.elId)\n if (!el) continue\n const elType = ELEMENT_TYPE_ZH[el.type]\n const animationType = animationTypes[animation.type]\n\n animationSequence.push({\n ...animation,\n elType,\n animationType,\n })\n }\n return animationSequence\n })\n\n // 当前选中元素的入场动画信息\n const handleElementAnimation = computed(() => {\n if (!handleElement.value) return null\n const animations = currentSlideAnimations.value || []\n const animation = animations.find(item => item.elId === handleElement.value.id)\n return animation || null\n })\n\n // 当前选中元素的入场动画名称\n const handleElementAnimationName = computed(() => {\n if (!handleElementAnimation.value) return null\n return animationTypes[handleElementAnimation.value.type]\n })\n\n // 删除元素入场动画\n const deleteAnimation = (elId: string) => {\n const animations = (currentSlideAnimations.value as PPTAnimation[]).filter(item => item.elId !== elId)\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n addHistorySnapshot()\n }\n\n // 拖拽修改入场动画顺序后同步数据\n const handleDragEnd = (eventData: { newIndex: number; oldIndex: number }) => {\n const { newIndex, oldIndex } = eventData\n if (oldIndex === newIndex) return\n\n const animations: PPTAnimation[] = JSON.parse(JSON.stringify(currentSlideAnimations.value))\n const animation = animations[oldIndex]\n animations.splice(oldIndex, 1)\n animations.splice(newIndex, 0, animation)\n \n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n addHistorySnapshot()\n }\n\n // 执行入场动画预览\n const runAnimation = (elId: string, animationType: string, duration: number) => {\n const prefix = 'animate__'\n const elRef = document.querySelector(`#editable-element-${elId} [class^=editable-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animationType}`\n document.documentElement.style.setProperty('--animate-duration', `${duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 修改元素入场动画,并执行一次预览\n const updateElementAnimation = (type: string) => {\n if (!currentSlideAnimations.value) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElement.value.id) return { ...item, type }\n return item\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n const animationItem = currentSlideAnimations.value.find(item => item.elId === handleElement.value.id)\n const duration = animationItem?.duration || defaultDuration\n\n runAnimation(handleElement.value.id, type, duration)\n }\n\n // 修改元素入场动画持续时间\n const updateElementAnimationDuration = (duration: number) => {\n if (!currentSlideAnimations.value) return\n if (duration < 100 || duration > 5000) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElement.value.id) return { ...item, duration }\n return item\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n addHistorySnapshot()\n }\n\n // 添加元素入场动画,并执行一次预览\n const addAnimation = (type: string) => {\n if (handleElementAnimationName.value) {\n updateElementAnimation(type)\n return\n }\n const animations: PPTAnimation[] = currentSlideAnimations.value ? JSON.parse(JSON.stringify(currentSlideAnimations.value)) : []\n animations.push({\n elId: handleElement.value.id,\n type,\n duration: defaultDuration,\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n runAnimation(handleElement.value.id, type, defaultDuration)\n }\n\n return {\n handleElement,\n animationPoolVisible,\n animations,\n animationSequence,\n hoverPreviewAnimation,\n handleElementAnimation,\n handleElementAnimationName,\n addAnimation,\n deleteAnimation,\n handleDragEnd,\n runAnimation,\n updateElementAnimationDuration,\n }\n },\n})\n","import { render } from \"./ElementAnimationPanel.vue?vue&type=template&id=34dfe3c2&scoped=true\"\nimport script from \"./ElementAnimationPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementAnimationPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementAnimationPanel.vue?vue&type=style&index=0&id=34dfe3c2&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-34dfe3c2\"\n\nexport default script","\n\n\n\n","export const PRESET_THEMES = [\r\n { color: '#d14424', background: '#ffffff', text: '#333' },\r\n { color: '#42464b', background: '#ffffff', text: '#333' },\r\n { color: '#5d82ba', background: '#ffffff', text: '#333' },\r\n { color: '#005a6f', background: '#ffffff', text: '#333' },\r\n { color: '#d0614c', background: '#dfb044', text: '#333' },\r\n { color: '#86a1ad', background: '#dfdbd4', text: '#333' },\r\n { color: '#697586', background: '#d5c4a4', text: '#333' },\r\n { color: '#333333', background: '#7acfa6', text: '#333' },\r\n { color: '#42464b', background: '#415065', text: '#fff' },\r\n { color: '#0c5999', background: '#35a2cd', text: '#fff' },\r\n { color: '#c49a41', background: '#8c4357', text: '#fff' },\r\n { color: '#dfaa00', background: '#2e4e7d', text: '#fff' },\r\n { color: '#d1ad88', background: '#f99070', text: '#fff' },\r\n { color: '#464d52', background: '#657984', text: '#fff' },\r\n { color: '#ffcfb6', background: '#1e4c6f', text: '#fff' },\r\n { color: '#c3a043', background: '#43292a', text: '#fff' },\r\n { color: '#464d52', background: '#60546f', text: '#fff' },\r\n { color: '#df9636', background: '#5b89a0', text: '#fff' },\r\n { color: '#b898a4', background: '#93716b', text: '#fff' },\r\n { color: '#c47a11', background: '#187db1', text: '#fff' },\r\n { color: '#333333', background: '#759564', text: '#fff' },\r\n { color: '#355b5e', background: '#424b50', text: '#fff' },\r\n { color: '#d29090', background: '#942a32', text: '#fff' },\r\n { color: '#00cfdf', background: '#3b434d', text: '#fff' },\r\n { color: '#424246', background: '#c70042', text: '#fff' },\r\n { color: '#2e4155', background: '#b35d44', text: '#fff' },\r\n { color: '#11bfce', background: '#8f98aa', text: '#fff' },\r\n { color: '#333333', background: '#549688', text: '#fff' },\r\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide, SlideBackground, SlideTheme } from '@/types/slides'\nimport { PRESET_THEMES } from '@/configs/theme'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './common/ColorButton.vue'\nimport { getImageDataURL } from '@/utils/image'\n\nconst themes = PRESET_THEMES\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'slide-design-panel',\n components: {\n ColorButton,\n },\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const theme = computed(() => store.state.theme)\n const availableFonts = computed(() => store.state.availableFonts)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const background = computed(() => {\n if (!currentSlide.value.background) {\n return {\n type: 'solid',\n value: '#fff',\n } as SlideBackground\n }\n return currentSlide.value.background\n })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置背景模式:纯色、图片、渐变色\n const updateBackgroundType = (type: 'solid' | 'image' | 'gradient') => {\n if (type === 'solid') {\n const newBackground: SlideBackground = {\n ...background.value,\n type: 'solid',\n color: background.value.color || '#fff',\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background: newBackground })\n }\n else if (type === 'image') {\n const newBackground: SlideBackground = {\n ...background.value,\n type: 'image',\n image: background.value.image || '',\n imageSize: background.value.imageSize || 'cover',\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background: newBackground })\n }\n else {\n const newBackground: SlideBackground = {\n ...background.value,\n type: 'gradient',\n gradientType: background.value.gradientType || 'linear',\n gradientColor: background.value.gradientColor || ['#fff', '#fff'],\n gradientRotate: background.value.gradientRotate || 0,\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background: newBackground })\n }\n addHistorySnapshot()\n }\n\n // 设置背景图片\n const updateBackground = (props: Partial) => {\n store.commit(MutationTypes.UPDATE_SLIDE, { background: { ...background.value, ...props } })\n addHistorySnapshot()\n }\n\n // 上传背景图片\n const uploadBackgroundImage = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => updateBackground({ image: dataURL }))\n }\n\n // 应用当前页背景到全部页面\n const applyBackgroundAllSlide = () => {\n const newSlides = slides.value.map(slide => {\n return {\n ...slide,\n background: currentSlide.value.background,\n }\n })\n store.commit(MutationTypes.SET_SLIDES, newSlides)\n addHistorySnapshot()\n }\n\n // 设置主题\n const updateTheme = (themeProps: Partial) => {\n store.commit(MutationTypes.SET_THEME, themeProps)\n }\n\n // 将当前主题应用到全部页面\n const applyThemeAllSlide = () => {\n const newSlides: Slide[] = JSON.parse(JSON.stringify(slides.value))\n const { themeColor, backgroundColor, fontColor, fontName } = theme.value\n\n for (const slide of newSlides) {\n if (!slide.background || slide.background.type !== 'image') {\n slide.background = {\n ...slide.background,\n type: 'solid',\n color: backgroundColor\n }\n }\n\n const elements = slide.elements\n for (const el of elements) {\n if (el.type === 'shape') el.fill = themeColor\n else if (el.type === 'line') el.color = themeColor\n else if (el.type === 'text') {\n el.defaultColor = fontColor\n el.defaultFontName = fontName\n if (el.fill) el.fill = themeColor\n }\n else if (el.type === 'table') {\n if (el.theme) el.theme.color = themeColor\n for (const rowCells of el.data) {\n for (const cell of rowCells) {\n if (cell.style) {\n cell.style.color = fontColor\n cell.style.fontname = fontName\n }\n }\n }\n }\n else if (el.type === 'chart') {\n el.themeColor = [themeColor]\n el.gridColor = fontColor\n }\n }\n }\n store.commit(MutationTypes.SET_SLIDES, newSlides)\n addHistorySnapshot()\n }\n\n // 是否显示预设主题\n const showPresetThemes = ref(true)\n const togglePresetThemesVisible = () => {\n showPresetThemes.value = !showPresetThemes.value\n }\n\n // 设置画布尺寸(宽高比例)\n const updateViewportRatio = (value: number) => {\n store.commit(MutationTypes.SET_VIEWPORT_RATIO, value)\n }\n\n return {\n availableFonts,\n background,\n updateBackgroundType,\n updateBackground,\n uploadBackgroundImage,\n applyBackgroundAllSlide,\n themes,\n theme,\n webFonts,\n updateTheme,\n applyThemeAllSlide,\n viewportRatio,\n updateViewportRatio,\n showPresetThemes,\n togglePresetThemesVisible,\n }\n },\n})\n","import { render } from \"./SlideDesignPanel.vue?vue&type=template&id=7c0de296&scoped=true\"\nimport script from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideDesignPanel.vue?vue&type=style&index=0&id=7c0de296&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7c0de296\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'slide-animation-panel',\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const currentTurningMode = computed(() => currentSlide.value.turningMode || 'slideY')\n\n const animations = [\n { label: '无', value: 'no' },\n { label: '淡入淡出', value: 'fade' },\n { label: '左右推移', value: 'slideX' },\n { label: '上下推移', value: 'slideY' },\n ]\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 修改播放时的切换页面方式\n const updateTurningMode = (mode: string) => {\n if (mode === currentTurningMode.value) return\n store.commit(MutationTypes.UPDATE_SLIDE, { turningMode: mode })\n addHistorySnapshot()\n }\n\n // 将当前页的切换页面方式应用到全部页面\n const applyAllSlide = () => {\n const newSlides = slides.value.map(slide => {\n return {\n ...slide,\n turningMode: currentSlide.value.turningMode,\n }\n })\n store.commit(MutationTypes.SET_SLIDES, newSlides)\n addHistorySnapshot()\n }\n\n return {\n currentTurningMode,\n animations,\n updateTurningMode,\n applyAllSlide,\n }\n },\n})\n","import { render } from \"./SlideAnimationPanel.vue?vue&type=template&id=647e2618&scoped=true\"\nimport script from \"./SlideAnimationPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideAnimationPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideAnimationPanel.vue?vue&type=style&index=0&id=647e2618&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-647e2618\"\n\nexport default script","\n\n\n\n","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { PPTElement, Slide } from '@/types/slides'\r\nimport { ElementAlignCommand, ElementAlignCommands } from '@/types/edit'\r\nimport { getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\nexport default () => {\r\n const store = useStore()\r\n\r\n const activeElementIdList = computed(() => store.state.activeElementIdList)\r\n const activeElementList = computed(() => store.getters.activeElementList)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 对齐选中的元素\r\n * @param command 对齐方向\r\n */\r\n const alignActiveElement = (command: ElementAlignCommand) => {\r\n const { minX, maxX, minY, maxY } = getElementListRange(activeElementList.value)\r\n const elementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n // 如果所选择的元素为组合元素的成员,需要计算该组合的整体范围\r\n const groupElementRangeMap = {}\r\n for (const activeElement of activeElementList.value) {\r\n if (activeElement.groupId && !groupElementRangeMap[activeElement.groupId]) {\r\n const groupElements = activeElementList.value.filter(item => item.groupId === activeElement.groupId)\r\n groupElementRangeMap[activeElement.groupId] = getElementListRange(groupElements)\r\n }\r\n }\r\n\r\n // 根据不同的命令,计算对齐的位置\r\n if (command === ElementAlignCommands.LEFT) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = minX - offsetX\r\n }\r\n else element.left = minX\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.minX - minX\r\n element.left = element.left - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.RIGHT) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elWidth = element.type === 'line' ? Math.max(element.start[0], element.end[0]) : element.width\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = maxX - elWidth + offsetX\r\n }\r\n else element.left = maxX - elWidth\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.maxX - maxX\r\n element.left = element.left - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.TOP) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = minY - offsetY\r\n }\r\n else element.top = minY\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.minY - minY\r\n element.top = element.top - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.BOTTOM) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elHeight = element.type === 'line' ? Math.max(element.start[1], element.end[1]) : element.height\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = maxY - elHeight + offsetY\r\n }\r\n else element.top = maxY - elHeight\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.maxY - maxY\r\n element.top = element.top - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.HORIZONTAL) {\r\n const horizontalCenter = (minX + maxX) / 2\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elWidth = element.type === 'line' ? Math.max(element.start[0], element.end[0]) : element.width\r\n element.left = horizontalCenter - elWidth / 2\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const center = (range.maxX + range.minX) / 2\r\n const offset = center - horizontalCenter\r\n element.left = element.left - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.VERTICAL) {\r\n const verticalCenter = (minY + maxY) / 2\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elHeight = element.type === 'line' ? Math.max(element.start[1], element.end[1]) : element.height\r\n element.top = verticalCenter - elHeight / 2\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const center = (range.maxY + range.minY) / 2\r\n const offset = center - verticalCenter\r\n element.top = element.top - offset\r\n }\r\n }\r\n })\r\n }\r\n \r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n alignActiveElement,\r\n }\r\n}","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { PPTElement, Slide } from '@/types/slides'\r\nimport { getElementRange, getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\ninterface ElementItem {\r\n min: number;\r\n max: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface GroupItem {\r\n groupId: string;\r\n els: PPTElement[];\r\n}\r\n\r\ninterface GroupElementsItem {\r\n min: number;\r\n max: number;\r\n els: PPTElement[];\r\n}\r\n\r\ntype Item = ElementItem | GroupElementsItem\r\n\r\ninterface ElementWithPos {\r\n pos: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface LastPos {\r\n min: number;\r\n max: number;\r\n}\r\n\r\nexport default () => {\r\n const store = useStore()\r\n const activeElementIdList = computed(() => store.state.activeElementIdList)\r\n const activeElementList = computed(() => store.getters.activeElementList)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n const displayItemCount = computed(() => {\r\n let count = 0\r\n const groupIdList: string[] = []\r\n for (const el of activeElementList.value) {\r\n if (!el.groupId) count += 1\r\n else if (!groupIdList.includes(el.groupId)) {\r\n groupIdList.push(el.groupId)\r\n count += 1\r\n }\r\n }\r\n return count\r\n })\r\n // 水平均匀排列\r\n const uniformHorizontalDisplay = () => {\r\n const { minX, maxX } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n // 分别获取普通元素和组合元素集合,并记录下每一项的范围\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minX, maxX } = getElementRange(el)\r\n singleElemetList.push({ min: minX, max: maxX, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minX, maxX } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minX, max: maxX, els: groupItem.els })\r\n }\r\n\r\n // 将普通元素和组合元素集合组合在一起,然后将每一项按位置(从左到右)排序\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n // 计算元素均匀分布所需要的间隔:\r\n // (所选元素整体范围 - 所有所选元素宽度和) / (所选元素数 - 1)\r\n let totalWidth = 0\r\n for (const item of list) {\r\n const width = item.max - item.min\r\n totalWidth += width\r\n }\r\n const span = ((maxX - minX) - totalWidth) / (list.length - 1)\r\n\r\n // 按位置顺序依次计算每一个元素的目标位置\r\n // 第一项中的元素即为起点,无序计算\r\n // 从第二项开始,每一项的位置应该为:上一项位置 + 上一项宽度 + 间隔\r\n // 注意此处计算的位置(pos)并非元素最终的left值,而是目标位置范围最小值(元素旋转后的left值 ≠ 范围最小值)\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minX: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastWidth = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastWidth + span\r\n const currentWidth = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentWidth }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minX } = getElementRange(el)\r\n const offset = minX - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n // 根据目标位置计算元素最终目标left值\r\n // 对于旋转后的元素,需要计算旋转前后left的偏移来做校正\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = sortedItem.pos - offsetX\r\n }\r\n else element.left = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n // 垂直均匀排列(逻辑类似水平均匀排列方法)\r\n const uniformVerticalDisplay = () => {\r\n const { minY, maxY } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minY, maxY } = getElementRange(el)\r\n singleElemetList.push({ min: minY, max: maxY, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minY, maxY } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minY, max: maxY, els: groupItem.els })\r\n }\r\n\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n let totalHeight = 0\r\n for (const item of list) {\r\n const height = item.max - item.min\r\n totalHeight += height\r\n }\r\n const span = ((maxY - minY) - totalHeight) / (list.length - 1)\r\n\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minY: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastHeight = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastHeight + span\r\n const currentHeight = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentHeight }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minY } = getElementRange(el)\r\n const offset = minY - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = sortedItem.pos - offsetY\r\n }\r\n else element.top = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n displayItemCount,\r\n uniformHorizontalDisplay,\r\n uniformVerticalDisplay,\r\n }\r\n}","\nimport { defineComponent } from 'vue'\nimport { ElementAlignCommand } from '@/types/edit'\nimport useCombineElement from '@/hooks/useCombineElement'\nimport useAlignActiveElement from '@/hooks/useAlignActiveElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useUniformDisplayElement from '@/hooks/useUniformDisplayElement'\n\nexport default defineComponent({\n name: 'multi-position-panel',\n setup() {\n const { canCombine, combineElements, uncombineElements } = useCombineElement()\n const { alignActiveElement } = useAlignActiveElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { displayItemCount, uniformHorizontalDisplay, uniformVerticalDisplay } = useUniformDisplayElement()\n\n // 多选元素对齐,需要先判断当前所选中的元素状态:\n // 如果所选元素为一组组合元素,则将它对齐到画布;\n // 如果所选元素不是组合元素或不止一组元素(即当前为可组合状态),则将这多个(多组)元素相互对齐。\n const alignElement = (command: ElementAlignCommand) => {\n if (canCombine.value) alignActiveElement(command)\n else alignElementToCanvas(command)\n }\n\n return {\n canCombine,\n displayItemCount,\n combineElements,\n uncombineElements,\n uniformHorizontalDisplay,\n uniformVerticalDisplay,\n alignElement,\n }\n },\n})\n","import { render } from \"./MultiPositionPanel.vue?vue&type=template&id=88d13362&scoped=true\"\nimport script from \"./MultiPositionPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./MultiPositionPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./MultiPositionPanel.vue?vue&type=style&index=0&id=88d13362&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-88d13362\"\n\nexport default script","\n\n\n\n\n","export const SYMBOL_LIST = [\n {\n key: 'letter',\n label: '字母',\n children: [\n 'α', 'β', 'γ', 'δ', 'ϵ', 'ε', 'ζ', 'η', 'θ', 'ϑ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'π', 'ϖ', 'ρ', 'ϱ', 'σ', 'ς', 'τ', 'υ', 'ϕ', 'φ', 'χ', 'ψ', 'ω', \n 'Γ', 'Δ', 'Θ', 'Λ', 'Ξ', 'Π', 'Σ', 'Υ', 'Φ', 'Ψ', 'Ω',\n '𝐀', '𝐁', '𝐂', '𝐃', '𝐄', '𝐅', '𝐆', '𝐇', '𝐈', '𝐉', '𝐊', '𝐋', '𝐌', '𝐍', '𝐎', '𝐏', '𝐐', '𝐑', '𝐒', '𝐓', '𝐔', '𝐕', '𝐖', '𝐗', '𝐘', '𝐙',\n '𝐚', '𝐛', '𝐜', '𝐝', '𝐞', '𝐟', '𝐠', '𝐡', '𝐢', '𝐣', '𝐤', '𝐥', '𝐦', '𝐧', '𝐨', '𝐩', '𝐪', '𝐫', '𝐬', '𝐭', '𝐮', '𝐯', '𝐰', '𝐱', '𝐲', '𝐳',\n '𝓐', '𝓑', '𝓒', '𝓓', '𝓔', '𝓕', '𝓖', '𝓗', '𝓘', '𝓙', '𝓚', '𝓛', '𝓜', '𝓝', '𝓞', '𝓟', '𝓠', '𝓡', '𝓢', '𝓣', '𝓤', '𝓥', '𝓦', '𝓧', '𝓨', '𝓩',\n '𝓪', '𝓫', '𝓬', '𝓭', '𝓮', '𝓯', '𝓰', '𝓱', '𝓲', '𝓳', '𝓴', '𝓵', '𝓶', '𝓷', '𝓸', '𝓹', '𝓺', '𝓻', '𝓼', '𝓽', '𝓾', '𝓿', '𝔀', '𝔁', '𝔂', '𝔃',\n ],\n },\n {\n key: 'number',\n label: '序号',\n children: [\n '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬', '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳',\n '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀', '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇',\n 'º', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹', '₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉',\n 'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', 'Ⅹ', 'Ⅺ', 'Ⅻ', 'Ⅼ', 'Ⅽ', 'Ⅾ', 'Ⅿ',\n 'ⅰ', 'ⅱ', 'ⅲ', 'ⅳ', 'ⅴ', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', 'ⅹ', 'ⅺ', 'ⅻ', 'ⅼ', 'ⅽ', 'ⅾ', 'ⅿ', 'ↀ', 'ↁ', 'ↂ',\n '㊀', '㊁', '㊂', '㊃', '㊄', '㊅', '㊆', '㊇', '㊈', '㊉', '㈠', '㈡', '㈢', '㈣', '㈤', '㈥', '㈦', '㈧', '㈨', '㈩',\n '𝟘', '𝟙', '𝟚', '𝟛', '𝟜', '𝟝', '𝟞', '𝟟', '𝟠', '𝟡',\n ],\n },\n {\n key: 'math',\n label: '数学',\n children: [\n '+', '-', '×', '÷', '=', '~', '¬', '±', '%', '°', 'ǃ', '‰', '‱', '½', '⅓', '⅔', '¼', '¾',\n '<', '>', 'l', 'o', 'g', 'l', 'g', 'l', 'n', '⨂', '⨁', '⨄', '⨃', '⨅', '⨆', '√', '∛', '∜', '∝', '∞',\n '∟', '∠', '∡', '∢', '∧', '∨', '∩', '∪', '∫', '∬', '∭', '∮', '∯', '∰', '∱', '∲', '∳',\n '∴', '∵', '∼', '∽', '∾', '∿', '≃', '≄', '≅', '≆', '≇', '≈', '≊', '≋', '≌', '≍', '≎', '≏', '≐', '≑', '≒', '≓', '≔', '≕',\n '≤', '≥', '≦', '≧', '≨', '≩', '≪', '≫', '≺', '≻', '≼', '≽', '≾', '≿', '⊀', '⊁', '⊂', '⊃', '⊄', '⊅', '⊆', '⊇', '⊈', '⊉', '⊊', '⊋', '⊏', '⊐', '⊑', '⊒',\n '⊓', '⊔', '⊢', '⊣', '⊤', '⊥', '⊦', '⊧', '⊨', '⊩', '⊪', '⊫', '⊬', '⊭', '⊮', '⊯', '⊲', '⊳', '⊴', '⊵', '⋀', '⋁', '⋂', '⋃', '⋉', '⋊',\n '⋋', '⋌', '⟨', '⟩', '⟪', '⟫', '⟮', '⟯', '⧼', '⧽', '⦰',\n ],\n },\n {\n key: 'arrow',\n label: '箭头',\n children: [\n '←', '↑', '→', '↓', '↔', '↕', '↖', '↗', '↘', '↙', '↚', '↛', '↜', '↝', '↞', '↟', '↠', '↡', '↢', '↣', '↤', '↥', '↦', '↧', '↨',\n '↫', '↬', '↭', '↮', '↯', '↰', '↱', '↲', '↳', '↴', '↵', '↶', '↷', '↸', '↹', '↺', '↻', '↼', '↽', '↾', '↿', '⇀', '⇁', '⇂', '⇃',\n '⇄', '⇅', '⇆', '⇇', '⇈', '⇉', '⇊', '⇋', '⇌', '⇍', '⇎', '⇏', '⇐', '⇑', '⇒', '⇓', '⇔', '⇕', '⇖', '⇗', '⇘', '⇙', '⇚', '⇛',\n '⇜', '⇝', '⇞', '⇟', '⇠', '⇡', '⇢', '⇣', '⇤', '⇥', '⇦', '⇧', '⇨', '⇩', '⇪', '⇫', '⇬', '⇭', '⇮', '⇯', '⇰', '⇱', '⇲', '⇳', '⇴', '⇵',\n '⇶', '⇷', '⇸', '⇹', '⇺', '⇻', '⇼', '⇽', '⇾', '⇿',\n ],\n },\n {\n key: 'graph',\n label: '图形',\n children: [\n '▢', '▣', '▤', '▥', '▦', '▧', '▨', '▩', '▭', '▮', '▯', '▰', '▱', '▲', '▷', '▼', '◁',\n '◈', '◉', '◍', '◐', '◑', '◒', '◓', '◔', '◕', '◧', '◨', '◩', '◪', '◫', '◬', '◭', '◮',\n ],\n },\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { SYMBOL_LIST } from '@/configs/symbol'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\n\nconst symbolPoolList = SYMBOL_LIST\n\nexport default defineComponent({\n name: 'symbol-panel',\n setup() {\n const selectedSymbolKey = ref(symbolPoolList[0].key)\n const symbolPool = computed(() => {\n const selectedSymbol = symbolPoolList.find(item => item.key === selectedSymbolKey.value)\n return selectedSymbol?.children || []\n })\n\n const selectSymbol = (item: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command: 'insert', value: item })\n }\n\n return {\n symbolPoolList,\n symbolPool,\n selectedSymbolKey,\n selectSymbol,\n }\n },\n})\n","import { render } from \"./SymbolPanel.vue?vue&type=template&id=48704658&scoped=true\"\nimport script from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SymbolPanel.vue?vue&type=style&index=0&id=48704658&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-48704658\"\n\nexport default script","\nimport { computed, defineComponent, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { ToolbarState, ToolbarStates } from '@/types/toolbar'\n\nimport ElementStylePanel from './ElementStylePanel/index.vue'\nimport ElementPositionPanel from './ElementPositionPanel.vue'\nimport ElementAnimationPanel from './ElementAnimationPanel.vue'\nimport SlideDesignPanel from './SlideDesignPanel.vue'\nimport SlideAnimationPanel from './SlideAnimationPanel.vue'\nimport MultiPositionPanel from './MultiPositionPanel.vue'\nimport SymbolPanel from './SymbolPanel.vue'\n\nexport default defineComponent({\n name: 'toolbar',\n setup() {\n const store = useStore()\n const toolbarState = computed(() => store.state.toolbarState)\n const handleElement = computed(() => store.getters.handleElement)\n\n const elementTabs = computed(() => {\n if (handleElement.value?.type === 'text') {\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '符号', value: ToolbarStates.SYMBOL },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n }\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n })\n const slideTabs = [\n { label: '设计', value: ToolbarStates.SLIDE_DESIGN },\n { label: '切换', value: ToolbarStates.SLIDE_ANIMATION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n const multiSelectTabs = [\n { label: '位置', value: ToolbarStates.MULTI_POSITION },\n { label: '样式', value: ToolbarStates.EL_STYLE },\n ]\n\n const setToolbarState = (value: ToolbarState) => {\n store.commit(MutationTypes.SET_TOOLBAR_STATE, value)\n }\n\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const currentTabs = computed(() => {\n if (!activeElementIdList.value.length) return slideTabs\n else if (activeElementIdList.value.length > 1) return multiSelectTabs\n return elementTabs.value\n })\n\n watch(currentTabs, () => {\n const currentTabsValue = currentTabs.value.map(tab => tab.value)\n if (!currentTabsValue.includes(toolbarState.value)) {\n store.commit(MutationTypes.SET_TOOLBAR_STATE, currentTabsValue[0])\n }\n })\n\n const currentPanelComponent = computed(() => {\n const panelMap = {\n [ToolbarStates.EL_STYLE]: ElementStylePanel,\n [ToolbarStates.EL_POSITION]: ElementPositionPanel,\n [ToolbarStates.EL_ANIMATION]: ElementAnimationPanel,\n [ToolbarStates.SLIDE_DESIGN]: SlideDesignPanel,\n [ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,\n [ToolbarStates.MULTI_POSITION]: MultiPositionPanel,\n [ToolbarStates.SYMBOL]: SymbolPanel,\n }\n return panelMap[toolbarState.value] || null\n })\n\n return {\n toolbarState,\n currentTabs,\n setToolbarState,\n currentPanelComponent,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5e3834d5&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=5e3834d5&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5e3834d5\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\n\nexport default defineComponent({\n name: 'remark',\n emits: ['update:height'],\n props: {\n height: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const currentSlide = computed(() => store.getters.currentSlide)\n const remark = computed(() => currentSlide.value?.remark || '')\n\n const handleInput = (e: InputEvent) => {\n const value = (e.target as HTMLTextAreaElement).value\n store.commit(MutationTypes.UPDATE_SLIDE, { remark: value })\n }\n\n const resize = (e: MouseEvent) => {\n let isMouseDown = true\n const startPageY = e.pageY\n const originHeight = props.height\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageY = e.pageY\n\n const moveY = currentPageY - startPageY\n let newHeight = -moveY + originHeight\n\n if (newHeight < 40) newHeight = 40\n if (newHeight > 120) newHeight = 120\n\n emit('update:height', newHeight)\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n }\n }\n\n return {\n remark,\n handleInput,\n resize,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=21516eb9&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=21516eb9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-21516eb9\"\n\nexport default script","\nimport { defineComponent, ref } from 'vue'\n\nimport useGlobalHotkey from '@/hooks/useGlobalHotkey'\nimport usePasteEvent from '@/hooks/usePasteEvent'\n\nimport EditorHeader from './EditorHeader/index.vue'\nimport Canvas from './Canvas/index.vue'\nimport CanvasTool from './CanvasTool/index.vue'\nimport Thumbnails from './Thumbnails/index.vue'\nimport Toolbar from './Toolbar/index.vue'\nimport Remark from './Remark/index.vue'\n\nexport default defineComponent({\n name: 'editor',\n components: {\n EditorHeader,\n Canvas,\n CanvasTool,\n Thumbnails,\n Toolbar,\n Remark,\n },\n setup() {\n const remarkHeight = ref(40)\n\n useGlobalHotkey()\n usePasteEvent()\n\n return {\n remarkHeight,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=55178b6a&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=55178b6a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-55178b6a\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\n\n\n\n","\n\n\n\n\n","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTChartElement } from '@/types/slides'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\nimport Chart from './Chart.vue'\n\nexport default defineComponent({\n name: 'screen-element-chart',\n components: {\n ElementOutline,\n Chart,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./ScreenChartElement.vue?vue&type=template&id=1423f8c2&scoped=true\"\nimport script from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenChartElement.vue?vue&type=style&index=0&id=1423f8c2&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1423f8c2\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\nimport { ElementTypes, PPTElement, Slide } from '@/types/slides'\n\nimport BaseImageElement from '@/views/components/element/ImageElement/BaseImageElement.vue'\nimport BaseTextElement from '@/views/components/element/TextElement/BaseTextElement.vue'\nimport BaseShapeElement from '@/views/components/element/ShapeElement/BaseShapeElement.vue'\nimport BaseLineElement from '@/views/components/element/LineElement/BaseLineElement.vue'\nimport ScreenChartElement from '@/views/components/element/ChartElement/ScreenChartElement.vue'\nimport BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue'\n\nexport default defineComponent({\n name: 'screen-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n animationIndex: {\n type: Number,\n default: -1,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: BaseImageElement,\n [ElementTypes.TEXT]: BaseTextElement,\n [ElementTypes.SHAPE]: BaseShapeElement,\n [ElementTypes.LINE]: BaseLineElement,\n [ElementTypes.CHART]: ScreenChartElement,\n [ElementTypes.TABLE]: BaseTableElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const store = useStore()\n const theme = computed(() => store.state.theme)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n // 判断元素是否需要等待执行入场动画:等待执行的元素需要先隐藏\n const needWaitAnimation = computed(() => {\n const animations = currentSlide.value.animations || []\n const elementIndexInAnimation = animations.findIndex(animation => animation.elId === props.elementInfo.id)\n if (elementIndexInAnimation !== -1 && elementIndexInAnimation >= props.animationIndex) return true\n return false \n })\n\n // 打开元素绑定的超链接\n const openLink = () => {\n if (props.elementInfo.link) window.open(props.elementInfo.link)\n }\n\n return {\n currentElementComponent,\n needWaitAnimation,\n theme,\n openLink,\n }\n },\n})\n","import { render } from \"./ScreenElement.vue?vue&type=template&id=11126f7d&scoped=true\"\nimport script from \"./ScreenElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenElement.vue?vue&type=style&index=0&id=11126f7d&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-11126f7d\"\n\nexport default script","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'\n\nimport ScreenElement from './ScreenElement.vue'\n\nexport default defineComponent({\n name: 'screen-slide',\n components: {\n ScreenElement,\n },\n props: {\n slide: {\n type: Object as PropType,\n required: true,\n },\n scale: {\n type: Number,\n required: true,\n },\n animationIndex: {\n type: Number,\n default: -1,\n },\n },\n setup(props) {\n const store = useStore()\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n return {\n backgroundStyle,\n VIEWPORT_SIZE,\n viewportRatio,\n }\n },\n})\n","import { render } from \"./ScreenSlide.vue?vue&type=template&id=a094625a&scoped=true\"\nimport script from \"./ScreenSlide.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenSlide.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenSlide.vue?vue&type=style&index=0&id=a094625a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a094625a\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'slide-thumbnails',\n emits: ['close'],\n components: {\n ThumbnailSlide,\n },\n props: {\n turnSlideToIndex: {\n type: Function as PropType<(index: number) => void>,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const slideIndex = computed(() => store.state.slideIndex)\n\n const close = () => emit('close')\n\n return {\n slides,\n slideIndex,\n close,\n }\n },\n})\n","import { render } from \"./SlideThumbnails.vue?vue&type=template&id=26398174&scoped=true\"\nimport script from \"./SlideThumbnails.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideThumbnails.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideThumbnails.vue?vue&type=style&index=0&id=26398174&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-26398174\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nimport { defineComponent, onMounted, PropType, reactive, ref } from 'vue'\n\nconst penSize = 6\nconst rubberSize = 80\n\nexport default defineComponent({\n name: 'writing-board',\n props: {\n color: {\n type: String,\n default: '#ffcc00',\n },\n model: {\n type: String as PropType<'pen' | 'eraser'>,\n default: 'pen',\n },\n blackboard: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n let ctx: CanvasRenderingContext2D | null = null\n const writingBoardRef = ref()\n const canvasRef = ref()\n\n let lastPos = {\n x: 0,\n y: 0,\n }\n let isMouseDown = false\n let lastTime = 0\n let lastLineWidth = -1\n\n // 鼠标位置坐标:用于画笔或橡皮位置跟随\n const mouse = reactive({\n x: 0,\n y: 0,\n })\n\n // 更新鼠标位置坐标\n const updateMousePosition = (x: number, y: number) => {\n mouse.x = x\n mouse.y = y\n }\n \n // 鼠标是否处在画布范围内:处在范围内才会显示画笔或橡皮\n const mouseInCanvas = ref(false)\n\n\n // 初始化画布\n const initCanvas = () => {\n if (!canvasRef.value || !writingBoardRef.value) return\n\n ctx = canvasRef.value.getContext('2d')\n if (!ctx) return\n\n canvasRef.value.width = writingBoardRef.value.clientWidth\n canvasRef.value.height = writingBoardRef.value.clientHeight\n\n canvasRef.value.style.width = writingBoardRef.value.clientWidth + 'px'\n canvasRef.value.style.height = writingBoardRef.value.clientHeight + 'px'\n\n ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n }\n onMounted(initCanvas)\n\n // 绘制画笔墨迹方法\n const draw = (posX: number, posY: number, lineWidth: number) => {\n if (!ctx) return\n\n const lastPosX = lastPos.x\n const lastPosY = lastPos.y\n\n ctx.lineWidth = lineWidth\n ctx.strokeStyle = props.color\n ctx.beginPath()\n ctx.moveTo(lastPosX, lastPosY)\n ctx.lineTo(posX, posY)\n ctx.stroke()\n ctx.closePath()\n }\n\n // 擦除墨迹方法\n const erase = (posX: number, posY: number) => {\n if (!ctx || !canvasRef.value) return\n const lastPosX = lastPos.x\n const lastPosY = lastPos.y\n\n const radius = rubberSize / 2\n\n const sinRadius = radius * Math.sin(Math.atan((posY - lastPosY) / (posX - lastPosX)))\n const cosRadius = radius * Math.cos(Math.atan((posY - lastPosY) / (posX - lastPosX)))\n const rectPoint1: [number, number] = [lastPosX + sinRadius, lastPosY - cosRadius]\n const rectPoint2: [number, number] = [lastPosX - sinRadius, lastPosY + cosRadius]\n const rectPoint3: [number, number] = [posX + sinRadius, posY - cosRadius]\n const rectPoint4: [number, number] = [posX - sinRadius, posY + cosRadius]\n\n ctx.save()\n ctx.beginPath()\n ctx.arc(posX, posY, radius, 0, Math.PI * 2)\n ctx.clip()\n ctx.clearRect(0, 0, canvasRef.value.width, canvasRef.value.height)\n ctx.restore()\n\n ctx.save()\n ctx.beginPath()\n ctx.moveTo(...rectPoint1)\n ctx.lineTo(...rectPoint3)\n ctx.lineTo(...rectPoint4)\n ctx.lineTo(...rectPoint2)\n ctx.closePath()\n ctx.clip()\n ctx.clearRect(0, 0, canvasRef.value.width, canvasRef.value.height)\n ctx.restore()\n }\n\n // 计算鼠标两次移动之间的距离\n const getDistance = (posX: number, posY: number) => {\n const lastPosX = lastPos.x\n const lastPosY = lastPos.y\n return Math.sqrt((posX - lastPosX) * (posX - lastPosX) + (posY - lastPosY) * (posY - lastPosY))\n }\n\n // 根据鼠标两次移动之间的距离s和时间t计算绘制速度,速度越快,墨迹越细\n const getLineWidth = (s: number, t: number) => {\n const maxV = 10\n const minV = 0.1\n const maxWidth = penSize\n const minWidth = 3\n const v = s / t\n let lineWidth\n\n if (v <= minV) lineWidth = maxWidth\n else if (v >= maxV) lineWidth = minWidth\n else lineWidth = maxWidth - v / maxV * maxWidth\n\n if (lastLineWidth === -1) return lineWidth\n return lineWidth * 1 / 3 + lastLineWidth * 2 / 3\n }\n\n // 路径操作\n const handleMove = (x: number, y: number) => {\n const time = new Date().getTime()\n\n if (props.model === 'pen') {\n const s = getDistance(x, y)\n const t = time - lastTime\n const lineWidth = getLineWidth(s, t)\n\n draw(x, y, lineWidth)\n lastLineWidth = lineWidth\n }\n else erase(x, y)\n\n lastPos = {x, y}\n lastTime = new Date().getTime()\n }\n\n // 处理鼠标(触摸)事件\n // 准备开始绘制/擦除墨迹(落笔)\n const handleMousedown = (e: MouseEvent | TouchEvent) => {\n const x = e instanceof MouseEvent ? e.offsetX : e.changedTouches[0].pageX\n const y = e instanceof MouseEvent ? e.offsetY : e.changedTouches[0].pageY\n\n isMouseDown = true\n lastPos = { x, y }\n lastTime = new Date().getTime()\n\n if (e instanceof TouchEvent) {\n updateMousePosition(x, y)\n mouseInCanvas.value = true\n }\n }\n\n // 开始绘制/擦除墨迹(移动)\n const handleMousemove = (e: MouseEvent | TouchEvent) => {\n const x = e instanceof MouseEvent ? e.offsetX : e.changedTouches[0].pageX\n const y = e instanceof MouseEvent ? e.offsetY : e.changedTouches[0].pageY\n\n updateMousePosition(x, y)\n\n if (isMouseDown) handleMove(x, y)\n }\n\n // 结束绘制/擦除墨迹(停笔)\n const handleMouseup = () => {\n if (!isMouseDown) return\n isMouseDown = false\n }\n\n // 清空画布\n const clearCanvas = () => {\n if (!ctx || !canvasRef.value) return\n ctx.clearRect(0, 0, canvasRef.value.width, canvasRef.value.height)\n }\n\n return {\n mouse,\n mouseInCanvas,\n penSize,\n rubberSize,\n writingBoardRef,\n canvasRef,\n handleMousedown,\n handleMousemove,\n handleMouseup,\n clearCanvas,\n }\n },\n})\n","import { render } from \"./WritingBoard.vue?vue&type=template&id=7ff9fa00&scoped=true\"\nimport script from \"./WritingBoard.vue?vue&type=script&lang=ts\"\nexport * from \"./WritingBoard.vue?vue&type=script&lang=ts\"\n\nimport \"./WritingBoard.vue?vue&type=style&index=0&id=7ff9fa00&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7ff9fa00\"\n\nexport default script","\nimport { defineComponent, ref } from 'vue'\nimport WritingBoard from '@/components/WritingBoard.vue'\n\nconst writingBoardColors = ['#000000', '#ffffff', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c']\n\nexport default defineComponent({\n name: 'writing-board-tool',\n emits: ['close'],\n components: {\n WritingBoard,\n },\n setup(props, { emit }) {\n const writingBoardRef = ref()\n const writingBoardColor = ref('#e2534d')\n const writingBoardModel = ref('pen')\n const blackboard = ref(false)\n\n // 切换到画笔状态\n const changePen = () => {\n writingBoardModel.value = 'pen'\n }\n\n // 切换到橡皮状态\n const changeEraser = () => {\n writingBoardModel.value = 'eraser'\n }\n\n // 清除画布上的墨迹\n const clearCanvas = () => {\n writingBoardRef.value.clearCanvas()\n }\n\n // 修改画笔颜色,如果当前不处于画笔状态则先切换到画笔状态\n const changeColor = (color: string) => {\n if (writingBoardModel.value !== 'pen') writingBoardModel.value = 'pen'\n writingBoardColor.value = color\n }\n \n // 关闭写字板\n const closeWritingBoard = () => {\n emit('close')\n }\n\n return {\n writingBoardRef,\n writingBoardColors,\n writingBoardColor,\n writingBoardModel,\n blackboard,\n changePen,\n changeEraser,\n clearCanvas,\n changeColor,\n closeWritingBoard,\n }\n },\n})\n","import { render } from \"./WritingBoardTool.vue?vue&type=template&id=7a2e5324&scoped=true\"\nimport script from \"./WritingBoardTool.vue?vue&type=script&lang=ts\"\nexport * from \"./WritingBoardTool.vue?vue&type=script&lang=ts\"\n\nimport \"./WritingBoardTool.vue?vue&type=style&index=0&id=7a2e5324&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7a2e5324\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, onUnmounted, provide, ref } from 'vue'\nimport { throttle } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { KEYS } from '@/configs/hotkey'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { isFullscreen } from '@/utils/fullscreen'\nimport useScreening from '@/hooks/useScreening'\n\nimport { message } from 'ant-design-vue'\n\nimport ScreenSlide from './ScreenSlide.vue'\nimport SlideThumbnails from './SlideThumbnails.vue'\nimport WritingBoardTool from './WritingBoardTool.vue'\n\nexport default defineComponent({\n name: 'screen',\n components: {\n ScreenSlide,\n SlideThumbnails,\n WritingBoardTool,\n },\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const slideIndex = computed(() => store.state.slideIndex)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const slideWidth = ref(0)\n const slideHeight = ref(0)\n\n const scale = computed(() => slideWidth.value / VIEWPORT_SIZE)\n\n const showPageNumber = ref(false)\n\n const slideThumbnailModelVisible = ref(false)\n\n const writingBoardToolVisible = ref(false)\n\n // 计算和更新幻灯片内容的尺寸(按比例自适应屏幕)\n const setSlideContentSize = () => {\n const winWidth = document.body.clientWidth\n const winHeight = document.body.clientHeight\n let width, height\n\n if (winHeight / winWidth === viewportRatio.value) {\n width = winWidth\n height = winHeight\n }\n else if (winHeight / winWidth > viewportRatio.value) {\n width = winWidth\n height = winWidth * viewportRatio.value\n }\n else {\n width = winHeight / viewportRatio.value\n height = winHeight\n }\n slideWidth.value = width\n slideHeight.value = height\n }\n\n // 窗口尺寸变化监听:窗口发生变化时更新幻灯片的大小\n // 如果退出了全屏,需要返回到编辑模式\n const { exitScreening } = useScreening()\n\n const windowResizeListener = () => {\n setSlideContentSize()\n if (!isFullscreen()) exitScreening()\n }\n\n onMounted(() => {\n setSlideContentSize()\n window.addEventListener('resize', windowResizeListener)\n })\n onUnmounted(() => {\n window.removeEventListener('resize', windowResizeListener)\n })\n\n // 当前页的元素动画列表和当前执行到的位置\n const animations = computed(() => currentSlide.value.animations || [])\n const animationIndex = ref(0)\n\n // 执行元素的入场动画\n const runAnimation = () => {\n const prefix = 'animate__'\n const animation = animations.value[animationIndex.value]\n animationIndex.value += 1\n\n const elRef = document.querySelector(`#screen-element-${animation.elId} [class^=base-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animation.type}`\n document.documentElement.style.setProperty('--animate-duration', `${animation.duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 关闭自动播放\n const autoPlayTimer = ref(0)\n const closeAutoPlay = () => {\n if (autoPlayTimer.value) {\n clearInterval(autoPlayTimer.value)\n autoPlayTimer.value = 0\n }\n }\n onUnmounted(closeAutoPlay)\n\n const throttleMassage = throttle(function(msg) {\n message.success(msg)\n }, 1000, { leading: true, trailing: false })\n\n // 向上/向下播放\n // 遇到元素动画时,优先执行动画播放,无动画则执行翻页\n // 向上播放遇到动画时,仅撤销到动画执行前的状态,不需要反向播放动画\n const execPrev = () => {\n if (animations.value.length && animationIndex.value > 0) {\n animationIndex.value -= 1\n }\n else if (slideIndex.value > 0) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1)\n const lastIndex = animations.value ? animations.value.length : 0\n animationIndex.value = lastIndex\n }\n else {\n throttleMassage('已经是第一页了')\n }\n }\n const execNext = () => {\n if (animations.value.length && animationIndex.value < animations.value.length) {\n runAnimation()\n }\n else if (slideIndex.value < slides.value.length - 1) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1)\n animationIndex.value = 0\n }\n else {\n throttleMassage('已经是最后一页了')\n closeAutoPlay()\n }\n }\n\n // 自动播放\n const autoPlay = () => {\n closeAutoPlay()\n message.success('开始自动放映')\n autoPlayTimer.value = setInterval(execNext, 2500)\n }\n\n // 鼠标滚动翻页\n const mousewheelListener = throttle(function(e: WheelEvent) {\n if (e.deltaY < 0) execPrev()\n else if (e.deltaY > 0) execNext()\n }, 500, { leading: true, trailing: false })\n\n // 触摸屏上下滑动翻页\n const touchInfo = ref<{ x: number; y: number; } | null>(null)\n\n const touchStartListener = (e: TouchEvent) => {\n touchInfo.value = {\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n }\n }\n const touchEndListener = (e: TouchEvent) => {\n if (!touchInfo.value) return\n\n const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].pageX)\n const offsetY = e.changedTouches[0].pageY - touchInfo.value.y\n\n if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) {\n touchInfo.value = null\n \n if (offsetY > 0) execPrev()\n else execNext()\n }\n }\n\n // 快捷键翻页\n const keydownListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.UP || key === KEYS.LEFT) execPrev()\n else if (\n key === KEYS.DOWN || \n key === KEYS.RIGHT ||\n key === KEYS.SPACE || \n key === KEYS.ENTER\n ) execNext()\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n })\n\n // 切换到上一张/上一张幻灯片(无视元素的入场动画)\n const turnPrevSlide = () => {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1)\n animationIndex.value = 0\n }\n const turnNextSlide = () => {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1)\n animationIndex.value = 0\n }\n\n // 切换幻灯片到指定的页面\n const turnSlideToIndex = (index: number) => {\n slideThumbnailModelVisible.value = false\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, index)\n animationIndex.value = 0\n }\n\n const contextmenus = (): ContextmenuItem[] => {\n return [\n {\n text: '上一页',\n subText: '↑ ←',\n disable: slideIndex.value <= 0,\n handler: () => turnPrevSlide(),\n },\n {\n text: '下一页',\n subText: '↓ →',\n disable: slideIndex.value >= slides.value.length - 1,\n handler: () => turnNextSlide(),\n },\n {\n text: '第一页',\n disable: slideIndex.value === 0,\n handler: () => turnSlideToIndex(0),\n },\n {\n text: '最后一页',\n disable: slideIndex.value === slides.value.length - 1,\n handler: () => turnSlideToIndex(slides.value.length - 1),\n },\n { divider: true },\n {\n text: '显示页码',\n subText: showPageNumber.value ? '√' : '',\n handler: () => showPageNumber.value = !showPageNumber.value,\n },\n {\n text: '查看所有幻灯片',\n handler: () => slideThumbnailModelVisible.value = true,\n },\n {\n text: '画笔',\n handler: () => writingBoardToolVisible.value = true,\n },\n { divider: true },\n {\n text: autoPlayTimer.value ? '取消自动放映' : '自动放映',\n handler: autoPlayTimer.value ? closeAutoPlay : autoPlay,\n },\n {\n text: '结束放映',\n subText: 'ESC',\n handler: exitScreening,\n },\n ]\n }\n \n provide('slideScale', scale)\n\n return {\n slides,\n slideIndex,\n currentSlide,\n slideWidth,\n slideHeight,\n scale,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n animationIndex,\n contextmenus,\n execPrev,\n execNext,\n slideThumbnailModelVisible,\n turnSlideToIndex,\n writingBoardToolVisible,\n showPageNumber,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=42d1fb1f&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=42d1fb1f&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-42d1fb1f\"\n\nexport default script","\nimport { computed, defineComponent, onMounted } from 'vue'\nimport { MutationTypes, ActionTypes, useStore } from '@/store'\n\nimport Editor from './views/Editor/index.vue'\nimport Screen from './views/Screen/index.vue'\n\nexport default defineComponent({\n name: 'app',\n components: {\n Editor,\n Screen,\n },\n setup() {\n const store = useStore()\n const screening = computed(() => store.state.screening)\n\n if (process.env.NODE_ENV === 'production') {\n window.onbeforeunload = () => false\n }\n\n onMounted(() => {\n store.commit(MutationTypes.SET_AVAILABLE_FONTS)\n store.dispatch(ActionTypes.INIT_SNAPSHOT_DATABASE)\n })\n\n return {\n screening,\n }\n },\n})\n","import { render } from \"./App.vue?vue&type=template&id=0af9d1a8\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=0af9d1a8&lang=scss\"\nscript.render = render\n\nexport default script","// https://iconpark.bytedance.com/official\n\nimport { App } from 'vue'\nimport {\n PlayOne,\n Lock,\n Unlock,\n Ppt,\n Format,\n Picture,\n FullScreen,\n List,\n OrderedList,\n Helpcenter,\n FlipVertically,\n FlipHorizontally,\n FontSize,\n Code,\n TextBold,\n TextItalic,\n TextUnderline,\n Strikethrough,\n Edit,\n Quote,\n BackgroundColor,\n Group,\n Ungroup,\n Back,\n Next,\n Fullwidth,\n AlignTop,\n AlignLeft,\n AlignRight,\n AlignBottom,\n AlignVertically,\n AlignHorizontally,\n BringToFront,\n SendToBack,\n AlignTextLeft,\n AlignTextRight,\n AlignTextCenter,\n RowHeight,\n Write,\n InsertTable,\n AddText,\n Fill,\n Tailoring,\n Effects,\n ColorFilter,\n Down,\n Plus,\n Minus,\n Connection,\n BringToFrontOne,\n SentToBack,\n Github,\n ChartProportion,\n ChartHistogram,\n ChartHistogramOne,\n ChartLine,\n ChartLineArea,\n ChartScatter,\n ChartPie,\n ChartRing,\n Text,\n Rotate,\n LeftTwo,\n RightTwo,\n Platte,\n UpOne,\n DownOne,\n Close,\n CloseSmall,\n Undo,\n Transform,\n Click,\n Theme,\n ArrowCircleLeft,\n GraphicDesign,\n Logout,\n Erase,\n Clear,\n FolderClose,\n AlignTextTopOne,\n AlignTextBottomOne,\n AlignTextMiddleOne,\n} from '@icon-park/vue-next'\n\nexport default {\n install(app: App) {\n // 插入元素\n app.component('IconFontSize', FontSize)\n app.component('IconPicture', Picture)\n app.component('IconGraphicDesign', GraphicDesign)\n app.component('IconConnection', Connection)\n app.component('IconChartProportion', ChartProportion)\n app.component('IconInsertTable', InsertTable)\n\n // 锁定与解锁\n app.component('IconLock', Lock)\n app.component('IconUnlock', Unlock)\n\n // 全屏\n app.component('IconFullScreen', FullScreen)\n\n // 撤销重做\n app.component('IconBack', Back)\n app.component('IconNext', Next) \n \n // 对齐\n app.component('IconAlignTop', AlignTop)\n app.component('IconAlignLeft', AlignLeft)\n app.component('IconAlignRight', AlignRight)\n app.component('IconAlignBottom', AlignBottom)\n app.component('IconAlignVertically', AlignVertically)\n app.component('IconAlignHorizontally', AlignHorizontally)\n\n // 层级\n app.component('IconBringToFront', BringToFront)\n app.component('IconSentToBack', SentToBack)\n app.component('IconBringToFrontOne', BringToFrontOne)\n app.component('IconSendToBack', SendToBack)\n\n // 组合\n app.component('IconGroup', Group)\n app.component('IconUngroup', Ungroup)\n\n // 通用元素编辑\n app.component('IconFill', Fill)\n app.component('IconBackgroundColor', BackgroundColor)\n app.component('IconPlatte', Platte)\n \n // 图片编辑\n app.component('IconTailoring', Tailoring)\n app.component('IconColorFilter', ColorFilter)\n app.component('IconFlipVertically', FlipVertically)\n app.component('IconFlipHorizontally', FlipHorizontally)\n\n // 文字编辑\n app.component('IconText', Text)\n app.component('IconAddText', AddText)\n app.component('IconAlignTextLeft', AlignTextLeft)\n app.component('IconAlignTextRight', AlignTextRight)\n app.component('IconAlignTextCenter', AlignTextCenter)\n app.component('IconRowHeight', RowHeight)\n app.component('IconFullwidth', Fullwidth)\n app.component('IconCode', Code)\n app.component('IconTextBold', TextBold)\n app.component('IconTextItalic', TextItalic)\n app.component('IconTextUnderline', TextUnderline)\n app.component('IconStrikethrough', Strikethrough)\n app.component('IconQuote', Quote)\n app.component('IconList', List)\n app.component('IconOrderedList', OrderedList)\n app.component('IconUpOne', UpOne)\n app.component('IconDownOne', DownOne)\n app.component('IconFormat', Format)\n app.component('IconAlignTextTopOne', AlignTextTopOne)\n app.component('IconAlignTextBottomOne', AlignTextBottomOne)\n app.component('IconAlignTextMiddleOne', AlignTextMiddleOne)\n\n // 箭头与符号\n app.component('IconDown', Down)\n app.component('IconLeftTwo', LeftTwo)\n app.component('IconRightTwo', RightTwo)\n app.component('IconPlus', Plus)\n app.component('IconMinus', Minus)\n app.component('IconClose', Close)\n app.component('IconCloseSmall', CloseSmall)\n \n // 图表\n app.component('IconChartHistogram', ChartHistogram)\n app.component('IconChartHistogramOne', ChartHistogramOne)\n app.component('IconChartLine', ChartLine)\n app.component('IconChartLineArea', ChartLineArea)\n app.component('IconChartScatter', ChartScatter)\n app.component('IconChartPie', ChartPie)\n app.component('IconChartRing', ChartRing)\n\n // 其他\n app.component('IconPlayOne', PlayOne)\n app.component('IconPpt', Ppt)\n app.component('IconHelpcenter', Helpcenter)\n app.component('IconGithub', Github)\n app.component('IconWrite', Write)\n app.component('IconErase', Erase)\n app.component('IconEffects', Effects)\n app.component('IconRotate', Rotate)\n app.component('IconEdit', Edit)\n app.component('IconUndo', Undo)\n app.component('IconTransform', Transform)\n app.component('IconClick', Click)\n app.component('IconTheme', Theme)\n app.component('IconArrowCircleLeft', ArrowCircleLeft)\n app.component('IconLogout', Logout)\n app.component('IconClear', Clear)\n app.component('IconFolderClose', FolderClose)\n }\n}","\n\n\n\n","\nimport { defineComponent, ref } from 'vue'\n\nexport default defineComponent({\n name: 'file-input',\n emits: ['change'],\n props: {\n accept: {\n type: String,\n default: 'image/*',\n },\n },\n setup(props, { emit }) {\n const inputRef = ref()\n\n const handleClick = () => {\n if (!inputRef.value) return\n inputRef.value.value = ''\n inputRef.value.click()\n }\n const handleChange = (e: InputEvent) => {\n const files = (e.target as HTMLInputElement).files\n if (files) emit('change', files)\n }\n\n return {\n handleClick,\n handleChange,\n inputRef,\n }\n },\n})\n","import { render } from \"./FileInput.vue?vue&type=template&id=d6089858&scoped=true\"\nimport script from \"./FileInput.vue?vue&type=script&lang=ts\"\nexport * from \"./FileInput.vue?vue&type=script&lang=ts\"\n\nimport \"./FileInput.vue?vue&type=style&index=0&id=d6089858&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-d6089858\"\n\nexport default script","\n\n","\nexport default {\n name: 'svg-wrapper',\n}\n","import { render } from \"./SvgWrapper.vue?vue&type=template&id=07215504\"\nimport script from \"./SvgWrapper.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgWrapper.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\r\n\r\n\r\n\r\n","\r\nexport default {\r\n name: 'checkbox-button',\r\n props: {\r\n checked: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n}\r\n","import { render } from \"./CheckboxButton.vue?vue&type=template&id=7cae2b90&scoped=true\"\nimport script from \"./CheckboxButton.vue?vue&type=script&lang=ts\"\nexport * from \"./CheckboxButton.vue?vue&type=script&lang=ts\"\n\nimport \"./CheckboxButton.vue?vue&type=style&index=0&id=7cae2b90&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7cae2b90\"\n\nexport default script","\r\n\r\n\r\n\r\n","\r\nexport default {\r\n name: 'checkbox-button-group',\r\n}\r\n","import { render } from \"./CheckboxButtonGroup.vue?vue&type=template&id=7dafd0a9&scoped=true\"\nimport script from \"./CheckboxButtonGroup.vue?vue&type=script&lang=ts\"\nexport * from \"./CheckboxButtonGroup.vue?vue&type=script&lang=ts\"\n\nimport \"./CheckboxButtonGroup.vue?vue&type=style&index=0&id=7dafd0a9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7dafd0a9\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\n\nconst checkboardCache = {}\n\nconst renderCheckboard = (white: string, grey: string, size: number) => {\n const canvas = document.createElement('canvas')\n canvas.width = canvas.height = size * 2\n const ctx = canvas.getContext('2d')\n \n if (!ctx) return null\n\n ctx.fillStyle = white\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.fillStyle = grey\n ctx.fillRect(0, 0, size, size)\n ctx.translate(size, size)\n ctx.fillRect(0, 0, size, size)\n return canvas.toDataURL()\n}\n\nconst getCheckboard = (white: string, grey: string, size: number) => {\n const key = white + ',' + grey + ',' + size\n if (checkboardCache[key]) return checkboardCache[key]\n \n const checkboard = renderCheckboard(white, grey, size)\n checkboardCache[key] = checkboard\n return checkboard\n}\n\nexport default defineComponent({\n name: 'checkboard',\n emits: ['colorChange'],\n props: {\n size: {\n type: Number,\n default: 8,\n },\n white: {\n type: String,\n default: '#fff',\n },\n grey: {\n type: String,\n default: '#e6e6e6',\n },\n },\n setup(props) {\n const bgStyle = computed(() => {\n const checkboard = getCheckboard(props.white, props.grey, props.size)\n return { backgroundImage: `url(${checkboard})` }\n })\n\n return {\n bgStyle,\n }\n },\n})\n","import { render } from \"./Checkboard.vue?vue&type=template&id=0a544b87&scoped=true\"\nimport script from \"./Checkboard.vue?vue&type=script&lang=ts\"\nexport * from \"./Checkboard.vue?vue&type=script&lang=ts\"\n\nimport \"./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0a544b87\"\n\nexport default script","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\n\nimport Checkboard from './Checkboard.vue'\nimport { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'alpha',\n components: {\n Checkboard,\n },\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => props.value)\n \n const gradientColor = computed(() => {\n const rgbaStr = [color.value.r, color.value.g, color.value.b].join(',')\n return `linear-gradient(to right, rgba(${rgbaStr}, 0) 0%, rgba(${rgbaStr}, 1) 100%)`\n })\n\n const alphaRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!alphaRef.value) return\n const containerWidth = alphaRef.value.clientWidth\n const xOffset = alphaRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let a\n\n if (left < 0) a = 0\n else if (left > containerWidth) a = 1\n else a = Math.round(left * 100 / containerWidth) / 100\n\n if (color.value.a !== a) {\n emit('colorChange', {\n r: color.value.r,\n g: color.value.g,\n b: color.value.b,\n a: a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n alphaRef,\n gradientColor,\n handleMouseDown,\n color,\n }\n },\n})\n","import { render } from \"./Alpha.vue?vue&type=template&id=6f2cb744&scoped=true\"\nimport script from \"./Alpha.vue?vue&type=script&lang=ts\"\nexport * from \"./Alpha.vue?vue&type=script&lang=ts\"\n\nimport \"./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6f2cb744\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, PropType, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'hue',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const oldHue = ref(0)\n const pullDirection = ref('')\n \n const color = computed(() => {\n const hsla = tinycolor(props.value).toHsl()\n if (props.hue !== -1) hsla.h = props.hue\n return hsla\n })\n\n const pointerLeft = computed(() => {\n if (color.value.h === 0 && pullDirection.value === 'right') return '100%'\n return color.value.h * 100 / 360 + '%'\n })\n\n watch(() => props.value, () => {\n const hsla = tinycolor(props.value).toHsl()\n const h = hsla.s === 0 ? props.hue : hsla.h\n if (h !== 0 && h - oldHue.value > 0) pullDirection.value = 'right'\n if (h !== 0 && h - oldHue.value < 0) pullDirection.value = 'left'\n oldHue.value = h\n })\n\n const hueRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!hueRef.value) return\n\n const containerWidth = hueRef.value.clientWidth\n const xOffset = hueRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let h, percent\n \n if (left < 0) h = 0\n else if (left > containerWidth) h = 360\n else {\n percent = left * 100 / containerWidth\n h = 360 * percent / 100\n }\n if (props.hue === -1 || color.value.h !== h) {\n emit('colorChange', {\n h,\n l: color.value.l,\n s: color.value.s,\n a: color.value.a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n hueRef,\n handleMouseDown,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Hue.vue?vue&type=template&id=1766620e&scoped=true\"\nimport script from \"./Hue.vue?vue&type=script&lang=ts\"\nexport * from \"./Hue.vue?vue&type=script&lang=ts\"\n\nimport \"./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1766620e\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { throttle, clamp } from 'lodash'\n\nexport default defineComponent({\n name: 'saturation',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => {\n const hsva = tinycolor(props.value).toHsv()\n if (props.hue !== -1) hsva.h = props.hue\n return hsva\n })\n\n const bgColor = computed(() => `hsl(${color.value.h}, 100%, 50%)`)\n const pointerTop = computed(() => (-(color.value.v * 100) + 1) + 100 + '%')\n const pointerLeft = computed(() => color.value.s * 100 + '%')\n\n const emitChangeEvent = throttle(function(param) {\n emit('colorChange', param)\n }, 20, { leading: true, trailing: false })\n\n const saturationRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!saturationRef.value) return\n \n const containerWidth = saturationRef.value.clientWidth\n const containerHeight = saturationRef.value.clientHeight\n const xOffset = saturationRef.value.getBoundingClientRect().left + window.pageXOffset\n const yOffset = saturationRef.value.getBoundingClientRect().top + window.pageYOffset\n const left = clamp(e.pageX - xOffset, 0, containerWidth)\n const top = clamp(e.pageY - yOffset, 0, containerHeight)\n const saturation = left / containerWidth\n const bright = clamp(-(top / containerHeight) + 1, 0, 1)\n\n emitChangeEvent({\n h: color.value.h,\n s: saturation,\n v: bright,\n a: color.value.a,\n })\n }\n\n \n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n saturationRef,\n bgColor,\n handleMouseDown,\n pointerTop,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Saturation.vue?vue&type=template&id=8982eb4a&scoped=true\"\nimport script from \"./Saturation.vue?vue&type=script&lang=ts\"\nexport * from \"./Saturation.vue?vue&type=script&lang=ts\"\n\nimport \"./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-8982eb4a\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'editable-input',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const val = computed(() => {\n let _hex = ''\n if (props.value.a < 1) _hex = tinycolor(props.value).toHex8String().toUpperCase()\n else _hex = tinycolor(props.value).toHexString().toUpperCase()\n return _hex.replace('#', '')\n })\n\n const handleInput = (e: InputEvent) => {\n const value = (e.target as HTMLInputElement).value\n if (value.length >= 6) emit('colorChange', tinycolor(value).toRgb())\n }\n\n return {\n val,\n handleInput,\n }\n },\n})\n","import { render } from \"./EditableInput.vue?vue&type=template&id=00ea8dfc&scoped=true\"\nimport script from \"./EditableInput.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableInput.vue?vue&type=script&lang=ts\"\n\nimport \"./EditableInput.vue?vue&type=style&index=0&id=00ea8dfc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-00ea8dfc\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { debounce } from 'lodash'\n\nimport Alpha from './Alpha.vue'\nimport Checkboard from './Checkboard.vue'\nimport Hue from './Hue.vue'\nimport Saturation from './Saturation.vue'\nimport EditableInput from './EditableInput.vue'\n\nconst RECENT_COLORS = 'RECENT_COLORS'\n\nconst presetColorConfig = [\n ['#7f7f7f', '#f2f2f2'],\n ['#0d0d0d', '#808080'],\n ['#1c1a10', '#ddd8c3'],\n ['#0e243d', '#c6d9f0'],\n ['#233f5e', '#dae5f0'],\n ['#632623', '#f2dbdb'],\n ['#4d602c', '#eaf1de'],\n ['#3f3150', '#e6e0ec'],\n ['#1e5867', '#d9eef3'],\n ['#99490f', '#fee9da'],\n]\n\nconst gradient = (startColor: string, endColor: string, step: number) => {\n const _startColor = tinycolor(startColor).toRgb()\n const _endColor = tinycolor(endColor).toRgb()\n\n const rStep = (_endColor.r - _startColor.r) / step\n const gStep = (_endColor.g - _startColor.g) / step\n const bStep = (_endColor.b - _startColor.b) / step\n const gradientColorArr = []\n\n for (let i = 0; i < step; i++) {\n const gradientColor = tinycolor({\n r: _startColor.r + rStep * i,\n g: _startColor.g + gStep * i,\n b: _startColor.b + bStep * i,\n }).toRgbString()\n gradientColorArr.push(gradientColor)\n }\n return gradientColorArr\n}\n\nconst getPresetColors = () => {\n const presetColors = []\n for (const color of presetColorConfig) {\n presetColors.push(gradient(color[1], color[0], 5))\n }\n return presetColors\n}\n\nexport default defineComponent({\n name: 'color-picker',\n components: {\n Alpha,\n Checkboard,\n Hue,\n Saturation,\n EditableInput,\n },\n emits: ['update:modelValue'],\n props: {\n modelValue: {\n type: String,\n default: '#e86b99',\n },\n },\n setup(props, { emit }) {\n const hue = ref(-1)\n const recentColors = ref([])\n\n const color = computed({\n get() {\n return tinycolor(props.modelValue).toRgb()\n },\n set(rgba: ColorFormats.RGBA) {\n const rgbaString = `rgba(${[rgba.r, rgba.g, rgba.b, rgba.a].join(',')})`\n emit('update:modelValue', rgbaString)\n },\n })\n\n const themeColors = ['#000000', '#ffffff', '#eeece1', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c']\n const standardColors = ['#c21401', '#ff1e02', '#ffc12a', '#ffff3a', '#90cf5b', '#00af57', '#00afee', '#0071be', '#00215f', '#72349d']\n const presetColors = getPresetColors()\n\n const currentColor = computed(() => {\n return `rgba(${[color.value.r, color.value.g, color.value.b, color.value.a].join(',')})`\n })\n\n const selectPresetColor = (colorString: string) => {\n hue.value = tinycolor(colorString).toHsl().h\n emit('update:modelValue', colorString)\n }\n\n // 每次选择非预设颜色时,需要将该颜色加入到最近使用列表中\n const updateRecentColorsCache = debounce(function() {\n const _color = tinycolor(color.value).toRgbString()\n if (!recentColors.value.includes(_color)) {\n recentColors.value = [_color, ...recentColors.value]\n\n const maxLength = 10\n if (recentColors.value.length > maxLength) {\n recentColors.value = recentColors.value.slice(0, maxLength)\n }\n }\n }, 300, { trailing: true })\n\n onMounted(() => {\n const recentColorsCache = localStorage.getItem(RECENT_COLORS)\n if (recentColorsCache) recentColors.value = JSON.parse(recentColorsCache)\n })\n\n watch(recentColors, () => {\n const recentColorsCache = JSON.stringify(recentColors.value)\n localStorage.setItem(RECENT_COLORS, recentColorsCache)\n })\n\n const changeColor = (value: ColorFormats.RGBA | ColorFormats.HSLA | ColorFormats.HSVA) => {\n if ('h' in value) {\n hue.value = value.h\n color.value = tinycolor(value).toRgb()\n }\n else {\n hue.value = tinycolor(value).toHsl().h\n color.value = value\n }\n\n updateRecentColorsCache()\n }\n\n return {\n themeColors,\n standardColors,\n presetColors,\n color,\n hue,\n currentColor,\n changeColor,\n selectPresetColor,\n recentColors,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=210672ee&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=210672ee&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-210672ee\"\n\nexport default script","\n\n\n\n","\nexport default {\n name: 'fullscreen-spin',\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n tip: {\n type: String,\n default: '',\n },\n },\n}\n","import { render } from \"./FullscreenSpin.vue?vue&type=template&id=6275c730&scoped=true\"\nimport script from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\nexport * from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\n\nimport \"./FullscreenSpin.vue?vue&type=style&index=0&id=6275c730&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6275c730\"\n\nexport default script","import { App } from 'vue'\n\nimport FileInput from '@/components/FileInput.vue'\nimport SvgWrapper from '@/components/SvgWrapper.vue'\nimport CheckboxButton from '@/components/CheckboxButton.vue'\nimport CheckboxButtonGroup from '@/components/CheckboxButtonGroup.vue'\nimport ColorPicker from '@/components/ColorPicker/index.vue'\nimport FullscreenSpin from '@/components/FullscreenSpin.vue'\n\nexport default {\n install(app: App) {\n app.component('FileInput', FileInput)\n app.component('SvgWrapper', SvgWrapper)\n app.component('CheckboxButton', CheckboxButton)\n app.component('CheckboxButtonGroup', CheckboxButtonGroup)\n app.component('ColorPicker', ColorPicker)\n app.component('FullscreenSpin', FullscreenSpin)\n }\n}\n","\n\n\n\n","\n\n\n\n","\nimport { PropType, defineComponent } from 'vue'\nimport { ContextmenuItem } from './types'\n\nexport default defineComponent({\n name: 'menu-content',\n props: {\n menus: {\n type: Array as PropType,\n required: true,\n },\n handleClickMenuItem: {\n type: Function,\n required: true,\n },\n },\n})\n","import { render } from \"./MenuContent.vue?vue&type=template&id=eb1555e8&scoped=true\"\nimport script from \"./MenuContent.vue?vue&type=script&lang=ts\"\nexport * from \"./MenuContent.vue?vue&type=script&lang=ts\"\n\nimport \"./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-eb1555e8\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { ContextmenuItem, Axis } from './types'\n\nimport MenuContent from './MenuContent.vue'\n\nexport default defineComponent({\n name: 'contextmenu',\n components: {\n MenuContent,\n },\n props: {\n axis: {\n type: Object as PropType,\n required: true,\n },\n el: {\n type: Object as PropType,\n required: true,\n },\n menus: {\n type: Array as PropType,\n required: true,\n },\n removeContextmenu: {\n type: Function,\n required: true,\n },\n },\n setup(props) {\n const style = computed(() => {\n const MENU_WIDTH = 170\n const MENU_HEIGHT = 30\n const DIVIDER_HEIGHT = 11\n const PADDING = 5\n\n const { x, y } = props.axis\n const menuCount = props.menus.filter(menu => !(menu.divider || menu.hide)).length\n const dividerCount = props.menus.filter(menu => menu.divider).length\n\n const menuWidth = MENU_WIDTH\n const menuHeight = menuCount * MENU_HEIGHT + dividerCount * DIVIDER_HEIGHT + PADDING * 2\n\n const screenWidth = document.body.clientWidth\n const screenHeight = document.body.clientHeight\n\n return {\n left: screenWidth <= x + menuWidth ? x - menuWidth : x,\n top: screenHeight <= y + menuHeight ? y - menuHeight : y,\n }\n })\n\n const handleClickMenuItem = (item: ContextmenuItem) => {\n if (item.disable) return\n if (item.children && !item.handler) return\n if (item.handler) item.handler(props.el)\n props.removeContextmenu()\n }\n\n return {\n style,\n handleClickMenuItem,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=83da70aa\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=83da70aa&lang=scss\"\nscript.render = render\n\nexport default script","import { Directive, createVNode, render, DirectiveBinding } from 'vue'\nimport ContextmenuComponent from '@/components/Contextmenu/index.vue'\n\nconst CTX_CONTEXTMENU_HANDLER = 'CTX_CONTEXTMENU_HANDLER'\n\nconst contextmenuListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n event.stopPropagation()\n event.preventDefault()\n\n const menus = binding.value(el)\n if (!menus) return\n\n let container: HTMLDivElement | null = null\n\n // 移除右键菜单并取消相关的事件监听\n const removeContextmenu = () => {\n if (container) {\n document.body.removeChild(container)\n container = null\n }\n el.classList.remove('contextmenu-active')\n document.body.removeEventListener('scroll', removeContextmenu) \n window.removeEventListener('resize', removeContextmenu)\n }\n\n // 创建自定义菜单\n const options = {\n axis: { x: event.x, y: event.y },\n el,\n menus,\n removeContextmenu,\n }\n container = document.createElement('div')\n const vm = createVNode(ContextmenuComponent, options, null)\n render(vm, container)\n document.body.appendChild(container)\n\n // 为目标节点添加菜单激活状态的className\n el.classList.add('contextmenu-active')\n\n // 页面变化时移除菜单\n document.body.addEventListener('scroll', removeContextmenu)\n window.addEventListener('resize', removeContextmenu)\n}\n\nconst ContextmenuDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CONTEXTMENU_HANDLER] = (event: MouseEvent) => contextmenuListener(el, event, binding)\n el.addEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n },\n\n unmounted(el: HTMLElement) {\n if (el && el[CTX_CONTEXTMENU_HANDLER]) {\n el.removeEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n delete el[CTX_CONTEXTMENU_HANDLER]\n }\n },\n}\n\nexport default ContextmenuDirective","import { Directive, DirectiveBinding } from 'vue'\n\nconst CTX_CLICK_OUTSIDE_HANDLER = 'CTX_CLICK_OUTSIDE_HANDLER'\n\nconst clickListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n const handler = binding.value\n\n const path = event.composedPath()\n const isClickOutside = path ? path.indexOf(el) < 0 : !el.contains(event.target as HTMLElement)\n\n if (!isClickOutside) return\n handler(event)\n}\n\nconst ClickOutsideDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CLICK_OUTSIDE_HANDLER] = (event: MouseEvent) => clickListener(el, event, binding)\n setTimeout(() => {\n document.addEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n }, 0)\n },\n \n unmounted(el: HTMLElement) {\n if (el[CTX_CLICK_OUTSIDE_HANDLER]) {\n document.removeEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n delete el[CTX_CLICK_OUTSIDE_HANDLER]\n }\n },\n}\n\nexport default ClickOutsideDirective","import { App } from 'vue'\n\nimport Contextmenu from './contextmenu'\nimport ClickOutside from './clickOutside'\n\nexport default {\n install(app: App) {\n app.directive('contextmenu', Contextmenu)\n app.directive('click-outside', ClickOutside)\n }\n}\n","import { createApp } from 'vue'\nimport App from './App.vue'\nimport { store, key } from './store'\n\nimport '@icon-park/vue-next/styles/index.css'\nimport 'prosemirror-view/style/prosemirror.css'\nimport 'animate.css'\n\nimport '@/assets/styles/prosemirror.scss'\nimport '@/assets/styles/global.scss'\nimport '@/assets/styles/antd.scss'\nimport '@/assets/styles/font.scss'\n\nimport Icon from '@/plugins/icon'\nimport Component from '@/plugins/component'\nimport Directive from '@/plugins/directive'\n\nimport {\n InputNumber,\n Divider,\n Button,\n Tooltip,\n Popover,\n Slider,\n Select,\n Switch,\n Radio,\n Input,\n Modal,\n Dropdown,\n Menu,\n Checkbox,\n Drawer,\n Spin,\n} from 'ant-design-vue'\n\nconst app = createApp(App)\n\napp.component('InputNumber', InputNumber)\napp.component('Divider', Divider)\napp.component('Button', Button)\napp.component('ButtonGroup', Button.Group)\napp.component('Tooltip', Tooltip)\napp.component('Popover', Popover)\napp.component('Slider', Slider)\napp.component('Select', Select)\napp.component('SelectOption', Select.Option)\napp.component('SelectOptGroup', Select.OptGroup)\napp.component('Switch', Switch)\napp.component('Radio', Radio)\napp.component('RadioGroup', Radio.Group)\napp.component('RadioButton', Radio.Button)\napp.component('Input', Input)\napp.component('InputGroup', Input.Group)\napp.component('Modal', Modal)\napp.component('Dropdown', Dropdown)\napp.component('Menu', Menu)\napp.component('MenuItem', Menu.Item)\napp.component('Checkbox', Checkbox)\napp.component('Drawer', Drawer)\napp.component('Spin', Spin)\n\napp.use(Icon)\napp.use(Component)\napp.use(Directive)\n\napp.use(store, key)\napp.mount('#app')\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Chart.vue?vue&type=style&index=1&id=1f297efe&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementOutline.vue?vue&type=style&index=0&id=2ddaa919&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=de85ffe4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageElementOperate.vue?vue&type=style&index=0&id=7dc35c8e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=13ca7328&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MultiSelectOperate.vue?vue&type=style&index=0&id=4def6455&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ShapePool.vue?vue&type=style&index=0&id=612b80ef&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LinkHandler.vue?vue&type=style&index=0&id=9d9e1336&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementCreateSelection.vue?vue&type=style&index=0&id=04472140&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./HotkeyDoc.vue?vue&type=style&index=0&id=47d0351b&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ChartPool.vue?vue&type=style&index=0&id=ab6a141a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./FileInput.vue?vue&type=style&index=0&id=d6089858&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./GridLines.vue?vue&type=style&index=0&id=1d945f13&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ViewportBackground.vue?vue&type=style&index=0&id=a9ca1b50&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=59ae6536&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BorderLine.vue?vue&type=style&index=0&id=630e246b&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file diff --git a/js/app.682d8803.js b/js/app.682d8803.js new file mode 100644 index 00000000..3e42c5ef --- /dev/null +++ b/js/app.682d8803.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var o,a,r=t[0],i=t[1],u=t[2],s=0,f=[];sPPTIST

",rotate:0,defaultFontName:"Microsoft Yahei",defaultColor:"#333"},{type:"text",id:"7stmVP",left:355,top:253.25,width:585,height:56,content:"

基于 Vue 3.x + TypeScript 的在线演示文稿应用

",rotate:0,defaultFontName:"Microsoft Yahei",defaultColor:"#333"},{type:"line",id:"FnpZs4",left:361,top:238,start:[0,0],end:[549,0],points:["",""],color:"#5b9bd5",style:"solid",width:2}],background:{type:"solid",color:"#ffffff"}}],k={themeColor:"#5b9bd5",fontColor:"#333",fontName:"Microsoft Yahei",backgroundColor:"#fff"},I=n("5530"),w=n("b85c"),S=(n("b0c0"),n("1913"),function(e,t){return Array.isArray(e)&&e.indexOf(t.type)>-1||t.type===e}),N=function(e,t){for(var n=e.depth;n>0;n--){var o=e.node(n);if(t(o))return{pos:n>0?e.before(n):0,start:e.start(n),depth:n,node:o}}},T=function(e){return function(t){return N(t.$from,e)}},L=function(e){return function(t){return T((function(t){return S(e,t)}))(t)}},V=function(e,t){var n=t.schema.nodes[e];return!!L(n)(t.selection)},_=function(e){var t,n,o=e.state,c=o.selection,l=o.doc,a=c.from,r=l.nodeAt(a)||l.nodeAt(a-1);return null!==(t=r)&&void 0!==t&&t.lastChild&&(r=r.lastChild),(null===(n=r)||void 0===n?void 0:n.marks)||[]},B=function(e,t,n){var o,c=Object(w["a"])(e);try{for(c.s();!(o=c.n()).done;){var l=o.value;if(l.type.name===t&&l.attrs[n])return l.attrs[n]}}catch(a){c.e(a)}finally{c.f()}return null},D=function(e,t){var n,o=Object(w["a"])(e);try{for(o.s();!(n=o.n()).done;){var c=n.value;if(c.type.name===t)return!0}}catch(l){o.e(l)}finally{o.f()}return!1},M=function(e,t){var n=e.state,o=n.selection,c=n.doc,l=o.from,a=o.to,r=!0,i="";return c.nodesBetween(l,a,(function(e){return r&&e.attrs[t]&&(r=!1,i=e.attrs[t]),r})),i},A={color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",align:"left"},z=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=Object(I["a"])(Object(I["a"])({},A),t);var n=_(e),o=D(n,"strong"),c=D(n,"em"),l=D(n,"underline"),a=D(n,"strikethrough"),r=D(n,"superscript"),i=D(n,"subscript"),u=D(n,"code"),d=B(n,"forecolor","color")||t.color,s=B(n,"backcolor","backcolor")||t.backcolor,f=B(n,"fontsize","fontsize")||t.fontsize,p=B(n,"fontname","fontname")||t.fontname,m=M(e,"align")||t.align,b=V("bullet_list",e.state),v=V("ordered_list",e.state),O=V("blockquote",e.state);return{bold:o,em:c,underline:l,strikethrough:a,superscript:r,subscript:i,code:u,color:d,backcolor:s,fontsize:f,fontname:p,align:m,bulletList:b,orderedList:v,blockquote:O}},P={bold:!1,em:!1,underline:!1,strikethrough:!1,superscript:!1,subscript:!1,code:!1,color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",align:"left",bulletList:!1,orderedList:!1,blockquote:!1},R={activeElementIdList:[],handleElementId:"",activeGroupElementId:"",canvasPercentage:90,canvasScale:1,thumbnailsFocus:!1,editorAreaFocus:!1,disableHotkeys:!1,showGridLines:!1,creatingElement:null,availableFonts:[],toolbarState:"slideDesign",viewportRatio:.5625,theme:k,slides:x,slideIndex:0,selectedSlidesIndex:[],snapshotCursor:-1,snapshotLength:0,ctrlKeyState:!1,shiftKeyState:!1,screening:!1,clipingImageElementId:"",richTextAttrs:P,selectedTableCells:[],isScaling:!1,editingShapeElementId:""},F=(n("d81d"),n("4de4"),n("caad"),n("2532"),n("7db0"),n("66cb")),H=n.n(F),U=[{id:"template",elements:[{type:"shape",id:"4cbRxp",left:0,top:200,width:546,height:362.5,viewBox:200,path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,opacity:.7,rotate:0},{type:"shape",id:"ookHrf",left:0,top:0,width:300,height:320,viewBox:200,path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,flipV:!0,rotate:0},{type:"text",id:"AkIh3E",left:355,top:95.11111111111111,width:585,height:116,lineHeight:1.2,content:"

输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",wordSpace:6},{type:"text",id:"7stmVP",left:355,top:253.25,width:585,height:56,content:"

请在此处输入副标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"line",id:"FnpZs4",left:361,top:238,start:[0,0],end:[549,0],points:["",""],color:"{{themeColor}}",style:"solid",width:2}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"ptNnUJ",left:145,top:148,width:711,height:77,lineHeight:1.2,content:"

在此处添加标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"mRHvQN",left:207.50000000000003,top:249.84259259259264,width:585,height:56,content:"

在此处添加副标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"line",id:"7CQDwc",left:323.09259259259267,top:238.33333333333334,start:[0,0],end:[354.8148148148148,0],points:["",""],color:"{{themeColor}}",style:"solid",width:4},{type:"shape",id:"09wqWw",left:-27.648148148148138,top:432.73148148148147,width:1056.2962962962963,height:162.96296296296296,viewBox:200,path:"M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"vSheCJ",left:183.5185185185185,top:175.5092592592593,width:605.1851851851851,height:185.18518518518516,viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0},{type:"shape",id:"Mpwv7x",left:211.29629629629628,top:201.80555555555557,width:605.1851851851851,height:185.18518518518516,viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,opacity:.7},{type:"text",id:"WQOTAp",left:304.9074074074074,top:198.10185185185182,width:417.9629629629629,height:140,content:"

感谢观看

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",wordSpace:5}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"MZVO1kkj",elements:[{type:"shape",id:"cql0h8",left:0,top:0,width:352.59259259259255,height:562.5,viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0},{type:"shape",id:"_RTaF4",left:171.4814814814814,top:100.13888888888887,width:362.22222222222223,height:362.22222222222223,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"rgba(255,255,255,0)",fixedRatio:!1,rotate:0,outline:{width:10,color:"{{backgroundColor}}",style:"solid"}},{type:"shape",id:"UZfo8N",left:216.66666666666663,top:145.32407407407408,width:271.85185185185185,height:271.85185185185185,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{backgroundColor}}",fixedRatio:!1,rotate:0,text:{content:"

01

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"ysqtBg",left:561.4814814814814,top:100.1388888888889,width:359.25925925925924,height:80,content:"

在此处输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"lXsoHa",left:572.5925925925925,top:202.3611111111111,width:257.77777777777777,height:260,content:"
  1. 在此处输入内容

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",lineHeight:2,fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"EBBnTr",left:360.5996472663139,top:141.8496472663139,width:278.80070546737215,height:278.80070546737215,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:0,color:"{{backgroundColor}}",style:"solid"}},{type:"shape",id:"gDIWDH",left:456.4373897707231,top:98.287037037037,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

1

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"DUWT7E",left:317.037037037037,top:237.68738977072314,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

4

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"pbhn38",left:456.43738977072303,top:377.08774250440916,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

3

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"CvMKrO",left:595.8377425044091,top:237.6873897707231,width:87.12522045855381,height:87.12522045855381,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!0,rotate:0,outline:{width:4,color:"{{backgroundColor}}",style:"solid"},text:{content:"

2

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"adudHB",left:402.962962962963,top:39.39814814814815,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"9UpDwg",left:402.962962962963,top:473.1018518518518,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"GERdpB",left:111.48148148148151,top:256.25,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"text",id:"G5qoho",left:691.1111111111111,top:256.25,width:194.07407407407408,height:50,content:"

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"},{type:"shape",id:"vdZcI6",left:415.18518518518516,top:196.4351851851852,width:169.62962962962962,height:169.62962962962962,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{backgroundColor}}",fixedRatio:!1,rotate:0}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"tYUmrx",left:156.66666666666683,top:149.02777777777771,width:264.4444444444445,height:264.4444444444445,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

01

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"shape",id:"0GVHf8",left:342.2222222222223,top:217.17592592592587,width:128.14814814814812,height:128.14814814814812,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{backgroundColor}}",fixedRatio:!1,rotate:0},{type:"text",id:"BO33Sv",left:378.8888888888889,top:235.24999999999994,width:464.4444444444444,height:92,content:"

在此处添加标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"Hj7ttp",left:69.35185185185185,top:49.21759259259262,width:420,height:63,lineHeight:1.2,content:"

1.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"FmKMNB",left:69.35185185185185,top:129.28240740740745,width:420,height:384,content:"

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"rI7ZeO",left:510.64814814814815,top:49.21759259259262,width:420,height:63,lineHeight:1.2,content:"

2.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"KspwGc",left:510.64814814814815,top:129.28240740740745,width:420,height:384,content:"

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"Rx63Jo",left:69.35185185185179,top:51.71759259259262,width:420,height:58,lineHeight:1.2,content:"

1.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"ulyuzE",left:69.35185185185179,top:131.78240740740745,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"kr35Ca",left:510.6481481481481,top:51.71759259259262,width:420,height:58,lineHeight:1.2,content:"

2.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"BNQSpC",left:510.6481481481481,top:131.78240740740745,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"Vr38Nu",left:69.35185185185185,top:301.71759259259255,width:420,height:58,lineHeight:1.2,content:"

3.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"IwKRSu",left:69.35185185185185,top:381.7824074074074,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"0Opr1v",left:510.64814814814815,top:301.71759259259255,width:420,height:58,lineHeight:1.2,content:"

4.请输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{themeColor}}"},{type:"text",id:"4L9Uzz",left:510.64814814814815,top:381.7824074074074,width:420,height:129,content:"

在此处输入内容

在此处输入内容

在此处输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"text",id:"GdEGxg",left:134.53703703703704,top:127.25,width:152.77777777777777,height:308,lineHeight:1.8,content:"

请在此处输入标题

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",wordSpace:8,fill:"{{themeColor}}"},{type:"text",id:"y5sAfw",left:332.8703703703704,top:127.25,width:532.5925925925926,height:50,content:"

请在此处输入内容1

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"VeuocM",left:332.8703703703704,top:212.0648148148148,width:532.5925925925926,height:50,content:"

请在此处输入内容2

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"RyFWQe",left:332.8703703703704,top:296.8796296296296,width:532.5925925925926,height:50,content:"

请在此处输入内容3

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"text",id:"Q56viI",left:332.8703703703704,top:381.69444444444446,width:532.5925925925926,height:50,content:"

请在此处输入内容4

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}},{id:"template",elements:[{type:"shape",id:"SUWirT",left:73.8888888888889,top:64.21296296296302,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

1

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"YjzN1M",left:148.70370370370372,top:64.21296296296302,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"fS09I7",left:527.5925925925926,top:64.21296296296302,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

2

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"qCnfB1",left:602.4074074074074,top:64.21296296296302,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"difAAT",left:73.8888888888889,top:221.25000000000003,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

3

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"EUlvMo",left:148.70370370370372,top:221.25000000000003,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"US_9jB",left:527.5925925925926,top:221.25000000000003,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

4

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"243MnQ",left:602.4074074074074,top:221.25000000000003,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"Y_KUj0",left:73.8888888888889,top:378.287037037037,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

5

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"9GglMe",left:148.70370370370372,top:378.287037037037,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"},{type:"shape",id:"eSInje",left:527.5925925925926,top:378.287037037037,width:49.629629629629626,height:49.629629629629626,viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z",fill:"{{themeColor}}",fixedRatio:!1,rotate:0,text:{content:"

6

",defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",align:"middle"}},{type:"text",id:"0S3yUg",left:602.4074074074074,top:378.287037037037,width:323.7037037037037,height:120,content:"

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}}],G={currentSlide:function(e){return e.slides[e.slideIndex]||null},currentSlideAnimations:function(e){var t=e.slides[e.slideIndex];if(!t)return null;var n=t.animations;if(!n)return null;var o=t.elements,c=o.map((function(e){return e.id}));return n.filter((function(e){return c.includes(e.elId)}))},layouts:function(e){var t=e.theme,n=t.themeColor,o=t.fontColor,c=t.fontName,l=t.backgroundColor,a=H()(o).isDark()?"rgba(230, 230, 230, 0.5)":"rgba(180, 180, 180, 0.5)",r=JSON.stringify(U).replaceAll("{{themeColor}}",n).replaceAll("{{fontColor}}",o).replaceAll("{{fontName}}",c).replaceAll("{{backgroundColor}}",l).replaceAll("{{subColor}}",a);return JSON.parse(r)},activeElementList:function(e){var t=e.slides[e.slideIndex];return t&&t.elements?t.elements.filter((function(t){return e.activeElementIdList.includes(t.id)})):[]},handleElement:function(e){var t=e.slides[e.slideIndex];return t&&t.elements&&t.elements.find((function(t){return e.handleElementId===t.id}))||null},canUndo:function(e){return e.snapshotCursor>0},canRedo:function(e){return e.snapshotCursor=0&&n.snapshotCursori&&(l.push(c[0]),r--),r>=2&&te.snapshots.update(c[r-2],{index:n.slideIndex}),t.next=15,te.snapshots.bulkDelete(l);case 15:o(y.SET_SNAPSHOT_CURSOR,r-1),o(y.SET_SNAPSHOT_LENGTH,r);case 17:case"end":return t.stop()}}),t)})))()})),Object(q["a"])(W,E.UN_DO,(function(e){return Object(X["a"])(regeneratorRuntime.mark((function t(){var n,o,c,l,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(n=e.state,o=e.commit,!(n.snapshotCursor<=0)){t.next=3;break}return t.abrupt("return");case 3:return c=n.snapshotCursor-1,t.next=6,te.snapshots.orderBy("id").toArray();case 6:l=t.sent,a=l[c],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,o(y.SET_SLIDES,i),o(y.UPDATE_SLIDE_INDEX,u),o(y.SET_SNAPSHOT_CURSOR,c),o(y.SET_ACTIVE_ELEMENT_ID_LIST,[]);case 14:case"end":return t.stop()}}),t)})))()})),Object(q["a"])(W,E.RE_DO,(function(e){return Object(X["a"])(regeneratorRuntime.mark((function t(){var n,o,c,l,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(n=e.state,o=e.commit,!(n.snapshotCursor>=n.snapshotLength-1)){t.next=3;break}return t.abrupt("return");case 3:return c=n.snapshotCursor+1,t.next=6,te.snapshots.orderBy("id").toArray();case 6:l=t.sent,a=l[c],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,o(y.SET_SLIDES,i),o(y.UPDATE_SLIDE_INDEX,u),o(y.SET_SNAPSHOT_CURSOR,c),o(y.SET_ACTIVE_ELEMENT_ID_LIST,[]);case 14:case"end":return t.stop()}}),t)})))()})),W),oe=n("2909"),ce=(n("a434"),n("99af"),n("c740"),n("2ef0")),le=[{label:"Arial",value:"Arial"},{label:"微软雅黑",value:"Microsoft Yahei"},{label:"宋体",value:"SimSun"},{label:"黑体",value:"SimHei"},{label:"楷体",value:"KaiTi"},{label:"新宋体",value:"NSimSun"},{label:"仿宋",value:"FangSong"},{label:"苹方",value:"PingFang SC"},{label:"华文黑体",value:"STHeiti"},{label:"华文楷体",value:"STKaiti"},{label:"华文宋体",value:"STSong"},{label:"华文仿宋",value:"STFangSong"},{label:"华文中宋",value:"STZhongSong"},{label:"华文琥珀",value:"STHupo"},{label:"华文新魏",value:"STXinwei"},{label:"华文隶书",value:"STLiti"},{label:"华文行楷",value:"STXingkai"},{label:"冬青黑体",value:"Hiragino Sans GB"},{label:"兰亭黑",value:"Lantinghei SC"},{label:"偏偏体",value:"Hanzipen SC"},{label:"手札体",value:"Hannotate SC"},{label:"宋体",value:"Songti SC"},{label:"娃娃体",value:"Wawati SC"},{label:"行楷",value:"Xingkai SC"},{label:"圆体",value:"Yuanti SC"},{label:"华文细黑",value:"STXihei"},{label:"幼圆",value:"YouYuan"},{label:"隶书",value:"LiSu"}],ae=[{label:"仓耳小丸子",value:"仓耳小丸子"},{label:"优设标题黑",value:"优设标题黑"},{label:"峰广明锐体",value:"峰广明锐体"},{label:"摄图摩登小方体",value:"摄图摩登小方体"},{label:"站酷快乐体",value:"站酷快乐体"},{label:"字制区喜脉体",value:"字制区喜脉体"},{label:"素材集市康康体",value:"素材集市康康体"},{label:"联盟起艺卢帅正锐黑体",value:"联盟起艺卢帅正锐黑体"},{label:"素材集市酷方体",value:"素材集市酷方体"},{label:"途牛类圆体",value:"途牛类圆体"},{label:"锐字真言体",value:"锐字真言体"},{label:"阿里汉仪智能黑体",value:"阿里汉仪智能黑体"}],re=(n("a15b"),function(e){if("string"!==typeof e)return!1;var t="Arial";if(e.toLowerCase()===t.toLowerCase())return!0;var n=100,o=100,c=100,l="a",a=document.createElement("canvas"),r=a.getContext("2d");if(!r)return!1;a.width=o,a.height=c,r.textAlign="center",r.fillStyle="black",r.textBaseline="middle";var i=function(e){r.clearRect(0,0,o,c),r.font="".concat(n,"px ").concat(e,", ").concat(t),r.fillText(l,o/2,c/2);var a=r.getImageData(0,0,o,c).data;return[].slice.call(a).filter((function(e){return 0!==e}))};return i(t).join("")!==i(e).join("")}),ie=(Y={},Object(q["a"])(Y,y.SET_ACTIVE_ELEMENT_ID_LIST,(function(e,t){1===t.length?e.handleElementId=t[0]:e.handleElementId="",e.activeElementIdList=t})),Object(q["a"])(Y,y.SET_HANDLE_ELEMENT_ID,(function(e,t){e.handleElementId=t})),Object(q["a"])(Y,y.SET_ACTIVE_GROUP_ELEMENT_ID,(function(e,t){e.activeGroupElementId=t})),Object(q["a"])(Y,y.SET_CANVAS_PERCENTAGE,(function(e,t){e.canvasPercentage=t})),Object(q["a"])(Y,y.SET_CANVAS_SCALE,(function(e,t){e.canvasScale=t})),Object(q["a"])(Y,y.SET_THUMBNAILS_FOCUS,(function(e,t){e.thumbnailsFocus=t})),Object(q["a"])(Y,y.SET_EDITORAREA_FOCUS,(function(e,t){e.editorAreaFocus=t})),Object(q["a"])(Y,y.SET_DISABLE_HOTKEYS_STATE,(function(e,t){e.disableHotkeys=t})),Object(q["a"])(Y,y.SET_GRID_LINES_STATE,(function(e,t){e.showGridLines=t})),Object(q["a"])(Y,y.SET_CREATING_ELEMENT,(function(e,t){e.creatingElement=t})),Object(q["a"])(Y,y.SET_AVAILABLE_FONTS,(function(e){e.availableFonts=le.filter((function(e){return re(e.value)}))})),Object(q["a"])(Y,y.SET_TOOLBAR_STATE,(function(e,t){e.toolbarState=t})),Object(q["a"])(Y,y.SET_CLIPING_IMAGE_ELEMENT_ID,(function(e,t){e.clipingImageElementId=t})),Object(q["a"])(Y,y.SET_RICHTEXT_ATTRS,(function(e,t){e.richTextAttrs=t})),Object(q["a"])(Y,y.SET_SELECTED_TABLE_CELLS,(function(e,t){e.selectedTableCells=t})),Object(q["a"])(Y,y.SET_SCALING_STATE,(function(e,t){e.isScaling=t})),Object(q["a"])(Y,y.SET_EDITING_SHAPE_ELEMENT_ID,(function(e,t){e.editingShapeElementId=t})),Object(q["a"])(Y,y.SET_THEME,(function(e,t){e.theme=Object(I["a"])(Object(I["a"])({},e.theme),t)})),Object(q["a"])(Y,y.SET_VIEWPORT_RATIO,(function(e,t){e.viewportRatio=t})),Object(q["a"])(Y,y.SET_SLIDES,(function(e,t){e.slides=t})),Object(q["a"])(Y,y.ADD_SLIDE,(function(e,t){var n,o=Array.isArray(t)?t:[t],c=e.slideIndex+1;(n=e.slides).splice.apply(n,[c,0].concat(Object(oe["a"])(o))),e.slideIndex=c})),Object(q["a"])(Y,y.UPDATE_SLIDE,(function(e,t){var n=e.slideIndex;e.slides[n]=Object(I["a"])(Object(I["a"])({},e.slides[n]),t)})),Object(q["a"])(Y,y.DELETE_SLIDE,(function(e,t){for(var n=Array.isArray(t)?t:[t],o=[],c=function(t){var c=e.slides.findIndex((function(e){return e.id===n[t]}));o.push(c)},l=0;lr&&(a=r),e.slideIndex=a,e.slides=e.slides.filter((function(e){return!n.includes(e.id)}))})),Object(q["a"])(Y,y.UPDATE_SLIDE_INDEX,(function(e,t){e.slideIndex=t})),Object(q["a"])(Y,y.UPDATE_SELECTED_SLIDES_INDEX,(function(e,t){e.selectedSlidesIndex=t})),Object(q["a"])(Y,y.ADD_ELEMENT,(function(e,t){var n=Array.isArray(t)?t:[t],o=e.slides[e.slideIndex].elements,c=[].concat(Object(oe["a"])(o),Object(oe["a"])(n));e.slides[e.slideIndex].elements=c})),Object(q["a"])(Y,y.UPDATE_ELEMENT,(function(e,t){var n=t.id,o=t.props,c="string"===typeof n?[n]:n,l=e.slideIndex,a=e.slides[l],r=a.elements.map((function(e){return c.includes(e.id)?Object(I["a"])(Object(I["a"])({},e),o):e}));e.slides[l].elements=r})),Object(q["a"])(Y,y.REMOVE_ELEMENT_PROPS,(function(e,t){var n=t.id,o=t.propName,c="string"===typeof o?[o]:o,l=e.slideIndex,a=e.slides[l],r=a.elements.map((function(e){return e.id===n?Object(ce["omit"])(e,c):e}));e.slides[l].elements=r})),Object(q["a"])(Y,y.SET_SNAPSHOT_CURSOR,(function(e,t){e.snapshotCursor=t})),Object(q["a"])(Y,y.SET_SNAPSHOT_LENGTH,(function(e,t){e.snapshotLength=t})),Object(q["a"])(Y,y.SET_CTRL_KEY_STATE,(function(e,t){e.ctrlKeyState=t})),Object(q["a"])(Y,y.SET_SHIFT_KEY_STATE,(function(e,t){e.shiftKeyState=t})),Object(q["a"])(Y,y.SET_SCREENING,(function(e,t){e.screening=t})),Y),ue=Symbol(),de=Object(C["a"])({state:R,getters:G,mutations:ie,actions:ne}),se=function(){return Object(C["b"])(ue)};Object(j["pushScopeId"])("data-v-55178b6a");var fe,pe,me,be,ve,Oe,he={class:"pptist-editor"},je={class:"layout-content"},ge={class:"layout-content-center"};function ye(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("EditorHeader"),r=Object(j["resolveComponent"])("Thumbnails"),i=Object(j["resolveComponent"])("CanvasTool"),u=Object(j["resolveComponent"])("Canvas"),d=Object(j["resolveComponent"])("Remark"),s=Object(j["resolveComponent"])("Toolbar");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",he,[Object(j["createVNode"])(a,{class:"layout-header"}),Object(j["createElementVNode"])("div",je,[Object(j["createVNode"])(r,{class:"layout-content-left"}),Object(j["createElementVNode"])("div",ge,[Object(j["createVNode"])(i,{class:"center-top"}),Object(j["createVNode"])(u,{class:"center-body",style:Object(j["normalizeStyle"])({height:"calc(100% - ".concat(e.remarkHeight+40,"px)")})},null,8,["style"]),Object(j["createVNode"])(d,{class:"center-bottom",height:e.remarkHeight,"onUpdate:height":t[0]||(t[0]=function(t){return e.remarkHeight=t}),style:Object(j["normalizeStyle"])({height:"".concat(e.remarkHeight,"px")})},null,8,["height","style"])]),Object(j["createVNode"])(s,{class:"layout-content-right"})])])}Object(j["popScopeId"])(),function(e){e["UP"]="up",e["DOWN"]="down",e["TOP"]="top",e["BOTTOM"]="bottom"}(fe||(fe={})),function(e){e["TOP"]="top",e["BOTTOM"]="bottom",e["LEFT"]="left",e["RIGHT"]="right",e["VERTICAL"]="vertical",e["HORIZONTAL"]="horizontal",e["CENTER"]="center"}(pe||(pe={})),function(e){e["T"]="top",e["B"]="bottom",e["L"]="left",e["R"]="right"}(me||(me={})),function(e){e["LEFT_TOP"]="left-top",e["TOP"]="top",e["RIGHT_TOP"]="right-top",e["LEFT"]="left",e["RIGHT"]="right",e["LEFT_BOTTOM"]="left-bottom",e["BOTTOM"]="bottom",e["RIGHT_BOTTOM"]="right-bottom"}(be||(be={})),function(e){e["START"]="start",e["END"]="end",e["MID"]="mid"}(ve||(ve={})),function(e){e["C"]="C",e["X"]="X",e["Z"]="Z",e["Y"]="Y",e["A"]="A",e["G"]="G",e["L"]="L",e["F"]="F",e["D"]="D",e["B"]="B",e["MINUS"]="-",e["EQUAL"]="=",e["DIGIT_0"]="0",e["DELETE"]="DELETE",e["UP"]="ARROWUP",e["DOWN"]="ARROWDOWN",e["LEFT"]="ARROWLEFT",e["RIGHT"]="ARROWRIGHT",e["ENTER"]="ENTER",e["SPACE"]=" ",e["TAB"]="TAB",e["BACKSPACE"]="BACKSPACE"}(Oe||(Oe={}));var Ee=[{type:"通用",children:[{label:"剪切",value:"Ctrl + X"},{label:"复制",value:"Ctrl + C"},{label:"粘贴",value:"Ctrl + V"},{label:"快速复制粘贴",value:"Ctrl + D"},{label:"全选",value:"Ctrl + A"},{label:"撤销",value:"Ctrl + Z"},{label:"恢复",value:"Ctrl + Y"},{label:"删除",value:"Delete / Backspace"},{label:"多选",value:"按住 Ctrl 或 Shift"}]},{type:"幻灯片放映",children:[{label:"开始放映幻灯片",value:"Ctrl + F"},{label:"切换上一页",value:"↑ / ←"},{label:"切换下一页",value:"↓ / → / Enter / Space"},{label:"退出放映",value:"ESC"}]},{type:"幻灯片编辑",children:[{label:"新建幻灯片",value:"Enter"},{label:"缩放画布",value:"Ctrl + 鼠标滚动"},{label:"放大画布",value:"Ctrl + ="},{label:"缩小画布",value:"Ctrl + -"},{label:"缩放画布到合适大小",value:"Ctrl + 0"},{label:"编辑上一页",value:"↑ / ← / 鼠标上滚"},{label:"编辑下一页",value:"↓ / → / 鼠标下滚"}]},{type:"元素操作",children:[{label:"移动",value:"↑ / ← / ↓ / →"},{label:"锁定",value:"Ctrl + L"},{label:"组合",value:"Ctrl + G"},{label:"取消组合",value:"Ctrl + Shift + G"},{label:"置顶层",value:"Alt + F"},{label:"置底层",value:"Alt + B"},{label:"锁定宽高比例",value:"按住 Ctrl 或 Shift"},{label:"创建水平 / 垂直线条",value:"按住 Ctrl 或 Shift"},{label:"切换焦点元素",value:"Tab"},{label:"确认图片裁剪",value:"Enter"}]},{type:"表格编辑",children:[{label:"聚焦到下一个单元格",value:"Tab"},{label:"在上方插入一行",value:"Ctrl + ↑"},{label:"在下方插入一行",value:"Ctrl + ↓"},{label:"在左侧插入一列",value:"Ctrl + ←"},{label:"在右侧插入一列",value:"Ctrl + →"}]},{type:"图表数据编辑",children:[{label:"聚焦到下一行",value:"Enter"}]},{type:"文本编辑",children:[{label:"加粗",value:"Ctrl + B"},{label:"斜体",value:"Ctrl + I"},{label:"下划线",value:"Ctrl + U"},{label:"删除线",value:"Ctrl + D"}]}],Ce=(n("3b18"),n("f64c")),xe=(n("a630"),n("3ca3"),function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6,t="_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",n=t.length,o="",c=0;c"),o=n.split("
"),c="",l=Object(w["a"])(o);try{for(l.s();!(t=l.n()).done;){var a=t.value;a&&(c+="
".concat(a,"
"))}}catch(r){l.e(r)}finally{l.f()}return c}),We=function(){var e=se(),t=Object(ce["debounce"])((function(){e.dispatch(E.ADD_SNAPSHOT)}),300,{trailing:!0}),n=Object(ce["throttle"])((function(){e.dispatch(E.RE_DO)}),100,{leading:!0,trailing:!1}),o=Object(ce["throttle"])((function(){e.dispatch(E.UN_DO)}),100,{leading:!0,trailing:!1});return{addHistorySnapshot:t,redo:n,undo:o}},Ye=(n("cb29"),function(e){return new Promise((function(t){var n=document.createElement("img");n.src=e,n.style.opacity="0",document.body.appendChild(n),n.onload=function(){var e=n.clientWidth,o=n.clientHeight;n.onload=null,n.onerror=null,document.body.removeChild(n),t({width:e,height:o})},n.onerror=function(){n.onload=null,n.onerror=null}}))}),Ze=function(e){return new Promise((function(t){var n=new FileReader;n.addEventListener("load",(function(){t(n.result)})),n.readAsDataURL(e)}))},Je=1e3,Ke=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.theme.themeColor})),n=Object(j["computed"])((function(){return e.state.theme.fontColor})),o=Object(j["computed"])((function(){return e.state.theme.fontName})),c=Object(j["computed"])((function(){return e.state.viewportRatio})),l=Object(j["computed"])((function(){return e.state.creatingElement})),a=We(),r=a.addHistorySnapshot,i=function(t){e.commit(y.ADD_ELEMENT,t),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[t.id]),l.value&&e.commit(y.SET_CREATING_ELEMENT,null),setTimeout((function(){e.commit(y.SET_EDITORAREA_FOCUS,!0)}),0),r()},u=function(e){Ye(e).then((function(t){var n=t.width,o=t.height,l=o/n;lJe?(n=Je,o=n*l):o>Je*c.value&&(o=Je*c.value,n=o/l),i({type:"image",id:xe(),src:e,width:n,height:o,left:(Je-n)/2,top:(Je*c.value-o)/2,fixedRatio:!0,rotate:0})}))},d=function(e){i({type:"chart",id:xe(),chartType:e,left:300,top:81.25,width:400,height:400,themeColor:[t.value],gridColor:n.value,data:{labels:["类别1","类别2","类别3","类别4","类别5"],legends:["系列1"],series:[[12,19,5,2,18]]}})},s=function(e,l){for(var a={fontname:o.value,color:n.value},r=[],u=0;u1&&void 0!==arguments[1]?arguments[1]:"请输入内容",c=e.left,l=e.top,a=e.width,r=e.height;i({type:"text",id:xe(),left:c,top:l,width:a,height:r,content:t,rotate:0,defaultFontName:o.value,defaultColor:n.value})},p=function(e,n){var o=e.left,c=e.top,l=e.width,a=e.height,r={type:"shape",id:xe(),left:o,top:c,width:l,height:a,viewBox:n.viewBox,path:n.path,fill:t.value,fixedRatio:!1,rotate:0};n.special&&(r.special=!0),i(r)},m=function(e,n){var o=e.left,c=e.top,l=e.start,a=e.end,r={type:"line",id:xe(),left:o,top:c,start:l,end:a,points:n.points,color:t.value,style:n.style,width:2};n.isBroken&&(r.broken=[(l[0]+a[0])/2,(l[1]+a[1])/2]),n.isCurve&&(r.curve=[(l[0]+a[0])/2,(l[1]+a[1])/2]),i(r)};return{createImageElement:u,createChartElement:d,createTableElement:s,createTextElement:f,createShapeElement:p,createLineElement:m}},Qe=function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=We(),o=n.addHistorySnapshot,c=Ke(),l=c.createTextElement,a=function(n){var c,l=He(n),a=l.groupIdMap,r=l.elIdMap,i=t.value.elements.map((function(e){return e.id})),u=Object(w["a"])(n);try{for(u.s();!(c=u.n()).done;){var d=c.value,s=i.includes(d.id);d.id=r[d.id],s&&(d.left=d.left+10,d.top=d.top+10),d.groupId&&(d.groupId=a[d.groupId])}}catch(f){u.e(f)}finally{u.f()}e.commit(y.ADD_ELEMENT,n),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,Object.values(r)),o()},r=function(t){var n=t.map((function(e){var t,n=He(e.elements),o=n.groupIdMap,c=n.elIdMap,l=Object(w["a"])(e.elements);try{for(l.s();!(t=l.n()).done;){var a=t.value;a.id=c[a.id],a.groupId&&(a.groupId=o[a.groupId])}}catch(d){l.e(d)}finally{l.f()}if(e.animations){var r,i=Object(w["a"])(e.animations);try{for(i.s();!(r=i.n()).done;){var u=r.value;u.elId=c[u.elId]}}catch(d){i.e(d)}finally{i.f()}}return Object(I["a"])(Object(I["a"])({},e),{},{id:xe(8)})}));e.commit(y.ADD_SLIDE,n),o()},i=function(e){l({left:0,top:0,width:600,height:50},e)},u=function(e,t){var n=(null===t||void 0===t?void 0:t.onlySlide)||!1,o=(null===t||void 0===t?void 0:t.onlyElements)||!1,c=De(e);if("object"===Object(qe["a"])(c)){var l=c.type,u=c.data;"elements"!==l||n?"slides"!==l||o||r(u):a(u)}else if(!o&&!n){var d=Xe(c);i(d)}};return{addSlidesFromClipboard:r,pasteTextClipboardData:u}},$e=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slideIndex})),n=Object(j["computed"])((function(){return e.state.theme})),o=Object(j["computed"])((function(){return e.state.slides})),c=Object(j["computed"])((function(){return e.getters.currentSlide})),l=Object(j["computed"])((function(){return[].concat(Object(oe["a"])(e.state.selectedSlidesIndex),[t.value])})),a=Object(j["computed"])((function(){return o.value.filter((function(e,t){return l.value.includes(t)}))})),r=Object(j["computed"])((function(){return a.value.map((function(e){return e.id}))})),i=Qe(),u=i.pasteTextClipboardData,d=i.addSlidesFromClipboard,s=We(),f=s.addHistorySnapshot,p=function(){var t={id:xe(8),elements:[],background:{type:"solid",color:n.value.backgroundColor}};e.commit(y.UPDATE_SLIDE_INDEX,0),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.SET_SLIDES,[t])},m=function(n){n===Oe.UP&&t.value>0?e.commit(y.UPDATE_SLIDE_INDEX,t.value-1):n===Oe.DOWN&&t.value0&&void 0!==arguments[0]?arguments[0]:r.value;o.value.length===t.length?p():e.commit(y.DELETE_SLIDE,t),e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,[]),f()},C=function(){var e=Object(oe["a"])(r.value);b(),E(e)},x=function(){var t=Array.from(Array(o.value.length),(function(e,t){return t}));e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,t)};return{resetSlides:p,updateSlideIndex:m,copySlide:b,pasteSlide:v,createSlide:O,createSlideByTemplate:h,copyAndPasteSlide:g,deleteSlide:E,cutSlide:C,selectAllSlide:x}},et=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=We(),c=o.addHistorySnapshot,l=function(){var o,l=JSON.parse(JSON.stringify(n.value.elements)),a=Object(w["a"])(l);try{for(a.s();!(o=a.n()).done;){var r=o.value;t.value.includes(r.id)&&(r.lock=!0)}}catch(i){a.e(i)}finally{a.f()}e.commit(y.UPDATE_SLIDE,{elements:l}),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),c()},a=function(t){var o=JSON.parse(JSON.stringify(n.value.elements));if(t.groupId){var l,a=Object(w["a"])(o);try{for(a.s();!(l=a.n()).done;){var r=l.value;r.groupId===t.groupId&&(r.lock=!1)}}catch(s){a.e(s)}finally{a.f()}return o}var i,u=Object(w["a"])(o);try{for(u.s();!(i=u.n()).done;){var d=i.value;if(d.id===t.id){d.lock=!1;break}}}catch(s){u.e(s)}finally{u.f()}e.commit(y.UPDATE_SLIDE,{elements:o}),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[t.id]),c()};return{lockElement:l,unlockElement:a}},tt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.activeGroupElementId})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=function(){if(t.value.length){var c=[];c=n.value?o.value.elements.filter((function(e){return e.id!==n.value})):o.value.elements.filter((function(e){return!t.value.includes(e.id)})),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SLIDE,{elements:c}),l()}},r=function(){o.value.elements.length&&(e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SLIDE,{elements:[]}),l())};return{deleteElement:a,deleteAllElements:r}},nt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=Object(j["computed"])((function(){return e.state.handleElementId})),l=We(),a=l.addHistorySnapshot,r=Object(j["computed"])((function(){if(n.value.length<2)return!1;var e=n.value[0].groupId;if(!e)return!0;var t=n.value.every((function(t){return(t.groupId&&t.groupId)===e}));return!t})),i=function(){var c;if(n.value.length){var l,r=JSON.parse(JSON.stringify(o.value.elements)),i=xe(),u=[],d=Object(w["a"])(r);try{for(d.s();!(l=d.n()).done;){var s=l.value;t.value.includes(s.id)&&(s.groupId=i,u.push(s))}}catch(b){d.e(b)}finally{d.f()}var f=r.findIndex((function(e){return e.id===u[u.length-1].id})),p=u.map((function(e){return e.id}));r=r.filter((function(e){return!p.includes(e.id)}));var m=f-u.length+1;(c=r).splice.apply(c,[m,0].concat(u)),e.commit(y.UPDATE_SLIDE,{elements:r}),a()}},u=function(){if(n.value.length){var l=n.value.some((function(e){return e.groupId}));if(l){var r,i=JSON.parse(JSON.stringify(o.value.elements)),u=Object(w["a"])(i);try{for(u.s();!(r=u.n()).done;){var d=r.value;t.value.includes(d.id)&&d.groupId&&delete d.groupId}}catch(f){u.e(f)}finally{u.f()}e.commit(y.UPDATE_SLIDE,{elements:i});var s=c.value?[c.value]:[];e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,s),a()}}};return{canCombine:r,combineElements:i,uncombineElements:u}},ot=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Qe(),c=o.pasteTextClipboardData,l=tt(),a=l.deleteElement,r=function(){if(t.value.length){var o=Le(JSON.stringify({type:"elements",data:n.value}));_e(o).then((function(){e.commit(y.SET_EDITORAREA_FOCUS,!0)}))}},i=function(){r(),a()},u=function(){Be().then((function(e){c(e)})).catch((function(e){return Ce["a"].warning(e)}))},d=function(){r(),u()};return{copyElement:r,cutElement:i,pasteElement:u,quickCopyElement:d}},ct=function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=function(){var n=t.value.elements.filter((function(e){return!e.lock})),o=n.map((function(e){return e.id}));e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,o)};return{selectAllElement:n}},lt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.activeGroupElementId})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=function(c){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=[],i=function(e){var t=e.left,n=e.top;switch(c){case Oe.LEFT:t-=a;break;case Oe.RIGHT:t+=a;break;case Oe.UP:n-=a;break;case Oe.DOWN:n+=a;break;default:break}return Object(I["a"])(Object(I["a"])({},e),{},{left:t,top:n})};r=n.value?o.value.elements.map((function(e){return n.value===e.id?i(e):e})):o.value.elements.map((function(e){return t.value.includes(e.id)?i(e):e})),e.commit(y.UPDATE_SLIDE,{elements:r}),l()};return{moveElement:a}},at=function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=We(),o=n.addHistorySnapshot,c=function(e,t){return{minLevel:e.findIndex((function(e){return e.id===t[0].id})),maxLevel:e.findIndex((function(e){return e.id===t[t.length-1].id}))}},l=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return;var i=n[r+1],u=n.splice(a,o.length);if(i.groupId){var d=n.filter((function(e){return e.groupId===i.groupId}));n.splice.apply(n,[a+d.length,0].concat(Object(oe["a"])(u)))}else n.splice.apply(n,[a+1,0].concat(Object(oe["a"])(u)))}else{var s=e.findIndex((function(e){return e.id===t.id}));if(s===e.length-1)return;var f=n[s+1],p=n.splice(s,1)[0];if(f.groupId){var m=n.filter((function(e){return e.groupId===f.groupId}));n.splice(s+m.length,0,p)}else n.splice(s+1,0,p)}return n},a=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n[a-1],i=n.splice(a,o.length);if(r.groupId){var u=n.filter((function(e){return e.groupId===r.groupId}));n.splice.apply(n,[a-u.length,0].concat(Object(oe["a"])(i)))}else n.splice.apply(n,[a-1,0].concat(Object(oe["a"])(i)))}else{var d=e.findIndex((function(e){return e.id===t.id}));if(0===d)return;var s=n[d-1],f=n.splice(d,1)[0];if(s.groupId){var p=n.filter((function(e){return e.groupId===s.groupId}));n.splice(d-p.length,0,f)}else n.splice(d-1,0,f)}return n},r=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return null;var i=n.splice(a,o.length);n.push.apply(n,Object(oe["a"])(i))}else{var u=e.findIndex((function(e){return e.id===t.id}));if(u===e.length-1)return null;n.splice(u,1),n.push(t)}return n},i=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n.splice(a,o.length);n.unshift.apply(n,Object(oe["a"])(r))}else{var i=e.findIndex((function(e){return e.id===t.id}));if(0===i)return;n.splice(i,1),n.unshift(t)}return n},u=function(n,c){var u;c===fe.UP?u=l(t.value.elements,n):c===fe.DOWN?u=a(t.value.elements,n):c===fe.TOP?u=r(t.value.elements,n):c===fe.BOTTOM&&(u=i(t.value.elements,n)),u&&(e.commit(y.UPDATE_SLIDE,{elements:u}),o())};return{orderElement:u}},rt=function(){var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen&&e.webkitRequestFullScreen()},it=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},ut=function(){return document.mozFullScreen||document.webkitIsFullScreen||document.webkitFullScreen},dt=function(){var e=se(),t=function(){rt(),e.commit(y.SET_SCREENING,!0)},n=function(){e.commit(y.UPDATE_SLIDE_INDEX,0),t()},o=function(){e.commit(y.SET_SCREENING,!1),ut()&&it()};return{enterScreening:t,enterScreeningFromStart:n,exitScreening:o}},st=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasPercentage})),n=function(n){var o=t.value,c=5,l=120,a=60;"+"===n&&o<=l&&(o+=c),"-"===n&&o>=a&&(o-=c),e.commit(y.SET_CANVAS_PERCENTAGE,o)},o=function(t){e.commit(y.SET_CANVAS_PERCENTAGE,t)};return{scaleCanvas:n,setCanvasPercentage:o}},ft=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.ctrlKeyState})),n=Object(j["computed"])((function(){return e.state.shiftKeyState})),o=Object(j["computed"])((function(){return e.state.disableHotkeys})),c=Object(j["computed"])((function(){return e.state.activeElementIdList})),l=Object(j["computed"])((function(){return e.getters.handleElement})),a=Object(j["computed"])((function(){return e.getters.currentSlide})),r=Object(j["computed"])((function(){return e.state.editorAreaFocus})),i=Object(j["computed"])((function(){return e.state.thumbnailsFocus})),u=$e(),d=u.updateSlideIndex,s=u.copySlide,f=u.createSlide,p=u.deleteSlide,m=u.cutSlide,b=u.copyAndPasteSlide,v=u.selectAllSlide,O=nt(),h=O.combineElements,g=O.uncombineElements,E=tt(),C=E.deleteElement,x=et(),k=x.lockElement,I=ot(),w=I.copyElement,S=I.cutElement,N=I.quickCopyElement,T=ct(),L=T.selectAllElement,V=lt(),_=V.moveElement,B=at(),D=B.orderElement,M=We(),A=M.redo,z=M.undo,P=dt(),R=P.enterScreening,F=st(),H=F.scaleCanvas,U=F.setCanvasPercentage,G=function(){c.value.length?w():i.value&&s()},q=function(){c.value.length?S():i.value&&m()},X=function(){c.value.length?N():i.value&&b()},W=function(){r.value&&L(),i.value&&v()},Y=function(){r.value&&k()},Z=function(){r.value&&h()},J=function(){r.value&&g()},K=function(){c.value.length?C():i.value&&p()},Q=function(e){c.value.length?_(e):e!==Oe.UP&&e!==Oe.DOWN||d(e)},$=function(e){l.value&&D(l.value,e)},ee=function(){i.value&&f()},te=function(){if(a.value.elements.length)if(l.value){var t=a.value.elements.findIndex((function(e){return e.id===l.value.id})),n=t>=a.value.elements.length-1?0:t+1,o=a.value.elements[n].id;e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[o])}else{var c=a.value.elements[0];e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[c.id])}},ne=function(c){var l=c.ctrlKey,a=c.shiftKey,u=c.altKey,d=c.metaKey,s=l||d,f=c.key.toUpperCase();if(s&&!t.value&&e.commit(y.SET_CTRL_KEY_STATE,!0),a&&!n.value&&e.commit(y.SET_SHIFT_KEY_STATE,!0),s&&f===Oe.F&&(c.preventDefault(),R(),e.commit(y.SET_CTRL_KEY_STATE,!1)),r.value||i.value){if(s&&f===Oe.C){if(o.value)return;c.preventDefault(),G()}if(s&&f===Oe.X){if(o.value)return;c.preventDefault(),q()}if(s&&f===Oe.D){if(o.value)return;c.preventDefault(),X()}if(s&&f===Oe.Z){if(o.value)return;c.preventDefault(),z()}if(s&&f===Oe.Y){if(o.value)return;c.preventDefault(),A()}if(s&&f===Oe.A){if(o.value)return;c.preventDefault(),W()}if(s&&f===Oe.L){if(o.value)return;c.preventDefault(),Y()}if(!a&&s&&f===Oe.G){if(o.value)return;c.preventDefault(),Z()}if(a&&s&&f===Oe.G){if(o.value)return;c.preventDefault(),J()}if(u&&f===Oe.F){if(o.value)return;c.preventDefault(),$(fe.TOP)}if(u&&f===Oe.B){if(o.value)return;c.preventDefault(),$(fe.BOTTOM)}if(f===Oe.DELETE||f===Oe.BACKSPACE){if(o.value)return;c.preventDefault(),K()}if(f===Oe.UP){if(o.value)return;c.preventDefault(),Q(Oe.UP)}if(f===Oe.DOWN){if(o.value)return;c.preventDefault(),Q(Oe.DOWN)}if(f===Oe.LEFT){if(o.value)return;c.preventDefault(),Q(Oe.LEFT)}if(f===Oe.RIGHT){if(o.value)return;c.preventDefault(),Q(Oe.RIGHT)}if(f===Oe.ENTER){if(o.value)return;c.preventDefault(),ee()}if(f===Oe.MINUS){if(o.value)return;c.preventDefault(),H("-")}if(f===Oe.EQUAL){if(o.value)return;c.preventDefault(),H("+")}if(f===Oe.DIGIT_0){if(o.value)return;c.preventDefault(),U(90)}if(f===Oe.TAB){if(o.value)return;c.preventDefault(),te()}}},oe=function(){t.value&&e.commit(y.SET_CTRL_KEY_STATE,!1),n.value&&e.commit(y.SET_SHIFT_KEY_STATE,!1)};Object(j["onMounted"])((function(){document.addEventListener("keydown",ne),document.addEventListener("keyup",oe),window.addEventListener("blur",oe)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",ne),document.removeEventListener("keyup",oe),window.removeEventListener("blur",oe)}))},pt=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.editorAreaFocus})),n=Object(j["computed"])((function(){return e.state.thumbnailsFocus})),o=Object(j["computed"])((function(){return e.state.disableHotkeys})),c=Qe(),l=c.pasteTextClipboardData,a=Ke(),r=a.createImageElement,i=function(e){Ze(e).then((function(e){return r(e)}))},u=function(e){if((t.value||n.value)&&!o.value&&e.clipboardData){var c=e.clipboardData.items,a=c[0];if(a){var r,u=Object(w["a"])(c);try{for(u.s();!(r=u.n()).done;){var d=r.value;if("file"===d.kind&&-1!==d.type.indexOf("image")){var s=d.getAsFile();return void(s&&i(s))}}}catch(f){u.e(f)}finally{u.f()}"string"===a.kind&&"text/plain"===a.type&&a.getAsString((function(e){return l(e)}))}}};Object(j["onMounted"])((function(){document.addEventListener("paste",u)})),Object(j["onUnmounted"])((function(){document.removeEventListener("paste",u)}))};Object(j["pushScopeId"])("data-v-13ca7328");var mt={class:"editor-header"},bt={class:"left"},vt={class:"menu-item"},Ot=Object(j["createTextVNode"])(),ht=Object(j["createElementVNode"])("span",{class:"text"},"文件",-1),jt=Object(j["createTextVNode"])("导出 JSON"),gt=Object(j["createTextVNode"])("导出 PPTX"),yt={class:"menu-item"},Et=Object(j["createTextVNode"])(),Ct=Object(j["createElementVNode"])("span",{class:"text"},"编辑",-1),xt=Object(j["createTextVNode"])("撤销"),kt=Object(j["createTextVNode"])("重做"),It=Object(j["createTextVNode"])("添加页面"),wt=Object(j["createTextVNode"])("删除页面"),St=Object(j["createTextVNode"])("重置幻灯片"),Nt={class:"menu-item"},Tt=Object(j["createTextVNode"])(),Lt=Object(j["createElementVNode"])("span",{class:"text"},"演示",-1),Vt=Object(j["createTextVNode"])("从头开始"),_t=Object(j["createTextVNode"])("从当前页开始"),Bt={class:"menu-item"},Dt=Object(j["createTextVNode"])(),Mt=Object(j["createElementVNode"])("span",{class:"text"},"帮助",-1),At=Object(j["createTextVNode"])("意见反馈"),zt=Object(j["createTextVNode"])("快捷键"),Pt={class:"right"},Rt={href:"https://github.com/pipipi-pikachu/PPTist",target:"_blank"},Ft={class:"menu-item"};function Ht(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconFolderClose"),r=Object(j["resolveComponent"])("MenuItem"),i=Object(j["resolveComponent"])("Menu"),u=Object(j["resolveComponent"])("Dropdown"),d=Object(j["resolveComponent"])("IconEdit"),s=Object(j["resolveComponent"])("IconPpt"),f=Object(j["resolveComponent"])("IconHelpcenter"),p=Object(j["resolveComponent"])("Tooltip"),m=Object(j["resolveComponent"])("IconGithub"),b=Object(j["resolveComponent"])("HotkeyDoc"),v=Object(j["resolveComponent"])("Drawer"),O=Object(j["resolveComponent"])("FullscreenSpin");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",mt,[Object(j["createElementVNode"])("div",bt,[Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[0]||(t[0]=function(t){return e.exportJSON()})},{default:Object(j["withCtx"])((function(){return[jt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.exportPPTX()})},{default:Object(j["withCtx"])((function(){return[gt]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",vt,[Object(j["createVNode"])(a),Ot,ht])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[2]||(t[2]=function(t){return e.undo()})},{default:Object(j["withCtx"])((function(){return[xt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[3]||(t[3]=function(t){return e.redo()})},{default:Object(j["withCtx"])((function(){return[kt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[4]||(t[4]=function(t){return e.createSlide()})},{default:Object(j["withCtx"])((function(){return[It]})),_:1}),Object(j["createVNode"])(r,{onClick:t[5]||(t[5]=function(t){return e.deleteSlide()})},{default:Object(j["withCtx"])((function(){return[wt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[6]||(t[6]=function(t){return e.toggleGridLines()})},{default:Object(j["withCtx"])((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e.showGridLines?"关闭网格线":"打开网格线"),1)]})),_:1}),Object(j["createVNode"])(r,{onClick:t[7]||(t[7]=function(t){return e.resetSlides()})},{default:Object(j["withCtx"])((function(){return[St]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",yt,[Object(j["createVNode"])(d),Et,Ct])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[8]||(t[8]=function(t){return e.enterScreeningFromStart()})},{default:Object(j["withCtx"])((function(){return[Vt]})),_:1}),Object(j["createVNode"])(r,{onClick:t[9]||(t[9]=function(t){return e.enterScreening()})},{default:Object(j["withCtx"])((function(){return[_t]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Nt,[Object(j["createVNode"])(s),Tt,Lt])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,null,{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onClick:t[10]||(t[10]=function(t){return e.goIssues()})},{default:Object(j["withCtx"])((function(){return[At]})),_:1}),Object(j["createVNode"])(r,{onClick:t[11]||(t[11]=function(t){return e.hotkeyDrawerVisible=!0})},{default:Object(j["withCtx"])((function(){return[zt]})),_:1})]})),_:1})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Bt,[Object(j["createVNode"])(f),Dt,Mt])]})),_:1})]),Object(j["createElementVNode"])("div",Pt,[Object(j["createVNode"])(p,{mouseLeaveDelay:0,title:"幻灯片放映"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:"menu-item",onClick:t[12]||(t[12]=function(t){return e.enterScreening()})},[Object(j["createVNode"])(s,{size:"18",fill:"#666",style:{"margin-top":"2px"}})])]})),_:1}),Object(j["createElementVNode"])("a",Rt,[Object(j["createElementVNode"])("div",Ft,[Object(j["createVNode"])(m,{size:"18",fill:"#666"})])])]),Object(j["createVNode"])(v,{width:"320",placement:"right",visible:e.hotkeyDrawerVisible,onClose:t[13]||(t[13]=function(t){return e.hotkeyDrawerVisible=!1})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b)]})),_:1},8,["visible"]),Object(j["createVNode"])(O,{loading:e.exporting,tip:"正在导出..."},null,8,["loading"])])}Object(j["popScopeId"])();var Ut=n("3835"),Gt=(n("9911"),n("cc71"),n("21a6")),qt=n("8f74"),Xt=["style","script","template"],Wt=["html","head","body","p","dt","dd","li","option","thead","th","tbody","tr","td","tfoot","colgroup"],Yt={li:["ul","ol","menu"],dt:["dl"],dd:["dl"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table"],td:["table"]},Zt=["!doctype","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],Jt=function(e,t){var n=t-e.position;Kt(e,n)},Kt=function(e,t){e.position=e.position+t},Qt=function(e,t){var n=!1;while(!n){var o=e.indexOf("<",t);if(-1===o)return o;var c=e.charAt(o+1);if("/"===c||"!"===c||/[A-Za-z0-9]/.test(c))return o;t=o+1}return-1},$t=function(e){var t=e.str,n=Qt(t,e.position);if(n!==e.position){-1===n&&(n=t.length);var o=t.slice(e.position,n);Jt(e,n),e.tokens.push({type:"text",content:o})}},en=function(e){var t=e.str;Kt(e,4);var n=t.indexOf("--\x3e",e.position),o=n+3;-1===n&&(n=o=t.length);var c=t.slice(e.position,n);Jt(e,o),e.tokens.push({type:"comment",content:c})},tn=function(e){var t=e.str,n=t.length,o=e.position;while(o"===c);if(l)break;o++}var a=o+1;while(a"===r);if(!i)break;a++}Jt(e,a);var u=t.slice(o,a);return e.tokens.push({type:"tag",content:u}),u},nn=function(e){var t=e.str,n=e.tokens,o=e.position,c=null,l=o,a=[],r=t.length;while(o"===i;if(d){o!==l&&a.push(t.slice(l,o));break}var s=/\s/.test(i);if(s)o!==l&&a.push(t.slice(l,o)),l=o+1,o++;else{var f="'"===i||'"'===i;f?(c=i,o++):o++}}}Jt(e,o);for(var p="attribute",m=0;m1){var h=b+O;n.push({type:p,content:h}),m+=1;continue}var j=a[m+2];if(m+=1,j){var g=b+"="+j;n.push({type:p,content:g}),m+=1;continue}}}if(Object(ce["endsWith"])(b,"=")){var y=a[m+1];if(y&&-1===y.indexOf("=")){var E=b+y;n.push({type:p,content:E}),m+=1;continue}var C=b.slice(0,-1);n.push({type:p,content:C})}else n.push({type:p,content:b})}},on=function(e,t){var n=t.str,o=t.tokens,c=e.toLowerCase(),l=n.length,a=t.position;while(a=0){var c=t[o].tagName;if(c===e)break;if(n.includes(c))return!0;o--}}return!1},dn=function(e,t){e.splice(t)},sn=function e(t){var n=t.stack,o=t.tokens,c=t.cursor,l=n[n.length-1].children,a=o.length;while(c-1)if(n[d].tagName===u){s=!0;break}while(c0){if(u===n[m].tagName){dn(n,m);var b=m-1;l=n[b].children;break}m-=1}}var v=[],O=void 0;while(c127&&o<2048?(t+=String.fromCharCode(o>>6|192),t+=String.fromCharCode(63&o|128)):(t+=String.fromCharCode(o>>12|224),t+=String.fromCharCode(o>>6&63|128),t+=String.fromCharCode(63&o|128))}return t},xn=function(e){var t,n,o,c,l,a,r,i="",u=0;e=Cn(e);while(u>2,l=(3&t)<<4|n>>4,a=(15&n)<<2|o>>6,r=63&o,isNaN(n)?a=r=64:isNaN(o)&&(r=64),i=i+yn.charAt(c)+yn.charAt(l)+yn.charAt(a)+yn.charAt(r);return i},kn=function(e){var t=new XMLSerializer,n=t.serializeToString(e);return En+xn(n)},In=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["ref"])(!1),o=function(){var e=new Blob([JSON.stringify(t.value)],{type:""});Object(Gt["saveAs"])(e,"pptist_slides.json")},c=function(e){var t=H()(e),n=t.getAlpha(),o=0===n?"#ffffff":t.setAlpha(1).toHexString();return{alpha:n,color:o}},l=function(e){var t=vn(e),n=[],o=function e(t){var o,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=Object(w["a"])(t);try{for(a.s();!(o=a.n()).done;){var r=o.value;if("tagName"in r&&["div","ul","li","p"].includes(r.tagName)&&n.length){var i=n[n.length-1];i.options||(i.options={}),i.options.breakLine=!0}var u=Object(I["a"])({},l),d="attributes"in r?r.attributes.find((function(e){return"style"===e.key})):null;if(d&&d.value){var s,f=d.value.split(";"),p=Object(w["a"])(f);try{for(p.s();!(s=p.n()).done;){var m=s.value,b=m.split(": "),v=Object(Ut["a"])(b,2),O=v[0],h=v[1],j=[Object(ce["trim"])(O),Object(ce["trim"])(h)],g=j[0],y=j[1];g&&y&&(u[g]=y)}}catch(x){p.e(x)}finally{p.f()}}if("tagName"in r&&("em"===r.tagName&&(u["font-style"]="italic"),"strong"===r.tagName&&(u["font-weight"]="bold"),"sup"===r.tagName&&(u["vertical-align"]="super"),"sub"===r.tagName&&(u["vertical-align"]="sub")),"tagName"in r&&"br"===r.tagName)n.push({text:"",options:{breakLine:!0}});else if("content"in r){var E=r.content.replace(/\n/g,"").replace(/ /g," "),C={};u["font-size"]&&(C.fontSize=.75*parseInt(u["font-size"])),u["color"]&&(C.color=c(u["color"]).color),u["background-color"]&&(C.highlight=c(u["background-color"]).color),u["text-decoration-line"]&&(-1!==u["text-decoration-line"].indexOf("underline")&&(C.underline={color:C.color||"#000000",style:"sng"}),-1!==u["text-decoration-line"].indexOf("line-through")&&(C.strike="sngStrike")),u["text-decoration"]&&(-1!==u["text-decoration"].indexOf("underline")&&(C.underline={color:C.color||"#000000",style:"sng"}),-1!==u["text-decoration"].indexOf("line-through")&&(C.strike="sngStrike")),u["vertical-align"]&&("super"===u["vertical-align"]&&(C.superscript=!0),"sub"===u["vertical-align"]&&(C.subscript=!0)),u["text-align"]&&(C.align=u["text-align"]),u["font-weight"]&&(C.bold="bold"===u["font-weight"]),u["font-style"]&&(C.italic="italic"===u["font-style"]),u["font-family"]&&(C.fontFace=u["font-family"]),n.push({text:E,options:C})}else"children"in r&&e(r.children,u)}}catch(x){a.e(x)}finally{a.f()}};return o(t),n},a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:1,y:1};return e.map((function(e){if(void 0!==e.close)return{close:!0};if("M"===e.type)return{x:e.x/100*t.x,y:e.y/100*t.y,moveTo:!0};if(e.curve){if("cubic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"cubic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y,x2:e.curve.x2/100*t.x,y2:e.curve.y2/100*t.y}};if("quadratic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"quadratic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y}}}return{x:e.x/100*t.x,y:e.y/100*t.y}}))},r=function(){n.value=!0;var e,o=new qt["a"],r=Object(w["a"])(t.value);try{for(r.s();!(e=r.n()).done;){var i=e.value,u=o.addSlide();if(i.background){var d=i.background;if("image"===d.type&&d.image)u.background={data:d.image};else if("solid"===d.type&&d.color){var s=c(d.color);u.background={color:s.color,transparency:100*(1-s.alpha)}}else if("gradient"===d.type&&d.gradientColor){var f=Object(Ut["a"])(d.gradientColor,2),p=f[0],m=f[1],b=H.a.mix(p,m).toHexString(),v=c(b);u.background={color:v.color,transparency:100*(1-v.alpha)}}}if(i.elements){var O,h=Object(w["a"])(i.elements);try{var j=function(){var e=O.value;if("text"===e.type){var t=l(e.content),n={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:"middle"};if(e.rotate&&(n.rotate=e.rotate),e.wordSpace&&(n.charSpacing=.75*e.wordSpace),e.lineHeight&&(n.lineSpacingMultiple=.75*e.lineHeight),e.fill){var r=c(e.fill),i=void 0===e.opacity?1:e.opacity;n.fill={color:r.color,transparency:100*(1-r.alpha*i)}}if(e.defaultColor&&(n.color=c(e.defaultColor).color),e.defaultFontName&&(n.fontFace=e.defaultFontName),e.shadow){var d=c(e.shadow.color);n.shadow={type:"outer",color:d.color.replace("#",""),opacity:d.alpha,blur:.75*e.shadow.blur,offset:(e.shadow.h+e.shadow.v)/2*.75,angle:45}}e.link&&(n.hyperlink={url:e.link}),u.addText(t,n)}else if("image"===e.type){var s={path:e.src,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};e.flipH&&(s.flipH=e.flipH),e.flipV&&(s.flipV=e.flipV),e.rotate&&(s.rotate=e.rotate),e.clip&&"ellipse"===e.clip.shape&&(s.rounding=!0),e.link&&(s.hyperlink={url:e.link}),u.addImage(s)}else if("shape"===e.type){if(e.special){var f=document.querySelector(".thumbnail-list .base-element-".concat(e.id," svg")),p=kn(f),m={data:p,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};e.rotate&&(m.rotate=e.rotate),e.link&&(m.hyperlink={url:e.link}),u.addImage(m)}else{var b,v,h={x:e.width/e.viewBox,y:e.height/e.viewBox},j=a(gn(e.path),h),g=c(e.fill),y=void 0===e.opacity?1:e.opacity,E={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fill:{color:g.color,transparency:100*(1-g.alpha*y)},points:j};if(e.flipH&&(E.flipH=e.flipH),e.flipV&&(E.flipV=e.flipV),null!==(b=e.outline)&&void 0!==b&&b.width)E.line={color:c((null===(v=e.outline)||void 0===v?void 0:v.color)||"#000000").color,width:.75*e.outline.width,dashType:"solid"===e.outline.style?"solid":"dash"};if(e.shadow){var C=c(e.shadow.color);E.shadow={type:"outer",color:C.color.replace("#",""),opacity:C.alpha,blur:.75*e.shadow.blur,offset:(e.shadow.h+e.shadow.v)/2*.75,angle:45}}e.link&&(E.hyperlink={url:e.link}),u.addShape("custGeom",E)}if(e.text){var x=l(e.text.content),k={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:e.text.align};e.rotate&&(k.rotate=e.rotate),e.text.defaultColor&&(k.color=c(e.text.defaultColor).color),e.text.defaultFontName&&(k.fontFace=e.text.defaultFontName),u.addText(x,k)}}else if("line"===e.type){var I=Ge(e),w=a(gn(I)),S=Pe(e),N=S.minX,T=S.maxX,L=S.minY,V=S.maxY,_={x:e.left/100,y:e.top/100,w:(T-N)/100,h:(V-L)/100,line:{color:c(e.color).color,width:.75*e.width,dashType:"solid"===e.style?"solid":"dash",beginArrowType:e.points[0]?"arrow":"none",endArrowType:e.points[1]?"arrow":"none"},points:w};u.addShape("custGeom",_)}else if("chart"===e.type){for(var B=[],D=0;D1||Q.rowspan>1)for(var $=Z;$1?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,elementList:e.elementList,scaleMultiElement:e.scaleMultiElement},null,8,["elementList","scaleMultiElement"])):Object(j["createCommentVNode"])("",!0),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.elementList,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(u,{key:t.id,elementInfo:t,isSelected:e.activeElementIdList.includes(t.id),isActive:e.handleElementId===t.id,isActiveGroupElement:e.activeGroupElementId===t.id,isMultiSelect:e.activeElementIdList.length>1,rotateElement:e.rotateElement,scaleElement:e.scaleElement,openLinkDialog:e.openLinkDialog,dragLineElement:e.dragLineElement},null,8,["elementInfo","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement"])})),128)),Object(j["createVNode"])(d)]),Object(j["createElementVNode"])("div",{class:"viewport",ref:"viewportRef",style:Object(j["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")})},[e.mouseSelectionState.isShow?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,top:e.mouseSelectionState.top,left:e.mouseSelectionState.left,width:e.mouseSelectionState.width,height:e.mouseSelectionState.height,quadrant:e.mouseSelectionState.quadrant},null,8,["top","left","width","height","quadrant"])):Object(j["createCommentVNode"])("",!0),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.elementList,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(f,{key:t.id,elementInfo:t,elementIndex:n+1,isMultiSelect:e.activeElementIdList.length>1,selectElement:e.selectElement,openLinkDialog:e.openLinkDialog},null,8,["elementInfo","elementIndex","isMultiSelect","selectElement","openLinkDialog"])})),128))],4)],4),Object(j["createVNode"])(m,{visible:e.linkDialogVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.linkDialogVisible=t}),footer:null,centered:"",width:540,destroyOnClose:""},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p,{onClose:t[1]||(t[1]=function(t){return e.linkDialogVisible=!1})})]})),_:1},8,["visible"])],544)),[[b,e.contextmenus],[v,e.removeEditorAreaFocus]])}Object(j["popScopeId"])();var Pn=function(){var e=window.getSelection();e&&e.removeAllRanges()},Rn=function(e){var t=Object(j["ref"])(0),n=Object(j["ref"])(0),o=se(),c=Object(j["computed"])((function(){return o.state.canvasPercentage})),l=Object(j["computed"])((function(){return o.state.viewportRatio})),a=function(){if(e.value){var a=e.value.clientWidth,r=e.value.clientHeight;if(r/a>l.value){var i=a*(c.value/100);o.commit(y.SET_CANVAS_SCALE,i/Je),t.value=(a-i)/2,n.value=(r-i*l.value)/2}else{var u=r*(c.value/100);o.commit(y.SET_CANVAS_SCALE,u/(Je*l.value)),t.value=(a-u/l.value)/2,n.value=(r-u)/2}}};Object(j["watch"])([c,l],a);var r=Object(j["computed"])((function(){return{width:Je,height:Je*l.value,left:t.value,top:n.value}})),i=new ResizeObserver(a);return Object(j["onMounted"])((function(){e.value&&i.observe(e.value)})),Object(j["onUnmounted"])((function(){e.value&&i.unobserve(e.value)})),{viewportStyles:r}},Fn=function(e,t){var n=se(),o=Object(j["computed"])((function(){return n.state.canvasScale})),c=Object(j["reactive"])({isShow:!1,top:0,left:0,width:0,height:0,quadrant:1}),l=function(l){if(t.value){var a=!0,r=t.value.getBoundingClientRect(),i=5,u=l.pageX,d=l.pageY,s=(u-r.x)/o.value,f=(d-r.y)/o.value;c.isShow=!1,c.quadrant=4,c.top=f,c.left=s,c.width=0,c.height=0,document.onmousemove=function(e){if(a){var t=e.pageX,n=e.pageY,l=(t-u)/o.value,r=(n-d)/o.value,s=Math.abs(l),f=Math.abs(r);if(!(s0&&r>0?p=4:l<0&&r<0?p=1:l>0&&r<0?p=2:l<0&&r>0&&(p=3),c.isShow=!0,c.quadrant=p,c.width=s,c.height=f}}},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null,a=!1;for(var t=[],o=0;or&&mi&&vr-u&&mi-d&&vr&&mi-d&&vr-u&&mi&&v0&&Math.abs(r-45)<=d?r-=r-45:r<0&&Math.abs(r+45)<=d?r-=r+45:r>0&&Math.abs(r-90)<=d?r-=r-90:r<0&&Math.abs(r+90)<=d?r-=r+90:r>0&&Math.abs(r-135)<=d?r-=r-135:r<0&&Math.abs(r+135)<=d?r-=r+135:r>0&&Math.abs(r-180)<=d?r-=r-180:r<0&&Math.abs(r+180)<=d&&(r-=r+180),e.value=e.value.map((function(e){return c.id===e.id?Object(I["a"])(Object(I["a"])({},e),{},{rotate:r}):e}))}},document.onmouseup=function(){a=!1,document.onmousemove=null,document.onmouseup=null,i!==r&&(n.commit(y.UPDATE_SLIDE,{elements:e.value}),l())}}};return{rotateElement:a}},qn={text:"文本",image:"图片",shape:"形状",line:"线条",chart:"图表",table:"表格"},Xn={text:20,image:20,shape:15,chart:200,table:20},Wn=function(e,t){var n=e.left,o=e.top,c=e.width,l=e.height,a=Math.sqrt(Math.pow(c,2)+Math.pow(l,2))/2,r=180*Math.atan(l/c)/Math.PI,i=(180-t-r)*Math.PI/180,u=(r-t)*Math.PI/180,d=(90-t)*Math.PI/180,s=t*Math.PI/180,f=c/2,p=l/2,m=n+f,b=o+p,v={left:m+a*Math.cos(i),top:b-a*Math.sin(i)},O={left:m+p*Math.cos(d),top:b-p*Math.sin(d)},h={left:m+a*Math.cos(u),top:b-a*Math.sin(u)},j={left:m+f*Math.cos(s),top:b+f*Math.sin(s)},g={left:m-a*Math.cos(i),top:b+a*Math.sin(i)},y={left:m-p*Math.sin(s),top:b+p*Math.cos(s)},E={left:m-a*Math.cos(u),top:b+a*Math.sin(u)},C={left:m-f*Math.cos(s),top:b-f*Math.sin(s)};return{leftTopPoint:v,topPoint:O,rightTopPoint:h,rightPoint:j,rightBottomPoint:g,bottomPoint:y,leftBottomPoint:E,leftPoint:C}},Yn=function(e,t){var n,o=(n={},Object(q["a"])(n,be.RIGHT_BOTTOM,t.leftTopPoint),Object(q["a"])(n,be.LEFT_BOTTOM,t.rightTopPoint),Object(q["a"])(n,be.LEFT_TOP,t.rightBottomPoint),Object(q["a"])(n,be.RIGHT_TOP,t.leftBottomPoint),Object(q["a"])(n,be.TOP,t.bottomPoint),Object(q["a"])(n,be.BOTTOM,t.topPoint),Object(q["a"])(n,be.LEFT,t.rightPoint),Object(q["a"])(n,be.RIGHT,t.leftPoint),n);return o[e]},Zn=function(e,t){var n=se(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),l=Object(j["computed"])((function(){return n.state.canvasScale})),a=Object(j["computed"])((function(){return n.state.viewportRatio})),r=Object(j["computed"])((function(){return n.getters.ctrlOrShiftKeyActive})),i=We(),u=i.addHistorySnapshot,d=function(i,d,s){var f=!0;n.commit(y.SET_SCALING_STATE,!0);var p,m=d.left,b=d.top,v=d.width,O=d.height,h="rotate"in d&&d.rotate?d.rotate:0,j=Math.PI*h/180,g=r.value||"fixedRatio"in d&&d.fixedRatio,E=v/O,C=i.pageX,x=i.pageY,k=Xn[d.type]||20,S=function(e){return e2&&void 0!==arguments[2])||arguments[2];if(a.value||n.commit(y.SET_EDITORAREA_FOCUS,!0),o.value.includes(u.id)){if(r.value){var s=[];if(u.groupId){var f=[];e.value.forEach((function(e){e.groupId===u.groupId&&f.push(e.id)})),s=o.value.filter((function(e){return!f.includes(e)}))}else s=o.value.filter((function(e){return e!==u.id}));s.length>0&&n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,s)}else if(c.value!==u.id)n.commit(y.SET_HANDLE_ELEMENT_ID,u.id);else if(l.value!==u.id){var p=i.pageX,m=i.pageY;i.target.onmouseup=function(e){var t=e.pageX,o=e.pageY;p===t&&m===o&&(n.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,u.id),e.target.onmouseup=null)}}}else{var b=[];if(b=r.value?[].concat(Object(oe["a"])(o.value),[u.id]):[u.id],u.groupId){var v=[];e.value.forEach((function(e){e.groupId===u.groupId&&v.push(e.id)})),b=[].concat(Object(oe["a"])(b),v)}n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,Object(ce["uniq"])(b)),n.commit(y.SET_HANDLE_ELEMENT_ID,u.id)}d&&t(i,u)},u=function(){var t=e.value.filter((function(e){return!e.lock})),o=t.map((function(e){return e.id}));n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,o)};return{selectElement:i,selectAllElement:u}},Kn=function(e,t){var n=se(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),l=Object(j["computed"])((function(){return n.state.canvasScale})),a=Object(j["computed"])((function(){return n.state.viewportRatio})),r=We(),i=r.addHistorySnapshot,u=function(r,u){if(o.value.includes(u.id)){var d,s=!0,f=Je,p=Je*a.value,m=5,b=JSON.parse(JSON.stringify(e.value)),v=b.filter((function(e){return o.value.includes(e.id)})),O=u.left,h=u.top,j=u.width,g="height"in u&&u.height?u.height:0,E="rotate"in u&&u.rotate?u.rotate:0,C=r.pageX,x=r.pageY,k=null,S=u.id===c.value,N=[],T=[],L=Object(w["a"])(e.value);try{for(L.s();!(d=L.n()).done;){var V=d.value;if("line"!==V.type&&((!S||V.id!==u.id)&&(S||!o.value.includes(V.id)))){var _=void 0,B=void 0,D=void 0,M=void 0;if("rotate"in V&&V.rotate){var A=Ae({left:V.left,top:V.top,width:V.width,height:V.height,rotate:V.rotate}),z=A.xRange,P=A.yRange;_=z[0],B=P[0],D=z[1]-z[0],M=P[1]-P[0]}else _=V.left,B=V.top,D=V.width,M=V.height;var R=_+D,F=B+M,H=B+M/2,U=_+D/2,G={value:B,range:[_,R]},q={value:F,range:[_,R]},X={value:H,range:[_,R]},W={value:_,range:[B,F]},Y={value:R,range:[B,F]},Z={value:U,range:[B,F]};N.push(G,q,X),T.push(W,Y,Z)}}}catch(ne){L.e(ne)}finally{L.f()}var J={value:0,range:[0,f]},K={value:p,range:[0,f]},Q={value:p/2,range:[0,f]},$={value:0,range:[0,p]},ee={value:f,range:[0,p]},te={value:f/2,range:[0,p]};N.push(J,K,Q),T.push($,ee,te),N=Fe(N),T=Fe(T),document.onmousemove=function(n){var c=n.pageX,a=n.pageY;if(!1!==k&&(k=Math.abs(C-c)v&&(A[0]=D-_,z[0]=0),b>O&&(A[1]=M-B,z[1]=0),e.value=e.value.map((function(e){if(e.id===l.id){var t=Object(I["a"])(Object(I["a"])({},e),{},{left:_,top:B,start:A,end:z});return a!==ve.MID?(l.broken&&(t.broken=[(A[0]+z[0])/2,(A[1]+z[1])/2]),l.curve&&(t.curve=[(A[0]+z[0])/2,(A[1]+z[1])/2])):(l.broken&&(t.broken=[j-_,g-B]),l.curve&&(t.curve=[j-_,g-B])),t}return e}))}},document.onmouseup=function(n){r=!1,document.onmousemove=null,document.onmouseup=null;var o=n.pageX,l=n.pageY;u===o&&d===l||(t.commit(y.UPDATE_SLIDE,{elements:e.value}),c())}};return{dragLineElement:l}},$n=function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.creatingElement})),c=function(t){var o=t.start,c=t.end;if(e.value){var l=e.value.getBoundingClientRect(),a=Object(Ut["a"])(o,2),r=a[0],i=a[1],u=Object(Ut["a"])(c,2),d=u[0],s=u[1],f=Math.min(r,d),p=Math.max(r,d),m=Math.min(i,s),b=Math.max(i,s),v=(f-l.x)/n.value,O=(m-l.y)/n.value,h=(p-f)/n.value,j=(b-m)/n.value;return{left:v,top:O,width:h,height:j}}},l=function(t){var o=t.start,c=t.end;if(e.value){var l=e.value.getBoundingClientRect(),a=Object(Ut["a"])(o,2),r=a[0],i=a[1],u=Object(Ut["a"])(c,2),d=u[0],s=u[1],f=Math.min(r,d),p=Math.max(r,d),m=Math.min(i,s),b=Math.max(i,s),v=(f-l.x)/n.value,O=(m-l.y)/n.value,h=(p-f)/n.value,j=(b-m)/n.value,g=[r===f?0:h,i===m?0:j],y=[d===f?0:h,s===m?0:j];return{left:v,top:O,start:g,end:y}}},a=Ke(),r=a.createTextElement,i=a.createShapeElement,u=a.createLineElement,d=function(e){if(o.value){var n=o.value.type;if("text"===n){var a=c(e);a&&r(a)}else if("shape"===n){var d=c(e);d&&i(d,o.value.data)}else if("line"===n){var s=l(e);s&&u(s,o.value.data)}t.commit(y.SET_CREATING_ELEMENT,null)}};return{insertElementFromCreateSelection:d}},eo=["id"];function to(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"editable-element",ref:"elementRef",id:"editable-element-".concat(e.elementInfo.id),style:Object(j["normalizeStyle"])({zIndex:e.elementIndex})},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,selectElement:e.selectElement,contextmenus:e.contextmenus},null,8,["elementInfo","selectElement","contextmenus"]))],12,eo)}var no;n("a9e3");(function(e){e["TEXT"]="text",e["IMAGE"]="image",e["SHAPE"]="shape",e["LINE"]="line",e["CHART"]="chart",e["TABLE"]="table"})(no||(no={}));var oo=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.viewportRatio})),o=Object(j["computed"])((function(){return e.getters.activeElementList})),c=Object(j["computed"])((function(){return e.getters.currentSlide})),l=We(),a=l.addHistorySnapshot,r=function(l){var r,i=Je,u=Je*n.value,d=Re(o.value),s=d.minX,f=d.maxX,p=d.minY,m=d.maxY,b=JSON.parse(JSON.stringify(c.value.elements)),v=Object(w["a"])(b);try{for(v.s();!(r=v.n()).done;){var O=r.value;if(t.value.includes(O.id)){if(l===pe.CENTER){var h=p+(m-p)/2-u/2,j=s+(f-s)/2-i/2;O.top=O.top-h,O.left=O.left-j}if(l===pe.TOP){var g=p-0;O.top=O.top-g}else if(l===pe.VERTICAL){var E=p+(m-p)/2-u/2;O.top=O.top-E}else if(l===pe.BOTTOM){var C=m-u;O.top=O.top-C}else if(l===pe.LEFT){var x=s-0;O.left=O.left-x}else if(l===pe.HORIZONTAL){var k=s+(f-s)/2-i/2;O.left=O.left-k}else if(l===pe.RIGHT){var I=f-i;O.left=O.left-I}}}}catch(S){v.e(S)}finally{v.f()}e.commit(y.UPDATE_SLIDE,{elements:b}),a()};return{alignElementToCanvas:r}};Object(j["pushScopeId"])("data-v-03ead815");var co=["src"];function lo(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ImageClipHandler"),r=Object(j["resolveComponent"])("ImageOutline"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-image",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[e.isCliping?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,src:e.elementInfo.src,clipData:e.elementInfo.clip,width:e.elementInfo.width,height:e.elementInfo.height,top:e.elementInfo.top,left:e.elementInfo.left,clipPath:e.clipShape.style,onClip:t[0]||(t[0]=function(t){return e.handleClip(t)})},null,8,["src","clipData","width","height","top","left","clipPath"])):Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(r,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createElementVNode"])("div",{class:"image-content",style:Object(j["normalizeStyle"])({clipPath:e.clipShape.style})},[Object(j["createElementVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:Object(j["normalizeStyle"])({top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter}),onDragstart:t[1]||(t[1]=Object(j["withModifiers"])((function(){}),["prevent"])),alt:""},null,44,co)],4)],36)),[[i,e.contextmenus]])],4)],6)}Object(j["popScopeId"])();var ao,ro,io=function(e){var t=Object(j["computed"])((function(){if(e.value){var t=e.value,n=t.h,o=t.v,c=t.blur,l=t.color;return"".concat(n,"px ").concat(o,"px ").concat(c,"px ").concat(l)}return""}));return{shadowStyle:t}},uo=function(e,t){var n=Object(j["computed"])((function(){var n="";return e.value&&t.value?n="rotateX(180deg) rotateY(180deg)":t.value?n="rotateX(180deg)":e.value&&(n="rotateY(180deg)"),n}));return{flipStyle:n}};(function(e){e["RECT"]="rect",e["ELLIPSE"]="ellipse",e["POLYGON"]="polygon"})(ao||(ao={})),function(e){e["RECT"]="rect",e["ROUNDRECT"]="roundRect",e["ELLIPSE"]="ellipse",e["TRIANGLE"]="triangle",e["PENTAGON"]="pentagon",e["RHOMBUS"]="rhombus",e["STAR"]="star"}(ro||(ro={}));var so={rect:{name:"矩形",type:ao.RECT,radius:"0",style:""},rect2:{name:"矩形2",type:ao.POLYGON,style:"polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)",createPath:function(e,t){return"M 0 0 L ".concat(.8*e," 0 L ").concat(e," ").concat(.2*t," L ").concat(e," ").concat(t," L 0 ").concat(t," Z")}},rect3:{name:"矩形3",type:ao.POLYGON,style:"polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)",createPath:function(e,t){return"M 0 0 L ".concat(.8*e," 0 L ").concat(e," ").concat(.2*t," L ").concat(e," ").concat(t," L ").concat(.2*e," ").concat(t," L 0 ").concat(.8*t," Z")}},roundRect:{name:"圆角矩形",type:ao.RECT,radius:"10%",style:"inset(0 0 0 0 round 10% 10% 10% 10%)"},ellipse:{name:"圆形",type:ao.ELLIPSE,style:"ellipse(50% 50% at 50% 50%)"},triangle:{name:"三角形",type:ao.POLYGON,style:"polygon(50% 0%, 0% 100%, 100% 100%)",createPath:function(e,t){return"M ".concat(.5*e," 0 L 0 ").concat(t," L ").concat(e," ").concat(t," Z")}},triangle2:{name:"三角形2",type:ao.POLYGON,style:"polygon(50% 100%, 0% 0%, 100% 0%)",createPath:function(e,t){return"M ".concat(.5*e," ").concat(t," L 0 0 L ").concat(e," 0 Z")}},triangle3:{name:"三角形3",type:ao.POLYGON,style:"polygon(0% 0%, 0% 100%, 100% 100%)",createPath:function(e,t){return"M 0 0 L 0 ".concat(t," L ").concat(e," ").concat(t," Z")}},rhombus:{name:"菱形",type:ao.POLYGON,style:"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)",createPath:function(e,t){return"M ".concat(.5*e," 0 L ").concat(e," ").concat(.5*t," L ").concat(.5*e," ").concat(t," L 0 ").concat(.5*t," Z")}},hexagon:{name:"六边形",type:ao.POLYGON,style:"polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)",createPath:function(e,t){return"M ".concat(.2*e," 0 L ").concat(.8*e," 0 L ").concat(e," ").concat(.5*t," L ").concat(.8*e," ").concat(t," L ").concat(.2*e," ").concat(t," L 0 ").concat(.5*t," Z")}},pentagon:{name:"五边形",type:ao.POLYGON,style:"polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)",createPath:function(e,t){return"M ".concat(.5*e," 0 L ").concat(e," ").concat(.38*t," L ").concat(.82*e," ").concat(t," L ").concat(.18*e," ").concat(t," L 0 ").concat(.38*t," Z")}},parallelogram:{name:"平行四边形",type:ao.POLYGON,style:"polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)",createPath:function(e,t){return"M ".concat(.3*e," 0 L ").concat(e," 0 L ").concat(.7*e," ").concat(t," L 0 ").concat(t," Z")}},parallelogram2:{name:"平行四边形2",type:ao.POLYGON,style:"polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)",createPath:function(e,t){return"M ".concat(.3*e," ").concat(t," L ").concat(e," ").concat(t," L ").concat(.7*e," 0 L 0 0 Z")}},trapezoid:{name:"梯形",type:ao.POLYGON,style:"polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)",createPath:function(e,t){return"M ".concat(.25*e," 0 L ").concat(.75*e," 0 L ").concat(e," ").concat(t," L 0 ").concat(t," Z")}},trapezoid2:{name:"梯形2",type:ao.POLYGON,style:"polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)",createPath:function(e,t){return"M 0 0 L ".concat(e," 0 L ").concat(.75*e," ").concat(t," L ").concat(.25*e," ").concat(t," Z")}}},fo=function(e){var t=Object(j["computed"])((function(){if(!e.value)return so.rect;var t=e.value.shape||ao.RECT;return so[t]})),n=Object(j["computed"])((function(){if(!e.value)return{top:"0",left:"0",width:"100%",height:"100%"};var t=Object(Ut["a"])(e.value.range,2),n=t[0],o=t[1],c=(o[0]-n[0])/100,l=(o[1]-n[1])/100,a=n[0]/c,r=n[1]/l;return{left:-a+"%",top:-r+"%",width:100/c+"%",height:100/l+"%"}}));return{clipShape:t,imgPosition:n}},po=(n("b64b"),function(e){var t=Object(j["computed"])((function(){if(!e.value)return"";for(var t="",n=0,o=Object.keys(e.value);na.width&&(p=a.width-i.width),m<0?m=0:m+i.height>a.height&&(m=a.height-i.height),f.left=p,f.top=m}},document.onmouseup=function(){n=!1,document.onmousemove=null,document.onmouseup=null,h(),setTimeout((function(){r.value=!1}),0)}},y=function(t,n){r.value=!0;var o=!0,a=50/e.width*100,i=50/e.height*100,u=t.pageX,s=t.pageY,p=d.value,m={left:f.left,top:f.top,width:f.width,height:f.height},b=f.width/f.height;document.onmousemove=function(t){if(o){var r,d,v,O,h=t.pageX,j=t.pageY,g=(h-u)/c.value/e.width*100,y=(j-s)/c.value/e.height*100;l.value&&("b-r"!==n&&"t-l"!==n||(y=g/b),"b-l"!==n&&"t-r"!==n||(y=-g/b)),"t-l"===n?(m.left+g<0&&(g=-m.left),m.top+y<0&&(y=-m.top),m.width-gp.width&&(g=p.width-(m.left+m.width)),m.top+y<0&&(y=-m.top),m.width+gp.height&&(y=p.height-(m.top+m.height)),m.width-gp.width&&(g=p.width-(m.left+m.width)),m.top+m.height+y>p.height&&(y=p.height-(m.top+m.height)),m.width+gp.height&&(y=p.height-(m.top+m.height)),m.height+yp.width&&(g=p.width-(m.left+m.width)),m.width+g\s$/,e)},ic=function(e){return Object(lc["g"])(/^(\d+)\.\s$/,e,(function(e){return{order:+e[1]}}),(function(e,t){return t.childCount+t.attrs.order===+e[1]}))},uc=function(e){return Object(lc["g"])(/^\s*([-+*])\s$/,e)},dc=function(e){return Object(lc["e"])(/^```$/,e)},sc=function(e){var t=[].concat(Object(oe["a"])(lc["d"]),[lc["a"],lc["b"]]);return t.push(rc(e.nodes.blockquote)),t.push(ic(e.nodes.ordered_list)),t.push(uc(e.nodes.bullet_list)),t.push(dc(e.nodes.code_block)),Object(lc["c"])({rules:t})},fc=function(e){return[sc(e),Object(ec["b"])(ac(e)),Object(ec["b"])(Jo["a"]),Object(nc["a"])(),Object(oc["a"])(),Object(tc["a"])()]},pc=n("2210"),mc=Object(I["a"])(Object(I["a"])({},cc["d"]),{},{content:"list_item+",group:"block"}),bc=Object(I["a"])(Object(I["a"])({},cc["a"]),{},{content:"list_item+",group:"block"}),vc=Object(I["a"])(Object(I["a"])({},cc["c"]),{},{content:"paragraph block*",group:"block"}),Oc={attrs:{align:{default:""}},content:"inline*",group:"block",parseDOM:[{tag:"p",getAttrs:function(e){var t=e.style.textAlign,n=e.getAttribute("align")||t||"";return n=/(left|right|center|justify)/.test(n)?n:"",{align:n}}}],toDOM:function(e){var t=e.attrs.align,n="";return t&&"left"!==t&&(n+="text-align: ".concat(t,";")),["p",{style:n},0]}},hc=Object(I["a"])(Object(I["a"])({},pc["b"]),{},{ordered_list:mc,bullet_list:bc,list_item:vc,paragraph:Oc}),jc={excludes:"subscript",parseDOM:[{tag:"sub"},{style:"vertical-align",getAttrs:function(e){return"sub"===e&&null}}],toDOM:function(){return["sub",0]}},gc={excludes:"superscript",parseDOM:[{tag:"sup"},{style:"vertical-align",getAttrs:function(e){return"super"===e&&null}}],toDOM:function(){return["sup",0]}},yc={parseDOM:[{tag:"strike"},{style:"text-decoration",getAttrs:function(e){return"line-through"===e&&null}},{style:"text-decoration-line",getAttrs:function(e){return"line-through"===e&&null}}],toDOM:function(){return["span",{style:"text-decoration-line: line-through"},0]}},Ec={parseDOM:[{tag:"u"},{style:"text-decoration",getAttrs:function(e){return"underline"===e&&null}},{style:"text-decoration-line",getAttrs:function(e){return"underline"===e&&null}}],toDOM:function(){return["span",{style:"text-decoration: underline"},0]}},Cc={attrs:{color:{}},parseDOM:[{style:"color",getAttrs:function(e){return e?{color:e}:{}}}],toDOM:function(e){var t=e.attrs.color,n="";return t&&(n+="color: ".concat(t,";")),["span",{style:n},0]}},xc={attrs:{backcolor:{}},inline:!0,group:"inline",parseDOM:[{tag:"span[style*=background-color]",getAttrs:function(e){return e?{backcolor:e}:{}}}],toDOM:function(e){var t=e.attrs.backcolor,n="";return t&&(n+="background-color: ".concat(t,";")),["span",{style:n},0]}},kc={attrs:{fontsize:{}},inline:!0,group:"inline",parseDOM:[{style:"font-size",getAttrs:function(e){return e?{fontsize:e}:{}}}],toDOM:function(e){var t=e.attrs.fontsize,n="";return t&&(n+="font-size: ".concat(t)),["span",{style:n},0]}},Ic={attrs:{fontname:{}},inline:!0,group:"inline",parseDOM:[{style:"font-family",getAttrs:function(e){return{fontname:e&&"string"===typeof e?e.replace(/[\"\']/g,""):""}}}],toDOM:function(e){var t=e.attrs.fontname,n="";return t&&(n+="font-family: ".concat(t)),["span",{style:n},0]}},wc=Object(I["a"])(Object(I["a"])({},pc["a"]),{},{subscript:jc,superscript:gc,strikethrough:yc,underline:Ec,forecolor:Cc,backcolor:xc,fontsize:kc,fontname:Ic}),Sc=hc,Nc=wc,Tc=new $o["i"]({nodes:Sc,marks:Nc}),Lc=function(e){var t="
".concat(e,"
"),n=new window.DOMParser,o=n.parseFromString(t,"text/html").body.firstElementChild;return $o["a"].fromSchema(Tc).parse(o)},Vc=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Qo["c"](e,Object(I["a"])({state:Ko["b"].create({doc:Lc(t),plugins:fc(Tc)})},n))},_c=n("1344");(function(e){e["RICH_TEXT_COMMAND"]="RICH_TEXT_COMMAND",e["OPEN_CHART_DATA_EDITOR"]="OPEN_CHART_DATA_EDITOR"})(Zo||(Zo={}));var Bc=Object(_c["a"])(),Dc=Bc,Mc=(n("6062"),function(e,t,n){var o=e,c=o.selection,l=o.doc;if(!c||!l)return e;var a=c.from,r=c.to,i=t.nodes,u=i.blockquote,d=i.list_item,s=i.paragraph,f=[];n=n||"";var p=new Set([u,d,s]);return l.nodesBetween(a,r,(function(e,t){var o=e.type,c=e.attrs.align||"";return c!==n&&p.has(o)&&f.push({node:e,pos:t,nodeType:o}),!0})),f.length?(f.forEach((function(t){var o=t.node,c=t.pos,l=t.nodeType,a=o.attrs;a=n?Object(I["a"])(Object(I["a"])({},a),{},{align:n}):Object(I["a"])(Object(I["a"])({},a),{},{align:null}),e=e.setNodeMarkup(c,l,a,o.marks)})),e):e}),Ac=function(e,t){var n=e.state,o=n.schema,c=n.selection,l=Mc(n.tr.setSelection(c),o,t);e.dispatch(l)},zc=function(e,t){return e.type===t.nodes.bullet_list||e.type===t.nodes.ordered_list},Pc=function(e,t){return function(n,o){var c=n.schema,l=n.selection,a=l.$from,r=l.$to,i=a.blockRange(r);if(!i)return!1;var u=T((function(e){return zc(e,c)}))(l);if(i.depth>=1&&u&&i.depth-u.depth<=1){if(u.node.type===e)return Object(cc["b"])(t)(n,o);if(zc(u.node,c)&&e.validContent(u.node.content)){var d=n.tr;return d.setNodeMarkup(u.pos,e),o&&o(d),!1}}return Object(cc["g"])(e)(n,o)}},Rc=Object(j["defineComponent"])({name:"prosemirror-editor",emits:["update","focus","blur"],props:{elementId:{type:String,required:!0},defaultColor:{type:String,required:!0},defaultFontName:{type:String,required:!0},editable:{type:Boolean,default:!1},value:{type:String,required:!0},autoFocus:{type:Boolean,default:!1}},setup:function(e,t){var n,o=t.emit,c=se(),l=Object(j["computed"])((function(){return c.state.handleElementId})),a=Object(j["ref"])(),r=Object(ce["debounce"])((function(){o("update",n.dom.innerHTML)}),300,{trailing:!0}),i=function(){"请输入内容"===e.value&&setTimeout((function(){Object(Jo["d"])(n.state,n.dispatch)}),0),c.commit(y.SET_DISABLE_HOTKEYS_STATE,!0),o("focus")},u=function(){c.commit(y.SET_DISABLE_HOTKEYS_STATE,!1),o("blur")},d=Object(ce["debounce"])((function(){var t=z(n,{color:e.defaultColor,fontname:e.defaultFontName});c.commit(y.SET_RICHTEXT_ATTRS,t)}),30,{trailing:!0}),s=function(){r(),d()},f=Object(j["computed"])((function(){return e.value}));Object(j["watch"])(f,(function(){if(n&&!n.hasFocus()){var e=n.state,t=e.doc,o=e.tr;n.dispatch(o.replaceRangeWith(0,t.content.size,Lc(f.value)))}})),Object(j["watch"])((function(){return e.editable}),(function(){n.setProps({editable:function(){return e.editable}})})),Object(j["onMounted"])((function(){n=Vc(a.value,f.value,{handleDOMEvents:{focus:i,blur:u,keydown:s,click:d},editable:function(){return e.editable}}),e.autoFocus&&n.focus()})),Object(j["onUnmounted"])((function(){n&&n.destroy()}));var p=function(t){if(l.value===e.elementId){var o,c="command"in t?[t]:t,a=Object(w["a"])(c);try{for(a.s();!(o=a.n()).done;){var i=o.value;if("fontname"===i.command&&i.value){var u=n.state.schema.marks.fontname.create({fontname:i.value}),s=n.state.selection.empty;s&&Object(Jo["d"])(n.state,n.dispatch);var f=n.state.selection,p=f.$from,m=f.$to;n.dispatch(n.state.tr.addMark(p.pos,m.pos,u))}else if("fontsize"===i.command&&i.value){var b=n.state.schema.marks.fontsize.create({fontsize:i.value}),v=n.state.selection.empty;v&&Object(Jo["d"])(n.state,n.dispatch);var O=n.state.selection,h=O.$from,j=O.$to;n.dispatch(n.state.tr.addMark(h.pos,j.pos,b))}else if("color"===i.command&&i.value){var g=n.state.schema.marks.forecolor.create({color:i.value}),y=n.state.selection.empty;y&&Object(Jo["d"])(n.state,n.dispatch);var E=n.state.selection,C=E.$from,x=E.$to;n.dispatch(n.state.tr.addMark(C.pos,x.pos,g))}else if("backcolor"===i.command&&i.value){var k=n.state.schema.marks.backcolor.create({backcolor:i.value}),I=n.state.selection.empty;I&&Object(Jo["d"])(n.state,n.dispatch);var S=n.state.selection,N=S.$from,T=S.$to;n.dispatch(n.state.tr.addMark(N.pos,T.pos,k))}else if("bold"===i.command){var L=n.state.selection.empty;L&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.strong)(n.state,n.dispatch)}else if("em"===i.command){var V=n.state.selection.empty;V&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.em)(n.state,n.dispatch)}else if("underline"===i.command){var _=n.state.selection.empty;_&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.underline)(n.state,n.dispatch)}else if("strikethrough"===i.command){var B=n.state.selection.empty;B&&Object(Jo["d"])(n.state,n.dispatch),Object(Jo["f"])(n.state.schema.marks.strikethrough)(n.state,n.dispatch)}else if("subscript"===i.command)Object(Jo["f"])(n.state.schema.marks.subscript)(n.state,n.dispatch);else if("superscript"===i.command)Object(Jo["f"])(n.state.schema.marks.superscript)(n.state,n.dispatch);else if("blockquote"===i.command)Object(Jo["g"])(n.state.schema.nodes.blockquote)(n.state,n.dispatch);else if("code"===i.command)Object(Jo["f"])(n.state.schema.marks.code)(n.state,n.dispatch);else if("align"===i.command&&i.value)Ac(n,i.value);else if("bulletList"===i.command){var D=n.state.schema.nodes,M=D.bullet_list,A=D.list_item;Pc(M,A)(n.state,n.dispatch)}else if("orderedList"===i.command){var z=n.state.schema.nodes,P=z.ordered_list,R=z.list_item;Pc(P,R)(n.state,n.dispatch)}else if("clear"===i.command){var F=n.state.selection.empty;F&&Object(Jo["d"])(n.state,n.dispatch);var H=n.state.selection,U=H.$from,G=H.$to;n.dispatch(n.state.tr.removeMark(U.pos,G.pos))}else"insert"===i.command&&i.value&&n.dispatch(n.state.tr.insertText(i.value))}}catch(q){a.e(q)}finally{a.f()}n.focus(),r(),d()}};return Dc.on(Zo.RICH_TEXT_COMMAND,p),Object(j["onUnmounted"])((function(){Dc.off(Zo.RICH_TEXT_COMMAND,p)})),{editorViewRef:a}}});n("5a85");Rc.render=Yo,Rc.__scopeId="data-v-3100bb88";var Fc=Rc,Hc=Object(j["defineComponent"])({name:"editable-element-text",components:{ElementOutline:Xo,ProsemirrorEditor:Fc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=se(),n=We(),o=n.addHistorySnapshot,c=Object(j["ref"])(),l=Object(j["computed"])((function(){return e.elementInfo.shadow})),a=io(l),r=a.shadowStyle,i=Object(j["computed"])((function(){return t.state.handleElementId})),u=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo,n))},d=Object(j["ref"])(-1),s=Object(j["computed"])((function(){return t.state.isScaling}));Object(j["watch"])(s,(function(){i.value===e.elementInfo.id&&(s.value||-1===d.value||(t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:d.value}}),d.value=-1))}));var f=function(n){var o=n[0].contentRect;if(c.value){var l=o.height;e.elementInfo.height!==l&&(s.value?d.value=l:t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:l}}))}},p=new ResizeObserver(f);Object(j["onMounted"])((function(){c.value&&p.observe(c.value)})),Object(j["onUnmounted"])((function(){c.value&&p.unobserve(c.value)}));var m=function(n){t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{content:n}}),o()};return{elementRef:c,shadowStyle:r,updateContent:m,handleSelectElement:u}}});n("b893");Hc.render=Ho,Hc.__scopeId="data-v-3c0937ee";var Uc=Hc;Object(j["pushScopeId"])("data-v-5a268d2a");var Gc={key:0},qc=["transform"],Xc=["d","fill","stroke","stroke-width","stroke-dasharray"],Wc=["innerHTML"];function Yc(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("GradientDefs"),r=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveComponent"])("ProsemirrorEditor"),u=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle,color:e.text.defaultColor,fontFamily:e.text.defaultFontName}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)}),onDblclick:t[3]||(t[3]=function(t){return e.enterEditing()})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:Object(j["withCtx"])((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createElementBlock"])("defs",Gc,[Object(j["createVNode"])(a,{id:"editabel-gradient-".concat(e.elementInfo.id),type:e.elementInfo.gradient.type,color1:e.elementInfo.gradient.color[0],color2:e.elementInfo.gradient.color[1],rotate:e.elementInfo.gradient.rotate},null,8,["id","type","color1","color2","rotate"])])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox,", ").concat(e.elementInfo.height/e.elementInfo.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createElementVNode"])("path",{"vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",d:e.elementInfo.path,fill:e.elementInfo.gradient?"url(#editabel-gradient-".concat(e.elementInfo.id,")"):e.elementInfo.fill,stroke:e.outlineColor,"stroke-width":e.outlineWidth,"stroke-dasharray":"dashed"===e.outlineStyle?"10 6":"0 0"},null,8,Xc)],8,qc)]})),_:1},8,["width","height"]),Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["shape-text",e.text.align])},[e.editable?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,elementId:e.elementInfo.id,defaultColor:e.text.defaultColor,defaultFontName:e.text.defaultFontName,editable:!e.elementInfo.lock,autoFocus:!0,value:e.text.content,onUpdate:t[0]||(t[0]=function(t){return e.updateText(t)}),onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(){}),["stop"]))},null,8,["elementId","defaultColor","defaultFontName","editable","value"])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"show-text ProseMirror-static",innerHTML:e.text.content},null,8,Wc))],2)],36),[[u,e.contextmenus]])],4)],6)}Object(j["popScopeId"])();var Zc=["id","gradientTransform"],Jc=["stop-color"],Kc=["stop-color"],Qc=["id"],$c=["stop-color"],el=["stop-color"];function tl(e,t,n,o,c,l){return"linear"===e.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("linearGradient",{key:0,id:e.id,x1:"0%",y1:"0%",x2:"100%",y2:"0%",gradientTransform:"rotate(".concat(e.rotate,",0.5,0.5)")},[Object(j["createElementVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,Jc),Object(j["createElementVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,Kc)],8,Zc)):(Object(j["openBlock"])(),Object(j["createElementBlock"])("radialGradient",{key:1,id:e.id},[Object(j["createElementVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,$c),Object(j["createElementVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,el)],8,Qc))}var nl=Object(j["defineComponent"])({name:"gradient-defs",props:{id:{type:String,required:!0},type:{type:String},color1:{type:String,required:!0},color2:{type:String,required:!0},rotate:{type:Number,default:0}}});nl.render=tl;var ol=nl,cl=Object(j["defineComponent"])({name:"editable-element-shape",components:{GradientDefs:ol,ProsemirrorEditor:Fc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=se(),n=We(),o=n.addHistorySnapshot,c=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},l=Object(j["computed"])((function(){return e.elementInfo.outline})),a=ho(l),r=a.outlineWidth,i=a.outlineStyle,u=a.outlineColor,d=Object(j["computed"])((function(){return e.elementInfo.shadow})),s=io(d),f=s.shadowStyle,p=Object(j["computed"])((function(){return e.elementInfo.flipH})),m=Object(j["computed"])((function(){return e.elementInfo.flipV})),b=uo(p,m),v=b.flipStyle,O=Object(j["ref"])(!1),h=function(){O.value=!0,t.commit(y.SET_EDITING_SHAPE_ELEMENT_ID,e.elementInfo.id)},g=function(){O.value=!1,t.commit(y.SET_EDITING_SHAPE_ELEMENT_ID,"")},E=Object(j["computed"])((function(){return t.state.handleElementId}));Object(j["watch"])(E,(function(){E.value!==e.elementInfo.id&&O.value&&g()}));var C=Object(j["computed"])((function(){var t={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"};return e.elementInfo.text?e.elementInfo.text:t})),x=function(n){var c=Object(I["a"])(Object(I["a"])({},C.value),{},{content:n});t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{text:c}}),o()};return{shadowStyle:f,outlineWidth:r,outlineStyle:i,outlineColor:u,flipStyle:v,editable:O,text:C,handleSelectElement:c,updateText:x,enterEditing:h}}});n("4bb1");cl.render=Yc,cl.__scopeId="data-v-5a268d2a";var ll=cl;Object(j["pushScopeId"])("data-v-1d4bfa98");var al=["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"],rl=["d"];function il(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinePointMarker"),r=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,id:e.elementInfo.id,position:"start",type:e.elementInfo.points[0],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0),e.elementInfo.points[1]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,id:e.elementInfo.id,position:"end",type:e.elementInfo.points[1],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0)]),Object(j["createElementVNode"])("path",{d:e.path,stroke:e.elementInfo.color,"stroke-width":e.elementInfo.width,"stroke-dasharray":e.lineDashArray,fill:"none","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":"","marker-start":e.elementInfo.points[0]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[0],"-start)"):"","marker-end":e.elementInfo.points[1]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[1],"-end)"):""},null,8,al),Object(j["withDirectives"])(Object(j["createElementVNode"])("path",{class:"line-path",d:e.path,stroke:"transparent","stroke-width":"20",fill:"none",onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)})},null,40,rl),[[i,e.contextmenus]])]})),_:1},8,["width","height"])],4)],6)}Object(j["popScopeId"])();var ul=["id","markerWidth","markerHeight","refX","refY"],dl=["d","fill","transform"];function sl(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("marker",{id:"".concat(e.id,"-").concat(e.type,"-").concat(e.position),markerUnits:"userSpaceOnUse",orient:"auto",markerWidth:3*e.size,markerHeight:3*e.size,refX:1.5*e.size,refY:1.5*e.size},[Object(j["createElementVNode"])("path",{d:e.path,fill:e.color,transform:"scale(".concat(.3*e.size,", ").concat(.3*e.size,") rotate(").concat(e.rotate,", 5, 5)")},null,8,dl)],8,ul)}var fl={dot:"m0 5a5 5 0 1 0 10 0a5 5 0 1 0 -10 0z",arrow:"M0,0 L10,5 0,10 Z"},pl={"arrow-start":180,"arrow-end":0},ml=Object(j["defineComponent"])({name:"line-point-marker",props:{id:{type:String,required:!0},position:{type:String,required:!0},type:{type:String,required:!0},color:{type:String},baseSize:{type:Number,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return fl[e.type]})),n=Object(j["computed"])((function(){return pl["".concat(e.type,"-").concat(e.position)]||0})),o=Object(j["computed"])((function(){return e.baseSize<2?2:e.baseSize}));return{path:t,rotate:n,size:o}}});ml.render=sl;var bl=ml,vl=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:bl},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=Object(j["computed"])((function(){return e.elementInfo.shadow})),o=io(n),c=o.shadowStyle,l=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),a=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),r=Object(j["computed"])((function(){return"dashed"===e.elementInfo.style?"10 6":"0 0"})),i=Object(j["computed"])((function(){return Ge(e.elementInfo)}));return{handleSelectElement:t,shadowStyle:c,svgWidth:l,svgHeight:a,lineDashArray:r,path:i}}});n("0d71");vl.render=il,vl.__scopeId="data-v-1d4bfa98";var Ol=vl;function hl(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline"),r=Object(j["resolveComponent"])("Chart"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-chart",{lock:e.elementInfo.lock}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill}),onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)}),onDblclick:t[1]||(t[1]=function(t){return e.openDataEditor()})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,type:e.elementInfo.chartType,data:e.elementInfo.data,options:e.elementInfo.options,themeColor:e.elementInfo.themeColor,gridColor:e.elementInfo.gridColor,legends:e.elementInfo.data.legends,legend:e.elementInfo.legend||""},null,8,["width","height","type","data","options","themeColor","gridColor","legends","legend"])],36),[[i,e.contextmenus]])],6)}function jl(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"chart",style:Object(j["normalizeStyle"])({flexDirection:"top"===e.legend?"column-reverse":"column"})},[Object(j["createElementVNode"])("div",{class:"chart-content",ref:"chartRef",style:Object(j["normalizeStyle"])({width:e.width+"px",height:e.chartHeight+"px",transform:"scale(".concat(1/e.slideScale,")")})},null,4),e.legend?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:"legends",style:Object(j["normalizeStyle"])({transform:"scale(".concat(1/e.slideScale,")")})},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.legends,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"legend",key:n,style:Object(j["normalizeStyle"])({color:e.gridColor})},[Object(j["createElementVNode"])("div",{class:"block",style:Object(j["normalizeStyle"])({backgroundColor:e.themeColors[n]})},null,4),Object(j["createTextVNode"])(" "+Object(j["toDisplayString"])(t),1)],4)})),128))],4)):Object(j["createCommentVNode"])("",!0)],4)}var gl=n("ba48"),yl=n.n(gl),El=(n("aa97"),Object(j["defineComponent"])({name:"chart",props:{width:{type:Number,required:!0},height:{type:Number,required:!0},type:{type:String,required:!0},data:{type:Object,required:!0},options:{type:Object},themeColor:{type:Array,required:!0},legends:{type:Array,required:!0},gridColor:{type:String},legend:{type:String}},setup:function(e){var t,n=Object(j["ref"])(),o=Object(j["inject"])("slideScale")||Object(j["ref"])(1),c=Object(j["computed"])((function(){return e.legend?e.height-20:e.height})),l=function(){var t=e.options||{},n=Object(I["a"])(Object(I["a"])({},t),{},{width:e.width*o.value,height:c.value*o.value}),l="pie"===e.type?Object(I["a"])(Object(I["a"])({},e.data),{},{series:e.data.series[0]}):e.data;return{data:l,options:n}},a=function(){if(n.value){var o=Object(ce["upperFirst"])(e.type),c=l(),a=c.data,r=c.options;t=new yl.a[o](n.value,a,r)}},r=function(){if(t){var e=l(),n=e.data,o=e.options;t.update(n,o)}else a()};Object(j["watch"])([function(){return e.width},function(){return e.height},function(){return e.data},o],r),Object(j["onMounted"])(a);var i=Object(j["computed"])((function(){var t=[];if(10===e.themeColor.length)t=e.themeColor;else if(1===e.themeColor.length)t=H()(e.themeColor[0]).analogous(10).map((function(e){return e.toHexString()}));else{var n=e.themeColor.length,o=H()(e.themeColor[n-1]).analogous(11-n).map((function(e){return e.toHexString()}));t=[].concat(Object(oe["a"])(e.themeColor.slice(0,n-1)),Object(oe["a"])(o))}return t})),u=function(){if(n.value)for(var e=0;e<10;e++)n.value.style.setProperty("--theme-color-".concat(e+1),i.value[e])};Object(j["watch"])(i,u),Object(j["onMounted"])(u);var d=function(){n.value&&e.gridColor&&n.value.style.setProperty("--grid-color",e.gridColor)};return Object(j["watch"])((function(){return e.gridColor}),d),Object(j["onMounted"])(d),{chartHeight:c,themeColors:i,slideScale:o,chartRef:n}}}));n("1287"),n("e9e5");El.render=jl,El.__scopeId="data-v-ee28fd7e";var Cl=El,xl=Object(j["defineComponent"])({name:"editable-element-chart",components:{ElementOutline:Xo,Chart:Cl},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=function(){Dc.emit(Zo.OPEN_CHART_DATA_EDITOR)};return{handleSelectElement:t,openDataEditor:n}}});n("6d619");xl.render=hl,xl.__scopeId="data-v-138d40b9";var kl=xl;Object(j["pushScopeId"])("data-v-10d814ca");var Il={class:"element-content"};function wl(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("EditableTable"),r=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["editable-element-table",{lock:e.elementInfo.lock}]),ref:"elementRef",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",Il,[Object(j["createVNode"])(a,{onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(){}),["stop"])),data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme,editable:e.editable,onChange:t[1]||(t[1]=function(t){return e.updateTableCells(t)}),onChangeColWidths:t[2]||(t[2]=function(t){return e.updateColWidths(t)}),onChangeSelectedCells:t[3]||(t[3]=function(t){return e.updateSelectedCells(t)})},null,8,["data","width","colWidths","outline","theme","editable"]),!e.editable||e.elementInfo.lock?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:Object(j["normalizeClass"])(["table-mask",{lock:e.elementInfo.lock}]),onDblclick:t[4]||(t[4]=function(t){return e.startEdit()}),onMousedown:t[5]||(t[5]=function(t){return e.handleSelectElement(t)})},[Object(j["createElementVNode"])("div",{class:"mask-tip",style:Object(j["normalizeStyle"])({transform:"scale(".concat(1/e.canvasScale,")")})},"双击编辑",4)],34)):Object(j["createCommentVNode"])("",!0)],512),[[r,e.contextmenus]])],6)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-5cfa4d0e");var Sl={key:0,class:"handler"},Nl=["onMousedown"],Tl=["width"],Ll=["rowspan","colspan","data-cell-index","onMousedown","onMouseenter"],Vl=["innerHTML"];function _l(e,t,n,o,c,l){var a,r,i,u,d,s=Object(j["resolveComponent"])("CustomTextarea"),f=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"editable-table",style:Object(j["normalizeStyle"])({width:e.totalWidth+"px"})},[e.editable?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Sl,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.dragLinePosition,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"drag-line",key:n,style:Object(j["normalizeStyle"])({left:t+"px"}),onMousedown:function(t){return e.handleMousedownColHandler(t,n)}},null,44,Nl)})),128))])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("table",{class:Object(j["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(j["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(j["createElementVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,Tl)})),128))]),Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.tableCells,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("tr",{key:n},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t,o){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("td",{class:Object(j["normalizeClass"])(["cell",{selected:e.selectedCells.includes("".concat(n,"_").concat(o))&&e.selectedCells.length>1,active:e.activedCell==="".concat(n,"_").concat(o)}]),style:Object(j["normalizeStyle"])(Object(I["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(t.style))),key:t.id,rowspan:t.rowspan,colspan:t.colspan,"data-cell-index":"".concat(n,"_").concat(o),onMousedown:function(t){return e.handleCellMousedown(t,n,o)},onMouseenter:function(t){return e.handleCellMouseenter(n,o)}},[e.activedCell==="".concat(n,"_").concat(o)?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,class:Object(j["normalizeClass"])(["cell-text",{active:e.activedCell==="".concat(n,"_").concat(o)}]),contenteditable:"plaintext-only",value:t.text,onUpdateValue:function(t){return e.handleInput(t,n,o)},onInsertExcelData:function(t){return e.insertExcelData(t,n,o)}},null,8,["class","value","onUpdateValue","onInsertExcelData"])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"cell-text",innerHTML:e.formatText(t.text)},null,8,Vl))],46,Ll)),[[j["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))],[f,function(t){return e.contextmenus(t)}]])})),128))])})),128))])],6)],4)}Object(j["popScopeId"])();var Bl=function(e){if(!e)return{};var t=e.bold,n=e.em,o=e.underline,c=e.strikethrough,l=e.color,a=e.backcolor,r=e.fontsize,i=e.fontname,u=e.align,d="".concat(o?"underline":""," ").concat(c?"line-through":"");return" "===d&&(d="none"),{fontWeight:t?"bold":"normal",fontStyle:n?"italic":"normal",textDecoration:d,color:l||"#000",backgroundColor:a||"",fontSize:r||"14px",fontFamily:i||"微软雅黑",textAlign:u||"left"}},Dl=function(e){return e.replace(/\n/g,"
").replace(/ /g," ")},Ml=function(e){var t=Object(j["computed"])((function(){for(var t=[],n=0;n1||l.rowspan>1)for(var a=n;a=d&&m<=f&&v>=s&&v<=p&&u.push("".concat(m,"_").concat(v));return u}));Object(j["watch"])(g,(function(e,t){Object(ce["isEqual"])(e,t)||n("changeSelectedCells",g.value)}));var y=Object(j["computed"])((function(){return g.value.length>1?null:g.value[0]})),E=Object(j["computed"])((function(){if(!a.value.length)return null;var e=Object(Ut["a"])(a.value,2),t=e[0],n=e[1];if(!r.value.length)return{row:[t,t],col:[n,n]};var o=Object(Ut["a"])(r.value,2),c=o[0],l=o[1];if(t===c&&n===l)return{row:[t,t],col:[n,n]};var i=Math.min(t,c),u=Math.min(n,l),d=Math.max(t,c),s=Math.max(n,l);return{row:[i,d],col:[u,s]}})),C=function(){return l.value=!1},x=function(e,t,n){0===e.button&&(r.value=[],l.value=!0,a.value=[t,n])},k=function(e,t){l.value&&(r.value=[e,t])};Object(j["onMounted"])((function(){document.addEventListener("mouseup",C)})),Object(j["onUnmounted"])((function(){document.removeEventListener("mouseup",C)}));var w=function(e,t){return h.value.includes("".concat(e,"_").concat(t))},S=function(e){var t=i.value.length-1;a.value=[0,e],r.value=[t,e]},N=function(e){var t=i.value[e].length-1;a.value=[e,0],r.value=[e,t]},T=function(){var e=i.value.length-1,t=i.value[e].length-1;a.value=[0,0],r.value=[e,t]},L=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=i.value[e],o=[],c=0;c=0;u--)if(!w(u,r)){t[u][r].rowspan=t[u][r].rowspan-1;break}t.splice(e,1),i.value=t},V=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),o=[],c=0;c=0;u--)if(!w(r,u)){t[r][u].colspan=t[r][u].colspan-1;break}i.value=t.map((function(t){return t.splice(e,1),t})),f.value.splice(e,1),n("changeColWidths",f.value)},_=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=[],o=0;oi.value.length&&(a=t+c-i.value.length),o+l>i.value[0].length&&(r=o+l-i.value[0].length),(a||r)&&D(a,r),Object(j["nextTick"])((function(){for(var a=0;a1,n=e[0].length>1;return{canDeleteRow:t,canDeleteCol:n}},X=function(e,t){var n=g.value.length>1,o=i.value[e][t],c=n,l=!n&&(o.rowspan>1||o.colspan>1);return{canMerge:c,canSplit:l}},W=function(e){var t=e.dataset.cellIndex,n=+t.split("_")[0],o=+t.split("_")[1];g.value.includes("".concat(n,"_").concat(o))||(a.value=[n,o],r.value=[]);var c=X(n,o),l=c.canMerge,i=c.canSplit,u=q(),d=u.canDeleteRow,s=u.canDeleteCol;return[{text:"插入列",children:[{text:"到左侧",handler:function(){return B(o)}},{text:"到右侧",handler:function(){return B(o+1)}}]},{text:"插入行",children:[{text:"到上方",handler:function(){return _(n)}},{text:"到下方",handler:function(){return _(n+1)}}]},{text:"删除列",disable:!s,handler:function(){return V(o)}},{text:"删除行",disable:!d,handler:function(){return L(n)}},{divider:!0},{text:"合并单元格",disable:!l,handler:M},{text:"取消合并单元格",disable:!i,handler:function(){return A(n,o)}},{divider:!0},{text:"选中当前列",handler:function(){return S(o)}},{text:"选中当前行",handler:function(){return N(n)}},{text:"选中全部单元格",handler:T}]};return{getTextStyle:Bl,dragLinePosition:b,tableCells:i,colSizeList:f,totalWidth:p,hideCells:h,selectedCells:g,activedCell:y,selectedRange:E,handleCellMousedown:x,handleCellMouseenter:k,selectCol:S,selectRow:N,handleMousedownColHandler:z,contextmenus:W,handleInput:H,insertExcelData:U,subThemeColor:s,formatText:Dl}}});n("2c82");Hl.render=_l,Hl.__scopeId="data-v-5cfa4d0e";var Ul=Hl,Gl=Object(j["defineComponent"])({name:"editable-element-table",components:{EditableTable:Ul},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.handleElementId})),c=Object(j["ref"])(),l=We(),a=l.addHistorySnapshot,r=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},i=Object(j["ref"])(!1);Object(j["watch"])(o,(function(){o.value!==e.elementInfo.id&&(i.value=!1)})),Object(j["watch"])(i,(function(){t.commit(y.SET_DISABLE_HOTKEYS_STATE,i.value)}));var u=function(){e.elementInfo.lock||(i.value=!0)},d=Object(j["ref"])(-1),s=Object(j["computed"])((function(){return t.state.isScaling}));Object(j["watch"])(s,(function(){o.value===e.elementInfo.id&&(s.value&&(i.value=!1),s.value||-1===d.value||(t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:d.value}}),d.value=-1))}));var f=function(n){var o=n[0].contentRect;if(c.value){var l=o.height;e.elementInfo.height!==l&&(s.value?d.value=l:t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:l}}))}},p=new ResizeObserver(f);Object(j["onMounted"])((function(){c.value&&p.observe(c.value)})),Object(j["onUnmounted"])((function(){c.value&&p.unobserve(c.value)}));var m=function(n){t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{data:n}}),a()},b=function(n){var o=n.reduce((function(e,t){return e+t})),c=n.map((function(e){return e/o}));t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{width:o,colWidths:c}}),a()},v=function(e){Object(j["nextTick"])((function(){return t.commit(y.SET_SELECTED_TABLE_CELLS,e)}))};return{elementRef:c,canvasScale:n,handleSelectElement:r,updateTableCells:m,updateColWidths:b,editable:i,startEdit:u,updateSelectedCells:v}}});n("389d");Gl.render=wl,Gl.__scopeId="data-v-10d814ca";var ql=Gl,Xl=Object(j["defineComponent"])({name:"editable-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},isMultiSelect:{type:Boolean,required:!0},selectElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,Fo),Object(q["a"])(t,no.TEXT,Uc),Object(q["a"])(t,no.SHAPE,ll),Object(q["a"])(t,no.LINE,Ol),Object(q["a"])(t,no.CHART,kl),Object(q["a"])(t,no.TABLE,ql),t);return n[e.elementInfo.type]||null})),n=at(),o=n.orderElement,c=oo(),l=c.alignElementToCanvas,a=nt(),r=a.combineElements,i=a.uncombineElements,u=tt(),d=u.deleteElement,s=et(),f=s.lockElement,p=s.unlockElement,m=ot(),b=m.copyElement,v=m.pasteElement,O=m.cutElement,h=ct(),g=h.selectAllElement,y=function(){return e.elementInfo.lock?[{text:"解锁",handler:function(){return p(e.elementInfo)}}]:[{text:"剪切",subText:"Ctrl + X",handler:O},{text:"复制",subText:"Ctrl + C",handler:b},{text:"粘贴",subText:"Ctrl + V",handler:v},{divider:!0},{text:"水平居中",handler:function(){return l(pe.HORIZONTAL)},children:[{text:"水平垂直居中",handler:function(){return l(pe.CENTER)}},{text:"水平居中",handler:function(){return l(pe.HORIZONTAL)}},{text:"左对齐",handler:function(){return l(pe.LEFT)}},{text:"右对齐",handler:function(){return l(pe.RIGHT)}}]},{text:"垂直居中",handler:function(){return l(pe.VERTICAL)},children:[{text:"水平垂直居中",handler:function(){return l(pe.CENTER)}},{text:"垂直居中",handler:function(){return l(pe.VERTICAL)}},{text:"顶部对齐",handler:function(){return l(pe.TOP)}},{text:"底部对齐",handler:function(){return l(pe.BOTTOM)}}]},{divider:!0},{text:"置于顶层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,fe.TOP)},children:[{text:"置于顶层",handler:function(){return o(e.elementInfo,fe.TOP)}},{text:"上移一层",handler:function(){return o(e.elementInfo,fe.UP)}}]},{text:"置于底层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,fe.BOTTOM)},children:[{text:"置于底层",handler:function(){return o(e.elementInfo,fe.BOTTOM)}},{text:"下移一层",handler:function(){return o(e.elementInfo,fe.DOWN)}}]},{divider:!0},{text:"设置链接",handler:e.openLinkDialog},{text:e.elementInfo.groupId?"取消组合":"组合",subText:"Ctrl + G",handler:e.elementInfo.groupId?i:r,hide:!e.isMultiSelect},{text:"全选",subText:"Ctrl + A",handler:g},{text:"锁定",subText:"Ctrl + L",handler:f},{text:"删除",subText:"Delete",handler:d}]};return{currentElementComponent:t,contextmenus:y}}});Xl.render=to;var Wl=Xl;function Yl(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])("mouse-selection quadrant-".concat(n.quadrant)),style:Object(j["normalizeStyle"])({top:n.top+"px",left:n.left+"px",width:n.width+"px",height:n.height+"px"})},null,6)}var Zl={name:"mouse-selection",props:{top:{type:Number,required:!0},left:{type:Number,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},quadrant:{type:Number,required:!0,validator:function(e){return[1,2,3,4].includes(e)}}}};n("2007");Zl.render=Yl,Zl.__scopeId="data-v-1619c258";var Jl=Zl;function Kl(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("GridLines");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"viewport-background",style:Object(j["normalizeStyle"])(e.backgroundStyle)},[e.showGridLines?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0})):Object(j["createCommentVNode"])("",!0)],4)}Object(j["pushScopeId"])("data-v-1d945f13");var Ql=["d","stroke"];function $l(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"grid-lines"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("path",{style:Object(j["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")}),d:e.path,fill:"none",stroke:e.gridColor,"stroke-width":"0.3","stroke-dasharray":"5"},null,12,Ql)]})),_:1})}Object(j["popScopeId"])();var ea=Object(j["defineComponent"])({name:"grid-lines",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasScale})),n=Object(j["computed"])((function(){return e.state.viewportRatio})),o=Object(j["computed"])((function(){var t;return null===(t=e.getters.currentSlide)||void 0===t?void 0:t.background})),c=Object(j["computed"])((function(){var e,t=(null===(e=o.value)||void 0===e?void 0:e.color)||"#fff",n=["#000","#fff"];return H.a.mostReadable(t,n,{includeFallbackColors:!0}).setAlpha(.5).toRgbString()})),l=50,a=function(){for(var e=Je,t=Je*n.value,o="",c=0;c<=Math.floor(t/l);c++)o+="M0 ".concat(c*l," L").concat(e," ").concat(c*l," ");for(var a=0;a<=Math.floor(e/l);a++)o+="M".concat(a*l," 0 L").concat(a*l," ").concat(t," ");return o};return{canvasScale:t,gridColor:c,width:Je,height:Je*n.value,path:a()}}});n("f46c");ea.render=$l,ea.__scopeId="data-v-1d945f13";var ta=ea,na=function(e){var t=Object(j["computed"])((function(){if(!e.value)return{backgroundColor:"#fff"};var t=e.value,n=t.type,o=t.color,c=t.image,l=t.imageSize,a=t.gradientColor,r=t.gradientRotate,i=t.gradientType;if("solid"===n)return{backgroundColor:o};if("image"===n)return c?"repeat"===l?{backgroundImage:"url(".concat(c),backgroundRepeat:"repeat",backgroundSize:"contain"}:{backgroundImage:"url(".concat(c),backgroundRepeat:"no-repeat",backgroundSize:l||"cover"}:{backgroundColor:"#fff"};if("gradient"===n){var u=r||0,d=a?a[0]:"#fff",s=a?a[1]:"#fff";return"radial"===i?{backgroundImage:"radial-gradient(".concat(d,", ").concat(s)}:{backgroundImage:"linear-gradient(".concat(u,"deg, ").concat(d,", ").concat(s)}}return{backgroundColor:"#fff"}}));return{backgroundStyle:t}},oa=Object(j["defineComponent"])({name:"viewport-background",components:{GridLines:ta},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.showGridLines})),n=Object(j["computed"])((function(){var t;return null===(t=e.getters.currentSlide)||void 0===t?void 0:t.background})),o=na(n),c=o.backgroundStyle;return{showGridLines:t,backgroundStyle:c}}});n("f802");oa.render=Kl,oa.__scopeId="data-v-a9ca1b50";var ca=oa;function la(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"alignment-line",style:Object(j["normalizeStyle"])({left:e.left,top:e.top})},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["line",e.type]),style:Object(j["normalizeStyle"])(e.sizeStyle)},null,6)],4)}var aa=Object(j["defineComponent"])({name:"alignment-line",props:{type:{type:String,required:!0},axis:{type:Object,required:!0},length:{type:Number,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.axis.x*n.value+"px"})),c=Object(j["computed"])((function(){return e.axis.y*n.value+"px"})),l=Object(j["computed"])((function(){return"vertical"===e.type?{height:e.length*n.value+"px"}:{width:e.length*n.value+"px"}}));return{left:o,top:c,sizeStyle:l}}});n("92ad");aa.render=la,aa.__scopeId="data-v-2d3eddf5";var ra=aa;Object(j["pushScopeId"])("data-v-04472140");var ia=["d"];function ua(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"element-create-selection",ref:"selectionRef",onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.createSelection(t)}),["stop"]))},[e.start&&e.end?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:Object(j["normalizeClass"])(["selection",e.creatingElement.type]),style:Object(j["normalizeStyle"])(e.position)},["line"===e.creatingElement.type&&e.lineData?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,overflow:"visible",width:e.lineData.svgWidth,height:e.lineData.svgHeight},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("path",{d:e.lineData.path,stroke:"#d14424",fill:"none","stroke-width":"1","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":""},null,8,ia)]})),_:1},8,["width","height"])):Object(j["createCommentVNode"])("",!0)],6)):Object(j["createCommentVNode"])("",!0)],544)}Object(j["popScopeId"])();var da=Object(j["defineComponent"])({name:"element-create-selection",emits:["created"],setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.ctrlOrShiftKeyActive})),l=Object(j["computed"])((function(){return o.state.creatingElement})),a=Object(j["ref"])(),r=Object(j["ref"])(),i=Object(j["ref"])(),u=Object(j["reactive"])({x:0,y:0});Object(j["onMounted"])((function(){if(i.value){var e=i.value.getBoundingClientRect(),t=e.x,n=e.y;u.x=t,u.y=n}}));var d=function(e){var t=!0,o=e.pageX,i=e.pageY;a.value=[o,i],document.onmousemove=function(e){if(l.value&&t){var n=e.pageX,a=e.pageY;if(c.value){var u=n-o,d=a-i,s=Math.abs(u),f=Math.abs(d);if("shape"===l.value.type){var p=d>0&&u<0||d<0&&u>0;s>f?a=p?i-u:i+u:n=p?o-d:o+d}else"line"===l.value.type&&(s>f?a=i:n=o)}r.value=[n,a]}},document.onmouseup=function(e){var c,u;document.onmousemove=null,document.onmouseup=null,t=!1;var d=e.pageX,s=e.pageY,f=30;if("line"===(null===(c=l.value)||void 0===c?void 0:c.type)&&(Math.abs(d-o)>=f||Math.abs(s-i)>=f))n("created",{start:a.value,end:r.value});else if("line"!==(null===(u=l.value)||void 0===u?void 0:u.type)&&Math.abs(d-o)>=f&&Math.abs(s-i)>=f)n("created",{start:a.value,end:r.value});else{var p=200,m=Math.min(d,o),b=Math.min(s,i),v=Math.max(d,o),O=Math.max(s,i),h=v-m>=f?v-m:p,j=O-b>=f?O-b:p;n("created",{start:[m,b],end:[m+h,b+j]})}}},s=Object(j["computed"])((function(){if(!a.value||!r.value)return null;if(!l.value||"line"!==l.value.type)return null;var e=Object(Ut["a"])(a.value,2),t=e[0],n=e[1],o=Object(Ut["a"])(r.value,2),c=o[0],i=o[1],u=Math.min(t,c),d=Math.max(t,c),s=Math.min(n,i),f=Math.max(n,i),p=d-u>=24?d-u:24,m=f-s>=24?f-s:24,b=t===u?0:d-u,v=n===s?0:f-s,O=c===u?0:d-u,h=i===s?0:f-s,j="M".concat(b,", ").concat(v," L").concat(O,", ").concat(h);return{svgWidth:p,svgHeight:m,startX:b,startY:v,endX:O,endY:h,path:j}})),f=Object(j["computed"])((function(){if(!a.value||!r.value)return{};var e=Object(Ut["a"])(a.value,2),t=e[0],n=e[1],o=Object(Ut["a"])(r.value,2),c=o[0],l=o[1],i=Math.min(t,c),d=Math.max(t,c),s=Math.min(n,l),f=Math.max(n,l),p=d-i,m=f-s;return{left:i-u.x+"px",top:s-u.y+"px",width:p+"px",height:m+"px"}}));return{selectionRef:i,start:a,end:r,creatingElement:l,createSelection:d,lineData:s,position:f}}});n("eec0");da.render=ua,da.__scopeId="data-v-04472140";var sa=da;function fa(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"multi-select-operate",style:Object(j["normalizeStyle"])({left:e.minX*e.canvasScale+"px",top:e.minY*e.canvasScale+"px"})},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.disableResize?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleMultiElement(n,{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY},t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))],4)}var pa=function(e,t){var n=Object(j["computed"])((function(){return[{direction:be.LEFT_TOP,style:{}},{direction:be.TOP,style:{left:e.value/2+"px"}},{direction:be.RIGHT_TOP,style:{left:e.value+"px"}},{direction:be.LEFT,style:{top:t.value/2+"px"}},{direction:be.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}},{direction:be.LEFT_BOTTOM,style:{top:t.value+"px"}},{direction:be.BOTTOM,style:{left:e.value/2+"px",top:t.value+"px"}},{direction:be.RIGHT_BOTTOM,style:{left:e.value+"px",top:t.value+"px"}}]})),o=Object(j["computed"])((function(){return[{direction:be.LEFT,style:{top:t.value/2+"px"}},{direction:be.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}}]})),c=Object(j["computed"])((function(){return[{type:me.T,style:{width:e.value+"px"}},{type:me.B,style:{top:t.value+"px",width:e.value+"px"}},{type:me.L,style:{height:t.value+"px"}},{type:me.R,style:{left:e.value+"px",height:t.value+"px"}}]}));return{resizeHandlers:n,textElementResizeHandlers:o,borderLines:c}};function ma(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["resize-handler",e.rotateClassName,e.type])},null,2)}var ba=Object(j["defineComponent"])({name:"resize-handler",props:{type:{type:String,default:""},rotate:{type:Number,default:0}},setup:function(e){var t=Object(j["computed"])((function(){var t="rotate-",n=e.rotate;return n>-22.5&&n<=22.5?t+0:n>22.5&&n<=67.5?t+45:n>67.5&&n<=112.5?t+90:n>112.5&&n<=157.5?t+135:n>157.5||n<=-157.5?t+0:n>-157.5&&n<=-112.5?t+45:n>-112.5&&n<=-67.5?t+90:n>-67.5&&n<=-22.5?t+135:t+0}));return{rotateClassName:t}}});n("0606");ba.render=ma,ba.__scopeId="data-v-680e5917";var va=ba;function Oa(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["border-line",n.type,{wide:n.isWide}])},null,2)}var ha={name:"border-line",props:{type:{type:String,required:!0},isWide:{type:Boolean,default:!1}}};n("fb1d");ha.render=Oa,ha.__scopeId="data-v-630e246b";var ja=ha,ga=Object(j["defineComponent"])({name:"multi-select-operate",components:{ResizeHandler:va,BorderLine:ja},props:{elementList:{type:Array,required:!0},scaleMultiElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.activeElementIdList})),o=Object(j["computed"])((function(){return t.state.canvasScale})),c=Object(j["computed"])((function(){return e.elementList.filter((function(e){return n.value.includes(e.id)}))})),l=Object(j["reactive"])({minX:0,maxX:0,minY:0,maxY:0}),a=Object(j["computed"])((function(){return(l.maxX-l.minX)*o.value})),r=Object(j["computed"])((function(){return(l.maxY-l.minY)*o.value})),i=pa(a,r),u=i.resizeHandlers,d=i.borderLines,s=function(){var e=Re(c.value),t=e.minX,n=e.maxX,o=e.minY,a=e.maxY;l.minX=t,l.maxX=n,l.minY=o,l.maxY=a};Object(j["watchEffect"])(s);var f=Object(j["computed"])((function(){return c.value.some((function(e){return!!("image"!==e.type&&"shape"!==e.type||e.rotate)}))}));return Object(I["a"])(Object(I["a"])({},Object(j["toRefs"])(l)),{},{canvasScale:o,borderLines:d,disableResize:f,resizeHandlers:u})}});n("de7c");ga.render=fa,ga.__scopeId="data-v-4def6455";var ya=ga;Object(j["pushScopeId"])("data-v-46d959c4");var Ea={key:1,class:"animation-index"};function Ca(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinkHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["operate",{"multi-select":e.isMultiSelect&&!e.isActive}]),style:Object(j["normalizeStyle"])({top:e.elementInfo.top*e.canvasScale+"px",left:e.elementInfo.left*e.canvasScale+"px",transform:"rotate(".concat(e.elementInfo.rotate,"deg)"),transformOrigin:"".concat(e.elementInfo.width*e.canvasScale/2,"px ").concat(e.elementInfo.height*e.canvasScale/2,"px")})},[e.isSelected?(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentOperateComponent),{key:0,elementInfo:e.elementInfo,isActiveGroupElement:e.isActiveGroupElement,isMultiSelect:e.isMultiSelect,rotateElement:e.rotateElement,scaleElement:e.scaleElement,dragLineElement:e.dragLineElement},null,8,["elementInfo","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","dragLineElement"])):Object(j["createCommentVNode"])("",!0),"elAnimation"===e.toolbarState&&-1!==e.elementIndexInAnimation?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ea,Object(j["toDisplayString"])(e.elementIndexInAnimation+1),1)):Object(j["createCommentVNode"])("",!0),e.isActive&&e.elementInfo.link?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:2,elementInfo:e.elementInfo,openLinkDialog:e.openLinkDialog,onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(){}),["stop"]))},null,8,["elementInfo","openLinkDialog"])):Object(j["createCommentVNode"])("",!0)],6)}function xa(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["image-element-operate",{cliping:e.isCliping}])},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:Object(j["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))],2)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-9a549510");var ka={class:"rotate-handler"};function Ia(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",ka)}Object(j["popScopeId"])();var wa={name:"rotate-handler"};n("8754");wa.render=Ia,wa.__scopeId="data-v-9a549510";var Sa=wa,Na=Object(j["defineComponent"])({name:"image-element-operate",inheritAttrs:!1,components:{RotateHandler:Sa,ResizeHandler:va,BorderLine:ja},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.clipingImageElementId})),c=Object(j["computed"])((function(){return o.value===e.elementInfo.id})),l=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),a=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),r=pa(l,a),i=r.resizeHandlers,u=r.borderLines;return{isCliping:c,scaleWidth:l,resizeHandlers:i,borderLines:u}}});n("dc02");Na.render=xa,Na.__scopeId="data-v-7dc35c8e";var Ta=Na,La={class:"text-element-operate"};function Va(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",La,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:Object(j["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var _a=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{RotateHandler:Sa,ResizeHandler:va,BorderLine:ja},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),c=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=pa(o,c),a=l.textElementResizeHandlers,r=l.borderLines;return{scaleWidth:o,textElementResizeHandlers:a,borderLines:r}}});_a.render=Va;var Ba=_a,Da={class:"shape-element-operate"};function Ma(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Da,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:Object(j["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var Aa=Object(j["defineComponent"])({name:"shape-element-operate",inheritAttrs:!1,components:{RotateHandler:Sa,ResizeHandler:va,BorderLine:ja},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),c=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=pa(o,c),a=l.resizeHandlers,r=l.borderLines;return{scaleWidth:o,resizeHandlers:a,borderLines:r}}});Aa.render=Ma;var za=Aa,Pa={class:"text-element-operate"};function Ra(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Pa,[e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.dragLineElement(n,e.elementInfo,t.handler)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var Fa=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{ResizeHandler:va},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},dragLineElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){var t=[{handler:ve.START,style:{left:e.elementInfo.start[0]*n.value+"px",top:e.elementInfo.start[1]*n.value+"px"}},{handler:ve.END,style:{left:e.elementInfo.end[0]*n.value+"px",top:e.elementInfo.end[1]*n.value+"px"}}];if(e.elementInfo.curve||e.elementInfo.broken){var o=e.elementInfo.curve||e.elementInfo.broken;t.push({handler:ve.MID,style:{left:o[0]*n.value+"px",top:o[1]*n.value+"px"}})}return t}));return{resizeHandlers:o}}});Fa.render=Ra;var Ha=Fa,Ua={class:"chart-element-operate"};function Ga(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ua,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var qa=Object(j["defineComponent"])({name:"chart-element-operate",inheritAttrs:!1,components:{ResizeHandler:va,BorderLine:ja},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),c=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=pa(o,c),a=l.resizeHandlers,r=l.borderLines;return{scaleWidth:o,resizeHandlers:a,borderLines:r}}});qa.render=Ga;var Xa=qa,Wa={class:"table-element-operate"};function Ya(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("BorderLine"),r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Wa,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(j["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:Object(j["normalizeStyle"])(t.style),onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var Za=Object(j["defineComponent"])({name:"table-element-operate",inheritAttrs:!1,components:{ResizeHandler:va,BorderLine:ja},props:{elementInfo:{type:Object,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return e.elementInfo.outline.width||1})),c=Object(j["computed"])((function(){return(e.elementInfo.width+o.value)*n.value})),l=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),a=pa(c,l),r=a.textElementResizeHandlers,i=a.borderLines;return{scaleWidth:c,textElementResizeHandlers:r,borderLines:i}}});Za.render=Ya;var Ja=Za;Object(j["pushScopeId"])("data-v-9d9e1336");var Ka=["href"],Qa={class:"btns"};function $a(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Divider");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"link-handler",style:Object(j["normalizeStyle"])({top:e.elementInfo.height*e.canvasScale+10+"px"})},[Object(j["createElementVNode"])("a",{class:"link",href:e.elementInfo.link,target:"_blank"},Object(j["toDisplayString"])(e.elementInfo.link),9,Ka),Object(j["createElementVNode"])("div",Qa,[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.openLinkDialog()})},"更换"),Object(j["createVNode"])(a,{type:"vertical"}),Object(j["createElementVNode"])("div",{class:"btn",onClick:t[1]||(t[1]=function(t){return e.removeLink(e.elementInfo)})},"移除")])],4)}Object(j["popScopeId"])();var er=function(){var e=se(),t=We(),n=t.addHistorySnapshot,o=function(t,o){var c=/^(https?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$/;if(!o||!c.test(o))return Ce["a"].error("不是正确的网页链接地址"),!1;var l={link:o};return e.commit(y.UPDATE_ELEMENT,{id:t.id,props:l}),n(),!0},c=function(t){e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.id,propName:"link"}),n()};return{setLink:o,removeLink:c}},tr=Object(j["defineComponent"])({name:"link-handler",props:{elementInfo:{type:Object,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasScale})),n=er(),o=n.removeLink;return{canvasScale:t,removeLink:o}}});n("e28d");tr.render=$a,tr.__scopeId="data-v-9d9e1336";var nr=tr,or=Object(j["defineComponent"])({name:"operate",components:{LinkHandler:nr},props:{elementInfo:{type:Object,required:!0},isSelected:{type:Boolean,required:!0},isActive:{type:Boolean,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0},dragLineElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.toolbarState})),c=Object(j["computed"])((function(){return t.getters.currentSlide})),l=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,Ta),Object(q["a"])(t,no.TEXT,Ba),Object(q["a"])(t,no.SHAPE,za),Object(q["a"])(t,no.LINE,Ha),Object(q["a"])(t,no.CHART,Xa),Object(q["a"])(t,no.TABLE,Ja),t);return n[e.elementInfo.type]||null})),a=Object(j["computed"])((function(){var t=c.value.animations||[];return t.findIndex((function(t){return t.elId===e.elementInfo.id}))}));return{currentOperateComponent:l,canvasScale:n,toolbarState:o,elementIndexInAnimation:a}}});n("86da");or.render=Ca,or.__scopeId="data-v-46d959c4";var cr=or;Object(j["pushScopeId"])("data-v-02317299");var lr={class:"link-dialog"},ar={class:"btns"},rr=Object(j["createTextVNode"])("取消"),ir=Object(j["createTextVNode"])("确认");function ur(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Input"),r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",lr,[Object(j["createVNode"])(a,{value:e.link,"onUpdate:value":t[0]||(t[0]=function(t){return e.link=t}),placeholder:"请输入网页链接地址"},null,8,["value"]),Object(j["createElementVNode"])("div",ar,[Object(j["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(j["withCtx"])((function(){return[rr]})),_:1}),Object(j["createVNode"])(r,{type:"primary",onClick:t[2]||(t[2]=function(t){return e.save()})},{default:Object(j["withCtx"])((function(){return[ir]})),_:1})])])}Object(j["popScopeId"])();var dr=Object(j["defineComponent"])({name:"link-dialog",emits:["close"],setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.handleElement})),l=Object(j["ref"])(""),a=er(),r=a.setLink;Object(j["onMounted"])((function(){var e;null!==(e=c.value)&&void 0!==e&&e.link&&(l.value=c.value.link)}));var i=function(){return n("close")},u=function(){if(c.value){var e=r(c.value,l.value);e?i():l.value=""}};return{link:l,close:i,save:u}}});n("4cf7");dr.render=ur,dr.__scopeId="data-v-02317299";var sr=dr,fr=Object(j["defineComponent"])({name:"editor-canvas",components:{EditableElement:Wl,MouseSelection:Jl,ViewportBackground:ca,AlignmentLine:ra,ElementCreateSelection:sa,MultiSelectOperate:ya,Operate:cr,LinkDialog:sr},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.state.handleElementId})),o=Object(j["computed"])((function(){return e.state.activeGroupElementId})),c=Object(j["computed"])((function(){return e.state.editorAreaFocus})),l=Object(j["computed"])((function(){return e.state.ctrlKeyState})),a=Object(j["computed"])((function(){return e.getters.ctrlOrShiftKeyActive})),r=Object(j["ref"])(),i=Object(j["ref"])([]),u=Object(j["ref"])(!1),d=function(){return u.value=!0};Object(j["watch"])(n,(function(){e.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,"")}));var s=Object(j["computed"])((function(){return e.getters.currentSlide})),f=Object(j["ref"])([]),p=function(){f.value=s.value?JSON.parse(JSON.stringify(s.value.elements)):[]};Object(j["watchEffect"])(p);var m=Object(j["ref"])(),b=Object(j["computed"])((function(){return e.state.canvasScale})),v=Rn(m),O=v.viewportStyles;Hn(m);var h=Fn(f,r),g=h.mouseSelectionState,E=h.updateMouseSelection,C=Kn(f,i),x=C.dragElement,k=Qn(f),I=k.dragLineElement,w=Jn(f,x),S=w.selectElement,N=Zn(f,i),T=N.scaleElement,L=N.scaleMultiElement,V=Gn(f,r),_=V.rotateElement,B=ct(),D=B.selectAllElement,M=tt(),A=M.deleteAllElements,z=ot(),P=z.pasteElement,R=dt(),F=R.enterScreening,H=$e(),U=H.updateSlideIndex,G=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),a.value||E(t),c.value||e.commit(y.SET_EDITORAREA_FOCUS,!0),Pn()},q=function(){c.value&&e.commit(y.SET_EDITORAREA_FOCUS,!1)},X=st(),W=X.scaleCanvas,Y=Object(ce["throttle"])(W,100,{leading:!0,trailing:!1}),Z=Object(ce["throttle"])(U,300,{leading:!0,trailing:!1}),J=function(e){e.preventDefault(),l.value?e.deltaY>0?Y("-"):e.deltaY<0&&Y("+"):e.deltaY>0?Z(Oe.DOWN):e.deltaY<0&&Z(Oe.UP)},K=Object(j["computed"])((function(){return e.state.showGridLines})),Q=function(){e.commit(y.SET_GRID_LINES_STATE,!K.value)},$=Object(j["computed"])((function(){return e.state.creatingElement})),ee=$n(r),te=ee.insertElementFromCreateSelection,ne=function(){return[{text:"粘贴",subText:"Ctrl + V",handler:P},{text:"全选",subText:"Ctrl + A",handler:D},{text:"网格线",subText:K.value?"√":"",handler:Q},{text:"重置当前页",handler:A},{divider:!0},{text:"从当前页演示",subText:"Ctrl+F",handler:F}]};return Object(j["provide"])("slideScale",b),{elementList:f,activeElementIdList:t,handleElementId:n,activeGroupElementId:o,canvasRef:m,viewportRef:r,viewportStyles:O,canvasScale:b,mouseSelectionState:g,currentSlide:s,creatingElement:$,alignmentLines:i,linkDialogVisible:u,openLinkDialog:d,handleClickBlankArea:G,removeEditorAreaFocus:q,insertElementFromCreateSelection:te,selectElement:S,rotateElement:_,scaleElement:T,dragLineElement:I,scaleMultiElement:L,handleMousewheelCanvas:J,contextmenus:ne}}});n("6609");fr.render=zn,fr.__scopeId="data-v-4edd93c1";var pr=fr;Object(j["pushScopeId"])("data-v-59ae6536");var mr={class:"canvas-tool"},br={class:"left-handler"},vr={class:"add-element-handler"},Or={class:"right-handler"},hr={class:"text"};function jr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconBack"),r=Object(j["resolveComponent"])("Tooltip"),i=Object(j["resolveComponent"])("IconNext"),u=Object(j["resolveComponent"])("IconFontSize"),d=Object(j["resolveComponent"])("IconPicture"),s=Object(j["resolveComponent"])("FileInput"),f=Object(j["resolveComponent"])("ShapePool"),p=Object(j["resolveComponent"])("IconGraphicDesign"),m=Object(j["resolveComponent"])("Popover"),b=Object(j["resolveComponent"])("LinePool"),v=Object(j["resolveComponent"])("IconConnection"),O=Object(j["resolveComponent"])("ChartPool"),h=Object(j["resolveComponent"])("IconChartProportion"),g=Object(j["resolveComponent"])("TableGenerator"),y=Object(j["resolveComponent"])("IconInsertTable"),E=Object(j["resolveComponent"])("IconMinus"),C=Object(j["resolveComponent"])("IconPlus"),x=Object(j["resolveComponent"])("IconFullScreen");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",mr,[Object(j["createElementVNode"])("div",br,[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"撤销"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{class:Object(j["normalizeClass"])(["handler-item",{disable:!e.canUndo}]),onClick:t[0]||(t[0]=function(t){return e.undo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"重做"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{class:Object(j["normalizeClass"])(["handler-item",{disable:!e.canRedo}]),onClick:t[1]||(t[1]=function(t){return e.redo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"])]),Object(j["createElementVNode"])("div",vr,[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入文字"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{class:"handler-item",onClick:t[2]||(t[2]=function(t){return e.drawText()})})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(s,{onChange:t[3]||(t[3]=function(t){return e.insertImageElement(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图片"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(m,{trigger:"click",visible:e.shapePoolVisible,"onUpdate:visible":t[5]||(t[5]=function(t){return e.shapePoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{onSelect:t[4]||(t[4]=function(t){return e.drawShape(t)})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入形状"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(m,{trigger:"click",visible:e.linePoolVisible,"onUpdate:visible":t[7]||(t[7]=function(t){return e.linePoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{onSelect:t[6]||(t[6]=function(t){return e.drawLine(t)})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入线条"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(m,{trigger:"click",visible:e.chartPoolVisible,"onUpdate:visible":t[9]||(t[9]=function(t){return e.chartPoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O,{onSelect:t[8]||(t[8]=function(t){e.createChartElement(t),e.chartPoolVisible=!1})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图表"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(h,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(m,{trigger:"click",visible:e.tableGeneratorVisible,"onUpdate:visible":t[12]||(t[12]=function(t){return e.tableGeneratorVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g,{onClose:t[10]||(t[10]=function(t){return e.tableGeneratorVisible=!1}),onInsert:t[11]||(t[11]=function(t){var n=t.row,o=t.col;e.createTableElement(n,o),e.tableGeneratorVisible=!1})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入表格"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"])]),Object(j["createElementVNode"])("div",Or,[Object(j["createVNode"])(E,{class:"handler-item viewport-size",onClick:t[13]||(t[13]=function(t){return e.scaleCanvas("-")})}),Object(j["createElementVNode"])("span",hr,Object(j["toDisplayString"])(e.canvasScalePercentage),1),Object(j["createVNode"])(C,{class:"handler-item viewport-size",onClick:t[14]||(t[14]=function(t){return e.scaleCanvas("+")})}),Object(j["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"适配屏幕"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{class:"handler-item viewport-size-adaptation",onClick:t[15]||(t[15]=function(t){return e.setCanvasPercentage(90)})})]})),_:1},8,["mouseEnterDelay"])])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-612b80ef");var gr={class:"shape-pool"},yr={class:"category-name"},Er={class:"shape-list"},Cr=["onClick"],xr=["transform"],kr=["d"];function Ir(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",gr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.shapeList,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"category",key:t.type},[Object(j["createElementVNode"])("div",yr,Object(j["toDisplayString"])(t.type),1),Object(j["createElementVNode"])("div",Er,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"shape-item",key:n},[Object(j["createElementVNode"])("div",{class:"shape-content",onClick:function(n){return e.selectShape(t)}},[Object(j["createVNode"])(a,{overflow:"visible",width:"18",height:"18"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("g",{transform:"scale(".concat(18/t.viewBox,", ").concat(18/t.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createElementVNode"])("path",{class:"shape-path","vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",fill:"transparent",stroke:"#999","stroke-width":"2",d:t.path},null,8,kr)],8,xr)]})),_:2},1024)],8,Cr)])})),128))])])})),128))])}Object(j["popScopeId"])();var wr=[{type:"矩形",children:[{viewBox:200,path:"M 0 0 L 200 0 L 200 200 L 0 200 Z"},{viewBox:200,path:"M 20 0 L 180 0 Q 200 0 200 20 L 200 180 Q 200 200 180 200 L 20 200 Q 0 200 0 180 L 0 20 Q 0 0 20 0 Z"},{viewBox:200,path:"M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 L 0 150 Z"},{viewBox:200,path:"M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 L 0 200"},{viewBox:200,path:"M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 L 0 50 Z"},{viewBox:200,path:"M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 60 200 Q 0 200 0 140 L 0 0 Z"},{viewBox:200,path:"M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 0 200 L 0 0 Z"},{viewBox:200,path:"M 0 50 Q 0 0 50 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 50 Z"}]},{type:"常用形状",children:[{viewBox:200,path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z"},{viewBox:200,path:"M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z"},{viewBox:200,path:"M 100 0 A 100 100 102 1 0 200 100 L 100 100 L 100 0 Z"},{viewBox:200,path:"M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z"},{viewBox:200,path:"M 100 0 A 100 100 102 1 0 200 100 L 200 0 L 100 0 Z"},{viewBox:200,path:"M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z"},{viewBox:200,path:"M 100 0 L 0 200 L 200 200 L 100 0 Z"},{viewBox:200,path:"M 0 0 L 0 200 L 200 200 Z"},{viewBox:200,path:"M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z"},{viewBox:200,path:"M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z"},{viewBox:200,path:"M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z"},{viewBox:200,path:"M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z"},{viewBox:200,path:"M 100 0 L 0 90 L 50 200 L 150 200 L 200 90 L 100 0 Z"},{viewBox:200,path:"M 100 0 L 0 60 L 0 140 L 100 200 L 200 140 L 200 60 L 100 0 Z"},{viewBox:200,path:"M 60 0 L 140 0 L 200 60 L 200 140 L 140 200 L 60 200 L 0 140 L 0 60 L 60 0 Z"},{viewBox:200,path:"M 75 0 L 125 0 L 175 25 L 200 75 L 200 125 L 175 175 L 125 200 L 75 200 L 25 175 L 0 125 L 0 75 L 25 25 L 75 0 Z"},{viewBox:200,path:"M 100 0 L 0 50 L 0 200 L 200 200 L 200 50 L 100 0 Z"},{viewBox:200,path:"M 150 0 A 50 100 0 1 1 150 200 L 0 200 L 0 0 L 150 0 Z"},{viewBox:200,path:"M 150 0 A 50 100 0 1 1 150 200 L 0 200 A 50 100 0 0 0 0 0 L 150 0 Z"},{viewBox:200,path:"M 200 100 L 150 0 L 0 0 L 50 100 L 0 200 L 150 200 L 200 100 Z"},{viewBox:200,path:"M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z"},{viewBox:200,path:"M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z"},{viewBox:200,path:"M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z"},{viewBox:200,path:"M 50 0 L 150 0 L 150 50 L 200 50 L 200 150 L 150 150 L 150 200 L 50 200 L 50 150 L 0 150 L 0 50 L 50 50 L 50 0 Z"},{viewBox:200,path:"M 0 0 L 0 200 L 200 200 L 200 140 L 60 140 L 60 0 L 0 0 Z"},{viewBox:200,path:"M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z"},{viewBox:200,path:"M0 100 A100 100 0 1 1 0 101 Z M150 100 A50 50 0 1 0 150 101 Z"},{viewBox:200,path:"M 70 0 L 70 70 L 0 70 L 0 130 L 70 130 L 70 200 L 130 200 L 130 130 L 200 130 L 200 70 L 130 70 L 130 0 L 70 0 Z"},{viewBox:200,path:"M 40 0 L 0 40 L 60 100 L 0 160 L 40 200 L 100 140 L 160 200 L 200 160 L 140 100 L 200 40 L 160 0 L 100 60 L 40 0 Z"},{viewBox:200,path:"M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 L 0 0 Z"},{viewBox:200,path:"M 0 40 Q 0 0 40 0 L 160 0 Q 200 0 200 40 L 200 120 Q 200 160 160 160 L 100 160 L 60 200 L 60 160 L 40 160 Q 0 160 0 120 L 0 40 Z"},{viewBox:200,path:"M 180 160 A 100 100 0 1 0 100 200 L 200 200 L 200 160 L 180 160 Z"},{viewBox:200,path:"M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z"},{viewBox:200,path:"M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z"},{viewBox:200,path:"M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z"}]},{type:"箭头",children:[{viewBox:200,path:"M 100 0 L 0 100 L 50 100 L 50 200 L 150 200 L 150 100 L 200 100 L 100 0 Z"},{viewBox:200,path:"M 100 200 L 200 100 L 150 100 L 150 0 L 50 0 L 50 100 L 0 100 L 100 200 Z"},{viewBox:200,path:"M 0 100 L 100 0 L 100 50 L 200 50 L 200 150 L 100 150 L 100 200 L 0 100 Z"},{viewBox:200,path:"M 200 100 L 100 0 L 100 50 L 0 50 L 0 150 L 100 150 L 100 200 L 200 100 Z"},{viewBox:200,path:"M 100 0 L 0 60 L 60 60 L 60 140 L 0 140 L 100 200 L 200 140 L 140 140 L 140 60 L 200 60 L 100 0 Z"},{viewBox:200,path:"M 0 100 L 60 0 L 60 60 L 140 60 L 140 0 L 200 100 L 140 200 L 140 140 L 60 140 L 60 200 L 0 100 Z"},{viewBox:200,path:"M 100 0 L 60 40 L 80 40 L 80 80 L 40 80 L 40 60 L 0 100 L 40 140 L 40 120 L 80 120 L 80 160 L 60 160 L 100 200 L 140 160 L 120 160 L 120 120 L 160 120 L 160 140 L 200 100 L 160 60 L 160 80 L 120 80 L 120 40 L 140 40 L 100 0 Z"},{viewBox:200,path:"M 0 100 L 100 0 L 100 50 L 200 50 L 150 100 L 200 150 L 100 150 L 100 200 L 0 100 Z"},{viewBox:200,path:"M 200 100 L 100 0 L 100 50 L 0 50 L 50 100 L 0 150 L 100 150 L 100 200 L 200 100 Z"},{viewBox:200,path:"M 0 100 L 80 20 L 80 80 L 120 80 L 120 0 L 200 0 L 200 200 L 120 200 L 120 120 L 80 120 L 80 180 L 0 100 Z"},{viewBox:200,path:"M 200 100 L 120 20 L 120 80 L 80 80 L 80 0 L 0 0 L 0 200 L 80 200 L 80 120 L 120 120 L 120 180 L 200 100 Z"},{viewBox:200,path:"M 0 0 L 120 0 L 200 100 L 120 200 L 0 200 L 80 100 L 0 0 Z"},{viewBox:200,path:"M 80 0 L 200 0 L 120 100 L 200 200 L 80 200 L 0 100 L 80 0 Z"},{viewBox:200,path:"M 0 0 L 140 0 L 200 100 L 140 200 L 0 200 L 0 100 L 0 0 Z"},{viewBox:200,path:"M 60 0 L 200 0 L 200 100 L 200 200 L 60 200 L 0 100 L 60 0 Z"},{viewBox:200,path:"M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z"},{viewBox:200,path:"M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z"},{viewBox:200,path:"M 0 0 L 80 0 L 200 100 L 80 200 L 0 200 L 120 100 L 0 0 Z"},{viewBox:200,path:"M 200 0 L 120 0 L 0 100 L 120 200 L 200 200 L 80 100 L 200 0 Z"},{viewBox:200,path:"M 0 200 L 180 200 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 160 L 0 160 L 0 200 Z"},{viewBox:200,path:"M 0 200 L 0 20 L 160 20 L 160 0 L 200 40 L 160 80 L 160 60 L 40 60 L 40 200 L 0 200 Z"},{viewBox:200,path:"M 40 180 L 180 180 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 140 L 40 140 L 40 120 L 0 160 L 40 200 L 40 180 Z"},{viewBox:1024,path:"M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z",special:!0},{viewBox:1024,path:"M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z",special:!0}]},{type:"其他形状",children:[{viewBox:1024,path:"M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z",special:!0},{viewBox:1024,path:"M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z",special:!0},{viewBox:1024,path:"M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z",special:!0},{viewBox:1024,path:"M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z",special:!0},{viewBox:1024,path:"M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z",special:!0},{viewBox:1024,path:"M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z",special:!0},{viewBox:1024,path:"M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z",special:!0},{viewBox:1024,path:"M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z",special:!0},{viewBox:1024,path:"M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z",special:!0},{viewBox:1024,path:"M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z",special:!0},{viewBox:1024,path:"M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z",special:!0},{viewBox:1024,path:"M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z",special:!0},{viewBox:1024,path:"M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z",special:!0},{viewBox:1024,path:"M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z",special:!0},{viewBox:1024,path:"M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z",special:!0},{viewBox:1024,path:"M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z",special:!0}]}],Sr=Object(j["defineComponent"])({name:"shape-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=wr,c=function(e){n("select",e)};return{shapeList:o,selectShape:c}}});n("e202");Sr.render=Ir,Sr.__scopeId="data-v-612b80ef";var Nr=Sr;Object(j["pushScopeId"])("data-v-6302e570");var Tr={class:"line-pool"},Lr={class:"category-name"},Vr={class:"line-list"},_r=["onClick"],Br=["d","stroke-dasharray","marker-start","marker-end"];function Dr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinePointMarker"),r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Tr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.lineList,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"category",key:t.type},[Object(j["createElementVNode"])("div",Lr,Object(j["toDisplayString"])(t.type),1),Object(j["createElementVNode"])("div",Vr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"line-item",key:n},[Object(j["createElementVNode"])("div",{class:"line-content",onClick:function(n){return e.selectLine(t)}},[Object(j["createVNode"])(r,{overflow:"visible",width:"20",height:"20"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("defs",null,[t.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,class:"line-marker",id:"preset-line-".concat(n),position:"start",type:t.points[0],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(j["createCommentVNode"])("",!0),t.points[1]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,class:"line-marker",id:"preset-line-".concat(n),position:"end",type:t.points[1],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(j["createCommentVNode"])("",!0)]),Object(j["createElementVNode"])("path",{class:"line-path",d:t.path,stroke:"currentColor",fill:"none","stroke-width":"2","stroke-dasharray":"solid"===t.style?"0, 0":"4, 1","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":"","marker-start":t.points[0]?"url(#".concat("preset-line-".concat(n),"-",t.points[0],"-start)"):"","marker-end":t.points[1]?"url(#".concat("preset-line-".concat(n),"-",t.points[1],"-end)"):""},null,8,Br)]})),_:2},1024)],8,_r)])})),128))])])})),128))])}Object(j["popScopeId"])();var Mr=[{type:"直线",children:[{path:"M 0 0 L 20 20",style:"solid",points:["",""]},{path:"M 0 0 L 20 20",style:"dashed",points:["",""]},{path:"M 0 0 L 20 20",style:"solid",points:["","arrow"]},{path:"M 0 0 L 20 20",style:"dashed",points:["","arrow"]},{path:"M 0 0 L 20 20",style:"solid",points:["","dot"]}]},{type:"折线、曲线",children:[{path:"M 0 0 L 0 20 L 20 20",style:"solid",points:["","arrow"],isBroken:!0},{path:"M 0 0 Q 0 20 20 20",style:"solid",points:["","arrow"],isCurve:!0}]}],Ar=Object(j["defineComponent"])({name:"line-pool",emits:["select"],components:{LinePointMarker:bl},setup:function(e,t){var n=t.emit,o=Mr,c=function(e){n("select",e)};return{lineList:o,selectLine:c}}});n("805f");Ar.render=Dr,Ar.__scopeId="data-v-6302e570";var zr=Ar;Object(j["pushScopeId"])("data-v-ab6a141a");var Pr={class:"chart-pool"},Rr=["onClick"];function Fr(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconChartLine"),r=Object(j["resolveComponent"])("IconChartHistogram"),i=Object(j["resolveComponent"])("IconChartPie");return Object(j["openBlock"])(),Object(j["createElementBlock"])("ul",Pr,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.chartList,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("li",{class:"chart-item",key:n},[Object(j["createElementVNode"])("div",{class:"chart-content",onClick:function(n){return e.selectChart(t)}},["line"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,size:"24"})):"bar"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,size:"24"})):"pie"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:2,size:"24"})):Object(j["createCommentVNode"])("",!0)],8,Rr)])})),128))])}Object(j["popScopeId"])();var Hr=Object(j["defineComponent"])({name:"chart-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=["bar","line","pie"],c=function(e){n("select",e)};return{chartList:o,selectChart:c}}});n("f076");Hr.render=Fr,Hr.__scopeId="data-v-ab6a141a";var Ur=Hr;Object(j["pushScopeId"])("data-v-e325ce98");var Gr={class:"table-generator"},qr={class:"title"},Xr={class:"lef"},Wr=["onMouseenter"],Yr={key:1,class:"custom"},Zr={class:"row"},Jr=Object(j["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"行数:",-1),Kr={class:"row"},Qr=Object(j["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"列数:",-1),$r={class:"btns"},ei=Object(j["createTextVNode"])("取消"),ti=Object(j["createTextVNode"])("确认");function ni(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("InputNumber"),r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Gr,[Object(j["createElementVNode"])("div",qr,[Object(j["createElementVNode"])("div",Xr,"表格 "+Object(j["toDisplayString"])(e.endCell.length?"".concat(e.endCell[0]," x ").concat(e.endCell[1]):""),1),Object(j["createElementVNode"])("div",{class:"right",onClick:t[0]||(t[0]=function(t){return e.isCustom=!e.isCustom})},Object(j["toDisplayString"])(e.isCustom?"返回":"自定义"),1)]),e.isCustom?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Yr,[Object(j["createElementVNode"])("div",Zr,[Jr,Object(j["createVNode"])(a,{min:1,max:20,value:e.customRow,"onUpdate:value":t[3]||(t[3]=function(t){return e.customRow=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createElementVNode"])("div",Kr,[Qr,Object(j["createVNode"])(a,{min:1,max:20,value:e.customCol,"onUpdate:value":t[4]||(t[4]=function(t){return e.customCol=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createElementVNode"])("div",$r,[Object(j["createVNode"])(r,{class:"btn",onClick:t[5]||(t[5]=function(t){return e.close()})},{default:Object(j["withCtx"])((function(){return[ei]})),_:1}),Object(j["createVNode"])(r,{class:"btn",type:"primary",onClick:t[6]||(t[6]=function(t){return e.insertCustomTable()})},{default:Object(j["withCtx"])((function(){return[ti]})),_:1})])])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("table",{key:0,onMouseleave:t[1]||(t[1]=function(t){return e.endCell=[]}),onClick:t[2]||(t[2]=function(t){return e.handleClickTable()})},[Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(t){return Object(j["createElementVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(n){return Object(j["createElementVNode"])("td",{onMouseenter:function(o){return e.endCell=[t,n]},key:n},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["cell",{active:e.endCell.length&&t<=e.endCell[0]&&n<=e.endCell[1]}])},null,2)],40,Wr)})),64))])})),64))])],32))])}Object(j["popScopeId"])();var oi=Object(j["defineComponent"])({name:"table-generator",emits:["insert","close"],setup:function(e,t){var n=t.emit,o=Object(j["ref"])([]),c=Object(j["ref"])(3),l=Object(j["ref"])(3),a=Object(j["ref"])(!1),r=function(){if(o.value.length){var e=Object(Ut["a"])(o.value,2),t=e[0],c=e[1];n("insert",{row:t,col:c})}},i=function(){return c.value<1||c.value>20||l.value<1||l.value>20?Ce["a"].warning("行数/列数必须在0~20之间!"):(n("insert",{row:c.value,col:l.value}),void(a.value=!1))},u=function(){n("close"),a.value=!1};return{endCell:o,customRow:c,customCol:l,handleClickTable:r,insertCustomTable:i,isCustom:a,close:u}}});n("5a68");oi.render=ni,oi.__scopeId="data-v-e325ce98";var ci=oi,li=Object(j["defineComponent"])({name:"canvas-tool",components:{ShapePool:Nr,LinePool:zr,ChartPool:Ur,TableGenerator:ci},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.canvasScale})),n=Object(j["computed"])((function(){return e.getters.canUndo})),o=Object(j["computed"])((function(){return e.getters.canRedo})),c=Object(j["computed"])((function(){return parseInt(100*t.value+"")+"%"})),l=st(),a=l.scaleCanvas,r=l.setCanvasPercentage,i=We(),u=i.redo,d=i.undo,s=Ke(),f=s.createImageElement,p=s.createChartElement,m=s.createTableElement,b=function(e){var t=e[0];t&&Ze(t).then((function(e){return f(e)}))},v=Object(j["ref"])(!1),O=Object(j["ref"])(!1),h=Object(j["ref"])(!1),g=Object(j["ref"])(!1),E=function(){e.commit(y.SET_CREATING_ELEMENT,{type:"text",data:null})},C=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"shape",data:t}),v.value=!1},x=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"line",data:t}),O.value=!1};return{scaleCanvas:a,setCanvasPercentage:r,canvasScalePercentage:c,canUndo:n,canRedo:o,redo:u,undo:d,insertImageElement:b,shapePoolVisible:v,linePoolVisible:O,chartPoolVisible:h,tableGeneratorVisible:g,drawText:E,drawShape:C,drawLine:x,createChartElement:p,createTableElement:m}}});n("f91d");li.render=jr,li.__scopeId="data-v-59ae6536";var ai=li;Object(j["pushScopeId"])("data-v-38044c5a");var ri={class:"add-slide"},ii=Object(j["createTextVNode"])("添加幻灯片"),ui={class:"select-btn"},di=["onMousedown"],si={class:"label"};function fi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconPlus"),r=Object(j["resolveComponent"])("LayoutPool"),i=Object(j["resolveComponent"])("IconDown"),u=Object(j["resolveComponent"])("Popover"),d=Object(j["resolveComponent"])("ThumbnailSlide"),s=Object(j["resolveComponent"])("Draggable"),f=Object(j["resolveDirective"])("contextmenu"),p=Object(j["resolveDirective"])("click-outside");return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"thumbnails",onMousedown:t[3]||(t[3]=function(){return e.setThumbnailsFocus(!0)})},[Object(j["createElementVNode"])("div",ri,[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.createSlide()})},[Object(j["createVNode"])(a,{class:"icon"}),ii]),Object(j["createVNode"])(u,{trigger:"click",placement:"bottomLeft",visible:e.presetLayoutPopoverVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.presetLayoutPopoverVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{onSelect:t[1]||(t[1]=function(t){e.createSlideByTemplate(t),e.presetLayoutPopoverVisible=!1})})]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",ui,[Object(j["createVNode"])(i)])]})),_:1},8,["visible"])]),Object(j["createVNode"])(s,{class:"thumbnail-list",modelValue:e.slides,animation:300,scroll:!0,scrollSensitivity:50,setData:null,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(j["withCtx"])((function(t){var n=t.element,o=t.index;return[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["thumbnail-item",{active:e.slideIndex===o,selected:e.selectedSlidesIndex.includes(o)}]),onMousedown:function(t){return e.handleClickSlideThumbnail(t,o)}},[Object(j["createElementVNode"])("div",si,Object(j["toDisplayString"])(e.fillDigit(o+1,2)),1),Object(j["createVNode"])(d,{class:"thumbnail",slide:n,size:120},null,8,["slide"])],42,di),[[f,e.contextmenusThumbnailItem]])]})),_:1},8,["modelValue","onEnd"])],544)),[[p,function(){return e.setThumbnailsFocus(!1)}],[f,e.contextmenusThumbnails]])}Object(j["popScopeId"])();var pi=n("b76a"),mi=n.n(pi);function bi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ThumbnailElement");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"thumbnail-slide",style:Object(j["normalizeStyle"])({width:e.size+"px",height:e.size*e.viewportRatio+"px"})},[Object(j["createElementVNode"])("div",{class:"elements",style:Object(j["normalizeStyle"])({width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")})},[Object(j["createElementVNode"])("div",{class:"background",style:Object(j["normalizeStyle"])(e.backgroundStyle)},null,4),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.id,elementInfo:e,elementIndex:t+1},null,8,["elementInfo","elementIndex"])})),128))],4)],4)}function vi(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["base-element","base-element-".concat(e.elementInfo.id)]),style:Object(j["normalizeStyle"])({zIndex:e.elementIndex})},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,target:"thumbnail"},null,8,["elementInfo"]))],6)}Object(j["pushScopeId"])("data-v-b0d4d1b2");var Oi=["src"];function hi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ImageOutline");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-image",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px",transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle})},[Object(j["createVNode"])(a,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createElementVNode"])("div",{class:"image-content",style:Object(j["normalizeStyle"])({clipPath:e.clipShape.style})},[Object(j["createElementVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:Object(j["normalizeStyle"])({top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter}),alt:""},null,12,Oi)],4)],4)],4)],4)}Object(j["popScopeId"])();var ji=Object(j["defineComponent"])({name:"base-element-image",components:{ImageOutline:To},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=io(t),o=n.shadowStyle,c=Object(j["computed"])((function(){return e.elementInfo.flipH})),l=Object(j["computed"])((function(){return e.elementInfo.flipV})),a=uo(c,l),r=a.flipStyle,i=Object(j["computed"])((function(){return e.elementInfo.clip})),u=fo(i),d=u.clipShape,s=u.imgPosition,f=Object(j["computed"])((function(){return e.elementInfo.filters})),p=po(f),m=p.filter;return{imgPosition:s,filter:m,flipStyle:r,shadowStyle:o,clipShape:d}}});n("a576");ji.render=hi,ji.__scopeId="data-v-b0d4d1b2";var gi=ji;Object(j["pushScopeId"])("data-v-2ec235c4");var yi=["innerHTML"];function Ei(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-text",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill,opacity:e.elementInfo.opacity,textShadow:e.shadowStyle,lineHeight:e.elementInfo.lineHeight,letterSpacing:(e.elementInfo.wordSpace||0)+"px",color:e.elementInfo.defaultColor,fontFamily:e.elementInfo.defaultFontName})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createElementVNode"])("div",{class:"text ProseMirror-static",innerHTML:e.elementInfo.content},null,8,yi)],4)],4)],4)}Object(j["popScopeId"])();var Ci=Object(j["defineComponent"])({name:"base-element-text",components:{ElementOutline:Xo},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=io(t),o=n.shadowStyle;return{shadowStyle:o}}});n("5264");Ci.render=Ei,Ci.__scopeId="data-v-2ec235c4";var xi=Ci;Object(j["pushScopeId"])("data-v-3ad164fa");var ki={key:0},Ii=["transform"],wi=["d","fill","stroke","stroke-width","stroke-dasharray"],Si=["innerHTML"];function Ni(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("GradientDefs"),r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-shape",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(j["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle,color:e.text.defaultColor,fontFamily:e.text.defaultFontName})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:Object(j["withCtx"])((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createElementBlock"])("defs",ki,[Object(j["createVNode"])(a,{id:"base-gradient-".concat(e.elementInfo.id),type:e.elementInfo.gradient.type,color1:e.elementInfo.gradient.color[0],color2:e.elementInfo.gradient.color[1],rotate:e.elementInfo.gradient.rotate},null,8,["id","type","color1","color2","rotate"])])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox,", ").concat(e.elementInfo.height/e.elementInfo.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createElementVNode"])("path",{"vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",d:e.elementInfo.path,fill:e.elementInfo.gradient?"url(#base-gradient-".concat(e.elementInfo.id,")"):e.elementInfo.fill,stroke:e.outlineColor,"stroke-width":e.outlineWidth,"stroke-dasharray":"dashed"===e.outlineStyle?"10 5":"0 0"},null,8,wi)],8,Ii)]})),_:1},8,["width","height"]),Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["shape-text",e.text.align])},[Object(j["createElementVNode"])("div",{class:"ProseMirror-static",innerHTML:e.text.content},null,8,Si)],2)],4)],4)],4)}Object(j["popScopeId"])();var Ti=Object(j["defineComponent"])({name:"base-element-shape",components:{GradientDefs:ol},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.outline})),n=ho(t),o=n.outlineWidth,c=n.outlineStyle,l=n.outlineColor,a=Object(j["computed"])((function(){return e.elementInfo.shadow})),r=io(a),i=r.shadowStyle,u=Object(j["computed"])((function(){return e.elementInfo.flipH})),d=Object(j["computed"])((function(){return e.elementInfo.flipV})),s=uo(u,d),f=s.flipStyle,p=Object(j["computed"])((function(){var t={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"};return e.elementInfo.text?e.elementInfo.text:t}));return{shadowStyle:i,outlineWidth:o,outlineStyle:c,outlineColor:l,flipStyle:f,text:p}}});n("052f");Ti.render=Ni,Ti.__scopeId="data-v-3ad164fa";var Li=Ti;Object(j["pushScopeId"])("data-v-448a7ca0");var Vi=["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"];function _i(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("LinePointMarker"),r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"editable-element-shape",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""})},[Object(j["createVNode"])(r,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:0,id:e.elementInfo.id,position:"start",type:e.elementInfo.points[0],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0),e.elementInfo.points[1]?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,id:e.elementInfo.id,position:"end",type:e.elementInfo.points[1],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(j["createCommentVNode"])("",!0)]),Object(j["createElementVNode"])("path",{d:e.path,stroke:e.elementInfo.color,"stroke-width":e.elementInfo.width,"stroke-dasharray":e.lineDashArray,fill:"none","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":"","marker-start":e.elementInfo.points[0]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[0],"-start)"):"","marker-end":e.elementInfo.points[1]?"url(#".concat(e.elementInfo.id,"-").concat(e.elementInfo.points[1],"-end)"):""},null,8,Vi)]})),_:1},8,["width","height"])],4)],4)}Object(j["popScopeId"])();var Bi=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:bl},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=io(t),o=n.shadowStyle,c=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),l=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),a=Object(j["computed"])((function(){return"dashed"===e.elementInfo.style?"10, 5":"0, 0"})),r=Object(j["computed"])((function(){return Ge(e.elementInfo)}));return{shadowStyle:o,svgWidth:c,svgHeight:l,lineDashArray:a,path:r}}});n("9743");Bi.render=_i,Bi.__scopeId="data-v-448a7ca0";var Di=Bi;function Mi(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline"),r=Object(j["resolveComponent"])("IconChartHistogram"),i=Object(j["resolveComponent"])("IconChartHistogramOne"),u=Object(j["resolveComponent"])("IconChartLine"),d=Object(j["resolveComponent"])("IconChartLineArea"),s=Object(j["resolveComponent"])("IconChartScatter"),f=Object(j["resolveComponent"])("IconChartPie"),p=Object(j["resolveComponent"])("IconChartRing");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-chart",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),"bar"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"horizontalBar"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:1,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"line"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(u,{key:2,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"area"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:3,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"scatter"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:4,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"pie"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(f,{key:5,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):"ring"===e.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(p,{key:6,fill:e.elementInfo.themeColor,strokeWidth:"2",size:e.size},null,8,["fill","size"])):Object(j["createCommentVNode"])("",!0)],4)],4)}var Ai=Object(j["defineComponent"])({name:"base-element-chart",components:{ElementOutline:Xo},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return Math.min(e.elementInfo.width,e.elementInfo.height)})),n=Object(j["computed"])((function(){var t=e.elementInfo.chartType,n=e.elementInfo.options;return"bar"===t?null!==n&&void 0!==n&&n.horizontalBars?"horizontalBar":"bar":"line"===t?null!==n&&void 0!==n&&n.showArea?"area":n&&!1===n.showLine?"scatter":"line":"pie"===t?null!==n&&void 0!==n&&n.donut?"ring":"pie":""}));return{size:t,chartType:n}}});n("b730");Ai.render=Mi,Ai.__scopeId="data-v-2d25f60a";var zi=Ai;Object(j["pushScopeId"])("data-v-dea016ac");var Pi={class:"element-content"};function Ri(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("StaticTable");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"base-element-table",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(j["createElementVNode"])("div",Pi,[Object(j["createVNode"])(a,{data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme},null,8,["data","width","colWidths","outline","theme"])])],4)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-ccbfe89e");var Fi=["width"],Hi=["rowspan","colspan"],Ui=["innerHTML"];function Gi(e,t,n,o,c,l){var a,r,i,u,d;return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"static-table",style:Object(j["normalizeStyle"])({width:e.totalWidth+"px"})},[Object(j["createElementVNode"])("table",{class:Object(j["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(j["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(j["createElementVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,Fi)})),128))]),Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.data,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("tr",{key:n},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t,o){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createElementBlock"])("td",{class:"cell",style:Object(j["normalizeStyle"])(Object(I["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(t.style))),key:t.id,rowspan:t.rowspan,colspan:t.colspan},[Object(j["createElementVNode"])("div",{class:"cell-text",innerHTML:e.formatText(t.text)},null,8,Ui)],12,Hi)),[[j["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))]])})),128))])})),128))])],6)],4)}Object(j["popScopeId"])();var qi=Object(j["defineComponent"])({name:"static-table",props:{data:{type:Array,required:!0},width:{type:Number,required:!0},colWidths:{type:Array,required:!0},outline:{type:Object,required:!0},theme:{type:Object},editable:{type:Boolean,default:!0}},setup:function(e){var t=Object(j["ref"])([]),n=Object(j["computed"])((function(){return t.value.reduce((function(e,t){return e+t}))}));Object(j["watch"])([function(){return e.colWidths},function(){return e.width}],(function(){t.value=e.colWidths.map((function(t){return t*e.width}))}),{immediate:!0});var o=Object(j["computed"])((function(){return e.data})),c=Ml(o),l=c.hideCells,a=Object(j["computed"])((function(){return e.theme})),r=Al(a),i=r.subThemeColor;return{colSizeList:t,totalWidth:n,hideCells:l,getTextStyle:Bl,formatText:Dl,subThemeColor:i}}});n("1360");qi.render=Gi,qi.__scopeId="data-v-ccbfe89e";var Xi=qi,Wi=Object(j["defineComponent"])({name:"base-element-table",components:{StaticTable:Xi},props:{elementInfo:{type:Object,required:!0}}});n("ba04");Wi.render=Ri,Wi.__scopeId="data-v-dea016ac";var Yi=Wi,Zi=Object(j["defineComponent"])({name:"base-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,gi),Object(q["a"])(t,no.TEXT,xi),Object(q["a"])(t,no.SHAPE,Li),Object(q["a"])(t,no.LINE,Di),Object(q["a"])(t,no.CHART,zi),Object(q["a"])(t,no.TABLE,Yi),t);return n[e.elementInfo.type]||null}));return{currentElementComponent:t}}});Zi.render=vi;var Ji=Zi,Ki=Object(j["defineComponent"])({name:"thumbnail-slide",components:{ThumbnailElement:Ji},props:{slide:{type:Object,required:!0},size:{type:Number,required:!0}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=na(o),l=c.backgroundStyle,a=Object(j["computed"])((function(){return e.size/Je}));return{scale:a,backgroundStyle:l,VIEWPORT_SIZE:Je,viewportRatio:n}}});n("2b61");Ki.render=bi,Ki.__scopeId="data-v-4e59015e";var Qi=Ki;Object(j["pushScopeId"])("data-v-775c4b6c");var $i={class:"layout-pool"},eu=["onClick"];function tu(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ThumbnailSlide");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",$i,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.layouts,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"layout-item",key:t.id,onClick:function(n){return e.selectSlideTemplate(t)}},[Object(j["createVNode"])(a,{class:"thumbnail",slide:t,size:180},null,8,["slide"])],8,eu)})),128))])}Object(j["popScopeId"])();var nu=Object(j["defineComponent"])({name:"layout-pool",emits:["select"],components:{ThumbnailSlide:Qi},setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.layouts})),l=function(e){n("select",e)};return{layouts:c,selectSlideTemplate:l}}});n("23aa");nu.render=tu,nu.__scopeId="data-v-775c4b6c";var ou=nu,cu=Object(j["defineComponent"])({name:"thumbnails",components:{Draggable:mi.a,ThumbnailSlide:Qi,LayoutPool:ou},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.state.slideIndex})),o=Object(j["computed"])((function(){return e.state.ctrlKeyState})),c=Object(j["computed"])((function(){return e.state.shiftKeyState})),l=Object(j["computed"])((function(){return[].concat(Object(oe["a"])(e.state.selectedSlidesIndex),[n.value])})),a=Object(j["ref"])(!1),r=$e(),i=r.copySlide,u=r.pasteSlide,d=r.createSlide,s=r.createSlideByTemplate,f=r.copyAndPasteSlide,p=r.deleteSlide,m=r.cutSlide,b=r.selectAllSlide,v=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),n.value!==t&&e.commit(y.UPDATE_SLIDE_INDEX,t)},O=function(t,a){var r=l.value.length>1;if(!r||!l.value.includes(a)||0===t.button)if(o.value)if(n.value===a){if(!r)return;var i=l.value.filter((function(e){return e!==a}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,i),v(l.value[0])}else if(l.value.includes(a)){var u=l.value.filter((function(e){return e!==a}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,u)}else{var d=[].concat(Object(oe["a"])(l.value),[a]);e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,d),v(a)}else if(c.value){if(n.value===a&&!r)return;var s=Math.min.apply(Math,Object(oe["a"])(l.value)),f=a;a1&&void 0!==arguments[1]?arguments[1]:0,c=u(),l=c.originClipRange,r=c.originWidth,d=c.originHeight,s=c.originLeft,f=c.originTop;if(o){var p,m=d/r,b=0,v=100;if(m>o){var O=(1-o/m)/2*100;p=[[b,O],[v,v-O]]}else{var h=(1-m/o)/2*100;p=[[h,b],[v-h,v]]}e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{clip:Object(I["a"])(Object(I["a"])({},t.value.clip),{},{shape:n,range:p}),left:s+r*(p[0][0]/100),top:f+d*(p[0][1]/100),width:r*(p[1][0]-p[0][0])/100,height:d*(p[1][1]-p[0][1])/100}})}else e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{clip:Object(I["a"])(Object(I["a"])({},t.value.clip),{},{shape:n,range:l})}});i(),a()},s=function(n){var o=n[0];o&&(Ze(o).then((function(n){var o={src:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o})})),a())},f=function(){if(t.value.clip){var n=u(),o=n.originWidth,c=n.originHeight,l=n.originLeft,r=n.originTop;e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{left:l,top:r,width:o,height:c}})}e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:["clip","outline","flip","shadow","filters"]}),a()},p=function(){var o=Object(I["a"])(Object(I["a"])({},n.value.background),{},{type:"image",image:t.value.src,imageSize:"cover"});e.commit(y.UPDATE_SLIDE,{background:o}),a()};return{clipPanelVisible:o,shapeClipPathOptions:Bd,ratioClipOptions:Dd,filterOptions:c,handleElement:t,updateFilter:r,clipImage:i,presetImageClip:d,replaceImage:s,resetImage:f,setBackgroundImage:p}}});n("7751");Md.render=Id,Md.__scopeId="data-v-6bffd840";var Ad=Md;Object(j["pushScopeId"])("data-v-a62499e8");var zd={class:"shape-style-panel"},Pd={class:"row"},Rd=Object(j["createTextVNode"])("纯色填充"),Fd=Object(j["createTextVNode"])("渐变填充"),Hd=Object(j["createElementVNode"])("div",{style:{flex:"1"}},null,-1),Ud=Object(j["createTextVNode"])("线性渐变"),Gd=Object(j["createTextVNode"])("径向渐变"),qd={class:"row"},Xd=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),Wd={class:"row"},Yd=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Zd={key:0,class:"row"},Jd=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1);function Kd(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SelectOption"),r=Object(j["resolveComponent"])("Select"),i=Object(j["resolveComponent"])("ColorPicker"),u=Object(j["resolveComponent"])("ColorButton"),d=Object(j["resolveComponent"])("Popover"),s=Object(j["resolveComponent"])("Slider"),f=Object(j["resolveComponent"])("ElementFlip"),p=Object(j["resolveComponent"])("Divider"),m=Object(j["resolveComponent"])("IconFontSize"),b=Object(j["resolveComponent"])("SelectOptGroup"),v=Object(j["resolveComponent"])("IconAddText"),O=Object(j["resolveComponent"])("InputGroup"),h=Object(j["resolveComponent"])("IconText"),g=Object(j["resolveComponent"])("Button"),y=Object(j["resolveComponent"])("Tooltip"),E=Object(j["resolveComponent"])("ButtonGroup"),C=Object(j["resolveComponent"])("IconTextBold"),x=Object(j["resolveComponent"])("CheckboxButton"),k=Object(j["resolveComponent"])("IconTextItalic"),I=Object(j["resolveComponent"])("IconTextUnderline"),w=Object(j["resolveComponent"])("IconFormat"),S=Object(j["resolveComponent"])("CheckboxButtonGroup"),N=Object(j["resolveComponent"])("IconAlignTextLeft"),T=Object(j["resolveComponent"])("RadioButton"),L=Object(j["resolveComponent"])("IconAlignTextCenter"),V=Object(j["resolveComponent"])("IconAlignTextRight"),_=Object(j["resolveComponent"])("RadioGroup"),B=Object(j["resolveComponent"])("IconAlignTextTopOne"),D=Object(j["resolveComponent"])("IconAlignTextMiddleOne"),M=Object(j["resolveComponent"])("IconAlignTextBottomOne"),A=Object(j["resolveComponent"])("ElementOutline"),z=Object(j["resolveComponent"])("ElementShadow"),P=Object(j["resolveComponent"])("ElementOpacity");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",zd,[Object(j["createElementVNode"])("div",Pd,[Object(j["createVNode"])(r,{style:{flex:"10"},value:e.fillType,onChange:t[0]||(t[0]=function(t){return e.updateFillType(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"fill"},{default:Object(j["withCtx"])((function(){return[Rd]})),_:1}),Object(j["createVNode"])(a,{value:"gradient"},{default:Object(j["withCtx"])((function(){return[Fd]})),_:1})]})),_:1},8,["value"]),Hd,"fill"===e.fillType?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.fill,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.fill,style:{flex:"10"}},null,8,["color"])]})),_:1})):(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,style:{flex:"10"},value:e.gradient.type,onChange:t[2]||(t[2]=function(t){return e.updateGradient({type:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"linear"},{default:Object(j["withCtx"])((function(){return[Ud]})),_:1}),Object(j["createVNode"])(a,{value:"radial"},{default:Object(j["withCtx"])((function(){return[Gd]})),_:1})]})),_:1},8,["value"]))]),"gradient"===e.fillType?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",qd,[Xd,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[0],"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateGradient({color:[t,e.gradient.color[1]]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.gradient.color[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",Wd,[Yd,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[1],"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateGradient({color:[e.gradient.color[0],t]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.gradient.color[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.gradient.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Zd,[Jd,Object(j["createVNode"])(s,{min:0,max:360,step:15,value:e.gradient.rotate,style:{flex:"3"},onChange:t[5]||(t[5]=function(t){return e.updateGradient({rotate:t})})},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)],64)):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(f),Object(j["createVNode"])(p),e.showTextTools?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:1},[Object(j["createVNode"])(O,{compact:"",class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"3"},value:e.richTextAttrs.fontname,onChange:t[6]||(t[6]=function(t){return e.emitRichTextCommand("fontname",t)})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m)]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{label:"系统字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",{style:Object(j["normalizeStyle"])({fontFamily:e.value})},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(b,{label:"在线字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(j["createVNode"])(r,{style:{flex:"2"},value:e.richTextAttrs.fontsize,onChange:t[7]||(t[7]=function(t){return e.emitRichTextCommand("fontsize",t)})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v)]})),default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.fontSizeOptions,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e,value:e},{default:Object(j["withCtx"])((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(j["createVNode"])(E,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.richTextAttrs.color,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.emitRichTextCommand("color",t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g,{class:"text-color-btn",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(h),Object(j["createElementVNode"])("div",{class:"text-color-block",style:Object(j["normalizeStyle"])({backgroundColor:e.richTextAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(j["createVNode"])(S,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},checked:e.richTextAttrs.bold,onClick:t[9]||(t[9]=function(t){return e.emitRichTextCommand("bold")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},checked:e.richTextAttrs.em,onClick:t[10]||(t[10]=function(t){return e.emitRichTextCommand("em")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(k)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},checked:e.richTextAttrs.underline,onClick:t[11]||(t[11]=function(t){return e.emitRichTextCommand("underline")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(I)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"清除格式"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{style:{flex:"1"},onClick:t[12]||(t[12]=function(t){return e.emitRichTextCommand("clear")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(_,{class:"row","button-style":"solid",value:e.richTextAttrs.align,onChange:t[13]||(t[13]=function(t){return e.emitRichTextCommand("align",t.target.value)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"left",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(N)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"center",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(L)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"right",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(V)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(_,{class:"row","button-style":"solid",value:e.textAlign,onChange:t[14]||(t[14]=function(t){return e.updateTextAlign(t.target.value)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顶对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"top",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(B)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"middle",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(D)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(y,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"底对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(T,{value:"bottom",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(M)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(p)],64)):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(A),Object(j["createVNode"])(p),Object(j["createVNode"])(z),Object(j["createVNode"])(p),Object(j["createVNode"])(P)])}Object(j["popScopeId"])();var Qd=ae,$d=Object(j["defineComponent"])({name:"shape-style-panel",components:{ElementOpacity:Su,ElementOutline:Xu,ElementShadow:rd,ElementFlip:Vd,ColorButton:Gu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.editingShapeElementId})),o=Object(j["computed"])((function(){return n.value===t.value.id})),c=Object(j["ref"])(),l=Object(j["ref"])(),a=Object(j["ref"])("fill"),r=Object(j["ref"])("middle");Object(j["watch"])(t,(function(){var e,n;t.value&&"shape"===t.value.type&&(c.value=t.value.fill||"#000",l.value=t.value.gradient||{type:"linear",rotate:0,color:[c.value,"#fff"]},a.value=t.value.gradient?"gradient":"fill",r.value=(null===(e=t.value)||void 0===e||null===(n=e.text)||void 0===n?void 0:n.align)||"middle")}),{deep:!0,immediate:!0});var i=We(),u=i.addHistorySnapshot,d=function(n){if("fill"===n)e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:"gradient"});else{var o={gradient:l.value};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o})}u()},s=function(n){var o={gradient:Object(I["a"])(Object(I["a"])({},l.value),n)};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),u()},f=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),u()},p=function(n){var o={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"},c=t.value.text||o,l={text:Object(I["a"])(Object(I["a"])({},c),{},{align:n})};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:l}),u()},m=Object(j["computed"])((function(){return e.state.richTextAttrs})),b=Object(j["computed"])((function(){return e.state.availableFonts})),v=["12px","14px","16px","18px","20px","22px","24px","28px","32px","36px","40px","44px","48px","54px","60px","66px","72px","76px","80px","88px","96px","104px","112px","120px"],O=function(e,t){Dc.emit(Zo.RICH_TEXT_COMMAND,{command:e,value:t})};return{fill:c,gradient:l,fillType:a,textAlign:r,richTextAttrs:m,availableFonts:b,fontSizeOptions:v,webFonts:Qd,showTextTools:o,emitRichTextCommand:O,updateFillType:d,updateFill:f,updateGradient:s,updateTextAlign:p}}});n("7de2");$d.render=Kd,$d.__scopeId="data-v-a62499e8";var es=$d;Object(j["pushScopeId"])("data-v-65b24fb3");var ts={class:"line-style-panel"},ns={class:"row"},os=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"线条样式:",-1),cs=Object(j["createTextVNode"])("实线"),ls=Object(j["createTextVNode"])("虚线"),as={class:"row"},rs=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"线条颜色:",-1),is={class:"row"},us=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"线条宽度:",-1),ds={class:"row"},ss=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"起点样式:",-1),fs=Object(j["createTextVNode"])("无"),ps=Object(j["createTextVNode"])("箭头"),ms=Object(j["createTextVNode"])("圆点"),bs={class:"row"},vs=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"终点样式:",-1),Os=Object(j["createTextVNode"])("无"),hs=Object(j["createTextVNode"])("箭头"),js=Object(j["createTextVNode"])("圆点");function gs(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SelectOption"),r=Object(j["resolveComponent"])("Select"),i=Object(j["resolveComponent"])("ColorPicker"),u=Object(j["resolveComponent"])("ColorButton"),d=Object(j["resolveComponent"])("Popover"),s=Object(j["resolveComponent"])("InputNumber"),f=Object(j["resolveComponent"])("Divider"),p=Object(j["resolveComponent"])("ElementShadow");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",ts,[Object(j["createElementVNode"])("div",ns,[os,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.style,onChange:t[0]||(t[0]=function(t){return e.updateLine({style:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"solid"},{default:Object(j["withCtx"])((function(){return[cs]})),_:1}),Object(j["createVNode"])(a,{value:"dashed"},{default:Object(j["withCtx"])((function(){return[ls]})),_:1})]})),_:1},8,["value"])]),Object(j["createElementVNode"])("div",as,[rs,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateLine({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",is,[us,Object(j["createVNode"])(s,{value:e.handleElement.width,onChange:t[2]||(t[2]=function(t){return e.updateLine({width:t})}),style:{flex:"3"}},null,8,["value"])]),Object(j["createElementVNode"])("div",ds,[ss,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[0],onChange:t[3]||(t[3]=function(t){return e.updateLine({points:[t,e.handleElement.points[1]]})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:""},{default:Object(j["withCtx"])((function(){return[fs]})),_:1}),Object(j["createVNode"])(a,{value:"arrow"},{default:Object(j["withCtx"])((function(){return[ps]})),_:1}),Object(j["createVNode"])(a,{value:"dot"},{default:Object(j["withCtx"])((function(){return[ms]})),_:1})]})),_:1},8,["value"])]),Object(j["createElementVNode"])("div",bs,[vs,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[1],onChange:t[4]||(t[4]=function(t){return e.updateLine({points:[e.handleElement.points[0],t]})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:""},{default:Object(j["withCtx"])((function(){return[Os]})),_:1}),Object(j["createVNode"])(a,{value:"arrow"},{default:Object(j["withCtx"])((function(){return[hs]})),_:1}),Object(j["createVNode"])(a,{value:"dot"},{default:Object(j["withCtx"])((function(){return[js]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])(f),Object(j["createVNode"])(p)])}Object(j["popScopeId"])();var ys=Object(j["defineComponent"])({name:"line-style-panel",components:{ElementShadow:rd,ColorButton:Gu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=We(),o=n.addHistorySnapshot,c=function(n){e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:n}),o()};return{handleElement:t,updateLine:c}}});n("8df8");ys.render=gs,ys.__scopeId="data-v-65b24fb3";var Es=ys;Object(j["pushScopeId"])("data-v-b77b4458");var Cs={class:"chart-style-panel"},xs=Object(j["createTextVNode"])(" 编辑图表数据 "),ks={class:"row"},Is=Object(j["createTextVNode"])("面积图样式"),ws=Object(j["createTextVNode"])("散点图样式"),Ss={class:"row"},Ns=Object(j["createTextVNode"])("使用平滑曲线"),Ts={key:1,class:"row"},Ls=Object(j["createTextVNode"])("条形图样式"),Vs={key:2,class:"row"},_s=Object(j["createTextVNode"])("环形图样式"),Bs={class:"row"},Ds=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"图例:",-1),Ms=Object(j["createTextVNode"])("不显示"),As=Object(j["createTextVNode"])("显示在上方"),zs=Object(j["createTextVNode"])("显示在下方"),Ps={class:"row"},Rs=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"背景填充:",-1),Fs={class:"row"},Hs=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"网格颜色:",-1),Us={style:{flex:"2"}},Gs={class:"color-btn-wrap",style:{flex:"3"}},qs=["onClick"],Xs={key:3,class:"row"},Ws=Object(j["createElementVNode"])("div",{style:{flex:"2"}},null,-1);function Ys(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconEdit"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Divider"),u=Object(j["resolveComponent"])("Checkbox"),d=Object(j["resolveComponent"])("SelectOption"),s=Object(j["resolveComponent"])("Select"),f=Object(j["resolveComponent"])("ColorPicker"),p=Object(j["resolveComponent"])("ColorButton"),m=Object(j["resolveComponent"])("Popover"),b=Object(j["resolveComponent"])("IconCloseSmall"),v=Object(j["resolveComponent"])("Tooltip"),O=Object(j["resolveComponent"])("IconPlus"),h=Object(j["resolveComponent"])("ElementOutline"),g=Object(j["resolveComponent"])("ChartDataEditor"),y=Object(j["resolveComponent"])("Modal");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Cs,[Object(j["createVNode"])(r,{class:"full-width-btn",onClick:t[0]||(t[0]=function(t){return e.chartDataEditorVisible=!0})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{class:"btn-icon"}),xs]})),_:1}),Object(j["createVNode"])(i),"line"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",ks,[Object(j["createVNode"])(u,{onChange:t[1]||(t[1]=function(t){return e.updateOptions({showArea:t.target.checked})}),checked:e.showArea,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Is]})),_:1},8,["checked"]),Object(j["createVNode"])(u,{onChange:t[2]||(t[2]=function(t){return e.updateOptions({showLine:!t.target.checked})}),checked:!e.showLine,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[ws]})),_:1},8,["checked"])]),Object(j["createElementVNode"])("div",Ss,[Object(j["createVNode"])(u,{onChange:t[3]||(t[3]=function(t){return e.updateOptions({lineSmooth:t.target.checked})}),checked:e.lineSmooth},{default:Object(j["withCtx"])((function(){return[Ns]})),_:1},8,["checked"])])],64)):Object(j["createCommentVNode"])("",!0),"bar"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ts,[Object(j["createVNode"])(u,{onChange:t[4]||(t[4]=function(t){return e.updateOptions({horizontalBars:t.target.checked})}),checked:e.horizontalBars},{default:Object(j["withCtx"])((function(){return[Ls]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),"pie"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Vs,[Object(j["createVNode"])(u,{onChange:t[5]||(t[5]=function(t){return e.updateOptions({donut:t.target.checked})}),checked:e.donut},{default:Object(j["withCtx"])((function(){return[_s]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(i),Object(j["createElementVNode"])("div",Bs,[Ds,Object(j["createVNode"])(s,{style:{flex:"3"},value:e.legend,onChange:t[6]||(t[6]=function(t){return e.updateLegend(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{value:""},{default:Object(j["withCtx"])((function(){return[Ms]})),_:1}),Object(j["createVNode"])(d,{value:"top"},{default:Object(j["withCtx"])((function(){return[As]})),_:1}),Object(j["createVNode"])(d,{value:"bottom"},{default:Object(j["withCtx"])((function(){return[zs]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])(i),Object(j["createElementVNode"])("div",Ps,[Rs,Object(j["createVNode"])(m,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.fill,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p,{color:e.fill,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",Fs,[Hs,Object(j["createVNode"])(m,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.gridColor,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.updateGridColor(t)})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p,{color:e.gridColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])(i),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themeColor,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"row",key:n},[Object(j["createElementVNode"])("div",Us,Object(j["toDisplayString"])(0===n?"主题配色:":""),1),Object(j["createVNode"])(m,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:t,"onUpdate:modelValue":function(t){return e.updateTheme(t,n)}},null,8,["modelValue","onUpdate:modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Gs,[Object(j["createVNode"])(p,{color:t,style:{width:"100%"}},null,8,["color"]),Object(j["createVNode"])(v,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(j["withCtx"])((function(){return[0!==n?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:"delete-color-btn",onClick:Object(j["withModifiers"])((function(t){return e.deleteThemeColor(n)}),["stop"])},[Object(j["createVNode"])(b)],8,qs)):Object(j["createCommentVNode"])("",!0)]})),_:2},1032,["mouseEnterDelay"])])]})),_:2},1024)])})),128)),e.themeColor.length<10?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Xs,[Ws,Object(j["createVNode"])(r,{class:"add-color-btn",style:{flex:"3"},onClick:t[9]||(t[9]=function(t){return e.addThemeColor()})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O)]})),_:1})])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(i),Object(j["createVNode"])(h),Object(j["createVNode"])(y,{visible:e.chartDataEditorVisible,"onUpdate:visible":t[12]||(t[12]=function(t){return e.chartDataEditorVisible=t}),footer:null,centered:"",closable:!1,width:648,destroyOnClose:""},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g,{data:e.handleElement.data,onClose:t[10]||(t[10]=function(t){return e.chartDataEditorVisible=!1}),onSave:t[11]||(t[11]=function(t){return e.updateData(t)})},null,8,["data"])]})),_:1},8,["visible"])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-9a62f784");var Zs={class:"chart-data-editor"},Js={class:"editor-content"},Ks={class:"range-box"},Qs=["id","onFocus","onPaste"],$s={class:"btns"},ef={class:"left"},tf=Object(j["createTextVNode"])("清空"),nf={class:"right"},of=Object(j["createTextVNode"])("取消"),cf=Object(j["createTextVNode"])("确认");function lf(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Zs,[Object(j["createElementVNode"])("div",Js,[Object(j["createElementVNode"])("div",Ks,[Object(j["createElementVNode"])("div",{class:"temp-range",style:Object(j["normalizeStyle"])({width:e.tempRangeSize.width+"px",height:e.tempRangeSize.height+"px"})},null,4),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.rangeLines,(function(e){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["range-line",e.type]),key:e.type,style:Object(j["normalizeStyle"])(e.style)},null,6)})),128)),Object(j["createElementVNode"])("div",{class:"resizable",style:Object(j["normalizeStyle"])(e.resizablePointStyle),onMousedown:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.changeSelectRange(t)}),["stop"]))},null,36)]),Object(j["createElementVNode"])("table",null,[Object(j["createElementVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(31,(function(t){return Object(j["createElementVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(7,(function(n){return Object(j["createElementVNode"])("td",{key:n,class:Object(j["normalizeClass"])({head:1===n&&t<=e.selectedRange[1]||1===t&&n<=e.selectedRange[0]})},[Object(j["createElementVNode"])("input",{class:Object(j["normalizeClass"])(["item",{selected:t<=e.selectedRange[1]&&n<=e.selectedRange[0]}]),id:"cell-".concat(t-1,"-").concat(n-1),autocomplete:"off",onFocus:function(o){return e.focusCell=[t-1,n-1]},onPaste:function(o){return e.handlePaste(o,t-1,n-1)}},null,42,Qs)],2)})),64))])})),64))])])]),Object(j["createElementVNode"])("div",$s,[Object(j["createElementVNode"])("div",ef,[Object(j["createVNode"])(a,{class:"btn",onClick:t[1]||(t[1]=function(t){return e.clear()})},{default:Object(j["withCtx"])((function(){return[tf]})),_:1})]),Object(j["createElementVNode"])("div",nf,[Object(j["createVNode"])(a,{class:"btn",onClick:t[2]||(t[2]=function(t){return e.closeEditor()})},{default:Object(j["withCtx"])((function(){return[of]})),_:1}),Object(j["createVNode"])(a,{type:"primary",class:"btn",onClick:t[3]||(t[3]=function(t){return e.getTableData()}),style:{"margin-left":"10px"}},{default:Object(j["withCtx"])((function(){return[cf]})),_:1})])])])}Object(j["popScopeId"])();var af=100,rf=32,uf=Object(j["defineComponent"])({name:"chart-data-editor",emits:["save","close"],props:{data:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["ref"])([0,0]),c=Object(j["ref"])({width:0,height:0}),l=Object(j["ref"])(null),a=Object(j["computed"])((function(){var e=o.value[0]*af,t=o.value[1]*rf;return[{type:"t",style:{width:e+"px"}},{type:"b",style:{top:t+"px",width:e+"px"}},{type:"l",style:{height:t+"px"}},{type:"r",style:{left:e+"px",height:t+"px"}}]})),r=Object(j["computed"])((function(){var e=o.value[0]*af,t=o.value[1]*rf;return{left:e+"px",top:t+"px"}})),i=function(){var t=[],n=e.data,c=n.labels,l=n.legends,a=n.series,r=c.length,i=a.length;t.push([""].concat(Object(oe["a"])(l)));for(var u=0;u.5*af&&(i+=af-i%af),u%rf>.5*rf&&(u+=rf-u%rf);var d=Math.round(u/rf),s=Math.round(i/af);d<3&&(d=3),s<2&&(s=2),o.value=[s,d],c.value={width:0,height:0}}}};return{tempRangeSize:c,rangeLines:a,resizablePointStyle:r,selectedRange:o,focusCell:l,changeSelectRange:b,getTableData:s,closeEditor:m,clear:f,handlePaste:p}}});n("6856");uf.render=lf,uf.__scopeId="data-v-9a62f784";var df=uf,sf=Object(j["defineComponent"])({name:"chart-style-panel",components:{ElementOutline:Xu,ChartDataEditor:df,ColorButton:Gu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.theme})),o=Object(j["ref"])(!1),c=We(),l=c.addHistorySnapshot,a=Object(j["ref"])(),r=Object(j["ref"])([]),i=Object(j["ref"])(""),u=Object(j["ref"])(""),d=Object(j["ref"])(!0),s=Object(j["ref"])(!0),f=Object(j["ref"])(!1),p=Object(j["ref"])(!1),m=Object(j["ref"])(!1);Object(j["watch"])(t,(function(){if(t.value&&"chart"===t.value.type){if(a.value=t.value.fill||"#000",t.value.options){var e=t.value.options,n=e.lineSmooth,o=e.showLine,c=e.showArea,l=e.horizontalBars,b=e.donut;void 0!==n&&(d.value=n),void 0!==o&&(s.value=o),void 0!==c&&(f.value=c),void 0!==l&&(p.value=l),void 0!==b&&(m.value=b)}r.value=t.value.themeColor,i.value=t.value.gridColor||"rgba(0, 0, 0, 0.4)",u.value=t.value.legend||""}}),{deep:!0,immediate:!0});var b=function(n){o.value=!1;var c={data:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),l()},v=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},O=function(n){var o=t.value.options||{},c=Object(I["a"])(Object(I["a"])({},o),n),a={options:c};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:a}),l()},h=function(n,o){var c={themeColor:r.value.map((function(e,t){return t===o?n:e}))};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),l()},g=function(){var o={themeColor:[].concat(Object(oe["a"])(r.value),[n.value.themeColor])};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},E=function(n){var o={themeColor:r.value.filter((function(e,t){return t!==n}))};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},C=function(n){var o={gridColor:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},x=function(n){var o={legend:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),l()},k=function(){return o.value=!0};return Dc.on(Zo.OPEN_CHART_DATA_EDITOR,k),Object(j["onUnmounted"])((function(){Dc.off(Zo.OPEN_CHART_DATA_EDITOR,k)})),{chartDataEditorVisible:o,handleElement:t,updateData:b,fill:a,updateFill:v,lineSmooth:d,showLine:s,showArea:f,horizontalBars:p,donut:m,updateOptions:O,themeColor:r,gridColor:i,legend:u,updateTheme:h,addThemeColor:g,deleteThemeColor:E,updateGridColor:C,updateLegend:x}}});n("6583");sf.render=Ys,sf.__scopeId="data-v-b77b4458";var ff=sf;Object(j["pushScopeId"])("data-v-db114f8c");var pf={class:"table-style-panel"},mf={class:"row"},bf=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"行数:",-1),vf={class:"row"},Of=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"列数:",-1),hf={class:"row theme-switch"},jf=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"启用主题表格:",-1),gf={class:"switch-wrapper",style:{flex:"3"}},yf={class:"row"},Ef=Object(j["createTextVNode"])("标题行"),Cf=Object(j["createTextVNode"])("汇总行"),xf={class:"row"},kf=Object(j["createTextVNode"])("第一列"),If=Object(j["createTextVNode"])("最后一列"),wf={class:"row"},Sf=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"主题颜色:",-1);function Nf(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconFontSize"),r=Object(j["resolveComponent"])("SelectOption"),i=Object(j["resolveComponent"])("SelectOptGroup"),u=Object(j["resolveComponent"])("Select"),d=Object(j["resolveComponent"])("IconAddText"),s=Object(j["resolveComponent"])("InputGroup"),f=Object(j["resolveComponent"])("ColorPicker"),p=Object(j["resolveComponent"])("IconText"),m=Object(j["resolveComponent"])("Button"),b=Object(j["resolveComponent"])("Tooltip"),v=Object(j["resolveComponent"])("Popover"),O=Object(j["resolveComponent"])("IconFill"),h=Object(j["resolveComponent"])("ButtonGroup"),g=Object(j["resolveComponent"])("IconTextBold"),y=Object(j["resolveComponent"])("CheckboxButton"),E=Object(j["resolveComponent"])("IconTextItalic"),C=Object(j["resolveComponent"])("IconTextUnderline"),x=Object(j["resolveComponent"])("IconStrikethrough"),k=Object(j["resolveComponent"])("CheckboxButtonGroup"),I=Object(j["resolveComponent"])("IconAlignTextLeft"),w=Object(j["resolveComponent"])("RadioButton"),S=Object(j["resolveComponent"])("IconAlignTextCenter"),N=Object(j["resolveComponent"])("IconAlignTextRight"),T=Object(j["resolveComponent"])("RadioGroup"),L=Object(j["resolveComponent"])("Divider"),V=Object(j["resolveComponent"])("ElementOutline"),_=Object(j["resolveComponent"])("InputNumber"),B=Object(j["resolveComponent"])("Switch"),D=Object(j["resolveComponent"])("Checkbox"),M=Object(j["resolveComponent"])("ColorButton");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",pf,[Object(j["createVNode"])(s,{compact:"",class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{style:{flex:"3"},value:e.textAttrs.fontname,onChange:t[0]||(t[0]=function(t){return e.updateTextAttrs({fontname:t})})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a)]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{label:"系统字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",{style:Object(j["normalizeStyle"])({fontFamily:e.value})},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(i,{label:"在线字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(j["createVNode"])(u,{style:{flex:"2"},value:e.textAttrs.fontsize,onChange:t[1]||(t[1]=function(t){return e.updateTextAttrs({fontsize:t})})},{suffixIcon:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d)]})),default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.fontSizeOptions,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e,value:e},{default:Object(j["withCtx"])((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(j["createVNode"])(h,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateTextAttrs({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{class:"text-color-btn",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p),Object(j["createElementVNode"])("div",{class:"text-color-block",style:Object(j["normalizeStyle"])({backgroundColor:e.textAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(v,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.backcolor,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateTextAttrs({backcolor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"单元格填充"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{class:"text-color-btn",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O),Object(j["createElementVNode"])("div",{class:"text-color-block",style:Object(j["normalizeStyle"])({backgroundColor:e.textAttrs.backcolor})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(j["createVNode"])(k,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.bold,onClick:t[4]||(t[4]=function(t){return e.updateTextAttrs({bold:!e.textAttrs.bold})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.em,onClick:t[5]||(t[5]=function(t){return e.updateTextAttrs({em:!e.textAttrs.em})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(E)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.underline,onClick:t[6]||(t[6]=function(t){return e.updateTextAttrs({underline:!e.textAttrs.underline})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除线"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.strikethrough,onClick:t[7]||(t[7]=function(t){return e.updateTextAttrs({strikethrough:!e.textAttrs.strikethrough})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(T,{class:"row","button-style":"solid",value:e.textAttrs.align,onChange:t[8]||(t[8]=function(t){return e.updateTextAttrs({align:t.target.value})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w,{value:"left",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(I)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w,{value:"center",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(S)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(b,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(w,{value:"right",style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(N)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(L),Object(j["createVNode"])(V,{fixed:!0}),Object(j["createVNode"])(L),Object(j["createElementVNode"])("div",mf,[bf,Object(j["createVNode"])(_,{min:e.minRowCount,max:20,value:e.rowCount,"onUpdate:value":t[9]||(t[9]=function(t){return e.rowCount=t}),onPressEnter:t[10]||(t[10]=function(t){return e.setTableRow(t)}),onBlur:t[11]||(t[11]=function(t){return e.setTableRow(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createElementVNode"])("div",vf,[Of,Object(j["createVNode"])(_,{min:e.minColCount,max:20,value:e.colCount,"onUpdate:value":t[12]||(t[12]=function(t){return e.colCount=t}),onPressEnter:t[13]||(t[13]=function(t){return e.setTableCol(t)}),onBlur:t[14]||(t[14]=function(t){return e.setTableCol(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createVNode"])(L),Object(j["createElementVNode"])("div",hf,[jf,Object(j["createElementVNode"])("div",gf,[Object(j["createVNode"])(B,{checked:e.hasTheme,onChange:t[15]||(t[15]=function(t){return e.toggleTheme(t)})},null,8,["checked"])])]),e.hasTheme?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",yf,[Object(j["createVNode"])(D,{onChange:t[16]||(t[16]=function(t){return e.updateTheme({rowHeader:t.target.checked})}),checked:e.theme.rowHeader,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Ef]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[17]||(t[17]=function(t){return e.updateTheme({rowFooter:t.target.checked})}),checked:e.theme.rowFooter,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Cf]})),_:1},8,["checked"])]),Object(j["createElementVNode"])("div",xf,[Object(j["createVNode"])(D,{onChange:t[18]||(t[18]=function(t){return e.updateTheme({colHeader:t.target.checked})}),checked:e.theme.colHeader,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[kf]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[19]||(t[19]=function(t){return e.updateTheme({colFooter:t.target.checked})}),checked:e.theme.colFooter,style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[If]})),_:1},8,["checked"])]),Object(j["createElementVNode"])("div",wf,[Sf,Object(j["createVNode"])(v,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{modelValue:e.theme.color,"onUpdate:modelValue":t[20]||(t[20]=function(t){return e.updateTheme({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(M,{color:e.theme.color,style:{flex:"3"}},null,8,["color"])]})),_:1})])],64)):Object(j["createCommentVNode"])("",!0)])}Object(j["popScopeId"])();var Tf=ae,Lf=Object(j["defineComponent"])({name:"table-style-panel",components:{ElementOutline:Xu,ColorButton:Gu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.selectedTableCells})),o=Object(j["computed"])((function(){return e.state.theme.themeColor})),c=Object(j["computed"])((function(){return e.state.availableFonts})),l=["12px","14px","16px","18px","20px","22px","24px","28px","32px"],a=Object(j["ref"])({bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}),r=Object(j["ref"])(),i=Object(j["ref"])(!1),u=Object(j["ref"])(0),d=Object(j["ref"])(0),s=Object(j["ref"])(0),f=Object(j["ref"])(0);Object(j["watch"])(t,(function(){t.value&&"table"===t.value.type&&(r.value=t.value.theme,i.value=!!r.value,u.value=t.value.data.length,d.value=t.value.data[0].length,s.value=t.value.data.length,f.value=t.value.data[0].length)}),{deep:!0,immediate:!0});var p=We(),m=p.addHistorySnapshot,b=function(){if(t.value&&"table"===t.value.type){var e=0,o=0;if(n.value.length){var c=n.value[0];e=+c.split("_")[0],o=+c.split("_")[1]}var l=t.value.data[e][o].style;a.value=l?{bold:!!l.bold,em:!!l.em,underline:!!l.underline,strikethrough:!!l.strikethrough,color:l.color||"#000",backcolor:l.backcolor||"#000",fontsize:l.fontsize||"12px",fontname:l.fontname||"微软雅黑",align:l.align||"left"}:{bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}}};Object(j["onMounted"])((function(){n.value.length&&b()})),Object(j["watch"])(n,b);var v=function(o){for(var c=JSON.parse(JSON.stringify(t.value.data)),l=0;l
X
Y
',1),Xf={class:"row"},Wf=Object(j["createElementVNode"])("div",{style:{flex:"3"}},"大小:",-1),Yf={key:1,style:{flex:"1"}},Zf=Object(j["createStaticVNode"])('
',1),Jf={class:"row"},Kf=Object(j["createElementVNode"])("div",{style:{flex:"3"}},"旋转:",-1),Qf=Object(j["createElementVNode"])("div",{style:{flex:"1"}},null,-1);function $f(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconSendToBack"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("IconBringToFrontOne"),u=Object(j["resolveComponent"])("ButtonGroup"),d=Object(j["resolveComponent"])("IconBringToFront"),s=Object(j["resolveComponent"])("IconSentToBack"),f=Object(j["resolveComponent"])("Divider"),p=Object(j["resolveComponent"])("IconAlignLeft"),m=Object(j["resolveComponent"])("Tooltip"),b=Object(j["resolveComponent"])("IconAlignVertically"),v=Object(j["resolveComponent"])("IconAlignRight"),O=Object(j["resolveComponent"])("IconAlignTop"),h=Object(j["resolveComponent"])("IconAlignHorizontally"),g=Object(j["resolveComponent"])("IconAlignBottom"),y=Object(j["resolveComponent"])("InputNumber"),E=Object(j["resolveComponent"])("IconLock"),C=Object(j["resolveComponent"])("IconUnlock"),x=Object(j["resolveComponent"])("IconRotate");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Df,[Mf,Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.orderElement(e.handleElement,"top")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{class:"btn-icon"}),Af]})),_:1}),Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.orderElement(e.handleElement,"bottom")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{class:"btn-icon"}),zf]})),_:1})]})),_:1}),Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.orderElement(e.handleElement,"up")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d,{class:"btn-icon"}),Pf]})),_:1}),Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.orderElement(e.handleElement,"down")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(s,{class:"btn-icon"}),Rf]})),_:1})]})),_:1}),Object(j["createVNode"])(f),Ff,Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElementToCanvas("left")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElementToCanvas("horizontal")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElementToCanvas("right")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(u,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.alignElementToCanvas("top")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.alignElementToCanvas("vertical")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(h)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.alignElementToCanvas("bottom")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(g)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(f),Object(j["createElementVNode"])("div",Hf,[Uf,Object(j["createVNode"])(y,{step:5,value:e.left,onChange:t[10]||(t[10]=function(t){return e.updateLeft(t)}),style:{flex:"4"}},null,8,["value"]),Gf,Object(j["createVNode"])(y,{step:5,value:e.top,onChange:t[11]||(t[11]=function(t){return e.updateTop(t)}),style:{flex:"4"}},null,8,["value"])]),qf,"line"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[Object(j["createElementVNode"])("div",Xf,[Wf,Object(j["createVNode"])(y,{min:e.minSize,max:1500,step:5,value:e.width,onChange:t[12]||(t[12]=function(t){return e.updateWidth(t)}),style:{flex:"4"}},null,8,["min","value"]),["image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:0},[e.fixedRatio?(Object(j["openBlock"])(),Object(j["createBlock"])(m,{key:0,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"解除宽高比锁定"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(E,{style:{flex:"1"},class:"icon-btn",onClick:t[13]||(t[13]=function(t){return e.updateFixedRatio(!1)})})]})),_:1},8,["mouseEnterDelay"])):(Object(j["openBlock"])(),Object(j["createBlock"])(m,{key:1,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"宽高比锁定"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(C,{style:{flex:"1"},class:"icon-btn",onClick:t[14]||(t[14]=function(t){return e.updateFixedRatio(!0)})})]})),_:1},8,["mouseEnterDelay"]))],64)):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Yf)),Object(j["createVNode"])(y,{min:e.minSize,max:800,step:5,disabled:"text"===e.handleElement.type,value:e.height,onChange:t[15]||(t[15]=function(t){return e.updateHeight(t)}),style:{flex:"4"}},null,8,["min","disabled","value"])]),Zf],64)):Object(j["createCommentVNode"])("",!0),["text","image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:1},[Object(j["createVNode"])(f),Object(j["createElementVNode"])("div",Jf,[Kf,Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"逆时针旋转"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{class:"icon-btn",onClick:t[16]||(t[16]=function(t){return e.updateRotate45("-")}),style:{flex:"2"}})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顺时针旋转"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(x,{class:"icon-btn",onClick:t[17]||(t[17]=function(t){return e.updateRotate45("+")}),style:Object(j["normalizeStyle"])({flex:2,transform:"rotateY(180deg)"})},null,8,["style"])]})),_:1},8,["mouseEnterDelay"]),Qf,Object(j["createVNode"])(y,{min:-180,max:180,step:5,value:e.rotate,onChange:t[18]||(t[18]=function(t){return e.updateRotate(t)}),style:{flex:"4"}},null,8,["value"])])],64)):Object(j["createCommentVNode"])("",!0)])}Object(j["popScopeId"])();var ep=Object(j["defineComponent"])({name:"element-positopn-panel",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(0),o=Object(j["ref"])(0),c=Object(j["ref"])(0),l=Object(j["ref"])(0),a=Object(j["ref"])(0),r=Object(j["ref"])(!1),i=Object(j["computed"])((function(){return t.value&&Xn[t.value.type]||20}));Object(j["watch"])(t,(function(){t.value&&(n.value=Object(ce["round"])(t.value.left,1),o.value=Object(ce["round"])(t.value.top,1),r.value="fixedRatio"in t.value&&!!t.value.fixedRatio,"line"!==t.value.type&&(c.value=Object(ce["round"])(t.value.width,1),l.value=Object(ce["round"])(t.value.height,1),a.value="rotate"in t.value&&void 0!==t.value.rotate?Object(ce["round"])(t.value.rotate,1):0))}),{deep:!0,immediate:!0});var u=at(),d=u.orderElement,s=oo(),f=s.alignElementToCanvas,p=We(),m=p.addHistorySnapshot,b=function(n){var o={left:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},v=function(n){var o={top:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},O=function(n){var o={width:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},h=function(n){var o={height:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},g=function(n){var o={rotate:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},E=function(n){var o={fixedRatio:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),m()},C=function(n){var o=45*Math.floor(a.value/45);"+"===n?o+=45:"-"===n&&(o-=45),o<-180&&(o=-180),o>180&&(o=180);var c={rotate:o};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),m()};return{handleElement:t,orderElement:d,alignElementToCanvas:f,left:n,top:o,width:c,height:l,rotate:a,fixedRatio:r,minSize:i,updateLeft:b,updateTop:v,updateWidth:O,updateHeight:h,updateRotate:g,updateFixedRatio:E,updateRotate45:C}}});n("9c08");ep.render=$f,ep.__scopeId="data-v-655fed44";var tp=ep;Object(j["pushScopeId"])("data-v-34dfe3c2");var np={class:"element-animation-panel"},op={key:0,class:"element-animation"},cp={class:"animation-pool"},lp={class:"type-title"},ap={class:"pool-item-wrapper"},rp=["onMouseenter","onClick"],ip=Object(j["createTextVNode"])(" 图表元素暂不支持动画 "),up={key:2,class:"duration"},dp=Object(j["createElementVNode"])("div",{style:{flex:"4"}},"持续时间(毫秒):",-1),sp={key:1,class:"tip"},fp=Object(j["createTextVNode"])(" 选中画布中的元素添加动画"),pp={class:"index"},mp={class:"text"},bp={class:"handler"};function vp(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconEffects"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Popover"),u=Object(j["resolveComponent"])("InputNumber"),d=Object(j["resolveComponent"])("IconClick"),s=Object(j["resolveComponent"])("Divider"),f=Object(j["resolveComponent"])("IconPlayOne"),p=Object(j["resolveComponent"])("Tooltip"),m=Object(j["resolveComponent"])("IconCloseSmall"),b=Object(j["resolveComponent"])("Draggable");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",np,[e.handleElement?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",op,["chart"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,trigger:"click",visible:e.animationPoolVisible,"onUpdate:visible":t[1]||(t[1]=function(t){return e.animationPoolVisible=t})},{content:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",cp,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"pool-type",key:n.name},[Object(j["createElementVNode"])("div",lp,Object(j["toDisplayString"])(n.name)+":",1),Object(j["createElementVNode"])("div",ap,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(n.children,(function(n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"pool-item",key:n.name,onMouseenter:function(t){return e.hoverPreviewAnimation=n.value},onMouseleave:t[0]||(t[0]=function(t){return e.hoverPreviewAnimation=""}),onClick:function(t){return e.addAnimation(n.value)}},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["animation-box",["animate__animated","animate__faster",e.hoverPreviewAnimation===n.value&&"animate__".concat(n.value)]])},Object(j["toDisplayString"])(n.name),3)],40,rp)})),128))])])})),128))])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{class:"element-animation-btn"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{style:{"margin-right":"5px"}}),Object(j["createTextVNode"])(" "+Object(j["toDisplayString"])(e.handleElementAnimationName||"点击选择动画"),1)]})),_:1})]})),_:1},8,["visible"])):(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,class:"element-animation-btn",disabled:""},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{style:{"margin-right":"5px"}}),ip]})),_:1})),e.handleElementAnimation?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",up,[dp,Object(j["createVNode"])(u,{min:100,max:5e3,step:100,value:e.handleElementAnimation.duration,onChange:t[2]||(t[2]=function(t){return e.updateElementAnimationDuration(t)}),style:{flex:"3"}},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)])):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",sp,[Object(j["createVNode"])(d),fp])),Object(j["createVNode"])(s),Object(j["createVNode"])(b,{class:"animation-sequence",modelValue:e.animationSequence,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(j["withCtx"])((function(t){var n,o=t.element,c=t.index;return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["sequence-item",{active:(null===(n=e.handleElement)||void 0===n?void 0:n.id)===o.elId}])},[Object(j["createElementVNode"])("div",pp,Object(j["toDisplayString"])(c+1),1),Object(j["createElementVNode"])("div",mp,"【"+Object(j["toDisplayString"])(o.elType)+"】"+Object(j["toDisplayString"])(o.animationType),1),Object(j["createElementVNode"])("div",bp,[Object(j["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"预览"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f,{class:"handler-btn",onClick:function(t){return e.runAnimation(o.elId,o.type,o.duration)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"]),Object(j["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m,{class:"handler-btn",onClick:function(t){return e.deleteAnimation(o.elId)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"])])],2)]})),_:1},8,["modelValue","onEnd"])])}Object(j["popScopeId"])();var Op,hp=[{type:"bounce",name:"弹跳",children:[{name:"弹入",value:"bounceIn"},{name:"向右弹入",value:"bounceInLeft"},{name:"向左弹入",value:"bounceInRight"},{name:"向上弹入",value:"bounceInUp"},{name:"向下弹入",value:"bounceInDown"}]},{type:"fade",name:"浮现",children:[{name:"浮入",value:"fadeIn"},{name:"向下浮入",value:"fadeInDown"},{name:"向下长距浮入",value:"fadeInDownBig"},{name:"向右浮入",value:"fadeInLeft"},{name:"向右长距浮入",value:"fadeInLeftBig"},{name:"向左浮入",value:"fadeInRight"},{name:"向左长距浮入",value:"fadeInRightBig"},{name:"向上浮入",value:"fadeInUp"},{name:"向上长距浮入",value:"fadeInUpBig"},{name:"从左上浮入",value:"fadeInTopLeft"},{name:"从右上浮入",value:"fadeInTopRight"},{name:"从左下浮入",value:"fadeInBottomLeft"},{name:"从右下浮入",value:"fadeInBottomRight"}]},{type:"rotate",name:"旋转",children:[{name:"旋转进入",value:"rotateIn"},{name:"绕左下旋转进入",value:"rotateInDownLeft"},{name:"绕右下旋转进入",value:"rotateInDownRight"},{name:"绕左上旋转进入",value:"rotateInUpLeft"},{name:"绕右上旋转进入",value:"rotateInUpRight"}]},{type:"zoom",name:"缩放",children:[{name:"放大进入",value:"zoomIn"},{name:"向下放大进入",value:"zoomInDown"},{name:"从左放大进入",value:"zoomInLeft"},{name:"从右放大进入",value:"zoomInRight"},{name:"向上放大进入",value:"zoomInUp"}]},{type:"slide",name:"滑入",children:[{name:"向下滑入",value:"slideInDown"},{name:"从右滑入",value:"slideInLeft"},{name:"从左滑入",value:"slideInRight"},{name:"向上滑入",value:"slideInUp"}]},{type:"flip",name:"翻转",children:[{name:"X轴翻转进入",value:"flipInX"},{name:"Y轴翻转进入",value:"flipInY"}]},{type:"back",name:"放大滑入",children:[{name:"向下放大滑入",value:"backInDown"},{name:"从左放大滑入",value:"backInLeft"},{name:"从右放大滑入",value:"backInRight"},{name:"向上放大滑入",value:"backInUp"}]},{type:"lightSpeed",name:"飞入",children:[{name:"从右飞入",value:"lightSpeedInRight"},{name:"从左飞入",value:"lightSpeedInLeft"}]}],jp=1e3,gp={},yp=Object(w["a"])(hp);try{for(yp.s();!(Op=yp.n()).done;){var Ep,Cp=Op.value,xp=Object(w["a"])(Cp.children);try{for(xp.s();!(Ep=xp.n()).done;){var kp=Ep.value;gp[kp.value]=kp.name}}catch(ij){xp.e(ij)}finally{xp.f()}}}catch(ij){yp.e(ij)}finally{yp.f()}var Ip=Object(j["defineComponent"])({name:"element-animation-panel",components:{Draggable:mi.a},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.getters.currentSlideAnimations})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=Object(j["ref"])(""),l=Object(j["ref"])(!1),a=We(),r=a.addHistorySnapshot,i=hp,u=Object(j["computed"])((function(){if(!n.value)return[];var e,t=[],c=Object(w["a"])(n.value);try{var l=function(){var n=e.value,c=o.value.elements.find((function(e){return e.id===n.elId}));if(!c)return"continue";var l=qn[c.type],a=gp[n.type];t.push(Object(I["a"])(Object(I["a"])({},n),{},{elType:l,animationType:a}))};for(c.s();!(e=c.n()).done;)l()}catch(ij){c.e(ij)}finally{c.f()}return t})),d=Object(j["computed"])((function(){if(!t.value)return null;var e=n.value||[],o=e.find((function(e){return e.elId===t.value.id}));return o||null})),s=Object(j["computed"])((function(){return d.value?gp[d.value.type]:null})),f=function(t){var o=n.value.filter((function(e){return e.elId!==t}));e.commit(y.UPDATE_SLIDE,{animations:o}),r()},p=function(t){var o=t.newIndex,c=t.oldIndex;if(c!==o){var l=JSON.parse(JSON.stringify(n.value)),a=l[c];l.splice(c,1),l.splice(o,0,a),e.commit(y.UPDATE_SLIDE,{animations:l}),r()}},m=function(e,t,n){var o="animate__",c=document.querySelector("#editable-element-".concat(e," [class^=editable-element-]"));if(c){var l="".concat(o).concat(t);document.documentElement.style.setProperty("--animate-duration","".concat(n,"ms")),c.classList.add("".concat(o,"animated"),l);var a=function(){document.documentElement.style.removeProperty("--animate-duration"),c.classList.remove("".concat(o,"animated"),l)};c.addEventListener("animationend",a,{once:!0})}},b=function(o){if(n.value){var c=n.value.map((function(e){return e.elId===t.value.id?Object(I["a"])(Object(I["a"])({},e),{},{type:o}):e}));e.commit(y.UPDATE_SLIDE,{animations:c}),l.value=!1,r();var a=n.value.find((function(e){return e.elId===t.value.id})),i=(null===a||void 0===a?void 0:a.duration)||jp;m(t.value.id,o,i)}},v=function(o){if(n.value&&!(o<100||o>5e3)){var c=n.value.map((function(e){return e.elId===t.value.id?Object(I["a"])(Object(I["a"])({},e),{},{duration:o}):e}));e.commit(y.UPDATE_SLIDE,{animations:c}),r()}},O=function(o){if(s.value)b(o);else{var c=n.value?JSON.parse(JSON.stringify(n.value)):[];c.push({elId:t.value.id,type:o,duration:jp}),e.commit(y.UPDATE_SLIDE,{animations:c}),l.value=!1,r(),m(t.value.id,o,jp)}};return{handleElement:t,animationPoolVisible:l,animations:i,animationSequence:u,hoverPreviewAnimation:c,handleElementAnimation:d,handleElementAnimationName:s,addAnimation:O,deleteAnimation:f,handleDragEnd:p,runAnimation:m,updateElementAnimationDuration:v}}});n("2ecf");Ip.render=vp,Ip.__scopeId="data-v-34dfe3c2";var wp=Ip;Object(j["pushScopeId"])("data-v-7c0de296");var Sp={class:"slide-design-panel"},Np=Object(j["createElementVNode"])("div",{class:"title"},"背景填充",-1),Tp={class:"row"},Lp=Object(j["createTextVNode"])("纯色填充"),Vp=Object(j["createTextVNode"])("图片填充"),_p=Object(j["createTextVNode"])("渐变填充"),Bp=Object(j["createElementVNode"])("div",{style:{flex:"1"}},null,-1),Dp=Object(j["createTextVNode"])("缩放"),Mp=Object(j["createTextVNode"])("拼贴"),Ap=Object(j["createTextVNode"])("缩放铺满"),zp=Object(j["createTextVNode"])("线性渐变"),Pp=Object(j["createTextVNode"])("径向渐变"),Rp={key:0,class:"background-image-wrapper"},Fp={class:"background-image"},Hp={key:1,class:"background-gradient-wrapper"},Up={class:"row"},Gp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),qp={class:"row"},Xp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Wp={key:0,class:"row"},Yp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1),Zp={class:"row"},Jp=Object(j["createTextVNode"])("应用背景到全部"),Kp={class:"row"},Qp=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"画布尺寸:",-1),$p=Object(j["createTextVNode"])("宽屏 16 : 9"),em=Object(j["createTextVNode"])("宽屏 16 :10"),tm=Object(j["createTextVNode"])("标准 4 :3"),nm=Object(j["createElementVNode"])("div",{class:"title"},"全局主题",-1),om={class:"row"},cm=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"字体:",-1),lm={class:"row"},am=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"字体颜色:",-1),rm={class:"row"},im=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"背景颜色:",-1),um={class:"row"},dm=Object(j["createElementVNode"])("div",{style:{flex:"2"}},"主题色:",-1),sm=Object(j["createTextVNode"])(" 预置主题 "),fm={key:2,class:"theme-list"},pm=["onClick"],mm={class:"theme-item-content"},bm={class:"row"},vm=Object(j["createTextVNode"])("应用主题到全部");function Om(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("SelectOption"),r=Object(j["resolveComponent"])("Select"),i=Object(j["resolveComponent"])("ColorPicker"),u=Object(j["resolveComponent"])("ColorButton"),d=Object(j["resolveComponent"])("Popover"),s=Object(j["resolveComponent"])("IconPlus"),f=Object(j["resolveComponent"])("FileInput"),p=Object(j["resolveComponent"])("Slider"),m=Object(j["resolveComponent"])("Button"),b=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("SelectOptGroup"),O=Object(j["resolveComponent"])("IconDown");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Sp,[Np,Object(j["createElementVNode"])("div",Tp,[Object(j["createVNode"])(r,{style:{flex:"10"},value:e.background.type,onChange:t[0]||(t[0]=function(t){return e.updateBackgroundType(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"solid"},{default:Object(j["withCtx"])((function(){return[Lp]})),_:1}),Object(j["createVNode"])(a,{value:"image"},{default:Object(j["withCtx"])((function(){return[Vp]})),_:1}),Object(j["createVNode"])(a,{value:"gradient"},{default:Object(j["withCtx"])((function(){return[_p]})),_:1})]})),_:1},8,["value"]),Bp,"solid"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateBackground({color:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.background.color||"#fff",style:{flex:"10"}},null,8,["color"])]})),_:1})):"image"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,style:{flex:"10"},value:e.background.imageSize||"cover",onChange:t[2]||(t[2]=function(t){return e.updateBackground({imageSize:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"contain"},{default:Object(j["withCtx"])((function(){return[Dp]})),_:1}),Object(j["createVNode"])(a,{value:"repeat"},{default:Object(j["withCtx"])((function(){return[Mp]})),_:1}),Object(j["createVNode"])(a,{value:"cover"},{default:Object(j["withCtx"])((function(){return[Ap]})),_:1})]})),_:1},8,["value"])):(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:2,style:{flex:"10"},value:e.background.gradientType,onChange:t[3]||(t[3]=function(t){return e.updateBackground({gradientType:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:"linear"},{default:Object(j["withCtx"])((function(){return[zp]})),_:1}),Object(j["createVNode"])(a,{value:"radial"},{default:Object(j["withCtx"])((function(){return[Pp]})),_:1})]})),_:1},8,["value"]))]),"image"===e.background.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Rp,[Object(j["createVNode"])(f,{onChange:t[4]||(t[4]=function(t){return e.uploadBackgroundImage(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",Fp,[Object(j["createElementVNode"])("div",{class:"content",style:Object(j["normalizeStyle"])({backgroundImage:"url(".concat(e.background.image,")")})},[Object(j["createVNode"])(s)],4)])]})),_:1})])):Object(j["createCommentVNode"])("",!0),"gradient"===e.background.type?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Hp,[Object(j["createElementVNode"])("div",Up,[Gp,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[0],"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.updateBackground({gradientColor:[t,e.background.gradientColor[1]]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.background.gradientColor[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",qp,[Xp,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[1],"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.updateBackground({gradientColor:[e.background.gradientColor[0],t]})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.background.gradientColor[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.background.gradientType?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Wp,[Yp,Object(j["createVNode"])(p,{min:0,max:360,step:15,value:e.background.gradientRotate,style:{flex:"3"},onChange:t[7]||(t[7]=function(t){return e.updateBackground({gradientRotate:t})})},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",Zp,[Object(j["createVNode"])(m,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.applyBackgroundAllSlide()})},{default:Object(j["withCtx"])((function(){return[Jp]})),_:1})]),Object(j["createVNode"])(b),Object(j["createElementVNode"])("div",Kp,[Qp,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.viewportRatio,onChange:t[9]||(t[9]=function(t){return e.updateViewportRatio(t)})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a,{value:.5625},{default:Object(j["withCtx"])((function(){return[$p]})),_:1},8,["value"]),Object(j["createVNode"])(a,{value:.625},{default:Object(j["withCtx"])((function(){return[em]})),_:1},8,["value"]),Object(j["createVNode"])(a,{value:.75},{default:Object(j["withCtx"])((function(){return[tm]})),_:1},8,["value"])]})),_:1},8,["value"])]),Object(j["createVNode"])(b),nm,Object(j["createElementVNode"])("div",om,[cm,Object(j["createVNode"])(r,{style:{flex:"3"},value:e.theme.fontName,onChange:t[10]||(t[10]=function(t){return e.updateTheme({fontName:t})})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{label:"系统字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",{style:Object(j["normalizeStyle"])({fontFamily:e.value})},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(v,{label:"在线字体"},{default:Object(j["withCtx"])((function(){return[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:e.value,value:e.value},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"])]),Object(j["createElementVNode"])("div",lm,[am,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.fontColor,"onUpdate:modelValue":t[11]||(t[11]=function(t){return e.updateTheme({fontColor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.theme.fontColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",rm,[im,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.backgroundColor,"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.updateTheme({backgroundColor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.theme.backgroundColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",um,[dm,Object(j["createVNode"])(d,{trigger:"click"},{content:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.themeColor,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.updateTheme({themeColor:t})})},null,8,["modelValue"])]})),default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u,{color:e.theme.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["title dropdown",{active:e.showPresetThemes}]),onClick:t[14]||(t[14]=function(t){return e.togglePresetThemesVisible()}),style:{"margin-top":"20px"}},[sm,Object(j["createVNode"])(O,{class:"icon"})],2),e.showPresetThemes?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",fm,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themes,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"theme-item",key:n,style:Object(j["normalizeStyle"])({backgroundColor:t.background}),onClick:function(n){return e.updateTheme({fontColor:t.text,backgroundColor:t.background,themeColor:t.color})}},[Object(j["createElementVNode"])("div",mm,[Object(j["createElementVNode"])("div",{class:"text",style:Object(j["normalizeStyle"])({color:t.text})},"Aa",4),Object(j["createElementVNode"])("div",{class:"color-block",style:Object(j["normalizeStyle"])({backgroundColor:t.color})},null,4)])],12,pm)})),128))])):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",bm,[Object(j["createVNode"])(m,{style:{flex:"1"},onClick:t[15]||(t[15]=function(t){return e.applyThemeAllSlide()})},{default:Object(j["withCtx"])((function(){return[vm]})),_:1})])])}Object(j["popScopeId"])();var hm=[{color:"#d14424",background:"#ffffff",text:"#333"},{color:"#42464b",background:"#ffffff",text:"#333"},{color:"#5d82ba",background:"#ffffff",text:"#333"},{color:"#005a6f",background:"#ffffff",text:"#333"},{color:"#d0614c",background:"#dfb044",text:"#333"},{color:"#86a1ad",background:"#dfdbd4",text:"#333"},{color:"#697586",background:"#d5c4a4",text:"#333"},{color:"#333333",background:"#7acfa6",text:"#333"},{color:"#42464b",background:"#415065",text:"#fff"},{color:"#0c5999",background:"#35a2cd",text:"#fff"},{color:"#c49a41",background:"#8c4357",text:"#fff"},{color:"#dfaa00",background:"#2e4e7d",text:"#fff"},{color:"#d1ad88",background:"#f99070",text:"#fff"},{color:"#464d52",background:"#657984",text:"#fff"},{color:"#ffcfb6",background:"#1e4c6f",text:"#fff"},{color:"#c3a043",background:"#43292a",text:"#fff"},{color:"#464d52",background:"#60546f",text:"#fff"},{color:"#df9636",background:"#5b89a0",text:"#fff"},{color:"#b898a4",background:"#93716b",text:"#fff"},{color:"#c47a11",background:"#187db1",text:"#fff"},{color:"#333333",background:"#759564",text:"#fff"},{color:"#355b5e",background:"#424b50",text:"#fff"},{color:"#d29090",background:"#942a32",text:"#fff"},{color:"#00cfdf",background:"#3b434d",text:"#fff"},{color:"#424246",background:"#c70042",text:"#fff"},{color:"#2e4155",background:"#b35d44",text:"#fff"},{color:"#11bfce",background:"#8f98aa",text:"#fff"},{color:"#333333",background:"#549688",text:"#fff"}],jm=hm,gm=ae,ym=Object(j["defineComponent"])({name:"slide-design-panel",components:{ColorButton:Gu},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.state.theme})),o=Object(j["computed"])((function(){return e.state.availableFonts})),c=Object(j["computed"])((function(){return e.state.viewportRatio})),l=Object(j["computed"])((function(){return e.getters.currentSlide})),a=Object(j["computed"])((function(){return l.value.background?l.value.background:{type:"solid",value:"#fff"}})),r=We(),i=r.addHistorySnapshot,u=function(t){if("solid"===t){var n=Object(I["a"])(Object(I["a"])({},a.value),{},{type:"solid",color:a.value.color||"#fff"});e.commit(y.UPDATE_SLIDE,{background:n})}else if("image"===t){var o=Object(I["a"])(Object(I["a"])({},a.value),{},{type:"image",image:a.value.image||"",imageSize:a.value.imageSize||"cover"});e.commit(y.UPDATE_SLIDE,{background:o})}else{var c=Object(I["a"])(Object(I["a"])({},a.value),{},{type:"gradient",gradientType:a.value.gradientType||"linear",gradientColor:a.value.gradientColor||["#fff","#fff"],gradientRotate:a.value.gradientRotate||0});e.commit(y.UPDATE_SLIDE,{background:c})}i()},d=function(t){e.commit(y.UPDATE_SLIDE,{background:Object(I["a"])(Object(I["a"])({},a.value),t)}),i()},s=function(e){var t=e[0];t&&Ze(t).then((function(e){return d({image:e})}))},f=function(){var n=t.value.map((function(e){return Object(I["a"])(Object(I["a"])({},e),{},{background:l.value.background})}));e.commit(y.SET_SLIDES,n),i()},p=function(t){e.commit(y.SET_THEME,t)},m=function(){var o,c=JSON.parse(JSON.stringify(t.value)),l=n.value,a=l.themeColor,r=l.backgroundColor,u=l.fontColor,d=l.fontName,s=Object(w["a"])(c);try{for(s.s();!(o=s.n()).done;){var f=o.value;f.background&&"image"===f.background.type||(f.background=Object(I["a"])(Object(I["a"])({},f.background),{},{type:"solid",color:r}));var p,m=f.elements,b=Object(w["a"])(m);try{for(b.s();!(p=b.n()).done;){var v=p.value;if("shape"===v.type)v.fill=a;else if("line"===v.type)v.color=a;else if("text"===v.type)v.defaultColor=u,v.defaultFontName=d,v.fill&&(v.fill=a);else if("table"===v.type){v.theme&&(v.theme.color=a);var O,h=Object(w["a"])(v.data);try{for(h.s();!(O=h.n()).done;){var j,g=O.value,E=Object(w["a"])(g);try{for(E.s();!(j=E.n()).done;){var C=j.value;C.style&&(C.style.color=u,C.style.fontname=d)}}catch(ij){E.e(ij)}finally{E.f()}}}catch(ij){h.e(ij)}finally{h.f()}}else"chart"===v.type&&(v.themeColor=[a],v.gridColor=u)}}catch(ij){b.e(ij)}finally{b.f()}}}catch(ij){s.e(ij)}finally{s.f()}e.commit(y.SET_SLIDES,c),i()},b=Object(j["ref"])(!0),v=function(){b.value=!b.value},O=function(t){e.commit(y.SET_VIEWPORT_RATIO,t)};return{availableFonts:o,background:a,updateBackgroundType:u,updateBackground:d,uploadBackgroundImage:s,applyBackgroundAllSlide:f,themes:jm,theme:n,webFonts:gm,updateTheme:p,applyThemeAllSlide:m,viewportRatio:c,updateViewportRatio:O,showPresetThemes:b,togglePresetThemesVisible:v}}});n("c991");ym.render=Om,ym.__scopeId="data-v-7c0de296";var Em=ym;Object(j["pushScopeId"])("data-v-647e2618");var Cm={class:"slide-animation-panel"},xm={class:"animation-pool"},km=["onClick"],Im={class:"animation-text"},wm=Object(j["createTextVNode"])("应用到全部");function Sm(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Cm,[Object(j["createElementVNode"])("div",xm,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["animation-item",{active:e.currentTurningMode===t.value}]),key:t.label,onClick:function(n){return e.updateTurningMode(t.value)}},[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["animation-block",t.value])},null,2),Object(j["createElementVNode"])("div",Im,Object(j["toDisplayString"])(t.label),1)],10,km)})),128))]),Object(j["createVNode"])(a,{style:{width:"100%"},onClick:t[0]||(t[0]=function(t){return e.applyAllSlide()})},{default:Object(j["withCtx"])((function(){return[wm]})),_:1})])}Object(j["popScopeId"])();var Nm=Object(j["defineComponent"])({name:"slide-animation-panel",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=Object(j["computed"])((function(){return n.value.turningMode||"slideY"})),c=[{label:"无",value:"no"},{label:"淡入淡出",value:"fade"},{label:"左右推移",value:"slideX"},{label:"上下推移",value:"slideY"}],l=We(),a=l.addHistorySnapshot,r=function(t){t!==o.value&&(e.commit(y.UPDATE_SLIDE,{turningMode:t}),a())},i=function(){var o=t.value.map((function(e){return Object(I["a"])(Object(I["a"])({},e),{},{turningMode:n.value.turningMode})}));e.commit(y.SET_SLIDES,o),a()};return{currentTurningMode:o,animations:c,updateTurningMode:r,applyAllSlide:i}}});n("ccf6");Nm.render=Sm,Nm.__scopeId="data-v-647e2618";var Tm=Nm;Object(j["pushScopeId"])("data-v-88d13362");var Lm={class:"multi-position-panel"},Vm=Object(j["createTextVNode"])("水平均匀分布"),_m=Object(j["createTextVNode"])("垂直均匀分布"),Bm=Object(j["createTextVNode"])("组合"),Dm=Object(j["createTextVNode"])("取消组合");function Mm(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconAlignLeft"),r=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconAlignHorizontally"),d=Object(j["resolveComponent"])("IconAlignRight"),s=Object(j["resolveComponent"])("ButtonGroup"),f=Object(j["resolveComponent"])("IconAlignTop"),p=Object(j["resolveComponent"])("IconAlignVertically"),m=Object(j["resolveComponent"])("IconAlignBottom"),b=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("IconGroup"),O=Object(j["resolveComponent"])("IconUngroup");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Lm,[Object(j["createVNode"])(s,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.alignElement("left")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(a)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.alignElement("horizontal")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.alignElement("right")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(s,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.alignElement("top")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(f)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElement("vertical")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElement("bottom")})},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(m)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),e.displayItemCount>2?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.uniformHorizontalDisplay()})},{default:Object(j["withCtx"])((function(){return[Vm]})),_:1}),Object(j["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.uniformVerticalDisplay()})},{default:Object(j["withCtx"])((function(){return[_m]})),_:1})]})),_:1})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(b),Object(j["createVNode"])(s,{class:"row"},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(r,{disabled:!e.canCombine,onClick:t[8]||(t[8]=function(t){return e.combineElements()}),style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(v,{style:{"margin-right":"3px"}}),Bm]})),_:1},8,["disabled"]),Object(j["createVNode"])(r,{disabled:e.canCombine,onClick:t[9]||(t[9]=function(t){return e.uncombineElements()}),style:{flex:"1"}},{default:Object(j["withCtx"])((function(){return[Object(j["createVNode"])(O,{style:{"margin-right":"3px"}}),Dm]})),_:1},8,["disabled"])]})),_:1})])}Object(j["popScopeId"])();var Am=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=function(c){var a,r=Re(n.value),i=r.minX,u=r.maxX,d=r.minY,s=r.maxY,f=JSON.parse(JSON.stringify(o.value.elements)),p={},m=Object(w["a"])(n.value);try{var b=function(){var e=a.value;if(e.groupId&&!p[e.groupId]){var t=n.value.filter((function(t){return t.groupId===e.groupId}));p[e.groupId]=Re(t)}};for(m.s();!(a=m.n()).done;)b()}catch(ij){m.e(ij)}finally{m.f()}if(c===pe.LEFT)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.minX-i;e.left=e.left-o}else if("rotate"in e&&e.rotate){var c=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),l=c.offsetX;e.left=i-l}else e.left=i}));else if(c===pe.RIGHT)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.maxX-u;e.left=e.left-o}else{var c="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;if("rotate"in e&&e.rotate){var l=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=l.offsetX;e.left=u-c+a}else e.left=u-c}}));else if(c===pe.TOP)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.minY-d;e.top=e.top-o}else if("rotate"in e&&e.rotate){var c=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),l=c.offsetY;e.top=d-l}else e.top=d}));else if(c===pe.BOTTOM)f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=n.maxY-s;e.top=e.top-o}else{var c="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;if("rotate"in e&&e.rotate){var l=ze({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=l.offsetY;e.top=s-c+a}else e.top=s-c}}));else if(c===pe.HORIZONTAL){var v=(i+u)/2;f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=(n.maxX+n.minX)/2,c=o-v;e.left=e.left-c}else{var l="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;e.left=v-l/2}}))}else if(c===pe.VERTICAL){var O=(d+s)/2;f.forEach((function(e){if(t.value.includes(e.id))if(e.groupId){var n=p[e.groupId],o=(n.maxY+n.minY)/2,c=o-O;e.top=e.top-c}else{var l="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;e.top=O-l/2}}))}e.commit(y.UPDATE_SLIDE,{elements:f}),l()};return{alignActiveElement:a}},zm=function(){var e=se(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=Object(j["computed"])((function(){return e.getters.currentSlide})),c=We(),l=c.addHistorySnapshot,a=Object(j["computed"])((function(){var e,t=0,o=[],c=Object(w["a"])(n.value);try{for(c.s();!(e=c.n()).done;){var l=e.value;l.groupId?o.includes(l.groupId)||(o.push(l.groupId),t+=1):t+=1}}catch(ij){c.e(ij)}finally{c.f()}return t})),r=function(){var c,a=Re(n.value),r=a.minX,i=a.maxX,u=JSON.parse(JSON.stringify(n.value)),d=JSON.parse(JSON.stringify(o.value.elements)),s=[],f=[],p=Object(w["a"])(u);try{var m=function(){var e=c.value;if(e.groupId){var t=f.find((function(t){return t.groupId===e.groupId}));t?f=f.map((function(t){return t.groupId===e.groupId?Object(I["a"])(Object(I["a"])({},t),{},{els:[].concat(Object(oe["a"])(t.els),[e])}):t})):f.push({groupId:e.groupId,els:[e]})}else{var n=Pe(e),o=n.minX,l=n.maxX;s.push({min:o,max:l,el:e})}};for(p.s();!(c=p.n()).done;)m()}catch(ij){p.e(ij)}finally{p.f()}var b,v=[],O=Object(w["a"])(f);try{for(O.s();!(b=O.n()).done;){var h=b.value,j=Re(h.els),g=j.minX,E=j.maxX;v.push({min:g,max:E,els:h.els})}}catch(ij){O.e(ij)}finally{O.f()}var C=[].concat(s,v);C.sort((function(e,t){return e.min-t.min}));var x,k=0,S=Object(w["a"])(C);try{for(S.s();!(x=S.n()).done;){var N=x.value,T=N.max-N.min;k+=T}}catch(ij){S.e(ij)}finally{S.f()}var L=(i-r-k)/(C.length-1),V=[],_=C[0],B={min:_.min,max:_.max};if("el"in _)V.push({pos:_.min,el:_.el});else{var D,M=Object(w["a"])(_.els);try{for(M.s();!(D=M.n()).done;){var A=D.value,z=Pe(A),P=z.minX;V.push({pos:P,el:A})}}catch(ij){M.e(ij)}finally{M.f()}}for(var R=1;R","l","o","g","l","g","l","n","⨂","⨁","⨄","⨃","⨅","⨆","√","∛","∜","∝","∞","∟","∠","∡","∢","∧","∨","∩","∪","∫","∬","∭","∮","∯","∰","∱","∲","∳","∴","∵","∼","∽","∾","∿","≃","≄","≅","≆","≇","≈","≊","≋","≌","≍","≎","≏","≐","≑","≒","≓","≔","≕","≤","≥","≦","≧","≨","≩","≪","≫","≺","≻","≼","≽","≾","≿","⊀","⊁","⊂","⊃","⊄","⊅","⊆","⊇","⊈","⊉","⊊","⊋","⊏","⊐","⊑","⊒","⊓","⊔","⊢","⊣","⊤","⊥","⊦","⊧","⊨","⊩","⊪","⊫","⊬","⊭","⊮","⊯","⊲","⊳","⊴","⊵","⋀","⋁","⋂","⋃","⋉","⋊","⋋","⋌","⟨","⟩","⟪","⟫","⟮","⟯","⧼","⧽","⦰"]},{key:"arrow",label:"箭头",children:["←","↑","→","↓","↔","↕","↖","↗","↘","↙","↚","↛","↜","↝","↞","↟","↠","↡","↢","↣","↤","↥","↦","↧","↨","↫","↬","↭","↮","↯","↰","↱","↲","↳","↴","↵","↶","↷","↸","↹","↺","↻","↼","↽","↾","↿","⇀","⇁","⇂","⇃","⇄","⇅","⇆","⇇","⇈","⇉","⇊","⇋","⇌","⇍","⇎","⇏","⇐","⇑","⇒","⇓","⇔","⇕","⇖","⇗","⇘","⇙","⇚","⇛","⇜","⇝","⇞","⇟","⇠","⇡","⇢","⇣","⇤","⇥","⇦","⇧","⇨","⇩","⇪","⇫","⇬","⇭","⇮","⇯","⇰","⇱","⇲","⇳","⇴","⇵","⇶","⇷","⇸","⇹","⇺","⇻","⇼","⇽","⇾","⇿"]},{key:"graph",label:"图形",children:["▢","▣","▤","▥","▦","▧","▨","▩","▭","▮","▯","▰","▱","▲","▷","▼","◁","◈","◉","◍","◐","◑","◒","◓","◔","◕","◧","◨","◩","◪","◫","◬","◭","◮"]}],Zm=Ym,Jm=Object(j["defineComponent"])({name:"symbol-panel",setup:function(){var e=Object(j["ref"])(Zm[0].key),t=Object(j["computed"])((function(){var t=Zm.find((function(t){return t.key===e.value}));return(null===t||void 0===t?void 0:t.children)||[]})),n=function(e){Dc.emit(Zo.RICH_TEXT_COMMAND,{command:"insert",value:e})};return{symbolPoolList:Zm,symbolPool:t,selectedSymbolKey:e,selectSymbol:n}}});n("1d1a");Jm.render=Wm,Jm.__scopeId="data-v-48704658";var Km=Jm,Qm=Object(j["defineComponent"])({name:"toolbar",setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.toolbarState})),n=Object(j["computed"])((function(){return e.getters.handleElement})),o=Object(j["computed"])((function(){var e;return"text"===(null===(e=n.value)||void 0===e?void 0:e.type)?[{label:"样式",value:su.EL_STYLE},{label:"符号",value:su.SYMBOL},{label:"位置",value:su.EL_POSITION},{label:"动画",value:su.EL_ANIMATION}]:[{label:"样式",value:su.EL_STYLE},{label:"位置",value:su.EL_POSITION},{label:"动画",value:su.EL_ANIMATION}]})),c=[{label:"设计",value:su.SLIDE_DESIGN},{label:"切换",value:su.SLIDE_ANIMATION},{label:"动画",value:su.EL_ANIMATION}],l=[{label:"位置",value:su.MULTI_POSITION},{label:"样式",value:su.EL_STYLE}],a=function(t){e.commit(y.SET_TOOLBAR_STATE,t)},r=Object(j["computed"])((function(){return e.state.activeElementIdList})),i=Object(j["computed"])((function(){return r.value.length?r.value.length>1?l:o.value:c}));Object(j["watch"])(i,(function(){var n=i.value.map((function(e){return e.value}));n.includes(t.value)||e.commit(y.SET_TOOLBAR_STATE,n[0])}));var u=Object(j["computed"])((function(){var e,n=(e={},Object(q["a"])(e,su.EL_STYLE,Bf),Object(q["a"])(e,su.EL_POSITION,tp),Object(q["a"])(e,su.EL_ANIMATION,wp),Object(q["a"])(e,su.SLIDE_DESIGN,Em),Object(q["a"])(e,su.SLIDE_ANIMATION,Tm),Object(q["a"])(e,su.MULTI_POSITION,Rm),Object(q["a"])(e,su.SYMBOL,Km),e);return n[t.value]||null}));return{toolbarState:t,currentTabs:i,setToolbarState:a,currentPanelComponent:u}}});n("2b96");Qm.render=du,Qm.__scopeId="data-v-5e3834d5";var $m=Qm;Object(j["pushScopeId"])("data-v-21516eb9");var eb={class:"remark"},tb=["value"];function nb(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",eb,[Object(j["createElementVNode"])("div",{class:"resize-handler",onMousedown:t[0]||(t[0]=function(t){return e.resize(t)})},null,32),Object(j["createElementVNode"])("textarea",{value:e.remark,placeholder:"点击输入演讲者备注",onInput:t[1]||(t[1]=function(t){return e.handleInput(t)})},null,40,tb)])}Object(j["popScopeId"])();var ob=Object(j["defineComponent"])({name:"remark",emits:["update:height"],props:{height:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.getters.currentSlide})),l=Object(j["computed"])((function(){var e;return(null===(e=c.value)||void 0===e?void 0:e.remark)||""})),a=function(e){var t=e.target.value;o.commit(y.UPDATE_SLIDE,{remark:t})},r=function(t){var o=!0,c=t.pageY,l=e.height;document.onmousemove=function(e){if(o){var t=e.pageY,a=t-c,r=-a+l;r<40&&(r=40),r>120&&(r=120),n("update:height",r)}},document.onmouseup=function(){o=!1,document.onmousemove=null,document.onmouseup=null}};return{remark:l,handleInput:a,resize:r}}});n("53f7");ob.render=nb,ob.__scopeId="data-v-21516eb9";var cb=ob,lb=Object(j["defineComponent"])({name:"editor",components:{EditorHeader:Mn,Canvas:pr,CanvasTool:ai,Thumbnails:lu,Toolbar:$m,Remark:cb},setup:function(){var e=Object(j["ref"])(40);return ft(),pt(),{remarkHeight:e}}});n("1fecb");lb.render=ye,lb.__scopeId="data-v-55178b6a";var ab=lb;Object(j["pushScopeId"])("data-v-42d1fb1f");var rb={class:"pptist-screen"},ib={class:"tools"};function ub(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ScreenSlide"),r=Object(j["resolveComponent"])("SlideThumbnails"),i=Object(j["resolveComponent"])("WritingBoardTool"),u=Object(j["resolveComponent"])("IconLeftTwo"),d=Object(j["resolveComponent"])("IconRightTwo"),s=Object(j["resolveComponent"])("IconWrite"),f=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",rb,[Object(j["withDirectives"])(Object(j["createElementVNode"])("div",{class:"slide-list",onMousewheel:t[0]||(t[0]=function(t){return e.mousewheelListener(t)}),onTouchstart:t[1]||(t[1]=function(t){return e.touchStartListener(t)}),onTouchend:t[2]||(t[2]=function(t){return e.touchEndListener(t)})},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["slide-item","turning-mode-".concat(t.turningMode||"slideY"),{current:n===e.slideIndex,before:ne.slideIndex,hide:(n===e.slideIndex-1||n===e.slideIndex+1)&&t.turningMode!==e.currentSlide.turningMode}]),key:t.id},[Object(j["createElementVNode"])("div",{class:"slide-content",style:Object(j["normalizeStyle"])({width:e.slideWidth+"px",height:e.slideHeight+"px"})},[Object(j["createVNode"])(a,{slide:t,scale:e.scale,animationIndex:e.animationIndex},null,8,["slide","scale","animationIndex"])],4)],2)})),128))],544),[[f,e.contextmenus]]),e.slideThumbnailModelVisible?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,turnSlideToIndex:e.turnSlideToIndex,onClose:t[3]||(t[3]=function(t){return e.slideThumbnailModelVisible=!1})},null,8,["turnSlideToIndex"])):Object(j["createCommentVNode"])("",!0),e.writingBoardToolVisible?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:1,onClose:t[4]||(t[4]=function(t){return e.writingBoardToolVisible=!1})})):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",ib,[Object(j["createVNode"])(u,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[5]||(t[5]=function(t){return e.execPrev()})}),Object(j["createVNode"])(d,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[6]||(t[6]=function(t){return e.execNext()})}),Object(j["createVNode"])(s,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[7]||(t[7]=function(t){return e.writingBoardToolVisible=!0})})]),e.showPageNumber?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:2,class:"page-number",onClick:t[8]||(t[8]=function(t){return e.slideThumbnailModelVisible=!0})},Object(j["toDisplayString"])(e.slideIndex+1)+" / "+Object(j["toDisplayString"])(e.slides.length),1)):Object(j["createCommentVNode"])("",!0)])}function db(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ScreenElement");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"screen-slide",style:Object(j["normalizeStyle"])({width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")})},[Object(j["createElementVNode"])("div",{class:"background",style:Object(j["normalizeStyle"])(Object(I["a"])({},e.backgroundStyle))},null,4),(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:t.id,elementInfo:t,elementIndex:n+1,animationIndex:e.animationIndex},null,8,["elementInfo","elementIndex","animationIndex"])})),128))],4)}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-11126f7d");var sb=["id","title"];function fb(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["screen-element",{link:e.elementInfo.link}]),id:"screen-element-".concat(e.elementInfo.id),style:Object(j["normalizeStyle"])({zIndex:e.elementIndex,color:e.theme.fontColor,fontFamily:e.theme.fontName,visibility:e.needWaitAnimation?"hidden":"visible"}),title:e.elementInfo.link||"",onClick:t[0]||(t[0]=function(t){return e.openLink()})},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo},null,8,["elementInfo"]))],14,sb)}function pb(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("ElementOutline"),r=Object(j["resolveComponent"])("Chart");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"screen-element-chart",style:Object(j["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(j["createElementVNode"])("div",{class:"element-content",style:Object(j["normalizeStyle"])({backgroundColor:e.elementInfo.fill})},[Object(j["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,type:e.elementInfo.chartType,data:e.elementInfo.data,options:e.elementInfo.options,themeColor:e.elementInfo.themeColor,gridColor:e.elementInfo.gridColor,legends:e.elementInfo.data.legends,legend:e.elementInfo.legend||""},null,8,["width","height","type","data","options","themeColor","gridColor","legends","legend"])],4)],4)}Object(j["popScopeId"])();var mb=Object(j["defineComponent"])({name:"screen-element-chart",components:{ElementOutline:Xo,Chart:Cl},props:{elementInfo:{type:Object,required:!0}}});n("8b2c");mb.render=pb,mb.__scopeId="data-v-85370c80";var bb=mb,vb=Object(j["defineComponent"])({name:"screen-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},animationIndex:{type:Number,default:-1}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(q["a"])(t,no.IMAGE,gi),Object(q["a"])(t,no.TEXT,xi),Object(q["a"])(t,no.SHAPE,Li),Object(q["a"])(t,no.LINE,Di),Object(q["a"])(t,no.CHART,bb),Object(q["a"])(t,no.TABLE,Yi),t);return n[e.elementInfo.type]||null})),n=se(),o=Object(j["computed"])((function(){return n.state.theme})),c=Object(j["computed"])((function(){return n.getters.currentSlide})),l=Object(j["computed"])((function(){var t=c.value.animations||[],n=t.findIndex((function(t){return t.elId===e.elementInfo.id}));return-1!==n&&n>=e.animationIndex})),a=function(){e.elementInfo.link&&window.open(e.elementInfo.link)};return{currentElementComponent:t,needWaitAnimation:l,theme:o,openLink:a}}});n("a247");vb.render=fb,vb.__scopeId="data-v-11126f7d";var Ob=vb,hb=Object(j["defineComponent"])({name:"screen-slide",components:{ScreenElement:Ob},props:{slide:{type:Object,required:!0},scale:{type:Number,required:!0},animationIndex:{type:Number,default:-1}},setup:function(e){var t=se(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=na(o),l=c.backgroundStyle;return{backgroundStyle:l,VIEWPORT_SIZE:Je,viewportRatio:n}}});n("7599");hb.render=db,hb.__scopeId="data-v-a094625a";var jb=hb;Object(j["pushScopeId"])("data-v-26398174");var gb={class:"slide-thumbnails"},yb={class:"return-button"},Eb={class:"slide-thumbnails-content"},Cb=["onClick"];function xb(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconArrowCircleLeft"),r=Object(j["resolveComponent"])("ThumbnailSlide");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",gb,[Object(j["createElementVNode"])("div",yb,[Object(j["createVNode"])(a,{class:"icon",onClick:t[0]||(t[0]=function(t){return e.close()})})]),Object(j["createElementVNode"])("div",Eb,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["thumbnail",{active:n===e.slideIndex}]),key:t.id,onClick:function(t){return e.turnSlideToIndex(n)}},[Object(j["createVNode"])(r,{slide:t,size:150},null,8,["slide"])],10,Cb)})),128))])])}Object(j["popScopeId"])();var kb=Object(j["defineComponent"])({name:"slide-thumbnails",emits:["close"],components:{ThumbnailSlide:Qi},props:{turnSlideToIndex:{type:Function}},setup:function(e,t){var n=t.emit,o=se(),c=Object(j["computed"])((function(){return o.state.slides})),l=Object(j["computed"])((function(){return o.state.slideIndex})),a=function(){return n("close")};return{slides:c,slideIndex:l,close:a}}});n("2ab2");kb.render=xb,kb.__scopeId="data-v-26398174";var Ib=kb;Object(j["pushScopeId"])("data-v-7a2e5324");var wb={class:"writing-board-tool"},Sb={class:"tools"},Nb={class:"colors"},Tb=["onClick"];function Lb(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("WritingBoard"),r=Object(j["resolveComponent"])("IconWrite"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconErase"),d=Object(j["resolveComponent"])("IconClear"),s=Object(j["resolveComponent"])("IconFill"),f=Object(j["resolveComponent"])("IconClose");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",wb,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Teleport"],{to:"body"},[Object(j["createVNode"])(a,{ref:"writingBoardRef",color:e.writingBoardColor,blackboard:e.blackboard,model:e.writingBoardModel},null,8,["color","blackboard","model"])])),Object(j["createElementVNode"])("div",Sb,[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"画笔"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["btn",{active:"pen"===e.writingBoardModel}]),onClick:t[0]||(t[0]=function(t){return e.changePen()})},[Object(j["createVNode"])(r,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"橡皮擦"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["btn",{active:"eraser"===e.writingBoardModel}]),onClick:t[1]||(t[1]=function(t){return e.changeEraser()})},[Object(j["createVNode"])(u,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"清除墨迹"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[2]||(t[2]=function(t){return e.clearCanvas()})},[Object(j["createVNode"])(d,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"黑板"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:Object(j["normalizeClass"])(["btn",{active:e.blackboard}]),onClick:t[3]||(t[3]=function(t){return e.blackboard=!e.blackboard})},[Object(j["createVNode"])(s,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createElementVNode"])("div",Nb,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.writingBoardColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:Object(j["normalizeClass"])(["color",{active:t===e.writingBoardColor}]),key:t,style:Object(j["normalizeStyle"])({backgroundColor:t}),onClick:function(n){return e.changeColor(t)}},null,14,Tb)})),128))]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"关闭画笔"},{default:Object(j["withCtx"])((function(){return[Object(j["createElementVNode"])("div",{class:"btn",onClick:t[4]||(t[4]=function(t){return e.closeWritingBoard()})},[Object(j["createVNode"])(f,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"])])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-7ff9fa00");var Vb={class:"writing-board",ref:"writingBoardRef"},_b={key:0,class:"blackboard"};function Bb(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("IconWrite");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Vb,[e.blackboard?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",_b)):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("canvas",{class:"canvas",ref:"canvasRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMousedown(t)}),onMousemove:t[1]||(t[1]=function(t){return e.handleMousemove(t)}),onMouseup:t[2]||(t[2]=function(t){return e.handleMouseup()}),onTouchstart:t[3]||(t[3]=function(t){return e.handleMousedown(t)}),onTouchmove:t[4]||(t[4]=function(t){return e.handleMousemove(t)}),onTouchend:t[5]||(t[5]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseleave:t[6]||(t[6]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseenter:t[7]||(t[7]=function(t){return e.mouseInCanvas=!0})},null,544),e.mouseInCanvas&&"pen"===e.model?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:1,class:"pen",style:Object(j["normalizeStyle"])({left:e.mouse.x-e.penSize/2+"px",top:e.mouse.y-36+e.penSize/2+"px",color:e.color})},[Object(j["createVNode"])(a,{class:"icon",size:"36"})],4)):Object(j["createCommentVNode"])("",!0),e.mouseInCanvas&&"eraser"===e.model?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:2,class:"eraser",style:Object(j["normalizeStyle"])({left:e.mouse.x-e.rubberSize/2+"px",top:e.mouse.y-e.rubberSize/2+"px",width:e.rubberSize+"px",height:e.rubberSize+"px"})},null,4)):Object(j["createCommentVNode"])("",!0)],512)}Object(j["popScopeId"])();var Db=6,Mb=80,Ab=Object(j["defineComponent"])({name:"writing-board",props:{color:{type:String,default:"#ffcc00"},model:{type:String,default:"pen"},blackboard:{type:Boolean,default:!1}},setup:function(e){var t=null,n=Object(j["ref"])(),o=Object(j["ref"])(),c={x:0,y:0},l=!1,a=0,r=-1,i=Object(j["reactive"])({x:0,y:0}),u=function(e,t){i.x=e,i.y=t},d=Object(j["ref"])(!1),s=function(){o.value&&n.value&&(t=o.value.getContext("2d"),t&&(o.value.width=n.value.clientWidth,o.value.height=n.value.clientHeight,o.value.style.width=n.value.clientWidth+"px",o.value.style.height=n.value.clientHeight+"px",t.lineCap="round",t.lineJoin="round"))};Object(j["onMounted"])(s);var f=function(n,o,l){if(t){var a=c.x,r=c.y;t.lineWidth=l,t.strokeStyle=e.color,t.beginPath(),t.moveTo(a,r),t.lineTo(n,o),t.stroke(),t.closePath()}},p=function(e,n){var l,a,r,i;if(t&&o.value){var u=c.x,d=c.y,s=Mb/2,f=s*Math.sin(Math.atan((n-d)/(e-u))),p=s*Math.cos(Math.atan((n-d)/(e-u))),m=[u+f,d-p],b=[u-f,d+p],v=[e+f,n-p],O=[e-f,n+p];t.save(),t.beginPath(),t.arc(e,n,s,0,2*Math.PI),t.clip(),t.clearRect(0,0,o.value.width,o.value.height),t.restore(),t.save(),t.beginPath(),(l=t).moveTo.apply(l,m),(a=t).lineTo.apply(a,v),(r=t).lineTo.apply(r,O),(i=t).lineTo.apply(i,b),t.closePath(),t.clip(),t.clearRect(0,0,o.value.width,o.value.height),t.restore()}},m=function(e,t){var n=c.x,o=c.y;return Math.sqrt((e-n)*(e-n)+(t-o)*(t-o))},b=function(e,t){var n,o=10,c=.1,l=Db,a=3,i=e/t;return n=i<=c?l:i>=o?a:l-i/o*l,-1===r?n:1*n/3+2*r/3},v=function(t,n){var o=(new Date).getTime();if("pen"===e.model){var l=m(t,n),i=o-a,u=b(l,i);f(t,n,u),r=u}else p(t,n);c={x:t,y:n},a=(new Date).getTime()},O=function(e){var t=e instanceof MouseEvent?e.offsetX:e.changedTouches[0].pageX,n=e instanceof MouseEvent?e.offsetY:e.changedTouches[0].pageY;l=!0,c={x:t,y:n},a=(new Date).getTime(),e instanceof TouchEvent&&(u(t,n),d.value=!0)},h=function(e){var t=e instanceof MouseEvent?e.offsetX:e.changedTouches[0].pageX,n=e instanceof MouseEvent?e.offsetY:e.changedTouches[0].pageY;u(t,n),l&&v(t,n)},g=function(){l&&(l=!1)},y=function(){t&&o.value&&t.clearRect(0,0,o.value.width,o.value.height)};return{mouse:i,mouseInCanvas:d,penSize:Db,rubberSize:Mb,writingBoardRef:n,canvasRef:o,handleMousedown:O,handleMousemove:h,handleMouseup:g,clearCanvas:y}}});n("097f");Ab.render=Bb,Ab.__scopeId="data-v-7ff9fa00";var zb=Ab,Pb=["#000000","#ffffff","#1e497b","#4e81bb","#e2534d","#9aba60","#8165a0","#47acc5","#f9974c"],Rb=Object(j["defineComponent"])({name:"writing-board-tool",emits:["close"],components:{WritingBoard:zb},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(),c=Object(j["ref"])("#e2534d"),l=Object(j["ref"])("pen"),a=Object(j["ref"])(!1),r=function(){l.value="pen"},i=function(){l.value="eraser"},u=function(){o.value.clearCanvas()},d=function(e){"pen"!==l.value&&(l.value="pen"),c.value=e},s=function(){n("close")};return{writingBoardRef:o,writingBoardColors:Pb,writingBoardColor:c,writingBoardModel:l,blackboard:a,changePen:r,changeEraser:i,clearCanvas:u,changeColor:d,closeWritingBoard:s}}});n("4c08");Rb.render=Lb,Rb.__scopeId="data-v-7a2e5324";var Fb=Rb,Hb=Object(j["defineComponent"])({name:"screen",components:{ScreenSlide:jb,SlideThumbnails:Ib,WritingBoardTool:Fb},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.slides})),n=Object(j["computed"])((function(){return e.state.slideIndex})),o=Object(j["computed"])((function(){return e.state.viewportRatio})),c=Object(j["computed"])((function(){return e.getters.currentSlide})),l=Object(j["ref"])(0),a=Object(j["ref"])(0),r=Object(j["computed"])((function(){return l.value/Je})),i=Object(j["ref"])(!1),u=Object(j["ref"])(!1),d=Object(j["ref"])(!1),s=function(){var e,t,n=document.body.clientWidth,c=document.body.clientHeight;c/n===o.value?(e=n,t=c):c/n>o.value?(e=n,t=n*o.value):(e=c/o.value,t=c),l.value=e,a.value=t},f=dt(),p=f.exitScreening,m=function(){s(),ut()||p()};Object(j["onMounted"])((function(){s(),window.addEventListener("resize",m)})),Object(j["onUnmounted"])((function(){window.removeEventListener("resize",m)}));var b=Object(j["computed"])((function(){return c.value.animations||[]})),v=Object(j["ref"])(0),O=function(){var e="animate__",t=b.value[v.value];v.value+=1;var n=document.querySelector("#screen-element-".concat(t.elId," [class^=base-element-]"));if(n){var o="".concat(e).concat(t.type);document.documentElement.style.setProperty("--animate-duration","".concat(t.duration,"ms")),n.classList.add("".concat(e,"animated"),o);var c=function(){document.documentElement.style.removeProperty("--animate-duration"),n.classList.remove("".concat(e,"animated"),o)};n.addEventListener("animationend",c,{once:!0})}},h=Object(j["ref"])(0),g=function(){h.value&&(clearInterval(h.value),h.value=0)};Object(j["onUnmounted"])(g);var E=Object(ce["throttle"])((function(e){Ce["a"].success(e)}),1e3,{leading:!0,trailing:!1}),C=function(){if(b.value.length&&v.value>0)v.value-=1;else if(n.value>0){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1);var t=b.value?b.value.length:0;v.value=t}else E("已经是第一页了")},x=function(){b.value.length&&v.value0&&x()}),500,{leading:!0,trailing:!1}),w=Object(j["ref"])(null),S=function(e){w.value={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY}},N=function(e){if(w.value){var t=Math.abs(w.value.x-e.changedTouches[0].pageX),n=e.changedTouches[0].pageY-w.value.y;Math.abs(n)>t&&Math.abs(n)>50&&(w.value=null,n>0?C():x())}},T=function(e){var t=e.key.toUpperCase();t===Oe.UP||t===Oe.LEFT?C():t!==Oe.DOWN&&t!==Oe.RIGHT&&t!==Oe.SPACE&&t!==Oe.ENTER||x()};Object(j["onMounted"])((function(){document.addEventListener("keydown",T)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",T)}));var L=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1),v.value=0},V=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value+1),v.value=0},_=function(t){u.value=!1,e.commit(y.UPDATE_SLIDE_INDEX,t),v.value=0},B=function(){return[{text:"上一页",subText:"↑ ←",disable:n.value<=0,handler:function(){return L()}},{text:"下一页",subText:"↓ →",disable:n.value>=t.value.length-1,handler:function(){return V()}},{text:"第一页",disable:0===n.value,handler:function(){return _(0)}},{text:"最后一页",disable:n.value===t.value.length-1,handler:function(){return _(t.value.length-1)}},{divider:!0},{text:"显示页码",subText:i.value?"√":"",handler:function(){return i.value=!i.value}},{text:"查看所有幻灯片",handler:function(){return u.value=!0}},{text:"画笔",handler:function(){return d.value=!0}},{divider:!0},{text:h.value?"取消自动放映":"自动放映",handler:h.value?g:k},{text:"结束放映",subText:"ESC",handler:p}]};return Object(j["provide"])("slideScale",r),{slides:t,slideIndex:n,currentSlide:c,slideWidth:l,slideHeight:a,scale:r,mousewheelListener:I,touchStartListener:S,touchEndListener:N,animationIndex:v,contextmenus:B,execPrev:C,execNext:x,slideThumbnailModelVisible:u,turnSlideToIndex:_,writingBoardToolVisible:d,showPageNumber:i}}});n("b6a8");Hb.render=ub,Hb.__scopeId="data-v-42d1fb1f";var Ub=Hb,Gb=Object(j["defineComponent"])({name:"app",components:{Editor:ab,Screen:Ub},setup:function(){var e=se(),t=Object(j["computed"])((function(){return e.state.screening}));return window.onbeforeunload=function(){return!1},Object(j["onMounted"])((function(){e.commit(y.SET_AVAILABLE_FONTS),e.dispatch(E.INIT_SNAPSHOT_DATABASE)})),{screening:t}}});n("0679");Gb.render=g;var qb=Gb,Xb=(n("793f"),n("41ed"),n("77ed"),n("5952"),n("c860"),n("ae3f"),n("8c56"),n("9312")),Wb=n("84e7b"),Yb=n("1e27"),Zb=n("8845"),Jb=n("a3ef"),Kb=n("8331"),Qb=n("4040"),$b=n("f745"),ev=n("2e2d"),tv=n("6010"),nv=n("1fcb"),ov=n("500e"),cv=n("0996"),lv=n("1646"),av=n("fbe7"),rv=n("b8af"),iv=n("bf2c"),uv=n("fd52"),dv=n("f259"),sv=n("1b1c"),fv=n("bde2"),pv=n("23fa"),mv=n("5a28"),bv=n("c53e"),vv=n("8377"),Ov=n("246f"),hv=n("33a2"),jv=n("fdbcb"),gv=n("ccc7"),yv=n("e3b9"),Ev=n("3a3e"),Cv=n("2e67"),xv=n("e792"),kv=n("e483"),Iv=n("eac5"),wv=n("694b"),Sv=n("e9ec"),Nv=n("ea01"),Tv=n("74f3"),Lv=n("4bad"),Vv=n("e7f4"),_v=n("eb50"),Bv=n("0be2"),Dv=n("a90c"),Mv=n("c90a"),Av=n("d41d"),zv=n("2c06"),Pv=n("a5dc"),Rv=n("8678"),Fv=n("d7fb"),Hv=n("ce42"),Uv=n("7abc"),Gv=n("5b20"),qv=n("69de"),Xv=n("d0c6"),Wv=n("dcc2"),Yv=n("f1d2"),Zv=n("d16b"),Jv=n("a5f1"),Kv=n("df0d"),Qv=n("70f2"),$v=n("b7c8"),eO=n("f99d"),tO=n("40bb"),nO=n("ae33"),oO=n("8c1a"),cO=n("b7b3"),lO=n("96be"),aO=n("5a69"),rO=n("f9e5"),iO=n("bbce"),uO=n("77ad"),dO=n("46cd"),sO=n("3ee3"),fO=n("dde4"),pO=n("cead"),mO=n("fa00"),bO=n("e970"),vO=n("f3c2"),OO=n("7312"),hO=n("5294b"),jO=n("9fbc"),gO={install:function(e){e.component("IconFontSize",jO["a"]),e.component("IconPicture",hO["a"]),e.component("IconGraphicDesign",OO["a"]),e.component("IconConnection",vO["a"]),e.component("IconChartProportion",bO["a"]),e.component("IconInsertTable",mO["a"]),e.component("IconLock",pO["a"]),e.component("IconUnlock",fO["a"]),e.component("IconFullScreen",sO["a"]),e.component("IconBack",dO["a"]),e.component("IconNext",uO["a"]),e.component("IconAlignTop",iO["a"]),e.component("IconAlignLeft",rO["a"]),e.component("IconAlignRight",aO["a"]),e.component("IconAlignBottom",lO["a"]),e.component("IconAlignVertically",cO["a"]),e.component("IconAlignHorizontally",oO["a"]),e.component("IconBringToFront",nO["a"]),e.component("IconSentToBack",tO["a"]),e.component("IconBringToFrontOne",eO["a"]),e.component("IconSendToBack",$v["a"]),e.component("IconGroup",Qv["a"]),e.component("IconUngroup",Kv["a"]),e.component("IconFill",Jv["a"]),e.component("IconBackgroundColor",Zv["a"]),e.component("IconPlatte",Yv["a"]),e.component("IconTailoring",Wv["a"]),e.component("IconColorFilter",Xv["a"]),e.component("IconFlipVertically",qv["a"]),e.component("IconFlipHorizontally",Gv["a"]),e.component("IconText",Uv["a"]),e.component("IconAddText",Hv["a"]),e.component("IconAlignTextLeft",Fv["a"]),e.component("IconAlignTextRight",Rv["a"]),e.component("IconAlignTextCenter",Pv["a"]),e.component("IconRowHeight",zv["a"]),e.component("IconFullwidth",Av["a"]),e.component("IconCode",Mv["a"]),e.component("IconTextBold",Dv["a"]),e.component("IconTextItalic",Bv["a"]),e.component("IconTextUnderline",_v["a"]),e.component("IconStrikethrough",Vv["a"]),e.component("IconQuote",Lv["a"]),e.component("IconList",Tv["a"]),e.component("IconOrderedList",Nv["a"]),e.component("IconUpOne",Sv["a"]),e.component("IconDownOne",wv["a"]),e.component("IconFormat",Iv["a"]),e.component("IconAlignTextTopOne",kv["a"]),e.component("IconAlignTextBottomOne",xv["a"]),e.component("IconAlignTextMiddleOne",Cv["a"]),e.component("IconDown",Ev["a"]),e.component("IconLeftTwo",yv["a"]),e.component("IconRightTwo",gv["a"]),e.component("IconPlus",jv["a"]),e.component("IconMinus",hv["a"]),e.component("IconClose",Ov["a"]),e.component("IconCloseSmall",vv["a"]),e.component("IconChartHistogram",bv["a"]),e.component("IconChartHistogramOne",mv["a"]),e.component("IconChartLine",pv["a"]),e.component("IconChartLineArea",fv["a"]),e.component("IconChartScatter",sv["a"]),e.component("IconChartPie",dv["a"]),e.component("IconChartRing",uv["a"]),e.component("IconPlayOne",iv["a"]),e.component("IconPpt",rv["a"]),e.component("IconHelpcenter",av["a"]),e.component("IconGithub",lv["a"]),e.component("IconWrite",cv["a"]),e.component("IconErase",ov["a"]),e.component("IconEffects",nv["a"]),e.component("IconRotate",tv["a"]),e.component("IconEdit",ev["a"]),e.component("IconUndo",$b["a"]),e.component("IconTransform",Qb["a"]),e.component("IconClick",Kb["a"]),e.component("IconTheme",Jb["a"]),e.component("IconArrowCircleLeft",Zb["a"]),e.component("IconLogout",Yb["a"]),e.component("IconClear",Wb["a"]),e.component("IconFolderClose",Xb["a"])}};Object(j["pushScopeId"])("data-v-d6089858");var yO=["accept"];function EO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"file-input",onClick:t[1]||(t[1]=function(t){return e.handleClick()})},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0),Object(j["createElementVNode"])("input",{class:"input",type:"file",name:"upload",ref:"inputRef",accept:e.accept,onChange:t[0]||(t[0]=function(t){return e.handleChange(t)})},null,40,yO)])}Object(j["popScopeId"])();var CO=Object(j["defineComponent"])({name:"file-input",emits:["change"],props:{accept:{type:String,default:"image/*"}},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(),c=function(){o.value&&(o.value.value="",o.value.click())},l=function(e){var t=e.target.files;t&&n("change",t)};return{handleClick:c,handleChange:l,inputRef:o}}});n("f349");CO.render=EO,CO.__scopeId="data-v-d6089858";var xO=CO,kO={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",version:"1.1"};function IO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("svg",kO,[Object(j["renderSlot"])(e.$slots,"default")])}var wO={name:"svg-wrapper"};wO.render=IO;var SO=wO;function NO(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("button",{class:Object(j["normalizeClass"])(["checkbox-button",{checked:n.checked}])},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)],2)}var TO={name:"checkbox-button",props:{checked:{type:Boolean,default:!1}}};n("782e");TO.render=NO,TO.__scopeId="data-v-7cae2b90";var LO=TO;Object(j["pushScopeId"])("data-v-7dafd0a9");var VO={class:"checkbox-button-group"};function _O(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",VO,[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)])}Object(j["popScopeId"])();var BO={name:"checkbox-button-group"};n("69d5");BO.render=_O,BO.__scopeId="data-v-7dafd0a9";var DO=BO;Object(j["pushScopeId"])("data-v-210672ee");var MO={class:"color-picker"},AO={class:"picker-saturation-wrap"},zO={class:"picker-controls"},PO={class:"picker-color-wrap"},RO={class:"picker-sliders"},FO={class:"picker-hue-wrap"},HO={class:"picker-alpha-wrap"},UO={class:"picker-field"},GO={class:"picker-presets"},qO=["onClick"],XO={class:"picker-gradient-presets"},WO=["onClick"],YO={class:"picker-presets"},ZO=["onClick"],JO={key:0,class:"recent-colors-title"},KO={class:"recent-colors"},QO=["onClick"];function $O(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Saturation"),r=Object(j["resolveComponent"])("Checkboard"),i=Object(j["resolveComponent"])("Hue"),u=Object(j["resolveComponent"])("Alpha"),d=Object(j["resolveComponent"])("EditableInput");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",MO,[Object(j["createElementVNode"])("div",AO,[Object(j["createVNode"])(a,{value:e.color,hue:e.hue,onColorChange:t[0]||(t[0]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createElementVNode"])("div",zO,[Object(j["createElementVNode"])("div",PO,[Object(j["createElementVNode"])("div",{class:"picker-current-color",style:Object(j["normalizeStyle"])({background:e.currentColor})},null,4),Object(j["createVNode"])(r)]),Object(j["createElementVNode"])("div",RO,[Object(j["createElementVNode"])("div",FO,[Object(j["createVNode"])(i,{value:e.color,hue:e.hue,onColorChange:t[1]||(t[1]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createElementVNode"])("div",HO,[Object(j["createVNode"])(u,{value:e.color,onColorChange:t[2]||(t[2]=function(t){return e.changeColor(t)})},null,8,["value"])])])]),Object(j["createElementVNode"])("div",UO,[Object(j["createVNode"])(d,{value:e.color,onColorChange:t[3]||(t[3]=function(t){return e.changeColor(t)})},null,8,["value"])]),Object(j["createElementVNode"])("div",GO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themeColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"picker-presets-color",key:t,style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,qO)})),128))]),Object(j["createElementVNode"])("div",XO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.presetColors,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"picker-gradient-col",key:n},[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"picker-gradient-color",key:t,style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,WO)})),128))])})),128))]),Object(j["createElementVNode"])("div",YO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.standardColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:t,class:"picker-presets-color",style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,ZO)})),128))]),e.recentColors.length?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",JO,"最近使用:")):Object(j["createCommentVNode"])("",!0),Object(j["createElementVNode"])("div",KO,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.recentColors,(function(t){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:t,class:"picker-presets-color",style:Object(j["normalizeStyle"])({background:t}),onClick:function(n){return e.selectPresetColor(t)}},null,12,QO)})),128))])])}Object(j["popScopeId"])(),Object(j["pushScopeId"])("data-v-6f2cb744");var eh={class:"alpha"},th={class:"alpha-checkboard-wrap"},nh=Object(j["createElementVNode"])("div",{class:"alpha-picker"},null,-1),oh=[nh];function ch(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Checkboard");return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",eh,[Object(j["createElementVNode"])("div",th,[Object(j["createVNode"])(a)]),Object(j["createElementVNode"])("div",{class:"alpha-gradient",style:Object(j["normalizeStyle"])({background:e.gradientColor})},null,4),Object(j["createElementVNode"])("div",{class:"alpha-container",ref:"alphaRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[Object(j["createElementVNode"])("div",{class:"alpha-pointer",style:Object(j["normalizeStyle"])({left:100*e.color.a+"%"})},oh,4)],544)])}function lh(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"checkerboard",style:Object(j["normalizeStyle"])(e.bgStyle)},null,4)}Object(j["popScopeId"])();var ah={},rh=function(e,t,n){var o=document.createElement("canvas");o.width=o.height=2*n;var c=o.getContext("2d");return c?(c.fillStyle=e,c.fillRect(0,0,o.width,o.height),c.fillStyle=t,c.fillRect(0,0,n,n),c.translate(n,n),c.fillRect(0,0,n,n),o.toDataURL()):null},ih=function(e,t,n){var o=e+","+t+","+n;if(ah[o])return ah[o];var c=rh(e,t,n);return ah[o]=c,c},uh=Object(j["defineComponent"])({name:"checkboard",emits:["colorChange"],props:{size:{type:Number,default:8},white:{type:String,default:"#fff"},grey:{type:String,default:"#e6e6e6"}},setup:function(e){var t=Object(j["computed"])((function(){var t=ih(e.white,e.grey,e.size);return{backgroundImage:"url(".concat(t,")")}}));return{bgStyle:t}}});n("7e17");uh.render=lh,uh.__scopeId="data-v-0a544b87";var dh=uh,sh=Object(j["defineComponent"])({name:"alpha",components:{Checkboard:dh},emits:["colorChange"],props:{value:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["computed"])((function(){return e.value})),c=Object(j["computed"])((function(){var e=[o.value.r,o.value.g,o.value.b].join(",");return"linear-gradient(to right, rgba(".concat(e,", 0) 0%, rgba(").concat(e,", 1) 100%)")})),l=Object(j["ref"])(),a=function(e){if(e.preventDefault(),l.value){var t,c=l.value.clientWidth,a=l.value.getBoundingClientRect().left+window.pageXOffset,r=e.pageX-a;t=r<0?0:r>c?1:Math.round(100*r/c)/100,o.value.a!==t&&n("colorChange",{r:o.value.r,g:o.value.g,b:o.value.b,a:t})}},r=function e(){window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",e)},i=function(e){a(e),window.addEventListener("mousemove",a),window.addEventListener("mouseup",r)};return Object(j["onUnmounted"])(r),{alphaRef:l,gradientColor:c,handleMouseDown:i,color:o}}});n("f418");sh.render=ch,sh.__scopeId="data-v-6f2cb744";var fh=sh;Object(j["pushScopeId"])("data-v-1766620e");var ph={class:"hue"},mh=Object(j["createElementVNode"])("div",{class:"hue-picker"},null,-1),bh=[mh];function vh(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",ph,[Object(j["createElementVNode"])("div",{class:"hue-container",ref:"hueRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[Object(j["createElementVNode"])("div",{class:"hue-pointer",style:Object(j["normalizeStyle"])({left:e.pointerLeft})},bh,4)],544)])}Object(j["popScopeId"])();var Oh=Object(j["defineComponent"])({name:"hue",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(0),c=Object(j["ref"])(""),l=Object(j["computed"])((function(){var t=H()(e.value).toHsl();return-1!==e.hue&&(t.h=e.hue),t})),a=Object(j["computed"])((function(){return 0===l.value.h&&"right"===c.value?"100%":100*l.value.h/360+"%"}));Object(j["watch"])((function(){return e.value}),(function(){var t=H()(e.value).toHsl(),n=0===t.s?e.hue:t.h;0!==n&&n-o.value>0&&(c.value="right"),0!==n&&n-o.value<0&&(c.value="left"),o.value=n}));var r=Object(j["ref"])(),i=function(t){if(t.preventDefault(),r.value){var o,c,a=r.value.clientWidth,i=r.value.getBoundingClientRect().left+window.pageXOffset,u=t.pageX-i;u<0?o=0:u>a?o=360:(c=100*u/a,o=360*c/100),-1!==e.hue&&l.value.h===o||n("colorChange",{h:o,l:l.value.l,s:l.value.s,a:l.value.a})}},u=function e(){window.removeEventListener("mousemove",i),window.removeEventListener("mouseup",e)},d=function(e){i(e),window.addEventListener("mousemove",i),window.addEventListener("mouseup",u)};return Object(j["onUnmounted"])(u),{hueRef:r,handleMouseDown:d,pointerLeft:a}}});n("468f");Oh.render=vh,Oh.__scopeId="data-v-1766620e";var hh=Oh;Object(j["pushScopeId"])("data-v-8982eb4a");var jh=Object(j["createElementVNode"])("div",{class:"saturation-white"},null,-1),gh=Object(j["createElementVNode"])("div",{class:"saturation-black"},null,-1),yh=Object(j["createElementVNode"])("div",{class:"saturation-circle"},null,-1),Eh=[yh];function Ch(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{class:"saturation",ref:"saturationRef",style:Object(j["normalizeStyle"])({background:e.bgColor}),onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[jh,gh,Object(j["createElementVNode"])("div",{class:"saturation-pointer",style:Object(j["normalizeStyle"])({top:e.pointerTop,left:e.pointerLeft})},Eh,4)],36)}Object(j["popScopeId"])();var xh=Object(j["defineComponent"])({name:"saturation",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["computed"])((function(){var t=H()(e.value).toHsv();return-1!==e.hue&&(t.h=e.hue),t})),c=Object(j["computed"])((function(){return"hsl(".concat(o.value.h,", 100%, 50%)")})),l=Object(j["computed"])((function(){return-100*o.value.v+1+100+"%"})),a=Object(j["computed"])((function(){return 100*o.value.s+"%"})),r=Object(ce["throttle"])((function(e){n("colorChange",e)}),20,{leading:!0,trailing:!1}),i=Object(j["ref"])(),u=function(e){if(e.preventDefault(),i.value){var t=i.value.clientWidth,n=i.value.clientHeight,c=i.value.getBoundingClientRect().left+window.pageXOffset,l=i.value.getBoundingClientRect().top+window.pageYOffset,a=Object(ce["clamp"])(e.pageX-c,0,t),u=Object(ce["clamp"])(e.pageY-l,0,n),d=a/t,s=Object(ce["clamp"])(-u/n+1,0,1);r({h:o.value.h,s:d,v:s,a:o.value.a})}},d=function e(){window.removeEventListener("mousemove",u),window.removeEventListener("mouseup",e)},s=function(e){u(e),window.addEventListener("mousemove",u),window.addEventListener("mouseup",d)};return Object(j["onUnmounted"])(d),{saturationRef:i,bgColor:c,handleMouseDown:s,pointerTop:l,pointerLeft:a}}});n("a46e");xh.render=Ch,xh.__scopeId="data-v-8982eb4a";var kh=xh;Object(j["pushScopeId"])("data-v-00ea8dfc");var Ih={class:"editable-input"},wh=["value"];function Sh(e,t,n,o,c,l){return Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ih,[Object(j["createElementVNode"])("input",{class:"input-content",value:e.val,onInput:t[0]||(t[0]=function(t){return e.handleInput(t)})},null,40,wh)])}Object(j["popScopeId"])();var Nh=Object(j["defineComponent"])({name:"editable-input",emits:["colorChange"],props:{value:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(j["computed"])((function(){var t="";return t=e.value.a<1?H()(e.value).toHex8String().toUpperCase():H()(e.value).toHexString().toUpperCase(),t.replace("#","")})),c=function(e){var t=e.target.value;t.length>=6&&n("colorChange",H()(t).toRgb())};return{val:o,handleInput:c}}});n("1a34");Nh.render=Sh,Nh.__scopeId="data-v-00ea8dfc";var Th=Nh,Lh="RECENT_COLORS",Vh=[["#7f7f7f","#f2f2f2"],["#0d0d0d","#808080"],["#1c1a10","#ddd8c3"],["#0e243d","#c6d9f0"],["#233f5e","#dae5f0"],["#632623","#f2dbdb"],["#4d602c","#eaf1de"],["#3f3150","#e6e0ec"],["#1e5867","#d9eef3"],["#99490f","#fee9da"]],_h=function(e,t,n){for(var o=H()(e).toRgb(),c=H()(t).toRgb(),l=(c.r-o.r)/n,a=(c.g-o.g)/n,r=(c.b-o.b)/n,i=[],u=0;ut&&(c.value=c.value.slice(0,t))}}),300,{trailing:!0});Object(j["onMounted"])((function(){var e=localStorage.getItem(Lh);e&&(c.value=JSON.parse(e))})),Object(j["watch"])(c,(function(){var e=JSON.stringify(c.value);localStorage.setItem(Lh,e)}));var f=function(e){"h"in e?(o.value=e.h,l.value=H()(e).toRgb()):(o.value=H()(e).toHsl().h,l.value=e),s()};return{themeColors:a,standardColors:r,presetColors:i,color:l,hue:o,currentColor:u,changeColor:f,selectPresetColor:d,recentColors:c}}});n("6c3c");Dh.render=$O,Dh.__scopeId="data-v-210672ee";var Mh=Dh;Object(j["pushScopeId"])("data-v-6275c730");var Ah={key:0,class:"fullscreen-spin"};function zh(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("Spin");return n.loading?(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",Ah,[Object(j["createVNode"])(a,{tip:n.tip,size:"large"},null,8,["tip"])])):Object(j["createCommentVNode"])("",!0)}Object(j["popScopeId"])();var Ph={name:"fullscreen-spin",props:{loading:{type:Boolean,default:!1},tip:{type:String,default:""}}};n("3f8e");Ph.render=zh,Ph.__scopeId="data-v-6275c730";var Rh=Ph,Fh={install:function(e){e.component("FileInput",xO),e.component("SvgWrapper",SO),e.component("CheckboxButton",LO),e.component("CheckboxButtonGroup",DO),e.component("ColorPicker",Mh),e.component("FullscreenSpin",Rh)}};function Hh(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("MenuContent");return Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],null,[Object(j["createElementVNode"])("div",{class:"mask",onContextmenu:t[0]||(t[0]=Object(j["withModifiers"])((function(t){return e.removeContextmenu()}),["prevent"])),onMousedown:t[1]||(t[1]=function(t){return e.removeContextmenu()})},null,32),Object(j["createElementVNode"])("div",{class:"contextmenu",style:Object(j["normalizeStyle"])({left:e.style.left+"px",top:e.style.top+"px"}),onContextmenu:t[2]||(t[2]=Object(j["withModifiers"])((function(){}),["prevent"]))},[Object(j["createVNode"])(a,{menus:e.menus,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])],36)],64)}Object(j["pushScopeId"])("data-v-eb1555e8");var Uh={class:"menu-content"},Gh=["onClick"],qh={class:"text"},Xh={key:0,class:"sub-text"};function Wh(e,t,n,o,c,l){var a=Object(j["resolveComponent"])("menu-content",!0);return Object(j["openBlock"])(),Object(j["createElementBlock"])("ul",Uh,[(Object(j["openBlock"])(!0),Object(j["createElementBlock"])(j["Fragment"],null,Object(j["renderList"])(e.menus,(function(t,n){return Object(j["openBlock"])(),Object(j["createElementBlock"])(j["Fragment"],{key:t.text||n},[t.hide?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])("li",{key:0,class:Object(j["normalizeClass"])(["menu-item",{divider:t.divider,disable:t.disable}]),onClick:Object(j["withModifiers"])((function(n){return e.handleClickMenuItem(t)}),["stop"])},[t.divider?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createElementBlock"])("div",{key:0,class:Object(j["normalizeClass"])(["menu-item-content",{"has-children":t.children,"has-handler":t.handler}])},[Object(j["createElementVNode"])("span",qh,Object(j["toDisplayString"])(t.text),1),t.subText&&!t.children?(Object(j["openBlock"])(),Object(j["createElementBlock"])("span",Xh,Object(j["toDisplayString"])(t.subText),1)):Object(j["createCommentVNode"])("",!0),t.children&&t.children.length?(Object(j["openBlock"])(),Object(j["createBlock"])(a,{key:1,class:"sub-menu",menus:t.children,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])):Object(j["createCommentVNode"])("",!0)],2))],10,Gh))],64)})),128))])}Object(j["popScopeId"])();var Yh=Object(j["defineComponent"])({name:"menu-content",props:{menus:{type:Array,required:!0},handleClickMenuItem:{type:Function,required:!0}}});n("0c74");Yh.render=Wh,Yh.__scopeId="data-v-eb1555e8";var Zh=Yh,Jh=Object(j["defineComponent"])({name:"contextmenu",components:{MenuContent:Zh},props:{axis:{type:Object,required:!0},el:{type:Object,required:!0},menus:{type:Array,required:!0},removeContextmenu:{type:Function,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){var t=170,n=30,o=11,c=5,l=e.axis,a=l.x,r=l.y,i=e.menus.filter((function(e){return!(e.divider||e.hide)})).length,u=e.menus.filter((function(e){return e.divider})).length,d=t,s=i*n+u*o+2*c,f=document.body.clientWidth,p=document.body.clientHeight;return{left:f<=a+d?a-d:a,top:p<=r+s?r-s:r}})),n=function(t){t.disable||t.children&&!t.handler||(t.handler&&t.handler(e.el),e.removeContextmenu())};return{style:t,handleClickMenuItem:n}}});n("b8378");Jh.render=Hh;var Kh=Jh,Qh="CTX_CONTEXTMENU_HANDLER",$h=function(e,t,n){t.stopPropagation(),t.preventDefault();var o=n.value(e);if(o){var c=null,l=function t(){c&&(document.body.removeChild(c),c=null),e.classList.remove("contextmenu-active"),document.body.removeEventListener("scroll",t),window.removeEventListener("resize",t)},a={axis:{x:t.x,y:t.y},el:e,menus:o,removeContextmenu:l};c=document.createElement("div");var r=Object(j["createVNode"])(Kh,a,null);Object(j["render"])(r,c),document.body.appendChild(c),e.classList.add("contextmenu-active"),document.body.addEventListener("scroll",l),window.addEventListener("resize",l)}},ej={mounted:function(e,t){e[Qh]=function(n){return $h(e,n,t)},e.addEventListener("contextmenu",e[Qh])},unmounted:function(e){e&&e[Qh]&&(e.removeEventListener("contextmenu",e[Qh]),delete e[Qh])}},tj=ej,nj="CTX_CLICK_OUTSIDE_HANDLER",oj=function(e,t,n){var o=n.value,c=t.composedPath(),l=c?c.indexOf(e)<0:!e.contains(t.target);l&&o(t)},cj={mounted:function(e,t){e[nj]=function(n){return oj(e,n,t)},setTimeout((function(){document.addEventListener("click",e[nj])}),0)},unmounted:function(e){e[nj]&&(document.removeEventListener("click",e[nj]),delete e[nj])}},lj=cj,aj={install:function(e){e.directive("contextmenu",tj),e.directive("click-outside",lj)}},rj=Object(j["createApp"])(qb);rj.component("InputNumber",h["a"]),rj.component("Divider",O["a"]),rj.component("Button",v["a"]),rj.component("ButtonGroup",v["a"].Group),rj.component("Tooltip",b["a"]),rj.component("Popover",m["a"]),rj.component("Slider",p["a"]),rj.component("Select",f["a"]),rj.component("SelectOption",f["a"].Option),rj.component("SelectOptGroup",f["a"].OptGroup),rj.component("Switch",s["a"]),rj.component("Radio",d["a"]),rj.component("RadioGroup",d["a"].Group),rj.component("RadioButton",d["a"].Button),rj.component("Input",u["a"]),rj.component("InputGroup",u["a"].Group),rj.component("Modal",i["a"]),rj.component("Dropdown",r["a"]),rj.component("Menu",a["a"]),rj.component("MenuItem",a["a"].Item),rj.component("Checkbox",l["a"]),rj.component("Drawer",c["a"]),rj.component("Spin",o["a"]),rj.use(gO),rj.use(Fh),rj.use(aj),rj.use(de,ue),rj.mount("#app")},cdff:function(e,t,n){},d4cb:function(e,t,n){},d572:function(e,t,n){},d5a9:function(e,t,n){},d64e:function(e,t,n){},d9a3:function(e,t,n){"use strict";n("0eae")},db88:function(e,t,n){},dbe5:function(e,t,n){},dc02:function(e,t,n){"use strict";n("a25b")},dc5e:function(e,t,n){},dc61:function(e,t,n){},dc83:function(e,t,n){"use strict";n("f6ff")},ddb2:function(e,t,n){},de7c:function(e,t,n){"use strict";n("fad2")},e02b:function(e,t,n){},e09c:function(e,t,n){},e1f8:function(e,t,n){},e202:function(e,t,n){"use strict";n("3040")},e28d:function(e,t,n){"use strict";n("8eb5")},e3dc:function(e,t,n){},e640:function(e,t,n){},e983:function(e,t,n){},e9e5:function(e,t,n){"use strict";n("cac1")},ec3f:function(e,t,n){},eec0:function(e,t,n){"use strict";n("e983")},ef0f:function(e,t,n){"use strict";n("930c")},f076:function(e,t,n){"use strict";n("e09c")},f2d4:function(e,t,n){},f33f:function(e,t,n){"use strict";n("a9ab")},f349:function(e,t,n){"use strict";n("013f")},f354:function(e,t,n){},f418:function(e,t,n){"use strict";n("0f92")},f46c:function(e,t,n){"use strict";n("58d7")},f6ff:function(e,t,n){},f802:function(e,t,n){"use strict";n("84e7")},f8f9:function(e,t,n){},f91d:function(e,t,n){"use strict";n("4c37")},fad2:function(e,t,n){},fb1d:function(e,t,n){"use strict";n("d572")},fc4d:function(e,t,n){},fff2:function(e,t,n){}}); +//# sourceMappingURL=app.682d8803.js.map \ No newline at end of file diff --git a/js/app.682d8803.js.map b/js/app.682d8803.js.map new file mode 100644 index 00000000..64693173 --- /dev/null +++ b/js/app.682d8803.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?356f","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?8515","webpack:///./src/App.vue?25ed","webpack:///./src/components/WritingBoard.vue?f94d","webpack:///./src/components/Contextmenu/MenuContent.vue?1231","webpack:///./src/views/components/element/LineElement/index.vue?e49f","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?cb4a","webpack:///./src/views/components/element/ChartElement/Chart.vue?001f","webpack:///./src/views/components/element/TableElement/StaticTable.vue?e859","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?bd6e","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?a4df","webpack:///./src/components/ColorPicker/EditableInput.vue?fcbe","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?7ab2","webpack:///./src/views/Editor/index.vue?0894","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?185b","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?495c","webpack:///./src/views/Screen/SlideThumbnails.vue?6302","webpack:///./src/views/components/ThumbnailSlide/index.vue?a2a6","webpack:///./src/views/Editor/Toolbar/index.vue?769d","webpack:///./src/views/components/element/TableElement/EditableTable.vue?24e1","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?a2a5","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?18ea","webpack:///./src/views/components/element/TableElement/index.vue?93b4","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?6d48","webpack:///./src/components/FullscreenSpin.vue?15ae","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?0499","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/ColorPicker/Hue.vue?69c4","webpack:///./src/views/components/element/ShapeElement/index.vue?afd1","webpack:///./src/views/Screen/WritingBoardTool.vue?6079","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?9b3b","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?b50b","webpack:///./src/views/Editor/Remark/index.vue?caa4","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?98f4","webpack:///./src/views/components/element/ProsemirrorEditor.vue?6643","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?de61","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?6c64","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?414f","webpack:///./src/views/Editor/Canvas/index.vue?ad26","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?404e","webpack:///./src/components/CheckboxButtonGroup.vue?3a3e","webpack:///./src/components/ColorPicker/index.vue?6fd0","webpack:///./src/views/components/element/ChartElement/index.vue?679f","webpack:///./src/views/components/element/ImageElement/index.vue?85ca","webpack:///./src/views/Screen/ScreenSlide.vue?6e86","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?a022","webpack:///./src/components/CheckboxButton.vue?2273","webpack:///./src/views/Editor/Thumbnails/index.vue?0477","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?a0ca","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?0096","webpack:///./src/components/ColorPicker/Checkboard.vue?ff3f","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?c46e","webpack:///./src/views/Editor/Canvas/Operate/index.vue?40b0","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?ba52","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?bed3","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?ae92","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?fb4e","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?832c","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?f65b","webpack:///./src/views/Screen/ScreenElement.vue?8435","webpack:///./src/components/ColorPicker/Saturation.vue?55e5","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?7f0a","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?a16c","webpack:///./src/views/Screen/index.vue?5c9b","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?8b3d","webpack:///./src/components/Contextmenu/index.vue?06fd","webpack:///./src/views/components/element/TextElement/index.vue?0593","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?04c5","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?152c","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?4b63","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?0953","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?cfc0","webpack:///./src/App.vue","webpack:///./src/store/constants.ts","webpack:///./src/mocks/slides.ts","webpack:///./src/mocks/theme.ts","webpack:///./src/utils/prosemirror/utils.ts","webpack:///./src/store/state.ts","webpack:///./src/mocks/layout.ts","webpack:///./src/store/getters.ts","webpack:///./src/utils/database.ts","webpack:///./src/store/actions.ts","webpack:///./src/configs/font.ts","webpack:///./src/utils/font.ts","webpack:///./src/store/mutations.ts","webpack:///./src/store/index.ts","webpack:///./src/types/edit.ts","webpack:///./src/configs/hotkey.ts","webpack:///./src/views/Editor/index.vue","webpack:///./src/utils/common.ts","webpack:///./src/utils/crypto.ts","webpack:///./src/utils/clipboard.ts","webpack:///./src/utils/element.ts","webpack:///./src/utils/textParser.ts","webpack:///./src/hooks/useHistorySnapshot.ts","webpack:///./src/utils/image.ts","webpack:///./src/configs/canvas.ts","webpack:///./src/hooks/useCreateElement.ts","webpack:///./src/hooks/usePasteTextClipboardData.ts","webpack:///./src/hooks/useSlideHandler.ts","webpack:///./src/hooks/useLockElement.ts","webpack:///./src/hooks/useDeleteElement.ts","webpack:///./src/hooks/useCombineElement.ts","webpack:///./src/hooks/useCopyAndPasteElement.ts","webpack:///./src/hooks/useSelectAllElement.ts","webpack:///./src/hooks/useMoveElement.ts","webpack:///./src/hooks/useOrderElement.ts","webpack:///./src/utils/fullscreen.ts","webpack:///./src/hooks/useScreening.ts","webpack:///./src/hooks/useScaleCanvas.ts","webpack:///./src/hooks/useGlobalHotkey.ts","webpack:///./src/hooks/usePasteEvent.ts","webpack:///./src/views/Editor/EditorHeader/index.vue","webpack:///./src/utils/htmlParser/tags.ts","webpack:///./src/utils/htmlParser/lexer.ts","webpack:///./src/utils/htmlParser/parser.ts","webpack:///./src/utils/htmlParser/format.ts","webpack:///./src/utils/htmlParser/index.ts","webpack:///./src/utils/svgPathParser.ts","webpack:///./src/utils/svg2Base64.ts","webpack:///./src/hooks/useExport.ts","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?98af","webpack:///./src/views/Editor/EditorHeader/index.vue?ac7b","webpack:///./src/views/Editor/EditorHeader/index.vue?0c5a","webpack:///./src/views/Editor/Canvas/index.vue","webpack:///./src/utils/selection.ts","webpack:///./src/views/Editor/Canvas/hooks/useViewportSize.ts","webpack:///./src/views/Editor/Canvas/hooks/useMouseSelection.ts","webpack:///./src/views/Editor/Canvas/hooks/useDropImageOrText.ts","webpack:///./src/views/Editor/Canvas/hooks/useRotateElement.ts","webpack:///./src/configs/element.ts","webpack:///./src/views/Editor/Canvas/hooks/useScaleElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useSelectElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragLineElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useInsertFromCreateSelection.ts","webpack:///./src/views/Editor/Canvas/EditableElement.vue","webpack:///./src/types/slides.ts","webpack:///./src/hooks/useAlignElementToCanvas.ts","webpack:///./src/views/components/element/ImageElement/index.vue","webpack:///./src/views/components/element/hooks/useElementShadow.ts","webpack:///./src/configs/imageClip.ts","webpack:///./src/views/components/element/hooks/useElementFlip.ts","webpack:///./src/views/components/element/ImageElement/useClipImage.ts","webpack:///./src/views/components/element/ImageElement/useFilter.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue","webpack:///./src/views/components/element/hooks/useElementOutline.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?b8d0","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?8b4e","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?b2f6","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?87cf","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?8d2c","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?00b2","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?8881","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?f84d","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?90b3","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?59cd","webpack:///./src/views/components/element/ImageElement/index.vue?7284","webpack:///./src/views/components/element/ImageElement/index.vue?18e8","webpack:///./src/views/components/element/TextElement/index.vue","webpack:///./src/views/components/element/ElementOutline.vue","webpack:///./src/views/components/element/ElementOutline.vue?3f74","webpack:///./src/views/components/element/ElementOutline.vue?8633","webpack:///./src/views/components/element/ProsemirrorEditor.vue","webpack:///./src/utils/emitter.ts","webpack:///./src/utils/prosemirror/plugins/keymap.ts","webpack:///./src/utils/prosemirror/plugins/inputrules.ts","webpack:///./src/utils/prosemirror/plugins/index.ts","webpack:///./src/utils/prosemirror/schema/nodes.ts","webpack:///./src/utils/prosemirror/schema/marks.ts","webpack:///./src/utils/prosemirror/schema/index.ts","webpack:///./src/utils/prosemirror/index.ts","webpack:///./src/utils/prosemirror/commands/setTextAlign.ts","webpack:///./src/utils/prosemirror/commands/toggleList.ts","webpack:///./src/views/components/element/ProsemirrorEditor.vue?8d9a","webpack:///./src/views/components/element/ProsemirrorEditor.vue?e4c0","webpack:///./src/views/components/element/TextElement/index.vue?f1a2","webpack:///./src/views/components/element/TextElement/index.vue?6e22","webpack:///./src/views/components/element/ShapeElement/index.vue","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?2333","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?fbe6","webpack:///./src/views/components/element/ShapeElement/index.vue?c8a7","webpack:///./src/views/components/element/ShapeElement/index.vue?a321","webpack:///./src/views/components/element/LineElement/index.vue","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?9702","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?0e0f","webpack:///./src/views/components/element/LineElement/index.vue?a024","webpack:///./src/views/components/element/LineElement/index.vue?8fb3","webpack:///./src/views/components/element/ChartElement/index.vue","webpack:///./src/views/components/element/ChartElement/Chart.vue","webpack:///./src/views/components/element/ChartElement/Chart.vue?10d5","webpack:///./src/views/components/element/ChartElement/Chart.vue?9c6f","webpack:///./src/views/components/element/ChartElement/index.vue?e4b0","webpack:///./src/views/components/element/ChartElement/index.vue?2e94","webpack:///./src/views/components/element/TableElement/index.vue","webpack:///./src/views/components/element/TableElement/EditableTable.vue","webpack:///./src/views/components/element/TableElement/utils.ts","webpack:///./src/views/components/element/TableElement/useHideCells.ts","webpack:///./src/views/components/element/TableElement/useSubThemeColor.ts","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?aea3","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?e254","webpack:///./src/views/components/element/TableElement/EditableTable.vue?8831","webpack:///./src/views/components/element/TableElement/EditableTable.vue?4197","webpack:///./src/views/components/element/TableElement/index.vue?7604","webpack:///./src/views/components/element/TableElement/index.vue?1057","webpack:///./src/views/Editor/Canvas/EditableElement.vue?381f","webpack:///./src/views/Editor/Canvas/EditableElement.vue?de80","webpack:///./src/views/Editor/Canvas/MouseSelection.vue","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?8b4c","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?8ddc","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue","webpack:///./src/views/Editor/Canvas/GridLines.vue","webpack:///./src/views/Editor/Canvas/GridLines.vue?f828","webpack:///./src/views/Editor/Canvas/GridLines.vue?ee36","webpack:///./src/hooks/useSlideBackgroundStyle.ts","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?0b0c","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?d49d","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?b5a1","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?52c1","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?e8f4","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?464b","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue","webpack:///./src/views/Editor/Canvas/hooks/useCommonOperate.ts","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?93e1","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?06a8","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?e6a8","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?c893","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?d499","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?65a2","webpack:///./src/views/Editor/Canvas/Operate/index.vue","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?f60b","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?6579","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?2229","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?2d82","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?84ca","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?592c","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?c074","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?5f30","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?df88","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?121c","webpack:///./src/views/Editor/Canvas/Operate/ChartElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ChartElementOperate.vue?4d68","webpack:///./src/views/Editor/Canvas/Operate/ChartElementOperate.vue?054d","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?ce2a","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?bf02","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue","webpack:///./src/hooks/useLink.ts","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?f4b2","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?2811","webpack:///./src/views/Editor/Canvas/Operate/index.vue?4919","webpack:///./src/views/Editor/Canvas/Operate/index.vue?3933","webpack:///./src/views/Editor/Canvas/LinkDialog.vue","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?3e63","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?214a","webpack:///./src/views/Editor/Canvas/index.vue?3cd8","webpack:///./src/views/Editor/Canvas/index.vue?2ed7","webpack:///./src/views/Editor/CanvasTool/index.vue","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue","webpack:///./src/configs/shapes.ts","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?ddb3","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?8e86","webpack:///./src/views/Editor/CanvasTool/LinePool.vue","webpack:///./src/configs/lines.ts","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?cda8","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?1c05","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?cfe0","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?067e","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?3234","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?9744","webpack:///./src/views/Editor/CanvasTool/index.vue?0ffc","webpack:///./src/views/Editor/CanvasTool/index.vue?a532","webpack:///./src/views/Editor/Thumbnails/index.vue","webpack:///./src/views/components/ThumbnailSlide/index.vue","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?9dd5","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?32f2","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?ac4f","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?6911","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?c63c","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?a27a","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?24f7","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?3b6b","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?b511","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?aa7f","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue","webpack:///./src/views/components/element/TableElement/StaticTable.vue","webpack:///./src/views/components/element/TableElement/StaticTable.vue?a3ae","webpack:///./src/views/components/element/TableElement/StaticTable.vue?b2de","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?341a","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?a02b","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?2f2d","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?944e","webpack:///./src/views/components/ThumbnailSlide/index.vue?ef6c","webpack:///./src/views/components/ThumbnailSlide/index.vue?8be7","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?9a35","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?4d9d","webpack:///./src/views/Editor/Thumbnails/index.vue?1806","webpack:///./src/views/Editor/Thumbnails/index.vue?ccb9","webpack:///./src/views/Editor/Toolbar/index.vue","webpack:///./src/types/toolbar.ts","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?5b98","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?a078","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?f8b9","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?da97","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?3bfa","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?fb3b","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?d5a3","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?270f","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?655d","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?5a19","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?e3e2","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?4679","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?b46c","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?fd61","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?11b1","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?e0af","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?f4cd","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?e25e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?8789","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?2855","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?ef13","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?b3de","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?ea14","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?0d68","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?7c3a","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?72ab","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?ed09","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?e2ca","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue","webpack:///./src/configs/animation.ts","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?9b7c","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?afe1","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue","webpack:///./src/configs/theme.ts","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?c66e","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?7ed2","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?0069","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?7cbb","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue","webpack:///./src/hooks/useAlignActiveElement.ts","webpack:///./src/hooks/useUniformDisplayElement.ts","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?d8f3","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?e1fe","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue","webpack:///./src/configs/symbol.ts","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?4863","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?be6f","webpack:///./src/views/Editor/Toolbar/index.vue?2e1e","webpack:///./src/views/Editor/Toolbar/index.vue?f66c","webpack:///./src/views/Editor/Remark/index.vue","webpack:///./src/views/Editor/Remark/index.vue?59ff","webpack:///./src/views/Editor/Remark/index.vue?58d2","webpack:///./src/views/Editor/index.vue?a4f9","webpack:///./src/views/Editor/index.vue?894c","webpack:///./src/views/Screen/index.vue","webpack:///./src/views/Screen/ScreenSlide.vue","webpack:///./src/views/Screen/ScreenElement.vue","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?fccb","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?f992","webpack:///./src/views/Screen/ScreenElement.vue?e100","webpack:///./src/views/Screen/ScreenElement.vue?5632","webpack:///./src/views/Screen/ScreenSlide.vue?749f","webpack:///./src/views/Screen/ScreenSlide.vue?67b9","webpack:///./src/views/Screen/SlideThumbnails.vue","webpack:///./src/views/Screen/SlideThumbnails.vue?6af1","webpack:///./src/views/Screen/SlideThumbnails.vue?02c0","webpack:///./src/views/Screen/WritingBoardTool.vue","webpack:///./src/components/WritingBoard.vue","webpack:///./src/components/WritingBoard.vue?419f","webpack:///./src/components/WritingBoard.vue?f8b8","webpack:///./src/views/Screen/WritingBoardTool.vue?b982","webpack:///./src/views/Screen/WritingBoardTool.vue?2e1b","webpack:///./src/views/Screen/index.vue?4bb4","webpack:///./src/views/Screen/index.vue?5535","webpack:///./src/App.vue?1d14","webpack:///./src/App.vue?97f5","webpack:///./src/plugins/icon.ts","webpack:///./src/components/FileInput.vue","webpack:///./src/components/FileInput.vue?c273","webpack:///./src/components/FileInput.vue?ebff","webpack:///./src/components/SvgWrapper.vue","webpack:///./src/components/SvgWrapper.vue?a337","webpack:///./src/components/SvgWrapper.vue?4c4a","webpack:///./src/components/CheckboxButton.vue","webpack:///./src/components/CheckboxButton.vue?a662","webpack:///./src/components/CheckboxButton.vue?e089","webpack:///./src/components/CheckboxButtonGroup.vue","webpack:///./src/components/CheckboxButtonGroup.vue?2771","webpack:///./src/components/CheckboxButtonGroup.vue?3ae2","webpack:///./src/components/ColorPicker/index.vue","webpack:///./src/components/ColorPicker/Alpha.vue","webpack:///./src/components/ColorPicker/Checkboard.vue","webpack:///./src/components/ColorPicker/Checkboard.vue?23ca","webpack:///./src/components/ColorPicker/Checkboard.vue?d504","webpack:///./src/components/ColorPicker/Alpha.vue?103b","webpack:///./src/components/ColorPicker/Alpha.vue?8cd5","webpack:///./src/components/ColorPicker/Hue.vue","webpack:///./src/components/ColorPicker/Hue.vue?8d53","webpack:///./src/components/ColorPicker/Hue.vue?e08e","webpack:///./src/components/ColorPicker/Saturation.vue","webpack:///./src/components/ColorPicker/Saturation.vue?7dac","webpack:///./src/components/ColorPicker/Saturation.vue?b755","webpack:///./src/components/ColorPicker/EditableInput.vue","webpack:///./src/components/ColorPicker/EditableInput.vue?6a4f","webpack:///./src/components/ColorPicker/EditableInput.vue?f9ac","webpack:///./src/components/ColorPicker/index.vue?5336","webpack:///./src/components/ColorPicker/index.vue?4c0a","webpack:///./src/components/FullscreenSpin.vue","webpack:///./src/components/FullscreenSpin.vue?6b0d","webpack:///./src/components/FullscreenSpin.vue?6c95","webpack:///./src/plugins/component.ts","webpack:///./src/components/Contextmenu/index.vue","webpack:///./src/components/Contextmenu/MenuContent.vue","webpack:///./src/components/Contextmenu/MenuContent.vue?e94a","webpack:///./src/components/Contextmenu/MenuContent.vue?bb2c","webpack:///./src/components/Contextmenu/index.vue?93d7","webpack:///./src/components/Contextmenu/index.vue?d39d","webpack:///./src/plugins/directive/contextmenu.ts","webpack:///./src/plugins/directive/clickOutside.ts","webpack:///./src/plugins/directive/index.ts","webpack:///./src/main.ts","webpack:///./src/views/components/element/ElementOutline.vue?a889","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?f5db","webpack:///./src/views/Editor/EditorHeader/index.vue?d286","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?a30e","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?1546","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?67c7","webpack:///./src/views/components/element/ChartElement/Chart.vue?76cd","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?a93a","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?e4d6","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?61ac","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?243e","webpack:///./src/components/FileInput.vue?91ff","webpack:///./src/components/ColorPicker/Alpha.vue?2574","webpack:///./src/views/Editor/Canvas/GridLines.vue?7b03","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?f419","webpack:///./src/views/Editor/CanvasTool/index.vue?8553","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?efe0"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","screening","MutationTypes","ActionTypes","elements","type","left","top","width","height","viewBox","path","fill","fixedRatio","opacity","rotate","flipV","lineHeight","content","defaultFontName","defaultColor","start","end","points","color","style","background","themeColor","fontColor","fontName","backgroundColor","equalNodeType","nodeType","node","Array","isArray","indexOf","findParentNodeClosestToPos","$pos","predicate","depth","pos","before","findParentNode","_ref","$from","findParentNodeOfType","selection","isActiveOfParentNodeType","state","schema","nodes","getMarkAttrs","view","doc","from","nodeAt","lastChild","marks","markType","attr","mark","attrs","getAttrValueInSelection","to","keepChecking","nodesBetween","_defaultAttrs","backcolor","fontsize","fontname","align","defaultAttrs","isBold","isEm","isUnderline","isStrikethrough","isSuperscript","isSubscript","isCode","isBulletList","isOrderedList","isBlockquote","bold","em","underline","strikethrough","superscript","subscript","bulletList","orderedList","blockquote","defaultRichTextAttrs","activeElementIdList","handleElementId","activeGroupElementId","canvasPercentage","canvasScale","thumbnailsFocus","editorAreaFocus","disableHotkeys","showGridLines","creatingElement","availableFonts","toolbarState","viewportRatio","theme","slides","slideIndex","selectedSlidesIndex","snapshotCursor","snapshotLength","ctrlKeyState","shiftKeyState","clipingImageElementId","richTextAttrs","selectedTableCells","isScaling","editingShapeElementId","wordSpace","outline","text","getters","currentSlide","currentSlideAnimations","animations","els","elIds","el","filter","animation","includes","elId","layouts","subColor","isDark","layoutsString","JSON","stringify","replaceAll","parse","activeElementList","element","handleElement","find","canUndo","canRedo","ctrlOrShiftKeyActive","version","stores","snapshots","table","snapshotDB","actions","INIT_SNAPSHOT_DATABASE","commit","orderBy","toArray","lastSnapshot","clear","newFirstSnapshot","index","add","SET_SNAPSHOT_CURSOR","SET_SNAPSHOT_LENGTH","ADD_SNAPSHOT","allKeys","needDeleteKeys","snapshot","snapshotLengthLimit","update","bulkDelete","UN_DO","SET_SLIDES","UPDATE_SLIDE_INDEX","SET_ACTIVE_ELEMENT_ID_LIST","RE_DO","SYS_FONTS","label","WEB_FONTS","isSupportFont","arial","toLowerCase","size","str","canvas","document","createElement","ctx","getContext","textAlign","fillStyle","textBaseline","getDotArray","_fontFamily","clearRect","font","fillText","imageData","getImageData","item","join","mutations","SET_HANDLE_ELEMENT_ID","SET_ACTIVE_GROUP_ELEMENT_ID","SET_CANVAS_PERCENTAGE","percentage","SET_CANVAS_SCALE","scale","SET_THUMBNAILS_FOCUS","isFocus","SET_EDITORAREA_FOCUS","SET_DISABLE_HOTKEYS_STATE","disable","SET_GRID_LINES_STATE","show","SET_CREATING_ELEMENT","SET_AVAILABLE_FONTS","SET_TOOLBAR_STATE","SET_CLIPING_IMAGE_ELEMENT_ID","SET_RICHTEXT_ATTRS","SET_SELECTED_TABLE_CELLS","cells","SET_SCALING_STATE","SET_EDITING_SHAPE_ELEMENT_ID","ellId","SET_THEME","themeProps","SET_VIEWPORT_RATIO","ADD_SLIDE","slide","addIndex","UPDATE_SLIDE","props","DELETE_SLIDE","slideId","slidesId","deleteSlidesIndex","findIndex","newIndex","Math","min","maxIndex","UPDATE_SELECTED_SLIDES_INDEX","ADD_ELEMENT","currentSlideEls","newEls","UPDATE_ELEMENT","elIdList","REMOVE_ELEMENT_PROPS","propName","propsNames","cursor","SET_CTRL_KEY_STATE","isActive","SET_SHIFT_KEY_STATE","SET_SCREENING","ElementOrderCommands","ElementAlignCommands","OperateBorderLines","OperateResizeHandlers","OperateLineHandlers","KEYS","class","remarkHeight","HOTKEY_DOC","children","createRandomCode","len","charset","maxLen","ret","randomIndex","floor","random","digit","CRYPTO_KEY","msg","AES","encrypt","toString","ciphertext","bytes","decrypt","enc","Utf8","Promise","reject","fakeElement","clipboard","action","container","body","on","destroy","appendChild","click","removeChild","readClipboard","navigator","readText","then","clipboardData","pasteExcelClipboardString","lines","split","pop","colCount","getRectRotatedRange","radius","sqrt","pow","auxiliaryAngle","atan","PI","tlbraRadian","trblaRadian","middleLeft","middleTop","xAxis","cos","yAxis","sin","xRange","max","yRange","getRectRotatedOffset","originXRange","originYRange","rotatedXRange","rotatedYRange","offsetX","offsetY","getElementRange","minX","maxX","minY","maxY","getElementListRange","elementList","leftValues","topValues","rightValues","bottomValues","forEach","uniqAlignLines","uniqLines","line","_line","uniqLine","rangeMin","range","rangeMax","groupIdMap","elIdMap","groupId","rgba","toRgb","subRgba1","g","b","a","subRgba2","getLineElementPath","broken","mid","curve","htmlText","replace","paragraphs","string","paragraph","store","addHistorySnapshot","dispatch","trailing","redo","leading","undo","getImageSize","src","img","onload","imgWidth","clientWidth","imgHeight","clientHeight","onerror","getImageDataURL","file","reader","FileReader","addEventListener","readAsDataURL","VIEWPORT_SIZE","useHistorySnapshot","setTimeout","createImageElement","createChartElement","chartType","gridColor","labels","legends","series","createTableElement","row","col","rowCells","colspan","rowspan","DEFAULT_CELL_WIDTH","DEFAULT_CELL_HEIGHT","colWidths","rowHeader","rowFooter","colHeader","colFooter","createTextElement","position","createShapeElement","newElement","special","createLineElement","isBroken","isCurve","useCreateElement","addElementsFromClipboard","currentSlideElementIdList","inCurrentSlide","values","addSlidesFromClipboard","newSlides","createTextElementFromClipboard","pasteTextClipboardData","options","onlySlide","onlyElements","selectedSlides","selectedSlidesId","usePasteTextClipboardData","resetSlides","emptySlide","updateSlideIndex","command","UP","DOWN","copySlide","pasteSlide","catch","err","message","warning","createSlide","createSlideByTemplate","newSlide","copyAndPasteSlide","deleteSlide","targetSlidesId","cutSlide","selectAllSlide","newSelectedSlidesIndex","lockElement","newElementList","lock","unlockElement","deleteElement","deleteAllElements","canCombine","firstGroupId","inSameGroup","every","combineElements","combineElementList","combineElementMaxLevel","_element","combineElementIdList","insertLevel","uncombineElements","hasElementInGroup","some","handleElementIdList","useDeleteElement","copyElement","cutElement","pasteElement","quickCopyElement","selectAllElement","unlockedElements","newActiveElementIdList","moveElement","step","move","LEFT","RIGHT","getCombineElementLevelRange","minLevel","maxLevel","moveUpElement","copyOfElementList","nextElement","movedElementList","nextCombineElementList","level","movedElement","moveDownElement","prevElement","prevCombineElementList","moveTopElement","moveBottomElement","unshift","orderElement","TOP","BOTTOM","enterFullscreen","docElm","documentElement","requestFullscreen","mozRequestFullScreen","webkitRequestFullScreen","exitFullscreen","mozCancelFullScreen","webkitCancelFullScreen","isFullscreen","mozFullScreen","webkitIsFullScreen","webkitFullScreen","enterScreening","enterScreeningFromStart","exitScreening","scaleCanvas","setCanvasPercentage","ctrlKeyActive","shiftKeyActive","useSlideHandler","useCombineElement","useLockElement","useCopyAndPasteElement","useSelectAllElement","useMoveElement","useOrderElement","useScreening","useScaleCanvas","copy","cut","quickCopy","selectAll","combine","uncombine","remove","order","tabActiveElement","currentIndex","nextIndex","nextElementId","firstElement","keydownListener","ctrlKey","shiftKey","altKey","metaKey","ctrlOrMetaKeyActive","toUpperCase","F","preventDefault","C","X","D","Z","Y","A","L","G","B","DELETE","BACKSPACE","ENTER","MINUS","EQUAL","DIGIT_0","TAB","keyupListener","removeEventListener","pasteImageFile","imageFile","dataURL","pasteListener","clipboardDataItems","items","clipboardDataFirstItem","kind","getAsFile","getAsString","href","target","trigger","overlay","exportJSON","exportPPTX","toggleGridLines","goIssues","hotkeyDrawerVisible","mouseLeaveDelay","title","placement","visible","loading","exporting","tip","childlessTags","closingTags","closingTagAncestorBreakers","li","dt","dd","tbody","thead","tfoot","tr","td","voidTags","jumpPosition","movePositopn","findTextEnd","isEnd","textEnd","char","charAt","test","lexText","tokens","lexComment","contentEnd","commentEnd","lexTagName","isTagChar","tagName","quote","wordBegin","words","isQuoteEnd","isTagEnd","isWordEnd","isQuoteStart","word","isNotPair","secondWord","newWord","thirdWord","safeTagName","nextTag","tagState","lexTag","textStart","secondChar","tagStartClose","close","firstChar","tagEndClose","isComment","safeTag","lexer","root","stack","tagParents","parentTagName","rewindStack","newLength","token","tagToken","shouldRewind","isClosingTag","shouldRewindToAutoClose","previousIndex","attributes","tagEndToken","_token","elementNode","hasChildren","innerState","splitHead","sep","idx","unquote","car","formatAttributes","attribute","parts","trim","format","typeMap","1","2","4","8","16","32","64","128","256","512","pathData","commands","x","y","relative","x1","y1","x2","y2","lastPoint","cubicBezierPoints","px","py","cx","cy","rx","rX","ry","rY","xAxisRotation","xRot","largeArcFlag","lArcFlag","sweepFlag","cbPoint","characters","PREFIX","utf8Encode","utftext","charCodeAt","String","fromCharCode","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","isNaN","svg2Base64","XMLS","XMLSerializer","svg","serializeToString","blob","Blob","formatColor","_color","alpha","getAlpha","setAlpha","toHexString","formatHTML","html","ast","slices","obj","baseStyleObj","lastSlice","breakLine","styleObj","styleAttr","styleArr","styleItem","_key","_value","fontSize","parseInt","highlight","strike","italic","fontFace","formatPoints","point","undefined","moveTo","pptx","pptxSlide","addSlide","image","transparency","gradientColor","color1","color2","mix","textProps","w","h","valign","charSpacing","lineSpacingMultiple","shadow","blur","offset","v","angle","link","hyperlink","url","addText","flipH","clip","shape","rounding","addImage","svgRef","querySelector","base64SVG","fillColor","dashType","addShape","beginArrowType","endArrowType","chartData","chartColors","analogous","supplement","legend","showLegend","legendPos","legendColor","legendFontSize","ChartType","bar","barDir","horizontalBars","showArea","area","showLine","scatter","lineSize","lineSmooth","donut","doughnut","holeSize","pie","addChart","hiddenCells","rowData","cell","tableData","subThemeColors","_row","cellOptions","colW","border","pt","addTable","writeFile","fileName","error","hotkeys","hotkey","setup","render","__scopeId","components","HotkeyDoc","useExport","open","ref","$event","handleMousewheelCanvas","handleClickBlankArea","insertElementFromCreateSelection","alignmentLines","axis","scaleMultiElement","elementInfo","isSelected","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement","mouseSelectionState","isShow","quadrant","elementIndex","selectElement","linkDialogVisible","footer","centered","destroyOnClose","contextmenus","removeEditorAreaFocus","removeAllRanges","getSelection","canvasRef","viewportLeft","viewportTop","setViewportPosition","canvasWidth","canvasHeight","viewportActualWidth","viewportActualHeight","viewportStyles","resizeObserver","ResizeObserver","observe","unobserve","viewportRef","updateMouseSelection","isMouseDown","viewportRect","getBoundingClientRect","minSelectionRange","startPageX","pageX","startPageY","pageY","onmousemove","currentPageX","currentPageY","offsetWidth","offsetHeight","abs","onmouseup","inRangeElementList","mouseSelectionLeft","mouseSelectionTop","mouseSelectionWidth","mouseSelectionHeight","isInclude","inRangeElement","groupElementList","groupElement","inRangeElementIdList","elementRef","handleDrop","dataTransfer","dataTransferItem","ondragleave","ondrop","ondragenter","ondragover","getAngleFromCoordinate","radian","atan2","elOriginRotate","elLeft","elTop","elWidth","elHeight","centerX","centerY","mouseX","mouseY","sorptionRange","ELEMENT_TYPE_ZH","chart","MIN_SIZE","getRotateElementPoints","taRadian","raRadian","halfWidth","halfHeight","leftTopPoint","topPoint","rightTopPoint","rightPoint","rightBottomPoint","bottomPoint","leftBottomPoint","leftPoint","direction","oppositeMap","RIGHT_BOTTOM","LEFT_BOTTOM","LEFT_TOP","RIGHT_TOP","elOriginLeft","elOriginTop","elOriginWidth","elOriginHeight","elRotate","rotateRadian","aspectRatio","minSize","getSizeWithinRange","baseLeft","baseTop","horizontalLines","verticalLines","oppositePoint","edgeWidth","edgeHeight","right","bottom","topLine","bottomLine","leftLine","rightLine","edgeTopLine","edgeBottomLine","edgeHorizontalCenterLine","edgeLeftLine","edgeRightLine","edgeVerticalCenterLine","alignedAdsorption","currentX","currentY","_alignmentLines","isVerticalAdsorbed","isHorizontalAdsorbed","correctionVal","revisedX","revisedY","currentPoints","currentOppositePoint","currentBaseLeft","currentBaseTop","moveX","moveY","operateWidth","operateHeight","originElementList","currentMinX","currentMaxX","currentMinY","currentMaxY","currentOppositeWidth","currentOppositeHeight","widthScale","heightScale","originElement","originEl","startMove","newActiveIdList","groupMembersId","dragElement","originActiveElementList","isMisoperation","horizontalCenterLine","verticalCenterLine","targetMinX","targetMaxX","targetMinY","targetMaxY","targetLeft","targetTop","targetCenterX","targetCenterY","adsorptionPoints","startX","startY","endX","endY","midX","midY","START","adsorptionPoint","END","newEl","MID","formatCreateSelection","selectionData","formatCreateSelectionForLine","_start","_end","currentElementComponent","ElementTypes","alignElementToCanvas","viewportWidth","viewportHeight","CENTER","VERTICAL","HORIZONTAL","isCliping","clipData","clipPath","clipShape","handleClip","handleSelectElement","draggable","alt","ClipPathTypes","ClipPaths","shadowStyle","flipStyle","CLIPPATHS","rect","RECT","rect2","POLYGON","createPath","rect3","roundRect","ellipse","ELLIPSE","triangle","triangle2","triangle3","rhombus","hexagon","pentagon","parallelogram","parallelogram2","trapezoid","trapezoid2","imgPosition","filters","overflow","vector-effect","stroke-linecap","stroke-miterlimit","stroke-linejoin","stroke","outlineColor","stroke-width","outlineWidth","stroke-dasharray","outlineStyle","Number","required","default","useElementOutline","Function","ImageRectOutline","ImageEllipseOutline","ImagePolygonOutline","useClipImage","shape-rendering","clipWrapperPositionStyle","bottomImgPositionStyle","topImgPositionStyle","topImgWrapperPositionStyle","moveClipRange","scaleClipRange","emits","emit","isSettingClipRange","currentRange","getClipDataTransformInfo","topImgWrapperPosition","bottomWidth","bottomHeight","topLeft","topTop","topWidth","topHeight","initClipPosition","clipedEmitData","keyboardListener","updateRange","retPosition","bottomPosition","originPositopn","minWidth","minHeight","targetWidth","targetHeight","ImageOutline","ImageClipHandler","useElementShadow","useElementFlip","useFilter","stopPropagation","originClip","_props","elementId","editable","updateContent","EmitterEvents","cmd","strong","list_item","match","childCount","rules","ordered_list","bullet_list","code_block","_orderedList","group","_bulletList","parseDOM","tag","getAttrs","dom","getAttribute","toDOM","excludes","forecolor","inline","schemaNodes","schemaMarks","htmlString","parser","DOMParser","parseFromString","firstElementChild","fromSchema","plugins","emitter","mitt","alignment","listItem","tasks","allowedNodeTypes","Set","has","task","setNodeMarkup","alignmentCommand","setSelection","isList","listType","itemType","$to","blockRange","parentList","validContent","Boolean","autoFocus","editorView","editorViewRef","handleInput","innerHTML","handleFocus","handleBlur","handleClick","handleKeydown","textContent","hasFocus","replaceRangeWith","setProps","handleDOMEvents","focus","keydown","execCommand","payload","empty","addMark","removeMark","insertText","RICH_TEXT_COMMAND","off","ElementOutline","ProsemirrorEditor","canMove","realHeightCache","updateTextElementHeight","entries","contentRect","realHeight","enterEditing","gradient","transform","updateText","gradientTransform","stop-color","GradientDefs","exitEditing","defaultText","_text","svgWidth","svgHeight","baseSize","lineDashArray","marker-start","marker-end","markerUnits","orient","markerWidth","markerHeight","refX","refY","pathMap","dot","arrow","rotateMap","LinePointMarker","openDataEditor","slideScale","themeColors","chartRef","chartHeight","getDataAndOptions","propsOptopns","renderChart","updateChart","colors","updateTheme","setProperty","updateGridColor","Chart","OPEN_CHART_DATA_EDITOR","updateTableCells","widths","updateColWidths","updateSelectedCells","startEdit","totalWidth","dragLinePosition","handleMousedownColHandler","subThemeColor","colSizeList","span","tableCells","rowIndex","colIndex","data-cell-index","handleCellMousedown","handleCellMouseenter","activedCell","contenteditable","insertExcelData","formatText","hideCells","getTextStyle","textDecoration","fontWeight","fontStyle","fontFamily","immediate","textareaRef","onpaste","excelData","CustomTextarea","isStartSelect","startCell","endCell","set","newData","useSubThemeColor","reduce","removeSelectedCells","useHideCells","selectedCells","oldValue","selectedRange","handleMouseup","button","isHideCell","selectCol","maxRow","selectRow","maxCol","deleteRow","_tableCells","targetCells","hideCellsPos","deleteCol","insertRow","insertCol","fillTable","rowCount","defaultCell","newRows","mergeCells","splitCells","originWidth","round","clearSelectedCellText","tabActiveCell","getNextCell","nextRow","nextCol","nextCell","textRef","fillRowCount","fillColCount","getEffectiveTableCells","effectiveTableCells","_rowCells","checkCanDeleteRowOrCol","canDeleteRow","canDeleteCol","checkCanMergeOrSplit","isMultiSelected","targetCell","canMerge","canSplit","cellIndex","dataset","handler","divider","EditableTable","updateTableElementHeight","elementTypeMap","IMAGE","ImageElement","TEXT","TextElement","SHAPE","ShapeElement","LINE","LineElement","CHART","ChartElement","TABLE","TableElement","useAlignElementToCanvas","subText","hide","validator","backgroundStyle","bgColor","colorList","mostReadable","includeFallbackColors","toRgbString","gridSize","getPath","imageSize","gradientRotate","gradientType","backgroundImage","backgroundRepeat","backgroundSize","GridLines","useSlideBackgroundStyle","sizeStyle","createSelection","lineData","selectionRef","absX","absY","isOpposite","endPageX","endPageY","defaultSize","_startX","_startY","_endX","_endY","borderLines","disableResize","resizeHandlers","textElementResizeHandlers","T","R","rotateClassName","prefix","isWide","ResizeHandler","BorderLine","localActiveElementList","useCommonOperate","setRange","currentOperateComponent","elementIndexInAnimation","scaleWidth","inheritAttrs","RotateHandler","scaleHeight","handlers","midHandler","removeLink","setLink","linkRegExp","useLink","LinkHandler","ImageElementOperate","TextElementOperate","ShapeElementOperate","LineElementOperate","ChartElementOperate","TableElementOperate","placeholder","save","success","EditableElement","MouseSelection","ViewportBackground","AlignmentLine","ElementCreateSelection","MultiSelectOperate","Operate","LinkDialog","setLocalElementList","useViewportSize","useDropImageOrText","useMouseSelection","useDragElement","useDragLineElement","useSelectElement","useScaleElement","useRotateElement","throttleScaleCanvas","throttleUpdateSlideIndex","deltaY","useInsertFromCreateSelection","mouseEnterDelay","drawText","files","insertImageElement","shapePoolVisible","drawShape","linePoolVisible","drawLine","chartPoolVisible","tableGeneratorVisible","canvasScalePercentage","shapeList","selectShape","SHAPE_LIST","lineList","selectLine","LINE_LIST","chartList","selectChart","isCustom","customRow","customCol","insertCustomTable","handleClickTable","ShapePool","LinePool","ChartPool","TableGenerator","setThumbnailsFocus","presetLayoutPopoverVisible","modelValue","scroll","scrollSensitivity","setData","handleDragEnd","itemKey","handleClickSlideThumbnail","fillDigit","contextmenusThumbnailItem","contextmenusThumbnails","strokeWidth","_chartType","_options","StaticTable","BaseImageElement","BaseTextElement","BaseShapeElement","BaseLineElement","BaseChartElement","BaseTableElement","ThumbnailElement","selectSlideTemplate","ThumbnailSlide","Draggable","LayoutPool","changSlideIndex","minIndex","eventData","oldIndex","_slides","_slide","currentTabs","tab","setToolbarState","currentPanelComponent","ToolbarStates","SYMBOL","EL_ANIMATION","EL_STYLE","EL_POSITION","SLIDE_DESIGN","SLIDE_ANIMATION","MULTI_POSITION","presetStyles","emitBatchRichTextCommand","compact","emitRichTextCommand","suffixIcon","webFonts","fontSizeOptions","updateFill","checked","button-style","updateLineHeight","lineHeightOptions","updateWordSpace","wordSpaceOptions","updateOpacity","deep","fixed","hasOutline","toggleOutline","updateOutline","ColorButton","outlineProps","hasShadow","toggleShadow","updateShadow","shadowProps","ElementOpacity","ElementShadow","clipImage","clipPanelVisible","shapeClipPathOptions","presetImageClip","ratioClipOptions","ratio","filterOptions","updateFilter","replaceImage","resetImage","setBackgroundImage","updateFlip","flipProps","defaultFilters","unit","ElementFlip","originFilters","getImageElementDataBeforeClip","imgLeft","imgTop","originClipRange","originHeight","originLeft","originTop","imageRatio","distance","fillType","updateFillType","updateGradient","showTextTools","updateTextAlign","gradientProps","updateLine","chartDataEditorVisible","updateOptions","updateLegend","deleteThemeColor","addThemeColor","closable","updateData","rangeLines","resizablePointStyle","changeSelectRange","autocomplete","focusCell","handlePaste","closeEditor","getTableData","CELL_WIDTH","CELL_HEIGHT","tempRangeSize","initData","_data","inputRef","moveNextRow","labelsItem","labelInputRef","legendsItem","seriesItem","valueInputRef","ChartDataEditor","_lineSmooth","_showLine","_showArea","_horizontalBars","_donut","optionProps","newOptions","textAttrs","updateTextAttrs","minRowCount","setTableRow","minColCount","setTableCol","hasTheme","toggleTheme","updateTextAttrState","selectedCell","textAttrProp","themeProp","currentTheme","newTableCells","newColSizeList","panelMap","TextStylePanel","ImageStylePanel","ShapeStylePanel","LineStylePanel","ChartStylePanel","TableStylePanel","updateLeft","updateTop","updateWidth","updateFixedRatio","disabled","updateHeight","updateRotate45","updateRotate","_rotate","animationPoolVisible","hoverPreviewAnimation","addAnimation","handleElementAnimationName","handleElementAnimation","duration","updateElementAnimationDuration","animationSequence","elType","animationType","runAnimation","deleteAnimation","ANIMATIONS","defaultDuration","animationTypes","elRef","animationName","classList","handleAnimationEnd","removeProperty","once","updateElementAnimation","animationItem","updateBackgroundType","updateBackground","uploadBackgroundImage","applyBackgroundAllSlide","updateViewportRatio","showPresetThemes","togglePresetThemesVisible","themes","applyThemeAllSlide","PRESET_THEMES","newBackground","currentTurningMode","updateTurningMode","applyAllSlide","turningMode","alignElement","displayItemCount","uniformHorizontalDisplay","uniformVerticalDisplay","alignActiveElement","groupElementRangeMap","activeElement","groupElements","horizontalCenter","center","verticalCenter","count","groupIdList","copyOfActiveElementList","singleElemetList","groupList","groupEl","formatedGroupList","groupItem","list","sort","itemA","itemB","sortedElementData","firstItem","lastPos","lastWidth","currentPos","currentWidth","sortedItem","totalHeight","lastHeight","currentHeight","useAlignActiveElement","useUniformDisplayElement","symbolPoolList","selectedSymbolKey","symbolPool","selectSymbol","SYMBOL_LIST","selectedSymbol","elementTabs","slideTabs","multiSelectTabs","currentTabsValue","ElementStylePanel","ElementPositionPanel","ElementAnimationPanel","SlideDesignPanel","SlideAnimationPanel","MultiPositionPanel","SymbolPanel","resize","remark","newHeight","EditorHeader","Canvas","CanvasTool","Thumbnails","Toolbar","Remark","useGlobalHotkey","usePasteEvent","mousewheelListener","touchStartListener","touchEndListener","animationIndex","slideThumbnailModelVisible","turnSlideToIndex","writingBoardToolVisible","execPrev","execNext","showPageNumber","openLink","ScreenChartElement","needWaitAnimation","ScreenElement","writingBoardColor","blackboard","model","writingBoardModel","changePen","changeEraser","clearCanvas","writingBoardColors","changeColor","closeWritingBoard","handleMousedown","handleMousemove","mouseInCanvas","penSize","rubberSize","writingBoardRef","lastTime","lastLineWidth","mouse","updateMousePosition","initCanvas","lineCap","lineJoin","draw","posX","posY","lineWidth","lastPosX","lastPosY","strokeStyle","beginPath","lineTo","closePath","erase","sinRadius","cosRadius","rectPoint1","rectPoint2","rectPoint3","rectPoint4","arc","restore","getDistance","getLineWidth","maxV","minV","maxWidth","handleMove","time","Date","getTime","MouseEvent","changedTouches","TouchEvent","WritingBoard","ScreenSlide","SlideThumbnails","WritingBoardTool","slideWidth","slideHeight","setSlideContentSize","winWidth","winHeight","windowResizeListener","autoPlayTimer","closeAutoPlay","clearInterval","throttleMassage","lastIndex","autoPlay","setInterval","touchInfo","SPACE","turnPrevSlide","turnNextSlide","Editor","Screen","onbeforeunload","install","app","component","accept","handleChange","xmlns","xmlnsXlink","hue","currentColor","selectPresetColor","presetColors","standardColors","recentColors","handleMouseDown","bgStyle","checkboardCache","renderCheckboard","white","grey","fillRect","translate","toDataURL","getCheckboard","checkboard","Checkboard","rgbaStr","alphaRef","containerWidth","xOffset","pageXOffset","unbindEventListeners","pointerLeft","oldHue","pullDirection","hsla","toHsl","hueRef","percent","hsva","toHsv","pointerTop","emitChangeEvent","param","saturationRef","containerHeight","yOffset","pageYOffset","saturation","bright","val","_hex","toHex8String","RECENT_COLORS","presetColorConfig","startColor","endColor","_startColor","_endColor","rStep","gStep","bStep","gradientColorArr","Alpha","Hue","Saturation","EditableInput","rgbaString","colorString","updateRecentColorsCache","maxLength","recentColorsCache","localStorage","getItem","setItem","FileInput","SvgWrapper","CheckboxButton","CheckboxButtonGroup","ColorPicker","FullscreenSpin","removeContextmenu","menus","handleClickMenuItem","menu","MenuContent","MENU_WIDTH","MENU_HEIGHT","DIVIDER_HEIGHT","PADDING","menuCount","dividerCount","menuWidth","menuHeight","screenWidth","screenHeight","CTX_CONTEXTMENU_HANDLER","event","binding","vm","Contextmenu","ContextmenuDirective","mounted","unmounted","CTX_CLICK_OUTSIDE_HANDLER","clickListener","composedPath","isClickOutside","contains","ClickOutsideDirective","directive","App","Group","Option","OptGroup","Button","Item","use","mount"],"mappings":"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IACTC,KAAM,uDAER,CACED,QAAS,IACTC,KAAM,0DAER,CACED,QAAS,IACTC,KAAM,uEAER,CACED,QAAS,IACTC,KAAM,kEAER,CACED,QAAS,IACTC,KAAM,+CAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,oHAER,CACED,QAAS,IACTC,KAAM,6DAER,CACED,QAAS,IACTC,KAAM,wEAER,CACED,QAAS,IACTC,KAAM,iEAER,CACED,QAAS,IACTC,KAAM,oHAER,CACED,QAAS,IACTC,KAAM,sHAER,CACED,QAAS,IACTC,KAAM,uEAER,CACED,QAAS,IACTC,KAAM,oIAER,CACED,QAAS,IACTC,KAAM,qEAER,CACED,QAAS,IACTC,KAAM,6CAER,CACED,QAAS,IACTC,KAAM,2EAER,CACED,QAAS,IACTC,KAAM,6HAKZ,CACEN,KAAM,KACNqQ,SAAU,CACR,CACEhQ,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,6EAER,CACED,QAAS,IACTC,KAAM,qGAER,CACED,QAAS,IACTC,KAAM,qGAER,CACED,QAAS,IACTC,KAAM,qOAER,CACED,QAAS,IACTC,KAAM,uFAER,CACED,QAAS,IACTC,KAAM,sFAER,CACED,QAAS,IACTC,KAAM,8GAER,CACED,QAAS,IACTC,KAAM,8GAER,CACED,QAAS,IACTC,KAAM,8DAER,CACED,QAAS,IACTC,KAAM,gEAER,CACED,QAAS,IACTC,KAAM,6DAER,CACED,QAAS,IACTC,KAAM,gEAER,CACED,QAAS,IACTC,KAAM,4CAER,CACED,QAAS,IACTC,KAAM,iDAER,CACED,QAAS,IACTC,KAAM,6DAER,CACED,QAAS,IACTC,KAAM,kEAER,CACED,QAAS,IACTC,KAAM,6FAER,CACED,QAAS,IACTC,KAAM,yFAER,CACED,QAAS,IACTC,KAAM,0HAER,CACED,QAAS,KACTC,KAAM,8IACN0Z,SAAS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","file":"js/app.682d8803.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseShapeElement.vue?vue&type=style&index=0&id=3ad164fa&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ResizeHandler.vue?vue&type=style&index=0&id=680e5917&lang=scss&scoped=true\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&id=0af9d1a8&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WritingBoard.vue?vue&type=style&index=0&id=7ff9fa00&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=1d4bfa98&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TextStylePanel.vue?vue&type=style&index=0&id=ee8b653e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Chart.vue?vue&type=style&index=0&id=ee28fd7e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./StaticTable.vue?vue&type=style&index=0&id=ccbfe89e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ColorButton.vue?vue&type=style&index=0&id=39016b60&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageEllipseOutline.vue?vue&type=style&index=0&id=6655f0f0&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EditableInput.vue?vue&type=style&index=0&id=00ea8dfc&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SymbolPanel.vue?vue&type=style&index=0&id=48704658&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=55178b6a&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MouseSelection.vue?vue&type=style&index=0&id=1619c258&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LayoutPool.vue?vue&type=style&index=0&id=775c4b6c&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SlideThumbnails.vue?vue&type=style&index=0&id=26398174&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=4e59015e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=5e3834d5&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EditableTable.vue?vue&type=style&index=0&id=5cfa4d0e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementAnimationPanel.vue?vue&type=style&index=0&id=34dfe3c2&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MultiPositionPanel.vue?vue&type=style&index=0&id=88d13362&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=10d814ca&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TableStylePanel.vue?vue&type=style&index=0&id=db114f8c&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./FullscreenSpin.vue?vue&type=style&index=0&id=6275c730&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageClipHandler.vue?vue&type=style&index=0&id=9e358576&lang=scss&scoped=true\"","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=5a268d2a&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WritingBoardTool.vue?vue&type=style&index=0&id=7a2e5324&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LinkDialog.vue?vue&type=style&index=0&id=02317299&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseTextElement.vue?vue&type=style&index=0&id=2ec235c4&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=21516eb9&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ProsemirrorEditor.vue?vue&type=style&index=0&id=3100bb88&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImagePolygonOutline.vue?vue&type=style&index=0&id=8d85e878&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementOpacity.vue?vue&type=style&index=0&id=b884607e&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=b77b4458&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=4edd93c1&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ChartDataEditor.vue?vue&type=style&index=0&id=9a62f784&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CheckboxButtonGroup.vue?vue&type=style&index=0&id=7dafd0a9&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=210672ee&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=138d40b9&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=03ead815&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ScreenSlide.vue?vue&type=style&index=0&id=a094625a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageStylePanel.vue?vue&type=style&index=0&id=6bffd840&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CheckboxButton.vue?vue&type=style&index=0&id=7cae2b90&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=38044c5a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementOutline.vue?vue&type=style&index=0&id=2d8ce9c0&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ShapeStylePanel.vue?vue&type=style&index=0&id=a62499e8&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LinePool.vue?vue&type=style&index=0&id=6302e570&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=46d959c4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./RotateHandler.vue?vue&type=style&index=0&id=9a549510&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ScreenChartElement.vue?vue&type=style&index=0&id=85370c80&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LineStylePanel.vue?vue&type=style&index=0&id=65b24fb3&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AlignmentLine.vue?vue&type=style&index=0&id=2d3eddf5&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseLineElement.vue?vue&type=style&index=0&id=448a7ca0&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementPositionPanel.vue?vue&type=style&index=0&id=655fed44&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ScreenElement.vue?vue&type=style&index=0&id=11126f7d&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseImageElement.vue?vue&type=style&index=0&id=b0d4d1b2&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageRectOutline.vue?vue&type=style&index=0&id=4126ab7f&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=42d1fb1f&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseChartElement.vue?vue&type=style&index=0&id=2d25f60a&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=83da70aa&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=3c0937ee&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BaseTableElement.vue?vue&type=style&index=0&id=dea016ac&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementShadow.vue?vue&type=style&index=0&id=5cca6474&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SlideDesignPanel.vue?vue&type=style&index=0&id=7c0de296&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./SlideAnimationPanel.vue?vue&type=style&index=0&id=647e2618&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementFlip.vue?vue&type=style&index=0&id=6b6342c9&lang=scss&scoped=true\"","\n\n\n\n","export const enum MutationTypes {\r\n\r\n // editor\r\n SET_ACTIVE_ELEMENT_ID_LIST = 'setActiveElementIdList',\r\n SET_HANDLE_ELEMENT_ID = 'setHandleElementId',\r\n SET_ACTIVE_GROUP_ELEMENT_ID = 'setActiveGroupElementId',\r\n SET_CANVAS_PERCENTAGE = 'setCanvasPercentage',\r\n SET_CANVAS_SCALE = 'setCanvasScale',\r\n SET_THUMBNAILS_FOCUS = 'setThumbnailsFocus',\r\n SET_EDITORAREA_FOCUS = 'setEditorAreaFocus',\r\n SET_DISABLE_HOTKEYS_STATE = 'setDisableHotkeysState',\r\n SET_GRID_LINES_STATE = 'setGridLinesState',\r\n SET_CREATING_ELEMENT = 'setCreatingElement',\r\n SET_AVAILABLE_FONTS = 'setAvailableFonts',\r\n SET_TOOLBAR_STATE = 'setToolbarState',\r\n SET_CLIPING_IMAGE_ELEMENT_ID = 'setClipingImageElementId',\r\n SET_RICHTEXT_ATTRS = 'setRichTextAttrs',\r\n SET_SELECTED_TABLE_CELLS = 'setSelectedTableCells',\r\n SET_SCALING_STATE = 'setScalingState',\r\n SET_EDITING_SHAPE_ELEMENT_ID = 'setEditingShapeElementId',\r\n\r\n // slides\r\n SET_THEME = 'setTheme',\r\n SET_VIEWPORT_RATIO = 'setViewportRatio',\r\n SET_SLIDES = 'setSlides',\r\n ADD_SLIDE = 'addSlide',\r\n UPDATE_SLIDE = 'updateSlide',\r\n DELETE_SLIDE = 'deleteSlide',\r\n UPDATE_SLIDE_INDEX = 'updateSlideIndex',\r\n UPDATE_SELECTED_SLIDES_INDEX = 'updateSelectedSlidesIndex',\r\n ADD_ELEMENT = 'addElement',\r\n UPDATE_ELEMENT = 'updateElement',\r\n REMOVE_ELEMENT_PROPS = 'removeElementProps',\r\n\r\n // snapshot\r\n SET_SNAPSHOT_CURSOR = 'setSnapshotCursor',\r\n SET_SNAPSHOT_LENGTH = 'setSnapshotLength',\r\n\r\n // keyboard\r\n SET_CTRL_KEY_STATE = 'setCtrlKeyState',\r\n SET_SHIFT_KEY_STATE = 'setShiftKeyState',\r\n\r\n // screen\r\n SET_SCREENING = 'setScreening',\r\n}\r\n\r\nexport const enum ActionTypes {\r\n INIT_SNAPSHOT_DATABASE = 'initSnapshotDatabase',\r\n ADD_SNAPSHOT = 'addSnapshot',\r\n UN_DO = 'undo',\r\n RE_DO = 'redo',\r\n}","import { Slide } from '@/types/slides'\n\nexport const slides: Slide[] = [\n {\n id: 'test123456',\n elements: [\n {\n type: 'shape',\n id: '4cbRxp',\n left: 0,\n top: 200,\n width: 546,\n height: 362.5,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '#5b9bd5',\n fixedRatio: false,\n opacity: 0.7,\n rotate: 0\n },\n {\n type: 'shape',\n id: 'ookHrf',\n left: 0,\n top: 0,\n width: 300,\n height: 320,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '#5b9bd5',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'idn7Mx',\n left: 355,\n top: 65.25,\n width: 585,\n height: 188,\n lineHeight: 1.2,\n content: '

PPTIST

',\n rotate: 0,\n defaultFontName: 'Microsoft Yahei',\n defaultColor: '#333'\n },\n {\n type: 'text',\n id: '7stmVP',\n left: 355,\n top: 253.25,\n width: 585,\n height: 56,\n content: '

基于 Vue 3.x + TypeScript 的在线演示文稿应用

',\n rotate: 0,\n defaultFontName: 'Microsoft Yahei',\n defaultColor: '#333'\n },\n {\n type: 'line',\n id: 'FnpZs4',\n left: 361,\n top: 238,\n start: [0, 0],\n end: [549, 0],\n points: ['', ''],\n color: '#5b9bd5',\n style: 'solid',\n width: 2,\n },\n ],\n background: {\n type: 'solid',\n color: '#ffffff',\n },\n }\n]","import { SlideTheme } from '@/types/slides'\n\nexport const theme: SlideTheme = {\n themeColor: '#5b9bd5',\n fontColor: '#333',\n fontName: 'Microsoft Yahei',\n backgroundColor: '#fff',\n}","import { Node, NodeType, ResolvedPos, Mark } from 'prosemirror-model'\nimport { EditorState, Selection } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\n\nconst equalNodeType = (nodeType: NodeType, node: Node) => {\n return Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1 || node.type === nodeType\n}\n\nconst findParentNodeClosestToPos = ($pos: ResolvedPos, predicate: (node: Node) => boolean) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i)\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node,\n }\n }\n }\n}\n\nexport const findParentNode = (predicate: (node: Node) => boolean) => {\n return (_ref: Selection) => findParentNodeClosestToPos(_ref.$from, predicate)\n}\n\nexport const findParentNodeOfType = (nodeType: NodeType) => {\n return (selection: Selection) => {\n return findParentNode((node: Node) => {\n return equalNodeType(nodeType, node)\n })(selection)\n }\n}\n\nexport const isActiveOfParentNodeType = (nodeType: string, state: EditorState) => {\n const node = state.schema.nodes[nodeType]\n return !!findParentNodeOfType(node)(state.selection)\n}\n\nexport const getMarkAttrs = (view: EditorView) => {\n const { selection, doc } = view.state\n const { from } = selection\n\n let node = doc.nodeAt(from) || doc.nodeAt(from - 1)\n if (node?.lastChild) node = node.lastChild\n\n return node?.marks || []\n}\n\nexport const getAttrValue = (marks: Mark[], markType: string, attr: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType && mark.attrs[attr]) return mark.attrs[attr]\n }\n return null\n}\n\nexport const isActiveMark = (marks: Mark[], markType: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType) return true\n }\n return false\n}\n\nexport const getAttrValueInSelection = (view: EditorView, attr: string) => {\n const { selection, doc } = view.state\n const { from, to } = selection\n\n let keepChecking = true\n let value = ''\n doc.nodesBetween(from, to, node => {\n if (keepChecking && node.attrs[attr]) {\n keepChecking = false\n value = node.attrs[attr]\n }\n return keepChecking\n })\n return value\n}\n\ninterface DefaultAttrs {\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: string;\n}\nconst _defaultAttrs: DefaultAttrs = {\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n align: 'left',\n}\nexport const getTextAttrs = (view: EditorView, defaultAttrs: DefaultAttrs = {}) => {\n defaultAttrs = { ..._defaultAttrs, ...defaultAttrs }\n\n const marks = getMarkAttrs(view)\n\n const isBold = isActiveMark(marks, 'strong')\n const isEm = isActiveMark(marks, 'em')\n const isUnderline = isActiveMark(marks, 'underline')\n const isStrikethrough = isActiveMark(marks, 'strikethrough')\n const isSuperscript = isActiveMark(marks, 'superscript')\n const isSubscript = isActiveMark(marks, 'subscript')\n const isCode = isActiveMark(marks, 'code')\n const color = getAttrValue(marks, 'forecolor', 'color') || defaultAttrs.color\n const backcolor = getAttrValue(marks, 'backcolor', 'backcolor') || defaultAttrs.backcolor\n const fontsize = getAttrValue(marks, 'fontsize', 'fontsize') || defaultAttrs.fontsize\n const fontname = getAttrValue(marks, 'fontname', 'fontname') || defaultAttrs.fontname\n const align = getAttrValueInSelection(view, 'align') || defaultAttrs.align\n const isBulletList = isActiveOfParentNodeType('bullet_list', view.state)\n const isOrderedList = isActiveOfParentNodeType('ordered_list', view.state)\n const isBlockquote = isActiveOfParentNodeType('blockquote', view.state)\n\n return {\n bold: isBold,\n em: isEm,\n underline: isUnderline,\n strikethrough: isStrikethrough,\n superscript: isSuperscript,\n subscript: isSubscript,\n code: isCode,\n color: color,\n backcolor: backcolor,\n fontsize: fontsize,\n fontname: fontname,\n align: align,\n bulletList: isBulletList,\n orderedList: isOrderedList,\n blockquote: isBlockquote,\n }\n}\n\nexport type TextAttrs = ReturnType\n\nexport const defaultRichTextAttrs: TextAttrs = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n superscript: false,\n subscript: false,\n code: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n align: 'left',\n bulletList: false,\n orderedList: false,\n blockquote: false,\n}","import { Slide, SlideTheme } from '@/types/slides'\r\nimport { CreatingElement } from '@/types/edit'\r\nimport { ToolbarState } from '@/types/toolbar'\r\nimport { slides } from '@/mocks/slides'\r\nimport { theme } from '@/mocks/theme'\r\nimport { SYS_FONTS } from '@/configs/font'\r\nimport { TextAttrs, defaultRichTextAttrs } from '@/utils/prosemirror/utils'\r\n\r\nexport interface State {\r\n activeElementIdList: string[];\r\n handleElementId: string;\r\n activeGroupElementId: string;\r\n canvasPercentage: number;\r\n canvasScale: number;\r\n thumbnailsFocus: boolean;\r\n editorAreaFocus: boolean;\r\n disableHotkeys: boolean;\r\n showGridLines: boolean;\r\n creatingElement: CreatingElement | null;\r\n availableFonts: typeof SYS_FONTS;\r\n toolbarState: ToolbarState;\r\n theme: SlideTheme;\r\n viewportRatio: number;\r\n slides: Slide[];\r\n slideIndex: number;\r\n selectedSlidesIndex: number[];\r\n snapshotCursor: number;\r\n snapshotLength: number;\r\n ctrlKeyState: boolean;\r\n shiftKeyState: boolean;\r\n screening: boolean;\r\n clipingImageElementId: string;\r\n richTextAttrs: TextAttrs;\r\n selectedTableCells: string[];\r\n isScaling: boolean;\r\n editingShapeElementId: string;\r\n}\r\n\r\nexport const state: State = {\r\n activeElementIdList: [], // 被选中的元素ID集合,包含 handleElementId\r\n handleElementId: '', // 正在操作的元素ID\r\n activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID\r\n canvasPercentage: 90, // 画布可视区域百分比\r\n canvasScale: 1, // 画布缩放比例(基于宽度1000px)\r\n thumbnailsFocus: false, // 左侧导航缩略图区域聚焦\r\n editorAreaFocus: false, // 编辑区域聚焦\r\n disableHotkeys: false, // 禁用快捷键\r\n showGridLines: false, // 显示网格线\r\n creatingElement: null, // 正在插入的元素信息,需要绘制插入的元素需要(文字、形状、线条)\r\n availableFonts: [], // 当前环境可用字体\r\n toolbarState: 'slideDesign', // 右侧工具栏状态\r\n viewportRatio: 0.5625, // 可是区域比例,默认16:9\r\n theme: theme, // 主题样式\r\n slides: slides, // 幻灯片页面数据\r\n slideIndex: 0, // 当前页面索引\r\n selectedSlidesIndex: [], // 当前被选中的页面索引集合\r\n snapshotCursor: -1, // 历史快照指针\r\n snapshotLength: 0, // 历史快照长度\r\n ctrlKeyState: false, // ctrl键按下状态\r\n shiftKeyState: false, // shift键按下状态\r\n screening: false, // 是否进入放映状态\r\n clipingImageElementId: '', // 当前正在裁剪的图片ID \r\n richTextAttrs: defaultRichTextAttrs, // 富文本状态\r\n selectedTableCells: [], // 选中的表格单元格\r\n isScaling: false, // 正在进行元素缩放\r\n editingShapeElementId: '', // 当前正处在编辑文字状态的形状ID \r\n}","/* eslint-disable max-lines */\n\nimport { Slide } from '@/types/slides'\n\nexport const layouts: Slide[] = [\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: '4cbRxp',\n left: 0,\n top: 200,\n width: 546,\n height: 362.5,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n opacity: 0.7,\n rotate: 0\n },\n {\n type: 'shape',\n id: 'ookHrf',\n left: 0,\n top: 0,\n width: 300,\n height: 320,\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'AkIh3E',\n left: 355,\n top: 95.11111111111111,\n width: 585,\n height: 116,\n lineHeight: 1.2,\n content: '

输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n wordSpace: 6\n },\n {\n type: 'text',\n id: '7stmVP',\n left: 355,\n top: 253.25,\n width: 585,\n height: 56,\n content: '

请在此处输入副标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n },\n {\n type: 'line',\n id: 'FnpZs4',\n left: 361,\n top: 238,\n start: [0, 0],\n end: [549, 0],\n points: ['', ''],\n color: '{{themeColor}}',\n style: 'solid',\n width: 2,\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'ptNnUJ',\n left: 145,\n top: 148,\n width: 711,\n height: 77,\n lineHeight: 1.2,\n content: '

在此处添加标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: 'mRHvQN',\n left: 207.50000000000003,\n top: 249.84259259259264,\n width: 585,\n height: 56,\n content: '

在此处添加副标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'line',\n id: '7CQDwc',\n left: 323.09259259259267,\n top: 238.33333333333334,\n start: [0, 0],\n end: [354.8148148148148, 0],\n points: ['', ''],\n color: '{{themeColor}}',\n style: 'solid',\n width: 4\n }, \n {\n type: 'shape',\n id: '09wqWw',\n left: -27.648148148148138,\n top: 432.73148148148147,\n width: 1056.2962962962963,\n height: 162.96296296296296,\n viewBox: 200,\n path: 'M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'vSheCJ',\n left: 183.5185185185185,\n top: 175.5092592592593,\n width: 605.1851851851851,\n height: 185.18518518518516,\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0\n }, \n {\n type: 'shape',\n id: 'Mpwv7x',\n left: 211.29629629629628,\n top: 201.80555555555557,\n width: 605.1851851851851,\n height: 185.18518518518516,\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n opacity: 0.7\n }, \n {\n type: 'text',\n id: 'WQOTAp',\n left: 304.9074074074074,\n top: 198.10185185185182,\n width: 417.9629629629629,\n height: 140,\n content: '

感谢观看

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n wordSpace: 5\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'MZVO1kkj',\n elements: [\n {\n type: 'shape',\n id: 'cql0h8',\n left: 0,\n top: 0,\n width: 352.59259259259255,\n height: 562.5,\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0\n },\n {\n type: 'shape',\n id: '_RTaF4',\n left: 171.4814814814814,\n top: 100.13888888888887,\n width: 362.22222222222223,\n height: 362.22222222222223,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: 'rgba(255,255,255,0)',\n fixedRatio: false,\n rotate: 0,\n outline: {\n width: 10,\n color: '{{backgroundColor}}',\n style: 'solid'\n }\n },\n {\n type: 'shape',\n id: 'UZfo8N',\n left: 216.66666666666663,\n top: 145.32407407407408,\n width: 271.85185185185185,\n height: 271.85185185185185,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{backgroundColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

01

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n },\n {\n type: 'text',\n id: 'ysqtBg',\n left: 561.4814814814814,\n top: 100.1388888888889,\n width: 359.25925925925924,\n height: 80,\n content: '

在此处输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n },\n {\n type: 'text',\n id: 'lXsoHa',\n left: 572.5925925925925,\n top: 202.3611111111111,\n width: 257.77777777777777,\n height: 260,\n content: '
  1. 在此处输入内容

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n lineHeight: 2,\n fill: '{{subColor}}'\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'EBBnTr',\n left: 360.5996472663139,\n top: 141.8496472663139,\n width: 278.80070546737215,\n height: 278.80070546737215,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 0,\n color: '{{backgroundColor}}',\n style: 'solid'\n }\n }, \n {\n type: 'shape',\n id: 'gDIWDH',\n left: 456.4373897707231,\n top: 98.287037037037,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

1

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'shape',\n id: 'DUWT7E',\n left: 317.037037037037,\n top: 237.68738977072314,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

4

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'shape',\n id: 'pbhn38',\n left: 456.43738977072303,\n top: 377.08774250440916,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

3

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'shape',\n id: 'CvMKrO',\n left: 595.8377425044091,\n top: 237.6873897707231,\n width: 87.12522045855381,\n height: 87.12522045855381,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: true,\n rotate: 0,\n outline: {\n width: 4,\n color: '{{backgroundColor}}',\n style: 'solid'\n },\n text: {\n content: '

2

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'adudHB',\n left: 402.962962962963,\n top: 39.39814814814815,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: '9UpDwg',\n left: 402.962962962963,\n top: 473.1018518518518,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: 'GERdpB',\n left: 111.48148148148151,\n top: 256.25,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'text',\n id: 'G5qoho',\n left: 691.1111111111111,\n top: 256.25,\n width: 194.07407407407408,\n height: 50,\n content: '

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }, \n {\n type: 'shape',\n id: 'vdZcI6',\n left: 415.18518518518516,\n top: 196.4351851851852,\n width: 169.62962962962962,\n height: 169.62962962962962,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{backgroundColor}}',\n fixedRatio: false,\n rotate: 0\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'tYUmrx',\n left: 156.66666666666683,\n top: 149.02777777777771,\n width: 264.4444444444445,\n height: 264.4444444444445,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

01

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n },\n {\n type: 'shape',\n id: '0GVHf8',\n left: 342.2222222222223,\n top: 217.17592592592587,\n width: 128.14814814814812,\n height: 128.14814814814812,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{backgroundColor}}',\n fixedRatio: false,\n rotate: 0\n },\n {\n type: 'text',\n id: 'BO33Sv',\n left: 378.8888888888889,\n top: 235.24999999999994,\n width: 464.4444444444444,\n height: 92,\n content: '

在此处添加标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'Hj7ttp',\n left: 69.35185185185185,\n top: 49.21759259259262,\n width: 420,\n height: 63,\n lineHeight: 1.2,\n content: '

1.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'FmKMNB',\n left: 69.35185185185185,\n top: 129.28240740740745,\n width: 420,\n height: 384,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'rI7ZeO',\n left: 510.64814814814815,\n top: 49.21759259259262,\n width: 420,\n height: 63,\n lineHeight: 1.2,\n content: '

2.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'KspwGc',\n left: 510.64814814814815,\n top: 129.28240740740745,\n width: 420,\n height: 384,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'Rx63Jo',\n left: 69.35185185185179,\n top: 51.71759259259262,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

1.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'ulyuzE',\n left: 69.35185185185179,\n top: 131.78240740740745,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'kr35Ca',\n left: 510.6481481481481,\n top: 51.71759259259262,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

2.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'BNQSpC',\n left: 510.6481481481481,\n top: 131.78240740740745,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'Vr38Nu',\n left: 69.35185185185185,\n top: 301.71759259259255,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

3.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'IwKRSu',\n left: 69.35185185185185,\n top: 381.7824074074074,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: '0Opr1v',\n left: 510.64814814814815,\n top: 301.71759259259255,\n width: 420,\n height: 58,\n lineHeight: 1.2,\n content: '

4.请输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: '4L9Uzz',\n left: 510.64814814814815,\n top: 381.7824074074074,\n width: 420,\n height: 129,\n content: '

在此处输入内容

在此处输入内容

在此处输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'text',\n id: 'GdEGxg',\n left: 134.53703703703704,\n top: 127.25,\n width: 152.77777777777777,\n height: 308,\n lineHeight: 1.8,\n content: '

请在此处输入标题

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n wordSpace: 8,\n fill: '{{themeColor}}',\n },\n {\n type: 'text',\n id: 'y5sAfw',\n left: 332.8703703703704,\n top: 127.25,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容1

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'VeuocM',\n left: 332.8703703703704,\n top: 212.0648148148148,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容2

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'RyFWQe',\n left: 332.8703703703704,\n top: 296.8796296296296,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容3

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n {\n type: 'text',\n id: 'Q56viI',\n left: 332.8703703703704,\n top: 381.69444444444446,\n width: 532.5925925925926,\n height: 50,\n content: '

请在此处输入内容4

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}',\n },\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: 'SUWirT',\n left: 73.8888888888889,\n top: 64.21296296296302,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

1

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'YjzN1M',\n left: 148.70370370370372,\n top: 64.21296296296302,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'fS09I7',\n left: 527.5925925925926,\n top: 64.21296296296302,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

2

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'qCnfB1',\n left: 602.4074074074074,\n top: 64.21296296296302,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n },\n {\n type: 'shape',\n id: 'difAAT',\n left: 73.8888888888889,\n top: 221.25000000000003,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

3

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: 'EUlvMo',\n left: 148.70370370370372,\n top: 221.25000000000003,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'US_9jB',\n left: 527.5925925925926,\n top: 221.25000000000003,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

4

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: '243MnQ',\n left: 602.4074074074074,\n top: 221.25000000000003,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'Y_KUj0',\n left: 73.8888888888889,\n top: 378.287037037037,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

5

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: '9GglMe',\n left: 148.70370370370372,\n top: 378.287037037037,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }, \n {\n type: 'shape',\n id: 'eSInje',\n left: 527.5925925925926,\n top: 378.287037037037,\n width: 49.629629629629626,\n height: 49.629629629629626,\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n rotate: 0,\n text: {\n content: '

6

',\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n align: 'middle'\n }\n }, \n {\n type: 'text',\n id: '0S3yUg',\n left: 602.4074074074074,\n top: 378.287037037037,\n width: 323.7037037037037,\n height: 120,\n content: '

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n]","import { GetterTree } from 'vuex'\r\nimport tinycolor from 'tinycolor2'\r\nimport { State } from './state'\r\nimport { layouts } from '@/mocks/layout'\r\n\r\nexport const getters: GetterTree = {\r\n currentSlide(state) {\r\n return state.slides[state.slideIndex] || null\r\n },\r\n\r\n currentSlideAnimations(state) {\r\n const currentSlide = state.slides[state.slideIndex]\r\n if (!currentSlide) return null\r\n const animations = currentSlide.animations\r\n if (!animations) return null\r\n\r\n const els = currentSlide.elements\r\n const elIds = els.map(el => el.id)\r\n return animations.filter(animation => elIds.includes(animation.elId))\r\n },\r\n\r\n layouts(state) {\r\n const {\r\n themeColor,\r\n fontColor,\r\n fontName,\r\n backgroundColor,\r\n } = state.theme\r\n\r\n const subColor = tinycolor(fontColor).isDark() ? 'rgba(230, 230, 230, 0.5)' : 'rgba(180, 180, 180, 0.5)'\r\n\r\n const layoutsString = JSON.stringify(layouts)\r\n .replaceAll('{{themeColor}}', themeColor)\r\n .replaceAll('{{fontColor}}', fontColor)\r\n .replaceAll('{{fontName}}', fontName)\r\n .replaceAll('{{backgroundColor}}', backgroundColor)\r\n .replaceAll('{{subColor}}', subColor)\r\n \r\n return JSON.parse(layoutsString)\r\n },\r\n\r\n activeElementList(state) {\r\n const currentSlide = state.slides[state.slideIndex]\r\n if (!currentSlide || !currentSlide.elements) return []\r\n return currentSlide.elements.filter(element => state.activeElementIdList.includes(element.id))\r\n },\r\n\r\n handleElement(state) {\r\n const currentSlide = state.slides[state.slideIndex]\r\n if (!currentSlide || !currentSlide.elements) return null\r\n return currentSlide.elements.find(element => state.handleElementId === element.id) || null\r\n },\r\n\r\n canUndo(state) {\r\n return state.snapshotCursor > 0\r\n },\r\n\r\n canRedo(state) {\r\n return state.snapshotCursor < state.snapshotLength - 1\r\n },\r\n\r\n ctrlOrShiftKeyActive(state) {\r\n return state.ctrlKeyState || state.shiftKeyState\r\n },\r\n}","import Dexie from 'dexie'\nimport { Slide } from '@/types/slides'\n\nexport interface Snapshot {\n index: number;\n slides: Slide[];\n}\n\nclass SnapshotDatabase extends Dexie {\n public snapshots: Dexie.Table\n\n public constructor() {\n super('SnapshotDatabase')\n this.version(1).stores({\n snapshots: '++id'\n })\n this.snapshots = this.table('snapshots')\n }\n}\n\nexport const snapshotDB = new SnapshotDatabase()","import { ActionTree } from 'vuex'\nimport { IndexableTypeArray } from 'dexie'\nimport { State } from './state'\nimport { ActionTypes, MutationTypes } from './constants'\nimport { snapshotDB, Snapshot } from '@/utils/database'\n\nexport const actions: ActionTree = {\n async [ActionTypes.INIT_SNAPSHOT_DATABASE]({ commit, state }) {\n const snapshots: Snapshot[] = await snapshotDB.snapshots.orderBy('id').toArray()\n const lastSnapshot = snapshots.slice(-1)[0]\n\n if (lastSnapshot) {\n snapshotDB.snapshots.clear()\n }\n\n const newFirstSnapshot = {\n index: state.slideIndex,\n slides: state.slides,\n }\n await snapshotDB.snapshots.add(newFirstSnapshot)\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, 0)\n commit(MutationTypes.SET_SNAPSHOT_LENGTH, 1)\n },\n\n async [ActionTypes.ADD_SNAPSHOT]({ state, commit }) {\n\n // 获取当前indexeddb中全部快照的ID\n const allKeys = await snapshotDB.snapshots.orderBy('id').keys()\n\n let needDeleteKeys: IndexableTypeArray = []\n\n // 记录需要删除的快照ID\n // 若当前快照指针不处在最后一位,那么再添加快照时,应该将当前指针位置后面的快照全部删除,对应的实际情况是:\n // 用户撤回多次后,再进行操作(添加快照),此时原先被撤销的快照都应该被删除\n if (state.snapshotCursor >= 0 && state.snapshotCursor < allKeys.length - 1) {\n needDeleteKeys = allKeys.slice(state.snapshotCursor + 1)\n }\n\n // 添加新快照\n const snapshot = {\n index: state.slideIndex,\n slides: state.slides,\n }\n await snapshotDB.snapshots.add(snapshot)\n\n // 计算当前快照长度,用于设置快照指针的位置(此时指针应该处在最后一位,即:快照长度 - 1)\n let snapshotLength = allKeys.length - needDeleteKeys.length + 1\n\n // 快照数量超过长度限制时,应该将头部多余的快照删除\n const snapshotLengthLimit = 20\n if (snapshotLength > snapshotLengthLimit) {\n needDeleteKeys.push(allKeys[0])\n snapshotLength--\n }\n\n // 快照数大于1时,需要保证撤回操作后维持页面焦点不变:也就是将倒数第二个快照对应的索引设置为当前页的索引\n // https://github.com/pipipi-pikachu/PPTist/issues/27\n if (snapshotLength >= 2) {\n snapshotDB.snapshots.update(allKeys[snapshotLength - 2] as number, { index: state.slideIndex })\n }\n\n await snapshotDB.snapshots.bulkDelete(needDeleteKeys)\n\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, snapshotLength - 1)\n commit(MutationTypes.SET_SNAPSHOT_LENGTH, snapshotLength)\n },\n\n async [ActionTypes.UN_DO]({ state, commit }) {\n if (state.snapshotCursor <= 0) return\n\n const snapshotCursor = state.snapshotCursor - 1\n const snapshots: Snapshot[] = await snapshotDB.snapshots.orderBy('id').toArray()\n const snapshot = snapshots[snapshotCursor]\n const { index, slides } = snapshot\n\n const slideIndex = index > slides.length - 1 ? slides.length - 1 : index\n\n commit(MutationTypes.SET_SLIDES, slides)\n commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex)\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, snapshotCursor)\n commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n },\n\n async [ActionTypes.RE_DO]({ state, commit }) {\n if (state.snapshotCursor >= state.snapshotLength - 1) return\n\n const snapshotCursor = state.snapshotCursor + 1\n const snapshots: Snapshot[] = await snapshotDB.snapshots.orderBy('id').toArray()\n const snapshot = snapshots[snapshotCursor]\n const { index, slides } = snapshot\n\n const slideIndex = index > slides.length - 1 ? slides.length - 1 : index\n\n commit(MutationTypes.SET_SLIDES, slides)\n commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex)\n commit(MutationTypes.SET_SNAPSHOT_CURSOR, snapshotCursor)\n commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n },\n}","export const SYS_FONTS = [\n { label: 'Arial', value: 'Arial' },\n { label: '微软雅黑', value: 'Microsoft Yahei' },\n { label: '宋体', value: 'SimSun' },\n { label: '黑体', value: 'SimHei' },\n { label: '楷体', value: 'KaiTi' },\n { label: '新宋体', value: 'NSimSun' },\n { label: '仿宋', value: 'FangSong' },\n { label: '苹方', value: 'PingFang SC' },\n { label: '华文黑体', value: 'STHeiti' },\n { label: '华文楷体', value: 'STKaiti' },\n { label: '华文宋体', value: 'STSong' },\n { label: '华文仿宋', value: 'STFangSong' },\n { label: '华文中宋', value: 'STZhongSong' },\n { label: '华文琥珀', value: 'STHupo' },\n { label: '华文新魏', value: 'STXinwei' },\n { label: '华文隶书', value: 'STLiti' },\n { label: '华文行楷', value: 'STXingkai' },\n { label: '冬青黑体', value: 'Hiragino Sans GB' },\n { label: '兰亭黑', value: 'Lantinghei SC' },\n { label: '偏偏体', value: 'Hanzipen SC' },\n { label: '手札体', value: 'Hannotate SC' },\n { label: '宋体', value: 'Songti SC' },\n { label: '娃娃体', value: 'Wawati SC' },\n { label: '行楷', value: 'Xingkai SC' },\n { label: '圆体', value: 'Yuanti SC' },\n { label: '华文细黑', value: 'STXihei' },\n { label: '幼圆', value: 'YouYuan' },\n { label: '隶书', value: 'LiSu' },\n]\n\nexport const WEB_FONTS = [\n { label: '仓耳小丸子', value: '仓耳小丸子' },\n { label: '优设标题黑', value: '优设标题黑' },\n { label: '峰广明锐体', value: '峰广明锐体' },\n { label: '摄图摩登小方体', value: '摄图摩登小方体' },\n { label: '站酷快乐体', value: '站酷快乐体' },\n { label: '字制区喜脉体', value: '字制区喜脉体' },\n { label: '素材集市康康体', value: '素材集市康康体' },\n { label: '联盟起艺卢帅正锐黑体', value: '联盟起艺卢帅正锐黑体' },\n { label: '素材集市酷方体', value: '素材集市酷方体' },\n { label: '途牛类圆体', value: '途牛类圆体' },\n { label: '锐字真言体', value: '锐字真言体' },\n { label: '阿里汉仪智能黑体', value: '阿里汉仪智能黑体' },\n]","/**\n * 判断操作系统是否存在某字体\n * @param fontName 字体名\n */\nexport const isSupportFont = (fontName: string) => {\n if (typeof fontName !== 'string') return false\n\n const arial = 'Arial'\n if (fontName.toLowerCase() === arial.toLowerCase()) return true\n\n const size = 100\n const width = 100\n const height = 100\n const str = 'a'\n\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n\n if (!ctx) return false\n\n canvas.width = width\n canvas.height = height\n ctx.textAlign = 'center'\n ctx.fillStyle = 'black'\n ctx.textBaseline = 'middle'\n\n const getDotArray = (_fontFamily: string) => {\n ctx.clearRect(0, 0, width, height)\n ctx.font = `${size}px ${_fontFamily}, ${arial}`\n ctx.fillText(str, width / 2, height / 2)\n const imageData = ctx.getImageData(0, 0, width, height).data\n return [].slice.call(imageData).filter(item => item !== 0)\n }\n\n return getDotArray(arial).join('') !== getDotArray(fontName).join('')\n}","import { MutationTree } from 'vuex'\r\nimport { omit } from 'lodash'\r\nimport { MutationTypes } from './constants'\r\nimport { State } from './state'\r\nimport { Slide, PPTElement, SlideTheme } from '@/types/slides'\r\nimport { CreatingElement } from '@/types/edit'\r\nimport { SYS_FONTS } from '@/configs/font'\r\nimport { isSupportFont } from '@/utils/font'\r\nimport { ToolbarState } from '@/types/toolbar'\r\nimport { TextAttrs } from '@/utils/prosemirror/utils'\r\n\r\ninterface RemoveElementPropData {\r\n id: string;\r\n propName: string | string[];\r\n}\r\n\r\ninterface UpdateElementData {\r\n id: string | string[];\r\n props: Partial;\r\n}\r\n\r\nexport const mutations: MutationTree = {\r\n\r\n // editor\r\n\r\n [MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST](state, activeElementIdList: string[]) {\r\n if (activeElementIdList.length === 1) state.handleElementId = activeElementIdList[0]\r\n else state.handleElementId = ''\r\n \r\n state.activeElementIdList = activeElementIdList\r\n },\r\n \r\n [MutationTypes.SET_HANDLE_ELEMENT_ID](state, handleElementId: string) {\r\n state.handleElementId = handleElementId\r\n },\r\n \r\n [MutationTypes.SET_ACTIVE_GROUP_ELEMENT_ID](state, activeGroupElementId: string) {\r\n state.activeGroupElementId = activeGroupElementId\r\n },\r\n\r\n [MutationTypes.SET_CANVAS_PERCENTAGE](state, percentage: number) {\r\n state.canvasPercentage = percentage\r\n },\r\n\r\n [MutationTypes.SET_CANVAS_SCALE](state, scale: number) {\r\n state.canvasScale = scale\r\n },\r\n\r\n [MutationTypes.SET_THUMBNAILS_FOCUS](state, isFocus: boolean) {\r\n state.thumbnailsFocus = isFocus\r\n },\r\n\r\n [MutationTypes.SET_EDITORAREA_FOCUS](state, isFocus: boolean) {\r\n state.editorAreaFocus = isFocus\r\n },\r\n\r\n [MutationTypes.SET_DISABLE_HOTKEYS_STATE](state, disable: boolean) {\r\n state.disableHotkeys = disable\r\n },\r\n\r\n [MutationTypes.SET_GRID_LINES_STATE](state, show: boolean) {\r\n state.showGridLines = show\r\n },\r\n\r\n [MutationTypes.SET_CREATING_ELEMENT](state, element: CreatingElement | null) {\r\n state.creatingElement = element\r\n },\r\n\r\n [MutationTypes.SET_AVAILABLE_FONTS](state) {\r\n state.availableFonts = SYS_FONTS.filter(font => isSupportFont(font.value))\r\n },\r\n\r\n [MutationTypes.SET_TOOLBAR_STATE](state, toolbarState: ToolbarState) {\r\n state.toolbarState = toolbarState\r\n },\r\n\r\n [MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID](state, elId: string) {\r\n state.clipingImageElementId = elId\r\n },\r\n\r\n [MutationTypes.SET_RICHTEXT_ATTRS](state, attrs: TextAttrs) {\r\n state.richTextAttrs = attrs\r\n },\r\n\r\n [MutationTypes.SET_SELECTED_TABLE_CELLS](state, cells: string[]) {\r\n state.selectedTableCells = cells\r\n },\r\n\r\n [MutationTypes.SET_SCALING_STATE](state, isScaling: boolean) {\r\n state.isScaling = isScaling\r\n },\r\n\r\n [MutationTypes.SET_EDITING_SHAPE_ELEMENT_ID](state, ellId: string) {\r\n state.editingShapeElementId = ellId\r\n },\r\n\r\n // slides\r\n\r\n [MutationTypes.SET_THEME](state, themeProps: Partial) {\r\n state.theme = { ...state.theme, ...themeProps }\r\n },\r\n\r\n [MutationTypes.SET_VIEWPORT_RATIO](state, viewportRatio: number) {\r\n state.viewportRatio = viewportRatio\r\n },\r\n\r\n [MutationTypes.SET_SLIDES](state, slides: Slide[]) {\r\n state.slides = slides\r\n },\r\n\r\n [MutationTypes.ADD_SLIDE](state, slide: Slide | Slide[]) {\r\n const slides = Array.isArray(slide) ? slide : [slide]\r\n const addIndex = state.slideIndex + 1\r\n state.slides.splice(addIndex, 0, ...slides)\r\n state.slideIndex = addIndex\r\n },\r\n\r\n [MutationTypes.UPDATE_SLIDE](state, props: Partial) {\r\n const slideIndex = state.slideIndex\r\n state.slides[slideIndex] = { ...state.slides[slideIndex], ...props }\r\n },\r\n\r\n [MutationTypes.DELETE_SLIDE](state, slideId: string | string[]) {\r\n const slidesId = Array.isArray(slideId) ? slideId : [slideId]\r\n\r\n const deleteSlidesIndex = []\r\n for (let i = 0; i < slidesId.length; i++) {\r\n const index = state.slides.findIndex(item => item.id === slidesId[i])\r\n deleteSlidesIndex.push(index)\r\n }\r\n let newIndex = Math.min(...deleteSlidesIndex)\r\n\r\n const maxIndex = state.slides.length - slidesId.length - 1\r\n if (newIndex > maxIndex) newIndex = maxIndex\r\n\r\n state.slideIndex = newIndex\r\n state.slides = state.slides.filter(item => !slidesId.includes(item.id))\r\n },\r\n\r\n [MutationTypes.UPDATE_SLIDE_INDEX](state, index: number) {\r\n state.slideIndex = index\r\n },\r\n\r\n [MutationTypes.UPDATE_SELECTED_SLIDES_INDEX](state, selectedSlidesIndex: number[]) {\r\n state.selectedSlidesIndex = selectedSlidesIndex\r\n },\r\n\r\n [MutationTypes.ADD_ELEMENT](state, element: PPTElement | PPTElement[]) {\r\n const elements = Array.isArray(element) ? element : [element]\r\n const currentSlideEls = state.slides[state.slideIndex].elements\r\n const newEls = [...currentSlideEls, ...elements]\r\n state.slides[state.slideIndex].elements = newEls\r\n },\r\n\r\n [MutationTypes.UPDATE_ELEMENT](state, data: UpdateElementData) {\r\n const { id, props } = data\r\n const elIdList = typeof id === 'string' ? [id] : id\r\n\r\n const slideIndex = state.slideIndex\r\n const slide = state.slides[slideIndex]\r\n const elements = slide.elements.map(el => {\r\n return elIdList.includes(el.id) ? { ...el, ...props } : el\r\n })\r\n state.slides[slideIndex].elements = (elements as PPTElement[])\r\n },\r\n\r\n [MutationTypes.REMOVE_ELEMENT_PROPS](state, data: RemoveElementPropData) {\r\n const { id, propName } = data\r\n const propsNames = typeof propName === 'string' ? [propName] : propName\r\n\r\n const slideIndex = state.slideIndex\r\n const slide = state.slides[slideIndex]\r\n const elements = slide.elements.map(el => {\r\n return el.id === id ? omit(el, propsNames) : el\r\n })\r\n state.slides[slideIndex].elements = (elements as PPTElement[])\r\n },\r\n\r\n // snapshot\r\n\r\n [MutationTypes.SET_SNAPSHOT_CURSOR](state, cursor: number) {\r\n state.snapshotCursor = cursor\r\n },\r\n\r\n [MutationTypes.SET_SNAPSHOT_LENGTH](state, length: number) {\r\n state.snapshotLength = length\r\n },\r\n\r\n // keyboard\r\n\r\n [MutationTypes.SET_CTRL_KEY_STATE](state, isActive: boolean) {\r\n state.ctrlKeyState = isActive\r\n },\r\n [MutationTypes.SET_SHIFT_KEY_STATE](state, isActive: boolean) {\r\n state.shiftKeyState = isActive\r\n },\r\n\r\n // screen\r\n\r\n [MutationTypes.SET_SCREENING](state, screening) {\r\n state.screening = screening\r\n },\r\n}","import { InjectionKey } from 'vue'\nimport { createStore, Store, useStore as baseUseStore } from 'vuex'\nimport { state, State } from './state'\nimport { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { MutationTypes, ActionTypes } from './constants'\n\nexport { MutationTypes, ActionTypes }\n\nexport const key: InjectionKey> = Symbol()\n\nexport const store = createStore({\n state,\n getters,\n mutations,\n actions,\n})\n\nexport const useStore = () => baseUseStore(key)","import { ShapePoolItem } from '@/configs/shapes'\r\nimport { LinePoolItem } from '@/configs/lines'\r\n\r\nexport type ElementOrderCommand = 'up' | 'down' | 'top' | 'bottom'\r\n\r\nexport const enum ElementOrderCommands {\r\n UP = 'up',\r\n DOWN = 'down',\r\n TOP = 'top',\r\n BOTTOM = 'bottom',\r\n}\r\n\r\nexport type ElementAlignCommand = 'top'| 'bottom' | 'left' | 'right' | 'vertical' | 'horizontal' | 'center'\r\n\r\nexport const enum ElementAlignCommands {\r\n TOP = 'top',\r\n BOTTOM = 'bottom',\r\n LEFT = 'left',\r\n RIGHT = 'right',\r\n VERTICAL = 'vertical',\r\n HORIZONTAL = 'horizontal',\r\n CENTER = 'center',\r\n}\r\n\r\nexport type OperateBorderLine = 'top' | 'bottom' | 'left' | 'right'\r\n\r\nexport const enum OperateBorderLines {\r\n T = 'top',\r\n B = 'bottom',\r\n L = 'left',\r\n R = 'right',\r\n}\r\n\r\nexport type OperateResizeHandler = '' | 'left-top' | 'top' | 'right-top' | 'left' | 'right' | 'left-bottom' | 'bottom' | 'right-bottom'\r\n\r\nexport const enum OperateResizeHandlers {\r\n LEFT_TOP = 'left-top',\r\n TOP = 'top',\r\n RIGHT_TOP = 'right-top',\r\n LEFT = 'left',\r\n RIGHT = 'right',\r\n LEFT_BOTTOM = 'left-bottom',\r\n BOTTOM = 'bottom',\r\n RIGHT_BOTTOM = 'right-bottom',\r\n}\r\n\r\nexport type OperateLineHandler = 'start' | 'end' | 'mid'\r\n\r\nexport const enum OperateLineHandlers {\r\n START = 'start',\r\n END = 'end',\r\n MID = 'mid',\r\n}\r\n\r\nexport interface AlignmentLineAxis {\r\n x: number; \r\n y: number;\r\n}\r\n\r\nexport interface AlignmentLineProps {\r\n type: 'vertical' | 'horizontal';\r\n axis: AlignmentLineAxis;\r\n length: number;\r\n}\r\n\r\nexport interface MultiSelectRange {\r\n minX: number;\r\n maxX: number;\r\n minY: number;\r\n maxY: number;\r\n}\r\n\r\nexport type ImageClipDataRange = [[number, number], [number, number]]\r\n\r\nexport interface ImageClipData {\r\n range: ImageClipDataRange;\r\n path: string;\r\n}\r\n\r\nexport interface ImageClipedEmitData {\r\n range: ImageClipDataRange;\r\n position: {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n };\r\n}\r\n\r\nexport interface CreateElementSelectionData {\r\n start: [number, number];\r\n end: [number, number];\r\n}\r\n\r\nexport interface CreatingTextElement {\r\n type: 'text';\r\n}\r\nexport interface CreatingShapeElement {\r\n type: 'shape';\r\n data: ShapePoolItem;\r\n}\r\nexport interface CreatingLineElement {\r\n type: 'line';\r\n data: LinePoolItem;\r\n}\r\nexport type CreatingElement = CreatingTextElement | CreatingShapeElement | CreatingLineElement","export const enum KEYS {\n C = 'C',\n X = 'X',\n Z = 'Z',\n Y = 'Y',\n A = 'A',\n G = 'G',\n L = 'L',\n F = 'F',\n D = 'D',\n B = 'B',\n MINUS = '-',\n EQUAL = '=',\n DIGIT_0 = '0',\n DELETE = 'DELETE',\n UP = 'ARROWUP',\n DOWN = 'ARROWDOWN',\n LEFT = 'ARROWLEFT',\n RIGHT = 'ARROWRIGHT',\n ENTER = 'ENTER',\n SPACE = ' ',\n TAB = 'TAB',\n BACKSPACE = 'BACKSPACE',\n}\n\nexport const HOTKEY_DOC = [\n {\n type: '通用',\n children: [\n { label: '剪切', value: 'Ctrl + X' },\n { label: '复制', value: 'Ctrl + C' },\n { label: '粘贴', value: 'Ctrl + V' },\n { label: '快速复制粘贴', value: 'Ctrl + D' },\n { label: '全选', value: 'Ctrl + A' },\n { label: '撤销', value: 'Ctrl + Z' },\n { label: '恢复', value: 'Ctrl + Y' },\n { label: '删除', value: 'Delete / Backspace' },\n { label: '多选', value: '按住 Ctrl 或 Shift' },\n ],\n },\n {\n type: '幻灯片放映',\n children: [\n { label: '开始放映幻灯片', value: 'Ctrl + F' },\n { label: '切换上一页', value: '↑ / ←' },\n { label: '切换下一页', value: '↓ / → / Enter / Space' },\n { label: '退出放映', value: 'ESC' },\n ],\n },\n {\n type: '幻灯片编辑',\n children: [\n { label: '新建幻灯片', value: 'Enter' },\n { label: '缩放画布', value: 'Ctrl + 鼠标滚动' },\n { label: '放大画布', value: 'Ctrl + =' },\n { label: '缩小画布', value: 'Ctrl + -' },\n { label: '缩放画布到合适大小', value: 'Ctrl + 0' },\n { label: '编辑上一页', value: '↑ / ← / 鼠标上滚' },\n { label: '编辑下一页', value: '↓ / → / 鼠标下滚' },\n ],\n },\n {\n type: '元素操作',\n children: [\n { label: '移动', value: '↑ / ← / ↓ / →' },\n { label: '锁定', value: 'Ctrl + L' },\n { label: '组合', value: 'Ctrl + G' },\n { label: '取消组合', value: 'Ctrl + Shift + G' },\n { label: '置顶层', value: 'Alt + F' },\n { label: '置底层', value: 'Alt + B' },\n { label: '锁定宽高比例', value: '按住 Ctrl 或 Shift' },\n { label: '创建水平 / 垂直线条', value: '按住 Ctrl 或 Shift' },\n { label: '切换焦点元素', value: 'Tab' },\n { label: '确认图片裁剪', value: 'Enter' },\n ],\n },\n {\n type: '表格编辑',\n children: [\n { label: '聚焦到下一个单元格', value: 'Tab' },\n { label: '在上方插入一行', value: 'Ctrl + ↑' },\n { label: '在下方插入一行', value: 'Ctrl + ↓' },\n { label: '在左侧插入一列', value: 'Ctrl + ←' },\n { label: '在右侧插入一列', value: 'Ctrl + →' },\n ],\n },\n {\n type: '图表数据编辑',\n children: [\n { label: '聚焦到下一行', value: 'Enter' },\n ],\n },\n {\n type: '文本编辑',\n children: [\n { label: '加粗', value: 'Ctrl + B' },\n { label: '斜体', value: 'Ctrl + I' },\n { label: '下划线', value: 'Ctrl + U' },\n { label: '删除线', value: 'Ctrl + D' },\n ],\n },\n]","\n\n\n\n","import { padStart } from 'lodash'\n\n/**\n * 生成随机码\n * @param len 随机码长度\n */\nexport const createRandomCode = (len = 6) => {\n const charset = `_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`\n const maxLen = charset.length\n let ret = ''\n for (let i = 0; i < len; i++) {\n const randomIndex = Math.floor(Math.random() * maxLen)\n ret += charset[randomIndex]\n }\n return ret\n}\n\n/**\n * 补足数字位数\n * @param digit 数字\n * @param len 位数\n */\nexport const fillDigit = (digit: number, len: number) => {\n return padStart('' + digit, len, '0')\n}","import CryptoJS from 'crypto-js'\n\nconst CRYPTO_KEY = 'pptist'\n\n/**\n * 加密\n * @param msg 待加密字符串\n */\nexport const encrypt = (msg: string) => {\n return CryptoJS.AES.encrypt(msg, CRYPTO_KEY).toString()\n}\n\n/**\n * 解密\n * @param ciphertext 待解密字符串\n */\nexport const decrypt = (ciphertext: string) => {\n const bytes = CryptoJS.AES.decrypt(ciphertext, CRYPTO_KEY)\n return bytes.toString(CryptoJS.enc.Utf8)\n}","import Clipboard from 'clipboard'\nimport { decrypt } from '@/utils/crypto'\n\n/**\n * 复制文本到剪贴板\n * @param text 文本内容\n */\nexport const copyText = (text: string) => {\n return new Promise((resolve, reject) => {\n const fakeElement = document.createElement('button')\n const clipboard = new Clipboard(fakeElement, {\n text: () => text,\n action: () => 'copy',\n container: document.body,\n })\n clipboard.on('success', e => {\n clipboard.destroy()\n resolve(e)\n })\n clipboard.on('error', e => {\n clipboard.destroy()\n reject(e)\n })\n document.body.appendChild(fakeElement)\n fakeElement.click()\n document.body.removeChild(fakeElement)\n })\n}\n\n// 读取剪贴板\nexport const readClipboard = (): Promise => {\n return new Promise((resolve, reject) => {\n if (navigator.clipboard?.readText) {\n navigator.clipboard.readText().then(text => {\n if (!text) reject('剪贴板为空或者不包含文本')\n return resolve(text)\n })\n }\n else reject('浏览器不支持或禁止访问剪贴板,请使用快捷键 Ctrl + V')\n })\n}\n\n// 解析加密后的剪贴板内容\nexport const pasteCustomClipboardString = (text: string) => {\n let clipboardData\n try {\n clipboardData = JSON.parse(decrypt(text))\n }\n catch {\n clipboardData = text\n }\n\n return clipboardData\n}\n\n// 尝试解析剪贴板内容是否为Excel表格(或类似的)数据格式\nexport const pasteExcelClipboardString = (text: string): string[][] | null => {\n const lines: string[] = text.split('\\r\\n')\n\n if (lines[lines.length - 1] === '') lines.pop()\n\n let colCount = -1\n const data: string[][] = []\n for (const index in lines) {\n data[index] = lines[index].split('\\t')\n\n if (data[index].length === 1) return null\n if (colCount === -1) colCount = data[index].length\n else if (colCount !== data[index].length) return null\n }\n return data\n}","import tinycolor from 'tinycolor2'\r\nimport { PPTElement, PPTLineElement } from '@/types/slides'\r\nimport { createRandomCode } from '@/utils/common'\r\n\r\ninterface RotatedElementData {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n rotate: number;\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置范围\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedRange = (element: RotatedElementData) => {\r\n const { left, top, width, height, rotate = 0 } = element\r\n\r\n const radius = Math.sqrt( Math.pow(width, 2) + Math.pow(height, 2) ) / 2\r\n const auxiliaryAngle = Math.atan(height / width) * 180 / Math.PI\r\n\r\n const tlbraRadian = (180 - rotate - auxiliaryAngle) * Math.PI / 180\r\n const trblaRadian = (auxiliaryAngle - rotate) * Math.PI / 180\r\n\r\n const middleLeft = left + width / 2\r\n const middleTop = top + height / 2\r\n\r\n const xAxis = [\r\n middleLeft + radius * Math.cos(tlbraRadian),\r\n middleLeft + radius * Math.cos(trblaRadian),\r\n middleLeft - radius * Math.cos(tlbraRadian),\r\n middleLeft - radius * Math.cos(trblaRadian),\r\n ]\r\n const yAxis = [\r\n middleTop - radius * Math.sin(tlbraRadian),\r\n middleTop - radius * Math.sin(trblaRadian),\r\n middleTop + radius * Math.sin(tlbraRadian),\r\n middleTop + radius * Math.sin(trblaRadian),\r\n ]\r\n\r\n return {\r\n xRange: [Math.min(...xAxis), Math.max(...xAxis)],\r\n yRange: [Math.min(...yAxis), Math.max(...yAxis)],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置与旋转之前位置的偏离距离\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedOffset = (element: RotatedElementData) => {\r\n const { xRange: originXRange, yRange: originYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: 0,\r\n })\r\n const { xRange: rotatedXRange, yRange: rotatedYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n return {\r\n offsetX: rotatedXRange[0] - originXRange[0],\r\n offsetY: rotatedYRange[0] - originYRange[0],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的位置范围\r\n * @param element 元素信息\r\n */\r\nexport const getElementRange = (element: PPTElement) => {\r\n let minX, maxX, minY, maxY\r\n\r\n if (element.type === 'line') {\r\n minX = element.left\r\n maxX = element.left + Math.max(element.start[0], element.end[0])\r\n minY = element.top\r\n maxY = element.top + Math.max(element.start[1], element.end[1])\r\n }\r\n else if ('rotate' in element && element.rotate) {\r\n const { left, top, width, height, rotate } = element\r\n const { xRange, yRange } = getRectRotatedRange({ left, top, width, height, rotate })\r\n minX = xRange[0]\r\n maxX = xRange[1]\r\n minY = yRange[0]\r\n maxY = yRange[1]\r\n }\r\n else {\r\n minX = element.left\r\n maxX = element.left + element.width\r\n minY = element.top\r\n maxY = element.top + element.height\r\n }\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\n/**\r\n * 计算一组元素在画布中的位置范围\r\n * @param elementList 一组元素信息\r\n */\r\nexport const getElementListRange = (elementList: PPTElement[]) => {\r\n const leftValues: number[] = []\r\n const topValues: number[] = []\r\n const rightValues: number[] = []\r\n const bottomValues: number[] = []\r\n\r\n elementList.forEach(element => {\r\n const { minX, maxX, minY, maxY } = getElementRange(element)\r\n leftValues.push(minX)\r\n topValues.push(minY)\r\n rightValues.push(maxX)\r\n bottomValues.push(maxY)\r\n })\r\n\r\n const minX = Math.min(...leftValues)\r\n const maxX = Math.max(...rightValues)\r\n const minY = Math.min(...topValues)\r\n const maxY = Math.max(...bottomValues)\r\n\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\nexport interface AlignLine {\r\n value: number;\r\n range: [number, number];\r\n}\r\n\r\n/**\r\n * 将一组对齐吸附线进行去重:同位置的的多条对齐吸附线仅留下一条,取该位置所有对齐吸附线的最大值和最小值为新的范围\r\n * @param lines 一组对齐吸附线信息\r\n */\r\nexport const uniqAlignLines = (lines: AlignLine[]) => {\r\n const uniqLines: AlignLine[] = []\r\n lines.forEach(line => {\r\n const index = uniqLines.findIndex(_line => _line.value === line.value)\r\n if (index === -1) uniqLines.push(line)\r\n else {\r\n const uniqLine = uniqLines[index]\r\n const rangeMin = Math.min(uniqLine.range[0], line.range[0])\r\n const rangeMax = Math.max(uniqLine.range[1], line.range[1])\r\n const range: [number, number] = [rangeMin, rangeMax]\r\n const _line = { value: line.value, range }\r\n uniqLines[index] = _line\r\n }\r\n })\r\n return uniqLines\r\n}\r\n\r\n/**\r\n * 以元素列表为基础,为每一个元素生成新的ID,并关联到旧ID形成一个字典\r\n * 主要用于复制元素时,维持数据中各处元素ID原有的关系\r\n * 例如:原本两个组合的元素拥有相同的groupId,复制后依然会拥有另一个相同的groupId\r\n * @param elements 元素列表数据\r\n */\r\nexport const createElementIdMap = (elements: PPTElement[]) => {\r\n const groupIdMap = {}\r\n const elIdMap = {}\r\n for (const element of elements) {\r\n const groupId = element.groupId\r\n if (groupId && !groupIdMap[groupId]) {\r\n groupIdMap[groupId] = createRandomCode()\r\n }\r\n elIdMap[element.id] = createRandomCode()\r\n }\r\n return {\r\n groupIdMap,\r\n elIdMap,\r\n }\r\n}\r\n\r\n/**\r\n * 根据表格的主题色,获取对应用于配色的子颜色\r\n * @param themeColor 主题色\r\n */\r\nexport const getTableSubThemeColor = (themeColor: string) => {\r\n const rgba = tinycolor(themeColor).toRgb()\r\n const subRgba1 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.3 }\r\n const subRgba2 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.1 }\r\n return [\r\n `rgba(${[subRgba1.r, subRgba1.g, subRgba1.b, subRgba1.a].join(',')})`,\r\n `rgba(${[subRgba2.r, subRgba2.g, subRgba2.b, subRgba2.a].join(',')})`,\r\n ]\r\n}\r\n\r\n/**\r\n * 获取线条元素路径字符串\r\n * @param element 线条元素\r\n */\r\nexport const getLineElementPath = (element: PPTLineElement) => {\r\n const start = element.start.join(',')\r\n const end = element.end.join(',')\r\n if (element.broken) {\r\n const mid = element.broken.join(',')\r\n return `M${start} L${mid} L${end}`\r\n }\r\n if (element.curve) {\r\n const mid = element.curve.join(',')\r\n return `M${start} Q${mid} ${end}`\r\n }\r\n return `M${start} L${end}`\r\n}","/**\r\n * 将普通文本转为带段落信息的HTML字符串\r\n * @param text 文本\r\n */\r\nexport const parseText2Paragraphs = (text: string) => {\r\n const htmlText = text.replace(/[\\n\\r]+/g, '
')\r\n const paragraphs = htmlText.split('
')\r\n let string = ''\r\n for (const paragraph of paragraphs) {\r\n if (paragraph) string += `
${paragraph}
`\r\n }\r\n return string\r\n}","import { debounce, throttle} from 'lodash'\nimport { ActionTypes, useStore } from '@/store'\n\nexport default () => {\n const store = useStore()\n\n // 添加历史快照(历史记录)\n const addHistorySnapshot = debounce(function() {\n store.dispatch(ActionTypes.ADD_SNAPSHOT)\n }, 300, { trailing: true })\n\n // 重做\n const redo = throttle(function() {\n store.dispatch(ActionTypes.RE_DO)\n }, 100, { leading: true, trailing: false })\n\n // 撤销\n const undo = throttle(function() {\n store.dispatch(ActionTypes.UN_DO)\n }, 100, { leading: true, trailing: false })\n\n return {\n addHistorySnapshot,\n redo,\n undo,\n }\n}","interface ImageSize {\n width: number;\n height: number;\n}\n\n/**\n * 获取图片的原始宽高\n * @param src 图片地址\n */\nexport const getImageSize = (src: string): Promise => {\n return new Promise(resolve => {\n const img = document.createElement('img')\n img.src = src\n img.style.opacity = '0'\n document.body.appendChild(img)\n\n img.onload = () => {\n const imgWidth = img.clientWidth\n const imgHeight = img.clientHeight\n \n img.onload = null\n img.onerror = null\n\n document.body.removeChild(img)\n\n resolve({ width: imgWidth, height: imgHeight })\n }\n\n img.onerror = () => {\n img.onload = null\n img.onerror = null\n }\n })\n}\n\n/**\n * 读取图片文件的dataURL\n * @param file 图片文件\n */\nexport const getImageDataURL = (file: File): Promise => {\n return new Promise(resolve => {\n const reader = new FileReader()\n reader.addEventListener('load', () => {\n resolve(reader.result as string)\n })\n reader.readAsDataURL(file)\n })\n}","export const VIEWPORT_SIZE = 1000","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { createRandomCode } from '@/utils/common'\nimport { getImageSize } from '@/utils/image'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { PPTLineElement, ChartType, PPTElement, TableCell, TableCellStyle, PPTShapeElement } from '@/types/slides'\nimport { ShapePoolItem } from '@/configs/shapes'\nimport { LinePoolItem } from '@/configs/lines'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface CommonElementPosition {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface LineElementPosition {\n top: number;\n left: number;\n start: [number, number];\n end: [number, number];\n}\n\nexport default () => {\n const store = useStore()\n const themeColor = computed(() => store.state.theme.themeColor)\n const fontColor = computed(() => store.state.theme.fontColor)\n const fontName = computed(() => store.state.theme.fontName)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const creatingElement = computed(() => store.state.creatingElement)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 创建(插入)一个元素并将其设置为被选中元素\n const createElement = (element: PPTElement) => {\n store.commit(MutationTypes.ADD_ELEMENT, element)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [element.id])\n\n if (creatingElement.value) store.commit(MutationTypes.SET_CREATING_ELEMENT, null)\n\n setTimeout(() => {\n store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n }, 0)\n\n addHistorySnapshot()\n }\n\n /**\n * 创建图片元素\n * @param src 图片地址\n */\n const createImageElement = (src: string) => {\n getImageSize(src).then(({ width, height }) => {\n const scale = height / width\n \n if (scale < viewportRatio.value && width > VIEWPORT_SIZE) {\n width = VIEWPORT_SIZE\n height = width * scale\n }\n else if (height > VIEWPORT_SIZE * viewportRatio.value) {\n height = VIEWPORT_SIZE * viewportRatio.value\n width = height / scale\n }\n\n createElement({\n type: 'image',\n id: createRandomCode(),\n src,\n width,\n height,\n left: (VIEWPORT_SIZE - width) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - height) / 2,\n fixedRatio: true,\n rotate: 0,\n })\n })\n }\n \n /**\n * 创建图表元素\n * @param chartType 图表类型\n */\n const createChartElement = (chartType: ChartType) => {\n createElement({\n type: 'chart',\n id: createRandomCode(),\n chartType,\n left: 300,\n top: 81.25,\n width: 400,\n height: 400,\n themeColor: [themeColor.value],\n gridColor: fontColor.value,\n data: {\n labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],\n legends: ['系列1'],\n series: [\n [12, 19, 5, 2, 18],\n ],\n },\n })\n }\n \n /**\n * 创建表格元素\n * @param row 行数\n * @param col 列数\n */\n const createTableElement = (row: number, col: number) => {\n const style: TableCellStyle = {\n fontname: fontName.value,\n color: fontColor.value,\n }\n const data: TableCell[][] = []\n for (let i = 0; i < row; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < col; j++) {\n rowCells.push({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '', style })\n }\n data.push(rowCells)\n }\n\n const DEFAULT_CELL_WIDTH = 100\n const DEFAULT_CELL_HEIGHT = 36\n\n const colWidths: number[] = new Array(col).fill(1 / col)\n\n const width = col * DEFAULT_CELL_WIDTH\n const height = row * DEFAULT_CELL_HEIGHT\n\n createElement({\n type: 'table',\n id: createRandomCode(),\n width,\n height,\n colWidths,\n data,\n left: (VIEWPORT_SIZE - width) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - height) / 2,\n outline: {\n width: 2,\n style: 'solid',\n color: '#eeece1',\n },\n theme: {\n color: themeColor.value,\n rowHeader: true,\n rowFooter: false,\n colHeader: false,\n colFooter: false,\n },\n })\n }\n \n /**\n * 创建文本元素\n * @param position 位置大小信息\n * @param content 文本内容\n */\n const createTextElement = (position: CommonElementPosition, content = '请输入内容') => {\n const { left, top, width, height } = position\n createElement({\n type: 'text',\n id: createRandomCode(),\n left, \n top, \n width, \n height,\n content,\n rotate: 0,\n defaultFontName: fontName.value,\n defaultColor: fontColor.value,\n })\n }\n \n /**\n * 创建形状元素\n * @param position 位置大小信息\n * @param data 形状路径信息\n */\n const createShapeElement = (position: CommonElementPosition, data: ShapePoolItem) => {\n const { left, top, width, height } = position\n const newElement: PPTShapeElement = {\n type: 'shape',\n id: createRandomCode(),\n left, \n top, \n width, \n height,\n viewBox: data.viewBox,\n path: data.path,\n fill: themeColor.value,\n fixedRatio: false,\n rotate: 0,\n }\n if (data.special) newElement.special = true\n createElement(newElement)\n }\n \n /**\n * 创建线条元素\n * @param position 位置大小信息\n * @param data 线条的路径和样式\n */\n const createLineElement = (position: LineElementPosition, data: LinePoolItem) => {\n const { left, top, start, end } = position\n\n const newElement: PPTLineElement = {\n type: 'line',\n id: createRandomCode(),\n left, \n top, \n start,\n end,\n points: data.points,\n color: themeColor.value,\n style: data.style,\n width: 2,\n }\n if (data.isBroken) newElement.broken = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n if (data.isCurve) newElement.curve = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n createElement(newElement)\n }\n\n return {\n createImageElement,\n createChartElement,\n createTableElement,\n createTextElement,\n createShapeElement,\n createLineElement,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { pasteCustomClipboardString } from '@/utils/clipboard'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { createElementIdMap } from '@/utils/element'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useCreateElement from '@/hooks/useCreateElement'\n\ninterface PasteTextClipboardDataOptions {\n onlySlide?: boolean;\n onlyElements?: boolean;\n}\n\nexport default () => {\n const store = useStore()\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n const { createTextElement } = useCreateElement()\n\n /**\n * 粘贴元素(一组)\n * @param elements 元素列表数据\n */\n const addElementsFromClipboard = (elements: PPTElement[]) => {\n const { groupIdMap, elIdMap } = createElementIdMap(elements)\n const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id)\n \n for (const element of elements) {\n const inCurrentSlide = currentSlideElementIdList.includes(element.id)\n \n element.id = elIdMap[element.id]\n\n if (inCurrentSlide) {\n element.left = element.left + 10\n element.top = element.top + 10\n }\n\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n store.commit(MutationTypes.ADD_ELEMENT, elements)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, Object.values(elIdMap))\n addHistorySnapshot()\n }\n\n /**\n * 粘贴页面\n * @param slide 页面数据\n */\n const addSlidesFromClipboard = (slides: Slide[]) => {\n const newSlides = slides.map(slide => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n if (slide.animations) {\n for (const animation of slide.animations) {\n animation.elId = elIdMap[animation.elId]\n }\n }\n return {\n ...slide,\n id: createRandomCode(8),\n }\n })\n store.commit(MutationTypes.ADD_SLIDE, newSlides)\n addHistorySnapshot()\n }\n\n /**\n * 粘贴普通文本:创建为新的文本元素\n * @param text 文本\n */\n const createTextElementFromClipboard = (text: string) => {\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, text)\n }\n\n /**\n * 解析剪贴板内容,根据解析结果选择合适的粘贴方式\n * @param text 剪贴板内容\n * @param options 配置项:onlySlide -- 仅处理页面粘贴;onlyElements -- 仅处理元素粘贴;\n */\n const pasteTextClipboardData = (text: string, options?: PasteTextClipboardDataOptions) => {\n const onlySlide = options?.onlySlide || false\n const onlyElements = options?.onlyElements || false\n\n const clipboardData = pasteCustomClipboardString(text)\n\n // 元素或页面\n if (typeof clipboardData === 'object') {\n const { type, data } = clipboardData\n\n if (type === 'elements' && !onlySlide) addElementsFromClipboard(data)\n else if (type === 'slides' && !onlyElements) addSlidesFromClipboard(data)\n }\n\n // 普通文本\n else if (!onlyElements && !onlySlide) {\n const string = parseText2Paragraphs(clipboardData)\n createTextElementFromClipboard(string)\n }\n }\n\n return {\n addSlidesFromClipboard,\n pasteTextClipboardData,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { copyText, readClipboard } from '@/utils/clipboard'\nimport { encrypt } from '@/utils/crypto'\nimport { createElementIdMap } from '@/utils/element'\nimport { KEYS } from '@/configs/hotkey'\nimport { message } from 'ant-design-vue'\nimport usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const slideIndex = computed(() => store.state.slideIndex)\n const theme = computed(() => store.state.theme)\n const slides = computed(() => store.state.slides)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const selectedSlidesIndex = computed(() => [...store.state.selectedSlidesIndex, slideIndex.value])\n const selectedSlides = computed(() => slides.value.filter((item, index) => selectedSlidesIndex.value.includes(index)))\n const selectedSlidesId = computed(() => selectedSlides.value.map(item => item.id))\n\n const { pasteTextClipboardData, addSlidesFromClipboard } = usePasteTextClipboardData()\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 重置幻灯片\n const resetSlides = () => {\n const emptySlide = {\n id: createRandomCode(8),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, 0)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.SET_SLIDES, [emptySlide])\n }\n\n /**\n * 移动页面焦点\n * @param command 移动页面焦点命令:上移、下移\n */\n const updateSlideIndex = (command: string) => {\n if (command === KEYS.UP && slideIndex.value > 0) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1)\n }\n else if (command === KEYS.DOWN && slideIndex.value < slides.value.length - 1) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1)\n }\n }\n\n // 将当前页面数据加密后复制到剪贴板\n const copySlide = () => {\n const text = encrypt(JSON.stringify({\n type: 'slides',\n data: selectedSlides.value,\n }))\n\n copyText(text).then(() => {\n store.commit(MutationTypes.SET_THUMBNAILS_FOCUS, true)\n })\n }\n\n // 尝试将剪贴板页面数据解密后添加到下一页(粘贴)\n const pasteSlide = () => {\n readClipboard().then(text => {\n pasteTextClipboardData(text, { onlySlide: true })\n }).catch(err => message.warning(err))\n }\n\n // 创建一页空白页并添加到下一页\n const createSlide = () => {\n const emptySlide = {\n id: createRandomCode(8),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.ADD_SLIDE, emptySlide)\n addHistorySnapshot()\n }\n\n // 根据模板创建新页面\n const createSlideByTemplate = (slide: Slide) => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n const newSlide = {\n ...slide,\n id: createRandomCode(8),\n }\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.ADD_SLIDE, newSlide)\n addHistorySnapshot()\n }\n\n // 将当前页复制一份到下一页\n const copyAndPasteSlide = () => {\n const slide = JSON.parse(JSON.stringify(currentSlide.value))\n addSlidesFromClipboard([slide])\n }\n\n // 删除当前页,若将删除全部页面,则执行重置幻灯片操作\n const deleteSlide = (targetSlidesId = selectedSlidesId.value) => {\n if (slides.value.length === targetSlidesId.length) resetSlides()\n else store.commit(MutationTypes.DELETE_SLIDE, targetSlidesId)\n\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, [])\n\n addHistorySnapshot()\n }\n\n // 将当前页复制后删除(剪切)\n // 由于复制操作会导致多选状态消失,所以需要提前将需要删除的页面ID进行缓存\n const cutSlide = () => {\n const targetSlidesId = [...selectedSlidesId.value]\n copySlide()\n deleteSlide(targetSlidesId)\n }\n\n // 选中全部幻灯片\n const selectAllSlide = () => {\n const newSelectedSlidesIndex = Array.from(Array(slides.value.length), (item, index) => index)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n }\n\n return {\n resetSlides,\n updateSlideIndex,\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 锁定选中的元素,并清空选中元素状态\n const lockElement = () => {\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n \n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id)) element.lock = true\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n addHistorySnapshot()\n }\n\n /**\n * 解除元素的锁定状态,并将其设置为当前选择元素\n * @param handleElement 需要解锁的元素\n */\n const unlockElement = (handleElement: PPTElement) => {\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n\n if (handleElement.groupId) {\n for (const element of newElementList) {\n if (element.groupId === handleElement.groupId) element.lock = false\n }\n return newElementList\n }\n \n for (const element of newElementList) {\n if (element.id === handleElement.id) {\n element.lock = false\n break\n }\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [handleElement.id])\n addHistorySnapshot()\n }\n\n return {\n lockElement,\n unlockElement,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 删除全部选中元素\n // 组合元素成员中,存在被选中可独立操作的元素时,优先删除该元素。否则默认删除所有被选中的元素\n const deleteElement = () => {\n if (!activeElementIdList.value.length) return\n\n let newElementList: PPTElement[] = []\n if (activeGroupElementId.value) {\n newElementList = currentSlide.value.elements.filter(el => el.id !== activeGroupElementId.value)\n }\n else {\n newElementList = currentSlide.value.elements.filter(el => !activeElementIdList.value.includes(el.id))\n }\n\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n // 删除内面内全部元素(无论是否选中)\n const deleteAllElements = () => {\n if (!currentSlide.value.elements.length) return\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: [] })\n addHistorySnapshot()\n }\n\n return {\n deleteElement,\n deleteAllElements,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeElementList = computed(() => store.getters.activeElementList)\n const currentSlide = computed(() => store.getters.currentSlide)\n const handleElementId = computed(() => store.state.handleElementId)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 判断当前选中的元素是否可以组合\n */\n const canCombine = computed(() => {\n if (activeElementList.value.length < 2) return false\n\n const firstGroupId = activeElementList.value[0].groupId\n if (!firstGroupId) return true\n\n const inSameGroup = activeElementList.value.every(el => (el.groupId && el.groupId) === firstGroupId)\n return !inSameGroup\n })\n\n /**\n * 组合当前选中的元素:给当前选中的元素赋予一个相同的分组ID\n */\n const combineElements = () => {\n if (!activeElementList.value.length) return\n\n // 生成一个新元素列表进行后续操作\n let newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n\n // 生成分组ID\n const groupId = createRandomCode()\n\n // 收集需要组合的元素列表,并赋上唯一分组ID\n const combineElementList: PPTElement[] = []\n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id)) {\n element.groupId = groupId\n combineElementList.push(element)\n }\n }\n\n // 确保该组合内所有元素成员的层级是连续的,具体操作方法为:\n // 先获取到该组合内最上层元素的层级,将本次需要组合的元素从新元素列表中移除,\n // 再根据最上层元素的层级位置,将上面收集到的需要组合的元素列表一起插入到新元素列表中合适的位置\n const combineElementMaxLevel = newElementList.findIndex(_element => _element.id === combineElementList[combineElementList.length - 1].id)\n const combineElementIdList = combineElementList.map(_element => _element.id)\n newElementList = newElementList.filter(_element => !combineElementIdList.includes(_element.id))\n\n const insertLevel = combineElementMaxLevel - combineElementList.length + 1\n newElementList.splice(insertLevel, 0, ...combineElementList)\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n /**\n * 取消组合元素:移除选中元素的分组ID\n */\n const uncombineElements = () => {\n if (!activeElementList.value.length) return\n const hasElementInGroup = activeElementList.value.some(item => item.groupId)\n if (!hasElementInGroup) return\n \n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id) && element.groupId) delete element.groupId\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n\n // 取消组合后,需要重置激活元素状态\n // 默认重置为当前正在操作的元素,如果不存在则重置为空\n const handleElementIdList = handleElementId.value ? [handleElementId.value] : []\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, handleElementIdList)\n addHistorySnapshot()\n }\n\n return {\n canCombine,\n combineElements,\n uncombineElements,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { copyText, readClipboard } from '@/utils/clipboard'\nimport { encrypt } from '@/utils/crypto'\nimport { message } from 'ant-design-vue'\nimport usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'\nimport useDeleteElement from './useDeleteElement'\n\nexport default () => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeElementList = computed(() => store.getters.activeElementList)\n\n const { pasteTextClipboardData } = usePasteTextClipboardData()\n const { deleteElement } = useDeleteElement()\n\n // 将选中元素数据加密后复制到剪贴板\n const copyElement = () => {\n if (!activeElementIdList.value.length) return\n\n const text = encrypt(JSON.stringify({\n type: 'elements',\n data: activeElementList.value,\n }))\n\n copyText(text).then(() => {\n store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n })\n }\n\n // 将选中元素复制后删除(剪切)\n const cutElement = () => {\n copyElement()\n deleteElement()\n }\n\n // 尝试将剪贴板元素数据解密后进行粘贴\n const pasteElement = () => {\n readClipboard().then(text => {\n pasteTextClipboardData(text)\n }).catch(err => message.warning(err))\n }\n\n // 将选中元素复制后立刻粘贴\n const quickCopyElement = () => {\n copyElement()\n pasteElement()\n }\n\n return {\n copyElement,\n cutElement,\n pasteElement,\n quickCopyElement,\n }\n}","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { Slide } from '@/types/slides'\r\n\r\nexport default () => {\r\n const store = useStore()\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n // 将当前页面全部元素设置为被选择状态\r\n const selectAllElement = () => {\r\n const unlockedElements = currentSlide.value.elements.filter(el => !el.lock)\r\n const newActiveElementIdList = unlockedElements.map(el => el.id)\r\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, newActiveElementIdList)\r\n }\r\n\r\n return {\r\n selectAllElement,\r\n }\r\n}","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { PPTElement, Slide } from '@/types/slides'\r\nimport { KEYS } from '@/configs/hotkey'\r\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\r\n\r\nexport default () => {\r\n const store = useStore()\r\n const activeElementIdList = computed(() => store.state.activeElementIdList)\r\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 将元素向指定方向移动指定的距离\r\n * 组合元素成员中,存在被选中可独立操作的元素时,优先移动该元素。否则默认移动所有被选中的元素\r\n * @param command 移动方向\r\n * @param step 移动距离\r\n */\r\n const moveElement = (command: string, step = 1) => {\r\n let newElementList: PPTElement[] = []\r\n\r\n const move = (el: PPTElement) => {\r\n let { left, top } = el\r\n switch (command) {\r\n case KEYS.LEFT: \r\n left = left - step\r\n break\r\n case KEYS.RIGHT: \r\n left = left + step\r\n break\r\n case KEYS.UP: \r\n top = top - step\r\n break\r\n case KEYS.DOWN: \r\n top = top + step\r\n break\r\n default: break\r\n }\r\n return { ...el, left, top }\r\n }\r\n\r\n if (activeGroupElementId.value) {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeGroupElementId.value === el.id ? move(el) : el\r\n })\r\n }\r\n else {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeElementIdList.value.includes(el.id) ? move(el) : el\r\n })\r\n }\r\n\r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n moveElement,\r\n }\r\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { ElementOrderCommand, ElementOrderCommands } from '@/types/edit'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 获取组合元素层级范围\n * @param elementList 本页所有元素列表\n * @param combineElementList 组合元素列表\n */\n const getCombineElementLevelRange = (elementList: PPTElement[], combineElementList: PPTElement[]) => {\n return {\n minLevel: elementList.findIndex(_element => _element.id === combineElementList[0].id),\n maxLevel: elementList.findIndex(_element => _element.id === combineElementList[combineElementList.length - 1].id),\n }\n }\n\n /**\n * 上移一层\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveUpElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n // 如果被操作的元素是组合元素成员,需要将该组合全部成员一起进行移动\n if (element.groupId) {\n\n // 获取到该组合全部成员,以及所有成员的层级范围\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel, maxLevel } = getCombineElementLevelRange(elementList, combineElementList)\n\n // 已经处在顶层,无法继续移动\n if (maxLevel === elementList.length - 1) return\n\n // 通过组合成员范围的最大值,获取到该组合上一层的元素,然后将该组合元素从元素列表中移除(并缓存被移除的元素列表)\n // 若上层元素处在另一个组合中,则将上述被移除的组合元素插入到该上层组合上方\n // 若上层元素不处于任何分组中,则将上述被移除的组合元素插入到该上层元素上方\n const nextElement = copyOfElementList[maxLevel + 1]\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n\n if (nextElement.groupId) {\n const nextCombineElementList = copyOfElementList.filter(_element => _element.groupId === nextElement.groupId)\n copyOfElementList.splice(minLevel + nextCombineElementList.length, 0, ...movedElementList)\n }\n else copyOfElementList.splice(minLevel + 1, 0, ...movedElementList)\n }\n\n // 如果被操作的元素不是组合元素成员\n else {\n\n // 获取该元素在列表中的层级\n const level = elementList.findIndex(item => item.id === element.id)\n\n // 已经处在顶层,无法继续移动\n if (level === elementList.length - 1) return\n\n // 获取到该组合上一层的元素,然后将该组合元素从元素列表中移除(并缓存被移除的元素列表)\n const nextElement = copyOfElementList[level + 1]\n const movedElement = copyOfElementList.splice(level, 1)[0]\n\n // 通过组合成员范围的最大值,获取到该组合上一层的元素,然后将该组合元素从元素列表中移除(并缓存被移除的元素列表)\n // 若上层元素处在另一个组合中,则将上述被移除的组合元素插入到该上层组合上方\n // 若上层元素不处于任何分组中,则将上述被移除的组合元素插入到该上层元素上方\n if (nextElement.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === nextElement.groupId)\n copyOfElementList.splice(level + combineElementList.length, 0, movedElement)\n }\n else copyOfElementList.splice(level + 1, 0, movedElement)\n }\n\n return copyOfElementList\n }\n\n /**\n * 下移一层,操作方式同上移\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveDownElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n if (element.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel } = getCombineElementLevelRange(elementList, combineElementList)\n if (minLevel === 0) return\n\n const prevElement = copyOfElementList[minLevel - 1]\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n\n if (prevElement.groupId) {\n const prevCombineElementList = copyOfElementList.filter(_element => _element.groupId === prevElement.groupId)\n copyOfElementList.splice(minLevel - prevCombineElementList.length, 0, ...movedElementList)\n }\n else copyOfElementList.splice(minLevel - 1, 0, ...movedElementList)\n }\n\n else {\n const level = elementList.findIndex(item => item.id === element.id)\n if (level === 0) return\n\n const prevElement = copyOfElementList[level - 1]\n const movedElement = copyOfElementList.splice(level, 1)[0]\n\n if (prevElement.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === prevElement.groupId)\n copyOfElementList.splice(level - combineElementList.length, 0, movedElement)\n }\n else copyOfElementList.splice(level - 1, 0, movedElement)\n }\n\n return copyOfElementList\n }\n\n /**\n * 置顶层\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveTopElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n // 如果被操作的元素是组合元素成员,需要将该组合全部成员一起进行移动\n if (element.groupId) {\n\n // 获取到该组合全部成员,以及所有成员的层级范围\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel, maxLevel } = getCombineElementLevelRange(elementList, combineElementList)\n\n // 已经处在顶层,无法继续移动\n if (maxLevel === elementList.length - 1) return null\n\n // 将该组合元素从元素列表中移除,然后将被移除的元素添加到元素列表顶部\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n copyOfElementList.push(...movedElementList)\n }\n\n // 如果被操作的元素不是组合元素成员\n else {\n\n // 获取该元素在列表中的层级\n const level = elementList.findIndex(item => item.id === element.id)\n\n // 已经处在顶层,无法继续移动\n if (level === elementList.length - 1) return null\n\n // 将该组合元素从元素列表中移除,然后将被移除的元素添加到元素列表底部\n copyOfElementList.splice(level, 1)\n copyOfElementList.push(element)\n }\n\n return copyOfElementList\n }\n\n /**\n * 置底层,操作方式同置顶\n * @param elementList 本页所有元素列表\n * @param element 当前操作的元素\n */\n const moveBottomElement = (elementList: PPTElement[], element: PPTElement) => {\n const copyOfElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList))\n\n if (element.groupId) {\n const combineElementList = copyOfElementList.filter(_element => _element.groupId === element.groupId)\n const { minLevel } = getCombineElementLevelRange(elementList, combineElementList)\n if (minLevel === 0) return\n\n const movedElementList = copyOfElementList.splice(minLevel, combineElementList.length)\n copyOfElementList.unshift(...movedElementList)\n }\n\n else {\n const level = elementList.findIndex(item => item.id === element.id)\n if (level === 0) return\n\n copyOfElementList.splice(level, 1)\n copyOfElementList.unshift(element)\n }\n\n return copyOfElementList\n }\n\n /**\n * 调整元素层级\n * @param element 需要调整层级的元素\n * @param command 调整命令:上移、下移、置顶、置底\n */\n const orderElement = (element: PPTElement, command: ElementOrderCommand) => {\n let newElementList\n \n if (command === ElementOrderCommands.UP) newElementList = moveUpElement(currentSlide.value.elements, element)\n else if (command === ElementOrderCommands.DOWN) newElementList = moveDownElement(currentSlide.value.elements, element)\n else if (command === ElementOrderCommands.TOP) newElementList = moveTopElement(currentSlide.value.elements, element)\n else if (command === ElementOrderCommands.BOTTOM) newElementList = moveBottomElement(currentSlide.value.elements, element)\n\n if (!newElementList) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n return {\n orderElement,\n }\n}","// 进入全屏\nexport const enterFullscreen = () => {\n const docElm = document.documentElement\n if (docElm.requestFullscreen) docElm.requestFullscreen() \n else if (docElm.mozRequestFullScreen) docElm.mozRequestFullScreen() \n else if (docElm.webkitRequestFullScreen) docElm.webkitRequestFullScreen()\n}\n\n// 退出全屏\nexport const exitFullscreen = () => {\n if (document.exitFullscreen) document.exitFullscreen()\n else if (document.mozCancelFullScreen) document.mozCancelFullScreen()\n else if (document.webkitCancelFullScreen) document.webkitCancelFullScreen()\n}\n\n// 判断是否全屏\nexport const isFullscreen = () => (\n document.mozFullScreen || \n document.webkitIsFullScreen || \n document.webkitFullScreen\n)","import { MutationTypes, useStore } from '@/store'\nimport { enterFullscreen, exitFullscreen, isFullscreen } from '@/utils/fullscreen'\n\nexport default () => {\n const store = useStore()\n\n // 进入放映状态(从当前页开始)\n const enterScreening = () => {\n enterFullscreen()\n store.commit(MutationTypes.SET_SCREENING, true)\n }\n\n // 进入放映状态(从第一页开始)\n const enterScreeningFromStart = () => {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, 0)\n enterScreening()\n }\n\n // 退出放映状态\n const exitScreening = () => {\n store.commit(MutationTypes.SET_SCREENING, false)\n if (isFullscreen()) exitFullscreen()\n }\n\n return {\n enterScreening,\n enterScreeningFromStart,\n exitScreening,\n }\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\n\nexport default () => {\n const store = useStore()\n const canvasPercentage = computed(() => store.state.canvasPercentage)\n\n /**\n * 缩放画布百分比\n * @param command 缩放命令:放大、缩小\n */\n const scaleCanvas = (command: '+' | '-') => {\n let percentage = canvasPercentage.value\n const step = 5\n const max = 120\n const min = 60\n if (command === '+' && percentage <= max) percentage += step\n if (command === '-' && percentage >= min) percentage -= step\n \n store.commit(MutationTypes.SET_CANVAS_PERCENTAGE, percentage)\n }\n\n /**\n * 设置画笔百分比\n * @param percentage 百分比(小数形式,如0.8)\n */\n const setCanvasPercentage = (percentage: number) => {\n store.commit(MutationTypes.SET_CANVAS_PERCENTAGE, percentage)\n }\n \n return {\n scaleCanvas,\n setCanvasPercentage,\n }\n}","import { computed, onMounted, onUnmounted } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { ElementOrderCommand, ElementOrderCommands } from '@/types/edit'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { KEYS } from '@/configs/hotkey'\n\nimport useSlideHandler from './useSlideHandler'\nimport useLockElement from './useLockElement'\nimport useDeleteElement from './useDeleteElement'\nimport useCombineElement from './useCombineElement'\nimport useCopyAndPasteElement from './useCopyAndPasteElement'\nimport useSelectAllElement from './useSelectAllElement'\nimport useMoveElement from './useMoveElement'\nimport useOrderElement from './useOrderElement'\nimport useHistorySnapshot from './useHistorySnapshot'\nimport useScreening from './useScreening'\nimport useScaleCanvas from './useScaleCanvas'\n\nexport default () => {\n const store = useStore()\n\n const ctrlKeyActive = computed(() => store.state.ctrlKeyState)\n const shiftKeyActive = computed(() => store.state.shiftKeyState)\n const disableHotkeys = computed(() => store.state.disableHotkeys)\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const handleElement = computed(() => store.getters.handleElement)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const thumbnailsFocus = computed(() => store.state.thumbnailsFocus)\n\n const {\n updateSlideIndex,\n copySlide,\n createSlide,\n deleteSlide,\n cutSlide,\n copyAndPasteSlide,\n selectAllSlide,\n } = useSlideHandler()\n\n const { combineElements, uncombineElements } = useCombineElement()\n const { deleteElement } = useDeleteElement()\n const { lockElement } = useLockElement()\n const { copyElement, cutElement, quickCopyElement } = useCopyAndPasteElement()\n const { selectAllElement } = useSelectAllElement()\n const { moveElement } = useMoveElement()\n const { orderElement } = useOrderElement()\n const { redo, undo } = useHistorySnapshot()\n const { enterScreening } = useScreening()\n const { scaleCanvas, setCanvasPercentage } = useScaleCanvas()\n\n const copy = () => {\n if (activeElementIdList.value.length) copyElement()\n else if (thumbnailsFocus.value) copySlide()\n }\n\n const cut = () => {\n if (activeElementIdList.value.length) cutElement()\n else if (thumbnailsFocus.value) cutSlide()\n }\n\n const quickCopy = () => {\n if (activeElementIdList.value.length) quickCopyElement()\n else if (thumbnailsFocus.value) copyAndPasteSlide()\n }\n\n const selectAll = () => {\n if (editorAreaFocus.value) selectAllElement()\n if (thumbnailsFocus.value) selectAllSlide()\n }\n\n const lock = () => {\n if (!editorAreaFocus.value) return\n lockElement()\n }\n const combine = () => {\n if (!editorAreaFocus.value) return\n combineElements()\n }\n\n const uncombine = () => {\n if (!editorAreaFocus.value) return\n uncombineElements()\n }\n\n const remove = () => {\n if (activeElementIdList.value.length) deleteElement()\n else if (thumbnailsFocus.value) deleteSlide()\n }\n\n const move = (key: string) => {\n if (activeElementIdList.value.length) moveElement(key)\n else if (key === KEYS.UP || key === KEYS.DOWN) updateSlideIndex(key)\n }\n\n const order = (command: ElementOrderCommand) => {\n if (!handleElement.value) return\n orderElement(handleElement.value, command)\n }\n\n const create = () => {\n if (!thumbnailsFocus.value) return\n createSlide()\n }\n\n const tabActiveElement = () => {\n if (!currentSlide.value.elements.length) return\n if (!handleElement.value) {\n const firstElement = currentSlide.value.elements[0]\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [firstElement.id])\n return\n }\n\n const currentIndex = currentSlide.value.elements.findIndex(el => el.id === handleElement.value.id)\n const nextIndex = currentIndex >= currentSlide.value.elements.length - 1 ? 0 : currentIndex + 1\n const nextElementId = currentSlide.value.elements[nextIndex].id\n\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [nextElementId])\n }\n\n const keydownListener = (e: KeyboardEvent) => {\n const { ctrlKey, shiftKey, altKey, metaKey } = e\n const ctrlOrMetaKeyActive = ctrlKey || metaKey\n \n const key = e.key.toUpperCase()\n\n if (ctrlOrMetaKeyActive && !ctrlKeyActive.value) store.commit(MutationTypes.SET_CTRL_KEY_STATE, true)\n if (shiftKey && !shiftKeyActive.value) store.commit(MutationTypes.SET_SHIFT_KEY_STATE, true)\n\n if (ctrlOrMetaKeyActive && key === KEYS.F) {\n e.preventDefault()\n enterScreening()\n store.commit(MutationTypes.SET_CTRL_KEY_STATE, false)\n }\n \n if (!editorAreaFocus.value && !thumbnailsFocus.value) return \n\n if (ctrlOrMetaKeyActive && key === KEYS.C) {\n if (disableHotkeys.value) return\n e.preventDefault()\n copy()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.X) {\n if (disableHotkeys.value) return\n e.preventDefault()\n cut()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.D) {\n if (disableHotkeys.value) return\n e.preventDefault()\n quickCopy()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.Z) {\n if (disableHotkeys.value) return\n e.preventDefault()\n undo()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.Y) {\n if (disableHotkeys.value) return\n e.preventDefault()\n redo()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.A) {\n if (disableHotkeys.value) return\n e.preventDefault()\n selectAll()\n }\n if (ctrlOrMetaKeyActive && key === KEYS.L) {\n if (disableHotkeys.value) return\n e.preventDefault()\n lock()\n }\n if (!shiftKey && ctrlOrMetaKeyActive && key === KEYS.G) {\n if (disableHotkeys.value) return\n e.preventDefault()\n combine()\n }\n if (shiftKey && ctrlOrMetaKeyActive && key === KEYS.G) {\n if (disableHotkeys.value) return\n e.preventDefault()\n uncombine()\n }\n if (altKey && key === KEYS.F) {\n if (disableHotkeys.value) return\n e.preventDefault()\n order(ElementOrderCommands.TOP)\n }\n if (altKey && key === KEYS.B) {\n if (disableHotkeys.value) return\n e.preventDefault()\n order(ElementOrderCommands.BOTTOM)\n }\n if (key === KEYS.DELETE || key === KEYS.BACKSPACE) {\n if (disableHotkeys.value) return\n e.preventDefault()\n remove()\n }\n if (key === KEYS.UP) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.UP)\n }\n if (key === KEYS.DOWN) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.DOWN)\n }\n if (key === KEYS.LEFT) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.LEFT)\n }\n if (key === KEYS.RIGHT) {\n if (disableHotkeys.value) return\n e.preventDefault()\n move(KEYS.RIGHT)\n }\n if (key === KEYS.ENTER) {\n if (disableHotkeys.value) return\n e.preventDefault()\n create()\n }\n if (key === KEYS.MINUS) {\n if (disableHotkeys.value) return\n e.preventDefault()\n scaleCanvas('-')\n }\n if (key === KEYS.EQUAL) {\n if (disableHotkeys.value) return\n e.preventDefault()\n scaleCanvas('+')\n }\n if (key === KEYS.DIGIT_0) {\n if (disableHotkeys.value) return\n e.preventDefault()\n setCanvasPercentage(90)\n }\n if (key === KEYS.TAB) {\n if (disableHotkeys.value) return\n e.preventDefault()\n tabActiveElement()\n }\n }\n \n const keyupListener = () => {\n if (ctrlKeyActive.value) store.commit(MutationTypes.SET_CTRL_KEY_STATE, false)\n if (shiftKeyActive.value) store.commit(MutationTypes.SET_SHIFT_KEY_STATE, false)\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n document.addEventListener('keyup', keyupListener)\n window.addEventListener('blur', keyupListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n document.removeEventListener('keyup', keyupListener)\n window.removeEventListener('blur', keyupListener)\n })\n}","import { computed, onMounted, onUnmounted } from 'vue'\nimport { useStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport usePasteTextClipboardData from './usePasteTextClipboardData'\nimport useCreateElement from './useCreateElement'\n\nexport default () => {\n const store = useStore()\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const thumbnailsFocus = computed(() => store.state.thumbnailsFocus)\n const disableHotkeys = computed(() => store.state.disableHotkeys)\n\n const { pasteTextClipboardData } = usePasteTextClipboardData()\n const { createImageElement } = useCreateElement()\n\n // 粘贴图片到幻灯片元素\n const pasteImageFile = (imageFile: File) => {\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n\n /**\n * 粘贴事件监听\n * @param e ClipboardEvent\n */\n const pasteListener = (e: ClipboardEvent) => {\n if (!editorAreaFocus.value && !thumbnailsFocus.value) return\n if (disableHotkeys.value) return\n\n if (!e.clipboardData) return\n\n const clipboardDataItems = e.clipboardData.items\n const clipboardDataFirstItem = clipboardDataItems[0]\n\n if (!clipboardDataFirstItem) return\n\n // 如果剪贴板内有图片,优先尝试读取图片\n for (const item of clipboardDataItems) {\n if (item.kind === 'file' && item.type.indexOf('image') !== -1) {\n const imageFile = item.getAsFile()\n if (imageFile) pasteImageFile(imageFile)\n return\n }\n }\n \n // 如果剪贴板内没有图片,但有文字内容,尝试解析文字内容\n if (clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => pasteTextClipboardData(text))\n }\n }\n\n onMounted(() => {\n document.addEventListener('paste', pasteListener)\n })\n onUnmounted(() => {\n document.removeEventListener('paste', pasteListener)\n })\n}","\n\n\n\n","export const childlessTags = ['style', 'script', 'template']\n\nexport const closingTags = ['html', 'head', 'body', 'p', 'dt', 'dd', 'li', 'option', 'thead', 'th', 'tbody', 'tr', 'td', 'tfoot', 'colgroup']\n\nexport const closingTagAncestorBreakers = {\n li: ['ul', 'ol', 'menu'],\n dt: ['dl'],\n dd: ['dl'],\n tbody: ['table'],\n thead: ['table'],\n tfoot: ['table'],\n tr: ['table'],\n td: ['table'],\n}\n\nexport const voidTags = ['!doctype', 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']","import { startsWith, endsWith } from 'lodash'\nimport { Token } from './types'\nimport { childlessTags } from './tags'\n\ninterface State {\n str: string;\n position: number;\n tokens: Token[];\n}\n\nconst jumpPosition = (state: State, end: number) => {\n const len = end - state.position\n movePositopn(state, len)\n}\n\nconst movePositopn = (state: State, len: number) => {\n state.position = state.position + len\n}\n\nconst findTextEnd = (str: string, index: number) => {\n const isEnd = false\n while (!isEnd) {\n const textEnd = str.indexOf('<', index)\n if (textEnd === -1) {\n return textEnd\n }\n const char = str.charAt(textEnd + 1)\n if (char === '/' || char === '!' || /[A-Za-z0-9]/.test(char)) {\n return textEnd\n }\n index = textEnd + 1\n }\n return -1\n}\n\nconst lexText = (state: State) => {\n const { str } = state\n let textEnd = findTextEnd(str, state.position)\n if (textEnd === state.position) return\n if (textEnd === -1) {\n textEnd = str.length\n }\n\n const content = str.slice(state.position, textEnd)\n jumpPosition(state, textEnd)\n\n state.tokens.push({\n type: 'text', \n content, \n })\n}\n\nconst lexComment = (state: State) => {\n const { str } = state\n\n movePositopn(state, 4)\n let contentEnd = str.indexOf('-->', state.position)\n let commentEnd = contentEnd + 3\n if (contentEnd === -1) {\n contentEnd = commentEnd = str.length\n }\n\n const content = str.slice(state.position, contentEnd)\n jumpPosition(state, commentEnd)\n\n state.tokens.push({\n type: 'comment',\n content,\n })\n}\n\nconst lexTagName = (state: State) => {\n const { str } = state\n const len = str.length\n let start = state.position\n\n while (start < len) {\n const char = str.charAt(start)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (isTagChar) break\n start++\n }\n\n let end = start + 1\n while (end < len) {\n const char = str.charAt(end)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (!isTagChar) break\n end++\n }\n\n jumpPosition(state, end)\n const tagName = str.slice(start, end)\n state.tokens.push({\n type: 'tag',\n content: tagName\n })\n return tagName\n}\n\nconst lexTagAttributes = (state: State) => {\n const { str, tokens } = state\n let cursor = state.position\n let quote = null\n let wordBegin = cursor\n const words = []\n const len = str.length\n while (cursor < len) {\n const char = str.charAt(cursor)\n if (quote) {\n const isQuoteEnd = char === quote\n if (isQuoteEnd) quote = null\n cursor++\n continue\n }\n\n const isTagEnd = char === '/' || char === '>'\n if (isTagEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n break\n }\n\n const isWordEnd = /\\s/.test(char)\n if (isWordEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n wordBegin = cursor + 1\n cursor++\n continue\n }\n\n const isQuoteStart = char === '\\'' || char === '\"'\n if (isQuoteStart) {\n quote = char\n cursor++\n continue\n }\n\n cursor++\n }\n jumpPosition(state, cursor)\n\n const type = 'attribute'\n for (let i = 0; i < words.length; i++) {\n const word = words[i]\n\n const isNotPair = word.indexOf('=') === -1\n if (isNotPair) {\n const secondWord = words[i + 1]\n if (secondWord && startsWith(secondWord, '=')) {\n if (secondWord.length > 1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n const thirdWord = words[i + 2]\n i += 1\n if (thirdWord) {\n const newWord = word + '=' + thirdWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n }\n }\n if (endsWith(word, '=')) {\n const secondWord = words[i + 1]\n if (secondWord && secondWord.indexOf('=') === -1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n\n const newWord = word.slice(0, -1)\n tokens.push({ type, content: newWord })\n continue\n }\n\n tokens.push({ type, content: word })\n }\n}\n\nconst lexSkipTag = (tagName: string, state: State) => {\n const { str, tokens } = state\n const safeTagName = tagName.toLowerCase()\n const len = str.length\n let index = state.position\n \n while (index < len) {\n const nextTag = str.indexOf(' {\n const { str } = state\n const secondChar = str.charAt(state.position + 1)\n const tagStartClose = secondChar === '/'\n movePositopn(state, tagStartClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-start',\n close: tagStartClose,\n })\n\n const tagName = lexTagName(state)\n lexTagAttributes(state)\n\n const firstChar = str.charAt(state.position)\n const tagEndClose = firstChar === '/'\n movePositopn(state, tagEndClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-end',\n close: tagEndClose,\n })\n return tagName\n}\n\nconst lex = (state: State) => {\n const str = state.str\n const len = str.length\n\n while (state.position < len) {\n const start = state.position\n lexText(state)\n\n if (state.position === start) {\n const isComment = startsWith(str, '!--', start + 1)\n if (isComment) lexComment(state)\n else {\n const tagName = lexTag(state)\n const safeTag = tagName.toLowerCase()\n if (childlessTags.includes(safeTag)) lexSkipTag(tagName, state)\n }\n }\n }\n}\n\nexport const lexer = (str: string): Token[] => {\n const state = {\n str,\n position: 0,\n tokens: [],\n }\n lex(state)\n return state.tokens\n}","import { Token, HTMLNode, TagToken, NormalElement, TagEndToken, AttributeToken, TextToken } from './types'\nimport { closingTags, closingTagAncestorBreakers, voidTags } from './tags'\n\ninterface StackItem {\n tagName: string | null;\n children: HTMLNode[];\n}\n\ninterface State {\n stack: StackItem[];\n cursor: number;\n tokens: Token[];\n}\n\nexport const parser = (tokens: Token[]) => {\n const root: StackItem = { tagName: null, children: [] }\n const state: State = { tokens, cursor: 0, stack: [root] }\n parse(state)\n return root.children\n}\n\nexport const hasTerminalParent = (tagName: string, stack: StackItem[]) => {\n const tagParents = closingTagAncestorBreakers[tagName]\n if (tagParents) {\n let currentIndex = stack.length - 1\n while (currentIndex >= 0) {\n const parentTagName = stack[currentIndex].tagName\n if (parentTagName === tagName) break\n if (tagParents.includes(parentTagName)) return true\n currentIndex--\n }\n }\n return false\n}\n\nexport const rewindStack = (stack: StackItem[], newLength: number) => {\n stack.splice(newLength)\n}\n\nexport const parse = (state: State) => {\n const { stack, tokens } = state\n let { cursor } = state\n let nodes = stack[stack.length - 1].children\n const len = tokens.length\n \n while (cursor < len) {\n const token = tokens[cursor]\n if (token.type !== 'tag-start') {\n nodes.push(token as TextToken)\n cursor++\n continue\n }\n\n const tagToken = tokens[++cursor] as TagToken\n cursor++\n const tagName = tagToken.content.toLowerCase()\n if (token.close) {\n let index = stack.length\n let shouldRewind = false\n while (--index > -1) {\n if (stack[index].tagName === tagName) {\n shouldRewind = true\n break\n }\n }\n while (cursor < len) {\n if (tokens[cursor].type !== 'tag-end') break\n cursor++\n }\n if (shouldRewind) {\n rewindStack(stack, index)\n break\n } \n else continue\n }\n\n const isClosingTag = closingTags.includes(tagName)\n let shouldRewindToAutoClose = isClosingTag\n if (shouldRewindToAutoClose) {\n shouldRewindToAutoClose = !hasTerminalParent(tagName, stack)\n }\n\n if (shouldRewindToAutoClose) {\n let currentIndex = stack.length - 1\n while (currentIndex > 0) {\n if (tagName === stack[currentIndex].tagName) {\n rewindStack(stack, currentIndex)\n const previousIndex = currentIndex - 1\n nodes = stack[previousIndex].children\n break\n }\n currentIndex = currentIndex - 1\n }\n }\n\n const attributes = []\n let tagEndToken: TagEndToken | undefined\n while (cursor < len) {\n const _token = tokens[cursor]\n if (_token.type === 'tag-end') {\n tagEndToken = _token\n break\n }\n attributes.push((_token as AttributeToken).content)\n cursor++\n }\n\n if (!tagEndToken) break\n\n cursor++\n const children: HTMLNode[] = []\n const elementNode: NormalElement = {\n type: 'element',\n tagName: tagToken.content,\n attributes,\n children,\n }\n nodes.push(elementNode)\n\n const hasChildren = !(tagEndToken.close || voidTags.includes(tagName))\n if (hasChildren) {\n stack.push({tagName, children})\n const innerState = { tokens, cursor, stack }\n parse(innerState)\n cursor = innerState.cursor\n }\n }\n state.cursor = cursor\n}","import { HTMLNode, CommentOrTextAST, ElementAST, AST } from './types'\n\nexport const splitHead = (str: string, sep: string) => {\n const idx = str.indexOf(sep)\n if (idx === -1) return [str]\n return [str.slice(0, idx), str.slice(idx + sep.length)]\n}\n\nconst unquote = (str: string) => {\n const car = str.charAt(0)\n const end = str.length - 1\n const isQuoteStart = car === '\"' || car === \"'\"\n if (isQuoteStart && car === str.charAt(end)) {\n return str.slice(1, end)\n }\n return str\n}\n\nconst formatAttributes = (attributes: string[]) => {\n return attributes.map(attribute => {\n const parts = splitHead(attribute.trim(), '=')\n const key = parts[0]\n const value = typeof parts[1] === 'string' ? unquote(parts[1]) : null\n return { key, value }\n })\n}\n\nexport const format = (nodes: HTMLNode[]): AST[] => {\n return nodes.map(node => { \n if (node.type === 'element') {\n const children = format(node.children)\n const item: ElementAST = {\n type: 'element',\n tagName: node.tagName.toLowerCase(),\n attributes: formatAttributes(node.attributes),\n children,\n }\n return item\n }\n\n const item: CommentOrTextAST = {\n type: node.type,\n content: node.content,\n }\n return item\n })\n}","// 参考:https://github.com/andrejewski/himalaya 用TypeScript重写并简化部分功能\n\nimport { lexer } from './lexer'\nimport { parser } from './parser'\nimport { format } from './format'\nimport { toHTML } from './stringify'\nimport type { AST } from './types'\n\nexport const toAST = (str: string) => {\n const tokens = lexer(str)\n const nodes = parser(tokens)\n return format(nodes)\n}\n\nexport { toHTML, AST }","import { SVGPathData } from 'svg-pathdata'\nimport arcToBezier from 'svg-arc-to-cubic-bezier'\n\nconst typeMap = {\n 1: 'Z',\n 2: 'M',\n 4: 'H',\n 8: 'V',\n 16: 'L',\n 32: 'C',\n 64: 'S',\n 128: 'Q',\n 256: 'T',\n 512: 'A',\n}\n\n/**\n * 简单解析SVG路径\n * @param d SVG path d属性\n */\nexport const parseSvgPath = (d: string) => {\n const pathData = new SVGPathData(d)\n\n const ret = pathData.commands.map(item => {\n return { ...item, type: typeMap[item.type] }\n })\n return ret\n}\n\nexport type SvgPath = ReturnType\n\n/**\n * 解析SVG路径,并将圆弧(A)类型的路径转为三次贝塞尔(C)类型的路径\n * @param d SVG path d属性\n */\nexport const toPoints = (d: string) => {\n const pathData = new SVGPathData(d)\n \n const points = []\n for (const item of pathData.commands) {\n const type = typeMap[item.type]\n\n if (item.type === 2 || item.type === 16) {\n points.push({\n x: item.x,\n y: item.y,\n relative: item.relative,\n type,\n })\n }\n if (item.type === 32) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'cubic',\n x1: item.x1,\n y1: item.y1,\n x2: item.x2,\n y2: item.y2,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 128) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'quadratic',\n x1: item.x1,\n y1: item.y1,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 512) {\n const lastPoint = points[points.length - 1]\n if (!['M', 'L', 'Q', 'C'].includes(lastPoint.type)) continue\n\n const cubicBezierPoints = arcToBezier({\n px: lastPoint.x as number,\n py: lastPoint.y as number,\n cx: item.x,\n cy: item.y,\n rx: item.rX,\n ry: item.rY,\n xAxisRotation: item.xRot,\n largeArcFlag: item.lArcFlag,\n sweepFlag: item.sweepFlag,\n })\n for (const cbPoint of cubicBezierPoints) {\n points.push({\n x: cbPoint.x, \n y: cbPoint.y,\n curve: {\n type: 'cubic',\n x1: cbPoint.x1,\n y1: cbPoint.y1,\n x2: cbPoint.x2,\n y2: cbPoint.y2,\n },\n relative: false,\n type: 'C',\n })\n }\n }\n else if (item.type === 1) {\n points.push({ close: true, type })\n }\n else continue\n }\n return points\n}\n\nexport type SvgPoints = ReturnType","// svg转base64图片,参考:https://github.com/scriptex/svg64\n\nconst characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nconst PREFIX = 'data:image/svg+xml;base64,'\n\nconst utf8Encode = (string: string) => {\n string = string.replace(/\\r\\n/g, '\\n')\n let utftext = ''\n\n for (let n = 0; n < string.length; n++) {\n const c = string.charCodeAt(n)\n\n if (c < 128) {\n utftext += String.fromCharCode(c)\n }\n else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode((c >> 6) | 192)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n else {\n utftext += String.fromCharCode((c >> 12) | 224)\n utftext += String.fromCharCode(((c >> 6) & 63) | 128)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n }\n\n return utftext\n}\n\nconst encode = (input: string) => {\n let output = ''\n let chr1, chr2, chr3, enc1, enc2, enc3, enc4\n let i = 0\n input = utf8Encode(input)\n while (i < input.length) {\n chr1 = input.charCodeAt(i++)\n chr2 = input.charCodeAt(i++)\n chr3 = input.charCodeAt(i++)\n enc1 = chr1 >> 2\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)\n enc4 = chr3 & 63\n if (isNaN(chr2)) enc3 = enc4 = 64\n else if (isNaN(chr3)) enc4 = 64\n output = output + characters.charAt(enc1) + characters.charAt(enc2) + characters.charAt(enc3) + characters.charAt(enc4)\n }\n return output\n}\n\nexport const svg2Base64 = (element: Element) => {\n const XMLS = new XMLSerializer()\n const svg = XMLS.serializeToString(element)\n\n return PREFIX + encode(svg)\n}","import { computed, ref } from 'vue'\nimport { trim } from 'lodash'\nimport { saveAs } from 'file-saver'\nimport pptxgen from 'pptxgenjs'\nimport tinycolor from 'tinycolor2'\nimport { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element'\nimport { AST, toAST } from '@/utils/htmlParser'\nimport { SvgPoints, toPoints } from '@/utils/svgPathParser'\nimport { svg2Base64 } from '@/utils/svg2Base64'\nimport { useStore } from '@/store'\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n\n const exporting = ref(false)\n \n // 导出JSON文件\n const exportJSON = () => {\n const blob = new Blob([JSON.stringify(slides.value)], { type: '' })\n saveAs(blob, 'pptist_slides.json')\n }\n\n // 格式化颜色值为 透明度 + HexString,供pptxgenjs使用\n const formatColor = (_color: string) => {\n const c = tinycolor(_color)\n const alpha = c.getAlpha()\n const color = alpha === 0 ? '#ffffff' : c.setAlpha(1).toHexString()\n return {\n alpha,\n color,\n }\n }\n\n type FormatColor = ReturnType\n\n // 将HTML字符串格式化为pptxgenjs所需的格式\n // 核心思路:将HTML字符串按样式分片平铺,每个片段需要继承祖先元素的样式信息,遇到块级元素需要换行\n const formatHTML = (html: string) => {\n const ast = toAST(html)\n\n const slices: pptxgen.TextProps[] = []\n const parse = (obj: AST[], baseStyleObj = {}) => {\n for (const item of obj) {\n if ('tagName' in item && ['div', 'ul', 'li', 'p'].includes(item.tagName) && slices.length) {\n const lastSlice = slices[slices.length - 1]\n if (!lastSlice.options) lastSlice.options = {}\n lastSlice.options.breakLine = true\n }\n\n const styleObj = { ...baseStyleObj }\n const styleAttr = 'attributes' in item ? item.attributes.find(attr => attr.key === 'style') : null\n if (styleAttr && styleAttr.value) {\n const styleArr = styleAttr.value.split(';')\n for (const styleItem of styleArr) {\n const [_key, _value] = styleItem.split(': ')\n const [key, value] = [trim(_key), trim(_value)]\n if (key && value) styleObj[key] = value\n }\n }\n\n if ('tagName' in item) {\n if (item.tagName === 'em') {\n styleObj['font-style'] = 'italic'\n }\n if (item.tagName === 'strong') {\n styleObj['font-weight'] = 'bold'\n }\n if (item.tagName === 'sup') {\n styleObj['vertical-align'] = 'super'\n }\n if (item.tagName === 'sub') {\n styleObj['vertical-align'] = 'sub'\n }\n }\n\n if ('tagName' in item && item.tagName === 'br') {\n slices.push({ text: '', options: { breakLine: true } })\n }\n else if ('content' in item) {\n const text = item.content.replace(/\\n/g, '').replace(/ /g, ' ')\n const options: pptxgen.TextPropsOptions = {}\n\n if (styleObj['font-size']) {\n options.fontSize = parseInt(styleObj['font-size']) * 0.75\n }\n if (styleObj['color']) {\n options.color = formatColor(styleObj['color']).color\n }\n if (styleObj['background-color']) {\n options.highlight = formatColor(styleObj['background-color']).color\n }\n if (styleObj['text-decoration-line']) {\n if (styleObj['text-decoration-line'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration-line'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['text-decoration']) {\n if (styleObj['text-decoration'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['vertical-align']) {\n if (styleObj['vertical-align'] === 'super') options.superscript = true\n if (styleObj['vertical-align'] === 'sub') options.subscript = true\n }\n if (styleObj['text-align']) options.align = styleObj['text-align']\n if (styleObj['font-weight']) options.bold = styleObj['font-weight'] === 'bold'\n if (styleObj['font-style']) options.italic = styleObj['font-style'] === 'italic'\n if (styleObj['font-family']) options.fontFace = styleObj['font-family']\n\n slices.push({ text, options })\n }\n else if ('children' in item) parse(item.children, styleObj)\n }\n }\n parse(ast)\n return slices\n }\n\n type Points = Array<\n | { x: number; y: number; moveTo?: boolean }\n | { x: number; y: number; curve: { type: 'arc'; hR: number; wR: number; stAng: number; swAng: number } }\n | { x: number; y: number; curve: { type: 'quadratic'; x1: number; y1: number } }\n | { x: number; y: number; curve: { type: 'cubic'; x1: number; y1: number; x2: number; y2: number } }\n | { close: true }\n >\n\n // 将SVG路径信息格式化为pptxgenjs所需要的格式\n const formatPoints = (points: SvgPoints, scale = { x: 1, y: 1 }): Points => {\n return points.map(point => {\n if (point.close !== undefined) {\n return { close: true }\n }\n else if (point.type === 'M') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n moveTo: true,\n }\n }\n else if (point.curve) {\n if (point.curve.type === 'cubic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'cubic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n x2: (point.curve.x2 as number) / 100 * scale.x,\n y2: (point.curve.y2 as number) / 100 * scale.y,\n },\n }\n }\n else if (point.curve.type === 'quadratic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'quadratic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n },\n }\n }\n }\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n }\n })\n }\n\n // 导出PPTX文件\n const exportPPTX = () => {\n exporting.value = true\n const pptx = new pptxgen()\n\n for (const slide of slides.value) {\n const pptxSlide = pptx.addSlide()\n\n if (slide.background) {\n const background = slide.background\n if (background.type === 'image' && background.image) {\n pptxSlide.background = { data: background.image }\n }\n else if (background.type === 'solid' && background.color) {\n const c = formatColor(background.color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n else if (background.type === 'gradient' && background.gradientColor) {\n const [color1, color2] = background.gradientColor\n const color = tinycolor.mix(color1, color2).toHexString()\n const c = formatColor(color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n }\n\n if (!slide.elements) continue\n\n for (const el of slide.elements) {\n if (el.type === 'text') {\n const textProps = formatHTML(el.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: 'middle',\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.wordSpace) options.charSpacing = el.wordSpace * 0.75\n if (el.lineHeight) options.lineSpacingMultiple = el.lineHeight * 0.75\n if (el.fill) {\n const c = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n options.fill = { color: c.color, transparency: (1 - c.alpha * opacity) * 100 }\n }\n if (el.defaultColor) options.color = formatColor(el.defaultColor).color\n if (el.defaultFontName) options.fontFace = el.defaultFontName\n if (el.shadow) {\n const c = formatColor(el.shadow.color)\n options.shadow = {\n type: 'outer',\n color: c.color.replace('#', ''),\n opacity: c.alpha,\n blur: el.shadow.blur * 0.75,\n offset: (el.shadow.h + el.shadow.v) / 2 * 0.75,\n angle: 45,\n }\n }\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addText(textProps, options)\n }\n\n else if (el.type === 'image') {\n const options: pptxgen.ImageProps = {\n path: el.src,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.rotate) options.rotate = el.rotate\n if (el.clip && el.clip.shape === 'ellipse') options.rounding = true\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addImage(options)\n }\n\n else if (el.type === 'shape') {\n if (el.special) {\n const svgRef = document.querySelector(`.thumbnail-list .base-element-${el.id} svg`) as HTMLElement\n const base64SVG = svg2Base64(svgRef)\n\n const options: pptxgen.ImageProps = {\n data: base64SVG,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addImage(options)\n }\n else {\n const scale = {\n x: el.width / el.viewBox,\n y: el.height / el.viewBox,\n }\n const points = formatPoints(toPoints(el.path), scale)\n \n const fillColor = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n \n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fill: { color: fillColor.color, transparency: (1 - fillColor.alpha * opacity) * 100 },\n points,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.outline?.width) {\n options.line = {\n color: formatColor(el.outline?.color || '#000000').color, \n width: el.outline.width * 0.75, \n dashType: el.outline.style === 'solid' ? 'solid' : 'dash',\n }\n }\n if (el.shadow) {\n const c = formatColor(el.shadow.color)\n options.shadow = {\n type: 'outer',\n color: c.color.replace('#', ''),\n opacity: c.alpha,\n blur: el.shadow.blur * 0.75,\n offset: (el.shadow.h + el.shadow.v) / 2 * 0.75,\n angle: 45,\n }\n }\n if (el.link) options.hyperlink = { url: el.link }\n\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n if (el.text) {\n const textProps = formatHTML(el.text.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: el.text.align,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.text.defaultColor) options.color = formatColor(el.text.defaultColor).color\n if (el.text.defaultFontName) options.fontFace = el.text.defaultFontName\n\n pptxSlide.addText(textProps, options)\n }\n }\n\n else if (el.type === 'line') {\n const path = getLineElementPath(el)\n const points = formatPoints(toPoints(path))\n const { minX, maxX, minY, maxY } = getElementRange(el)\n\n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: (maxX - minX) / 100,\n h: (maxY - minY) / 100,\n line: {\n color: formatColor(el.color).color, \n width: el.width * 0.75, \n dashType: el.style === 'solid' ? 'solid' : 'dash',\n beginArrowType: el.points[0] ? 'arrow' : 'none',\n endArrowType: el.points[1] ? 'arrow' : 'none',\n },\n points,\n }\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n\n else if (el.type === 'chart') {\n const chartData = []\n for (let i = 0; i < el.data.series.length; i++) {\n const item = el.data.series[i]\n chartData.push({\n name: `系列${i + 1}`,\n labels: el.data.labels,\n values: item,\n })\n }\n\n let chartColors: string[] = []\n if (el.themeColor.length === 10) chartColors = el.themeColor.map(color => formatColor(color).color)\n else if (el.themeColor.length === 1) chartColors = tinycolor(el.themeColor[0]).analogous(10).map(color => formatColor(color.toHexString()).color)\n else {\n const len = el.themeColor.length\n const supplement = tinycolor(el.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n chartColors = [...el.themeColor.slice(0, len - 1), ...supplement].map(color => formatColor(color).color)\n }\n \n const options: pptxgen.IChartOpts = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n chartColors: el.chartType === 'pie' ? chartColors : chartColors.slice(0, el.data.series.length),\n }\n\n if (el.fill) options.fill = formatColor(el.fill).color\n if (el.legend) {\n options.showLegend = true\n options.legendPos = el.legend === 'top' ? 't' : 'b'\n options.legendColor = formatColor(el.gridColor || '#000000').color\n options.legendFontSize = 14 * 0.75\n }\n\n let type = pptx.ChartType.bar\n if (el.chartType === 'bar') {\n type = pptx.ChartType.bar\n options.barDir = el.options?.horizontalBars ? 'bar' : 'col'\n }\n else if (el.chartType === 'line') {\n if (el.options?.showArea) type = pptx.ChartType.area\n else if (el.options?.showLine === false) {\n type = pptx.ChartType.scatter\n\n chartData.unshift({ name: 'X-Axis', values: Array(el.data.series[0].length).fill(0).map((v, i) => i) })\n options.lineSize = 0\n }\n else type = pptx.ChartType.line\n\n if (el.options?.lineSmooth) options.lineSmooth = true\n }\n else if (el.chartType === 'pie') {\n if (el.options?.donut) {\n type = pptx.ChartType.doughnut\n options.holeSize = 75\n }\n else type = pptx.ChartType.pie\n }\n \n pptxSlide.addChart(type, chartData, options)\n }\n\n else if (el.type === 'table') {\n const hiddenCells = []\n for (let i = 0; i < el.data.length; i++) {\n const rowData = el.data[i]\n\n for (let j = 0; j < rowData.length; j++) {\n const cell = rowData[j]\n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) hiddenCells.push(`${row}_${col}`)\n }\n }\n }\n }\n\n const tableData = []\n\n const theme = el.theme\n let themeColor: FormatColor | null = null\n let subThemeColors: FormatColor[] = []\n if (theme) {\n themeColor = formatColor(theme.color)\n subThemeColors = getTableSubThemeColor(theme.color).map(item => formatColor(item))\n }\n\n for (let i = 0; i < el.data.length; i++) {\n const row = el.data[i]\n const _row = []\n\n for (let j = 0; j < row.length; j++) {\n const cell = row[j]\n const cellOptions: pptxgen.TableCellProps = {\n colspan: cell.colspan,\n rowspan: cell.rowspan,\n bold: cell.style?.bold || false,\n italic: cell.style?.em || false,\n underline: { style: cell.style?.underline ? 'sng' : 'none' },\n align: cell.style?.align || 'left',\n valign: 'middle',\n fontFace: cell.style?.fontname || '微软雅黑',\n fontSize: (cell.style?.fontsize ? parseInt(cell.style?.fontsize) : 14) * 0.75,\n }\n if (theme && themeColor) {\n let c: FormatColor\n if (i % 2 === 0) c = subThemeColors[1]\n else c = subThemeColors[0]\n\n if (theme.rowHeader && i === 0) c = themeColor\n else if (theme.rowFooter && i === el.data.length - 1) c = themeColor\n else if (theme.colHeader && j === 0) c = themeColor\n else if (theme.colFooter && j === row.length - 1) c = themeColor\n\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.backcolor) {\n const c = formatColor(cell.style.backcolor)\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.color) cellOptions.color = formatColor(cell.style.color).color\n\n if (!hiddenCells.includes(`${i}_${j}`)) {\n _row.push({\n text: cell.text,\n options: cellOptions,\n })\n }\n }\n if (_row.length) tableData.push(_row)\n }\n\n const options: pptxgen.TableProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n colW: el.colWidths.map(item => el.width * item / 100),\n }\n if (el.outline.width && el.outline.color) {\n options.border = {\n type: el.outline.style === 'solid' ? 'solid' : 'dash',\n pt: el.outline.width * 0.75,\n color: formatColor(el.outline.color).color,\n }\n }\n\n pptxSlide.addTable(tableData, options)\n }\n }\n }\n pptx.writeFile({ fileName: `pptist.pptx` }).then(() => exporting.value = false).catch(() => {\n exporting.value = false\n message.error('导出失败')\n })\n }\n\n return {\n exporting,\n exportJSON,\n exportPPTX,\n }\n}","\n\n\n\n","import { render } from \"./HotkeyDoc.vue?vue&type=template&id=47d0351b&scoped=true\"\nimport script from \"./HotkeyDoc.vue?vue&type=script&lang=js\"\nexport * from \"./HotkeyDoc.vue?vue&type=script&lang=js\"\n\nimport \"./HotkeyDoc.vue?vue&type=style&index=0&id=47d0351b&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-47d0351b\"\n\nexport default script","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useExport from '@/hooks/useExport'\n\nimport HotkeyDoc from './HotkeyDoc.vue'\n\nexport default defineComponent({\n name: 'editor-header',\n components: {\n HotkeyDoc,\n },\n setup() {\n const store = useStore()\n\n const { enterScreening, enterScreeningFromStart } = useScreening()\n const { createSlide, deleteSlide, resetSlides } = useSlideHandler()\n const { redo, undo } = useHistorySnapshot()\n const { exporting, exportJSON, exportPPTX } = useExport()\n\n const showGridLines = computed(() => store.state.showGridLines)\n const toggleGridLines = () => {\n store.commit(MutationTypes.SET_GRID_LINES_STATE, !showGridLines.value)\n }\n\n const hotkeyDrawerVisible = ref(false)\n\n const goIssues = () => {\n window.open('https://github.com/pipipi-pikachu/PPTist/issues')\n }\n\n return {\n redo,\n undo,\n showGridLines,\n hotkeyDrawerVisible,\n exporting,\n enterScreening,\n enterScreeningFromStart,\n createSlide,\n deleteSlide,\n toggleGridLines,\n resetSlides,\n exportJSON,\n exportPPTX,\n goIssues,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=13ca7328&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=13ca7328&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-13ca7328\"\n\nexport default script","\n\n\n\n","// 清除文字选区\nexport const removeAllRanges = () => {\n const selection = window.getSelection()\n selection && selection.removeAllRanges()\n}","import { ref, computed, onMounted, onUnmounted, Ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nexport default (canvasRef: Ref) => {\n const viewportLeft = ref(0)\n const viewportTop = ref(0)\n\n const store = useStore()\n const canvasPercentage = computed(() => store.state.canvasPercentage)\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n // 计算画布可视区域的位置\n const setViewportPosition = () => {\n if (!canvasRef.value) return\n const canvasWidth = canvasRef.value.clientWidth\n const canvasHeight = canvasRef.value.clientHeight\n\n if (canvasHeight / canvasWidth > viewportRatio.value) {\n const viewportActualWidth = canvasWidth * (canvasPercentage.value / 100)\n store.commit(MutationTypes.SET_CANVAS_SCALE, viewportActualWidth / VIEWPORT_SIZE)\n viewportLeft.value = (canvasWidth - viewportActualWidth) / 2\n viewportTop.value = (canvasHeight - viewportActualWidth * viewportRatio.value) / 2\n }\n else {\n const viewportActualHeight = canvasHeight * (canvasPercentage.value / 100)\n store.commit(MutationTypes.SET_CANVAS_SCALE, viewportActualHeight / (VIEWPORT_SIZE * viewportRatio.value))\n viewportLeft.value = (canvasWidth - viewportActualHeight / viewportRatio.value) / 2\n viewportTop.value = (canvasHeight - viewportActualHeight) / 2\n }\n }\n\n // 可视区域缩放或比例变化时,更新可视区域的位置\n watch([canvasPercentage, viewportRatio], setViewportPosition)\n\n // 画布可视区域位置和大小的样式\n const viewportStyles = computed(() => ({\n width: VIEWPORT_SIZE,\n height: VIEWPORT_SIZE * viewportRatio.value,\n left: viewportLeft.value,\n top: viewportTop.value,\n }))\n\n // 监听画布尺寸发生变化时,更新可视区域的位置\n const resizeObserver = new ResizeObserver(setViewportPosition)\n\n onMounted(() => {\n if (canvasRef.value) resizeObserver.observe(canvasRef.value)\n })\n onUnmounted(() => {\n if (canvasRef.value) resizeObserver.unobserve(canvasRef.value)\n })\n\n return {\n viewportStyles,\n }\n}","import { Ref, reactive, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementRange } from '@/utils/element'\n\nexport default (elementList: Ref, viewportRef: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const mouseSelectionState = reactive({\n isShow: false,\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n quadrant: 1,\n })\n\n // 更新鼠标框选范围\n const updateMouseSelection = (e: MouseEvent) => {\n if (!viewportRef.value) return\n\n let isMouseDown = true\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n const minSelectionRange = 5\n \n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const left = (startPageX - viewportRect.x) / canvasScale.value\n const top = (startPageY - viewportRect.y) / canvasScale.value\n\n // 确定框选的起始位置和其他默认值初始化\n mouseSelectionState.isShow = false\n mouseSelectionState.quadrant = 4\n mouseSelectionState.top = top\n mouseSelectionState.left = left\n mouseSelectionState.width = 0\n mouseSelectionState.height = 0\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const offsetWidth = (currentPageX - startPageX) / canvasScale.value\n const offsetHeight = (currentPageY - startPageY) / canvasScale.value\n\n const width = Math.abs(offsetWidth)\n const height = Math.abs(offsetHeight)\n\n if ( width < minSelectionRange || height < minSelectionRange ) return\n \n // 计算鼠标框选(移动)的方向\n // 按四个象限的位置区分,如右下角为第四象限\n let quadrant = 0\n if ( offsetWidth > 0 && offsetHeight > 0 ) quadrant = 4\n else if ( offsetWidth < 0 && offsetHeight < 0 ) quadrant = 1\n else if ( offsetWidth > 0 && offsetHeight < 0 ) quadrant = 2\n else if ( offsetWidth < 0 && offsetHeight > 0 ) quadrant = 3\n\n // 更新框选范围\n mouseSelectionState.isShow = true\n mouseSelectionState.quadrant = quadrant\n mouseSelectionState.width = width\n mouseSelectionState.height = height\n }\n\n document.onmouseup = () => {\n document.onmousemove = null\n document.onmouseup = null\n isMouseDown = false\n\n // 计算画布中的元素是否处在鼠标选择范围中,处在范围中的元素设置为被选中状态\n let inRangeElementList: PPTElement[] = []\n for (let i = 0; i < elementList.value.length; i++) {\n const element = elementList.value[i]\n const mouseSelectionLeft = mouseSelectionState.left\n const mouseSelectionTop = mouseSelectionState.top\n const mouseSelectionWidth = mouseSelectionState.width\n const mouseSelectionHeight = mouseSelectionState.height\n\n const quadrant = mouseSelectionState.quadrant\n\n const { minX, maxX, minY, maxY } = getElementRange(element)\n\n // 计算元素是否处在框选范围内时,四个框选方向的计算方式有差异\n let isInclude = false\n if (quadrant === 4) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > mouseSelectionTop && \n maxY < mouseSelectionTop + mouseSelectionHeight\n }\n else if (quadrant === 1) {\n isInclude = minX > (mouseSelectionLeft - mouseSelectionWidth) && \n maxX < (mouseSelectionLeft - mouseSelectionWidth) + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (quadrant === 2) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (quadrant === 3) {\n isInclude = minX > (mouseSelectionLeft - mouseSelectionWidth) && \n maxX < (mouseSelectionLeft - mouseSelectionWidth) + mouseSelectionWidth && \n minY > mouseSelectionTop && \n maxY < mouseSelectionTop + mouseSelectionHeight\n }\n\n // 被锁定的元素即使在范围内,也不需要设置为选中状态\n if (isInclude && !element.lock) inRangeElementList.push(element)\n }\n\n // 如果范围内有组合元素的成员,需要该组全部成员都处在范围内,才会被设置为选中状态\n inRangeElementList = inRangeElementList.filter(inRangeElement => {\n if (inRangeElement.groupId) {\n const inRangeElementIdList = inRangeElementList.map(inRangeElement => inRangeElement.id)\n const groupElementList = elementList.value.filter(element => element.groupId === inRangeElement.groupId)\n return groupElementList.every(groupElement => inRangeElementIdList.includes(groupElement.id))\n }\n return true\n })\n const inRangeElementIdList = inRangeElementList.map(inRangeElement => inRangeElement.id)\n if (inRangeElementIdList.length) store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, inRangeElementIdList)\n\n mouseSelectionState.isShow = false\n }\n }\n\n return {\n mouseSelectionState,\n updateMouseSelection,\n }\n}","import { computed, onMounted, onUnmounted, Ref } from 'vue'\nimport { useStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (elementRef: Ref) => {\n const store = useStore()\n const disableHotkeys = computed(() => store.state.disableHotkeys)\n\n const { createImageElement, createTextElement } = useCreateElement()\n\n // 拖拽元素到画布中\n const handleDrop = (e: DragEvent) => {\n if (!e.dataTransfer || e.dataTransfer.items.length === 0) return\n const dataTransferItem = e.dataTransfer.items[0]\n\n // 检查事件对象中是否存在图片,存在则插入图片,否则继续检查是否存在文字,存在则插入文字\n if (dataTransferItem.kind === 'file' && dataTransferItem.type.indexOf('image') !== -1) {\n const imageFile = dataTransferItem.getAsFile()\n if (imageFile) {\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n }\n else if (dataTransferItem.kind === 'string' && dataTransferItem.type === 'text/plain') {\n dataTransferItem.getAsString(text => {\n if (disableHotkeys.value) return\n const string = parseText2Paragraphs(text)\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, string)\n })\n }\n }\n\n onMounted(() => {\n elementRef.value && elementRef.value.addEventListener('drop', handleDrop)\n\n document.ondragleave = e => e.preventDefault()\n document.ondrop = e => e.preventDefault()\n document.ondragenter = e => e.preventDefault()\n document.ondragover = e => e.preventDefault()\n })\n onUnmounted(() => {\n elementRef.value && elementRef.value.removeEventListener('drop', handleDrop)\n\n document.ondragleave = null\n document.ondrop = null\n document.ondragenter = null\n document.ondragover = null\n })\n}","import { Ref, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTTextElement, PPTImageElement, PPTShapeElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\n/**\n * 计算给定坐标到原点连线的弧度\n * @param x 坐标x\n * @param y 坐标y\n */\nconst getAngleFromCoordinate = (x: number, y: number) => {\n const radian = Math.atan2(x, y)\n const angle = 180 / Math.PI * radian\n return angle\n}\n\nexport default (elementList: Ref, viewportRef: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 旋转元素\n const rotateElement = (element: PPTTextElement | PPTImageElement | PPTShapeElement) => {\n let isMouseDown = true\n let angle = 0\n const elOriginRotate = element.rotate || 0\n\n const elLeft = element.left\n const elTop = element.top\n const elWidth = element.width\n const elHeight = element.height\n\n // 元素中心点(旋转中心点)\n const centerX = elLeft + elWidth / 2\n const centerY = elTop + elHeight / 2\n\n if (!viewportRef.value) return\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n // 计算当前鼠标位置相对元素中心点连线的角度(弧度)\n const mouseX = (e.pageX - viewportRect.left) / canvasScale.value\n const mouseY = (e.pageY - viewportRect.top) / canvasScale.value\n const x = mouseX - centerX\n const y = centerY - mouseY\n\n angle = getAngleFromCoordinate(x, y)\n\n // 靠近45倍数的角度时有吸附效果\n const sorptionRange = 5\n if ( Math.abs(angle) <= sorptionRange ) angle = 0\n else if ( angle > 0 && Math.abs(angle - 45) <= sorptionRange ) angle -= (angle - 45)\n else if ( angle < 0 && Math.abs(angle + 45) <= sorptionRange ) angle -= (angle + 45)\n else if ( angle > 0 && Math.abs(angle - 90) <= sorptionRange ) angle -= (angle - 90)\n else if ( angle < 0 && Math.abs(angle + 90) <= sorptionRange ) angle -= (angle + 90)\n else if ( angle > 0 && Math.abs(angle - 135) <= sorptionRange ) angle -= (angle - 135)\n else if ( angle < 0 && Math.abs(angle + 135) <= sorptionRange ) angle -= (angle + 135)\n else if ( angle > 0 && Math.abs(angle - 180) <= sorptionRange ) angle -= (angle - 180)\n else if ( angle < 0 && Math.abs(angle + 180) <= sorptionRange ) angle -= (angle + 180)\n\n elementList.value = elementList.value.map(el => element.id === el.id ? { ...el, rotate: angle } : el)\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n if (elOriginRotate === angle) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n rotateElement,\n }\n}","export const ELEMENT_TYPE_ZH = {\n text: '文本',\n image: '图片',\n shape: '形状',\n line: '线条',\n chart: '图表',\n table: '表格',\n}\n\nexport const MIN_SIZE = {\n text: 20,\n image: 20,\n shape: 15,\n chart: 200,\n table: 20,\n}","import { computed, Ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTImageElement, PPTLineElement, PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandlers, AlignmentLineProps, MultiSelectRange } from '@/types/edit'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { MIN_SIZE } from '@/configs/element'\nimport { AlignLine, uniqAlignLines } from '@/utils/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface RotateElementData {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n/**\n * 计算旋转后的元素八个缩放点的位置\n * @param element 元素原始位置大小信息\n * @param angle 旋转角度\n */\nconst getRotateElementPoints = (element: RotateElementData, angle: number) => {\n const { left, top, width, height } = element\n\n const radius = Math.sqrt( Math.pow(width, 2) + Math.pow(height, 2) ) / 2\n const auxiliaryAngle = Math.atan(height / width) * 180 / Math.PI\n\n const tlbraRadian = (180 - angle - auxiliaryAngle) * Math.PI / 180\n const trblaRadian = (auxiliaryAngle - angle) * Math.PI / 180\n const taRadian = (90 - angle) * Math.PI / 180\n const raRadian = angle * Math.PI / 180\n\n const halfWidth = width / 2\n const halfHeight = height / 2\n\n const middleLeft = left + halfWidth\n const middleTop = top + halfHeight\n\n const leftTopPoint = {\n left: middleLeft + radius * Math.cos(tlbraRadian),\n top: middleTop - radius * Math.sin(tlbraRadian),\n }\n const topPoint = {\n left: middleLeft + halfHeight * Math.cos(taRadian),\n top: middleTop - halfHeight * Math.sin(taRadian),\n }\n const rightTopPoint = {\n left: middleLeft + radius * Math.cos(trblaRadian),\n top: middleTop - radius * Math.sin(trblaRadian),\n }\n const rightPoint = {\n left: middleLeft + halfWidth * Math.cos(raRadian),\n top: middleTop + halfWidth * Math.sin(raRadian),\n }\n const rightBottomPoint = {\n left: middleLeft - radius * Math.cos(tlbraRadian),\n top: middleTop + radius * Math.sin(tlbraRadian),\n }\n const bottomPoint = {\n left: middleLeft - halfHeight * Math.sin(raRadian),\n top: middleTop + halfHeight * Math.cos(raRadian),\n }\n const leftBottomPoint = {\n left: middleLeft - radius * Math.cos(trblaRadian),\n top: middleTop + radius * Math.sin(trblaRadian),\n }\n const leftPoint = {\n left: middleLeft - halfWidth * Math.cos(raRadian),\n top: middleTop - halfWidth * Math.sin(raRadian),\n }\n\n return { leftTopPoint, topPoint, rightTopPoint, rightPoint, rightBottomPoint, bottomPoint, leftBottomPoint, leftPoint }\n}\n\n/**\n * 获取元素某缩放点相对的另一个点的位置,如:【上】对应【下】、【左上】对应【右下】\n * @param direction 当前操作的缩放点\n * @param points 旋转后的元素八个缩放点的位置\n */\nconst getOppositePoint = (direction: string, points: ReturnType): { left: number; top: number } => {\n const oppositeMap = {\n [OperateResizeHandlers.RIGHT_BOTTOM]: points.leftTopPoint,\n [OperateResizeHandlers.LEFT_BOTTOM]: points.rightTopPoint,\n [OperateResizeHandlers.LEFT_TOP]: points.rightBottomPoint,\n [OperateResizeHandlers.RIGHT_TOP]: points.leftBottomPoint,\n [OperateResizeHandlers.TOP]: points.bottomPoint,\n [OperateResizeHandlers.BOTTOM]: points.topPoint,\n [OperateResizeHandlers.LEFT]: points.rightPoint,\n [OperateResizeHandlers.RIGHT]: points.leftPoint,\n }\n return oppositeMap[direction]\n}\n\nexport default (\n elementList: Ref,\n alignmentLines: Ref,\n) => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const canvasScale = computed(() => store.state.canvasScale)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 缩放元素\n const scaleElement = (e: MouseEvent, element: Exclude, command: OperateResizeHandlers) => {\n let isMouseDown = true\n store.commit(MutationTypes.SET_SCALING_STATE, true)\n\n const elOriginLeft = element.left\n const elOriginTop = element.top\n const elOriginWidth = element.width\n const elOriginHeight = element.height\n \n const elRotate = ('rotate' in element && element.rotate) ? element.rotate : 0\n const rotateRadian = Math.PI * elRotate / 180\n\n const fixedRatio = ctrlOrShiftKeyActive.value || ('fixedRatio' in element && element.fixedRatio)\n const aspectRatio = elOriginWidth / elOriginHeight\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n // 元素最小缩放限制\n const minSize = MIN_SIZE[element.type] || 20\n const getSizeWithinRange = (size: number) => size < minSize ? minSize : size\n\n let points: ReturnType\n let baseLeft = 0\n let baseTop = 0\n let horizontalLines: AlignLine[] = []\n let verticalLines: AlignLine[] = []\n\n // 旋转后的元素进行缩放时,引入基点的概念,以当前操作的缩放点相对的点为基点\n // 例如拖动右下角缩放时,左上角为基点,需要保持左上角不变然后修改其他的点的位置来达到所放的效果\n if ('rotate' in element && element.rotate) {\n const { left, top, width, height } = element\n points = getRotateElementPoints({ left, top, width, height }, elRotate)\n const oppositePoint = getOppositePoint(command, points)\n\n baseLeft = oppositePoint.left\n baseTop = oppositePoint.top\n }\n\n // 未旋转的元素具有缩放时的对齐吸附功能,在这处收集对齐对齐吸附线\n // 包括页面内除目标元素外的其他元素在画布中的各个可吸附对齐位置:上下左右四边\n // 其中线条和被旋转过的元素不参与吸附对齐\n else {\n const edgeWidth = VIEWPORT_SIZE\n const edgeHeight = VIEWPORT_SIZE * viewportRatio.value\n const isActiveGroupElement = element.id === activeGroupElementId.value\n \n for (const el of elementList.value) {\n if ('rotate' in el && el.rotate) continue\n if (el.type === 'line') continue\n if (isActiveGroupElement && el.id === element.id) continue\n if (!isActiveGroupElement && activeElementIdList.value.includes(el.id)) continue\n\n const left = el.left\n const top = el.top\n const width = el.width\n const height = el.height\n const right = left + width\n const bottom = top + height\n\n const topLine: AlignLine = { value: top, range: [left, right] }\n const bottomLine: AlignLine = { value: bottom, range: [left, right] }\n const leftLine: AlignLine = { value: left, range: [top, bottom] }\n const rightLine: AlignLine = { value: right, range: [top, bottom] }\n\n horizontalLines.push(topLine, bottomLine)\n verticalLines.push(leftLine, rightLine)\n }\n\n // 画布可视区域的四个边界、水平中心、垂直中心\n const edgeTopLine: AlignLine = { value: 0, range: [0, edgeWidth] }\n const edgeBottomLine: AlignLine = { value: edgeHeight, range: [0, edgeWidth] }\n const edgeHorizontalCenterLine: AlignLine = { value: edgeHeight / 2, range: [0, edgeWidth] }\n const edgeLeftLine: AlignLine = { value: 0, range: [0, edgeHeight] }\n const edgeRightLine: AlignLine = { value: edgeWidth, range: [0, edgeHeight] }\n const edgeVerticalCenterLine: AlignLine = { value: edgeWidth / 2, range: [0, edgeHeight] }\n\n horizontalLines.push(edgeTopLine, edgeBottomLine, edgeHorizontalCenterLine)\n verticalLines.push(edgeLeftLine, edgeRightLine, edgeVerticalCenterLine)\n \n horizontalLines = uniqAlignLines(horizontalLines)\n verticalLines = uniqAlignLines(verticalLines)\n }\n \n // 对齐吸附方法\n // 将收集到的对齐吸附线与计算的目标元素当前的位置大小相关数据做对比,差值小于设定的值时执行自动缩放校正\n // 水平和垂直两个方向需要分开计算\n const alignedAdsorption = (currentX: number | null, currentY: number | null) => {\n const sorptionRange = 5\n\n const _alignmentLines: AlignmentLineProps[] = []\n let isVerticalAdsorbed = false\n let isHorizontalAdsorbed = false\n const correctionVal = { offsetX: 0, offsetY: 0 }\n \n if (currentY || currentY === 0) {\n for (let i = 0; i < horizontalLines.length; i++) {\n const { value, range } = horizontalLines[i]\n const min = Math.min(...range, currentX || 0)\n const max = Math.max(...range, currentX || 0)\n \n if (Math.abs(currentY - value) < sorptionRange && !isHorizontalAdsorbed) {\n correctionVal.offsetY = currentY - value\n isHorizontalAdsorbed = true\n _alignmentLines.push({ type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100 })\n }\n }\n }\n if (currentX || currentX === 0) {\n for (let i = 0; i < verticalLines.length; i++) {\n const { value, range } = verticalLines[i]\n const min = Math.min(...range, (currentY || 0))\n const max = Math.max(...range, (currentY || 0))\n\n if (Math.abs(currentX - value) < sorptionRange && !isVerticalAdsorbed) {\n correctionVal.offsetX = currentX - value\n isVerticalAdsorbed = true\n _alignmentLines.push({ type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100 })\n }\n }\n }\n alignmentLines.value = _alignmentLines\n return correctionVal\n }\n\n // 开始缩放\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = currentPageX - startPageX\n const y = currentPageY - startPageY\n\n let width = elOriginWidth\n let height = elOriginHeight\n let left = elOriginLeft\n let top = elOriginTop\n \n // 元素被旋转的情况下,需要根据元素旋转的角度,重新计算需要缩放的距离(鼠标按下后移动的距离)\n if (elRotate) {\n const revisedX = (Math.cos(rotateRadian) * x + Math.sin(rotateRadian) * y) / canvasScale.value\n let revisedY = (Math.cos(rotateRadian) * y - Math.sin(rotateRadian) * x) / canvasScale.value\n\n // 锁定宽高比例(仅四个角可能触发,四条边不会触发)\n // 以水平方向上缩放的距离为基础,计算垂直方向上的缩放距离,保持二者具有相同的缩放比例\n if (fixedRatio) {\n if (command === OperateResizeHandlers.RIGHT_BOTTOM || command === OperateResizeHandlers.LEFT_TOP) revisedY = revisedX / aspectRatio\n if (command === OperateResizeHandlers.LEFT_BOTTOM || command === OperateResizeHandlers.RIGHT_TOP) revisedY = -revisedX / aspectRatio\n }\n\n // 根据不同的操作点分别计算元素缩放后的大小和位置\n // 需要注意:\n // 此处计算的位置需要在后面重新进行校正,因为旋转后再缩放事实上会改变元素基点的位置(虽然视觉上基点保持不动,但这是【旋转】+【移动】共同作用的结果)\n // 但此处计算的大小不需要重新校正,因为前面已经重新计算需要缩放的距离,相当于大小已经经过了校正\n if (command === OperateResizeHandlers.RIGHT_BOTTOM) {\n width = getSizeWithinRange(elOriginWidth + revisedX)\n height = getSizeWithinRange(elOriginHeight + revisedY)\n }\n else if (command === OperateResizeHandlers.LEFT_BOTTOM) {\n width = getSizeWithinRange(elOriginWidth - revisedX)\n height = getSizeWithinRange(elOriginHeight + revisedY)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.LEFT_TOP) {\n width = getSizeWithinRange(elOriginWidth - revisedX)\n height = getSizeWithinRange(elOriginHeight - revisedY)\n left = elOriginLeft - (width - elOriginWidth)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.RIGHT_TOP) {\n width = getSizeWithinRange(elOriginWidth + revisedX)\n height = getSizeWithinRange(elOriginHeight - revisedY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.TOP) {\n height = getSizeWithinRange(elOriginHeight - revisedY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.BOTTOM) {\n height = getSizeWithinRange(elOriginHeight + revisedY)\n }\n else if (command === OperateResizeHandlers.LEFT) {\n width = getSizeWithinRange(elOriginWidth - revisedX)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.RIGHT) {\n width = getSizeWithinRange(elOriginWidth + revisedX)\n }\n\n // 获取当前元素的基点坐标,与初始状态时的基点坐标进行对比,并计算差值进行元素位置的校正\n const currentPoints = getRotateElementPoints({ width, height, left, top }, elRotate)\n const currentOppositePoint = getOppositePoint(command, currentPoints)\n const currentBaseLeft = currentOppositePoint.left\n const currentBaseTop = currentOppositePoint.top\n\n const offsetX = currentBaseLeft - baseLeft\n const offsetY = currentBaseTop - baseTop\n\n left = left - offsetX\n top = top - offsetY\n }\n\n // 元素未被旋转的情况下,正常计算新的位置大小即可,无需复杂的校正等工作\n // 额外需要处理对齐吸附相关的操作\n // 锁定宽高比例相关的操作同上,不再赘述\n else {\n let moveX = x / canvasScale.value\n let moveY = y / canvasScale.value\n\n if (fixedRatio) {\n if (command === OperateResizeHandlers.RIGHT_BOTTOM || command === OperateResizeHandlers.LEFT_TOP) moveY = moveX / aspectRatio\n if (command === OperateResizeHandlers.LEFT_BOTTOM || command === OperateResizeHandlers.RIGHT_TOP) moveY = -moveX / aspectRatio\n }\n\n if (command === OperateResizeHandlers.RIGHT_BOTTOM) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + elOriginWidth + moveX, elOriginTop + elOriginHeight + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = moveY * aspectRatio\n else moveY = moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth + moveX)\n height = getSizeWithinRange(elOriginHeight + moveY)\n }\n else if (command === OperateResizeHandlers.LEFT_BOTTOM) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + moveX, elOriginTop + elOriginHeight + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = -moveY * aspectRatio\n else moveY = -moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth - moveX)\n height = getSizeWithinRange(elOriginHeight + moveY)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.LEFT_TOP) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + moveX, elOriginTop + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = moveY * aspectRatio\n else moveY = moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth - moveX)\n height = getSizeWithinRange(elOriginHeight - moveY)\n left = elOriginLeft - (width - elOriginWidth)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.RIGHT_TOP) {\n const { offsetX, offsetY } = alignedAdsorption(elOriginLeft + elOriginWidth + moveX, elOriginTop + moveY)\n moveX = moveX - offsetX\n moveY = moveY - offsetY\n if (fixedRatio) {\n if (offsetY) moveX = -moveY * aspectRatio\n else moveY = -moveX / aspectRatio\n }\n width = getSizeWithinRange(elOriginWidth + moveX)\n height = getSizeWithinRange(elOriginHeight - moveY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.LEFT) {\n const { offsetX } = alignedAdsorption(elOriginLeft + moveX, null)\n moveX = moveX - offsetX\n width = getSizeWithinRange(elOriginWidth - moveX)\n left = elOriginLeft - (width - elOriginWidth)\n }\n else if (command === OperateResizeHandlers.RIGHT) {\n const { offsetX } = alignedAdsorption(elOriginLeft + elOriginWidth + moveX, null)\n moveX = moveX - offsetX\n width = getSizeWithinRange(elOriginWidth + moveX)\n }\n else if (command === OperateResizeHandlers.TOP) {\n const { offsetY } = alignedAdsorption(null, elOriginTop + moveY)\n moveY = moveY - offsetY\n height = getSizeWithinRange(elOriginHeight - moveY)\n top = elOriginTop - (height - elOriginHeight)\n }\n else if (command === OperateResizeHandlers.BOTTOM) {\n const { offsetY } = alignedAdsorption(null, elOriginTop + elOriginHeight + moveY)\n moveY = moveY - offsetY\n height = getSizeWithinRange(elOriginHeight + moveY)\n }\n }\n \n elementList.value = elementList.value.map(el => element.id === el.id ? { ...el, left, top, width, height } : el)\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n alignmentLines.value = []\n \n if (startPageX === e.pageX && startPageY === e.pageY) return\n \n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n store.commit(MutationTypes.SET_SCALING_STATE, false)\n \n addHistorySnapshot()\n }\n }\n\n // 多选元素缩放\n const scaleMultiElement = (e: MouseEvent, range: MultiSelectRange, command: OperateResizeHandlers) => {\n let isMouseDown = true\n \n const { minX, maxX, minY, maxY } = range\n const operateWidth = maxX - minX\n const operateHeight = maxY - minY\n const aspectRatio = operateWidth / operateHeight\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const originElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList.value))\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = (currentPageX - startPageX) / canvasScale.value\n let y = (currentPageY - startPageY) / canvasScale.value\n\n // 锁定宽高比例,逻辑同上\n if (ctrlOrShiftKeyActive.value) {\n if (command === OperateResizeHandlers.RIGHT_BOTTOM || command === OperateResizeHandlers.LEFT_TOP) y = x / aspectRatio\n if (command === OperateResizeHandlers.LEFT_BOTTOM || command === OperateResizeHandlers.RIGHT_TOP) y = -x / aspectRatio\n }\n\n // 所有选中元素的整体范围\n let currentMinX = minX\n let currentMaxX = maxX\n let currentMinY = minY\n let currentMaxY = maxY\n\n if (command === OperateResizeHandlers.RIGHT_BOTTOM) {\n currentMaxX = maxX + x\n currentMaxY = maxY + y\n }\n else if (command === OperateResizeHandlers.LEFT_BOTTOM) {\n currentMinX = minX + x\n currentMaxY = maxY + y\n }\n else if (command === OperateResizeHandlers.LEFT_TOP) {\n currentMinX = minX + x\n currentMinY = minY + y\n }\n else if (command === OperateResizeHandlers.RIGHT_TOP) {\n currentMaxX = maxX + x\n currentMinY = minY + y\n }\n else if (command === OperateResizeHandlers.TOP) {\n currentMinY = minY + y\n }\n else if (command === OperateResizeHandlers.BOTTOM) {\n currentMaxY = maxY + y\n }\n else if (command === OperateResizeHandlers.LEFT) {\n currentMinX = minX + x\n }\n else if (command === OperateResizeHandlers.RIGHT) {\n currentMaxX = maxX + x\n }\n\n // 所有选中元素的整体宽高\n const currentOppositeWidth = currentMaxX - currentMinX\n const currentOppositeHeight = currentMaxY - currentMinY\n\n // 当前正在操作元素宽高占所有选中元素的整体宽高的比例\n let widthScale = currentOppositeWidth / operateWidth\n let heightScale = currentOppositeHeight / operateHeight\n\n if (widthScale <= 0) widthScale = 0\n if (heightScale <= 0) heightScale = 0\n \n // 根据前面计算的比例,计算并修改所有选中元素的位置大小\n elementList.value = elementList.value.map(el => {\n if ((el.type === 'image' || el.type === 'shape') && activeElementIdList.value.includes(el.id)) {\n const originElement = originElementList.find(originEl => originEl.id === el.id) as PPTImageElement | PPTShapeElement\n return {\n ...el,\n width: originElement.width * widthScale,\n height: originElement.height * heightScale,\n left: currentMinX + (originElement.left - minX) * widthScale,\n top: currentMinY + (originElement.top - minY) * heightScale,\n }\n }\n return el\n })\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n if (startPageX === e.pageX && startPageY === e.pageY) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n scaleElement,\n scaleMultiElement,\n }\n}","import { Ref, computed } from 'vue'\nimport { uniq } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\n\nexport default (\n elementList: Ref,\n moveElement: (e: MouseEvent, element: PPTElement) => void,\n) => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const handleElementId = computed(() => store.state.handleElementId)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n // 选中元素\n // startMove 表示是否需要再选中操作后进入到开始移动的状态\n const selectElement = (e: MouseEvent, element: PPTElement, startMove = true) => {\n if (!editorAreaFocus.value) store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n\n // 如果目标元素当前未被选中,则将他设为选中状态\n // 此时如果按下Ctrl键或Shift键,则进入多选状态,将当前已选中的元素和目标元素一起设置为选中状态,否则仅将目标元素设置为选中状态\n // 如果目标元素是分组成员,需要将该组合的其他元素一起设置为选中状态\n if (!activeElementIdList.value.includes(element.id)) {\n let newActiveIdList: string[] = []\n\n if (ctrlOrShiftKeyActive.value) {\n newActiveIdList = [...activeElementIdList.value, element.id]\n }\n else newActiveIdList = [element.id]\n \n if (element.groupId) {\n const groupMembersId: string[] = []\n elementList.value.forEach((el: PPTElement) => {\n if (el.groupId === element.groupId) groupMembersId.push(el.id)\n })\n newActiveIdList = [...newActiveIdList, ...groupMembersId]\n }\n\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, uniq(newActiveIdList))\n store.commit(MutationTypes.SET_HANDLE_ELEMENT_ID, element.id)\n }\n\n // 如果目标元素已被选中,且按下了Ctrl键或Shift键,则取消其被选中状态\n // 除非目标元素是最后的一个被选中元素,或者目标元素所在的组合是最后一组选中组合\n // 如果目标元素是分组成员,需要将该组合的其他元素一起取消选中状态\n else if (ctrlOrShiftKeyActive.value) {\n let newActiveIdList: string[] = []\n\n if (element.groupId) {\n const groupMembersId: string[] = []\n elementList.value.forEach((el: PPTElement) => {\n if (el.groupId === element.groupId) groupMembersId.push(el.id)\n })\n newActiveIdList = activeElementIdList.value.filter(id => !groupMembersId.includes(id))\n }\n else {\n newActiveIdList = activeElementIdList.value.filter(id => id !== element.id)\n }\n\n if (newActiveIdList.length > 0) {\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, newActiveIdList)\n }\n }\n\n // 如果目标元素已被选中,同时目标元素不是当前操作元素,则将其设置为当前操作元素\n else if (handleElementId.value !== element.id) {\n store.commit(MutationTypes.SET_HANDLE_ELEMENT_ID, element.id)\n }\n\n // 如果目标元素已被选中,同时也是当前操作元素,那么当目标元素在该状态下再次被点击时,将被设置为多选元素中的激活成员\n else if (activeGroupElementId.value !== element.id) {\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n ;(e.target as HTMLElement).onmouseup = (e: MouseEvent) => {\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n if (startPageX === currentPageX && startPageY === currentPageY) {\n store.commit(MutationTypes.SET_ACTIVE_GROUP_ELEMENT_ID, element.id)\n ;(e.target as HTMLElement).onmouseup = null\n }\n }\n }\n\n if (startMove) moveElement(e, element)\n }\n\n // 选中页面内的全部元素\n const selectAllElement = () => {\n const unlockedElements = elementList.value.filter(el => !el.lock)\n const newActiveElementIdList = unlockedElements.map(el => el.id)\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, newActiveElementIdList)\n }\n\n return {\n selectElement,\n selectAllElement,\n }\n}\n","import { Ref, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { AlignmentLineProps } from '@/types/edit'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { getRectRotatedRange, AlignLine, uniqAlignLines } from '@/utils/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default (\n elementList: Ref,\n alignmentLines: Ref,\n) => {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const canvasScale = computed(() => store.state.canvasScale)\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const dragElement = (e: MouseEvent, element: PPTElement) => {\n if (!activeElementIdList.value.includes(element.id)) return\n let isMouseDown = true\n\n const edgeWidth = VIEWPORT_SIZE\n const edgeHeight = VIEWPORT_SIZE * viewportRatio.value\n \n const sorptionRange = 5\n\n const originElementList: PPTElement[] = JSON.parse(JSON.stringify(elementList.value))\n const originActiveElementList = originElementList.filter(el => activeElementIdList.value.includes(el.id))\n \n const elOriginLeft = element.left\n const elOriginTop = element.top\n const elOriginWidth = element.width\n const elOriginHeight = ('height' in element && element.height) ? element.height : 0\n const elOriginRotate = ('rotate' in element && element.rotate) ? element.rotate : 0\n \n const startPageX = e.pageX\n const startPageY = e.pageY\n\n let isMisoperation: boolean | null = null\n\n const isActiveGroupElement = element.id === activeGroupElementId.value\n\n // 收集对齐对齐吸附线\n // 包括页面内除目标元素外的其他元素在画布中的各个可吸附对齐位置:上下左右四边,水平中心、垂直中心\n // 其中线条和被旋转过的元素需要重新计算他们在画布中的中心点位置的范围\n let horizontalLines: AlignLine[] = []\n let verticalLines: AlignLine[] = []\n\n for (const el of elementList.value) {\n if (el.type === 'line') continue\n if (isActiveGroupElement && el.id === element.id) continue\n if (!isActiveGroupElement && activeElementIdList.value.includes(el.id)) continue\n\n let left, top, width, height\n if ('rotate' in el && el.rotate) {\n const { xRange, yRange } = getRectRotatedRange({\n left: el.left,\n top: el.top,\n width: el.width,\n height: el.height,\n rotate: el.rotate,\n })\n left = xRange[0]\n top = yRange[0]\n width = xRange[1] - xRange[0]\n height = yRange[1] - yRange[0]\n }\n else {\n left = el.left\n top = el.top\n width = el.width\n height = el.height\n }\n \n const right = left + width\n const bottom = top + height\n const centerX = top + height / 2\n const centerY = left + width / 2\n\n const topLine: AlignLine = { value: top, range: [left, right] }\n const bottomLine: AlignLine = { value: bottom, range: [left, right] }\n const horizontalCenterLine: AlignLine = { value: centerX, range: [left, right] }\n const leftLine: AlignLine = { value: left, range: [top, bottom] }\n const rightLine: AlignLine = { value: right, range: [top, bottom] }\n const verticalCenterLine: AlignLine = { value: centerY, range: [top, bottom] }\n\n horizontalLines.push(topLine, bottomLine, horizontalCenterLine)\n verticalLines.push(leftLine, rightLine, verticalCenterLine)\n }\n\n // 画布可视区域的四个边界、水平中心、垂直中心\n const edgeTopLine: AlignLine = { value: 0, range: [0, edgeWidth] }\n const edgeBottomLine: AlignLine = { value: edgeHeight, range: [0, edgeWidth] }\n const edgeHorizontalCenterLine: AlignLine = { value: edgeHeight / 2, range: [0, edgeWidth] }\n const edgeLeftLine: AlignLine = { value: 0, range: [0, edgeHeight] }\n const edgeRightLine: AlignLine = { value: edgeWidth, range: [0, edgeHeight] }\n const edgeVerticalCenterLine: AlignLine = { value: edgeWidth / 2, range: [0, edgeHeight] }\n\n horizontalLines.push(edgeTopLine, edgeBottomLine, edgeHorizontalCenterLine)\n verticalLines.push(edgeLeftLine, edgeRightLine, edgeVerticalCenterLine)\n \n // 对齐吸附线去重\n horizontalLines = uniqAlignLines(horizontalLines)\n verticalLines = uniqAlignLines(verticalLines)\n\n // 开始移动\n document.onmousemove = e => {\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n // 如果鼠标滑动距离过小,则将操作判定为误操作:\n // 如果误操作标记为null,表示是第一次触发移动,需要计算当前是否是误操作\n // 如果误操作标记为true,表示当前还处在误操作范围内,但仍然需要继续计算检查后续操作是否还处于误操作\n // 如果误操作标记为false,表示已经脱离了误操作范围,不需要再次计算\n if (isMisoperation !== false) {\n isMisoperation = Math.abs(startPageX - currentPageX) < sorptionRange && \n Math.abs(startPageY - currentPageY) < sorptionRange\n }\n if (!isMouseDown || isMisoperation) return\n\n const moveX = (currentPageX - startPageX) / canvasScale.value\n const moveY = (currentPageY - startPageY) / canvasScale.value\n\n // 基础目标位置\n let targetLeft = elOriginLeft + moveX\n let targetTop = elOriginTop + moveY\n\n // 计算目标元素在画布中的位置范围,用于吸附对齐\n // 需要区分单选和多选两种情况,其中多选状态下需要计算多选元素的整体范围;单选状态下需要继续区分线条、普通元素、旋转后的普通元素三种情况\n let targetMinX: number, targetMaxX: number, targetMinY: number, targetMaxY: number\n\n if (activeElementIdList.value.length === 1 || isActiveGroupElement) {\n if (elOriginRotate) {\n const { xRange, yRange } = getRectRotatedRange({\n left: targetLeft,\n top: targetTop,\n width: elOriginWidth,\n height: elOriginHeight,\n rotate: elOriginRotate,\n })\n targetMinX = xRange[0]\n targetMaxX = xRange[1]\n targetMinY = yRange[0]\n targetMaxY = yRange[1]\n }\n else if (element.type === 'line') {\n targetMinX = targetLeft\n targetMaxX = targetLeft + Math.max(element.start[0], element.end[0])\n targetMinY = targetTop\n targetMaxY = targetTop + Math.max(element.start[1], element.end[1])\n }\n else {\n targetMinX = targetLeft\n targetMaxX = targetLeft + elOriginWidth\n targetMinY = targetTop\n targetMaxY = targetTop + elOriginHeight\n }\n }\n else {\n const leftValues = []\n const topValues = []\n const rightValues = []\n const bottomValues = []\n \n for (let i = 0; i < originActiveElementList.length; i++) {\n const element = originActiveElementList[i]\n const left = element.left + moveX\n const top = element.top + moveY\n const width = element.width\n const height = ('height' in element && element.height) ? element.height : 0\n const rotate = ('rotate' in element && element.rotate) ? element.rotate : 0\n\n if ('rotate' in element && element.rotate) {\n const { xRange, yRange } = getRectRotatedRange({ left, top, width, height, rotate })\n leftValues.push(xRange[0])\n topValues.push(yRange[0])\n rightValues.push(xRange[1])\n bottomValues.push(yRange[1])\n }\n else if (element.type === 'line') {\n leftValues.push(left)\n topValues.push(top)\n rightValues.push(left + Math.max(element.start[0], element.end[0]))\n bottomValues.push(top + Math.max(element.start[1], element.end[1]))\n }\n else {\n leftValues.push(left)\n topValues.push(top)\n rightValues.push(left + width)\n bottomValues.push(top + height)\n }\n }\n\n targetMinX = Math.min(...leftValues)\n targetMaxX = Math.max(...rightValues)\n targetMinY = Math.min(...topValues)\n targetMaxY = Math.max(...bottomValues)\n }\n \n const targetCenterX = targetMinX + (targetMaxX - targetMinX) / 2\n const targetCenterY = targetMinY + (targetMaxY - targetMinY) / 2\n\n // 将收集到的对齐吸附线与计算的目标元素位置范围做对比,二者的差小于设定的值时执行自动对齐校正\n // 水平和垂直两个方向需要分开计算\n const _alignmentLines: AlignmentLineProps[] = []\n let isVerticalAdsorbed = false\n let isHorizontalAdsorbed = false\n for (let i = 0; i < horizontalLines.length; i++) {\n const { value, range } = horizontalLines[i]\n const min = Math.min(...range, targetMinX, targetMaxX)\n const max = Math.max(...range, targetMinX, targetMaxX)\n \n if (Math.abs(targetMinY - value) < sorptionRange && !isHorizontalAdsorbed) {\n targetTop = targetTop - (targetMinY - value)\n isHorizontalAdsorbed = true\n _alignmentLines.push({type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100})\n }\n if (Math.abs(targetMaxY - value) < sorptionRange && !isHorizontalAdsorbed) {\n targetTop = targetTop - (targetMaxY - value)\n isHorizontalAdsorbed = true\n _alignmentLines.push({type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100})\n }\n if (Math.abs(targetCenterY - value) < sorptionRange && !isHorizontalAdsorbed) {\n targetTop = targetTop - (targetCenterY - value)\n isHorizontalAdsorbed = true\n _alignmentLines.push({type: 'horizontal', axis: {x: min - 50, y: value}, length: max - min + 100})\n }\n }\n for (let i = 0; i < verticalLines.length; i++) {\n const { value, range } = verticalLines[i]\n const min = Math.min(...range, targetMinY, targetMaxY)\n const max = Math.max(...range, targetMinY, targetMaxY)\n\n if (Math.abs(targetMinX - value) < sorptionRange && !isVerticalAdsorbed) {\n targetLeft = targetLeft - (targetMinX - value)\n isVerticalAdsorbed = true\n _alignmentLines.push({type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100})\n }\n if (Math.abs(targetMaxX - value) < sorptionRange && !isVerticalAdsorbed) {\n targetLeft = targetLeft - (targetMaxX - value)\n isVerticalAdsorbed = true\n _alignmentLines.push({type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100})\n }\n if (Math.abs(targetCenterX - value) < sorptionRange && !isVerticalAdsorbed) {\n targetLeft = targetLeft - (targetCenterX - value)\n isVerticalAdsorbed = true\n _alignmentLines.push({type: 'vertical', axis: {x: value, y: min - 50}, length: max - min + 100})\n }\n }\n alignmentLines.value = _alignmentLines\n \n // 单选状态下,或者当前选中的多个元素中存在正在操作的元素时,仅修改正在操作的元素的位置\n if (activeElementIdList.value.length === 1 || isActiveGroupElement) {\n elementList.value = elementList.value.map(el => {\n return el.id === element.id ? { ...el, left: targetLeft, top: targetTop } : el\n })\n }\n\n // 多选状态下,除了修改正在操作的元素的位置,其他被选中的元素也需要修改位置信息\n // 其他被选中的元素的位置信息通过正在操作的元素的移动偏移量来进行计算\n else {\n const handleElement = elementList.value.find(el => el.id === element.id)\n if (!handleElement) return\n\n elementList.value = elementList.value.map(el => {\n if (activeElementIdList.value.includes(el.id)) {\n if (el.id === element.id) {\n return {\n ...el,\n left: targetLeft,\n top: targetTop,\n }\n }\n return {\n ...el,\n left: el.left + (targetLeft - handleElement.left),\n top: el.top + (targetTop - handleElement.top),\n }\n }\n return el\n })\n }\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n alignmentLines.value = []\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n if (startPageX === currentPageX && startPageY === currentPageY) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragElement,\n }\n}","import { Ref, computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTLineElement } from '@/types/slides'\nimport { OperateLineHandler, OperateLineHandlers } from '@/types/edit'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface AdsorptionPoint {\n x: number;\n y: number;\n}\n\nexport default (elementList: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 拖拽线条端点\n const dragLineElement = (e: MouseEvent, element: PPTLineElement, command: OperateLineHandler) => {\n let isMouseDown = true\n\n const sorptionRange = 8\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const adsorptionPoints: AdsorptionPoint[] = []\n\n // 获取所有线条以外的未旋转的元素的8个缩放点作为吸附位置\n for (let i = 0; i < elementList.value.length; i++) {\n const _element = elementList.value[i]\n if (_element.type === 'line' || ('rotate' in _element && _element.rotate)) continue\n\n const left = _element.left\n const top = _element.top\n const width = _element.width\n const height = _element.height\n \n const right = left + width\n const bottom = top + height\n const centerX = top + height / 2\n const centerY = left + width / 2\n\n const topPoint = { x: centerY, y: top }\n const bottomPoint = { x: centerY, y: bottom }\n const leftPoint = { x: left, y: centerX }\n const rightPoint = { x: right, y: centerX }\n\n const leftTopPoint = { x: left, y: top }\n const rightTopPoint = { x: right, y: top }\n const leftBottomPoint = { x: left, y: bottom }\n const rightBottomPoint = { x: right, y: bottom }\n\n adsorptionPoints.push(\n topPoint,\n bottomPoint,\n leftPoint,\n rightPoint,\n leftTopPoint,\n rightTopPoint,\n leftBottomPoint,\n rightBottomPoint,\n )\n }\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const moveX = (currentPageX - startPageX) / canvasScale.value\n const moveY = (currentPageY - startPageY) / canvasScale.value\n \n // 线条起点和终点在编辑区域中的位置\n let startX = element.left + element.start[0]\n let startY = element.top + element.start[1]\n let endX = element.left + element.end[0]\n let endY = element.top + element.end[1]\n\n const mid = element.broken || element.curve || [0, 0]\n let midX = element.left + mid[0]\n let midY = element.top + mid[1]\n\n // 拖拽起点或终点的位置\n // 水平和垂直方向上有吸附\n if (command === OperateLineHandlers.START) {\n startX = startX + moveX\n startY = startY + moveY\n\n if (Math.abs(startX - endX) < sorptionRange) startX = endX\n if (Math.abs(startY - endY) < sorptionRange) startY = endY\n\n for (const adsorptionPoint of adsorptionPoints) {\n const { x, y } = adsorptionPoint\n if (Math.abs(x - startX) < sorptionRange && Math.abs(y - startY) < sorptionRange) {\n startX = x\n startY = y\n break\n }\n }\n }\n else if (command === OperateLineHandlers.END) {\n endX = endX + moveX\n endY = endY + moveY\n\n if (Math.abs(startX - endX) < sorptionRange) endX = startX\n if (Math.abs(startY - endY) < sorptionRange) endY = startY\n\n for (const adsorptionPoint of adsorptionPoints) {\n const { x, y } = adsorptionPoint\n if (Math.abs(x - endX) < sorptionRange && Math.abs(y - endY) < sorptionRange) {\n endX = x\n endY = y\n break\n }\n }\n }\n else {\n midX = midX + moveX\n midY = midY + moveY\n\n if (Math.abs(midX - startX) < sorptionRange) midX = startX\n if (Math.abs(midY - startY) < sorptionRange) midY = startY\n if (Math.abs(midX - endX) < sorptionRange) midX = endX\n if (Math.abs(midY - endY) < sorptionRange) midY = endY\n if (Math.abs(midX - (startX + endX) / 2) < sorptionRange && Math.abs(midY - (startY + endY) / 2) < sorptionRange) {\n midX = (startX + endX) / 2\n midY = (startY + endY) / 2\n }\n }\n\n // 计算更新起点和终点基于自身元素位置的坐标\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n const start: [number, number] = [0, 0]\n const end: [number, number] = [maxX - minX, maxY - minY]\n if (startX > endX) {\n start[0] = maxX - minX\n end[0] = 0\n }\n if (startY > endY) {\n start[1] = maxY - minY\n end[1] = 0\n }\n\n elementList.value = elementList.value.map(el => {\n if (el.id === element.id) {\n const newEl: PPTLineElement = {\n ...(el as PPTLineElement),\n left: minX,\n top: minY,\n start: start,\n end: end,\n }\n if (command !== OperateLineHandlers.MID) {\n if (element.broken) newEl.broken = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n if (element.curve) newEl.curve = [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]\n }\n else {\n if (element.broken) newEl.broken = [midX - minX, midY - minY]\n if (element.curve) newEl.curve = [midX - minX, midY - minY]\n }\n return newEl\n }\n return el\n })\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n if (startPageX === currentPageX && startPageY === currentPageY) return\n\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragLineElement,\n }\n}","import { computed, Ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { CreateElementSelectionData, CreatingLineElement, CreatingShapeElement } from '@/types/edit'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (viewportRef: Ref) => {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const creatingElement = computed(() => store.state.creatingElement)\n\n // 通过鼠标框选时的起点和终点,计算选区的位置大小\n const formatCreateSelection = (selectionData: CreateElementSelectionData) => {\n const { start, end } = selectionData\n\n if (!viewportRef.value) return\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n const [startX, startY] = start\n const [endX, endY] = end\n const minX = Math.min(startX, endX)\n const maxX = Math.max(startX, endX)\n const minY = Math.min(startY, endY)\n const maxY = Math.max(startY, endY)\n\n const left = (minX - viewportRect.x) / canvasScale.value\n const top = (minY - viewportRect.y) / canvasScale.value\n const width = (maxX - minX) / canvasScale.value\n const height = (maxY - minY) / canvasScale.value\n\n return { left, top, width, height }\n }\n\n // 通过鼠标框选时的起点和终点,计算线条在画布中的位置和起点终点\n const formatCreateSelectionForLine = (selectionData: CreateElementSelectionData) => {\n const { start, end } = selectionData\n\n if (!viewportRef.value) return\n const viewportRect = viewportRef.value.getBoundingClientRect()\n\n const [startX, startY] = start\n const [endX, endY] = end\n const minX = Math.min(startX, endX)\n const maxX = Math.max(startX, endX)\n const minY = Math.min(startY, endY)\n const maxY = Math.max(startY, endY)\n\n const left = (minX - viewportRect.x) / canvasScale.value\n const top = (minY - viewportRect.y) / canvasScale.value\n const width = (maxX - minX) / canvasScale.value\n const height = (maxY - minY) / canvasScale.value\n\n const _start: [number, number] = [\n startX === minX ? 0 : width,\n startY === minY ? 0 : height,\n ]\n const _end: [number, number] = [\n endX === minX ? 0 : width,\n endY === minY ? 0 : height,\n ]\n\n return {\n left,\n top,\n start: _start,\n end: _end,\n }\n }\n\n const { createTextElement, createShapeElement, createLineElement } = useCreateElement()\n\n // 根据鼠标选区的位置大小插入元素\n const insertElementFromCreateSelection = (selectionData: CreateElementSelectionData) => {\n if (!creatingElement.value) return\n\n const type = creatingElement.value.type\n if (type === 'text') {\n const position = formatCreateSelection(selectionData)\n position && createTextElement(position)\n }\n else if (type === 'shape') {\n const position = formatCreateSelection(selectionData)\n position && createShapeElement(position, (creatingElement.value as CreatingShapeElement).data)\n }\n else if (type === 'line') {\n const position = formatCreateSelectionForLine(selectionData)\n position && createLineElement(position, (creatingElement.value as CreatingLineElement).data)\n }\n store.commit(MutationTypes.SET_CREATING_ELEMENT, null)\n }\n\n return {\n insertElementFromCreateSelection,\n }\n}","\n\n","import { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\n\nexport const enum ElementTypes {\n TEXT = 'text',\n IMAGE = 'image',\n SHAPE = 'shape',\n LINE = 'line',\n CHART = 'chart',\n TABLE = 'table',\n}\n\n/**\n * 元素阴影\n * \n * h: 水平偏移量\n * \n * v: 垂直偏移量\n * \n * blur: 模糊程度\n * \n * color: 阴影颜色\n */\nexport interface PPTElementShadow {\n h: number;\n v: number;\n blur: number;\n color: string;\n}\n\n/**\n * 元素边框\n * \n * style?: 边框样式(实线或虚线)\n * \n * width?: 边框宽度\n * \n * color?: 边框颜色\n */\nexport interface PPTElementOutline {\n style?: 'dashed' | 'solid';\n width?: number;\n color?: string;\n}\n\n\n/**\n * 元素通用属性\n * \n * id: 元素ID\n * \n * left: 元素水平方向位置(距离画布左侧)\n * \n * top: 元素垂直方向位置(距离画布顶部)\n * \n * lock?: 锁定元素\n * \n * groupId?: 组合ID(拥有相同组合ID的元素即为同一组合元素成员)\n * \n * width: 元素宽度\n * \n * height: 元素高度\n * \n * link?: 超链接地址\n */\ninterface PPTBaseElement {\n id: string;\n left: number;\n top: number;\n lock?: boolean;\n groupId?: string;\n width: number;\n height: number;\n link?: string;\n}\n\n\n/**\n * 文本元素\n * \n * type: 元素类型(text)\n * \n * content: 文本内容(HTML字符串)\n * \n * rotate: 旋转角度\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * outline?: 边框\n * \n * fill?: 填充色\n * \n * lineHeight?: 行高(倍),默认1.5\n * \n * wordSpace?: 字间距,默认0\n * \n * opacity?: 不透明度,默认1\n * \n * shadow?: 阴影\n */\nexport interface PPTTextElement extends PPTBaseElement {\n type: 'text';\n content: string;\n rotate: number;\n defaultFontName: string;\n defaultColor: string;\n outline?: PPTElementOutline;\n fill?: string;\n lineHeight?: number;\n wordSpace?: number;\n opacity?: number;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 图片翻转、形状翻转\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n */\nexport interface ImageOrShapeFlip {\n flipH?: boolean;\n flipV?: boolean;\n}\n\n/**\n * 图片滤镜\n * \n * https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter\n * \n * 'blur'?: 模糊,默认0(px)\n * \n * 'brightness'?: 亮度,默认100(%)\n * \n * 'contrast'?: 对比度,默认100(%)\n * \n * 'grayscale'?: 灰度,默认0(%)\n * \n * 'saturate'?: 饱和度,默认100(%)\n * \n * 'hue-rotate'?: 色相旋转,默认0(deg)\n * \n * 'opacity'?: 不透明度,默认100(%)\n */\nexport interface ImageElementFilters {\n 'blur'?: string;\n 'brightness'?: string;\n 'contrast'?: string;\n 'grayscale'?: string;\n 'saturate'?: string;\n 'hue-rotate'?: string;\n 'opacity'?: string;\n}\n\n/**\n * 图片裁剪\n * \n * range: 裁剪范围,例如:[[10, 10], [90, 90]] 表示裁取原图从左上角 10%, 10% 到 90%, 90% 的范围\n * \n * shape: 裁剪形状,见 configs/imageClip.ts CLIPPATHS \n */\nexport interface ImageElementClip {\n range: [[number, number], [number, number]];\n shape: string;\n}\n\n/**\n * 图片元素\n * \n * type: 元素类型(image)\n * \n * fixedRatio: 固定图片宽高比例\n * \n * src: 图片地址\n * \n * rotate: 旋转角度\n * \n * outline?: 边框\n * \n * filters?: 图片滤镜\n * \n * clip?: 裁剪信息\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n */\nexport interface PPTImageElement extends PPTBaseElement {\n type: 'image';\n fixedRatio: boolean;\n src: string;\n rotate: number;\n outline?: PPTElementOutline;\n filters?: ImageElementFilters;\n clip?: ImageElementClip;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 形状渐变\n * \n * type: 渐变类型(径向、线性)\n * \n * color: 渐变颜色\n * \n * rotate: 渐变角度(线性渐变)\n */\nexport interface ShapeGradient {\n type: 'linear' | 'radial';\n color: [string, string];\n rotate: number;\n}\n\n/**\n * 形状内文本\n * \n * content: 文本内容(HTML字符串)\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * align: 文本对齐方向(垂直方向)\n */\nexport interface ShapeText {\n content: string;\n defaultFontName: string;\n defaultColor: string;\n align: 'top' | 'middle' | 'bottom';\n}\n\n/**\n * 形状元素\n * \n * type: 元素类型(shape)\n * \n * viewBox: SVG的viewBox属性,默认为正方形,例如 1000 表示 '0 0 1000 1000'\n * \n * path: 形状路径,SVG path 的 d 属性\n * \n * fixedRatio: 固定形状宽高比例\n * \n * fill: 填充,不存在渐变时生效\n * \n * gradient?: 渐变,该属性存在时将优先作为填充\n * \n * rotate: 旋转角度\n * \n * outline?: 边框\n * \n * opacity?: 不透明度\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n * \n * special?: 特殊形状(标记一些难以解析的形状,例如路径使用了 L Q C A 以外的类型,该类形状在导出后将变为图片的形式)\n * \n * text?: 形状内文本\n */\nexport interface PPTShapeElement extends PPTBaseElement {\n type: 'shape';\n viewBox: number;\n path: string;\n fixedRatio: boolean;\n fill: string;\n gradient?: ShapeGradient;\n rotate: number;\n outline?: PPTElementOutline;\n opacity?: number;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n special?: boolean;\n text?: ShapeText;\n}\n\n\nexport type LinePoint = '' | 'arrow' | 'dot' \n\n/**\n * 线条元素\n * \n * type: 元素类型(line)\n * \n * start: 起点位置([x, y])\n * \n * end: 终点位置([x, y])\n * \n * style: 线条样式(实线、虚线)\n * \n * color: 线条颜色\n * \n * points: 端点样式([起点样式, 终点样式],可选:无、箭头、圆点)\n * \n * shadow?: 阴影\n * \n * broken?: 折线中点位置([x, y])\n * \n * curve?: 曲线中点位置([x, y])\n */\nexport interface PPTLineElement extends Omit {\n type: 'line';\n start: [number, number];\n end: [number, number];\n style: 'solid' | 'dashed';\n color: string;\n points: [LinePoint, LinePoint];\n shadow?: PPTElementShadow;\n broken?: [number, number];\n curve?: [number, number];\n}\n\n\nexport type ChartType = 'bar' | 'line' | 'pie'\nexport interface ChartData {\n labels: string[];\n legends: string[];\n series: number[][];\n}\n\n/**\n * 图表元素\n * \n * type: 元素类型(chart)\n * \n * fill?: 填充色\n * \n * chartType: 图表类型\n * \n * data: 图表数据\n * \n * options?: 图表配置项\n * \n * outline?: 边框\n * \n * themeColor: 主题色\n * \n * gridColor?: 网格&坐标颜色\n * \n * legend?: 图例/位置\n */\nexport interface PPTChartElement extends PPTBaseElement {\n type: 'chart';\n fill?: string;\n chartType: ChartType;\n data: ChartData;\n options?: ILineChartOptions & IBarChartOptions & IPieChartOptions;\n outline?: PPTElementOutline;\n themeColor: string[];\n gridColor?: string;\n legend?: '' | 'top' | 'bottom',\n}\n\n\n/**\n * 表格单元格样式\n * \n * bold?: 加粗\n * \n * em?: 斜体\n * \n * underline?: 下划线\n * \n * strikethrough?: 删除线\n * \n * color?: 字体颜色\n * \n * backcolor?: 填充色\n * \n * fontsize?: 字体大小\n * \n * fontname?: 字体\n * \n * align?: 对齐方式\n */\nexport interface TableCellStyle {\n bold?: boolean;\n em?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: 'left' | 'center' | 'right';\n}\n\n\n/**\n * 表格单元格\n * \n * id: 单元格ID\n * \n * colspan: 合并列数\n * \n * rowspan: 合并行数\n * \n * text: 文字内容\n * \n * style?: 单元格样式\n */\nexport interface TableCell {\n id: string;\n colspan: number;\n rowspan: number;\n text: string;\n style?: TableCellStyle;\n}\n\n/**\n * 表格主题\n * \n * color: 主题色\n * \n * rowHeader: 标题行\n * \n * rowFooter: 汇总行\n * \n * colHeader: 第一列\n * \n * colFooter: 最后一列\n */\nexport interface TableTheme {\n color: string;\n rowHeader: boolean;\n rowFooter: boolean;\n colHeader: boolean;\n colFooter: boolean;\n}\n\n/**\n * 表格元素\n * \n * type: 元素类型(table)\n * \n * outline: 边框\n * \n * theme?: 主题\n * \n * colWidths: 列宽数组,如[30, 50, 20]表示三列宽度分别为30%, 50%, 20%\n * \n * data: 表格数据\n */\nexport interface PPTTableElement extends PPTBaseElement {\n type: 'table';\n outline: PPTElementOutline;\n theme?: TableTheme;\n colWidths: number[];\n data: TableCell[][];\n}\n\n\nexport type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement\n\n\n/**\n * 元素动画\n * \n * elId: 元素ID\n * \n * type: 动画类型\n * \n * duration: 动画持续时间\n */\nexport interface PPTAnimation {\n elId: string;\n type: string;\n duration: number;\n}\n\n/**\n * 幻灯片背景\n * \n * type: 背景类型(纯色、图片、渐变)\n * \n * color?: 背景颜色(纯色)\n * \n * image?: 图片地址(图片)\n * \n * imageSize?: 图片填充方式\n * \n * gradientType?: 渐变类型(线性、径向)\n * \n * gradientColor?: 渐变颜色\n * \n * gradientRotate?: 渐变角度(线性)\n */\nexport interface SlideBackground {\n type: 'solid' | 'image' | 'gradient';\n color?: string;\n image?: string;\n imageSize?: 'cover' | 'contain' | 'repeat';\n gradientType?: 'linear' | 'radial';\n gradientColor?: [string, string];\n gradientRotate?: number;\n}\n\n/**\n * 幻灯片页面\n * \n * id: 页面ID\n * \n * elements: 元素集合\n * \n * remark?: 备注\n * \n * background?: 页面背景\n * \n * animations?: 元素动画集合\n * \n * turningMode?: 翻页方式\n */\nexport interface Slide {\n id: string;\n elements: PPTElement[];\n remark?: string;\n background?: SlideBackground;\n animations?: PPTAnimation[];\n turningMode?: 'no' | 'fade' | 'slideX' | 'slideY';\n}\n\n/**\n * 幻灯片主题\n * \n * backgroundColor: 页面背景颜色\n * \n * themeColor: 主题色,用于默认创建的形状颜色等\n * \n * fontColor: 字体颜色\n * \n * fontName: 字体\n */\nexport interface SlideTheme {\n backgroundColor: string;\n themeColor: string;\n fontColor: string;\n fontName: string;\n}","import { computed } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { ElementAlignCommand, ElementAlignCommands } from '@/types/edit'\nimport { getElementListRange } from '@/utils/element'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useHistorySnapshot from './useHistorySnapshot'\n\nexport default () => {\n const store = useStore()\n\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const activeElementList = computed(() => store.getters.activeElementList)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 将所有选中的元素对齐到画布\n * @param command 对齐方向\n */\n const alignElementToCanvas = (command: ElementAlignCommand) => {\n const viewportWidth = VIEWPORT_SIZE\n const viewportHeight = VIEWPORT_SIZE * viewportRatio.value\n const { minX, maxX, minY, maxY } = getElementListRange(activeElementList.value)\n \n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n for (const element of newElementList) {\n if (!activeElementIdList.value.includes(element.id)) continue\n \n // 水平垂直居中\n if (command === ElementAlignCommands.CENTER) {\n const offsetY = minY + (maxY - minY) / 2 - viewportHeight / 2\n const offsetX = minX + (maxX - minX) / 2 - viewportWidth / 2\n element.top = element.top - offsetY \n element.left = element.left - offsetX \n }\n\n // 顶部对齐\n if (command === ElementAlignCommands.TOP) {\n const offsetY = minY - 0\n element.top = element.top - offsetY \n }\n\n // 垂直居中\n else if (command === ElementAlignCommands.VERTICAL) {\n const offsetY = minY + (maxY - minY) / 2 - viewportHeight / 2\n element.top = element.top - offsetY \n }\n\n // 底部对齐\n else if (command === ElementAlignCommands.BOTTOM) {\n const offsetY = maxY - viewportHeight\n element.top = element.top - offsetY \n }\n \n // 左侧对齐\n else if (command === ElementAlignCommands.LEFT) {\n const offsetX = minX - 0\n element.left = element.left - offsetX \n }\n\n // 水平居中\n else if (command === ElementAlignCommands.HORIZONTAL) {\n const offsetX = minX + (maxX - minX) / 2 - viewportWidth / 2\n element.left = element.left - offsetX \n }\n\n // 右侧对齐\n else if (command === ElementAlignCommands.RIGHT) {\n const offsetX = maxX - viewportWidth\n element.left = element.left - offsetX \n }\n }\n \n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\n addHistorySnapshot()\n }\n\n return {\n alignElementToCanvas,\n }\n}","\n\n\n\n\n","import { computed, Ref } from 'vue'\nimport { PPTElementShadow } from '@/types/slides'\n\n// 计算元素的阴影样式\nexport default (shadow: Ref) => {\n const shadowStyle = computed(() => {\n if (shadow.value) {\n const { h, v, blur, color } = shadow.value\n return `${h}px ${v}px ${blur}px ${color}`\n }\n return ''\n })\n\n return {\n shadowStyle,\n }\n}","export const enum ClipPathTypes {\n RECT = 'rect',\n ELLIPSE = 'ellipse',\n POLYGON = 'polygon',\n}\n\nexport const enum ClipPaths {\n RECT = 'rect',\n ROUNDRECT = 'roundRect',\n ELLIPSE = 'ellipse',\n TRIANGLE = 'triangle',\n PENTAGON = 'pentagon',\n RHOMBUS = 'rhombus',\n STAR = 'star',\n}\n\nexport const CLIPPATHS = {\n rect: {\n name: '矩形',\n type: ClipPathTypes.RECT,\n radius: '0',\n style: '',\n },\n rect2: {\n name: '矩形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L 0 ${height} Z`\n },\n },\n rect3: {\n name: '矩形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.8} Z`\n },\n },\n roundRect: {\n name: '圆角矩形',\n type: ClipPathTypes.RECT,\n radius: '10%',\n style: 'inset(0 0 0 0 round 10% 10% 10% 10%)',\n },\n ellipse: {\n name: '圆形',\n type: ClipPathTypes.ELLIPSE,\n style: 'ellipse(50% 50% at 50% 50%)',\n },\n triangle: {\n name: '三角形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n triangle2: {\n name: '三角形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 100%, 0% 0%, 100% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} ${height} L 0 0 L ${width} 0 Z`\n },\n },\n triangle3: {\n name: '三角形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n rhombus: {\n name: '菱形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${height * 0.5} L ${width * 0.5} ${height} L 0 ${height * 0.5} Z`\n },\n },\n hexagon: {\n name: '六边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.2} 0 L ${width * 0.8} 0 L ${width} ${height * 0.5} L ${width * 0.8} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.5} Z`\n },\n },\n pentagon: {\n name: '五边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${0.38 * height} L ${0.82 * width} ${height} L ${0.18 * width} ${height} L 0 ${0.38 * height} Z`\n },\n },\n parallelogram: {\n name: '平行四边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} 0 L ${width} 0 L ${width * 0.7} ${height} L 0 ${height} Z`\n },\n },\n parallelogram2: {\n name: '平行四边形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} ${height} L ${width} ${height} L ${width * 0.7} 0 L 0 0 Z`\n },\n },\n trapezoid: {\n name: '梯形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.25} 0 L ${width * 0.75} 0 L ${width} ${height} L 0 ${height} Z`\n },\n },\n trapezoid2: {\n name: '梯形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width} 0 L ${width * 0.75} ${height} L ${width * 0.25} ${height} Z`\n },\n },\n}","import { computed, Ref } from 'vue'\n\n// 计算元素的翻转样式\nexport default (flipH: Ref, flipV: Ref) => {\n const flipStyle = computed(() => {\n let style = ''\n \n if (flipH.value && flipV.value) style = 'rotateX(180deg) rotateY(180deg)'\n else if (flipV.value) style = 'rotateX(180deg)'\n else if (flipH.value) style = 'rotateY(180deg)'\n\n return style\n })\n\n return {\n flipStyle,\n }\n}","import { computed, Ref } from 'vue'\nimport { CLIPPATHS, ClipPathTypes } from '@/configs/imageClip'\nimport { ImageElementClip } from '@/types/slides'\n\nexport default (clip: Ref) => {\n const clipShape = computed(() => {\n if (!clip.value) return CLIPPATHS.rect\n const shape = clip.value.shape || ClipPathTypes.RECT\n\n return CLIPPATHS[shape]\n })\n\n const imgPosition = computed(() => {\n if (!clip.value) {\n return {\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n }\n }\n\n const [start, end] = clip.value.range\n\n const widthScale = (end[0] - start[0]) / 100\n const heightScale = (end[1] - start[1]) / 100\n const left = start[0] / widthScale\n const top = start[1] / heightScale\n\n return {\n left: -left + '%',\n top: -top + '%',\n width: 100 / widthScale + '%',\n height: 100 / heightScale + '%',\n }\n })\n\n return {\n clipShape,\n imgPosition,\n }\n}","import { computed, Ref } from 'vue'\nimport { ImageElementFilters } from '@/types/slides'\n\nexport default (filters: Ref) => {\n const filter = computed(() => {\n if (!filters.value) return ''\n let filter = ''\n for (const key of Object.keys(filters.value)) {\n filter += `${key}(${filters.value[key]}) `\n }\n return filter\n })\n\n return {\n filter,\n }\n}","\n\n","\n\n\n\n","import { computed, Ref } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\n\n// 计算边框相关属性值,主要是对默认值的处理\nexport default (outline: Ref) => {\n const outlineWidth = computed(() => outline.value?.width ?? 0)\n const outlineStyle = computed(() => outline.value?.style || 'solid')\n const outlineColor = computed(() => outline.value?.color || '#d14424')\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n}","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'image-rect-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n radius: {\n type: String,\n default: '0',\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ImageRectOutline.vue?vue&type=template&id=4126ab7f&scoped=true\"\nimport script from \"./ImageRectOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageRectOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageRectOutline.vue?vue&type=style&index=0&id=4126ab7f&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4126ab7f\"\n\nexport default script","\n\n\n\n","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'image-ellipse-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ImageEllipseOutline.vue?vue&type=template&id=6655f0f0&scoped=true\"\nimport script from \"./ImageEllipseOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageEllipseOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageEllipseOutline.vue?vue&type=style&index=0&id=6655f0f0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6655f0f0\"\n\nexport default script","\n\n\n\n","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'image-polygon-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n createPath: {\n type: Function,\n required: true,\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ImagePolygonOutline.vue?vue&type=template&id=8d85e878&scoped=true\"\nimport script from \"./ImagePolygonOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ImagePolygonOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ImagePolygonOutline.vue?vue&type=style&index=0&id=8d85e878&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-8d85e878\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTImageElement } from '@/types/slides'\nimport useClipImage from '../useClipImage'\n\nimport ImageRectOutline from './ImageRectOutline.vue'\nimport ImageEllipseOutline from './ImageEllipseOutline.vue'\nimport ImagePolygonOutline from './ImagePolygonOutline.vue'\n\nexport default defineComponent({\n name: 'image-outline',\n components: {\n ImageRectOutline,\n ImageEllipseOutline,\n ImagePolygonOutline,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const clip = computed(() => props.elementInfo.clip)\n const { clipShape } = useClipImage(clip)\n\n return {\n clipShape,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=6b56be7d\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, reactive, ref } from 'vue'\nimport { useStore } from '@/store'\nimport { KEYS } from '@/configs/hotkey'\nimport { ImageClipData, ImageClipDataRange, ImageClipedEmitData } from '@/types/edit'\n\ntype ScaleClipRangeType = 't-l' | 't-r' | 'b-l' | 'b-r'\n\nexport default defineComponent({\n name: 'image-clip-handler',\n emits: ['clip'],\n props: {\n src: {\n type: String,\n required: true,\n },\n clipData: {\n type: Object as PropType,\n },\n clipPath: {\n type: String,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n top: {\n type: Number,\n required: true,\n },\n left: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n const clipWrapperPositionStyle = reactive({\n top: '0',\n left: '0',\n })\n const isSettingClipRange = ref(false)\n const currentRange = ref(null)\n\n // 获取裁剪区域信息(裁剪区域占原图的宽高比例,处在原图中的位置)\n const getClipDataTransformInfo = () => {\n const [start, end] = props.clipData ? props.clipData.range : [[0, 0], [100, 100]]\n\n const widthScale = (end[0] - start[0]) / 100\n const heightScale = (end[1] - start[1]) / 100\n const left = start[0] / widthScale\n const top = start[1] / heightScale\n\n return { widthScale, heightScale, left, top }\n }\n \n // 底层图片位置大小(遮罩区域图片)\n const imgPosition = computed(() => {\n const { widthScale, heightScale, left, top } = getClipDataTransformInfo()\n return {\n left: -left,\n top: -top,\n width: 100 / widthScale,\n height: 100 / heightScale,\n }\n })\n\n // 底层图片位置大小样式(遮罩区域图片)\n const bottomImgPositionStyle = computed(() => {\n return {\n top: imgPosition.value.top + '%',\n left: imgPosition.value.left + '%',\n width: imgPosition.value.width + '%',\n height: imgPosition.value.height + '%',\n }\n })\n\n // 顶层图片容器位置大小(裁剪高亮区域)\n const topImgWrapperPosition = reactive({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n })\n\n // 顶层图片容器位置大小样式(裁剪高亮区域)\n const topImgWrapperPositionStyle = computed(() => {\n return {\n top: topImgWrapperPosition.top + '%',\n left: topImgWrapperPosition.left + '%',\n width: topImgWrapperPosition.width + '%',\n height: topImgWrapperPosition.height + '%',\n }\n })\n\n // 顶层图片位置大小样式(裁剪区域图片)\n const topImgPositionStyle = computed(() => {\n const bottomWidth = imgPosition.value.width\n const bottomHeight = imgPosition.value.height\n \n const topLeft = topImgWrapperPosition.left\n const topTop = topImgWrapperPosition.top\n const topWidth = topImgWrapperPosition.width\n const topHeight = topImgWrapperPosition.height\n \n return {\n left: -topLeft * (100 / topWidth) + '%',\n top: -topTop * (100 / topHeight) + '%',\n width: bottomWidth / topWidth * 100 + '%',\n height: bottomHeight / topHeight * 100 + '%',\n }\n })\n\n // 初始化裁剪位置信息\n const initClipPosition = () => {\n const { left, top } = getClipDataTransformInfo()\n topImgWrapperPosition.left = left\n topImgWrapperPosition.top = top\n topImgWrapperPosition.width = 100\n topImgWrapperPosition.height = 100\n \n clipWrapperPositionStyle.top = -top + '%'\n clipWrapperPositionStyle.left = -left + '%'\n }\n\n // 执行裁剪:计算裁剪后的图片位置大小和裁剪信息,并将数据同步出去\n const handleClip = () => {\n if (isSettingClipRange.value) return\n\n if (!currentRange.value) {\n emit('clip', null)\n return\n }\n\n const { left, top } = getClipDataTransformInfo()\n\n const position = {\n left: (topImgWrapperPosition.left - left) / 100 * props.width,\n top: (topImgWrapperPosition.top - top) / 100 * props.height,\n width: (topImgWrapperPosition.width - 100) / 100 * props.width,\n height: (topImgWrapperPosition.height - 100) / 100 * props.height,\n }\n\n const clipedEmitData: ImageClipedEmitData = {\n range: currentRange.value,\n position,\n }\n emit('clip', clipedEmitData)\n }\n\n // 快捷键监听:回车确认裁剪\n const keyboardListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ENTER) handleClip()\n }\n\n onMounted(() => {\n initClipPosition()\n document.addEventListener('keydown', keyboardListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keyboardListener)\n })\n\n // 计算并更新裁剪区域范围数据\n const updateRange = () => {\n const retPosition = {\n left: parseInt(topImgPositionStyle.value.left),\n top: parseInt(topImgPositionStyle.value.top),\n width: parseInt(topImgPositionStyle.value.width),\n height: parseInt(topImgPositionStyle.value.height),\n }\n\n const widthScale = 100 / retPosition.width\n const heightScale = 100 / retPosition.height\n\n const start: [number, number] = [\n -retPosition.left * widthScale,\n -retPosition.top * heightScale,\n ]\n const end: [number, number] = [\n widthScale * 100 + start[0],\n heightScale * 100 + start[1],\n ]\n\n currentRange.value = [start, end]\n }\n\n // 移动裁剪区域\n const moveClipRange = (e: MouseEvent) => {\n isSettingClipRange.value = true\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n const bottomPosition = imgPosition.value\n const originPositopn = {\n left: topImgWrapperPosition.left,\n top: topImgWrapperPosition.top,\n width: topImgWrapperPosition.width,\n height: topImgWrapperPosition.height,\n }\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100\n const moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100\n\n let targetLeft = originPositopn.left + moveX\n let targetTop = originPositopn.top + moveY\n\n if (targetLeft < 0) targetLeft = 0\n else if (targetLeft + originPositopn.width > bottomPosition.width) {\n targetLeft = bottomPosition.width - originPositopn.width\n }\n if (targetTop < 0) targetTop = 0\n else if (targetTop + originPositopn.height > bottomPosition.height) {\n targetTop = bottomPosition.height - originPositopn.height\n }\n \n topImgWrapperPosition.left = targetLeft\n topImgWrapperPosition.top = targetTop\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n updateRange()\n\n setTimeout(() => {\n isSettingClipRange.value = false\n }, 0)\n }\n }\n\n // 缩放裁剪区域\n const scaleClipRange = (e: MouseEvent, type: ScaleClipRangeType) => {\n isSettingClipRange.value = true\n let isMouseDown = true\n\n const minWidth = 50 / props.width * 100\n const minHeight = 50 / props.height * 100\n \n const startPageX = e.pageX\n const startPageY = e.pageY\n const bottomPosition = imgPosition.value\n const originPositopn = {\n left: topImgWrapperPosition.left,\n top: topImgWrapperPosition.top,\n width: topImgWrapperPosition.width,\n height: topImgWrapperPosition.height,\n }\n\n const aspectRatio = topImgWrapperPosition.width / topImgWrapperPosition.height\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n let moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100\n let moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100\n\n if (ctrlOrShiftKeyActive.value) {\n if (type === 'b-r' || type === 't-l') moveY = moveX / aspectRatio\n if (type === 'b-l' || type === 't-r') moveY = -moveX / aspectRatio\n }\n\n let targetLeft, targetTop, targetWidth, targetHeight\n\n if (type === 't-l') {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top + moveY\n }\n else if (type === 't-r') {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width + moveX\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top + moveY\n }\n else if (type === 'b-l') {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else if (type === 'b-r') {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width + moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === 't') {\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top + moveY\n }\n else if (type === 'b') {\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === 'l') {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n targetHeight = originPositopn.height\n targetWidth = originPositopn.width + moveX\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n \n topImgWrapperPosition.left = targetLeft\n topImgWrapperPosition.top = targetTop\n topImgWrapperPosition.width = targetWidth\n topImgWrapperPosition.height = targetHeight\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n updateRange()\n\n setTimeout(() => isSettingClipRange.value = false, 0)\n }\n }\n\n return {\n clipWrapperPositionStyle,\n bottomImgPositionStyle,\n topImgWrapperPositionStyle,\n topImgPositionStyle,\n handleClip,\n moveClipRange,\n scaleClipRange,\n }\n },\n})\n","import { render } from \"./ImageClipHandler.vue?vue&type=template&id=9e358576&scoped=true\"\nimport script from \"./ImageClipHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageClipHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageClipHandler.vue?vue&type=style&index=0&id=9e358576&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9e358576\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { ImageElementClip, PPTImageElement } from '@/types/slides'\nimport { ImageClipedEmitData } from '@/types/edit'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useClipImage from './useClipImage'\nimport useFilter from './useFilter'\n\nimport ImageOutline from './ImageOutline/index.vue'\nimport ImageClipHandler from './ImageClipHandler.vue'\n\nexport default defineComponent({\n name: 'editable-element-image',\n components: {\n ImageOutline,\n ImageClipHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTImageElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const clipingImageElementId = computed(() => store.state.clipingImageElementId)\n const isCliping = computed(() => clipingImageElementId.value === props.elementInfo.id)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const clip = computed(() => props.elementInfo.clip)\n const { clipShape, imgPosition } = useClipImage(clip)\n\n const filters = computed(() => props.elementInfo.filters)\n const { filter } = useFilter(filters)\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n props.selectElement(e, props.elementInfo)\n }\n\n const handleClip = (data: ImageClipedEmitData) => {\n store.commit(MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID, '')\n \n if (!data) return\n\n const { range, position } = data\n const originClip: ImageElementClip = props.elementInfo.clip || { shape: 'rect', range: [[0, 0], [100, 100]] }\n \n const _props = {\n clip: { ...originClip, range },\n left: props.elementInfo.left + position.left,\n top: props.elementInfo.top + position.top,\n width: props.elementInfo.width + position.width,\n height: props.elementInfo.height + position.height,\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: props.elementInfo.id, props: _props })\n \n addHistorySnapshot()\n }\n\n return {\n isCliping,\n handleClip,\n clipingImageElementId,\n shadowStyle,\n handleSelectElement,\n clipShape,\n imgPosition,\n filter,\n flipStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=03ead815&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=03ead815&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-03ead815\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","\nimport { PropType, defineComponent, toRef } from 'vue'\nimport { PPTElementOutline } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\n\nexport default defineComponent({\n name: 'element-outline',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n outline: {\n type: Object as PropType\n },\n },\n setup(props) {\n const {\n outlineWidth,\n outlineStyle,\n outlineColor,\n } = useElementOutline(toRef(props, 'outline'))\n\n return {\n outlineWidth,\n outlineStyle,\n outlineColor,\n }\n },\n})\n","import { render } from \"./ElementOutline.vue?vue&type=template&id=2ddaa919&scoped=true\"\nimport script from \"./ElementOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementOutline.vue?vue&type=style&index=0&id=2ddaa919&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2ddaa919\"\n\nexport default script","\n\n\n\n\n","import mitt, { Emitter } from 'mitt'\n\nexport const enum EmitterEvents {\n RICH_TEXT_COMMAND = 'RICH_TEXT_COMMAND',\n OPEN_CHART_DATA_EDITOR = 'OPEN_CHART_DATA_EDITOR',\n}\n\nexport interface RichTextCommand {\n command: string;\n value?: string;\n}\n\ntype Events = {\n [EmitterEvents.RICH_TEXT_COMMAND]: RichTextCommand | RichTextCommand[];\n [EmitterEvents.OPEN_CHART_DATA_EDITOR]: void;\n} \n\nconst emitter: Emitter = mitt()\n\nexport default emitter","import { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list'\nimport { Schema } from 'prosemirror-model'\nimport { undo, redo } from 'prosemirror-history'\nimport { undoInputRule } from 'prosemirror-inputrules'\nimport {\n toggleMark,\n selectParentNode,\n joinUp,\n joinDown,\n Command,\n} from 'prosemirror-commands'\n\nexport const buildKeymap = (schema: Schema) => {\n const keys = {}\n const bind = (key: string, cmd: Command) => keys[key] = cmd\n\n bind('Alt-ArrowUp', joinUp)\n bind('Alt-ArrowDown', joinDown)\n bind('Ctrl-z', undo)\n bind('Ctrl-y', redo)\n bind('Backspace', undoInputRule)\n bind('Escape', selectParentNode)\n bind('Ctrl-b', toggleMark(schema.marks.strong))\n bind('Ctrl-i', toggleMark(schema.marks.em))\n bind('Ctrl-u', toggleMark(schema.marks.underline))\n bind('Ctrl-d', toggleMark(schema.marks.strikethrough))\n\n bind('Enter', splitListItem(schema.nodes.list_item))\n bind('Mod-[', liftListItem(schema.nodes.list_item))\n bind('Mod-]', sinkListItem(schema.nodes.list_item))\n\n return keys\n}","import { NodeType, Schema } from 'prosemirror-model'\nimport {\n inputRules,\n wrappingInputRule,\n textblockTypeInputRule,\n smartQuotes,\n emDash,\n ellipsis,\n} from 'prosemirror-inputrules'\n\nconst blockQuoteRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*>\\s$/, nodeType)\n\nconst orderedListRule = (nodeType: NodeType) => (\n wrappingInputRule(\n /^(\\d+)\\.\\s$/, \n nodeType, \n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n )\n)\n\nconst bulletListRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)\n\nconst codeBlockRule = (nodeType: NodeType) => textblockTypeInputRule(/^```$/, nodeType)\n\nexport const buildInputRules = (schema: Schema) => {\n const rules = [\n ...smartQuotes,\n ellipsis,\n emDash,\n ]\n rules.push(blockQuoteRule(schema.nodes.blockquote))\n rules.push(orderedListRule(schema.nodes.ordered_list))\n rules.push(bulletListRule(schema.nodes.bullet_list))\n rules.push(codeBlockRule(schema.nodes.code_block))\n\n return inputRules({ rules })\n}","import { keymap } from 'prosemirror-keymap'\nimport { Schema } from 'prosemirror-model'\nimport { history } from 'prosemirror-history'\nimport { baseKeymap } from 'prosemirror-commands'\nimport { dropCursor } from 'prosemirror-dropcursor'\nimport { gapCursor } from 'prosemirror-gapcursor'\n\nimport { buildKeymap } from './keymap'\nimport { buildInputRules } from './inputrules'\n\nexport const buildPlugins = (schema: Schema) => {\n return [\n buildInputRules(schema),\n keymap(buildKeymap(schema)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n ]\n}","import { nodes } from 'prosemirror-schema-basic'\nimport { Node, NodeSpec } from 'prosemirror-model'\nimport { orderedList, bulletList, listItem } from 'prosemirror-schema-list'\n\nconst _orderedList: NodeSpec = {\n ...orderedList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _bulletList: NodeSpec = {\n ...bulletList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _listItem: NodeSpec = {\n ...listItem,\n content: 'paragraph block*',\n group: 'block',\n}\n\nconst paragraph: NodeSpec = {\n attrs: {\n align: {\n default: '',\n },\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: dom => {\n const { textAlign } = (dom as HTMLElement).style\n let align = (dom as HTMLElement).getAttribute('align') || textAlign || ''\n align = /(left|right|center|justify)/.test(align) ? align : ''\n \n return { align }\n }\n }\n ],\n toDOM: (node: Node) => {\n const { align } = node.attrs\n let style = ''\n if (align && align !== 'left') style += `text-align: ${align};`\n\n return ['p', { style }, 0]\n },\n}\n\nexport default {\n ...nodes,\n 'ordered_list': _orderedList,\n 'bullet_list': _bulletList,\n 'list_item': _listItem,\n paragraph,\n}\n","import { marks } from 'prosemirror-schema-basic'\nimport { MarkSpec } from 'prosemirror-model'\n\nconst subscript: MarkSpec = {\n excludes: 'subscript',\n parseDOM: [\n { tag: 'sub' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'sub' && null\n },\n ],\n toDOM: () => ['sub', 0],\n}\n\nconst superscript: MarkSpec = {\n excludes: 'superscript',\n parseDOM: [\n { tag: 'sup' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'super' && null\n },\n ],\n toDOM: () => ['sup', 0],\n}\n\nconst strikethrough: MarkSpec = {\n parseDOM: [\n { tag: 'strike' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'line-through' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'line-through' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration-line: line-through' }, 0],\n}\n\nconst underline: MarkSpec = {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'underline' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'underline' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration: underline' }, 0],\n}\n\nconst forecolor: MarkSpec = {\n attrs: {\n color: {},\n },\n parseDOM: [\n {\n style: 'color',\n getAttrs: color => color ? { color } : {}\n },\n ],\n toDOM: mark => {\n const { color } = mark.attrs\n let style = ''\n if (color) style += `color: ${color};`\n return ['span', { style }, 0]\n },\n}\n\nconst backcolor: MarkSpec = {\n attrs: {\n backcolor: {},\n },\n inline: true,\n group: 'inline',\n parseDOM: [\n {\n tag: 'span[style*=background-color]',\n getAttrs: backcolor => backcolor ? { backcolor } : {}\n },\n ],\n toDOM: mark => {\n const { backcolor } = mark.attrs\n let style = ''\n if (backcolor) style += `background-color: ${backcolor};`\n return ['span', { style }, 0]\n },\n}\n\nconst fontsize: MarkSpec = {\n attrs: {\n fontsize: {},\n },\n inline: true,\n group: 'inline',\n parseDOM: [\n {\n style: 'font-size',\n getAttrs: fontsize => fontsize ? { fontsize } : {}\n },\n ],\n toDOM: mark => {\n const { fontsize } = mark.attrs\n let style = ''\n if (fontsize) style += `font-size: ${fontsize}`\n return ['span', { style }, 0]\n },\n}\n\nconst fontname: MarkSpec = {\n attrs: {\n fontname: {},\n },\n inline: true,\n group: 'inline',\n parseDOM: [\n {\n style: 'font-family',\n getAttrs: fontname => {\n return { fontname: fontname && typeof fontname === 'string' ? fontname.replace(/[\\\"\\']/g, '') : '' }\n }\n },\n ],\n toDOM: mark => {\n const { fontname } = mark.attrs\n let style = ''\n if (fontname) style += `font-family: ${fontname}`\n return ['span', { style }, 0]\n },\n}\n\nexport default {\n ...marks,\n subscript,\n superscript,\n strikethrough,\n underline,\n forecolor,\n backcolor,\n fontsize,\n fontname,\n}","import nodes from './nodes'\nimport marks from './marks'\n\nexport const schemaNodes = nodes\nexport const schemaMarks = marks\n","import { EditorState } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\nimport { Schema, DOMParser } from 'prosemirror-model'\n\nimport { buildPlugins } from './plugins/index'\nimport { schemaNodes, schemaMarks } from './schema/index'\n\nconst schema = new Schema({\n nodes: schemaNodes,\n marks: schemaMarks,\n})\n\nexport const createDocument = (content: string) => {\n const htmlString = `
${content}
`\n const parser = new window.DOMParser()\n const element = parser.parseFromString(htmlString, 'text/html').body.firstElementChild\n return DOMParser.fromSchema(schema).parse(element as Element)\n}\n\nexport const initProsemirrorEditor = (dom: Element, content: string, props = {}) => {\n return new EditorView(dom, {\n state: EditorState.create({\n doc: createDocument(content),\n plugins: buildPlugins(schema),\n }),\n ...props,\n })\n}","import { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\n\nexport const setTextAlign = (tr: Transaction, schema: Schema, alignment: string) => {\n const { selection, doc } = tr\n if (!selection || !doc) return tr\n\n const { from, to } = selection\n const { nodes } = schema\n\n const blockquote = nodes.blockquote\n const listItem = nodes.list_item\n const paragraph = nodes.paragraph\n\n interface Task {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }\n\n const tasks: Task[] = []\n alignment = alignment || ''\n\n const allowedNodeTypes = new Set([blockquote, listItem, paragraph])\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type\n const align = node.attrs.align || ''\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n })\n }\n return true\n })\n\n if (!tasks.length) return tr\n\n tasks.forEach(task => {\n const { node, pos, nodeType } = task\n let { attrs } = node\n if (alignment) attrs = { ...attrs, align: alignment }\n else attrs = { ...attrs, align: null }\n tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks)\n })\n\n return tr\n}\n\nexport const alignmentCommand = (view: EditorView, alignment: string) => {\n const { state } = view\n const { schema, selection } = state\n const tr = setTextAlign(\n state.tr.setSelection(selection),\n schema,\n alignment,\n )\n view.dispatch(tr)\n}","import { wrapInList, liftListItem } from 'prosemirror-schema-list'\nimport { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction, EditorState } from 'prosemirror-state'\nimport { findParentNode } from '../utils'\n\nconst isList = (node: Node, schema: Schema) => {\n return (\n node.type === schema.nodes.bullet_list ||\n node.type === schema.nodes.ordered_list\n )\n}\n\nexport const toggleList = (listType: NodeType, itemType: NodeType) => {\n return (state: EditorState, dispatch: (tr: Transaction) => void) => {\n const { schema, selection } = state\n const { $from, $to } = selection\n const range = $from.blockRange($to)\n\n if (!range) return false\n\n const parentList = findParentNode((node: Node) => isList(node, schema))(selection)\n\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (parentList.node.type === listType) {\n return liftListItem(itemType)(state, dispatch)\n }\n\n if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {\n const { tr } = state\n tr.setNodeMarkup(parentList.pos, listType)\n\n if (dispatch) dispatch(tr)\n\n return false\n }\n }\n\n return wrapInList(listType)(state, dispatch)\n }\n}\n","\nimport { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { debounce } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { EditorView } from 'prosemirror-view'\nimport { toggleMark, wrapIn, selectAll } from 'prosemirror-commands'\nimport { initProsemirrorEditor, createDocument } from '@/utils/prosemirror'\nimport { getTextAttrs } from '@/utils/prosemirror/utils'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { alignmentCommand } from '@/utils/prosemirror/commands/setTextAlign'\nimport { toggleList } from '@/utils/prosemirror/commands/toggleList'\n\nexport default defineComponent({\n name: 'prosemirror-editor',\n emits: ['update', 'focus', 'blur'],\n props: {\n elementId: {\n type: String,\n required: true,\n },\n defaultColor: {\n type: String,\n required: true,\n },\n defaultFontName: {\n type: String,\n required: true,\n },\n editable: {\n type: Boolean,\n default: false,\n },\n value: {\n type: String,\n required: true,\n },\n autoFocus: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const handleElementId = computed(() => store.state.handleElementId)\n\n const editorViewRef = ref()\n let editorView: EditorView\n\n // 富文本的各种交互事件监听:\n // 聚焦时取消全局快捷键事件\n // 输入文字时同步数据到vuex\n // 点击鼠标和键盘时同步富文本状态到工具栏\n const handleInput = debounce(function() {\n emit('update', editorView.dom.innerHTML)\n }, 300, { trailing: true })\n\n const handleFocus = () => {\n if (props.value === '请输入内容') {\n setTimeout(() => {\n selectAll(editorView.state, editorView.dispatch)\n }, 0)\n }\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, true)\n emit('focus')\n }\n\n const handleBlur = () => {\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, false)\n emit('blur')\n }\n\n const handleClick = debounce(function() {\n const attrs = getTextAttrs(editorView, {\n color: props.defaultColor,\n fontname: props.defaultFontName,\n })\n store.commit(MutationTypes.SET_RICHTEXT_ATTRS, attrs)\n }, 30, { trailing: true })\n\n const handleKeydown = () => {\n handleInput()\n handleClick()\n }\n\n // 将富文本内容同步到DOM\n const textContent = computed(() => props.value)\n watch(textContent, () => {\n if (!editorView) return\n if (editorView.hasFocus()) return\n\n const { doc, tr } = editorView.state\n editorView.dispatch(tr.replaceRangeWith(0, doc.content.size, createDocument(textContent.value)))\n })\n\n // 打开/关闭编辑器的编辑模式\n watch(() => props.editable, () => {\n editorView.setProps({ editable: () => props.editable })\n })\n\n // Prosemirror编辑器的初始化和卸载\n onMounted(() => {\n editorView = initProsemirrorEditor((editorViewRef.value as Element), textContent.value, {\n handleDOMEvents: {\n focus: handleFocus,\n blur: handleBlur,\n keydown: handleKeydown,\n click: handleClick,\n },\n editable: () => props.editable,\n })\n if (props.autoFocus) editorView.focus()\n })\n onUnmounted(() => {\n editorView && editorView.destroy()\n })\n \n // 执行富文本命令(可以是一个或多个)\n // 部分命令在执行前先判断当前选区是否为空,如果选区为空先进行全选操作\n const execCommand = (payload: RichTextCommand | RichTextCommand[]) => {\n if (handleElementId.value !== props.elementId) return\n\n const commands = ('command' in payload) ? [payload] : payload\n\n for (const item of commands) {\n if (item.command === 'fontname' && item.value) {\n const mark = editorView.state.schema.marks.fontname.create({ fontname: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'fontsize' && item.value) {\n const mark = editorView.state.schema.marks.fontsize.create({ fontsize: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'color' && item.value) {\n const mark = editorView.state.schema.marks.forecolor.create({ color: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'backcolor' && item.value) {\n const mark = editorView.state.schema.marks.backcolor.create({ backcolor: item.value })\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n else if (item.command === 'bold') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.strong)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'em') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.em)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'underline') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.underline)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'strikethrough') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n toggleMark(editorView.state.schema.marks.strikethrough)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'subscript') {\n toggleMark(editorView.state.schema.marks.subscript)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'superscript') {\n toggleMark(editorView.state.schema.marks.superscript)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'blockquote') {\n wrapIn(editorView.state.schema.nodes.blockquote)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'code') {\n toggleMark(editorView.state.schema.marks.code)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'align' && item.value) {\n alignmentCommand(editorView, item.value)\n }\n else if (item.command === 'bulletList') {\n const { bullet_list: bulletList, list_item: listItem } = editorView.state.schema.nodes\n toggleList(bulletList, listItem)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'orderedList') {\n const { ordered_list: orderedList, list_item: listItem } = editorView.state.schema.nodes\n toggleList(orderedList, listItem)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'clear') {\n const { empty } = editorView.state.selection\n if (empty) selectAll(editorView.state, editorView.dispatch)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.removeMark($from.pos, $to.pos))\n }\n else if (item.command === 'insert' && item.value) {\n editorView.dispatch(editorView.state.tr.insertText(item.value))\n }\n }\n\n editorView.focus()\n handleInput()\n handleClick()\n }\n\n emitter.on(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n onUnmounted(() => {\n emitter.off(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n })\n\n return {\n editorViewRef,\n }\n },\n})\n","import { render } from \"./ProsemirrorEditor.vue?vue&type=template&id=3100bb88&scoped=true\"\nimport script from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ProsemirrorEditor.vue?vue&type=style&index=0&id=3100bb88&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3100bb88\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-text',\n components: {\n ElementOutline,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTextElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const elementRef = ref()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const handleElementId = computed(() => store.state.handleElementId)\n\n const handleSelectElement = (e: MouseEvent, canMove = true) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo, canMove)\n }\n\n // 监听文本元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n const isScaling = computed(() => store.state.isScaling)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTextElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeight },\n })\n }\n else realHeightCache.value = realHeight\n }\n }\n const resizeObserver = new ResizeObserver(updateTextElementHeight)\n\n onMounted(() => {\n if (elementRef.value) resizeObserver.observe(elementRef.value)\n })\n onUnmounted(() => {\n if (elementRef.value) resizeObserver.unobserve(elementRef.value)\n })\n\n const updateContent = (content: string) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { content },\n })\n \n addHistorySnapshot()\n }\n\n return {\n elementRef,\n shadowStyle,\n updateContent,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=3c0937ee&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3c0937ee&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3c0937ee\"\n\nexport default script","\n\n\n\n\n","\r\n\r\n","\r\nimport { defineComponent, PropType } from 'vue'\r\n\r\nexport default defineComponent({\r\n name: 'gradient-defs',\r\n props: {\r\n id: {\r\n type: String,\r\n required: true,\r\n },\r\n type: {\r\n type: String as PropType<'linear' | 'radial'>,\r\n },\r\n color1: {\r\n type: String,\r\n required: true,\r\n },\r\n color2: {\r\n type: String,\r\n required: true,\r\n },\r\n rotate: {\r\n type: Number,\r\n default: 0,\r\n },\r\n },\r\n})\r\n","import { render } from \"./GradientDefs.vue?vue&type=template&id=b787d5ea\"\nimport script from \"./GradientDefs.vue?vue&type=script&lang=ts\"\nexport * from \"./GradientDefs.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport GradientDefs from './GradientDefs.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n GradientDefs,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const editable = ref(false)\n\n const enterEditing = () => {\n editable.value = true\n store.commit(MutationTypes.SET_EDITING_SHAPE_ELEMENT_ID, props.elementInfo.id)\n }\n\n const exitEditing = () => {\n editable.value = false\n store.commit(MutationTypes.SET_EDITING_SHAPE_ELEMENT_ID, '')\n }\n \n const handleElementId = computed(() => store.state.handleElementId)\n watch(handleElementId, () => {\n if (handleElementId.value !== props.elementInfo.id) {\n if (editable.value) exitEditing()\n }\n })\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n const updateText = (content: string) => {\n const _text = { ...text.value, content }\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { text: _text },\n })\n \n addHistorySnapshot()\n }\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n editable,\n text,\n handleSelectElement,\n updateText,\n enterEditing,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5a268d2a&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=5a268d2a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5a268d2a\"\n\nexport default script","\n\n\n\n\n","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\n\nconst pathMap = {\n dot: 'm0 5a5 5 0 1 0 10 0a5 5 0 1 0 -10 0z',\n arrow: 'M0,0 L10,5 0,10 Z',\n}\nconst rotateMap = {\n 'arrow-start': 180,\n 'arrow-end': 0,\n}\n\nexport default defineComponent({\n name: 'line-point-marker',\n props: {\n id: {\n type: String,\n required: true,\n },\n position: {\n type: String as PropType<'start' | 'end'>,\n required: true,\n },\n type: {\n type: String as PropType<'dot' | 'arrow'>,\n required: true,\n },\n color: {\n type: String,\n },\n baseSize: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const path = computed(() => pathMap[props.type])\n const rotate = computed(() => rotateMap[`${props.type}-${props.position}`] || 0)\n const size = computed(() => props.baseSize < 2 ? 2 : props.baseSize)\n\n return {\n path,\n rotate,\n size,\n }\n },\n})\n","import { render } from \"./LinePointMarker.vue?vue&type=template&id=62085f5a\"\nimport script from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\nexport * from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10 6' : '0 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n handleSelectElement,\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=1d4bfa98&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=1d4bfa98&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1d4bfa98\"\n\nexport default script","\r\n\r\n\r\n\r\n\r\n","\n\n\n\n\n\n","\nimport { computed, defineComponent, inject, onMounted, PropType, ref, Ref, watch } from 'vue'\nimport { upperFirst } from 'lodash'\nimport tinycolor from 'tinycolor2'\nimport Chartist, {\n IChartistLineChart,\n IChartistBarChart,\n IChartistPieChart,\n ILineChartOptions,\n IBarChartOptions,\n IPieChartOptions,\n} from 'chartist'\nimport { ChartData, ChartType } from '@/types/slides'\n\nimport 'chartist/dist/scss/chartist.scss'\n\nexport default defineComponent({\n name: 'chart',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n type: {\n type: String as PropType,\n required: true,\n },\n data: {\n type: Object as PropType,\n required: true,\n },\n options: {\n type: Object as PropType,\n },\n themeColor: {\n type: Array as PropType,\n required: true,\n },\n legends: {\n type: Array as PropType,\n required: true,\n },\n gridColor: {\n type: String,\n },\n legend: {\n type: String as PropType<'' | 'top' | 'bottom'>,\n },\n },\n setup(props) {\n const chartRef = ref()\n const slideScale: Ref = inject('slideScale') || ref(1)\n\n let chart: IChartistLineChart | IChartistBarChart | IChartistPieChart | undefined\n\n const chartHeight = computed(() => {\n if (props.legend) return props.height - 20\n return props.height\n })\n\n const getDataAndOptions = () => {\n const propsOptopns = props.options || {}\n const options = {\n ...propsOptopns,\n width: props.width * slideScale.value,\n height: chartHeight.value * slideScale.value,\n }\n const data = props.type === 'pie' ? { ...props.data, series: props.data.series[0] } : props.data\n return { data, options }\n }\n\n const renderChart = () => {\n if (!chartRef.value) return\n\n const type = upperFirst(props.type)\n const { data, options } = getDataAndOptions()\n chart = new Chartist[type](chartRef.value, data, options)\n }\n\n const updateChart = () => {\n if (!chart) {\n renderChart()\n return\n }\n const { data, options } = getDataAndOptions()\n chart.update(data, options)\n }\n\n watch([\n () => props.width,\n () => props.height,\n () => props.data,\n slideScale,\n ], updateChart)\n\n onMounted(renderChart)\n\n const themeColors = computed(() => {\n let colors: string[] = []\n if (props.themeColor.length === 10) colors = props.themeColor\n else if (props.themeColor.length === 1) colors = tinycolor(props.themeColor[0]).analogous(10).map(color => color.toHexString())\n else {\n const len = props.themeColor.length\n const supplement = tinycolor(props.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n colors = [...props.themeColor.slice(0, len - 1), ...supplement]\n }\n return colors\n })\n\n // 更新主题配色:\n // 如果当前所设置的主题色数小于10,剩余部分获取最后一个主题色的相近颜色作为配色\n const updateTheme = () => {\n if (!chartRef.value) return\n\n for (let i = 0; i < 10; i++) {\n chartRef.value.style.setProperty(`--theme-color-${i + 1}`, themeColors.value[i])\n }\n }\n\n watch(themeColors, updateTheme)\n onMounted(updateTheme)\n\n // 更新网格颜色,包括坐标的文字部分\n const updateGridColor = () => {\n if (!chartRef.value) return\n if (props.gridColor) chartRef.value.style.setProperty(`--grid-color`, props.gridColor)\n }\n\n watch(() => props.gridColor, updateGridColor)\n onMounted(updateGridColor)\n\n return {\n chartHeight,\n themeColors,\n slideScale,\n chartRef,\n }\n },\n})\n","import { render } from \"./Chart.vue?vue&type=template&id=ee28fd7e&scoped=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport \"./Chart.vue?vue&type=style&index=0&id=ee28fd7e&lang=scss&scoped=true\"\nimport \"./Chart.vue?vue&type=style&index=1&id=ee28fd7e&lang=scss\"\nscript.render = render\nscript.__scopeId = \"data-v-ee28fd7e\"\n\nexport default script","\r\nimport { defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\r\nimport emitter, { EmitterEvents } from '@/utils/emitter'\r\n\r\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\r\nimport Chart from './Chart.vue'\r\n\r\nexport default defineComponent({\r\n name: 'editable-element-chart',\r\n components: {\r\n ElementOutline,\r\n Chart,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n selectElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTChartElement, canMove?: boolean) => void>,\r\n required: true,\r\n },\r\n contextmenus: {\r\n type: Function as PropType<() => ContextmenuItem[]>,\r\n },\r\n },\r\n setup(props) {\r\n const handleSelectElement = (e: MouseEvent) => {\r\n if (props.elementInfo.lock) return\r\n e.stopPropagation()\r\n\r\n props.selectElement(e, props.elementInfo)\r\n }\r\n\r\n const openDataEditor = () => {\r\n emitter.emit(EmitterEvents.OPEN_CHART_DATA_EDITOR)\r\n }\r\n\r\n return {\r\n handleSelectElement,\r\n openDataEditor,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=138d40b9&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=138d40b9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-138d40b9\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","import { TableCellStyle } from '@/types/slides'\n\n/**\n * 计算单元格文本样式\n * @param style 单元格文本样式原数据\n */\nexport const getTextStyle = (style?: TableCellStyle) => {\n if (!style) return {}\n const {\n bold,\n em,\n underline,\n strikethrough,\n color,\n backcolor,\n fontsize,\n fontname,\n align,\n } = style\n\n let textDecoration = `${underline ? 'underline' : ''} ${strikethrough ? 'line-through' : ''}`\n if (textDecoration === ' ') textDecoration = 'none'\n \n return {\n fontWeight: bold ? 'bold' : 'normal',\n fontStyle: em ? 'italic' : 'normal',\n textDecoration,\n color: color || '#000',\n backgroundColor: backcolor || '',\n fontSize: fontsize || '14px',\n fontFamily: fontname || '微软雅黑',\n textAlign: align || 'left',\n }\n}\n\nexport const formatText = (text: string) => {\n return text.replace(/\\n/g, '
').replace(/ /g, ' ')\n}","import { computed, Ref } from 'vue'\nimport { TableCell } from '@/types/slides'\n\n// 计算无效的单元格位置(被合并的单元格位置)集合\n\nexport default (cells: Ref) => {\n const hideCells = computed(() => {\n const hideCells = []\n \n for (let i = 0; i < cells.value.length; i++) {\n const rowCells = cells.value[i]\n\n for (let j = 0; j < rowCells.length; j++) {\n const cell = rowCells[j]\n \n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) {\n hideCells.push(`${row}_${col}`)\n }\n }\n }\n }\n }\n return hideCells\n })\n\n return {\n hideCells,\n }\n}","import { ref, Ref, watch } from 'vue'\nimport { TableTheme } from '@/types/slides'\nimport { getTableSubThemeColor } from '@/utils/element'\n\n// 通过表格的主题色计算辅助颜色\n\nexport default (theme: Ref) => {\n const subThemeColor = ref(['', ''])\n watch(() => theme.value, () => {\n if (theme.value) {\n subThemeColor.value = getTableSubThemeColor(theme.value.color)\n }\n }, { immediate: true })\n\n return {\n subThemeColor,\n }\n}","\n\n\n\n","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { pasteCustomClipboardString, pasteExcelClipboardString } from '@/utils/clipboard'\n\nexport default defineComponent({\n name: 'custom-textarea',\n emits: ['updateValue', 'insertExcelData'],\n props: {\n value: {\n type: String,\n default: '',\n },\n contenteditable: {\n type: [Boolean, String],\n default: false,\n },\n },\n setup(props, { emit }) {\n const textareaRef = ref()\n const text = ref('')\n const isFocus = ref(false)\n\n // 自定义v-modal,同步数据\n // 当文本框聚焦时,不执行数据同步\n watch(() => props.value, () => {\n if (isFocus.value) return\n text.value = props.value\n if (textareaRef.value) textareaRef.value.innerHTML = props.value\n }, { immediate: true })\n\n const handleInput = () => {\n if (!textareaRef.value) return\n const text = textareaRef.value.innerHTML\n emit('updateValue', text)\n }\n\n // 聚焦时更新焦点标记,并监听粘贴事件\n const handleFocus = () => {\n isFocus.value = true\n\n if (!textareaRef.value) return\n textareaRef.value.onpaste = (e: ClipboardEvent) => {\n e.preventDefault()\n if (!e.clipboardData) return\n\n const clipboardDataFirstItem = e.clipboardData.items[0]\n\n if (clipboardDataFirstItem && clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => {\n const clipboardData = pasteCustomClipboardString(text)\n if (typeof clipboardData === 'object') return\n \n const excelData = pasteExcelClipboardString(text)\n if (excelData) {\n emit('insertExcelData', excelData)\n if (textareaRef.value) textareaRef.value.innerHTML = excelData[0][0]\n return\n }\n\n emit('updateValue', text)\n document.execCommand('insertText', false, text)\n })\n }\n }\n }\n\n // 失焦时更新焦点标记,清除粘贴事件监听\n const handleBlur = () => {\n isFocus.value = false\n if (textareaRef.value) textareaRef.value.onpaste = null\n }\n\n // 清除粘贴事件监听\n onUnmounted(() => {\n if (textareaRef.value) textareaRef.value.onpaste = null\n })\n\n return {\n textareaRef,\n handleFocus,\n handleInput,\n handleBlur,\n text,\n }\n },\n})\n","import { render } from \"./CustomTextarea.vue?vue&type=template&id=59f468e0&scoped=true\"\nimport script from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\nexport * from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\n\nimport \"./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-59f468e0\"\n\nexport default script","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { debounce, isEqual } from 'lodash'\nimport { useStore } from '@/store'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { KEYS } from '@/configs/hotkey'\nimport { createRandomCode } from '@/utils/common'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nimport CustomTextarea from './CustomTextarea.vue'\n\nexport default defineComponent({\n name: 'editable-table',\n emits: ['change', 'changeColWidths', 'changeSelectedCells'],\n components: {\n CustomTextarea,\n },\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n \n const isStartSelect = ref(false)\n const startCell = ref([])\n const endCell = ref([])\n\n const tableCells = computed({\n get() {\n return props.data\n },\n set(newData) {\n emit('change', newData)\n },\n })\n\n // 主题辅助色\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n // 计算表格每一列的列宽和总宽度\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n \n // 清除全部单元格的选中状态\n // 表格处于不可编辑状态时也需要清除\n const removeSelectedCells = () => {\n startCell.value = []\n endCell.value = []\n }\n\n watch(() => props.editable, () => {\n if (!props.editable) removeSelectedCells()\n })\n\n // 用于拖拽列宽的操作节点位置\n const dragLinePosition = computed(() => {\n const dragLinePosition: number[] = []\n for (let i = 1; i < colSizeList.value.length + 1; i++) {\n const pos = colSizeList.value.slice(0, i).reduce((a, b) => (a + b))\n dragLinePosition.push(pos)\n }\n return dragLinePosition\n })\n\n // 无效的单元格位置(被合并的单元格位置)集合\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n // 当前选中的单元格集合\n const selectedCells = computed(() => {\n if (!startCell.value.length) return []\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return [`${startX}_${startY}`]\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return [`${startX}_${startY}`]\n\n const selectedCells = []\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n for (let j = 0; j < rowCells.length; j++) {\n if (i >= minX && i <= maxX && j >= minY && j <= maxY) selectedCells.push(`${i}_${j}`)\n }\n }\n return selectedCells\n })\n\n watch(selectedCells, (value, oldValue) => {\n if (isEqual(value, oldValue)) return\n emit('changeSelectedCells', selectedCells.value)\n })\n\n // 当前激活的单元格:当且仅当只有一个选中单元格时,该单元格为激活的单元格\n const activedCell = computed(() => {\n if (selectedCells.value.length > 1) return null\n return selectedCells.value[0]\n })\n\n // 当前选中的单元格位置范围\n const selectedRange = computed(() => {\n if (!startCell.value.length) return null\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return { row: [startX, startX], col: [startY, startY] }\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return { row: [startX, startX], col: [startY, startY] }\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n return {\n row: [minX, maxX],\n col: [minY, maxY],\n }\n })\n\n // 设置选中单元格状态(鼠标点击或拖选)\n const handleMouseup = () => isStartSelect.value = false\n\n const handleCellMousedown = (e: MouseEvent, rowIndex: number, colIndex: number) => {\n if (e.button === 0) {\n endCell.value = []\n isStartSelect.value = true\n startCell.value = [rowIndex, colIndex]\n }\n }\n\n const handleCellMouseenter = (rowIndex: number, colIndex: number) => {\n if (!isStartSelect.value) return\n endCell.value = [rowIndex, colIndex]\n }\n\n onMounted(() => {\n document.addEventListener('mouseup', handleMouseup)\n })\n onUnmounted(() => {\n document.removeEventListener('mouseup', handleMouseup)\n })\n\n // 判断某位置是否为无效单元格(被合并掉的位置)\n const isHideCell = (rowIndex: number, colIndex: number) => hideCells.value.includes(`${rowIndex}_${colIndex}`)\n\n // 选中指定的列\n const selectCol = (index: number) => {\n const maxRow = tableCells.value.length - 1\n startCell.value = [0, index]\n endCell.value = [maxRow, index]\n }\n\n // 选中指定的行\n const selectRow = (index: number) => {\n const maxCol = tableCells.value[index].length - 1\n startCell.value = [index, 0]\n endCell.value = [index, maxCol]\n }\n\n // 选中全部单元格\n const selectAll = () => {\n const maxRow = tableCells.value.length - 1\n const maxCol = tableCells.value[maxRow].length - 1\n startCell.value = [0, 0]\n endCell.value = [maxRow, maxCol]\n }\n\n // 删除一行\n const deleteRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const targetCells = tableCells.value[rowIndex]\n const hideCellsPos = []\n for (let i = 0; i < targetCells.length; i++) {\n if (isHideCell(rowIndex, i)) hideCellsPos.push(i)\n }\n \n for (const pos of hideCellsPos) {\n for (let i = rowIndex; i >= 0; i--) {\n if (!isHideCell(i, pos)) {\n _tableCells[i][pos].rowspan = _tableCells[i][pos].rowspan - 1\n break\n }\n }\n }\n\n _tableCells.splice(rowIndex, 1)\n tableCells.value = _tableCells\n }\n\n // 删除一列\n const deleteCol = (colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const hideCellsPos = []\n for (let i = 0; i < tableCells.value.length; i++) {\n if (isHideCell(i, colIndex)) hideCellsPos.push(i)\n }\n\n for (const pos of hideCellsPos) {\n for (let i = colIndex; i >= 0; i--) {\n if (!isHideCell(pos, i)) {\n _tableCells[pos][i].colspan = _tableCells[pos][i].colspan - 1\n break\n }\n }\n }\n\n tableCells.value = _tableCells.map(item => {\n item.splice(colIndex, 1)\n return item\n })\n colSizeList.value.splice(colIndex, 1)\n emit('changeColWidths', colSizeList.value)\n }\n \n // 插入一行\n const insertRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const rowCells: TableCell[] = []\n for (let i = 0; i < _tableCells[0].length; i++) {\n rowCells.push({\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n })\n }\n\n _tableCells.splice(rowIndex, 0, rowCells)\n tableCells.value = _tableCells\n }\n\n // 插入一列\n const insertCol = (colIndex: number) => {\n tableCells.value = tableCells.value.map(item => {\n const cell = {\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n }\n item.splice(colIndex, 0, cell)\n return item\n })\n colSizeList.value.splice(colIndex, 0, 100)\n emit('changeColWidths', colSizeList.value)\n }\n\n // 填充指定的行/列数\n const fillTable = (rowCount: number, colCount: number) => {\n let _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n const defaultCell = { colspan: 1, rowspan: 1, text: '' }\n \n if (rowCount) {\n const newRows = []\n for (let i = 0; i < rowCount; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < _tableCells[0].length; j++) {\n rowCells.push({\n ...defaultCell,\n id: createRandomCode(),\n })\n }\n newRows.push(rowCells)\n }\n _tableCells = [..._tableCells, ...newRows]\n }\n if (colCount) {\n _tableCells = _tableCells.map(item => {\n const cells: TableCell[] = []\n for (let i = 0; i < colCount; i++) {\n const cell = {\n ...defaultCell,\n id: createRandomCode(),\n }\n cells.push(cell)\n }\n return [...item, ...cells]\n })\n colSizeList.value = [...colSizeList.value, ...new Array(colCount).fill(100)]\n emit('changeColWidths', colSizeList.value)\n }\n\n tableCells.value = _tableCells\n }\n \n // 合并单元格\n const mergeCells = () => {\n const [startX, startY] = startCell.value\n const [endX, endY] = endCell.value\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n \n _tableCells[minX][minY].rowspan = maxX - minX + 1\n _tableCells[minX][minY].colspan = maxY - minY + 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 拆分单元格\n const splitCells = (rowIndex: number, colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n _tableCells[rowIndex][colIndex].rowspan = 1\n _tableCells[rowIndex][colIndex].colspan = 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 鼠标拖拽调整列宽\n const handleMousedownColHandler = (e: MouseEvent, colIndex: number) => {\n removeSelectedCells()\n let isMouseDown = true\n\n const originWidth = colSizeList.value[colIndex]\n const startPageX = e.pageX\n\n const minWidth = 50\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n const moveX = (e.pageX - startPageX) / canvasScale.value\n const width = originWidth + moveX < minWidth ? minWidth : Math.round(originWidth + moveX)\n\n colSizeList.value[colIndex] = width\n }\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n emit('changeColWidths', colSizeList.value)\n }\n }\n\n // 清空选中单元格内的文字\n const clearSelectedCellText = () => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n for (let i = 0; i < _tableCells.length; i++) {\n for (let j = 0; j < _tableCells[i].length; j++) {\n if (selectedCells.value.includes(`${i}_${j}`)) {\n _tableCells[i][j].text = ''\n }\n }\n }\n tableCells.value = _tableCells\n }\n\n // 将焦点移动到下一个单元格\n // 当前行右边有单元格时,焦点右移\n // 当前行右边无单元格(已处在行末),且存在下一行时,焦点移动至下一行行首\n // 当前行右边无单元格(已处在行末),且不存在下一行(已处在最后一行)时,新建一行并将焦点移动至下一行行首\n const tabActiveCell = () => {\n const getNextCell = (i: number, j: number): [number, number] | null => {\n if (!tableCells.value[i]) return null\n if (!tableCells.value[i][j]) return getNextCell(i + 1, 0)\n if (isHideCell(i, j)) return getNextCell(i, j + 1)\n return [i, j]\n }\n\n endCell.value = []\n\n const nextRow = startCell.value[0]\n const nextCol = startCell.value[1] + 1\n\n const nextCell = getNextCell(nextRow, nextCol)\n if (!nextCell) {\n insertRow(nextRow + 1)\n startCell.value = [nextRow + 1, 0]\n }\n else startCell.value = nextCell\n\n // 移动焦点后自动聚焦文本\n nextTick(() => {\n const textRef = document.querySelector('.cell-text.active') as HTMLInputElement\n if (textRef) textRef.focus()\n })\n }\n\n // 表格快捷键监听\n const keydownListener = (e: KeyboardEvent) => {\n if (!props.editable || !selectedCells.value.length) return\n\n const key = e.key.toUpperCase()\n if (selectedCells.value.length < 2) {\n if (key === KEYS.TAB) {\n e.preventDefault()\n tabActiveCell()\n }\n if (e.ctrlKey && key === KEYS.UP) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex)\n }\n if (e.ctrlKey && key === KEYS.DOWN) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex + 1)\n }\n if (e.ctrlKey && key === KEYS.LEFT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex)\n }\n if (e.ctrlKey && key === KEYS.RIGHT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex + 1)\n }\n }\n else if (key === KEYS.DELETE) {\n clearSelectedCellText()\n }\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n })\n\n // 单元格文字输入时更新表格数据\n const handleInput = debounce(function(value, rowIndex, colIndex) {\n tableCells.value[rowIndex][colIndex].text = value\n emit('change', tableCells.value)\n }, 300, { trailing: true })\n\n // 插入来自Excel的数据,表格的行/列数不够时自动补足\n const insertExcelData = (data: string[][], rowIndex: number, colIndex: number) => {\n const maxRow = data.length\n const maxCol = data[0].length\n\n let fillRowCount = 0\n let fillColCount = 0\n if (rowIndex + maxRow > tableCells.value.length) fillRowCount = rowIndex + maxRow - tableCells.value.length\n if (colIndex + maxCol > tableCells.value[0].length) fillColCount = colIndex + maxCol - tableCells.value[0].length\n if (fillRowCount || fillColCount) fillTable(fillRowCount, fillColCount)\n\n nextTick(() => {\n for (let i = 0; i < maxRow; i++) {\n for (let j = 0; j < maxCol; j++) {\n if (tableCells.value[rowIndex + i][colIndex + j]) {\n tableCells.value[rowIndex + i][colIndex + j].text = data[i][j]\n }\n }\n }\n emit('change', tableCells.value)\n })\n }\n\n // 获取有效的单元格(排除掉被合并的单元格)\n const getEffectiveTableCells = () => {\n const effectiveTableCells = []\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n const _rowCells = []\n for (let j = 0; j < rowCells.length; j++) {\n if (!isHideCell(i, j)) _rowCells.push(rowCells[j])\n }\n if (_rowCells.length) effectiveTableCells.push(_rowCells)\n }\n\n return effectiveTableCells\n }\n\n // 检查是否可以删除行和列:有效的行/列数大于1\n const checkCanDeleteRowOrCol = () => {\n const effectiveTableCells = getEffectiveTableCells()\n const canDeleteRow = effectiveTableCells.length > 1\n const canDeleteCol = effectiveTableCells[0].length > 1\n\n return { canDeleteRow, canDeleteCol }\n }\n\n // 检查是否可以合并或拆分\n // 必须多选才可以合并\n // 必须单选且所选单元格为合并单元格才可以拆分\n const checkCanMergeOrSplit = (rowIndex: number, colIndex: number) => {\n const isMultiSelected = selectedCells.value.length > 1\n const targetCell = tableCells.value[rowIndex][colIndex]\n\n const canMerge = isMultiSelected\n const canSplit = !isMultiSelected && (targetCell.rowspan > 1 || targetCell.colspan > 1)\n\n return { canMerge, canSplit }\n }\n\n const contextmenus = (el: HTMLElement): ContextmenuItem[] => {\n const cellIndex = el.dataset.cellIndex as string\n const rowIndex = +cellIndex.split('_')[0]\n const colIndex = +cellIndex.split('_')[1]\n\n if (!selectedCells.value.includes(`${rowIndex}_${colIndex}`)) {\n startCell.value = [rowIndex, colIndex]\n endCell.value = []\n }\n\n const { canMerge, canSplit } = checkCanMergeOrSplit(rowIndex, colIndex)\n const { canDeleteRow, canDeleteCol } = checkCanDeleteRowOrCol()\n\n return [\n {\n text: '插入列',\n children: [\n { text: '到左侧', handler: () => insertCol(colIndex) },\n { text: '到右侧', handler: () => insertCol(colIndex + 1) },\n ],\n },\n {\n text: '插入行',\n children: [\n { text: '到上方', handler: () => insertRow(rowIndex) },\n { text: '到下方', handler: () => insertRow(rowIndex + 1) },\n ],\n },\n {\n text: '删除列',\n disable: !canDeleteCol,\n handler: () => deleteCol(colIndex),\n },\n {\n text: '删除行',\n disable: !canDeleteRow,\n handler: () => deleteRow(rowIndex),\n },\n { divider: true },\n {\n text: '合并单元格',\n disable: !canMerge,\n handler: mergeCells,\n },\n {\n text: '取消合并单元格',\n disable: !canSplit,\n handler: () => splitCells(rowIndex, colIndex),\n },\n { divider: true },\n {\n text: '选中当前列',\n handler: () => selectCol(colIndex),\n },\n {\n text: '选中当前行',\n handler: () => selectRow(rowIndex),\n },\n {\n text: '选中全部单元格',\n handler: selectAll,\n },\n ]\n }\n\n return {\n getTextStyle,\n dragLinePosition,\n tableCells,\n colSizeList,\n totalWidth,\n hideCells,\n selectedCells,\n activedCell,\n selectedRange,\n handleCellMousedown,\n handleCellMouseenter,\n selectCol,\n selectRow,\n handleMousedownColHandler,\n contextmenus,\n handleInput,\n insertExcelData,\n subThemeColor,\n formatText,\n }\n },\n})\n","import { render } from \"./EditableTable.vue?vue&type=template&id=5cfa4d0e&scoped=true\"\nimport script from \"./EditableTable.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableTable.vue?vue&type=script&lang=ts\"\n\nimport \"./EditableTable.vue?vue&type=style&index=0&id=5cfa4d0e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5cfa4d0e\"\n\nexport default script","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTableElement, TableCell } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport EditableTable from './EditableTable.vue'\n\nexport default defineComponent({\n name: 'editable-element-table',\n components: {\n EditableTable,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const handleElementId = computed(() => store.state.handleElementId)\n \n const elementRef = ref()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n\n // 更新表格的可编辑状态,表格处于编辑状态时需要禁用全局快捷键\n const editable = ref(false)\n\n watch(handleElementId, () => {\n if (handleElementId.value !== props.elementInfo.id) editable.value = false\n })\n\n watch(editable, () => {\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, editable.value)\n })\n\n const startEdit = () => {\n if (!props.elementInfo.lock) editable.value = true\n }\n\n // 监听表格元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n const isScaling = computed(() => store.state.isScaling)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (isScaling.value) editable.value = false\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTableElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id,\n props: { height: realHeight },\n })\n }\n else realHeightCache.value = realHeight\n }\n }\n\n const resizeObserver = new ResizeObserver(updateTableElementHeight)\n\n onMounted(() => {\n if (elementRef.value) resizeObserver.observe(elementRef.value)\n })\n onUnmounted(() => {\n if (elementRef.value) resizeObserver.unobserve(elementRef.value)\n })\n\n // 更新表格内容数据\n const updateTableCells = (data: TableCell[][]) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { data },\n })\n addHistorySnapshot()\n }\n\n // 更新表格的列宽数据\n const updateColWidths = (widths: number[]) => {\n const width = widths.reduce((a, b) => a + b)\n const colWidths = widths.map(item => item / width)\n\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { width, colWidths },\n })\n addHistorySnapshot()\n }\n\n // 更新表格当前选中的单元格\n const updateSelectedCells = (cells: string[]) => {\n nextTick(() => store.commit(MutationTypes.SET_SELECTED_TABLE_CELLS, cells))\n }\n\n return {\n elementRef,\n canvasScale,\n handleSelectElement,\n updateTableCells,\n updateColWidths,\n editable,\n startEdit,\n updateSelectedCells,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=10d814ca&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=10d814ca&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-10d814ca\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { ElementTypes, PPTElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\n\nimport useLockElement from '@/hooks/useLockElement'\nimport useDeleteElement from '@/hooks/useDeleteElement'\nimport useCombineElement from '@/hooks/useCombineElement'\nimport useOrderElement from '@/hooks/useOrderElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useCopyAndPasteElement from '@/hooks/useCopyAndPasteElement'\nimport useSelectAllElement from '@/hooks/useSelectAllElement'\n\nimport { ElementOrderCommands, ElementAlignCommands } from '@/types/edit'\n\nimport ImageElement from '@/views/components/element/ImageElement/index.vue'\nimport TextElement from '@/views/components/element/TextElement/index.vue'\nimport ShapeElement from '@/views/components/element/ShapeElement/index.vue'\nimport LineElement from '@/views/components/element/LineElement/index.vue'\nimport ChartElement from '@/views/components/element/ChartElement/index.vue'\nimport TableElement from '@/views/components/element/TableElement/index.vue'\n\nexport default defineComponent({\n name: 'editable-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTElement, canMove?: boolean) => void>,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: ImageElement,\n [ElementTypes.TEXT]: TextElement,\n [ElementTypes.SHAPE]: ShapeElement,\n [ElementTypes.LINE]: LineElement,\n [ElementTypes.CHART]: ChartElement,\n [ElementTypes.TABLE]: TableElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const { orderElement } = useOrderElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { combineElements, uncombineElements } = useCombineElement()\n const { deleteElement } = useDeleteElement()\n const { lockElement, unlockElement } = useLockElement()\n const { copyElement, pasteElement, cutElement } = useCopyAndPasteElement()\n const { selectAllElement } = useSelectAllElement()\n\n const contextmenus = (): ContextmenuItem[] => {\n if (props.elementInfo.lock) {\n return [{\n text: '解锁', \n handler: () => unlockElement(props.elementInfo),\n }]\n }\n\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutElement,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copyElement,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteElement,\n },\n { divider: true },\n {\n text: '水平居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER), },\n { text: '水平居中', handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL) },\n { text: '左对齐', handler: () => alignElementToCanvas(ElementAlignCommands.LEFT) },\n { text: '右对齐', handler: () => alignElementToCanvas(ElementAlignCommands.RIGHT) },\n ],\n },\n {\n text: '垂直居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER) },\n { text: '垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL) },\n { text: '顶部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.TOP) },\n { text: '底部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.BOTTOM) },\n ],\n },\n { divider: true },\n {\n text: '置于顶层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP),\n children: [\n { text: '置于顶层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP) },\n { text: '上移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.UP) },\n ],\n },\n {\n text: '置于底层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM),\n children: [\n { text: '置于底层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM) },\n { text: '下移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.DOWN) },\n ],\n },\n { divider: true },\n {\n text: '设置链接',\n handler: props.openLinkDialog,\n },\n {\n text: props.elementInfo.groupId ? '取消组合' : '组合',\n subText: 'Ctrl + G',\n handler: props.elementInfo.groupId ? uncombineElements : combineElements,\n hide: !props.isMultiSelect,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllElement,\n },\n {\n text: '锁定',\n subText: 'Ctrl + L',\n handler: lockElement,\n },\n {\n text: '删除',\n subText: 'Delete',\n handler: deleteElement,\n },\n ]\n }\n\n return {\n currentElementComponent,\n contextmenus,\n }\n },\n})\n","import { render } from \"./EditableElement.vue?vue&type=template&id=cbbbf8fc\"\nimport script from \"./EditableElement.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableElement.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","\nexport default {\n name: 'mouse-selection',\n props: {\n top: {\n type: Number,\n required: true,\n },\n left: {\n type: Number,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n quadrant: {\n type: Number,\n required: true,\n validator(value: number) {\n return [1, 2, 3, 4].includes(value)\n },\n },\n }\n}\n","import { render } from \"./MouseSelection.vue?vue&type=template&id=1619c258&scoped=true\"\nimport script from \"./MouseSelection.vue?vue&type=script&lang=ts\"\nexport * from \"./MouseSelection.vue?vue&type=script&lang=ts\"\n\nimport \"./MouseSelection.vue?vue&type=style&index=0&id=1619c258&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1619c258\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","\nimport { defineComponent, computed } from 'vue'\nimport tinycolor from 'tinycolor2'\nimport { useStore } from '@/store'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { SlideBackground } from '@/types/slides'\n\nexport default defineComponent({\n name: 'grid-lines',\n setup() {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const background = computed(() => store.getters.currentSlide?.background)\n\n // 计算网格线的颜色,避免与背景的颜色太接近\n const gridColor = computed(() => {\n const bgColor = background.value?.color || '#fff'\n const colorList = ['#000', '#fff']\n return tinycolor.mostReadable(bgColor, colorList, { includeFallbackColors: true }).setAlpha(.5).toRgbString()\n })\n\n const gridSize = 50\n\n // 计算网格路径\n const getPath = () => {\n const maxX = VIEWPORT_SIZE\n const maxY = VIEWPORT_SIZE * viewportRatio.value\n\n let path = ''\n for (let i = 0; i <= Math.floor(maxY / gridSize); i++) {\n path += `M0 ${i * gridSize} L${maxX} ${i * gridSize} `\n }\n for (let i = 0; i <= Math.floor(maxX / gridSize); i++) {\n path += `M${i * gridSize} 0 L${i * gridSize} ${maxY} `\n }\n return path\n }\n\n return {\n canvasScale,\n gridColor,\n width: VIEWPORT_SIZE,\n height: VIEWPORT_SIZE * viewportRatio.value,\n path: getPath(),\n }\n },\n})\n","import { render } from \"./GridLines.vue?vue&type=template&id=1d945f13&scoped=true\"\nimport script from \"./GridLines.vue?vue&type=script&lang=ts\"\nexport * from \"./GridLines.vue?vue&type=script&lang=ts\"\n\nimport \"./GridLines.vue?vue&type=style&index=0&id=1d945f13&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1d945f13\"\n\nexport default script","import { Ref, computed } from 'vue'\nimport { SlideBackground } from '@/types/slides'\n\n// 将页面背景数据转换为css样式\nexport default (background: Ref) => {\n const backgroundStyle = computed(() => {\n if (!background.value) return { backgroundColor: '#fff' }\n\n const {\n type,\n color,\n image,\n imageSize,\n gradientColor,\n gradientRotate,\n gradientType,\n } = background.value\n\n // 纯色背景\n if (type === 'solid') return { backgroundColor: color }\n\n // 背景图模式\n // 包括:背景图、背景大小,是否重复\n else if (type === 'image') {\n if (!image) return { backgroundColor: '#fff' }\n if (imageSize === 'repeat') {\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'repeat',\n backgroundSize: 'contain',\n }\n }\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: imageSize || 'cover',\n }\n }\n\n // 渐变色背景\n else if (type === 'gradient') {\n const rotate = gradientRotate || 0\n const color1 = gradientColor ? gradientColor[0] : '#fff'\n const color2 = gradientColor ? gradientColor[1] : '#fff'\n \n if (gradientType === 'radial') return { backgroundImage: `radial-gradient(${color1}, ${color2}` }\n return { backgroundImage: `linear-gradient(${rotate}deg, ${color1}, ${color2}` }\n }\n\n return { backgroundColor: '#fff' }\n })\n\n return {\n backgroundStyle,\n }\n}","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { SlideBackground } from '@/types/slides'\nimport GridLines from './GridLines.vue'\nimport useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'\n\nexport default defineComponent({\n name: 'viewport-background',\n components: {\n GridLines,\n },\n setup() {\n const store = useStore()\n const showGridLines = computed(() => store.state.showGridLines)\n const background = computed(() => store.getters.currentSlide?.background)\n\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n return {\n showGridLines,\n backgroundStyle,\n }\n },\n})\n","import { render } from \"./ViewportBackground.vue?vue&type=template&id=a9ca1b50&scoped=true\"\nimport script from \"./ViewportBackground.vue?vue&type=script&lang=ts\"\nexport * from \"./ViewportBackground.vue?vue&type=script&lang=ts\"\n\nimport \"./ViewportBackground.vue?vue&type=style&index=0&id=a9ca1b50&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a9ca1b50\"\n\nexport default script","\n\n\n\n","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { AlignmentLineAxis } from '@/types/edit'\n\nexport default defineComponent({\n name: 'alignment-line',\n props: {\n type: {\n type: String as PropType<'vertical' | 'horizontal'>,\n required: true,\n },\n axis: {\n type: Object as PropType,\n required: true,\n },\n length: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n // 吸附对齐线的位置\n const left = computed(() => props.axis.x * canvasScale.value + 'px')\n const top = computed(() => props.axis.y * canvasScale.value + 'px')\n\n // 吸附对齐线的长度\n const sizeStyle = computed(() => {\n if (props.type === 'vertical') return { height: props.length * canvasScale.value + 'px' }\n return { width: props.length * canvasScale.value + 'px' }\n })\n\n return {\n left,\n top,\n sizeStyle,\n }\n },\n})\n","import { render } from \"./AlignmentLine.vue?vue&type=template&id=2d3eddf5&scoped=true\"\nimport script from \"./AlignmentLine.vue?vue&type=script&lang=ts\"\nexport * from \"./AlignmentLine.vue?vue&type=script&lang=ts\"\n\nimport \"./AlignmentLine.vue?vue&type=style&index=0&id=2d3eddf5&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2d3eddf5\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, reactive, ref } from 'vue'\nimport { useStore } from '@/store'\n\nexport default defineComponent({\n name: 'element-create-selection',\n emits: ['created'],\n setup(props, { emit }) {\n const store = useStore()\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n const creatingElement = computed(() => store.state.creatingElement)\n\n const start = ref<[number, number]>()\n const end = ref<[number, number]>()\n\n const selectionRef = ref()\n const offset = reactive({\n x: 0,\n y: 0,\n })\n onMounted(() => {\n if (!selectionRef.value) return\n const { x, y } = selectionRef.value.getBoundingClientRect()\n offset.x = x\n offset.y = y\n })\n\n // 鼠标拖动创建元素生成位置大小\n // 获取范围的起始位置和终点位置\n const createSelection = (e: MouseEvent) => {\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n start.value = [startPageX, startPageY]\n\n document.onmousemove = e => {\n if (!creatingElement.value || !isMouseDown) return\n\n let currentPageX = e.pageX\n let currentPageY = e.pageY\n\n // 按住Ctrl键或者Shift键时:\n // 对于非线条元素需要锁定宽高比例,对于线条元素需要锁定水平或垂直方向\n if (ctrlOrShiftKeyActive.value) {\n const moveX = currentPageX - startPageX\n const moveY = currentPageY - startPageY\n\n // 水平和垂直方向的拖动距离,后面以拖动距离较大的方向为基础计算另一方向的数据\n const absX = Math.abs(moveX)\n const absY = Math.abs(moveY)\n\n if (creatingElement.value.type === 'shape') {\n\n // 判断是否为反向拖动:从左上到右下为正向操作,此外所有情况都是反向操作\n const isOpposite = (moveY > 0 && moveX < 0) || (moveY < 0 && moveX > 0)\n\n if (absX > absY) {\n currentPageY = isOpposite ? startPageY - moveX : startPageY + moveX\n }\n else {\n currentPageX = isOpposite ? startPageX - moveY : startPageX + moveY\n }\n }\n\n else if (creatingElement.value.type === 'line') {\n if (absX > absY) currentPageY = startPageY\n else currentPageX = startPageX\n }\n }\n\n end.value = [currentPageX, currentPageY]\n }\n\n document.onmouseup = e => {\n document.onmousemove = null\n document.onmouseup = null\n isMouseDown = false\n\n const endPageX = e.pageX\n const endPageY = e.pageY\n\n const minSize = 30\n\n if (\n creatingElement.value?.type === 'line' &&\n (Math.abs(endPageX - startPageX) >= minSize || Math.abs(endPageY - startPageY) >= minSize)\n ) {\n emit('created', {\n start: start.value,\n end: end.value,\n })\n }\n else if (\n creatingElement.value?.type !== 'line' &&\n (Math.abs(endPageX - startPageX) >= minSize && Math.abs(endPageY - startPageY) >= minSize)\n ) {\n emit('created', {\n start: start.value,\n end: end.value,\n })\n }\n else {\n const defaultSize = 200\n const minX = Math.min(endPageX, startPageX)\n const minY = Math.min(endPageY, startPageY)\n const maxX = Math.max(endPageX, startPageX)\n const maxY = Math.max(endPageY, startPageY)\n const offsetX = maxX - minX >= minSize ? maxX - minX : defaultSize\n const offsetY = maxY - minY >= minSize ? maxY - minY : defaultSize\n emit('created', {\n start: [minX, minY],\n end: [minX + offsetX, minY + offsetY],\n })\n }\n }\n }\n\n // 绘制线条的路径相关数据(仅当绘制元素类型为线条时使用)\n const lineData = computed(() => {\n if (!start.value || !end.value) return null\n if (!creatingElement.value || creatingElement.value.type !== 'line') return null\n\n const [_startX, _startY] = start.value\n const [_endX, _endY] = end.value\n const minX = Math.min(_startX, _endX)\n const maxX = Math.max(_startX, _endX)\n const minY = Math.min(_startY, _endY)\n const maxY = Math.max(_startY, _endY)\n\n const svgWidth = maxX - minX >= 24 ? maxX - minX : 24\n const svgHeight = maxY - minY >= 24 ? maxY - minY : 24\n\n const startX = _startX === minX ? 0 : maxX - minX\n const startY = _startY === minY ? 0 : maxY - minY\n const endX = _endX === minX ? 0 : maxX - minX\n const endY = _endY === minY ? 0 : maxY - minY\n\n const path = `M${startX}, ${startY} L${endX}, ${endY}`\n\n return {\n svgWidth,\n svgHeight,\n startX,\n startY,\n endX,\n endY,\n path,\n }\n })\n\n // 根据生成范围的起始位置和终点位置,计算元素创建时的位置和大小\n const position = computed(() => {\n if (!start.value || !end.value) return {}\n\n const [startX, startY] = start.value\n const [endX, endY] = end.value\n const minX = Math.min(startX, endX)\n const maxX = Math.max(startX, endX)\n const minY = Math.min(startY, endY)\n const maxY = Math.max(startY, endY)\n\n const width = maxX - minX\n const height = maxY - minY\n\n return {\n left: minX - offset.x + 'px',\n top: minY - offset.y + 'px',\n width: width + 'px',\n height: height + 'px',\n }\n })\n\n return {\n selectionRef,\n start,\n end,\n creatingElement,\n createSelection,\n lineData,\n position,\n }\n },\n})\n","import { render } from \"./ElementCreateSelection.vue?vue&type=template&id=04472140&scoped=true\"\nimport script from \"./ElementCreateSelection.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementCreateSelection.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementCreateSelection.vue?vue&type=style&index=0&id=04472140&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-04472140\"\n\nexport default script","\n\n\n\n","import { computed, Ref } from 'vue'\nimport { OperateResizeHandlers, OperateBorderLines } from '@/types/edit'\n\nexport default (width: Ref, height: Ref) => {\n // 元素缩放点\n const resizeHandlers = computed(() => {\n return [\n { direction: OperateResizeHandlers.LEFT_TOP, style: {} },\n { direction: OperateResizeHandlers.TOP, style: {left: width.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.RIGHT_TOP, style: {left: width.value + 'px'} },\n { direction: OperateResizeHandlers.LEFT, style: {top: height.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.RIGHT, style: {left: width.value + 'px', top: height.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.LEFT_BOTTOM, style: {top: height.value + 'px'} },\n { direction: OperateResizeHandlers.BOTTOM, style: {left: width.value / 2 + 'px', top: height.value + 'px'} },\n { direction: OperateResizeHandlers.RIGHT_BOTTOM, style: {left: width.value + 'px', top: height.value + 'px'} },\n ]\n })\n\n // 文本元素缩放点\n const textElementResizeHandlers = computed(() => {\n return [\n { direction: OperateResizeHandlers.LEFT, style: {top: height.value / 2 + 'px'} },\n { direction: OperateResizeHandlers.RIGHT, style: {left: width.value + 'px', top: height.value / 2 + 'px'} },\n ]\n })\n\n // 元素选中边框线\n const borderLines = computed(() => {\n return [\n { type: OperateBorderLines.T, style: {width: width.value + 'px'} },\n { type: OperateBorderLines.B, style: {top: height.value + 'px', width: width.value + 'px'} },\n { type: OperateBorderLines.L, style: {height: height.value + 'px'} },\n { type: OperateBorderLines.R, style: {left: width.value + 'px', height: height.value + 'px'} },\n ]\n })\n\n return {\n resizeHandlers,\n textElementResizeHandlers,\n borderLines,\n }\n}","\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { OperateResizeHandler } from '@/types/edit'\n\nexport default defineComponent({\n name: 'resize-handler',\n props: {\n type: {\n type: String as PropType,\n default: '',\n },\n rotate: {\n type: Number,\n default: 0,\n },\n },\n setup(props) {\n const rotateClassName = computed(() => {\n const prefix = 'rotate-'\n const rotate = props.rotate\n if (rotate > -22.5 && rotate <= 22.5) return prefix + 0\n else if (rotate > 22.5 && rotate <= 67.5) return prefix + 45\n else if (rotate > 67.5 && rotate <= 112.5) return prefix + 90\n else if (rotate > 112.5 && rotate <= 157.5) return prefix + 135\n else if (rotate > 157.5 || rotate <= -157.5) return prefix + 0\n else if (rotate > -157.5 && rotate <= -112.5) return prefix + 45\n else if (rotate > -112.5 && rotate <= -67.5) return prefix + 90\n else if (rotate > -67.5 && rotate <= -22.5) return prefix + 135\n return prefix + 0\n })\n\n return {\n rotateClassName,\n }\n },\n})\n","import { render } from \"./ResizeHandler.vue?vue&type=template&id=680e5917&scoped=true\"\nimport script from \"./ResizeHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./ResizeHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./ResizeHandler.vue?vue&type=style&index=0&id=680e5917&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-680e5917\"\n\nexport default script","\n\n\n\n","\nimport { PropType } from 'vue'\nimport { OperateBorderLine } from '@/types/edit'\n\nexport default {\n name: 'border-line',\n props: {\n type: {\n type: String as PropType,\n required: true,\n },\n isWide: {\n type: Boolean,\n default: false,\n },\n },\n}\n","import { render } from \"./BorderLine.vue?vue&type=template&id=630e246b&scoped=true\"\nimport script from \"./BorderLine.vue?vue&type=script&lang=ts\"\nexport * from \"./BorderLine.vue?vue&type=script&lang=ts\"\n\nimport \"./BorderLine.vue?vue&type=style&index=0&id=630e246b&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-630e246b\"\n\nexport default script","\nimport { computed, defineComponent, reactive, PropType, watchEffect, toRefs } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementListRange } from '@/utils/element'\nimport { OperateResizeHandler, MultiSelectRange } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'multi-select-operate',\n components: {\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementList: {\n type: Array as PropType,\n required: true,\n },\n scaleMultiElement: {\n type: Function as PropType<(e: MouseEvent, range: MultiSelectRange, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const canvasScale = computed(() => store.state.canvasScale)\n const localActiveElementList = computed(() => props.elementList.filter(el => activeElementIdList.value.includes(el.id)))\n\n const range = reactive({\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0,\n })\n\n // 根据多选元素整体在画布中的范围,计算边框线和缩放点的位置信息\n const width = computed(() => (range.maxX - range.minX) * canvasScale.value)\n const height = computed(() => (range.maxY - range.minY) * canvasScale.value)\n const { resizeHandlers, borderLines } = useCommonOperate(width, height)\n\n // 计算多选元素整体在画布中的范围\n const setRange = () => {\n const { minX, maxX, minY, maxY } = getElementListRange(localActiveElementList.value)\n range.minX = minX\n range.maxX = maxX\n range.minY = minY\n range.maxY = maxY\n }\n watchEffect(setRange)\n\n // 禁用多选状态下缩放:仅未旋转的图片和形状可以在多选状态下缩放\n const disableResize = computed(() => {\n return localActiveElementList.value.some(item => {\n if (\n (item.type === 'image' || item.type === 'shape') && \n !item.rotate\n ) return false\n return true\n })\n })\n\n return {\n ...toRefs(range),\n canvasScale,\n borderLines,\n disableResize,\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./MultiSelectOperate.vue?vue&type=template&id=4def6455&scoped=true\"\nimport script from \"./MultiSelectOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./MultiSelectOperate.vue?vue&type=script&lang=ts\"\n\nimport \"./MultiSelectOperate.vue?vue&type=style&index=0&id=4def6455&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4def6455\"\n\nexport default script","\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","\n\n\n\n","\nexport default {\n name: 'rotate-handler',\n}\n","import { render } from \"./RotateHandler.vue?vue&type=template&id=9a549510&scoped=true\"\nimport script from \"./RotateHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./RotateHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./RotateHandler.vue?vue&type=style&index=0&id=9a549510&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9a549510\"\n\nexport default script","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { useStore } from '@/store'\r\nimport { PPTImageElement } from '@/types/slides'\r\nimport { OperateResizeHandler } from '@/types/edit'\r\nimport useCommonOperate from '../hooks/useCommonOperate'\r\n\r\nimport RotateHandler from './RotateHandler.vue'\r\nimport ResizeHandler from './ResizeHandler.vue'\r\nimport BorderLine from './BorderLine.vue'\r\n\r\nexport default defineComponent({\r\n name: 'image-element-operate',\r\n inheritAttrs: false,\r\n components: {\r\n RotateHandler,\r\n ResizeHandler,\r\n BorderLine,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: PPTImageElement) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTImageElement, command: OperateResizeHandler) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const store = useStore()\r\n const canvasScale = computed(() => store.state.canvasScale)\r\n const clipingImageElementId = computed(() => store.state.clipingImageElementId)\r\n const isCliping = computed(() => clipingImageElementId.value === props.elementInfo.id)\r\n\r\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\r\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\r\n const { resizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\r\n\r\n return {\r\n isCliping,\r\n scaleWidth,\r\n resizeHandlers,\r\n borderLines,\r\n }\r\n },\r\n})\r\n","import { render } from \"./ImageElementOperate.vue?vue&type=template&id=7dc35c8e&scoped=true\"\nimport script from \"./ImageElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageElementOperate.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageElementOperate.vue?vue&type=style&index=0&id=7dc35c8e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7dc35c8e\"\n\nexport default script","\r\n\r\n","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { useStore } from '@/store'\r\n\r\nimport { PPTTextElement } from '@/types/slides'\r\nimport { OperateResizeHandler } from '@/types/edit'\r\nimport useCommonOperate from '../hooks/useCommonOperate'\r\n\r\nimport RotateHandler from './RotateHandler.vue'\r\nimport ResizeHandler from './ResizeHandler.vue'\r\nimport BorderLine from './BorderLine.vue'\r\n\r\nexport default defineComponent({\r\n name: 'text-element-operate',\r\n inheritAttrs: false,\r\n components: {\r\n RotateHandler,\r\n ResizeHandler,\r\n BorderLine,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: PPTTextElement) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTTextElement, command: OperateResizeHandler) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const store = useStore()\r\n const canvasScale = computed(() => store.state.canvasScale)\r\n\r\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\r\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\r\n\r\n const { textElementResizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\r\n\r\n return {\r\n scaleWidth,\r\n textElementResizeHandlers,\r\n borderLines,\r\n }\r\n },\r\n})\r\n","import { render } from \"./TextElementOperate.vue?vue&type=template&id=1c6ae133\"\nimport script from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandler } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport RotateHandler from './RotateHandler.vue'\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'shape-element-operate',\n inheritAttrs: false,\n components: {\n RotateHandler,\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n rotateElement: {\n type: Function as PropType<(element: PPTShapeElement) => void>,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\n const { resizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\n\n return {\n scaleWidth,\n resizeHandlers,\n borderLines,\n }\n },\n})\n","import { render } from \"./ShapeElementOperate.vue?vue&type=template&id=1d01ac74\"\nimport script from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTLineElement } from '@/types/slides'\nimport { OperateLineHandler, OperateLineHandlers } from '@/types/edit'\n\nimport ResizeHandler from './ResizeHandler.vue'\n\nexport default defineComponent({\n name: 'text-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n dragLineElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, command: OperateLineHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const resizeHandlers = computed(() => {\n const handlers = [\n {\n handler: OperateLineHandlers.START,\n style: {\n left: props.elementInfo.start[0] * canvasScale.value + 'px',\n top: props.elementInfo.start[1] * canvasScale.value + 'px',\n }\n },\n {\n handler: OperateLineHandlers.END,\n style: {\n left: props.elementInfo.end[0] * canvasScale.value + 'px',\n top: props.elementInfo.end[1] * canvasScale.value + 'px',\n }\n },\n ]\n\n if (props.elementInfo.curve || props.elementInfo.broken) {\n const midHandler = (props.elementInfo.curve || props.elementInfo.broken) as [number, number]\n\n handlers.push({\n handler: OperateLineHandlers.MID,\n style: {\n left: midHandler[0] * canvasScale.value + 'px',\n top: midHandler[1] * canvasScale.value + 'px',\n }\n })\n }\n return handlers\n })\n\n return {\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./LineElementOperate.vue?vue&type=template&id=019938f6\"\nimport script from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandler } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'chart-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value)\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\n const { resizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\n\n return {\n scaleWidth,\n resizeHandlers,\n borderLines,\n }\n },\n})\n","import { render } from \"./ChartElementOperate.vue?vue&type=template&id=4218643e\"\nimport script from \"./ChartElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport { PPTTableElement } from '@/types/slides'\nimport { OperateResizeHandler } from '@/types/edit'\nimport useCommonOperate from '../hooks/useCommonOperate'\n\nimport ResizeHandler from './ResizeHandler.vue'\nimport BorderLine from './BorderLine.vue'\n\nexport default defineComponent({\n name: 'table-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n BorderLine,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n isActiveGroupElement: {\n type: Boolean,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, command: OperateResizeHandler) => void>,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const outlineWidth = computed(() => props.elementInfo.outline.width || 1)\n\n const scaleWidth = computed(() => (props.elementInfo.width + outlineWidth.value) * canvasScale.value)\n const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value)\n\n const { textElementResizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight)\n\n return {\n scaleWidth,\n textElementResizeHandlers,\n borderLines,\n }\n },\n})\n","import { render } from \"./TableElementOperate.vue?vue&type=template&id=459ab724\"\nimport script from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","import { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const store = useStore()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const setLink = (handleElement: PPTElement, link: string) => {\n const linkRegExp = /^(https?):\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+([\\w\\-.,@?^=%&:\\/~+#]*[\\w\\-@?^=%&\\/~+#])?$/\n if (!link || !linkRegExp.test(link)) {\n message.error('不是正确的网页链接地址')\n return false\n }\n const props = { link }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.id, props })\n addHistorySnapshot()\n\n return true\n }\n\n const removeLink = (handleElement: PPTElement) => {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.id, propName: 'link' })\n addHistorySnapshot()\n }\n\n return {\n setLink,\n removeLink,\n }\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nexport default defineComponent({\n name: 'link-handler',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup() {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n\n const { removeLink } = useLink()\n\n return {\n canvasScale,\n removeLink,\n }\n },\n})\n","import { render } from \"./LinkHandler.vue?vue&type=template&id=9d9e1336&scoped=true\"\nimport script from \"./LinkHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkHandler.vue?vue&type=style&index=0&id=9d9e1336&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9d9e1336\"\n\nexport default script","\r\nimport { defineComponent, PropType, computed } from 'vue'\r\nimport { useStore } from '@/store'\r\nimport { ElementTypes, PPTElement, Slide } from '@/types/slides'\r\nimport { OperateLineHandler, OperateResizeHandler } from '@/types/edit'\r\n\r\nimport ImageElementOperate from './ImageElementOperate.vue'\r\nimport TextElementOperate from './TextElementOperate.vue'\r\nimport ShapeElementOperate from './ShapeElementOperate.vue'\r\nimport LineElementOperate from './LineElementOperate.vue'\r\nimport ChartElementOperate from './ChartElementOperate.vue'\r\nimport TableElementOperate from './TableElementOperate.vue'\r\nimport LinkHandler from './LinkHandler.vue'\r\n\r\nexport default defineComponent({\r\n name: 'operate',\r\n components: {\r\n LinkHandler,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isSelected: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActive: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: PPTElement) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTElement, command: OperateResizeHandler) => void>,\r\n required: true,\r\n },\r\n dragLineElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTElement, command: OperateLineHandler) => void>,\r\n required: true,\r\n },\r\n openLinkDialog: {\r\n type: Function as PropType<() => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const store = useStore()\r\n const canvasScale = computed(() => store.state.canvasScale)\r\n const toolbarState = computed(() => store.state.toolbarState)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const currentOperateComponent = computed(() => {\r\n const elementTypeMap = {\r\n [ElementTypes.IMAGE]: ImageElementOperate,\r\n [ElementTypes.TEXT]: TextElementOperate,\r\n [ElementTypes.SHAPE]: ShapeElementOperate,\r\n [ElementTypes.LINE]: LineElementOperate,\r\n [ElementTypes.CHART]: ChartElementOperate,\r\n [ElementTypes.TABLE]: TableElementOperate,\r\n }\r\n return elementTypeMap[props.elementInfo.type] || null\r\n })\r\n\r\n const elementIndexInAnimation = computed(() => {\r\n const animations = currentSlide.value.animations || []\r\n return animations.findIndex(animation => animation.elId === props.elementInfo.id)\r\n })\r\n\r\n return {\r\n currentOperateComponent,\r\n canvasScale,\r\n toolbarState,\r\n elementIndexInAnimation,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=46d959c4&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=46d959c4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-46d959c4\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nexport default defineComponent({\n name: 'link-dialog',\n emits: ['close'],\n setup(props, { emit }) {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const link = ref('')\n\n const { setLink } = useLink()\n\n onMounted(() => {\n if (handleElement.value?.link) link.value = handleElement.value.link\n })\n\n const close = () => emit('close')\n\n const save = () => {\n if (handleElement.value) {\n const success = setLink(handleElement.value, link.value)\n if (success) close()\n else link.value = ''\n }\n }\n\n return {\n link,\n close,\n save,\n }\n },\n})\n","import { render } from \"./LinkDialog.vue?vue&type=template&id=02317299&scoped=true\"\nimport script from \"./LinkDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkDialog.vue?vue&type=style&index=0&id=02317299&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-02317299\"\n\nexport default script","\nimport { computed, defineComponent, provide, ref, watch, watchEffect } from 'vue'\nimport { throttle } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { AlignmentLineProps } from '@/types/edit'\nimport { removeAllRanges } from '@/utils/selection'\nimport { KEYS } from '@/configs/hotkey'\n\nimport useViewportSize from './hooks/useViewportSize'\nimport useMouseSelection from './hooks/useMouseSelection'\nimport useDropImageOrText from './hooks/useDropImageOrText'\nimport useRotateElement from './hooks/useRotateElement'\nimport useScaleElement from './hooks/useScaleElement'\nimport useSelectElement from './hooks/useSelectElement'\nimport useDragElement from './hooks/useDragElement'\nimport useDragLineElement from './hooks/useDragLineElement'\nimport useInsertFromCreateSelection from './hooks/useInsertFromCreateSelection'\n\nimport useDeleteElement from '@/hooks/useDeleteElement'\nimport useCopyAndPasteElement from '@/hooks/useCopyAndPasteElement'\nimport useSelectAllElement from '@/hooks/useSelectAllElement'\nimport useScaleCanvas from '@/hooks/useScaleCanvas'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\n\nimport EditableElement from './EditableElement.vue'\nimport MouseSelection from './MouseSelection.vue'\nimport ViewportBackground from './ViewportBackground.vue'\nimport AlignmentLine from './AlignmentLine.vue'\nimport ElementCreateSelection from './ElementCreateSelection.vue'\nimport MultiSelectOperate from './Operate/MultiSelectOperate.vue'\nimport Operate from './Operate/index.vue'\nimport LinkDialog from './LinkDialog.vue'\n\nexport default defineComponent({\n name: 'editor-canvas',\n components: {\n EditableElement,\n MouseSelection,\n ViewportBackground,\n AlignmentLine,\n ElementCreateSelection,\n MultiSelectOperate,\n Operate,\n LinkDialog,\n },\n setup() {\n const store = useStore()\n\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const handleElementId = computed(() => store.state.handleElementId)\n const activeGroupElementId = computed(() => store.state.activeGroupElementId)\n const editorAreaFocus = computed(() => store.state.editorAreaFocus)\n const ctrlKeyState = computed(() => store.state.ctrlKeyState)\n const ctrlOrShiftKeyActive = computed(() => store.getters.ctrlOrShiftKeyActive)\n\n const viewportRef = ref()\n const alignmentLines = ref([])\n\n const linkDialogVisible = ref(false)\n const openLinkDialog = () => linkDialogVisible.value = true\n\n watch(handleElementId, () => {\n store.commit(MutationTypes.SET_ACTIVE_GROUP_ELEMENT_ID, '')\n })\n\n const currentSlide = computed(() => store.getters.currentSlide)\n const elementList = ref([])\n const setLocalElementList = () => {\n elementList.value = currentSlide.value ? JSON.parse(JSON.stringify(currentSlide.value.elements)) : []\n }\n watchEffect(setLocalElementList)\n\n const canvasRef = ref()\n const canvasScale = computed(() => store.state.canvasScale)\n const { viewportStyles } = useViewportSize(canvasRef)\n\n useDropImageOrText(canvasRef)\n\n const { mouseSelectionState, updateMouseSelection } = useMouseSelection(elementList, viewportRef)\n\n const { dragElement } = useDragElement(elementList, alignmentLines)\n const { dragLineElement } = useDragLineElement(elementList)\n const { selectElement } = useSelectElement(elementList, dragElement)\n const { scaleElement, scaleMultiElement } = useScaleElement(elementList, alignmentLines)\n const { rotateElement } = useRotateElement(elementList, viewportRef)\n\n const { selectAllElement } = useSelectAllElement()\n const { deleteAllElements } = useDeleteElement()\n const { pasteElement } = useCopyAndPasteElement()\n const { enterScreening } = useScreening()\n const { updateSlideIndex } = useSlideHandler()\n\n // 点击画布的空白区域:清空焦点元素、设置画布焦点、清除文字选区\n const handleClickBlankArea = (e: MouseEvent) => {\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n if (!ctrlOrShiftKeyActive.value) updateMouseSelection(e)\n if (!editorAreaFocus.value) store.commit(MutationTypes.SET_EDITORAREA_FOCUS, true)\n removeAllRanges()\n }\n\n // 移除画布编辑区域焦点\n const removeEditorAreaFocus = () => {\n if (editorAreaFocus.value) store.commit(MutationTypes.SET_EDITORAREA_FOCUS, false)\n }\n\n // 滚动鼠标\n const { scaleCanvas } = useScaleCanvas()\n const throttleScaleCanvas = throttle(scaleCanvas, 100, { leading: true, trailing: false })\n const throttleUpdateSlideIndex = throttle(updateSlideIndex, 300, { leading: true, trailing: false })\n\n const handleMousewheelCanvas = (e: WheelEvent) => {\n e.preventDefault()\n\n // 按住Ctrl键时:缩放画布\n if (ctrlKeyState.value) {\n if (e.deltaY > 0) throttleScaleCanvas('-')\n else if (e.deltaY < 0) throttleScaleCanvas('+')\n }\n // 上下翻页\n else {\n if (e.deltaY > 0) throttleUpdateSlideIndex(KEYS.DOWN)\n else if (e.deltaY < 0) throttleUpdateSlideIndex(KEYS.UP)\n }\n }\n\n // 开关网格线\n const showGridLines = computed(() => store.state.showGridLines)\n const toggleGridLines = () => {\n store.commit(MutationTypes.SET_GRID_LINES_STATE, !showGridLines.value)\n }\n\n // 在鼠标绘制的范围插入元素\n const creatingElement = computed(() => store.state.creatingElement)\n const { insertElementFromCreateSelection } = useInsertFromCreateSelection(viewportRef)\n\n const contextmenus = (): ContextmenuItem[] => {\n return [\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteElement,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllElement,\n },\n {\n text: '网格线',\n subText: showGridLines.value ? '√' : '',\n handler: toggleGridLines,\n },\n {\n text: '重置当前页',\n handler: deleteAllElements,\n },\n { divider: true },\n {\n text: '从当前页演示',\n subText: 'Ctrl+F',\n handler: enterScreening,\n },\n ]\n }\n\n provide('slideScale', canvasScale)\n\n return {\n elementList,\n activeElementIdList,\n handleElementId,\n activeGroupElementId,\n canvasRef,\n viewportRef,\n viewportStyles,\n canvasScale,\n mouseSelectionState,\n currentSlide,\n creatingElement,\n alignmentLines,\n linkDialogVisible,\n openLinkDialog,\n handleClickBlankArea,\n removeEditorAreaFocus,\n insertElementFromCreateSelection,\n selectElement,\n rotateElement,\n scaleElement,\n dragLineElement,\n scaleMultiElement,\n handleMousewheelCanvas,\n contextmenus,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=4edd93c1&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=4edd93c1&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4edd93c1\"\n\nexport default script","\n\n\n\n","\n\n\n\n","export interface ShapePoolItem {\n viewBox: number;\n path: string;\n special?: boolean;\n}\n\nexport const SHAPE_LIST = [\n {\n type: '矩形',\n children: [\n {\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 20 0 L 180 0 Q 200 0 200 20 L 200 180 Q 200 200 180 200 L 20 200 Q 0 200 0 180 L 0 20 Q 0 0 20 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 L 0 150 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 L 0 200'\n },\n {\n viewBox: 200,\n path: 'M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 L 0 50 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 60 200 Q 0 200 0 140 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 140 0 Q 200 0 200 60 L 200 200 L 0 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 50 Q 0 0 50 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 50 Z'\n },\n ]\n },\n\n {\n type: '常用形状',\n children: [\n {\n viewBox: 200,\n path: 'M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z',\n },\n {\n viewBox: 200,\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 100 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 200 0 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 200 L 200 200 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 90 L 50 200 L 150 200 L 200 90 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 60 L 0 140 L 100 200 L 200 140 L 200 60 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 60 0 L 140 0 L 200 60 L 200 140 L 140 200 L 60 200 L 0 140 L 0 60 L 60 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 75 0 L 125 0 L 175 25 L 200 75 L 200 125 L 175 175 L 125 200 L 75 200 L 25 175 L 0 125 L 0 75 L 25 25 L 75 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 50 L 0 200 L 200 200 L 200 50 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 150 0 A 50 100 0 1 1 150 200 L 0 200 L 0 0 L 150 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 150 0 A 50 100 0 1 1 150 200 L 0 200 A 50 100 0 0 0 0 0 L 150 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 150 0 L 0 0 L 50 100 L 0 200 L 150 200 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 50 0 L 150 0 L 150 50 L 200 50 L 200 150 L 150 150 L 150 200 L 50 200 L 50 150 L 0 150 L 0 50 L 50 50 L 50 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 0 200 L 200 200 L 200 140 L 60 140 L 60 0 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z'\n },\n {\n viewBox: 200,\n path: 'M0 100 A100 100 0 1 1 0 101 Z M150 100 A50 50 0 1 0 150 101 Z'\n },\n {\n viewBox: 200,\n path: 'M 70 0 L 70 70 L 0 70 L 0 130 L 70 130 L 70 200 L 130 200 L 130 130 L 200 130 L 200 70 L 130 70 L 130 0 L 70 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 40 0 L 0 40 L 60 100 L 0 160 L 40 200 L 100 140 L 160 200 L 200 160 L 140 100 L 200 40 L 160 0 L 100 60 L 40 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 40 Q 0 0 40 0 L 160 0 Q 200 0 200 40 L 200 120 Q 200 160 160 160 L 100 160 L 60 200 L 60 160 L 40 160 Q 0 160 0 120 L 0 40 Z'\n },\n {\n viewBox: 200,\n path: 'M 180 160 A 100 100 0 1 0 100 200 L 200 200 L 200 160 L 180 160 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z',\n },\n {\n viewBox: 200,\n path: 'M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z',\n },\n ],\n },\n \n {\n type: '箭头',\n children: [\n {\n viewBox: 200,\n path: 'M 100 0 L 0 100 L 50 100 L 50 200 L 150 200 L 150 100 L 200 100 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 200 L 200 100 L 150 100 L 150 0 L 50 0 L 50 100 L 0 100 L 100 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 100 0 L 100 50 L 200 50 L 200 150 L 100 150 L 100 200 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 100 0 L 100 50 L 0 50 L 0 150 L 100 150 L 100 200 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 0 60 L 60 60 L 60 140 L 0 140 L 100 200 L 200 140 L 140 140 L 140 60 L 200 60 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 60 0 L 60 60 L 140 60 L 140 0 L 200 100 L 140 200 L 140 140 L 60 140 L 60 200 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 100 0 L 60 40 L 80 40 L 80 80 L 40 80 L 40 60 L 0 100 L 40 140 L 40 120 L 80 120 L 80 160 L 60 160 L 100 200 L 140 160 L 120 160 L 120 120 L 160 120 L 160 140 L 200 100 L 160 60 L 160 80 L 120 80 L 120 40 L 140 40 L 100 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 100 0 L 100 50 L 200 50 L 150 100 L 200 150 L 100 150 L 100 200 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 100 0 L 100 50 L 0 50 L 50 100 L 0 150 L 100 150 L 100 200 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 100 L 80 20 L 80 80 L 120 80 L 120 0 L 200 0 L 200 200 L 120 200 L 120 120 L 80 120 L 80 180 L 0 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 100 L 120 20 L 120 80 L 80 80 L 80 0 L 0 0 L 0 200 L 80 200 L 80 120 L 120 120 L 120 180 L 200 100 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 120 0 L 200 100 L 120 200 L 0 200 L 80 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 80 0 L 200 0 L 120 100 L 200 200 L 80 200 L 0 100 L 80 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 140 0 L 200 100 L 140 200 L 0 200 L 0 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 60 0 L 200 0 L 200 100 L 200 200 L 60 200 L 0 100 L 60 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 0 L 80 0 L 200 100 L 80 200 L 0 200 L 120 100 L 0 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 200 0 L 120 0 L 0 100 L 120 200 L 200 200 L 80 100 L 200 0 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 L 180 200 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 160 L 0 160 L 0 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 0 200 L 0 20 L 160 20 L 160 0 L 200 40 L 160 80 L 160 60 L 40 60 L 40 200 L 0 200 Z'\n },\n {\n viewBox: 200,\n path: 'M 40 180 L 180 180 L 180 40 L 200 40 L 160 0 L 120 40 L 140 40 L 140 140 L 40 140 L 40 120 L 0 160 L 40 200 L 40 180 Z'\n },\n {\n viewBox: 1024,\n path: 'M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z',\n special: true,\n },\n ],\n },\n\n {\n type: '其他形状',\n children: [\n {\n viewBox: 1024,\n path: 'M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z',\n special: true,\n },\n {\n viewBox: 1024,\n path: 'M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z',\n special: true,\n },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { SHAPE_LIST, ShapePoolItem } from '@/configs/shapes'\n\nexport default defineComponent({\n name: 'shape-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const shapeList = SHAPE_LIST\n\n const selectShape = (shape: ShapePoolItem) => {\n emit('select', shape)\n }\n\n return {\n shapeList,\n selectShape,\n }\n },\n})\n","import { render } from \"./ShapePool.vue?vue&type=template&id=612b80ef&scoped=true\"\nimport script from \"./ShapePool.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapePool.vue?vue&type=script&lang=ts\"\n\nimport \"./ShapePool.vue?vue&type=style&index=0&id=612b80ef&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-612b80ef\"\n\nexport default script","\n\n\n\n","import { LinePoint } from '@/types/slides'\n\n\nexport interface LinePoolItem {\n path: string;\n style: 'solid' | 'dashed';\n points: [LinePoint, LinePoint];\n isBroken?: boolean;\n isCurve?: boolean;\n}\n\ninterface PresetLine {\n type: string;\n children: LinePoolItem[];\n}\n\nexport const LINE_LIST: PresetLine[] = [\n {\n type: '直线',\n children: [\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'dot'] },\n ],\n },\n {\n type: '折线、曲线',\n children: [\n { path: 'M 0 0 L 0 20 L 20 20', style: 'solid', points: ['', 'arrow'], isBroken: true },\n { path: 'M 0 0 Q 0 20 20 20', style: 'solid', points: ['', 'arrow'], isCurve: true },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { LINE_LIST, LinePoolItem } from '@/configs/lines'\n\nimport LinePointMarker from '@/views/components/element/LineElement/LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'line-pool',\n emits: ['select'],\n components: {\n LinePointMarker,\n },\n setup(props, { emit }) {\n const lineList = LINE_LIST\n\n const selectLine = (line: LinePoolItem) => {\n emit('select', line)\n }\n\n return {\n lineList,\n selectLine,\n }\n },\n})\n","import { render } from \"./LinePool.vue?vue&type=template&id=6302e570&scoped=true\"\nimport script from \"./LinePool.vue?vue&type=script&lang=ts\"\nexport * from \"./LinePool.vue?vue&type=script&lang=ts\"\n\nimport \"./LinePool.vue?vue&type=style&index=0&id=6302e570&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6302e570\"\n\nexport default script","\n\n\n\n","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'chart-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const chartList = ['bar', 'line', 'pie']\n\n const selectChart = (chart: string) => {\n emit('select', chart)\n }\n\n return {\n chartList,\n selectChart,\n }\n },\n})\n","import { render } from \"./ChartPool.vue?vue&type=template&id=ab6a141a&scoped=true\"\nimport script from \"./ChartPool.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartPool.vue?vue&type=script&lang=ts\"\n\nimport \"./ChartPool.vue?vue&type=style&index=0&id=ab6a141a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ab6a141a\"\n\nexport default script","\n\n\n\n","\nimport { defineComponent, ref } from 'vue'\n\nimport { message } from 'ant-design-vue'\n\nexport default defineComponent({\n name: 'table-generator',\n emits: ['insert', 'close'],\n setup(props, { emit }) {\n const endCell = ref([])\n const customRow = ref(3)\n const customCol = ref(3)\n const isCustom = ref(false)\n\n const handleClickTable = () => {\n if (!endCell.value.length) return\n const [row, col] = endCell.value\n emit('insert', { row, col })\n }\n\n const insertCustomTable = () => {\n if (customRow.value < 1 || customRow.value > 20) return message.warning('行数/列数必须在0~20之间!')\n if (customCol.value < 1 || customCol.value > 20) return message.warning('行数/列数必须在0~20之间!')\n emit('insert', { row: customRow.value, col: customCol.value })\n isCustom.value = false\n }\n\n const close = () => {\n emit('close')\n isCustom.value = false\n }\n\n return {\n endCell,\n customRow,\n customCol,\n handleClickTable,\n insertCustomTable,\n isCustom,\n close,\n }\n },\n})\n","import { render } from \"./TableGenerator.vue?vue&type=template&id=e325ce98&scoped=true\"\nimport script from \"./TableGenerator.vue?vue&type=script&lang=ts\"\nexport * from \"./TableGenerator.vue?vue&type=script&lang=ts\"\n\nimport \"./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-e325ce98\"\n\nexport default script","\nimport { defineComponent, computed, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport { ShapePoolItem } from '@/configs/shapes'\nimport { LinePoolItem } from '@/configs/lines'\nimport useScaleCanvas from '@/hooks/useScaleCanvas'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nimport ShapePool from './ShapePool.vue'\nimport LinePool from './LinePool.vue'\nimport ChartPool from './ChartPool.vue'\nimport TableGenerator from './TableGenerator.vue'\n\nexport default defineComponent({\n name: 'canvas-tool',\n components: {\n ShapePool,\n LinePool,\n ChartPool,\n TableGenerator,\n },\n setup() {\n const store = useStore()\n const canvasScale = computed(() => store.state.canvasScale)\n const canUndo = computed(() => store.getters.canUndo)\n const canRedo = computed(() => store.getters.canRedo)\n\n const canvasScalePercentage = computed(() => parseInt(canvasScale.value * 100 + '') + '%')\n\n const { scaleCanvas, setCanvasPercentage } = useScaleCanvas()\n const { redo, undo } = useHistorySnapshot()\n\n const { createImageElement, createChartElement, createTableElement } = useCreateElement()\n\n const insertImageElement = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n\n const shapePoolVisible = ref(false)\n const linePoolVisible = ref(false)\n const chartPoolVisible = ref(false)\n const tableGeneratorVisible = ref(false)\n\n // 绘制文字范围\n const drawText = () => {\n store.commit(MutationTypes.SET_CREATING_ELEMENT, {\n type: 'text',\n data: null,\n })\n }\n\n // 绘制形状范围\n const drawShape = (shape: ShapePoolItem) => {\n store.commit(MutationTypes.SET_CREATING_ELEMENT, {\n type: 'shape',\n data: shape,\n })\n shapePoolVisible.value = false\n }\n\n // 绘制线条路径\n const drawLine = (line: LinePoolItem) => {\n store.commit(MutationTypes.SET_CREATING_ELEMENT, {\n type: 'line',\n data: line,\n })\n linePoolVisible.value = false\n }\n\n return {\n scaleCanvas,\n setCanvasPercentage,\n canvasScalePercentage,\n canUndo,\n canRedo,\n redo,\n undo,\n insertImageElement,\n shapePoolVisible,\n linePoolVisible,\n chartPoolVisible,\n tableGeneratorVisible,\n drawText,\n drawShape,\n drawLine,\n createChartElement,\n createTableElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=59ae6536&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=59ae6536&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-59ae6536\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\n\n","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTImageElement } from '@/types/slides'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useClipImage from './useClipImage'\nimport useFilter from './useFilter'\n\nimport ImageOutline from './ImageOutline/index.vue'\n\nexport default defineComponent({\n name: 'base-element-image',\n components: {\n ImageOutline,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n \n const clip = computed(() => props.elementInfo.clip)\n const { clipShape, imgPosition } = useClipImage(clip)\n\n const filters = computed(() => props.elementInfo.filters)\n const { filter } = useFilter(filters)\n\n return {\n imgPosition,\n filter,\n flipStyle,\n shadowStyle,\n clipShape,\n }\n },\n})\n","import { render } from \"./BaseImageElement.vue?vue&type=template&id=b0d4d1b2&scoped=true\"\nimport script from \"./BaseImageElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseImageElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseImageElement.vue?vue&type=style&index=0&id=b0d4d1b2&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-b0d4d1b2\"\n\nexport default script","\n\n\n\n\n","\nimport { defineComponent, PropType, computed } from 'vue'\nimport { PPTTextElement } from '@/types/slides'\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\n\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nexport default defineComponent({\n name: 'base-element-text',\n components: {\n ElementOutline,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n return {\n shadowStyle,\n }\n },\n})\n","import { render } from \"./BaseTextElement.vue?vue&type=template&id=2ec235c4&scoped=true\"\nimport script from \"./BaseTextElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseTextElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseTextElement.vue?vue&type=style&index=0&id=2ec235c4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2ec235c4\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\n\nimport GradientDefs from './GradientDefs.vue'\n\nexport default defineComponent({\n name: 'base-element-shape',\n components: {\n GradientDefs,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n text,\n }\n },\n})\n","import { render } from \"./BaseShapeElement.vue?vue&type=template&id=3ad164fa&scoped=true\"\nimport script from \"./BaseShapeElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseShapeElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseShapeElement.vue?vue&type=style&index=0&id=3ad164fa&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3ad164fa\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10, 5' : '0, 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./BaseLineElement.vue?vue&type=template&id=448a7ca0&scoped=true\"\nimport script from \"./BaseLineElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseLineElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseLineElement.vue?vue&type=style&index=0&id=448a7ca0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-448a7ca0\"\n\nexport default script","\r\n\r\n\r\n\r\n\r\n","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\n\r\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\r\n\r\nexport default defineComponent({\r\n name: 'base-element-chart',\r\n components: {\r\n ElementOutline,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const size = computed(() => Math.min(props.elementInfo.width, props.elementInfo.height))\r\n\r\n const chartType = computed(() => {\r\n const _chartType = props.elementInfo.chartType\r\n const _options = props.elementInfo.options\r\n\r\n if (_chartType === 'bar') {\r\n if (_options?.horizontalBars) return 'horizontalBar'\r\n return 'bar'\r\n }\r\n else if (_chartType === 'line') {\r\n if (_options?.showArea) return 'area'\r\n else if (_options && _options.showLine === false) return 'scatter'\r\n return 'line'\r\n }\r\n else if (_chartType === 'pie') {\r\n if (_options?.donut) return 'ring'\r\n return 'pie'\r\n }\r\n\r\n return ''\r\n })\r\n\r\n return {\r\n size,\r\n chartType,\r\n }\r\n },\r\n})\r\n","import { render } from \"./BaseChartElement.vue?vue&type=template&id=2d25f60a&scoped=true\"\nimport script from \"./BaseChartElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseChartElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseChartElement.vue?vue&type=style&index=0&id=2d25f60a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2d25f60a\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nexport default defineComponent({\n name: 'static-table',\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props) {\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n return {\n colSizeList,\n totalWidth,\n hideCells,\n getTextStyle,\n formatText,\n subThemeColor,\n }\n },\n})\n","import { render } from \"./StaticTable.vue?vue&type=template&id=ccbfe89e&scoped=true\"\nimport script from \"./StaticTable.vue?vue&type=script&lang=ts\"\nexport * from \"./StaticTable.vue?vue&type=script&lang=ts\"\n\nimport \"./StaticTable.vue?vue&type=style&index=0&id=ccbfe89e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ccbfe89e\"\n\nexport default script","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTTableElement } from '@/types/slides'\n\nimport StaticTable from './StaticTable.vue'\n\nexport default defineComponent({\n name: 'base-element-table',\n components: {\n StaticTable,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./BaseTableElement.vue?vue&type=template&id=dea016ac&scoped=true\"\nimport script from \"./BaseTableElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseTableElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseTableElement.vue?vue&type=style&index=0&id=dea016ac&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-dea016ac\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { ElementTypes, PPTElement } from '@/types/slides'\n\nimport BaseImageElement from '@/views/components/element/ImageElement/BaseImageElement.vue'\nimport BaseTextElement from '@/views/components/element/TextElement/BaseTextElement.vue'\nimport BaseShapeElement from '@/views/components/element/ShapeElement/BaseShapeElement.vue'\nimport BaseLineElement from '@/views/components/element/LineElement/BaseLineElement.vue'\nimport BaseChartElement from '@/views/components/element/ChartElement/BaseChartElement.vue'\nimport BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue'\n\nexport default defineComponent({\n name: 'base-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: BaseImageElement,\n [ElementTypes.TEXT]: BaseTextElement,\n [ElementTypes.SHAPE]: BaseShapeElement,\n [ElementTypes.LINE]: BaseLineElement,\n [ElementTypes.CHART]: BaseChartElement,\n [ElementTypes.TABLE]: BaseTableElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n return {\n currentElementComponent,\n }\n },\n})\n","import { render } from \"./ThumbnailElement.vue?vue&type=template&id=61cf450e\"\nimport script from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'\n\nimport ThumbnailElement from './ThumbnailElement.vue'\n\nexport default defineComponent({\n name: 'thumbnail-slide',\n components: {\n ThumbnailElement,\n },\n props: {\n slide: {\n type: Object as PropType,\n required: true,\n },\n size: {\n type: Number,\n required: true,\n },\n },\n setup(props) {\n const store = useStore()\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n const scale = computed(() => props.size / VIEWPORT_SIZE)\n\n return {\n scale,\n backgroundStyle,\n VIEWPORT_SIZE,\n viewportRatio,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=4e59015e&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=4e59015e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4e59015e\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { Slide } from '@/types/slides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'layout-pool',\n emits: ['select'],\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const store = useStore()\n const layouts = computed(() => store.getters.layouts)\n\n const selectSlideTemplate = (slide: Slide) => {\n emit('select', slide)\n }\n\n return {\n layouts,\n selectSlideTemplate,\n }\n },\n})\n","import { render } from \"./LayoutPool.vue?vue&type=template&id=775c4b6c&scoped=true\"\nimport script from \"./LayoutPool.vue?vue&type=script&lang=ts\"\nexport * from \"./LayoutPool.vue?vue&type=script&lang=ts\"\n\nimport \"./LayoutPool.vue?vue&type=style&index=0&id=775c4b6c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-775c4b6c\"\n\nexport default script","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { fillDigit } from '@/utils/common'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useScreening from '@/hooks/useScreening'\n\nimport Draggable from 'vuedraggable'\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\nimport LayoutPool from './LayoutPool.vue'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n Draggable,\n ThumbnailSlide,\n LayoutPool,\n },\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const slideIndex = computed(() => store.state.slideIndex)\n const ctrlKeyState = computed(() => store.state.ctrlKeyState)\n const shiftKeyState = computed(() => store.state.shiftKeyState)\n const selectedSlidesIndex = computed(() => [...store.state.selectedSlidesIndex, slideIndex.value])\n\n const presetLayoutPopoverVisible = ref(false)\n\n const {\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n } = useSlideHandler()\n\n // 切换页面\n const changSlideIndex = (index: number) => {\n store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])\n\n if (slideIndex.value === index) return\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, index)\n }\n\n // 点击缩略图\n const handleClickSlideThumbnail = (e: MouseEvent, index: number) => {\n const isMultiSelected = selectedSlidesIndex.value.length > 1\n\n if (isMultiSelected && selectedSlidesIndex.value.includes(index) && e.button !== 0) return\n\n // 按住Ctrl键,点选幻灯片,再次点击已选中的页面则取消选中\n if (ctrlKeyState.value) {\n if (slideIndex.value === index) {\n if (!isMultiSelected) return\n\n const newSelectedSlidesIndex = selectedSlidesIndex.value.filter(item => item !== index)\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n changSlideIndex(selectedSlidesIndex.value[0])\n }\n else {\n if (selectedSlidesIndex.value.includes(index)) {\n const newSelectedSlidesIndex = selectedSlidesIndex.value.filter(item => item !== index)\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n }\n else {\n const newSelectedSlidesIndex = [...selectedSlidesIndex.value, index]\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n changSlideIndex(index)\n }\n }\n }\n // 按住Shift键,选择范围内的全部幻灯片\n else if (shiftKeyState.value) {\n if (slideIndex.value === index && !isMultiSelected) return\n\n let minIndex = Math.min(...selectedSlidesIndex.value)\n let maxIndex = index\n\n if (index < minIndex) {\n maxIndex = Math.max(...selectedSlidesIndex.value)\n minIndex = index\n }\n\n const newSelectedSlidesIndex = []\n for (let i = minIndex; i <= maxIndex; i++) newSelectedSlidesIndex.push(i)\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)\n changSlideIndex(index)\n }\n // 正常切换页面\n else {\n store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, [])\n changSlideIndex(index)\n }\n }\n\n const thumbnailsFocus = computed(() => store.state.thumbnailsFocus)\n\n // 设置缩略图工具栏聚焦状态(只有聚焦状态下,该部分的快捷键才能生效)\n const setThumbnailsFocus = (focus: boolean) => {\n if (thumbnailsFocus.value === focus) return\n store.commit(MutationTypes.SET_THUMBNAILS_FOCUS, focus)\n\n if (!focus) store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, [])\n }\n\n // 拖拽调整顺序后进行数据的同步\n const handleDragEnd = (eventData: { newIndex: number; oldIndex: number }) => {\n const { newIndex, oldIndex } = eventData\n if (oldIndex === newIndex) return\n\n const _slides = JSON.parse(JSON.stringify(slides.value))\n const _slide = _slides[oldIndex]\n _slides.splice(oldIndex, 1)\n _slides.splice(newIndex, 0, _slide)\n store.commit(MutationTypes.SET_SLIDES, _slides)\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, newIndex)\n }\n\n const { enterScreening } = useScreening()\n\n const contextmenusThumbnails = (): ContextmenuItem[] => {\n return [\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '开始演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n const contextmenusThumbnailItem = (): ContextmenuItem[] => {\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutSlide,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copySlide,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n { divider: true },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '复制页面',\n subText: 'Ctrl + D',\n handler: copyAndPasteSlide,\n },\n {\n text: '删除页面',\n subText: 'Delete',\n handler: () => deleteSlide(),\n },\n { divider: true },\n {\n text: '从当前页演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n return {\n slides,\n slideIndex,\n selectedSlidesIndex,\n presetLayoutPopoverVisible,\n createSlide,\n createSlideByTemplate,\n setThumbnailsFocus,\n handleClickSlideThumbnail,\n contextmenusThumbnails,\n contextmenusThumbnailItem,\n fillDigit,\n handleDragEnd,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=38044c5a&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=38044c5a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-38044c5a\"\n\nexport default script","\n\n\n\n","export type ToolbarState = 'symbol' | 'elAnimation' | 'elStyle' | 'elPosition' | 'slideDesign' | 'slideAnimation' | 'multiPosition'\n\nexport const ToolbarStates = {\n SYMBOL: 'symbol',\n EL_ANIMATION: 'elAnimation',\n EL_STYLE: 'elStyle',\n EL_POSITION: 'elPosition',\n SLIDE_DESIGN: 'slideDesign',\n SLIDE_ANIMATION: 'slideAnimation',\n MULTI_POSITION: 'multiPosition',\n}","\n\n","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-opacity',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const opacity = ref()\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n opacity.value = 'opacity' in handleElement.value && handleElement.value.opacity !== undefined ? handleElement.value.opacity : 1\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateOpacity = (value: number) => {\n const props = { opacity: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n opacity,\n updateOpacity,\n }\n },\n})\n","import { render } from \"./ElementOpacity.vue?vue&type=template&id=b884607e&scoped=true\"\nimport script from \"./ElementOpacity.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementOpacity.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementOpacity.vue?vue&type=style&index=0&id=b884607e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-b884607e\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nexport default {\n name: 'color-button',\n props: {\n color: {\n type: String,\n required: true,\n },\n },\n}\n","import { render } from \"./ColorButton.vue?vue&type=template&id=39016b60&scoped=true\"\nimport script from \"./ColorButton.vue?vue&type=script&lang=ts\"\nexport * from \"./ColorButton.vue?vue&type=script&lang=ts\"\n\nimport \"./ColorButton.vue?vue&type=style&index=0&id=39016b60&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-39016b60\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTElementOutline } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './ColorButton.vue'\n\nexport default defineComponent({\n name: 'element-outline',\n components: {\n ColorButton,\n },\n props: {\n fixed: {\n type: Boolean,\n default: false,\n },\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const outline = ref()\n const hasOutline = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n outline.value = 'outline' in handleElement.value ? handleElement.value.outline : undefined\n hasOutline.value = !!outline.value\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateOutline = (outlineProps: Partial) => {\n const props = { outline: { ...outline.value, ...outlineProps } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const toggleOutline = (checked: boolean) => {\n if (checked) {\n const props = { outline: { width: 2, color: '#000', style: 'solid' } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n else {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.value.id, propName: 'outline' })\n }\n addHistorySnapshot()\n }\n\n return {\n outline,\n hasOutline,\n toggleOutline,\n updateOutline,\n }\n },\n})\n","import { render } from \"./ElementOutline.vue?vue&type=template&id=2d8ce9c0&scoped=true\"\nimport script from \"./ElementOutline.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementOutline.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementOutline.vue?vue&type=style&index=0&id=2d8ce9c0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2d8ce9c0\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement, PPTElementShadow } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './ColorButton.vue'\n\nexport default defineComponent({\n name: 'element-shadow',\n components: {\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const shadow = ref()\n const hasShadow = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n shadow.value = 'shadow' in handleElement.value ? handleElement.value.shadow : undefined\n hasShadow.value = !!shadow.value\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateShadow = (shadowProps: Partial) => {\n const props = { shadow: { ...shadow.value, ...shadowProps } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const toggleShadow = (checked: boolean) => {\n if (checked) {\n const props = { shadow: { h: 1, v: 1, blur: 2, color: '#000' } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n else {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.value.id, propName: 'shadow' })\n }\n addHistorySnapshot()\n }\n\n return {\n shadow,\n hasShadow,\n toggleShadow,\n updateShadow,\n }\n },\n})\n","import { render } from \"./ElementShadow.vue?vue&type=template&id=5cca6474&scoped=true\"\nimport script from \"./ElementShadow.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementShadow.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementShadow.vue?vue&type=style&index=0&id=5cca6474&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5cca6474\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\n\nconst presetStyles = [\n {\n label: '大标题',\n style: {\n fontSize: '26px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '48px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '小标题',\n style: {\n fontSize: '22px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '36px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '正文',\n style: {\n fontSize: '20px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '20px' },\n ],\n },\n {\n label: '正文[小]',\n style: {\n fontSize: '18px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '18px' },\n ],\n },\n {\n label: '注释 1',\n style: {\n fontSize: '16px',\n fontStyle: 'italic',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'em' },\n ],\n },\n {\n label: '注释 2',\n style: {\n fontSize: '16px',\n textDecoration: 'underline',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'underline' },\n ],\n },\n]\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'text-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const richTextAttrs = computed(() => store.state.richTextAttrs)\n\n const fill = ref()\n const lineHeight = ref()\n const wordSpace = ref()\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'text') return\n\n fill.value = handleElement.value.fill || '#000'\n lineHeight.value = handleElement.value.lineHeight || 1.5\n wordSpace.value = handleElement.value.wordSpace || 0\n }, { deep: true, immediate: true })\n\n const availableFonts = computed(() => store.state.availableFonts)\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n '36px', '40px', '44px', '48px', '54px', '60px', '66px', '72px', '76px',\n '80px', '88px', '96px', '104px', '112px', '120px',\n ]\n const lineHeightOptions = [0.9, 1.0, 1.15, 1.2, 1.4, 1.5, 1.8, 2.0, 2.5, 3.0]\n const wordSpaceOptions = [0, 1, 2, 3, 4, 5, 6, 8, 10]\n\n // 发射富文本设置命令\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n // 发射富文本设置命令(批量)\n const emitBatchRichTextCommand = (payload: RichTextCommand[]) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, payload)\n }\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置行高\n const updateLineHeight = (value: number) => {\n const props = { lineHeight: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置字间距\n const updateWordSpace = (value: number) => {\n const props = { wordSpace: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置文本框填充\n const updateFill = (value: string) => {\n const props = { fill: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n fill,\n lineHeight,\n wordSpace,\n richTextAttrs,\n availableFonts,\n webFonts,\n fontSizeOptions,\n lineHeightOptions,\n wordSpaceOptions,\n updateLineHeight,\n updateWordSpace,\n updateFill,\n emitRichTextCommand,\n emitBatchRichTextCommand,\n presetStyles,\n }\n },\n})\n","import { render } from \"./TextStylePanel.vue?vue&type=template&id=ee8b653e&scoped=true\"\nimport script from \"./TextStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./TextStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./TextStylePanel.vue?vue&type=style&index=0&id=ee8b653e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ee8b653e\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTImageElement, PPTShapeElement, ImageOrShapeFlip } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-flip',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const flipH = ref(false)\n const flipV = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value || !['image', 'shape'].includes(handleElement.value.type)) return\n\n flipH.value = !!handleElement.value.flipH\n flipV.value = !!handleElement.value.flipV\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateFlip = (flipProps: ImageOrShapeFlip) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props: flipProps })\n addHistorySnapshot()\n }\n\n return {\n flipH,\n flipV,\n updateFlip,\n }\n },\n})\n","import { render } from \"./ElementFlip.vue?vue&type=template&id=6b6342c9&scoped=true\"\nimport script from \"./ElementFlip.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementFlip.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementFlip.vue?vue&type=style&index=0&id=6b6342c9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6b6342c9\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTImageElement, Slide } from '@/types/slides'\nimport { CLIPPATHS } from '@/configs/imageClip'\nimport { getImageDataURL } from '@/utils/image'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ElementFlip from '../common/ElementFlip.vue'\n\ninterface FilterOption {\n label: string;\n key: string;\n default: number;\n value: number;\n unit: string;\n max: number;\n step: number;\n}\n\nconst defaultFilters: FilterOption[] = [\n { label: '模糊', key: 'blur', default: 0, value: 0, unit: 'px', max: 10, step: 1 },\n { label: '亮度', key: 'brightness', default: 100, value: 100, unit: '%', max: 200, step: 5 },\n { label: '对比度', key: 'contrast', default: 100, value: 100, unit: '%', max: 200, step: 5 },\n { label: '灰度', key: 'grayscale', default: 0, value: 0, unit: '%', max: 100, step: 5 },\n { label: '饱和度', key: 'saturate', default: 100, value: 100, unit: '%', max: 200, step: 5 },\n { label: '色相', key: 'hue-rotate', default: 0, value: 0, unit: 'deg', max: 360, step: 10 },\n { label: '不透明度', key: 'opacity', default: 100, value: 100, unit: '%', max: 100, step: 5 },\n]\n\nconst shapeClipPathOptions = CLIPPATHS\nconst ratioClipOptions = [\n {\n label: '纵横比(方形)',\n children: [\n { key: '1:1', ratio: 1 / 1 },\n ],\n },\n {\n label: '纵横比(纵向)',\n children: [\n { key: '2:3', ratio: 3 / 2 },\n { key: '3:4', ratio: 4 / 3 },\n { key: '3:5', ratio: 5 / 3 },\n { key: '4:5', ratio: 5 / 4 },\n ],\n },\n {\n label: '纵横比(横向)',\n children: [\n { key: '3:2', ratio: 2 / 3 },\n { key: '4:3', ratio: 3 / 4 },\n { key: '5:3', ratio: 3 / 5 },\n { key: '5:4', ratio: 4 / 5 },\n ],\n },\n {\n children: [\n { key: '16:9', ratio: 9 / 16 },\n { key: '16:10', ratio: 10 / 16 },\n ],\n },\n]\n\nexport default defineComponent({\n name: 'image-style-panel',\n components: {\n ElementOutline,\n ElementShadow,\n ElementFlip,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const clipPanelVisible = ref(false)\n\n const filterOptions = ref(JSON.parse(JSON.stringify(defaultFilters)))\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'image') return\n \n const filters = handleElement.value.filters\n if (filters) {\n filterOptions.value = defaultFilters.map(item => {\n if (filters[item.key] !== undefined) return { ...item, value: parseInt(filters[item.key]) }\n return item\n })\n }\n else filterOptions.value = JSON.parse(JSON.stringify(defaultFilters))\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置滤镜\n const updateFilter = (filter: FilterOption, value: number) => {\n const originFilters = handleElement.value.filters || {}\n const filters = { ...originFilters, [filter.key]: `${value}${filter.unit}` }\n const props = { filters }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 打开自由裁剪\n const clipImage = () => {\n store.commit(MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID, handleElement.value.id)\n clipPanelVisible.value = false\n }\n\n // 获取原始图片的位置大小\n const getImageElementDataBeforeClip = () => {\n\n // 图片当前的位置大小和裁剪范围\n const imgWidth = handleElement.value.width\n const imgHeight = handleElement.value.height\n const imgLeft = handleElement.value.left\n const imgTop = handleElement.value.top\n const originClipRange = handleElement.value.clip ? handleElement.value.clip.range : [[0, 0], [100, 100]]\n\n const originWidth = imgWidth / ((originClipRange[1][0] - originClipRange[0][0]) / 100)\n const originHeight = imgHeight / ((originClipRange[1][1] - originClipRange[0][1]) / 100)\n const originLeft = imgLeft - originWidth * (originClipRange[0][0] / 100)\n const originTop = imgTop - originHeight * (originClipRange[0][1] / 100)\n\n return {\n originClipRange,\n originWidth,\n originHeight,\n originLeft,\n originTop,\n }\n }\n\n // 预设裁剪\n const presetImageClip = (shape: string, ratio = 0) => {\n const {\n originClipRange,\n originWidth,\n originHeight,\n originLeft,\n originTop,\n } = getImageElementDataBeforeClip()\n \n // 纵横比裁剪(形状固定为矩形)\n if (ratio) {\n const imageRatio = originHeight / originWidth\n\n const min = 0\n const max = 100\n let range\n\n if (imageRatio > ratio) {\n const distance = ((1 - ratio / imageRatio) / 2) * 100\n range = [[min, distance], [max, max - distance]]\n }\n else {\n const distance = ((1 - imageRatio / ratio) / 2) * 100\n range = [[distance, min], [max - distance, max]]\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: handleElement.value.id,\n props: {\n clip: { ...handleElement.value.clip, shape, range },\n left: originLeft + originWidth * (range[0][0] / 100),\n top: originTop + originHeight * (range[0][1] / 100),\n width: originWidth * (range[1][0] - range[0][0]) / 100,\n height: originHeight * (range[1][1] - range[0][1]) / 100,\n },\n })\n }\n // 形状裁剪(保持当前裁剪范围)\n else {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: handleElement.value.id,\n props: {\n clip: { ...handleElement.value.clip, shape, range: originClipRange }\n },\n })\n }\n clipImage()\n addHistorySnapshot()\n }\n\n // 替换图片(保持当前的样式)\n const replaceImage = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => {\n const props = { src: dataURL }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n })\n addHistorySnapshot()\n }\n\n // 重置图片:清除全部样式\n const resetImage = () => {\n if (handleElement.value.clip) {\n const {\n originWidth,\n originHeight,\n originLeft,\n originTop,\n } = getImageElementDataBeforeClip()\n\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: handleElement.value.id,\n props: {\n left: originLeft,\n top: originTop,\n width: originWidth,\n height: originHeight,\n },\n })\n }\n\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, {\n id: handleElement.value.id,\n propName: ['clip', 'outline', 'flip', 'shadow', 'filters'],\n })\n addHistorySnapshot()\n }\n\n // 将图片设置为背景\n const setBackgroundImage = () => {\n const background = {\n ...currentSlide.value.background,\n type: 'image',\n image: handleElement.value.src,\n imageSize: 'cover',\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background })\n addHistorySnapshot()\n }\n\n return {\n clipPanelVisible,\n shapeClipPathOptions,\n ratioClipOptions,\n filterOptions,\n handleElement,\n updateFilter,\n clipImage,\n presetImageClip,\n replaceImage,\n resetImage,\n setBackgroundImage,\n }\n },\n})\n","import { render } from \"./ImageStylePanel.vue?vue&type=template&id=6bffd840&scoped=true\"\nimport script from \"./ImageStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ImageStylePanel.vue?vue&type=style&index=0&id=6bffd840&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6bffd840\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTShapeElement, ShapeGradient, ShapeText } from '@/types/slides'\nimport { WEB_FONTS } from '@/configs/font'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ElementFlip from '../common/ElementFlip.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'shape-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n ElementFlip,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const editingShapeElementId = computed(() => store.state.editingShapeElementId)\n\n const showTextTools = computed(() => {\n return editingShapeElementId.value === handleElement.value.id\n })\n\n const fill = ref()\n const gradient = ref()\n const fillType = ref('fill')\n const textAlign = ref('middle')\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'shape') return\n fill.value = handleElement.value.fill || '#000'\n\n gradient.value = handleElement.value.gradient || { type: 'linear', rotate: 0, color: [fill.value, '#fff'] }\n\n fillType.value = handleElement.value.gradient ? 'gradient' : 'fill'\n\n textAlign.value = handleElement.value?.text?.align || 'middle'\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置填充类型:渐变、纯色\n const updateFillType = (type: 'gradient' | 'fill') => {\n if (type === 'fill') {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, {\n id: handleElement.value.id,\n propName: 'gradient',\n })\n }\n else {\n const props = { gradient: gradient.value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n addHistorySnapshot()\n }\n\n // 设置渐变填充\n const updateGradient = (gradientProps: Partial) => {\n const props = { gradient: { ...gradient.value, ...gradientProps } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n const props = { fill: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const updateTextAlign = (align: 'top' | 'middle' | 'bottom') => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n const _text = handleElement.value.text || defaultText\n const props = { text: { ..._text, align } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const richTextAttrs = computed(() => store.state.richTextAttrs)\n const availableFonts = computed(() => store.state.availableFonts)\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n '36px', '40px', '44px', '48px', '54px', '60px', '66px', '72px', '76px',\n '80px', '88px', '96px', '104px', '112px', '120px',\n ]\n\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n return {\n fill,\n gradient,\n fillType,\n textAlign,\n richTextAttrs,\n availableFonts,\n fontSizeOptions,\n webFonts,\n showTextTools,\n emitRichTextCommand,\n updateFillType,\n updateFill,\n updateGradient,\n updateTextAlign,\n }\n },\n})\n","import { render } from \"./ShapeStylePanel.vue?vue&type=template&id=a62499e8&scoped=true\"\nimport script from \"./ShapeStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapeStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ShapeStylePanel.vue?vue&type=style&index=0&id=a62499e8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a62499e8\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTLineElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nexport default defineComponent({\n name: 'line-style-panel',\n components: {\n ElementShadow,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateLine = (props: Partial) => {\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n updateLine,\n }\n }\n})\n","import { render } from \"./LineStylePanel.vue?vue&type=template&id=65b24fb3&scoped=true\"\nimport script from \"./LineStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./LineStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./LineStylePanel.vue?vue&type=style&index=0&id=65b24fb3&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-65b24fb3\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref } from 'vue'\nimport { ChartData } from '@/types/slides'\nimport { KEYS } from '@/configs/hotkey'\nimport { pasteCustomClipboardString, pasteExcelClipboardString } from '@/utils/clipboard'\n\nconst CELL_WIDTH = 100\nconst CELL_HEIGHT = 32\n\nexport default defineComponent({\n name: 'chart-data-editor',\n emits: ['save', 'close'],\n props: {\n data: {\n type: Object as PropType,\n required: true,\n }\n },\n setup(props, { emit }) {\n const selectedRange = ref([0, 0])\n const tempRangeSize = ref({ width: 0, height: 0 })\n const focusCell = ref<[number, number] | null>(null)\n\n // 当前选区的边框线条位置\n const rangeLines = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return [\n { type: 't', style: {width: width + 'px'} },\n { type: 'b', style: {top: height + 'px', width: width + 'px'} },\n { type: 'l', style: {height: height + 'px'} },\n { type: 'r', style: {left: width + 'px', height: height + 'px'} },\n ]\n })\n\n // 当前选区的缩放点位置\n const resizablePointStyle = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return { left: width + 'px', top: height + 'px' }\n })\n\n // 初始化图表数据:将数据格式化并填充到DOM\n const initData = () => {\n const _data: string[][] = []\n\n const { labels, legends, series } = props.data\n const rowCount = labels.length\n const colCount = series.length\n\n _data.push(['', ...legends])\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row = [labels[rowIndex]]\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n row.push(series[colIndex][rowIndex] + '')\n }\n _data.push(row)\n }\n\n for (let rowIndex = 0; rowIndex < rowCount + 1; rowIndex++) {\n for (let colIndex = 0; colIndex < colCount + 1; colIndex++) {\n const inputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = _data[rowIndex][colIndex] + ''\n }\n }\n\n selectedRange.value = [colCount + 1, rowCount + 1]\n }\n\n onMounted(initData)\n\n // 快捷键监听:回车移动焦点到下一行\n const moveNextRow = () => {\n if (!focusCell.value) return\n\n const [rowIndex, colIndex] = focusCell.value\n const inputRef = document.querySelector(`#cell-${rowIndex + 1}-${colIndex}`) as HTMLInputElement\n inputRef && inputRef.focus()\n }\n\n const keyboardListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ENTER) moveNextRow()\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keyboardListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keyboardListener)\n })\n\n // 获取当前图表DOM中的数据,整理格式化后传递出去\n const getTableData = () => {\n const [col, row] = selectedRange.value\n\n const labels: string[] = []\n const legends: string[] = []\n const series: number[][] = []\n\n // 第一行为系列名,第一列为项目名,实际数据从第二行第二列开始\n for (let rowIndex = 1; rowIndex < row; rowIndex++) {\n let labelsItem = `类别${rowIndex}`\n const labelInputRef = document.querySelector(`#cell-${rowIndex}-0`) as HTMLInputElement\n if (labelInputRef && labelInputRef.value) labelsItem = labelInputRef.value\n labels.push(labelsItem)\n }\n for (let colIndex = 1; colIndex < col; colIndex++) {\n let legendsItem = `系列${colIndex}`\n const labelInputRef = document.querySelector(`#cell-0-${colIndex}`) as HTMLInputElement\n if (labelInputRef && labelInputRef.value) legendsItem = labelInputRef.value\n legends.push(legendsItem)\n }\n\n for (let colIndex = 1; colIndex < col; colIndex++) {\n const seriesItem = []\n for (let rowIndex = 1; rowIndex < row; rowIndex++) {\n const valueInputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n let value = 0\n if (valueInputRef && valueInputRef.value && !!(+valueInputRef.value)) {\n value = +valueInputRef.value\n }\n seriesItem.push(value)\n }\n series.push(seriesItem)\n }\n\n emit('save', { labels, legends, series })\n }\n\n // 清空表格数据\n const clear = () => {\n for (let rowIndex = 1; rowIndex < 31; rowIndex++) {\n for (let colIndex = 1; colIndex < 7; colIndex++) {\n const inputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = ''\n }\n }\n }\n\n // 自定义粘贴事件(尝试读取剪贴板中的表格数据)\n const handlePaste = (e: ClipboardEvent, rowIndex: number, colIndex: number) => {\n e.preventDefault()\n\n if (!e.clipboardData) return\n\n const clipboardDataFirstItem = e.clipboardData.items[0]\n\n if (clipboardDataFirstItem && clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => {\n const clipboardData = pasteCustomClipboardString(text)\n if (typeof clipboardData === 'object') return\n \n const excelData = pasteExcelClipboardString(text)\n if (excelData) {\n const maxRow = rowIndex + excelData.length\n const maxCol = colIndex + excelData[0].length\n for (let i = rowIndex; i < maxRow; i++) {\n for (let j = colIndex; j < maxCol; j++) {\n const inputRef = document.querySelector(`#cell-${i}-${j}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = excelData[i - rowIndex][j - colIndex]\n }\n }\n }\n })\n }\n }\n\n // 关闭图表数据编辑器\n const closeEditor = () => emit('close')\n\n // 鼠标拖拽修改选中的数据范围\n const changeSelectRange = (e: MouseEvent) => {\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const originWidth = selectedRange.value[0] * CELL_WIDTH\n const originHeight = selectedRange.value[1] * CELL_HEIGHT\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = currentPageX - startPageX\n const y = currentPageY - startPageY\n\n const width = originWidth + x\n const height = originHeight + y\n\n tempRangeSize.value = { width, height }\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n const endPageX = e.pageX\n const endPageY = e.pageY\n\n if (startPageX === endPageX && startPageY === endPageY) return\n\n // 拖拽结束时,范围超过格子一半自动扩大到下一格(如拖动到一格半多的位置,会自动扩展到两格,横竖都同理)\n let width = tempRangeSize.value.width\n let height = tempRangeSize.value.height\n if (width % CELL_WIDTH > CELL_WIDTH * 0.5) width = width + (CELL_WIDTH - width % CELL_WIDTH)\n if (height % CELL_HEIGHT > CELL_HEIGHT * 0.5) height = height + (CELL_HEIGHT - height % CELL_HEIGHT)\n\n let row = Math.round(height / CELL_HEIGHT)\n let col = Math.round(width / CELL_WIDTH)\n\n if (row < 3) row = 3\n if (col < 2) col = 2\n\n selectedRange.value = [col, row]\n tempRangeSize.value = { width: 0, height: 0 }\n }\n }\n\n return {\n tempRangeSize,\n rangeLines,\n resizablePointStyle,\n selectedRange,\n focusCell,\n changeSelectRange,\n getTableData,\n closeEditor,\n clear,\n handlePaste,\n }\n },\n})\n","import { render } from \"./ChartDataEditor.vue?vue&type=template&id=9a62f784&scoped=true\"\nimport script from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ChartDataEditor.vue?vue&type=style&index=0&id=9a62f784&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9a62f784\"\n\nexport default script","\nimport { computed, defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\nimport { MutationTypes, useStore } from '@/store'\nimport { ChartData, PPTChartElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '../../common/ElementOutline.vue'\nimport ColorButton from '../../common/ColorButton.vue'\nimport ChartDataEditor from './ChartDataEditor.vue'\n\nexport default defineComponent({\n name: 'chart-style-panel',\n components: {\n ElementOutline,\n ChartDataEditor,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const theme = computed(() => store.state.theme)\n\n const chartDataEditorVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const fill = ref()\n\n const themeColor = ref([])\n const gridColor = ref('')\n const legend = ref('')\n\n const lineSmooth = ref(true)\n const showLine = ref(true)\n const showArea = ref(false)\n const horizontalBars = ref(false)\n const donut = ref(false)\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'chart') return\n fill.value = handleElement.value.fill || '#000'\n\n if (handleElement.value.options) {\n const {\n lineSmooth: _lineSmooth,\n showLine: _showLine,\n showArea: _showArea,\n horizontalBars: _horizontalBars,\n donut: _donut,\n } = handleElement.value.options\n\n if (_lineSmooth !== undefined) lineSmooth.value = _lineSmooth as boolean\n if (_showLine !== undefined) showLine.value = _showLine\n if (_showArea !== undefined) showArea.value = _showArea\n if (_horizontalBars !== undefined) horizontalBars.value = _horizontalBars\n if (_donut !== undefined) donut.value = _donut\n }\n\n themeColor.value = handleElement.value.themeColor\n gridColor.value = handleElement.value.gridColor || 'rgba(0, 0, 0, 0.4)'\n legend.value = handleElement.value.legend || ''\n }, { deep: true, immediate: true })\n\n // 设置图表数据\n const updateData = (data: ChartData) => {\n chartDataEditorVisible.value = false\n const props = { data }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n const props = { fill: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置其他选项:柱状图转条形图、折线图转面积图、折线图转散点图、饼图转环形图、折线图开关平滑曲线\n const updateOptions = (optionProps: ILineChartOptions & IBarChartOptions & IPieChartOptions) => {\n const options = handleElement.value.options || {}\n const newOptions = { ...options, ...optionProps }\n const props = { options: newOptions }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置主题色\n const updateTheme = (color: string, index: number) => {\n const props = {\n themeColor: themeColor.value.map((c, i) => i === index ? color : c),\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 添加主题色\n const addThemeColor = () => {\n const props = {\n themeColor: [...themeColor.value, theme.value.themeColor],\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 删除主题色\n const deleteThemeColor = (index: number) => {\n const props = {\n themeColor: themeColor.value.filter((c, i) => i !== index),\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置网格颜色\n const updateGridColor = (gridColor: string) => {\n const props = { gridColor }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置图例位置/不显示\n const updateLegend = (legend: '' | 'top' | 'bottom') => {\n const props = { legend }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const openDataEditor = () => chartDataEditorVisible.value = true\n\n emitter.on(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n onUnmounted(() => {\n emitter.off(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n })\n\n return {\n chartDataEditorVisible,\n handleElement,\n updateData,\n fill,\n updateFill,\n lineSmooth,\n showLine,\n showArea,\n horizontalBars,\n donut,\n updateOptions,\n themeColor,\n gridColor,\n legend,\n updateTheme,\n addThemeColor,\n deleteThemeColor,\n updateGridColor,\n updateLegend,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=b77b4458&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=b77b4458&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-b77b4458\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTableElement, TableCell, TableCellStyle, TableTheme } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport { message } from 'ant-design-vue'\n\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'table-style-panel',\n components: {\n ElementOutline,\n ColorButton,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const selectedCells = computed(() => store.state.selectedTableCells)\n const themeColor = computed(() => store.state.theme.themeColor)\n \n const availableFonts = computed(() => store.state.availableFonts)\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n ]\n\n const textAttrs = ref({\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n })\n\n const theme = ref()\n const hasTheme = ref(false)\n const rowCount = ref(0)\n const colCount = ref(0)\n const minRowCount = ref(0)\n const minColCount = ref(0)\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n \n theme.value = handleElement.value.theme\n hasTheme.value = !!theme.value\n\n rowCount.value = handleElement.value.data.length\n colCount.value = handleElement.value.data[0].length\n\n minRowCount.value = handleElement.value.data.length\n minColCount.value = handleElement.value.data[0].length\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 更新当前选中单元格的文本样式状态\n const updateTextAttrState = () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n\n let rowIndex = 0\n let colIndex = 0\n if (selectedCells.value.length) {\n const selectedCell = selectedCells.value[0]\n rowIndex = +selectedCell.split('_')[0]\n colIndex = +selectedCell.split('_')[1]\n }\n const style = handleElement.value.data[rowIndex][colIndex].style\n\n if (!style) {\n textAttrs.value = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n }\n }\n else {\n textAttrs.value = {\n bold: !!style.bold,\n em: !!style.em,\n underline: !!style.underline,\n strikethrough: !!style.strikethrough,\n color: style.color || '#000',\n backcolor: style.backcolor || '#000',\n fontsize: style.fontsize || '12px',\n fontname: style.fontname || '微软雅黑',\n align: style.align || 'left',\n }\n }\n }\n\n onMounted(() => {\n if (selectedCells.value.length) updateTextAttrState()\n })\n\n watch(selectedCells, updateTextAttrState)\n\n // 设置单元格内容文本样式\n const updateTextAttrs = (textAttrProp: Partial) => {\n const data: TableCell[][] = JSON.parse(JSON.stringify(handleElement.value.data))\n\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].length; j++) {\n if (!selectedCells.value.length || selectedCells.value.includes(`${i}_${j}`)) {\n const style = data[i][j].style || {}\n data[i][j].style = { ...style, ...textAttrProp }\n }\n }\n }\n const props = { data }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n\n addHistorySnapshot()\n updateTextAttrState()\n }\n\n // 更新表格主题:主题色、标题行、汇总行、第一列、最后一列\n const updateTheme = (themeProp: Partial) => {\n const currentTheme = theme.value || {}\n const props = { theme: { ...currentTheme, ...themeProp } }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 开启/关闭表格主题\n const toggleTheme = (checked: boolean) => {\n if (checked) {\n const props = {\n theme: {\n color: themeColor.value,\n rowHeader: true,\n rowFooter: false,\n colHeader: false,\n colFooter: false,\n }\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n }\n else {\n store.commit(MutationTypes.REMOVE_ELEMENT_PROPS, { id: handleElement.value.id, propName: 'theme' })\n }\n addHistorySnapshot()\n }\n\n // 设置表格行数(只能增加)\n const setTableRow = (e: KeyboardEvent) => {\n const value = +(e.target as HTMLInputElement).value\n const rowCount = handleElement.value.data.length\n\n if (value === rowCount) return\n if (value < rowCount) return message.warning('设置行数不能少于当前值')\n\n const rowCells: TableCell[] = new Array(colCount.value).fill({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '' })\n const newTableCells: TableCell[][] = new Array(value - rowCount).fill(rowCells)\n\n const tableCells: TableCell[][] = JSON.parse(JSON.stringify(handleElement.value.data))\n tableCells.push(...newTableCells)\n\n const props = { data: tableCells }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n\n // 设置表格列数(只能增加)\n const setTableCol = (e: KeyboardEvent) => {\n const value = +(e.target as HTMLInputElement).value\n const colCount = handleElement.value.data[0].length\n\n if (value === colCount) return\n if (value < colCount) return message.warning('设置列数不能少于当前值')\n\n const tableCells = handleElement.value.data.map(item => {\n const cells: TableCell[] = new Array(value - colCount).fill({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '' })\n item.push(...cells)\n return item\n })\n\n const colSizeList = handleElement.value.colWidths.map(item => item * handleElement.value.width)\n const newColSizeList = new Array(value - colCount).fill(100)\n colSizeList.push(...newColSizeList)\n\n const width = handleElement.value.width + 100 * (value - colCount)\n const colWidths = colSizeList.map(item => item / width)\n\n const props = {\n width,\n data: tableCells,\n colWidths,\n }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n availableFonts,\n fontSizeOptions,\n textAttrs,\n updateTextAttrs,\n theme,\n rowCount,\n colCount,\n minRowCount,\n minColCount,\n hasTheme,\n toggleTheme,\n updateTheme,\n setTableRow,\n setTableCol,\n webFonts,\n }\n },\n})\n","import { render } from \"./TableStylePanel.vue?vue&type=template&id=db114f8c&scoped=true\"\nimport script from \"./TableStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./TableStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./TableStylePanel.vue?vue&type=style&index=0&id=db114f8c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-db114f8c\"\n\nexport default script","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { ElementTypes, PPTElement } from '@/types/slides'\n\nimport TextStylePanel from './TextStylePanel.vue'\nimport ImageStylePanel from './ImageStylePanel.vue'\nimport ShapeStylePanel from './ShapeStylePanel.vue'\nimport LineStylePanel from './LineStylePanel.vue'\nimport ChartStylePanel from './ChartStylePanel/index.vue'\nimport TableStylePanel from './TableStylePanel.vue'\n\nexport default defineComponent({\n name: 'element-style-panel',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const currentPanelComponent = computed(() => {\n if (!handleElement.value) return null\n \n const panelMap = {\n [ElementTypes.TEXT]: TextStylePanel,\n [ElementTypes.IMAGE]: ImageStylePanel,\n [ElementTypes.SHAPE]: ShapeStylePanel,\n [ElementTypes.LINE]: LineStylePanel,\n [ElementTypes.CHART]: ChartStylePanel,\n [ElementTypes.TABLE]: TableStylePanel,\n }\n return panelMap[handleElement.value.type] || null\n })\n\n return {\n handleElement,\n currentPanelComponent,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=3eb3d748\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { round } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { MIN_SIZE } from '@/configs/element'\nimport useOrderElement from '@/hooks/useOrderElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-positopn-panel',\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n\n const left = ref(0)\n const top = ref(0)\n const width = ref(0)\n const height = ref(0)\n const rotate = ref(0)\n const fixedRatio = ref(false)\n\n const minSize = computed(() => {\n if (!handleElement.value) return 20\n return MIN_SIZE[handleElement.value.type] || 20\n })\n\n watch(handleElement, () => {\n if (!handleElement.value) return\n\n left.value = round(handleElement.value.left, 1)\n top.value = round(handleElement.value.top, 1)\n\n fixedRatio.value = 'fixedRatio' in handleElement.value && !!handleElement.value.fixedRatio\n\n if (handleElement.value.type !== 'line') {\n width.value = round(handleElement.value.width, 1)\n height.value = round(handleElement.value.height, 1)\n rotate.value = 'rotate' in handleElement.value && handleElement.value.rotate !== undefined ? round(handleElement.value.rotate, 1) : 0\n }\n }, { deep: true, immediate: true })\n\n const { orderElement } = useOrderElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置元素位置\n const updateLeft = (value: number) => {\n const props = { left: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n const updateTop = (value: number) => {\n const props = { top: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置元素宽度、高度、旋转角度\n const updateWidth = (value: number) => {\n const props = { width: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n const updateHeight = (value: number) => {\n const props = { height: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n const updateRotate = (value: number) => {\n const props = { rotate: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 固定元素的宽高比\n const updateFixedRatio = (value: boolean) => {\n const props = { fixedRatio: value }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 将元素旋转45度(顺时针或逆时针)\n const updateRotate45 = (command: '+' | '-') => {\n let _rotate = Math.floor(rotate.value / 45) * 45\n if (command === '+') _rotate = _rotate + 45\n else if (command === '-') _rotate = _rotate - 45\n\n if (_rotate < -180) _rotate = -180\n if (_rotate > 180) _rotate = 180\n\n const props = { rotate: _rotate }\n store.commit(MutationTypes.UPDATE_ELEMENT, { id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n orderElement,\n alignElementToCanvas,\n left,\n top,\n width,\n height,\n rotate,\n fixedRatio,\n minSize,\n updateLeft,\n updateTop,\n updateWidth,\n updateHeight,\n updateRotate,\n updateFixedRatio,\n updateRotate45,\n }\n },\n})\n","import { render } from \"./ElementPositionPanel.vue?vue&type=template&id=655fed44&scoped=true\"\nimport script from \"./ElementPositionPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementPositionPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementPositionPanel.vue?vue&type=style&index=0&id=655fed44&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-655fed44\"\n\nexport default script","\n\n\n\n","export const ANIMATIONS = [\r\n {\r\n type: 'bounce',\r\n name: '弹跳',\r\n children: [\r\n { name: '弹入', value: 'bounceIn' },\r\n { name: '向右弹入', value: 'bounceInLeft' },\r\n { name: '向左弹入', value: 'bounceInRight' },\r\n { name: '向上弹入', value: 'bounceInUp' },\r\n { name: '向下弹入', value: 'bounceInDown' },\r\n ],\r\n },\r\n {\r\n type: 'fade',\r\n name: '浮现',\r\n children: [\r\n { name: '浮入', value: 'fadeIn' },\r\n { name: '向下浮入', value: 'fadeInDown' },\r\n { name: '向下长距浮入', value: 'fadeInDownBig' },\r\n { name: '向右浮入', value: 'fadeInLeft' },\r\n { name: '向右长距浮入', value: 'fadeInLeftBig' },\r\n { name: '向左浮入', value: 'fadeInRight' },\r\n { name: '向左长距浮入', value: 'fadeInRightBig' },\r\n { name: '向上浮入', value: 'fadeInUp' },\r\n { name: '向上长距浮入', value: 'fadeInUpBig' },\r\n { name: '从左上浮入', value: 'fadeInTopLeft' },\r\n { name: '从右上浮入', value: 'fadeInTopRight' },\r\n { name: '从左下浮入', value: 'fadeInBottomLeft' },\r\n { name: '从右下浮入', value: 'fadeInBottomRight' },\r\n ],\r\n },\r\n {\r\n type: 'rotate',\r\n name: '旋转',\r\n children: [\r\n { name: '旋转进入', value: 'rotateIn' },\r\n { name: '绕左下旋转进入', value: 'rotateInDownLeft' },\r\n { name: '绕右下旋转进入', value: 'rotateInDownRight' },\r\n { name: '绕左上旋转进入', value: 'rotateInUpLeft' },\r\n { name: '绕右上旋转进入', value: 'rotateInUpRight' },\r\n ],\r\n },\r\n {\r\n type: 'zoom',\r\n name: '缩放',\r\n children: [\r\n { name: '放大进入', value: 'zoomIn' },\r\n { name: '向下放大进入', value: 'zoomInDown' },\r\n { name: '从左放大进入', value: 'zoomInLeft' },\r\n { name: '从右放大进入', value: 'zoomInRight' },\r\n { name: '向上放大进入', value: 'zoomInUp' },\r\n ],\r\n },\r\n {\r\n type: 'slide',\r\n name: '滑入',\r\n children: [\r\n { name: '向下滑入', value: 'slideInDown' },\r\n { name: '从右滑入', value: 'slideInLeft' },\r\n { name: '从左滑入', value: 'slideInRight' },\r\n { name: '向上滑入', value: 'slideInUp' },\r\n ],\r\n },\r\n {\r\n type: 'flip',\r\n name: '翻转',\r\n children: [\r\n { name: 'X轴翻转进入', value: 'flipInX' },\r\n { name: 'Y轴翻转进入', value: 'flipInY' },\r\n ],\r\n },\r\n {\r\n type: 'back',\r\n name: '放大滑入',\r\n children: [\r\n { name: '向下放大滑入', value: 'backInDown' },\r\n { name: '从左放大滑入', value: 'backInLeft' },\r\n { name: '从右放大滑入', value: 'backInRight' },\r\n { name: '向上放大滑入', value: 'backInUp' },\r\n ],\r\n },\r\n {\r\n type: 'lightSpeed',\r\n name: '飞入',\r\n children: [\r\n { name: '从右飞入', value: 'lightSpeedInRight' },\r\n { name: '从左飞入', value: 'lightSpeedInLeft' },\r\n ],\r\n },\r\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTAnimation, PPTElement, Slide } from '@/types/slides'\nimport { ANIMATIONS } from '@/configs/animation'\nimport { ELEMENT_TYPE_ZH } from '@/configs/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport Draggable from 'vuedraggable'\n\nconst defaultDuration = 1000\n\nconst animationTypes: { [key: string]: string } = {}\nfor (const type of ANIMATIONS) {\n for (const animation of type.children) {\n animationTypes[animation.value] = animation.name\n }\n}\n\nexport default defineComponent({\n name: 'element-animation-panel',\n components: {\n Draggable,\n },\n setup() {\n const store = useStore()\n const handleElement = computed(() => store.getters.handleElement)\n const currentSlideAnimations = computed(() => store.getters.currentSlideAnimations)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const hoverPreviewAnimation = ref('')\n const animationPoolVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const animations = ANIMATIONS\n\n // 当前页面的动画列表\n const animationSequence = computed(() => {\n if (!currentSlideAnimations.value) return []\n const animationSequence = []\n for (const animation of currentSlideAnimations.value) {\n const el = currentSlide.value.elements.find(el => el.id === animation.elId)\n if (!el) continue\n const elType = ELEMENT_TYPE_ZH[el.type]\n const animationType = animationTypes[animation.type]\n\n animationSequence.push({\n ...animation,\n elType,\n animationType,\n })\n }\n return animationSequence\n })\n\n // 当前选中元素的入场动画信息\n const handleElementAnimation = computed(() => {\n if (!handleElement.value) return null\n const animations = currentSlideAnimations.value || []\n const animation = animations.find(item => item.elId === handleElement.value.id)\n return animation || null\n })\n\n // 当前选中元素的入场动画名称\n const handleElementAnimationName = computed(() => {\n if (!handleElementAnimation.value) return null\n return animationTypes[handleElementAnimation.value.type]\n })\n\n // 删除元素入场动画\n const deleteAnimation = (elId: string) => {\n const animations = (currentSlideAnimations.value as PPTAnimation[]).filter(item => item.elId !== elId)\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n addHistorySnapshot()\n }\n\n // 拖拽修改入场动画顺序后同步数据\n const handleDragEnd = (eventData: { newIndex: number; oldIndex: number }) => {\n const { newIndex, oldIndex } = eventData\n if (oldIndex === newIndex) return\n\n const animations: PPTAnimation[] = JSON.parse(JSON.stringify(currentSlideAnimations.value))\n const animation = animations[oldIndex]\n animations.splice(oldIndex, 1)\n animations.splice(newIndex, 0, animation)\n \n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n addHistorySnapshot()\n }\n\n // 执行入场动画预览\n const runAnimation = (elId: string, animationType: string, duration: number) => {\n const prefix = 'animate__'\n const elRef = document.querySelector(`#editable-element-${elId} [class^=editable-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animationType}`\n document.documentElement.style.setProperty('--animate-duration', `${duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 修改元素入场动画,并执行一次预览\n const updateElementAnimation = (type: string) => {\n if (!currentSlideAnimations.value) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElement.value.id) return { ...item, type }\n return item\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n const animationItem = currentSlideAnimations.value.find(item => item.elId === handleElement.value.id)\n const duration = animationItem?.duration || defaultDuration\n\n runAnimation(handleElement.value.id, type, duration)\n }\n\n // 修改元素入场动画持续时间\n const updateElementAnimationDuration = (duration: number) => {\n if (!currentSlideAnimations.value) return\n if (duration < 100 || duration > 5000) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElement.value.id) return { ...item, duration }\n return item\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n addHistorySnapshot()\n }\n\n // 添加元素入场动画,并执行一次预览\n const addAnimation = (type: string) => {\n if (handleElementAnimationName.value) {\n updateElementAnimation(type)\n return\n }\n const animations: PPTAnimation[] = currentSlideAnimations.value ? JSON.parse(JSON.stringify(currentSlideAnimations.value)) : []\n animations.push({\n elId: handleElement.value.id,\n type,\n duration: defaultDuration,\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n runAnimation(handleElement.value.id, type, defaultDuration)\n }\n\n return {\n handleElement,\n animationPoolVisible,\n animations,\n animationSequence,\n hoverPreviewAnimation,\n handleElementAnimation,\n handleElementAnimationName,\n addAnimation,\n deleteAnimation,\n handleDragEnd,\n runAnimation,\n updateElementAnimationDuration,\n }\n },\n})\n","import { render } from \"./ElementAnimationPanel.vue?vue&type=template&id=34dfe3c2&scoped=true\"\nimport script from \"./ElementAnimationPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementAnimationPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementAnimationPanel.vue?vue&type=style&index=0&id=34dfe3c2&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-34dfe3c2\"\n\nexport default script","\n\n\n\n","export const PRESET_THEMES = [\r\n { color: '#d14424', background: '#ffffff', text: '#333' },\r\n { color: '#42464b', background: '#ffffff', text: '#333' },\r\n { color: '#5d82ba', background: '#ffffff', text: '#333' },\r\n { color: '#005a6f', background: '#ffffff', text: '#333' },\r\n { color: '#d0614c', background: '#dfb044', text: '#333' },\r\n { color: '#86a1ad', background: '#dfdbd4', text: '#333' },\r\n { color: '#697586', background: '#d5c4a4', text: '#333' },\r\n { color: '#333333', background: '#7acfa6', text: '#333' },\r\n { color: '#42464b', background: '#415065', text: '#fff' },\r\n { color: '#0c5999', background: '#35a2cd', text: '#fff' },\r\n { color: '#c49a41', background: '#8c4357', text: '#fff' },\r\n { color: '#dfaa00', background: '#2e4e7d', text: '#fff' },\r\n { color: '#d1ad88', background: '#f99070', text: '#fff' },\r\n { color: '#464d52', background: '#657984', text: '#fff' },\r\n { color: '#ffcfb6', background: '#1e4c6f', text: '#fff' },\r\n { color: '#c3a043', background: '#43292a', text: '#fff' },\r\n { color: '#464d52', background: '#60546f', text: '#fff' },\r\n { color: '#df9636', background: '#5b89a0', text: '#fff' },\r\n { color: '#b898a4', background: '#93716b', text: '#fff' },\r\n { color: '#c47a11', background: '#187db1', text: '#fff' },\r\n { color: '#333333', background: '#759564', text: '#fff' },\r\n { color: '#355b5e', background: '#424b50', text: '#fff' },\r\n { color: '#d29090', background: '#942a32', text: '#fff' },\r\n { color: '#00cfdf', background: '#3b434d', text: '#fff' },\r\n { color: '#424246', background: '#c70042', text: '#fff' },\r\n { color: '#2e4155', background: '#b35d44', text: '#fff' },\r\n { color: '#11bfce', background: '#8f98aa', text: '#fff' },\r\n { color: '#333333', background: '#549688', text: '#fff' },\r\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide, SlideBackground, SlideTheme } from '@/types/slides'\nimport { PRESET_THEMES } from '@/configs/theme'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './common/ColorButton.vue'\nimport { getImageDataURL } from '@/utils/image'\n\nconst themes = PRESET_THEMES\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'slide-design-panel',\n components: {\n ColorButton,\n },\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const theme = computed(() => store.state.theme)\n const availableFonts = computed(() => store.state.availableFonts)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const background = computed(() => {\n if (!currentSlide.value.background) {\n return {\n type: 'solid',\n value: '#fff',\n } as SlideBackground\n }\n return currentSlide.value.background\n })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 设置背景模式:纯色、图片、渐变色\n const updateBackgroundType = (type: 'solid' | 'image' | 'gradient') => {\n if (type === 'solid') {\n const newBackground: SlideBackground = {\n ...background.value,\n type: 'solid',\n color: background.value.color || '#fff',\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background: newBackground })\n }\n else if (type === 'image') {\n const newBackground: SlideBackground = {\n ...background.value,\n type: 'image',\n image: background.value.image || '',\n imageSize: background.value.imageSize || 'cover',\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background: newBackground })\n }\n else {\n const newBackground: SlideBackground = {\n ...background.value,\n type: 'gradient',\n gradientType: background.value.gradientType || 'linear',\n gradientColor: background.value.gradientColor || ['#fff', '#fff'],\n gradientRotate: background.value.gradientRotate || 0,\n }\n store.commit(MutationTypes.UPDATE_SLIDE, { background: newBackground })\n }\n addHistorySnapshot()\n }\n\n // 设置背景图片\n const updateBackground = (props: Partial) => {\n store.commit(MutationTypes.UPDATE_SLIDE, { background: { ...background.value, ...props } })\n addHistorySnapshot()\n }\n\n // 上传背景图片\n const uploadBackgroundImage = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => updateBackground({ image: dataURL }))\n }\n\n // 应用当前页背景到全部页面\n const applyBackgroundAllSlide = () => {\n const newSlides = slides.value.map(slide => {\n return {\n ...slide,\n background: currentSlide.value.background,\n }\n })\n store.commit(MutationTypes.SET_SLIDES, newSlides)\n addHistorySnapshot()\n }\n\n // 设置主题\n const updateTheme = (themeProps: Partial) => {\n store.commit(MutationTypes.SET_THEME, themeProps)\n }\n\n // 将当前主题应用到全部页面\n const applyThemeAllSlide = () => {\n const newSlides: Slide[] = JSON.parse(JSON.stringify(slides.value))\n const { themeColor, backgroundColor, fontColor, fontName } = theme.value\n\n for (const slide of newSlides) {\n if (!slide.background || slide.background.type !== 'image') {\n slide.background = {\n ...slide.background,\n type: 'solid',\n color: backgroundColor\n }\n }\n\n const elements = slide.elements\n for (const el of elements) {\n if (el.type === 'shape') el.fill = themeColor\n else if (el.type === 'line') el.color = themeColor\n else if (el.type === 'text') {\n el.defaultColor = fontColor\n el.defaultFontName = fontName\n if (el.fill) el.fill = themeColor\n }\n else if (el.type === 'table') {\n if (el.theme) el.theme.color = themeColor\n for (const rowCells of el.data) {\n for (const cell of rowCells) {\n if (cell.style) {\n cell.style.color = fontColor\n cell.style.fontname = fontName\n }\n }\n }\n }\n else if (el.type === 'chart') {\n el.themeColor = [themeColor]\n el.gridColor = fontColor\n }\n }\n }\n store.commit(MutationTypes.SET_SLIDES, newSlides)\n addHistorySnapshot()\n }\n\n // 是否显示预设主题\n const showPresetThemes = ref(true)\n const togglePresetThemesVisible = () => {\n showPresetThemes.value = !showPresetThemes.value\n }\n\n // 设置画布尺寸(宽高比例)\n const updateViewportRatio = (value: number) => {\n store.commit(MutationTypes.SET_VIEWPORT_RATIO, value)\n }\n\n return {\n availableFonts,\n background,\n updateBackgroundType,\n updateBackground,\n uploadBackgroundImage,\n applyBackgroundAllSlide,\n themes,\n theme,\n webFonts,\n updateTheme,\n applyThemeAllSlide,\n viewportRatio,\n updateViewportRatio,\n showPresetThemes,\n togglePresetThemesVisible,\n }\n },\n})\n","import { render } from \"./SlideDesignPanel.vue?vue&type=template&id=7c0de296&scoped=true\"\nimport script from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideDesignPanel.vue?vue&type=style&index=0&id=7c0de296&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7c0de296\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'slide-animation-panel',\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const currentTurningMode = computed(() => currentSlide.value.turningMode || 'slideY')\n\n const animations = [\n { label: '无', value: 'no' },\n { label: '淡入淡出', value: 'fade' },\n { label: '左右推移', value: 'slideX' },\n { label: '上下推移', value: 'slideY' },\n ]\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 修改播放时的切换页面方式\n const updateTurningMode = (mode: string) => {\n if (mode === currentTurningMode.value) return\n store.commit(MutationTypes.UPDATE_SLIDE, { turningMode: mode })\n addHistorySnapshot()\n }\n\n // 将当前页的切换页面方式应用到全部页面\n const applyAllSlide = () => {\n const newSlides = slides.value.map(slide => {\n return {\n ...slide,\n turningMode: currentSlide.value.turningMode,\n }\n })\n store.commit(MutationTypes.SET_SLIDES, newSlides)\n addHistorySnapshot()\n }\n\n return {\n currentTurningMode,\n animations,\n updateTurningMode,\n applyAllSlide,\n }\n },\n})\n","import { render } from \"./SlideAnimationPanel.vue?vue&type=template&id=647e2618&scoped=true\"\nimport script from \"./SlideAnimationPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideAnimationPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideAnimationPanel.vue?vue&type=style&index=0&id=647e2618&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-647e2618\"\n\nexport default script","\n\n\n\n","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { PPTElement, Slide } from '@/types/slides'\r\nimport { ElementAlignCommand, ElementAlignCommands } from '@/types/edit'\r\nimport { getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\nexport default () => {\r\n const store = useStore()\r\n\r\n const activeElementIdList = computed(() => store.state.activeElementIdList)\r\n const activeElementList = computed(() => store.getters.activeElementList)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 对齐选中的元素\r\n * @param command 对齐方向\r\n */\r\n const alignActiveElement = (command: ElementAlignCommand) => {\r\n const { minX, maxX, minY, maxY } = getElementListRange(activeElementList.value)\r\n const elementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n // 如果所选择的元素为组合元素的成员,需要计算该组合的整体范围\r\n const groupElementRangeMap = {}\r\n for (const activeElement of activeElementList.value) {\r\n if (activeElement.groupId && !groupElementRangeMap[activeElement.groupId]) {\r\n const groupElements = activeElementList.value.filter(item => item.groupId === activeElement.groupId)\r\n groupElementRangeMap[activeElement.groupId] = getElementListRange(groupElements)\r\n }\r\n }\r\n\r\n // 根据不同的命令,计算对齐的位置\r\n if (command === ElementAlignCommands.LEFT) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = minX - offsetX\r\n }\r\n else element.left = minX\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.minX - minX\r\n element.left = element.left - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.RIGHT) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elWidth = element.type === 'line' ? Math.max(element.start[0], element.end[0]) : element.width\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = maxX - elWidth + offsetX\r\n }\r\n else element.left = maxX - elWidth\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.maxX - maxX\r\n element.left = element.left - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.TOP) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = minY - offsetY\r\n }\r\n else element.top = minY\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.minY - minY\r\n element.top = element.top - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.BOTTOM) {\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elHeight = element.type === 'line' ? Math.max(element.start[1], element.end[1]) : element.height\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = maxY - elHeight + offsetY\r\n }\r\n else element.top = maxY - elHeight\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const offset = range.maxY - maxY\r\n element.top = element.top - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.HORIZONTAL) {\r\n const horizontalCenter = (minX + maxX) / 2\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elWidth = element.type === 'line' ? Math.max(element.start[0], element.end[0]) : element.width\r\n element.left = horizontalCenter - elWidth / 2\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const center = (range.maxX + range.minX) / 2\r\n const offset = center - horizontalCenter\r\n element.left = element.left - offset\r\n }\r\n }\r\n })\r\n }\r\n else if (command === ElementAlignCommands.VERTICAL) {\r\n const verticalCenter = (minY + maxY) / 2\r\n elementList.forEach(element => {\r\n if (activeElementIdList.value.includes(element.id)) {\r\n if (!element.groupId) {\r\n const elHeight = element.type === 'line' ? Math.max(element.start[1], element.end[1]) : element.height\r\n element.top = verticalCenter - elHeight / 2\r\n }\r\n else {\r\n const range = groupElementRangeMap[element.groupId]\r\n const center = (range.maxY + range.minY) / 2\r\n const offset = center - verticalCenter\r\n element.top = element.top - offset\r\n }\r\n }\r\n })\r\n }\r\n \r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: elementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n alignActiveElement,\r\n }\r\n}","import { computed } from 'vue'\r\nimport { MutationTypes, useStore } from '@/store'\r\nimport { PPTElement, Slide } from '@/types/slides'\r\nimport { getElementRange, getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\ninterface ElementItem {\r\n min: number;\r\n max: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface GroupItem {\r\n groupId: string;\r\n els: PPTElement[];\r\n}\r\n\r\ninterface GroupElementsItem {\r\n min: number;\r\n max: number;\r\n els: PPTElement[];\r\n}\r\n\r\ntype Item = ElementItem | GroupElementsItem\r\n\r\ninterface ElementWithPos {\r\n pos: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface LastPos {\r\n min: number;\r\n max: number;\r\n}\r\n\r\nexport default () => {\r\n const store = useStore()\r\n const activeElementIdList = computed(() => store.state.activeElementIdList)\r\n const activeElementList = computed(() => store.getters.activeElementList)\r\n const currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n const displayItemCount = computed(() => {\r\n let count = 0\r\n const groupIdList: string[] = []\r\n for (const el of activeElementList.value) {\r\n if (!el.groupId) count += 1\r\n else if (!groupIdList.includes(el.groupId)) {\r\n groupIdList.push(el.groupId)\r\n count += 1\r\n }\r\n }\r\n return count\r\n })\r\n // 水平均匀排列\r\n const uniformHorizontalDisplay = () => {\r\n const { minX, maxX } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n // 分别获取普通元素和组合元素集合,并记录下每一项的范围\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minX, maxX } = getElementRange(el)\r\n singleElemetList.push({ min: minX, max: maxX, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minX, maxX } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minX, max: maxX, els: groupItem.els })\r\n }\r\n\r\n // 将普通元素和组合元素集合组合在一起,然后将每一项按位置(从左到右)排序\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n // 计算元素均匀分布所需要的间隔:\r\n // (所选元素整体范围 - 所有所选元素宽度和) / (所选元素数 - 1)\r\n let totalWidth = 0\r\n for (const item of list) {\r\n const width = item.max - item.min\r\n totalWidth += width\r\n }\r\n const span = ((maxX - minX) - totalWidth) / (list.length - 1)\r\n\r\n // 按位置顺序依次计算每一个元素的目标位置\r\n // 第一项中的元素即为起点,无序计算\r\n // 从第二项开始,每一项的位置应该为:上一项位置 + 上一项宽度 + 间隔\r\n // 注意此处计算的位置(pos)并非元素最终的left值,而是目标位置范围最小值(元素旋转后的left值 ≠ 范围最小值)\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minX: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastWidth = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastWidth + span\r\n const currentWidth = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentWidth }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minX } = getElementRange(el)\r\n const offset = minX - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n // 根据目标位置计算元素最终目标left值\r\n // 对于旋转后的元素,需要计算旋转前后left的偏移来做校正\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = sortedItem.pos - offsetX\r\n }\r\n else element.left = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n // 垂直均匀排列(逻辑类似水平均匀排列方法)\r\n const uniformVerticalDisplay = () => {\r\n const { minY, maxY } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minY, maxY } = getElementRange(el)\r\n singleElemetList.push({ min: minY, max: maxY, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minY, maxY } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minY, max: maxY, els: groupItem.els })\r\n }\r\n\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n let totalHeight = 0\r\n for (const item of list) {\r\n const height = item.max - item.min\r\n totalHeight += height\r\n }\r\n const span = ((maxY - minY) - totalHeight) / (list.length - 1)\r\n\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minY: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastHeight = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastHeight + span\r\n const currentHeight = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentHeight }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minY } = getElementRange(el)\r\n const offset = minY - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = sortedItem.pos - offsetY\r\n }\r\n else element.top = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n displayItemCount,\r\n uniformHorizontalDisplay,\r\n uniformVerticalDisplay,\r\n }\r\n}","\nimport { defineComponent } from 'vue'\nimport { ElementAlignCommand } from '@/types/edit'\nimport useCombineElement from '@/hooks/useCombineElement'\nimport useAlignActiveElement from '@/hooks/useAlignActiveElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useUniformDisplayElement from '@/hooks/useUniformDisplayElement'\n\nexport default defineComponent({\n name: 'multi-position-panel',\n setup() {\n const { canCombine, combineElements, uncombineElements } = useCombineElement()\n const { alignActiveElement } = useAlignActiveElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { displayItemCount, uniformHorizontalDisplay, uniformVerticalDisplay } = useUniformDisplayElement()\n\n // 多选元素对齐,需要先判断当前所选中的元素状态:\n // 如果所选元素为一组组合元素,则将它对齐到画布;\n // 如果所选元素不是组合元素或不止一组元素(即当前为可组合状态),则将这多个(多组)元素相互对齐。\n const alignElement = (command: ElementAlignCommand) => {\n if (canCombine.value) alignActiveElement(command)\n else alignElementToCanvas(command)\n }\n\n return {\n canCombine,\n displayItemCount,\n combineElements,\n uncombineElements,\n uniformHorizontalDisplay,\n uniformVerticalDisplay,\n alignElement,\n }\n },\n})\n","import { render } from \"./MultiPositionPanel.vue?vue&type=template&id=88d13362&scoped=true\"\nimport script from \"./MultiPositionPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./MultiPositionPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./MultiPositionPanel.vue?vue&type=style&index=0&id=88d13362&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-88d13362\"\n\nexport default script","\n\n\n\n\n","export const SYMBOL_LIST = [\n {\n key: 'letter',\n label: '字母',\n children: [\n 'α', 'β', 'γ', 'δ', 'ϵ', 'ε', 'ζ', 'η', 'θ', 'ϑ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'π', 'ϖ', 'ρ', 'ϱ', 'σ', 'ς', 'τ', 'υ', 'ϕ', 'φ', 'χ', 'ψ', 'ω', \n 'Γ', 'Δ', 'Θ', 'Λ', 'Ξ', 'Π', 'Σ', 'Υ', 'Φ', 'Ψ', 'Ω',\n '𝐀', '𝐁', '𝐂', '𝐃', '𝐄', '𝐅', '𝐆', '𝐇', '𝐈', '𝐉', '𝐊', '𝐋', '𝐌', '𝐍', '𝐎', '𝐏', '𝐐', '𝐑', '𝐒', '𝐓', '𝐔', '𝐕', '𝐖', '𝐗', '𝐘', '𝐙',\n '𝐚', '𝐛', '𝐜', '𝐝', '𝐞', '𝐟', '𝐠', '𝐡', '𝐢', '𝐣', '𝐤', '𝐥', '𝐦', '𝐧', '𝐨', '𝐩', '𝐪', '𝐫', '𝐬', '𝐭', '𝐮', '𝐯', '𝐰', '𝐱', '𝐲', '𝐳',\n '𝓐', '𝓑', '𝓒', '𝓓', '𝓔', '𝓕', '𝓖', '𝓗', '𝓘', '𝓙', '𝓚', '𝓛', '𝓜', '𝓝', '𝓞', '𝓟', '𝓠', '𝓡', '𝓢', '𝓣', '𝓤', '𝓥', '𝓦', '𝓧', '𝓨', '𝓩',\n '𝓪', '𝓫', '𝓬', '𝓭', '𝓮', '𝓯', '𝓰', '𝓱', '𝓲', '𝓳', '𝓴', '𝓵', '𝓶', '𝓷', '𝓸', '𝓹', '𝓺', '𝓻', '𝓼', '𝓽', '𝓾', '𝓿', '𝔀', '𝔁', '𝔂', '𝔃',\n ],\n },\n {\n key: 'number',\n label: '序号',\n children: [\n '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬', '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳',\n '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀', '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇',\n 'º', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹', '₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉',\n 'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', 'Ⅹ', 'Ⅺ', 'Ⅻ', 'Ⅼ', 'Ⅽ', 'Ⅾ', 'Ⅿ',\n 'ⅰ', 'ⅱ', 'ⅲ', 'ⅳ', 'ⅴ', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', 'ⅹ', 'ⅺ', 'ⅻ', 'ⅼ', 'ⅽ', 'ⅾ', 'ⅿ', 'ↀ', 'ↁ', 'ↂ',\n '㊀', '㊁', '㊂', '㊃', '㊄', '㊅', '㊆', '㊇', '㊈', '㊉', '㈠', '㈡', '㈢', '㈣', '㈤', '㈥', '㈦', '㈧', '㈨', '㈩',\n '𝟘', '𝟙', '𝟚', '𝟛', '𝟜', '𝟝', '𝟞', '𝟟', '𝟠', '𝟡',\n ],\n },\n {\n key: 'math',\n label: '数学',\n children: [\n '+', '-', '×', '÷', '=', '~', '¬', '±', '%', '°', 'ǃ', '‰', '‱', '½', '⅓', '⅔', '¼', '¾',\n '<', '>', 'l', 'o', 'g', 'l', 'g', 'l', 'n', '⨂', '⨁', '⨄', '⨃', '⨅', '⨆', '√', '∛', '∜', '∝', '∞',\n '∟', '∠', '∡', '∢', '∧', '∨', '∩', '∪', '∫', '∬', '∭', '∮', '∯', '∰', '∱', '∲', '∳',\n '∴', '∵', '∼', '∽', '∾', '∿', '≃', '≄', '≅', '≆', '≇', '≈', '≊', '≋', '≌', '≍', '≎', '≏', '≐', '≑', '≒', '≓', '≔', '≕',\n '≤', '≥', '≦', '≧', '≨', '≩', '≪', '≫', '≺', '≻', '≼', '≽', '≾', '≿', '⊀', '⊁', '⊂', '⊃', '⊄', '⊅', '⊆', '⊇', '⊈', '⊉', '⊊', '⊋', '⊏', '⊐', '⊑', '⊒',\n '⊓', '⊔', '⊢', '⊣', '⊤', '⊥', '⊦', '⊧', '⊨', '⊩', '⊪', '⊫', '⊬', '⊭', '⊮', '⊯', '⊲', '⊳', '⊴', '⊵', '⋀', '⋁', '⋂', '⋃', '⋉', '⋊',\n '⋋', '⋌', '⟨', '⟩', '⟪', '⟫', '⟮', '⟯', '⧼', '⧽', '⦰',\n ],\n },\n {\n key: 'arrow',\n label: '箭头',\n children: [\n '←', '↑', '→', '↓', '↔', '↕', '↖', '↗', '↘', '↙', '↚', '↛', '↜', '↝', '↞', '↟', '↠', '↡', '↢', '↣', '↤', '↥', '↦', '↧', '↨',\n '↫', '↬', '↭', '↮', '↯', '↰', '↱', '↲', '↳', '↴', '↵', '↶', '↷', '↸', '↹', '↺', '↻', '↼', '↽', '↾', '↿', '⇀', '⇁', '⇂', '⇃',\n '⇄', '⇅', '⇆', '⇇', '⇈', '⇉', '⇊', '⇋', '⇌', '⇍', '⇎', '⇏', '⇐', '⇑', '⇒', '⇓', '⇔', '⇕', '⇖', '⇗', '⇘', '⇙', '⇚', '⇛',\n '⇜', '⇝', '⇞', '⇟', '⇠', '⇡', '⇢', '⇣', '⇤', '⇥', '⇦', '⇧', '⇨', '⇩', '⇪', '⇫', '⇬', '⇭', '⇮', '⇯', '⇰', '⇱', '⇲', '⇳', '⇴', '⇵',\n '⇶', '⇷', '⇸', '⇹', '⇺', '⇻', '⇼', '⇽', '⇾', '⇿',\n ],\n },\n {\n key: 'graph',\n label: '图形',\n children: [\n '▢', '▣', '▤', '▥', '▦', '▧', '▨', '▩', '▭', '▮', '▯', '▰', '▱', '▲', '▷', '▼', '◁',\n '◈', '◉', '◍', '◐', '◑', '◒', '◓', '◔', '◕', '◧', '◨', '◩', '◪', '◫', '◬', '◭', '◮',\n ],\n },\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { SYMBOL_LIST } from '@/configs/symbol'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\n\nconst symbolPoolList = SYMBOL_LIST\n\nexport default defineComponent({\n name: 'symbol-panel',\n setup() {\n const selectedSymbolKey = ref(symbolPoolList[0].key)\n const symbolPool = computed(() => {\n const selectedSymbol = symbolPoolList.find(item => item.key === selectedSymbolKey.value)\n return selectedSymbol?.children || []\n })\n\n const selectSymbol = (item: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command: 'insert', value: item })\n }\n\n return {\n symbolPoolList,\n symbolPool,\n selectedSymbolKey,\n selectSymbol,\n }\n },\n})\n","import { render } from \"./SymbolPanel.vue?vue&type=template&id=48704658&scoped=true\"\nimport script from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SymbolPanel.vue?vue&type=style&index=0&id=48704658&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-48704658\"\n\nexport default script","\nimport { computed, defineComponent, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { ToolbarState, ToolbarStates } from '@/types/toolbar'\n\nimport ElementStylePanel from './ElementStylePanel/index.vue'\nimport ElementPositionPanel from './ElementPositionPanel.vue'\nimport ElementAnimationPanel from './ElementAnimationPanel.vue'\nimport SlideDesignPanel from './SlideDesignPanel.vue'\nimport SlideAnimationPanel from './SlideAnimationPanel.vue'\nimport MultiPositionPanel from './MultiPositionPanel.vue'\nimport SymbolPanel from './SymbolPanel.vue'\n\nexport default defineComponent({\n name: 'toolbar',\n setup() {\n const store = useStore()\n const toolbarState = computed(() => store.state.toolbarState)\n const handleElement = computed(() => store.getters.handleElement)\n\n const elementTabs = computed(() => {\n if (handleElement.value?.type === 'text') {\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '符号', value: ToolbarStates.SYMBOL },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n }\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n })\n const slideTabs = [\n { label: '设计', value: ToolbarStates.SLIDE_DESIGN },\n { label: '切换', value: ToolbarStates.SLIDE_ANIMATION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n const multiSelectTabs = [\n { label: '位置', value: ToolbarStates.MULTI_POSITION },\n { label: '样式', value: ToolbarStates.EL_STYLE },\n ]\n\n const setToolbarState = (value: ToolbarState) => {\n store.commit(MutationTypes.SET_TOOLBAR_STATE, value)\n }\n\n const activeElementIdList = computed(() => store.state.activeElementIdList)\n const currentTabs = computed(() => {\n if (!activeElementIdList.value.length) return slideTabs\n else if (activeElementIdList.value.length > 1) return multiSelectTabs\n return elementTabs.value\n })\n\n watch(currentTabs, () => {\n const currentTabsValue = currentTabs.value.map(tab => tab.value)\n if (!currentTabsValue.includes(toolbarState.value)) {\n store.commit(MutationTypes.SET_TOOLBAR_STATE, currentTabsValue[0])\n }\n })\n\n const currentPanelComponent = computed(() => {\n const panelMap = {\n [ToolbarStates.EL_STYLE]: ElementStylePanel,\n [ToolbarStates.EL_POSITION]: ElementPositionPanel,\n [ToolbarStates.EL_ANIMATION]: ElementAnimationPanel,\n [ToolbarStates.SLIDE_DESIGN]: SlideDesignPanel,\n [ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,\n [ToolbarStates.MULTI_POSITION]: MultiPositionPanel,\n [ToolbarStates.SYMBOL]: SymbolPanel,\n }\n return panelMap[toolbarState.value] || null\n })\n\n return {\n toolbarState,\n currentTabs,\n setToolbarState,\n currentPanelComponent,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5e3834d5&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=5e3834d5&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5e3834d5\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\n\nexport default defineComponent({\n name: 'remark',\n emits: ['update:height'],\n props: {\n height: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const currentSlide = computed(() => store.getters.currentSlide)\n const remark = computed(() => currentSlide.value?.remark || '')\n\n const handleInput = (e: InputEvent) => {\n const value = (e.target as HTMLTextAreaElement).value\n store.commit(MutationTypes.UPDATE_SLIDE, { remark: value })\n }\n\n const resize = (e: MouseEvent) => {\n let isMouseDown = true\n const startPageY = e.pageY\n const originHeight = props.height\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageY = e.pageY\n\n const moveY = currentPageY - startPageY\n let newHeight = -moveY + originHeight\n\n if (newHeight < 40) newHeight = 40\n if (newHeight > 120) newHeight = 120\n\n emit('update:height', newHeight)\n }\n\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n }\n }\n\n return {\n remark,\n handleInput,\n resize,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=21516eb9&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=21516eb9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-21516eb9\"\n\nexport default script","\nimport { defineComponent, ref } from 'vue'\n\nimport useGlobalHotkey from '@/hooks/useGlobalHotkey'\nimport usePasteEvent from '@/hooks/usePasteEvent'\n\nimport EditorHeader from './EditorHeader/index.vue'\nimport Canvas from './Canvas/index.vue'\nimport CanvasTool from './CanvasTool/index.vue'\nimport Thumbnails from './Thumbnails/index.vue'\nimport Toolbar from './Toolbar/index.vue'\nimport Remark from './Remark/index.vue'\n\nexport default defineComponent({\n name: 'editor',\n components: {\n EditorHeader,\n Canvas,\n CanvasTool,\n Thumbnails,\n Toolbar,\n Remark,\n },\n setup() {\n const remarkHeight = ref(40)\n\n useGlobalHotkey()\n usePasteEvent()\n\n return {\n remarkHeight,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=55178b6a&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=55178b6a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-55178b6a\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\n\n\n\n","\n\n\n\n\n","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTChartElement } from '@/types/slides'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\nimport Chart from './Chart.vue'\n\nexport default defineComponent({\n name: 'screen-element-chart',\n components: {\n ElementOutline,\n Chart,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./ScreenChartElement.vue?vue&type=template&id=85370c80&scoped=true\"\nimport script from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenChartElement.vue?vue&type=style&index=0&id=85370c80&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-85370c80\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\nimport { ElementTypes, PPTElement, Slide } from '@/types/slides'\n\nimport BaseImageElement from '@/views/components/element/ImageElement/BaseImageElement.vue'\nimport BaseTextElement from '@/views/components/element/TextElement/BaseTextElement.vue'\nimport BaseShapeElement from '@/views/components/element/ShapeElement/BaseShapeElement.vue'\nimport BaseLineElement from '@/views/components/element/LineElement/BaseLineElement.vue'\nimport ScreenChartElement from '@/views/components/element/ChartElement/ScreenChartElement.vue'\nimport BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue'\n\nexport default defineComponent({\n name: 'screen-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n animationIndex: {\n type: Number,\n default: -1,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: BaseImageElement,\n [ElementTypes.TEXT]: BaseTextElement,\n [ElementTypes.SHAPE]: BaseShapeElement,\n [ElementTypes.LINE]: BaseLineElement,\n [ElementTypes.CHART]: ScreenChartElement,\n [ElementTypes.TABLE]: BaseTableElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const store = useStore()\n const theme = computed(() => store.state.theme)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n // 判断元素是否需要等待执行入场动画:等待执行的元素需要先隐藏\n const needWaitAnimation = computed(() => {\n const animations = currentSlide.value.animations || []\n const elementIndexInAnimation = animations.findIndex(animation => animation.elId === props.elementInfo.id)\n if (elementIndexInAnimation !== -1 && elementIndexInAnimation >= props.animationIndex) return true\n return false \n })\n\n // 打开元素绑定的超链接\n const openLink = () => {\n if (props.elementInfo.link) window.open(props.elementInfo.link)\n }\n\n return {\n currentElementComponent,\n needWaitAnimation,\n theme,\n openLink,\n }\n },\n})\n","import { render } from \"./ScreenElement.vue?vue&type=template&id=11126f7d&scoped=true\"\nimport script from \"./ScreenElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenElement.vue?vue&type=style&index=0&id=11126f7d&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-11126f7d\"\n\nexport default script","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'\n\nimport ScreenElement from './ScreenElement.vue'\n\nexport default defineComponent({\n name: 'screen-slide',\n components: {\n ScreenElement,\n },\n props: {\n slide: {\n type: Object as PropType,\n required: true,\n },\n scale: {\n type: Number,\n required: true,\n },\n animationIndex: {\n type: Number,\n default: -1,\n },\n },\n setup(props) {\n const store = useStore()\n const viewportRatio = computed(() => store.state.viewportRatio)\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n return {\n backgroundStyle,\n VIEWPORT_SIZE,\n viewportRatio,\n }\n },\n})\n","import { render } from \"./ScreenSlide.vue?vue&type=template&id=a094625a&scoped=true\"\nimport script from \"./ScreenSlide.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenSlide.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenSlide.vue?vue&type=style&index=0&id=a094625a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a094625a\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { useStore } from '@/store'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'slide-thumbnails',\n emits: ['close'],\n components: {\n ThumbnailSlide,\n },\n props: {\n turnSlideToIndex: {\n type: Function as PropType<(index: number) => void>,\n },\n },\n setup(props, { emit }) {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const slideIndex = computed(() => store.state.slideIndex)\n\n const close = () => emit('close')\n\n return {\n slides,\n slideIndex,\n close,\n }\n },\n})\n","import { render } from \"./SlideThumbnails.vue?vue&type=template&id=26398174&scoped=true\"\nimport script from \"./SlideThumbnails.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideThumbnails.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideThumbnails.vue?vue&type=style&index=0&id=26398174&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-26398174\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\nimport { defineComponent, onMounted, PropType, reactive, ref } from 'vue'\n\nconst penSize = 6\nconst rubberSize = 80\n\nexport default defineComponent({\n name: 'writing-board',\n props: {\n color: {\n type: String,\n default: '#ffcc00',\n },\n model: {\n type: String as PropType<'pen' | 'eraser'>,\n default: 'pen',\n },\n blackboard: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n let ctx: CanvasRenderingContext2D | null = null\n const writingBoardRef = ref()\n const canvasRef = ref()\n\n let lastPos = {\n x: 0,\n y: 0,\n }\n let isMouseDown = false\n let lastTime = 0\n let lastLineWidth = -1\n\n // 鼠标位置坐标:用于画笔或橡皮位置跟随\n const mouse = reactive({\n x: 0,\n y: 0,\n })\n\n // 更新鼠标位置坐标\n const updateMousePosition = (x: number, y: number) => {\n mouse.x = x\n mouse.y = y\n }\n \n // 鼠标是否处在画布范围内:处在范围内才会显示画笔或橡皮\n const mouseInCanvas = ref(false)\n\n\n // 初始化画布\n const initCanvas = () => {\n if (!canvasRef.value || !writingBoardRef.value) return\n\n ctx = canvasRef.value.getContext('2d')\n if (!ctx) return\n\n canvasRef.value.width = writingBoardRef.value.clientWidth\n canvasRef.value.height = writingBoardRef.value.clientHeight\n\n canvasRef.value.style.width = writingBoardRef.value.clientWidth + 'px'\n canvasRef.value.style.height = writingBoardRef.value.clientHeight + 'px'\n\n ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n }\n onMounted(initCanvas)\n\n // 绘制画笔墨迹方法\n const draw = (posX: number, posY: number, lineWidth: number) => {\n if (!ctx) return\n\n const lastPosX = lastPos.x\n const lastPosY = lastPos.y\n\n ctx.lineWidth = lineWidth\n ctx.strokeStyle = props.color\n ctx.beginPath()\n ctx.moveTo(lastPosX, lastPosY)\n ctx.lineTo(posX, posY)\n ctx.stroke()\n ctx.closePath()\n }\n\n // 擦除墨迹方法\n const erase = (posX: number, posY: number) => {\n if (!ctx || !canvasRef.value) return\n const lastPosX = lastPos.x\n const lastPosY = lastPos.y\n\n const radius = rubberSize / 2\n\n const sinRadius = radius * Math.sin(Math.atan((posY - lastPosY) / (posX - lastPosX)))\n const cosRadius = radius * Math.cos(Math.atan((posY - lastPosY) / (posX - lastPosX)))\n const rectPoint1: [number, number] = [lastPosX + sinRadius, lastPosY - cosRadius]\n const rectPoint2: [number, number] = [lastPosX - sinRadius, lastPosY + cosRadius]\n const rectPoint3: [number, number] = [posX + sinRadius, posY - cosRadius]\n const rectPoint4: [number, number] = [posX - sinRadius, posY + cosRadius]\n\n ctx.save()\n ctx.beginPath()\n ctx.arc(posX, posY, radius, 0, Math.PI * 2)\n ctx.clip()\n ctx.clearRect(0, 0, canvasRef.value.width, canvasRef.value.height)\n ctx.restore()\n\n ctx.save()\n ctx.beginPath()\n ctx.moveTo(...rectPoint1)\n ctx.lineTo(...rectPoint3)\n ctx.lineTo(...rectPoint4)\n ctx.lineTo(...rectPoint2)\n ctx.closePath()\n ctx.clip()\n ctx.clearRect(0, 0, canvasRef.value.width, canvasRef.value.height)\n ctx.restore()\n }\n\n // 计算鼠标两次移动之间的距离\n const getDistance = (posX: number, posY: number) => {\n const lastPosX = lastPos.x\n const lastPosY = lastPos.y\n return Math.sqrt((posX - lastPosX) * (posX - lastPosX) + (posY - lastPosY) * (posY - lastPosY))\n }\n\n // 根据鼠标两次移动之间的距离s和时间t计算绘制速度,速度越快,墨迹越细\n const getLineWidth = (s: number, t: number) => {\n const maxV = 10\n const minV = 0.1\n const maxWidth = penSize\n const minWidth = 3\n const v = s / t\n let lineWidth\n\n if (v <= minV) lineWidth = maxWidth\n else if (v >= maxV) lineWidth = minWidth\n else lineWidth = maxWidth - v / maxV * maxWidth\n\n if (lastLineWidth === -1) return lineWidth\n return lineWidth * 1 / 3 + lastLineWidth * 2 / 3\n }\n\n // 路径操作\n const handleMove = (x: number, y: number) => {\n const time = new Date().getTime()\n\n if (props.model === 'pen') {\n const s = getDistance(x, y)\n const t = time - lastTime\n const lineWidth = getLineWidth(s, t)\n\n draw(x, y, lineWidth)\n lastLineWidth = lineWidth\n }\n else erase(x, y)\n\n lastPos = {x, y}\n lastTime = new Date().getTime()\n }\n\n // 处理鼠标(触摸)事件\n // 准备开始绘制/擦除墨迹(落笔)\n const handleMousedown = (e: MouseEvent | TouchEvent) => {\n const x = e instanceof MouseEvent ? e.offsetX : e.changedTouches[0].pageX\n const y = e instanceof MouseEvent ? e.offsetY : e.changedTouches[0].pageY\n\n isMouseDown = true\n lastPos = { x, y }\n lastTime = new Date().getTime()\n\n if (e instanceof TouchEvent) {\n updateMousePosition(x, y)\n mouseInCanvas.value = true\n }\n }\n\n // 开始绘制/擦除墨迹(移动)\n const handleMousemove = (e: MouseEvent | TouchEvent) => {\n const x = e instanceof MouseEvent ? e.offsetX : e.changedTouches[0].pageX\n const y = e instanceof MouseEvent ? e.offsetY : e.changedTouches[0].pageY\n\n updateMousePosition(x, y)\n\n if (isMouseDown) handleMove(x, y)\n }\n\n // 结束绘制/擦除墨迹(停笔)\n const handleMouseup = () => {\n if (!isMouseDown) return\n isMouseDown = false\n }\n\n // 清空画布\n const clearCanvas = () => {\n if (!ctx || !canvasRef.value) return\n ctx.clearRect(0, 0, canvasRef.value.width, canvasRef.value.height)\n }\n\n return {\n mouse,\n mouseInCanvas,\n penSize,\n rubberSize,\n writingBoardRef,\n canvasRef,\n handleMousedown,\n handleMousemove,\n handleMouseup,\n clearCanvas,\n }\n },\n})\n","import { render } from \"./WritingBoard.vue?vue&type=template&id=7ff9fa00&scoped=true\"\nimport script from \"./WritingBoard.vue?vue&type=script&lang=ts\"\nexport * from \"./WritingBoard.vue?vue&type=script&lang=ts\"\n\nimport \"./WritingBoard.vue?vue&type=style&index=0&id=7ff9fa00&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7ff9fa00\"\n\nexport default script","\nimport { defineComponent, ref } from 'vue'\nimport WritingBoard from '@/components/WritingBoard.vue'\n\nconst writingBoardColors = ['#000000', '#ffffff', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c']\n\nexport default defineComponent({\n name: 'writing-board-tool',\n emits: ['close'],\n components: {\n WritingBoard,\n },\n setup(props, { emit }) {\n const writingBoardRef = ref()\n const writingBoardColor = ref('#e2534d')\n const writingBoardModel = ref('pen')\n const blackboard = ref(false)\n\n // 切换到画笔状态\n const changePen = () => {\n writingBoardModel.value = 'pen'\n }\n\n // 切换到橡皮状态\n const changeEraser = () => {\n writingBoardModel.value = 'eraser'\n }\n\n // 清除画布上的墨迹\n const clearCanvas = () => {\n writingBoardRef.value.clearCanvas()\n }\n\n // 修改画笔颜色,如果当前不处于画笔状态则先切换到画笔状态\n const changeColor = (color: string) => {\n if (writingBoardModel.value !== 'pen') writingBoardModel.value = 'pen'\n writingBoardColor.value = color\n }\n \n // 关闭写字板\n const closeWritingBoard = () => {\n emit('close')\n }\n\n return {\n writingBoardRef,\n writingBoardColors,\n writingBoardColor,\n writingBoardModel,\n blackboard,\n changePen,\n changeEraser,\n clearCanvas,\n changeColor,\n closeWritingBoard,\n }\n },\n})\n","import { render } from \"./WritingBoardTool.vue?vue&type=template&id=7a2e5324&scoped=true\"\nimport script from \"./WritingBoardTool.vue?vue&type=script&lang=ts\"\nexport * from \"./WritingBoardTool.vue?vue&type=script&lang=ts\"\n\nimport \"./WritingBoardTool.vue?vue&type=style&index=0&id=7a2e5324&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7a2e5324\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, onUnmounted, provide, ref } from 'vue'\nimport { throttle } from 'lodash'\nimport { MutationTypes, useStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { KEYS } from '@/configs/hotkey'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { isFullscreen } from '@/utils/fullscreen'\nimport useScreening from '@/hooks/useScreening'\n\nimport { message } from 'ant-design-vue'\n\nimport ScreenSlide from './ScreenSlide.vue'\nimport SlideThumbnails from './SlideThumbnails.vue'\nimport WritingBoardTool from './WritingBoardTool.vue'\n\nexport default defineComponent({\n name: 'screen',\n components: {\n ScreenSlide,\n SlideThumbnails,\n WritingBoardTool,\n },\n setup() {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n const slideIndex = computed(() => store.state.slideIndex)\n const viewportRatio = computed(() => store.state.viewportRatio)\n const currentSlide = computed(() => store.getters.currentSlide)\n\n const slideWidth = ref(0)\n const slideHeight = ref(0)\n\n const scale = computed(() => slideWidth.value / VIEWPORT_SIZE)\n\n const showPageNumber = ref(false)\n\n const slideThumbnailModelVisible = ref(false)\n\n const writingBoardToolVisible = ref(false)\n\n // 计算和更新幻灯片内容的尺寸(按比例自适应屏幕)\n const setSlideContentSize = () => {\n const winWidth = document.body.clientWidth\n const winHeight = document.body.clientHeight\n let width, height\n\n if (winHeight / winWidth === viewportRatio.value) {\n width = winWidth\n height = winHeight\n }\n else if (winHeight / winWidth > viewportRatio.value) {\n width = winWidth\n height = winWidth * viewportRatio.value\n }\n else {\n width = winHeight / viewportRatio.value\n height = winHeight\n }\n slideWidth.value = width\n slideHeight.value = height\n }\n\n // 窗口尺寸变化监听:窗口发生变化时更新幻灯片的大小\n // 如果退出了全屏,需要返回到编辑模式\n const { exitScreening } = useScreening()\n\n const windowResizeListener = () => {\n setSlideContentSize()\n if (!isFullscreen()) exitScreening()\n }\n\n onMounted(() => {\n setSlideContentSize()\n window.addEventListener('resize', windowResizeListener)\n })\n onUnmounted(() => {\n window.removeEventListener('resize', windowResizeListener)\n })\n\n // 当前页的元素动画列表和当前执行到的位置\n const animations = computed(() => currentSlide.value.animations || [])\n const animationIndex = ref(0)\n\n // 执行元素的入场动画\n const runAnimation = () => {\n const prefix = 'animate__'\n const animation = animations.value[animationIndex.value]\n animationIndex.value += 1\n\n const elRef = document.querySelector(`#screen-element-${animation.elId} [class^=base-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animation.type}`\n document.documentElement.style.setProperty('--animate-duration', `${animation.duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 关闭自动播放\n const autoPlayTimer = ref(0)\n const closeAutoPlay = () => {\n if (autoPlayTimer.value) {\n clearInterval(autoPlayTimer.value)\n autoPlayTimer.value = 0\n }\n }\n onUnmounted(closeAutoPlay)\n\n const throttleMassage = throttle(function(msg) {\n message.success(msg)\n }, 1000, { leading: true, trailing: false })\n\n // 向上/向下播放\n // 遇到元素动画时,优先执行动画播放,无动画则执行翻页\n // 向上播放遇到动画时,仅撤销到动画执行前的状态,不需要反向播放动画\n const execPrev = () => {\n if (animations.value.length && animationIndex.value > 0) {\n animationIndex.value -= 1\n }\n else if (slideIndex.value > 0) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1)\n const lastIndex = animations.value ? animations.value.length : 0\n animationIndex.value = lastIndex\n }\n else {\n throttleMassage('已经是第一页了')\n }\n }\n const execNext = () => {\n if (animations.value.length && animationIndex.value < animations.value.length) {\n runAnimation()\n }\n else if (slideIndex.value < slides.value.length - 1) {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1)\n animationIndex.value = 0\n }\n else {\n throttleMassage('已经是最后一页了')\n closeAutoPlay()\n }\n }\n\n // 自动播放\n const autoPlay = () => {\n closeAutoPlay()\n message.success('开始自动放映')\n autoPlayTimer.value = setInterval(execNext, 2500)\n }\n\n // 鼠标滚动翻页\n const mousewheelListener = throttle(function(e: WheelEvent) {\n if (e.deltaY < 0) execPrev()\n else if (e.deltaY > 0) execNext()\n }, 500, { leading: true, trailing: false })\n\n // 触摸屏上下滑动翻页\n const touchInfo = ref<{ x: number; y: number; } | null>(null)\n\n const touchStartListener = (e: TouchEvent) => {\n touchInfo.value = {\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n }\n }\n const touchEndListener = (e: TouchEvent) => {\n if (!touchInfo.value) return\n\n const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].pageX)\n const offsetY = e.changedTouches[0].pageY - touchInfo.value.y\n\n if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) {\n touchInfo.value = null\n \n if (offsetY > 0) execPrev()\n else execNext()\n }\n }\n\n // 快捷键翻页\n const keydownListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.UP || key === KEYS.LEFT) execPrev()\n else if (\n key === KEYS.DOWN || \n key === KEYS.RIGHT ||\n key === KEYS.SPACE || \n key === KEYS.ENTER\n ) execNext()\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n })\n\n // 切换到上一张/上一张幻灯片(无视元素的入场动画)\n const turnPrevSlide = () => {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1)\n animationIndex.value = 0\n }\n const turnNextSlide = () => {\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1)\n animationIndex.value = 0\n }\n\n // 切换幻灯片到指定的页面\n const turnSlideToIndex = (index: number) => {\n slideThumbnailModelVisible.value = false\n store.commit(MutationTypes.UPDATE_SLIDE_INDEX, index)\n animationIndex.value = 0\n }\n\n const contextmenus = (): ContextmenuItem[] => {\n return [\n {\n text: '上一页',\n subText: '↑ ←',\n disable: slideIndex.value <= 0,\n handler: () => turnPrevSlide(),\n },\n {\n text: '下一页',\n subText: '↓ →',\n disable: slideIndex.value >= slides.value.length - 1,\n handler: () => turnNextSlide(),\n },\n {\n text: '第一页',\n disable: slideIndex.value === 0,\n handler: () => turnSlideToIndex(0),\n },\n {\n text: '最后一页',\n disable: slideIndex.value === slides.value.length - 1,\n handler: () => turnSlideToIndex(slides.value.length - 1),\n },\n { divider: true },\n {\n text: '显示页码',\n subText: showPageNumber.value ? '√' : '',\n handler: () => showPageNumber.value = !showPageNumber.value,\n },\n {\n text: '查看所有幻灯片',\n handler: () => slideThumbnailModelVisible.value = true,\n },\n {\n text: '画笔',\n handler: () => writingBoardToolVisible.value = true,\n },\n { divider: true },\n {\n text: autoPlayTimer.value ? '取消自动放映' : '自动放映',\n handler: autoPlayTimer.value ? closeAutoPlay : autoPlay,\n },\n {\n text: '结束放映',\n subText: 'ESC',\n handler: exitScreening,\n },\n ]\n }\n \n provide('slideScale', scale)\n\n return {\n slides,\n slideIndex,\n currentSlide,\n slideWidth,\n slideHeight,\n scale,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n animationIndex,\n contextmenus,\n execPrev,\n execNext,\n slideThumbnailModelVisible,\n turnSlideToIndex,\n writingBoardToolVisible,\n showPageNumber,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=42d1fb1f&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=42d1fb1f&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-42d1fb1f\"\n\nexport default script","\nimport { computed, defineComponent, onMounted } from 'vue'\nimport { MutationTypes, ActionTypes, useStore } from '@/store'\n\nimport Editor from './views/Editor/index.vue'\nimport Screen from './views/Screen/index.vue'\n\nexport default defineComponent({\n name: 'app',\n components: {\n Editor,\n Screen,\n },\n setup() {\n const store = useStore()\n const screening = computed(() => store.state.screening)\n\n if (process.env.NODE_ENV === 'production') {\n window.onbeforeunload = () => false\n }\n\n onMounted(() => {\n store.commit(MutationTypes.SET_AVAILABLE_FONTS)\n store.dispatch(ActionTypes.INIT_SNAPSHOT_DATABASE)\n })\n\n return {\n screening,\n }\n },\n})\n","import { render } from \"./App.vue?vue&type=template&id=0af9d1a8\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=0af9d1a8&lang=scss\"\nscript.render = render\n\nexport default script","// https://iconpark.bytedance.com/official\n\nimport { App } from 'vue'\nimport {\n PlayOne,\n Lock,\n Unlock,\n Ppt,\n Format,\n Picture,\n FullScreen,\n List,\n OrderedList,\n Helpcenter,\n FlipVertically,\n FlipHorizontally,\n FontSize,\n Code,\n TextBold,\n TextItalic,\n TextUnderline,\n Strikethrough,\n Edit,\n Quote,\n BackgroundColor,\n Group,\n Ungroup,\n Back,\n Next,\n Fullwidth,\n AlignTop,\n AlignLeft,\n AlignRight,\n AlignBottom,\n AlignVertically,\n AlignHorizontally,\n BringToFront,\n SendToBack,\n AlignTextLeft,\n AlignTextRight,\n AlignTextCenter,\n RowHeight,\n Write,\n InsertTable,\n AddText,\n Fill,\n Tailoring,\n Effects,\n ColorFilter,\n Down,\n Plus,\n Minus,\n Connection,\n BringToFrontOne,\n SentToBack,\n Github,\n ChartProportion,\n ChartHistogram,\n ChartHistogramOne,\n ChartLine,\n ChartLineArea,\n ChartScatter,\n ChartPie,\n ChartRing,\n Text,\n Rotate,\n LeftTwo,\n RightTwo,\n Platte,\n UpOne,\n DownOne,\n Close,\n CloseSmall,\n Undo,\n Transform,\n Click,\n Theme,\n ArrowCircleLeft,\n GraphicDesign,\n Logout,\n Erase,\n Clear,\n FolderClose,\n AlignTextTopOne,\n AlignTextBottomOne,\n AlignTextMiddleOne,\n} from '@icon-park/vue-next'\n\nexport default {\n install(app: App) {\n // 插入元素\n app.component('IconFontSize', FontSize)\n app.component('IconPicture', Picture)\n app.component('IconGraphicDesign', GraphicDesign)\n app.component('IconConnection', Connection)\n app.component('IconChartProportion', ChartProportion)\n app.component('IconInsertTable', InsertTable)\n\n // 锁定与解锁\n app.component('IconLock', Lock)\n app.component('IconUnlock', Unlock)\n\n // 全屏\n app.component('IconFullScreen', FullScreen)\n\n // 撤销重做\n app.component('IconBack', Back)\n app.component('IconNext', Next) \n \n // 对齐\n app.component('IconAlignTop', AlignTop)\n app.component('IconAlignLeft', AlignLeft)\n app.component('IconAlignRight', AlignRight)\n app.component('IconAlignBottom', AlignBottom)\n app.component('IconAlignVertically', AlignVertically)\n app.component('IconAlignHorizontally', AlignHorizontally)\n\n // 层级\n app.component('IconBringToFront', BringToFront)\n app.component('IconSentToBack', SentToBack)\n app.component('IconBringToFrontOne', BringToFrontOne)\n app.component('IconSendToBack', SendToBack)\n\n // 组合\n app.component('IconGroup', Group)\n app.component('IconUngroup', Ungroup)\n\n // 通用元素编辑\n app.component('IconFill', Fill)\n app.component('IconBackgroundColor', BackgroundColor)\n app.component('IconPlatte', Platte)\n \n // 图片编辑\n app.component('IconTailoring', Tailoring)\n app.component('IconColorFilter', ColorFilter)\n app.component('IconFlipVertically', FlipVertically)\n app.component('IconFlipHorizontally', FlipHorizontally)\n\n // 文字编辑\n app.component('IconText', Text)\n app.component('IconAddText', AddText)\n app.component('IconAlignTextLeft', AlignTextLeft)\n app.component('IconAlignTextRight', AlignTextRight)\n app.component('IconAlignTextCenter', AlignTextCenter)\n app.component('IconRowHeight', RowHeight)\n app.component('IconFullwidth', Fullwidth)\n app.component('IconCode', Code)\n app.component('IconTextBold', TextBold)\n app.component('IconTextItalic', TextItalic)\n app.component('IconTextUnderline', TextUnderline)\n app.component('IconStrikethrough', Strikethrough)\n app.component('IconQuote', Quote)\n app.component('IconList', List)\n app.component('IconOrderedList', OrderedList)\n app.component('IconUpOne', UpOne)\n app.component('IconDownOne', DownOne)\n app.component('IconFormat', Format)\n app.component('IconAlignTextTopOne', AlignTextTopOne)\n app.component('IconAlignTextBottomOne', AlignTextBottomOne)\n app.component('IconAlignTextMiddleOne', AlignTextMiddleOne)\n\n // 箭头与符号\n app.component('IconDown', Down)\n app.component('IconLeftTwo', LeftTwo)\n app.component('IconRightTwo', RightTwo)\n app.component('IconPlus', Plus)\n app.component('IconMinus', Minus)\n app.component('IconClose', Close)\n app.component('IconCloseSmall', CloseSmall)\n \n // 图表\n app.component('IconChartHistogram', ChartHistogram)\n app.component('IconChartHistogramOne', ChartHistogramOne)\n app.component('IconChartLine', ChartLine)\n app.component('IconChartLineArea', ChartLineArea)\n app.component('IconChartScatter', ChartScatter)\n app.component('IconChartPie', ChartPie)\n app.component('IconChartRing', ChartRing)\n\n // 其他\n app.component('IconPlayOne', PlayOne)\n app.component('IconPpt', Ppt)\n app.component('IconHelpcenter', Helpcenter)\n app.component('IconGithub', Github)\n app.component('IconWrite', Write)\n app.component('IconErase', Erase)\n app.component('IconEffects', Effects)\n app.component('IconRotate', Rotate)\n app.component('IconEdit', Edit)\n app.component('IconUndo', Undo)\n app.component('IconTransform', Transform)\n app.component('IconClick', Click)\n app.component('IconTheme', Theme)\n app.component('IconArrowCircleLeft', ArrowCircleLeft)\n app.component('IconLogout', Logout)\n app.component('IconClear', Clear)\n app.component('IconFolderClose', FolderClose)\n }\n}","\n\n\n\n","\nimport { defineComponent, ref } from 'vue'\n\nexport default defineComponent({\n name: 'file-input',\n emits: ['change'],\n props: {\n accept: {\n type: String,\n default: 'image/*',\n },\n },\n setup(props, { emit }) {\n const inputRef = ref()\n\n const handleClick = () => {\n if (!inputRef.value) return\n inputRef.value.value = ''\n inputRef.value.click()\n }\n const handleChange = (e: InputEvent) => {\n const files = (e.target as HTMLInputElement).files\n if (files) emit('change', files)\n }\n\n return {\n handleClick,\n handleChange,\n inputRef,\n }\n },\n})\n","import { render } from \"./FileInput.vue?vue&type=template&id=d6089858&scoped=true\"\nimport script from \"./FileInput.vue?vue&type=script&lang=ts\"\nexport * from \"./FileInput.vue?vue&type=script&lang=ts\"\n\nimport \"./FileInput.vue?vue&type=style&index=0&id=d6089858&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-d6089858\"\n\nexport default script","\n\n","\nexport default {\n name: 'svg-wrapper',\n}\n","import { render } from \"./SvgWrapper.vue?vue&type=template&id=07215504\"\nimport script from \"./SvgWrapper.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgWrapper.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\r\n\r\n\r\n\r\n","\r\nexport default {\r\n name: 'checkbox-button',\r\n props: {\r\n checked: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n}\r\n","import { render } from \"./CheckboxButton.vue?vue&type=template&id=7cae2b90&scoped=true\"\nimport script from \"./CheckboxButton.vue?vue&type=script&lang=ts\"\nexport * from \"./CheckboxButton.vue?vue&type=script&lang=ts\"\n\nimport \"./CheckboxButton.vue?vue&type=style&index=0&id=7cae2b90&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7cae2b90\"\n\nexport default script","\r\n\r\n\r\n\r\n","\r\nexport default {\r\n name: 'checkbox-button-group',\r\n}\r\n","import { render } from \"./CheckboxButtonGroup.vue?vue&type=template&id=7dafd0a9&scoped=true\"\nimport script from \"./CheckboxButtonGroup.vue?vue&type=script&lang=ts\"\nexport * from \"./CheckboxButtonGroup.vue?vue&type=script&lang=ts\"\n\nimport \"./CheckboxButtonGroup.vue?vue&type=style&index=0&id=7dafd0a9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7dafd0a9\"\n\nexport default script","\n\n\n\n","\n\n\n\n","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\n\nconst checkboardCache = {}\n\nconst renderCheckboard = (white: string, grey: string, size: number) => {\n const canvas = document.createElement('canvas')\n canvas.width = canvas.height = size * 2\n const ctx = canvas.getContext('2d')\n \n if (!ctx) return null\n\n ctx.fillStyle = white\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.fillStyle = grey\n ctx.fillRect(0, 0, size, size)\n ctx.translate(size, size)\n ctx.fillRect(0, 0, size, size)\n return canvas.toDataURL()\n}\n\nconst getCheckboard = (white: string, grey: string, size: number) => {\n const key = white + ',' + grey + ',' + size\n if (checkboardCache[key]) return checkboardCache[key]\n \n const checkboard = renderCheckboard(white, grey, size)\n checkboardCache[key] = checkboard\n return checkboard\n}\n\nexport default defineComponent({\n name: 'checkboard',\n emits: ['colorChange'],\n props: {\n size: {\n type: Number,\n default: 8,\n },\n white: {\n type: String,\n default: '#fff',\n },\n grey: {\n type: String,\n default: '#e6e6e6',\n },\n },\n setup(props) {\n const bgStyle = computed(() => {\n const checkboard = getCheckboard(props.white, props.grey, props.size)\n return { backgroundImage: `url(${checkboard})` }\n })\n\n return {\n bgStyle,\n }\n },\n})\n","import { render } from \"./Checkboard.vue?vue&type=template&id=0a544b87&scoped=true\"\nimport script from \"./Checkboard.vue?vue&type=script&lang=ts\"\nexport * from \"./Checkboard.vue?vue&type=script&lang=ts\"\n\nimport \"./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0a544b87\"\n\nexport default script","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\n\nimport Checkboard from './Checkboard.vue'\nimport { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'alpha',\n components: {\n Checkboard,\n },\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => props.value)\n \n const gradientColor = computed(() => {\n const rgbaStr = [color.value.r, color.value.g, color.value.b].join(',')\n return `linear-gradient(to right, rgba(${rgbaStr}, 0) 0%, rgba(${rgbaStr}, 1) 100%)`\n })\n\n const alphaRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!alphaRef.value) return\n const containerWidth = alphaRef.value.clientWidth\n const xOffset = alphaRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let a\n\n if (left < 0) a = 0\n else if (left > containerWidth) a = 1\n else a = Math.round(left * 100 / containerWidth) / 100\n\n if (color.value.a !== a) {\n emit('colorChange', {\n r: color.value.r,\n g: color.value.g,\n b: color.value.b,\n a: a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n alphaRef,\n gradientColor,\n handleMouseDown,\n color,\n }\n },\n})\n","import { render } from \"./Alpha.vue?vue&type=template&id=6f2cb744&scoped=true\"\nimport script from \"./Alpha.vue?vue&type=script&lang=ts\"\nexport * from \"./Alpha.vue?vue&type=script&lang=ts\"\n\nimport \"./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6f2cb744\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, PropType, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'hue',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const oldHue = ref(0)\n const pullDirection = ref('')\n \n const color = computed(() => {\n const hsla = tinycolor(props.value).toHsl()\n if (props.hue !== -1) hsla.h = props.hue\n return hsla\n })\n\n const pointerLeft = computed(() => {\n if (color.value.h === 0 && pullDirection.value === 'right') return '100%'\n return color.value.h * 100 / 360 + '%'\n })\n\n watch(() => props.value, () => {\n const hsla = tinycolor(props.value).toHsl()\n const h = hsla.s === 0 ? props.hue : hsla.h\n if (h !== 0 && h - oldHue.value > 0) pullDirection.value = 'right'\n if (h !== 0 && h - oldHue.value < 0) pullDirection.value = 'left'\n oldHue.value = h\n })\n\n const hueRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!hueRef.value) return\n\n const containerWidth = hueRef.value.clientWidth\n const xOffset = hueRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let h, percent\n \n if (left < 0) h = 0\n else if (left > containerWidth) h = 360\n else {\n percent = left * 100 / containerWidth\n h = 360 * percent / 100\n }\n if (props.hue === -1 || color.value.h !== h) {\n emit('colorChange', {\n h,\n l: color.value.l,\n s: color.value.s,\n a: color.value.a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n hueRef,\n handleMouseDown,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Hue.vue?vue&type=template&id=1766620e&scoped=true\"\nimport script from \"./Hue.vue?vue&type=script&lang=ts\"\nexport * from \"./Hue.vue?vue&type=script&lang=ts\"\n\nimport \"./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1766620e\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { throttle, clamp } from 'lodash'\n\nexport default defineComponent({\n name: 'saturation',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => {\n const hsva = tinycolor(props.value).toHsv()\n if (props.hue !== -1) hsva.h = props.hue\n return hsva\n })\n\n const bgColor = computed(() => `hsl(${color.value.h}, 100%, 50%)`)\n const pointerTop = computed(() => (-(color.value.v * 100) + 1) + 100 + '%')\n const pointerLeft = computed(() => color.value.s * 100 + '%')\n\n const emitChangeEvent = throttle(function(param) {\n emit('colorChange', param)\n }, 20, { leading: true, trailing: false })\n\n const saturationRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!saturationRef.value) return\n \n const containerWidth = saturationRef.value.clientWidth\n const containerHeight = saturationRef.value.clientHeight\n const xOffset = saturationRef.value.getBoundingClientRect().left + window.pageXOffset\n const yOffset = saturationRef.value.getBoundingClientRect().top + window.pageYOffset\n const left = clamp(e.pageX - xOffset, 0, containerWidth)\n const top = clamp(e.pageY - yOffset, 0, containerHeight)\n const saturation = left / containerWidth\n const bright = clamp(-(top / containerHeight) + 1, 0, 1)\n\n emitChangeEvent({\n h: color.value.h,\n s: saturation,\n v: bright,\n a: color.value.a,\n })\n }\n\n \n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n saturationRef,\n bgColor,\n handleMouseDown,\n pointerTop,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Saturation.vue?vue&type=template&id=8982eb4a&scoped=true\"\nimport script from \"./Saturation.vue?vue&type=script&lang=ts\"\nexport * from \"./Saturation.vue?vue&type=script&lang=ts\"\n\nimport \"./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-8982eb4a\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'editable-input',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const val = computed(() => {\n let _hex = ''\n if (props.value.a < 1) _hex = tinycolor(props.value).toHex8String().toUpperCase()\n else _hex = tinycolor(props.value).toHexString().toUpperCase()\n return _hex.replace('#', '')\n })\n\n const handleInput = (e: InputEvent) => {\n const value = (e.target as HTMLInputElement).value\n if (value.length >= 6) emit('colorChange', tinycolor(value).toRgb())\n }\n\n return {\n val,\n handleInput,\n }\n },\n})\n","import { render } from \"./EditableInput.vue?vue&type=template&id=00ea8dfc&scoped=true\"\nimport script from \"./EditableInput.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableInput.vue?vue&type=script&lang=ts\"\n\nimport \"./EditableInput.vue?vue&type=style&index=0&id=00ea8dfc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-00ea8dfc\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { debounce } from 'lodash'\n\nimport Alpha from './Alpha.vue'\nimport Checkboard from './Checkboard.vue'\nimport Hue from './Hue.vue'\nimport Saturation from './Saturation.vue'\nimport EditableInput from './EditableInput.vue'\n\nconst RECENT_COLORS = 'RECENT_COLORS'\n\nconst presetColorConfig = [\n ['#7f7f7f', '#f2f2f2'],\n ['#0d0d0d', '#808080'],\n ['#1c1a10', '#ddd8c3'],\n ['#0e243d', '#c6d9f0'],\n ['#233f5e', '#dae5f0'],\n ['#632623', '#f2dbdb'],\n ['#4d602c', '#eaf1de'],\n ['#3f3150', '#e6e0ec'],\n ['#1e5867', '#d9eef3'],\n ['#99490f', '#fee9da'],\n]\n\nconst gradient = (startColor: string, endColor: string, step: number) => {\n const _startColor = tinycolor(startColor).toRgb()\n const _endColor = tinycolor(endColor).toRgb()\n\n const rStep = (_endColor.r - _startColor.r) / step\n const gStep = (_endColor.g - _startColor.g) / step\n const bStep = (_endColor.b - _startColor.b) / step\n const gradientColorArr = []\n\n for (let i = 0; i < step; i++) {\n const gradientColor = tinycolor({\n r: _startColor.r + rStep * i,\n g: _startColor.g + gStep * i,\n b: _startColor.b + bStep * i,\n }).toRgbString()\n gradientColorArr.push(gradientColor)\n }\n return gradientColorArr\n}\n\nconst getPresetColors = () => {\n const presetColors = []\n for (const color of presetColorConfig) {\n presetColors.push(gradient(color[1], color[0], 5))\n }\n return presetColors\n}\n\nexport default defineComponent({\n name: 'color-picker',\n components: {\n Alpha,\n Checkboard,\n Hue,\n Saturation,\n EditableInput,\n },\n emits: ['update:modelValue'],\n props: {\n modelValue: {\n type: String,\n default: '#e86b99',\n },\n },\n setup(props, { emit }) {\n const hue = ref(-1)\n const recentColors = ref([])\n\n const color = computed({\n get() {\n return tinycolor(props.modelValue).toRgb()\n },\n set(rgba: ColorFormats.RGBA) {\n const rgbaString = `rgba(${[rgba.r, rgba.g, rgba.b, rgba.a].join(',')})`\n emit('update:modelValue', rgbaString)\n },\n })\n\n const themeColors = ['#000000', '#ffffff', '#eeece1', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c']\n const standardColors = ['#c21401', '#ff1e02', '#ffc12a', '#ffff3a', '#90cf5b', '#00af57', '#00afee', '#0071be', '#00215f', '#72349d']\n const presetColors = getPresetColors()\n\n const currentColor = computed(() => {\n return `rgba(${[color.value.r, color.value.g, color.value.b, color.value.a].join(',')})`\n })\n\n const selectPresetColor = (colorString: string) => {\n hue.value = tinycolor(colorString).toHsl().h\n emit('update:modelValue', colorString)\n }\n\n // 每次选择非预设颜色时,需要将该颜色加入到最近使用列表中\n const updateRecentColorsCache = debounce(function() {\n const _color = tinycolor(color.value).toRgbString()\n if (!recentColors.value.includes(_color)) {\n recentColors.value = [_color, ...recentColors.value]\n\n const maxLength = 10\n if (recentColors.value.length > maxLength) {\n recentColors.value = recentColors.value.slice(0, maxLength)\n }\n }\n }, 300, { trailing: true })\n\n onMounted(() => {\n const recentColorsCache = localStorage.getItem(RECENT_COLORS)\n if (recentColorsCache) recentColors.value = JSON.parse(recentColorsCache)\n })\n\n watch(recentColors, () => {\n const recentColorsCache = JSON.stringify(recentColors.value)\n localStorage.setItem(RECENT_COLORS, recentColorsCache)\n })\n\n const changeColor = (value: ColorFormats.RGBA | ColorFormats.HSLA | ColorFormats.HSVA) => {\n if ('h' in value) {\n hue.value = value.h\n color.value = tinycolor(value).toRgb()\n }\n else {\n hue.value = tinycolor(value).toHsl().h\n color.value = value\n }\n\n updateRecentColorsCache()\n }\n\n return {\n themeColors,\n standardColors,\n presetColors,\n color,\n hue,\n currentColor,\n changeColor,\n selectPresetColor,\n recentColors,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=210672ee&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=210672ee&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-210672ee\"\n\nexport default script","\n\n\n\n","\nexport default {\n name: 'fullscreen-spin',\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n tip: {\n type: String,\n default: '',\n },\n },\n}\n","import { render } from \"./FullscreenSpin.vue?vue&type=template&id=6275c730&scoped=true\"\nimport script from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\nexport * from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\n\nimport \"./FullscreenSpin.vue?vue&type=style&index=0&id=6275c730&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6275c730\"\n\nexport default script","import { App } from 'vue'\n\nimport FileInput from '@/components/FileInput.vue'\nimport SvgWrapper from '@/components/SvgWrapper.vue'\nimport CheckboxButton from '@/components/CheckboxButton.vue'\nimport CheckboxButtonGroup from '@/components/CheckboxButtonGroup.vue'\nimport ColorPicker from '@/components/ColorPicker/index.vue'\nimport FullscreenSpin from '@/components/FullscreenSpin.vue'\n\nexport default {\n install(app: App) {\n app.component('FileInput', FileInput)\n app.component('SvgWrapper', SvgWrapper)\n app.component('CheckboxButton', CheckboxButton)\n app.component('CheckboxButtonGroup', CheckboxButtonGroup)\n app.component('ColorPicker', ColorPicker)\n app.component('FullscreenSpin', FullscreenSpin)\n }\n}\n","\n\n\n\n","\n\n\n\n","\nimport { PropType, defineComponent } from 'vue'\nimport { ContextmenuItem } from './types'\n\nexport default defineComponent({\n name: 'menu-content',\n props: {\n menus: {\n type: Array as PropType,\n required: true,\n },\n handleClickMenuItem: {\n type: Function,\n required: true,\n },\n },\n})\n","import { render } from \"./MenuContent.vue?vue&type=template&id=eb1555e8&scoped=true\"\nimport script from \"./MenuContent.vue?vue&type=script&lang=ts\"\nexport * from \"./MenuContent.vue?vue&type=script&lang=ts\"\n\nimport \"./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-eb1555e8\"\n\nexport default script","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { ContextmenuItem, Axis } from './types'\n\nimport MenuContent from './MenuContent.vue'\n\nexport default defineComponent({\n name: 'contextmenu',\n components: {\n MenuContent,\n },\n props: {\n axis: {\n type: Object as PropType,\n required: true,\n },\n el: {\n type: Object as PropType,\n required: true,\n },\n menus: {\n type: Array as PropType,\n required: true,\n },\n removeContextmenu: {\n type: Function,\n required: true,\n },\n },\n setup(props) {\n const style = computed(() => {\n const MENU_WIDTH = 170\n const MENU_HEIGHT = 30\n const DIVIDER_HEIGHT = 11\n const PADDING = 5\n\n const { x, y } = props.axis\n const menuCount = props.menus.filter(menu => !(menu.divider || menu.hide)).length\n const dividerCount = props.menus.filter(menu => menu.divider).length\n\n const menuWidth = MENU_WIDTH\n const menuHeight = menuCount * MENU_HEIGHT + dividerCount * DIVIDER_HEIGHT + PADDING * 2\n\n const screenWidth = document.body.clientWidth\n const screenHeight = document.body.clientHeight\n\n return {\n left: screenWidth <= x + menuWidth ? x - menuWidth : x,\n top: screenHeight <= y + menuHeight ? y - menuHeight : y,\n }\n })\n\n const handleClickMenuItem = (item: ContextmenuItem) => {\n if (item.disable) return\n if (item.children && !item.handler) return\n if (item.handler) item.handler(props.el)\n props.removeContextmenu()\n }\n\n return {\n style,\n handleClickMenuItem,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=83da70aa\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=83da70aa&lang=scss\"\nscript.render = render\n\nexport default script","import { Directive, createVNode, render, DirectiveBinding } from 'vue'\nimport ContextmenuComponent from '@/components/Contextmenu/index.vue'\n\nconst CTX_CONTEXTMENU_HANDLER = 'CTX_CONTEXTMENU_HANDLER'\n\nconst contextmenuListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n event.stopPropagation()\n event.preventDefault()\n\n const menus = binding.value(el)\n if (!menus) return\n\n let container: HTMLDivElement | null = null\n\n // 移除右键菜单并取消相关的事件监听\n const removeContextmenu = () => {\n if (container) {\n document.body.removeChild(container)\n container = null\n }\n el.classList.remove('contextmenu-active')\n document.body.removeEventListener('scroll', removeContextmenu) \n window.removeEventListener('resize', removeContextmenu)\n }\n\n // 创建自定义菜单\n const options = {\n axis: { x: event.x, y: event.y },\n el,\n menus,\n removeContextmenu,\n }\n container = document.createElement('div')\n const vm = createVNode(ContextmenuComponent, options, null)\n render(vm, container)\n document.body.appendChild(container)\n\n // 为目标节点添加菜单激活状态的className\n el.classList.add('contextmenu-active')\n\n // 页面变化时移除菜单\n document.body.addEventListener('scroll', removeContextmenu)\n window.addEventListener('resize', removeContextmenu)\n}\n\nconst ContextmenuDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CONTEXTMENU_HANDLER] = (event: MouseEvent) => contextmenuListener(el, event, binding)\n el.addEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n },\n\n unmounted(el: HTMLElement) {\n if (el && el[CTX_CONTEXTMENU_HANDLER]) {\n el.removeEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n delete el[CTX_CONTEXTMENU_HANDLER]\n }\n },\n}\n\nexport default ContextmenuDirective","import { Directive, DirectiveBinding } from 'vue'\n\nconst CTX_CLICK_OUTSIDE_HANDLER = 'CTX_CLICK_OUTSIDE_HANDLER'\n\nconst clickListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n const handler = binding.value\n\n const path = event.composedPath()\n const isClickOutside = path ? path.indexOf(el) < 0 : !el.contains(event.target as HTMLElement)\n\n if (!isClickOutside) return\n handler(event)\n}\n\nconst ClickOutsideDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CLICK_OUTSIDE_HANDLER] = (event: MouseEvent) => clickListener(el, event, binding)\n setTimeout(() => {\n document.addEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n }, 0)\n },\n \n unmounted(el: HTMLElement) {\n if (el[CTX_CLICK_OUTSIDE_HANDLER]) {\n document.removeEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n delete el[CTX_CLICK_OUTSIDE_HANDLER]\n }\n },\n}\n\nexport default ClickOutsideDirective","import { App } from 'vue'\n\nimport Contextmenu from './contextmenu'\nimport ClickOutside from './clickOutside'\n\nexport default {\n install(app: App) {\n app.directive('contextmenu', Contextmenu)\n app.directive('click-outside', ClickOutside)\n }\n}\n","import { createApp } from 'vue'\nimport App from './App.vue'\nimport { store, key } from './store'\n\nimport '@icon-park/vue-next/styles/index.css'\nimport 'prosemirror-view/style/prosemirror.css'\nimport 'animate.css'\n\nimport '@/assets/styles/prosemirror.scss'\nimport '@/assets/styles/global.scss'\nimport '@/assets/styles/antd.scss'\nimport '@/assets/styles/font.scss'\n\nimport Icon from '@/plugins/icon'\nimport Component from '@/plugins/component'\nimport Directive from '@/plugins/directive'\n\nimport {\n InputNumber,\n Divider,\n Button,\n Tooltip,\n Popover,\n Slider,\n Select,\n Switch,\n Radio,\n Input,\n Modal,\n Dropdown,\n Menu,\n Checkbox,\n Drawer,\n Spin,\n} from 'ant-design-vue'\n\nconst app = createApp(App)\n\napp.component('InputNumber', InputNumber)\napp.component('Divider', Divider)\napp.component('Button', Button)\napp.component('ButtonGroup', Button.Group)\napp.component('Tooltip', Tooltip)\napp.component('Popover', Popover)\napp.component('Slider', Slider)\napp.component('Select', Select)\napp.component('SelectOption', Select.Option)\napp.component('SelectOptGroup', Select.OptGroup)\napp.component('Switch', Switch)\napp.component('Radio', Radio)\napp.component('RadioGroup', Radio.Group)\napp.component('RadioButton', Radio.Button)\napp.component('Input', Input)\napp.component('InputGroup', Input.Group)\napp.component('Modal', Modal)\napp.component('Dropdown', Dropdown)\napp.component('Menu', Menu)\napp.component('MenuItem', Menu.Item)\napp.component('Checkbox', Checkbox)\napp.component('Drawer', Drawer)\napp.component('Spin', Spin)\n\napp.use(Icon)\napp.use(Component)\napp.use(Directive)\n\napp.use(store, key)\napp.mount('#app')\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementOutline.vue?vue&type=style&index=0&id=2ddaa919&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ImageElementOperate.vue?vue&type=style&index=0&id=7dc35c8e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=13ca7328&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./MultiSelectOperate.vue?vue&type=style&index=0&id=4def6455&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ShapePool.vue?vue&type=style&index=0&id=612b80ef&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LinkHandler.vue?vue&type=style&index=0&id=9d9e1336&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Chart.vue?vue&type=style&index=1&id=ee28fd7e&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ElementCreateSelection.vue?vue&type=style&index=0&id=04472140&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./HotkeyDoc.vue?vue&type=style&index=0&id=47d0351b&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ChartPool.vue?vue&type=style&index=0&id=ab6a141a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./FileInput.vue?vue&type=style&index=0&id=d6089858&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./GridLines.vue?vue&type=style&index=0&id=1d945f13&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ViewportBackground.vue?vue&type=style&index=0&id=a9ca1b50&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=59ae6536&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BorderLine.vue?vue&type=style&index=0&id=630e246b&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file