From fd63798a659d63a2d1affb5061c41b7181352930 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Fri, 4 Jun 2021 09:45:01 +0000 Subject: [PATCH] deploy to github pages f713957048c7e6aa02699d7b42a3f49c8beeae9c --- css/{app.2706b201.css => app.639cfa61.css} | 2 +- index.html | 2 +- js/app.644735d7.js | 2 -- js/app.644735d7.js.map | 1 - js/app.d87f5fba.js | 2 ++ js/app.d87f5fba.js.map | 1 + 6 files changed, 5 insertions(+), 5 deletions(-) rename css/{app.2706b201.css => app.639cfa61.css} (97%) delete mode 100644 js/app.644735d7.js delete mode 100644 js/app.644735d7.js.map create mode 100644 js/app.d87f5fba.js create mode 100644 js/app.d87f5fba.js.map diff --git a/css/app.2706b201.css b/css/app.639cfa61.css similarity index 97% rename from css/app.2706b201.css rename to css/app.639cfa61.css index 30ba3295..c638b7d9 100644 --- a/css/app.2706b201.css +++ b/css/app.639cfa61.css @@ -1 +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}.export-dialog[data-v-a69a4592]{height:500px;display:flex;justify-content:center;position:relative}.preview[data-v-a69a4592]{width:460px;height:100%;overflow:auto;margin-right:20px;background-color:#2d2d30;color:#fff}.preview pre[data-v-a69a4592]{width:100%;height:100%}.handle[data-v-a69a4592]{flex:1}.handle .btn[data-v-a69a4592]{width:100%;margin-bottom:10px}.editor-header[data-v-ecea6ffc]{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-ecea6ffc],.menu-item[data-v-ecea6ffc],.right[data-v-ecea6ffc]{display:flex;justify-content:center;align-items:center}.menu-item[data-v-ecea6ffc]{height:100%;font-size:14px;padding:0 10px;transition:background-color .2s;cursor:pointer}.menu-item .text[data-v-ecea6ffc]{margin-left:4px}.left .menu-item[data-v-ecea6ffc]: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-1d9b5032]{width:100%;height:100%;position:relative}.image-clip-handler .bottom-img[data-v-1d9b5032]{top:0;left:0;width:100%;height:100%;opacity:.5}.image-clip-handler img[data-v-1d9b5032]{width:100%;height:100%}.image-clip-handler .top-image-content[data-v-1d9b5032]{position:absolute;overflow:hidden}.image-clip-handler .top-image-content img[data-v-1d9b5032]{position:absolute}.operate[data-v-1d9b5032]{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.clip-point[data-v-1d9b5032]{position:absolute;width:16px;height:16px;left:0;top:0;transform-origin:0 0;display:flex;justify-content:center;align-items:center}.clip-point svg[data-v-1d9b5032]{overflow:visible}.clip-point.t-l[data-v-1d9b5032]{left:0;top:0;cursor:nwse-resize}.clip-point.t-r[data-v-1d9b5032]{left:100%;top:0;transform:rotate(90deg);cursor:nesw-resize}.clip-point.b-l[data-v-1d9b5032]{left:0;top:100%;transform:rotate(-90deg);cursor:nesw-resize}.clip-point.b-r[data-v-1d9b5032]{left:100%;top:100%;transform:rotate(180deg);cursor:nwse-resize}.editable-element-image[data-v-1622838f]{position:absolute}.editable-element-image.lock .element-content[data-v-1622838f]{cursor:default}.rotate-wrapper[data-v-1622838f]{width:100%;height:100%}.element-content[data-v-1622838f]{width:100%;height:100%;position:relative;cursor:move}.element-content .image-content[data-v-1622838f]{width:100%;height:100%;overflow:hidden;position:relative}.element-content img[data-v-1622838f]{position:absolute}svg[data-v-2ddaa919]{overflow:visible;position:absolute;top:0;left:0}.editable-element-text[data-v-ad16610e]{position:absolute}.editable-element-text.lock .element-content[data-v-ad16610e]{cursor:default}.rotate-wrapper[data-v-ad16610e]{width:100%;height:100%}.element-content[data-v-ad16610e]{position:relative;padding:10px;line-height:1.5;word-break:break-word;cursor:move}.element-content .text[data-v-ad16610e]{position:relative;cursor:text}.editable-element-shape[data-v-6ed7d252]{position:absolute}.editable-element-shape.lock .element-content[data-v-6ed7d252]{cursor:default}.rotate-wrapper[data-v-6ed7d252]{width:100%;height:100%}.element-content[data-v-6ed7d252]{width:100%;height:100%;position:relative;cursor:move}.element-content svg[data-v-6ed7d252]{transform-origin:0 0;overflow:visible}.editable-element-shape[data-v-7d3d40d6]{position:absolute}.editable-element-shape.lock .line-path[data-v-7d3d40d6]{cursor:default}.element-content[data-v-7d3d40d6]{width:100%;height:100%;position:relative}.element-content svg[data-v-7d3d40d6]{transform-origin:0 0;overflow:visible}.line-path[data-v-7d3d40d6]{cursor:move}.chart-content[data-v-233b1dc8]{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-d2dd6e5c]{position:absolute}.editable-element-chart.lock .element-content[data-v-d2dd6e5c]{cursor:default}.element-content[data-v-d2dd6e5c]{width:100%;height:100%;overflow:hidden;cursor:move}.custom-textarea[data-v-0d17e957]{border:0;outline:0}.editable-table[data-v-70bdbb7e],table[data-v-70bdbb7e]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-70bdbb7e]{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-70bdbb7e]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-70bdbb7e]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-70bdbb7e]:last-child,table.theme.col-header tr .cell[data-v-70bdbb7e]:first-child,table.theme.row-footer tr:last-child .cell[data-v-70bdbb7e],table.theme.row-header tr:first-child .cell[data-v-70bdbb7e]{background-color:var(--themeColor)}table tr[data-v-70bdbb7e]{height:36px}table .cell[data-v-70bdbb7e]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle;font-size:14px;cursor:default}table .cell.selected[data-v-70bdbb7e]:after{content:"";width:100%;height:100%;position:absolute;top:0;left:0;background-color:hsla(0,0%,40%,.4)}table .cell-text[data-v-70bdbb7e]{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-70bdbb7e]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.drag-line[data-v-70bdbb7e]{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-70bdbb7e]:hover{opacity:1}.editable-element-table[data-v-1ab7e248]{position:absolute}.editable-element-table.lock .element-content[data-v-1ab7e248]{cursor:default}.element-content[data-v-1ab7e248]{width:100%;height:100%;position:relative;cursor:move}.table-mask[data-v-1ab7e248]{position:absolute;top:0;bottom:0;left:0;right:0;opacity:0;transition:opacity .2s}.table-mask .mask-tip[data-v-1ab7e248]{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-1ab7e248]: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-3cb2c22e]{width:100%;height:100%;position:absolute;top:0;left:0;bottom:0;right:0;overflow:visible;z-index:999;pointer-events:none}.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-3c5b7aac]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;cursor:crosshair}.selection[data-v-3c5b7aac]{position:absolute;opacity:.8}.selection[data-v-3c5b7aac]:not(.line){border:1px solid #d14424}.resize-handler[data-v-1c2a68d0]{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.left-top[data-v-1c2a68d0]{cursor:nwse-resize}.resize-handler.top[data-v-1c2a68d0]{cursor:ns-resize}.resize-handler.right-top[data-v-1c2a68d0]{cursor:nesw-resize}.resize-handler.left[data-v-1c2a68d0],.resize-handler.right[data-v-1c2a68d0]{cursor:ew-resize}.resize-handler.left-bottom[data-v-1c2a68d0]{cursor:nesw-resize}.resize-handler.bottom[data-v-1c2a68d0]{cursor:ns-resize}.resize-handler.right-bottom[data-v-1c2a68d0]{cursor:nwse-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-5b0628aa]{visibility:hidden}.operate[data-v-558a94fe]{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-558a94fe]{opacity:0}.animation-index[data-v-558a94fe]{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;margin-bottom:3px}.canvas[data-v-fb6f9726]{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-fb6f9726]{position:absolute;box-shadow:0 0 15px 0 rgba(0,0,0,.1)}.viewport[data-v-fb6f9726]{position:absolute;top:0;left:0;transform-origin:0 0}.shape-pool[data-v-5aabd717]{width:340px;max-height:540px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-5aabd717]{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-5aabd717]{display:flex;flex-wrap:wrap;margin-bottom:10px}.shape-item[data-v-5aabd717]{width:8%;margin-bottom:2.22222%;height:0;padding-bottom:8%;flex-shrink:0;position:relative;cursor:pointer}.shape-item[data-v-5aabd717]:not(:nth-child(10n)){margin-right:2.22222%}.shape-content[data-v-5aabd717]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center}.shape-content:hover .shape-path[data-v-5aabd717]{stroke:#d14424}.shape-content svg[data-v-5aabd717]:not(:root){overflow:visible}.line-pool[data-v-5087394c]{width:220px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-5087394c]{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-5087394c]{display:flex;flex-wrap:wrap;margin-bottom:10px}.line-item[data-v-5087394c]{width:19%;margin-bottom:1.25%;height:0;padding-bottom:19%;flex-shrink:0;position:relative;cursor:pointer}.line-item[data-v-5087394c]:not(:nth-child(5n)){margin-right:1.25%}.line-content[data-v-5087394c]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center;color:#999}.line-content[data-v-5087394c]:hover{color:#d14424}.line-content svg[data-v-5087394c]:not(:root){overflow:visible}.chart-pool[data-v-0028f4b9]{width:120px;margin-bottom:-5px;display:flex;flex-wrap:wrap}.chart-item[data-v-0028f4b9]{width:32%;margin-bottom:2%;height:0;padding-bottom:32%;flex-shrink:0;position:relative;cursor:pointer}.chart-item[data-v-0028f4b9]:not(:nth-child(3n)){margin-right:2%}.chart-content[data-v-0028f4b9]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center;color:#999}.chart-content[data-v-0028f4b9]:hover{color:#d14424}.table-generator[data-v-576c614c]{width:100%;margin-top:-12px}.title[data-v-576c614c]{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}.title .right[data-v-576c614c]{cursor:pointer}.title .right[data-v-576c614c]:hover{color:#d14424}table[data-v-576c614c]{border-collapse:separate}td[data-v-576c614c]{width:23px;height:23px;line-height:23px;border:2px solid #fff;background-color:#f7f7f7}.cell[data-v-576c614c]{width:100%;height:100%;border:1px solid #dcdcdc}.cell.active[data-v-576c614c]{background-color:rgba(209,68,36,.1);border-color:#d14424}.custom[data-v-576c614c]{width:230px}.custom .row[data-v-576c614c]{display:flex;align-items:center}.custom .row+.row[data-v-576c614c]{margin-top:10px}.btns[data-v-576c614c]{margin-top:10px;text-align:right}.btns .btn[data-v-576c614c]{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-6fef68fd]{position:absolute}.rotate-wrapper[data-v-6fef68fd]{width:100%;height:100%}.element-content[data-v-6fef68fd]{width:100%;height:100%;position:relative}.element-content svg[data-v-6fef68fd]{transform-origin:0 0;overflow:visible}.editable-element-shape[data-v-56b0510c]{position:absolute}.element-content[data-v-56b0510c]{width:100%;height:100%;position:relative}.element-content svg[data-v-56b0510c]{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-01f791ba],table[data-v-01f791ba]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-01f791ba]{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-01f791ba]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-01f791ba]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-01f791ba]:last-child,table.theme.col-header tr .cell[data-v-01f791ba]:first-child,table.theme.row-footer tr:last-child .cell[data-v-01f791ba],table.theme.row-header tr:first-child .cell[data-v-01f791ba]{background-color:var(--themeColor)}table tr[data-v-01f791ba]{height:36px}table .cell[data-v-01f791ba]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle}table .cell-text[data-v-01f791ba]{min-height:32px;padding:5px;border:0;outline:0;line-height:1.5;font-size:14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.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}.thumbnails[data-v-57618e72]{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-57618e72]{height:40px;font-size:12px;display:flex;justify-content:center;align-items:center;flex-shrink:0;border-bottom:1px solid #eee;cursor:pointer}.add-slide .icon[data-v-57618e72]{margin-right:3px;font-size:14px}.thumbnail-list[data-v-57618e72]{padding:5px 0;flex:1;overflow:auto}.thumbnail-item[data-v-57618e72]{display:flex;justify-content:center;align-items:center;padding:5px 0}.thumbnail-item .thumbnail[data-v-57618e72]{outline:1px solid rgba(209,68,36,.15)}.thumbnail-item.active .label[data-v-57618e72]{color:#d14424}.thumbnail-item.active .thumbnail[data-v-57618e72],.thumbnail-item.selected .thumbnail[data-v-57618e72]{outline-color:#d14424}.label[data-v-57618e72]{font-size:12px;color:#999;width:20px;cursor:-webkit-grab;cursor:grab}.label[data-v-57618e72]: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-43fccffc]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-43fccffc]{width:100%;display:flex;align-items:center;margin-bottom:10px}.preset-style[data-v-43fccffc]{display:flex;flex-wrap:wrap;margin-bottom:10px}.preset-style-item[data-v-43fccffc]{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-43fccffc]:hover{border-color:#d14424;color:#d14424;z-index:1}.preset-style-item[data-v-43fccffc]:nth-child(2n){margin-left:-1px}.preset-style-item[data-v-43fccffc]:nth-child(n+3){margin-top:-1px}.text-color-btn[data-v-43fccffc]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-43fccffc]{width:16px;height:3px;margin-top:1px}.row[data-v-c1cc1cba],.row[data-v-c129286e]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-c1cc1cba]{text-align:right}.origin-image[data-v-c1cc1cba]{height:100px;background-size:contain;background-repeat:no-repeat;background-position:50%;background-color:#f9f9f9;margin-bottom:10px}.full-width-btn[data-v-c1cc1cba]{width:100%;margin-bottom:10px}.btn-icon[data-v-c1cc1cba]{margin-right:3px}.filter[data-v-c1cc1cba]{width:280px;font-size:12px}.filter-item[data-v-c1cc1cba]{padding:8px 5px;display:flex;justify-content:center;align-items:center}.filter-item .name[data-v-c1cc1cba]{width:60px}.filter-item .filter-slider[data-v-c1cc1cba]{flex:1;margin:0 6px}.filter-item .value[data-v-c1cc1cba]{width:40px;text-align:right}.clip[data-v-c1cc1cba]{width:260px;font-size:12px}.clip .title[data-v-c1cc1cba]{margin-bottom:5px}.shape-clip[data-v-c1cc1cba]{margin-bottom:10px;display:flex;flex-wrap:wrap}.shape-clip-item[data-v-c1cc1cba]{display:flex;justify-content:center;align-items:center;cursor:pointer;width:16%;margin-bottom:5%}.shape-clip-item[data-v-c1cc1cba]:not(:nth-child(5n)){margin-right:5%}.shape-clip-item .shape[data-v-c1cc1cba]{width:40px;height:40px;background-position:50%;background-repeat:no-repeat;background-size:cover}.row[data-v-65b24fb3],.row[data-v-998a7a02]{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-42e69ec4]{width:600px;position:relative}.editor-content[data-v-42e69ec4]{width:100%;height:360px;overflow:auto;overflow:overlay;position:relative;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.range-box[data-v-42e69ec4]{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-42e69ec4]{position:absolute;top:0;left:0;width:0;height:0;background-color:hsla(0,0%,53.3%,.3)}.range-line[data-v-42e69ec4]{position:absolute;width:0;height:0;left:0;top:0;border:0 solid #d14424}.range-line.t[data-v-42e69ec4]{border-top-width:1px}.range-line.b[data-v-42e69ec4]{border-bottom-width:1px}.range-line.l[data-v-42e69ec4]{border-left-width:1px}.range-line.r[data-v-42e69ec4]{border-right-width:1px}.resizable[data-v-42e69ec4]{position:absolute;width:12px;height:12px;left:0;top:0;margin:-9px 0 0 -9px;cursor:nwse-resize}.resizable[data-v-42e69ec4]:after{content:"";position:absolute;width:4px;height:12px;right:0;top:0;background-color:#d14424}.resizable[data-v-42e69ec4]:before{content:"";position:absolute;width:12px;height:4px;right:0;bottom:0;background-color:#d14424}table[data-v-42e69ec4]{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-42e69ec4]{text-align:center;border:1px solid #ccc;vertical-align:middle;width:100px;height:32px}table td.head[data-v-42e69ec4]{background-color:rgba(209,68,36,.1)}table .item[data-v-42e69ec4]{width:100%;height:100%;border:0;outline:0;font-size:13px;text-align:center;background-color:transparent}table .item.selected[data-v-42e69ec4]{background-color:rgba(209,68,36,.02)}.btns[data-v-42e69ec4]{margin-top:10px;text-align:right}.btns .btn[data-v-42e69ec4]{margin-left:10px}.row[data-v-62789f0d]{width:100%;display:flex;align-items:center;margin-bottom:10px}.full-width-btn[data-v-62789f0d]{width:100%}.btn-icon[data-v-62789f0d]{margin-right:3px}.row[data-v-2db32cac]{width:100%;display:flex;align-items:center;margin-bottom:10px}.theme-switch[data-v-2db32cac]{margin-bottom:18px}.switch-wrapper[data-v-2db32cac]{text-align:right}.text-color-btn[data-v-2db32cac]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-2db32cac]{width:16px;height:3px;margin-top:1px}.row[data-v-15c9ddcc]{width:100%;display:flex;align-items:center;margin-bottom:10px}.label[data-v-15c9ddcc]{text-align:center}.icon-btn[data-v-15c9ddcc]{cursor:pointer}.element-animation-btn[data-v-2a95eecd]{width:100%}.tip[data-v-2a95eecd]{text-align:center;font-style:italic;padding-top:12px}.animation-pool[data-v-2a95eecd]{width:400px;height:500px;overflow-y:auto;overflow-x:hidden;font-size:12px;margin-right:-12px;padding-right:12px}.type-title[data-v-2a95eecd]{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-2a95eecd]{display:flex;flex-wrap:wrap}.pool-item[data-v-2a95eecd]{width:24%;margin-bottom:1.33333%;margin-bottom:10px;height:40px;line-height:40px;text-align:center;cursor:pointer}.pool-item[data-v-2a95eecd]:not(:nth-child(4n)){margin-right:1.33333%}.animation-box[data-v-2a95eecd]{background-color:#f9f9f9}.sequence-item[data-v-2a95eecd]{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-2a95eecd]:active{cursor:-webkit-grabbing;cursor:grabbing}.sequence-item.active[data-v-2a95eecd]{border-color:#d14424}.sequence-item .index[data-v-2a95eecd]{flex:1}.sequence-item .text[data-v-2a95eecd]{flex:6}.sequence-item .handler[data-v-2a95eecd]{flex:2;font-size:15px;text-align:right}.sequence-item .handler-btn[data-v-2a95eecd]{margin-left:8px;cursor:pointer}.row[data-v-40e749dc]{width:100%;display:flex;align-items:center;margin-bottom:10px}.background-image-wrapper[data-v-40e749dc],.title[data-v-40e749dc]{margin-bottom:10px}.background-image[data-v-40e749dc]{height:0;padding-bottom:56.25%;border:1px dashed #eee;border-radius:2px;position:relative;transition:all .2s}.background-image[data-v-40e749dc]:hover{border-color:#d14424;color:#d14424}.background-image .content[data-v-40e749dc]{position:absolute;top:0;bottom:0;left:0;right: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-40e749dc]{display:flex;flex-wrap:wrap}.theme-item[data-v-40e749dc]{width:22%;margin-bottom:4%;padding-bottom:22%;border-radius:2px;position:relative;cursor:pointer}.theme-item[data-v-40e749dc]:not(:nth-child(4n)){margin-right:4%}.theme-item .theme-item-content[data-v-40e749dc]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;justify-content:center;align-items:center;transition:box-shadow .2s}.theme-item .theme-item-content[data-v-40e749dc]:hover{box-shadow:0 0 4px #888}.theme-item .text[data-v-40e749dc]{font-size:16px}.theme-item .color-block[data-v-40e749dc]{width:28px;height:10px;margin-top:5px}.animation-pool[data-v-6e3028f1]{display:flex;flex-wrap:wrap;margin-bottom:10px}.animation-item[data-v-6e3028f1]{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-6e3028f1]{border-color:#d14424;z-index:1}.animation-item[data-v-6e3028f1]:nth-child(2n){margin-left:-1px}.animation-item[data-v-6e3028f1]:nth-child(n+3){margin-top:-1px}.animation-block[data-v-6e3028f1]{width:64px;height:36px;background:#666;position:relative;overflow:hidden}.animation-block.fade[data-v-6e3028f1]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:fade-6e3028f1 .3s linear;animation:fade-6e3028f1 .3s linear}.animation-block.slideX[data-v-6e3028f1]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideX-6e3028f1 .3s linear;animation:slideX-6e3028f1 .3s linear}.animation-block.slideY[data-v-6e3028f1]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideY-6e3028f1 .3s linear;animation:slideY-6e3028f1 .3s linear}.animation-text[data-v-6e3028f1]{font-size:12px;color:#333;text-align:center}@-webkit-keyframes fade-6e3028f1{0%{opacity:0}to{opacity:1}}@keyframes fade-6e3028f1{0%{opacity:0}to{opacity:1}}@-webkit-keyframes slideX-6e3028f1{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slideX-6e3028f1{0%{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slideY-6e3028f1{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideY-6e3028f1{0%{transform:translateY(100%)}to{transform:translateY(0)}}.row[data-v-aef45858]{width:100%;display:flex;align-items:center;margin-bottom:10px}.toolbar[data-v-f790671e]{border-left:1px solid #eee;background-color:#fff;display:flex;flex-direction:column}.tabs[data-v-f790671e]{height:40px;font-size:12px;flex-shrink:0;display:flex}.tab[data-v-f790671e]{flex:1;display:flex;justify-content:center;align-items:center;background-color:#f9f9f9;border-bottom:1px solid #eee;cursor:pointer}.tab.active[data-v-f790671e]{background-color:#fff;border-bottom-color:#fff}.tab+.tab[data-v-f790671e]{border-left:1px solid #eee}.content[data-v-f790671e]{padding:12px;font-size:13px;overflow:auto;overflow:overlay}.remark[data-v-89372f4a]{position:relative;border-top:1px solid #eee;background-color:#f9f9f9}.remark textarea[data-v-89372f4a]{width:100%;height:100%;position:absolute;left:0;right:0;top:0;bottom:0;overflow-y:auto;resize:none;border:0;outline:0;padding:8px;font-size:12px;background-color:transparent}.resize-handler[data-v-89372f4a]{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%}.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-9174b3bc]{width:100%;height:100%;position:fixed;top:0;left:0;background-color:#1a1a1a;z-index:99}.return-button[data-v-9174b3bc]{height:60px;padding:20px 30px 0}.return-button .icon[data-v-9174b3bc]{color:#fff;font-size:36px;cursor:pointer}.return-button .icon[data-v-9174b3bc]:hover{color:#d14424}.slide-thumbnails-content[data-v-9174b3bc]{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-9174b3bc]{width:150px;outline:2px solid #aaa;margin-right:12px;margin-bottom:12px}.slide-thumbnails-content .thumbnail[data-v-9174b3bc]:hover{outline-color:#d14424}.slide-thumbnails-content .thumbnail.active[data-v-9174b3bc]{outline-width:3px;outline-color:#d14424}.writing-board[data-v-61d4949c]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:8;cursor:none}.eraser[data-v-61d4949c],.pen[data-v-61d4949c]{pointer-events:none;position:fixed;z-index:9}.eraser .icon[data-v-61d4949c],.pen .icon[data-v-61d4949c]{filter:drop-shadow(2px 2px 2px #555)}.eraser[data-v-61d4949c]{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-f34025bc]{font-size:12px}.writing-board-tool .tools[data-v-f34025bc]{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-f34025bc]{padding:5px 10px;cursor:pointer}.writing-board-tool .btn[data-v-f34025bc]:hover{color:#d14424}.writing-board-tool .btn.active[data-v-f34025bc]{background-color:rgba(209,68,36,.5);color:#fff}.writing-board-tool .icon[data-v-f34025bc]{font-size:20px}.writing-board-tool .colors[data-v-f34025bc]{display:flex;padding:0 10px}.writing-board-tool .color[data-v-f34025bc]{width:16px;height:16px;border-radius:2px;cursor:pointer}.writing-board-tool .color[data-v-f34025bc]:hover{transform:scale(1.15)}.writing-board-tool .color.active[data-v-f34025bc]{transform:scale(1.3)}.writing-board-tool .color+.color[data-v-f34025bc]{margin-left:8px}.pptist-screen[data-v-5e85dd68]{width:100%;height:100%;position:relative;background-color:#111}.slide-list[data-v-5e85dd68]{background:#1d1d1d;position:relative;width:100%;height:100%}.slide-item[data-v-5e85dd68]{position:absolute;top:0;left:0;width:100%;height:100%}.slide-item.current[data-v-5e85dd68]{z-index:2}.slide-item.hide[data-v-5e85dd68]{opacity:0}.slide-item.turning-mode-no.before[data-v-5e85dd68]{transform:translateY(-100%)}.slide-item.turning-mode-no.after[data-v-5e85dd68]{transform:translateY(100%)}.slide-item.turning-mode-fade[data-v-5e85dd68]{transition:opacity .75s}.slide-item.turning-mode-fade.after[data-v-5e85dd68],.slide-item.turning-mode-fade.before[data-v-5e85dd68]{pointer-events:none;opacity:0}.slide-item.turning-mode-slideX[data-v-5e85dd68]{transition:transform .35s}.slide-item.turning-mode-slideX.before[data-v-5e85dd68]{transform:translateX(-100%)}.slide-item.turning-mode-slideX.after[data-v-5e85dd68]{transform:translateX(100%)}.slide-item.turning-mode-slideY[data-v-5e85dd68]{transition:transform .35s}.slide-item.turning-mode-slideY.before[data-v-5e85dd68]{transform:translateY(-100%)}.slide-item.turning-mode-slideY.after[data-v-5e85dd68]{transform:translateY(100%)}.slide-content[data-v-5e85dd68]{background-color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;justify-content:center;align-items:center}.tools[data-v-5e85dd68]{position:fixed;bottom:8px;left:8px;font-size:25px;color:#666;z-index:10;cursor:pointer}.tool-btn[data-v-5e85dd68]{opacity:.35}.tool-btn[data-v-5e85dd68]:hover{opacity:.9}.tool-btn+.tool-btn[data-v-5e85dd68]{margin-left:8px}.page-number[data-v-5e85dd68]{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)}.menu-content[data-v-5490894e]{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-5490894e]{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-5490894e]{display:block}.menu-item:not(.disable):hover>.has-children.has-handler[data-v-5490894e]:after{transform:scale(1)}.menu-item[data-v-5490894e]:hover:not(.disable){background-color:rgba(209,68,36,.2)}.menu-item.divider[data-v-5490894e]{height:1px;overflow:hidden;margin:5px;background-color:#e5e5e5;line-height:0;padding:0}.menu-item.disable[data-v-5490894e]{color:#b1b1b1;cursor:no-drop}.menu-item-content[data-v-5490894e]{display:flex;align-items:center;justify-content:space-between;position:relative}.menu-item-content.has-children[data-v-5490894e]: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-5490894e]: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-5490894e]{opacity:.6}.menu-item-content .sub-menu[data-v-5490894e]{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}.input[data-v-bf80565c]{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-e9a0ac98]{background-size:contain}.alpha-checkboard-wrap[data-v-ecf7d10e],.alpha[data-v-ecf7d10e],.checkerboard[data-v-e9a0ac98]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-checkboard-wrap[data-v-ecf7d10e]{overflow:hidden}.alpha-gradient[data-v-ecf7d10e]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-container[data-v-ecf7d10e]{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.alpha-pointer[data-v-ecf7d10e]{z-index:2;position:absolute}.alpha-picker[data-v-ecf7d10e]{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-52d10460]{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.hue-container[data-v-52d10460]{cursor:pointer;margin:0 2px;position:relative;height:100%}.hue-pointer[data-v-52d10460]{z-index:2;position:absolute;top:0}.hue-picker[data-v-52d10460]{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-a98797da],.saturation-white[data-v-a98797da],.saturation[data-v-a98797da]{position:absolute;top:0;left:0;right:0;bottom:0;cursor:pointer}.saturation-white[data-v-a98797da]{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.saturation-black[data-v-a98797da]{background:linear-gradient(0deg,#000,transparent)}.saturation-pointer[data-v-a98797da]{cursor:pointer;position:absolute}.saturation-circle[data-v-a98797da]{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-0311fdee]{width:100%;position:relative;overflow:hidden;text-align:center;font-size:14px}.input-content[data-v-0311fdee]{width:100%;padding:3px;border:0;border-bottom:1px solid #ddd;outline:none;text-align:center}.input-label[data-v-0311fdee]{text-transform:capitalize}.color-picker[data-v-4adab90a]{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-4adab90a]{width:100%;padding-bottom:50%;position:relative;overflow:hidden}.picker-controls[data-v-4adab90a]{display:flex}.picker-sliders[data-v-4adab90a]{padding:4px 0;flex:1}.picker-hue-wrap[data-v-4adab90a]{position:relative;height:10px}.picker-alpha-wrap[data-v-4adab90a]{position:relative;height:10px;margin-top:4px;overflow:hidden}.picker-color-wrap[data-v-4adab90a]{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-4adab90a]{background-size:auto}.picker-current-color[data-v-4adab90a]{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2}.picker-field[data-v-4adab90a]{margin-bottom:8px}.picker-presets[data-v-4adab90a]{display:flex;flex-wrap:wrap}.picker-presets-color[data-v-4adab90a]{width:7%;margin-bottom:3.33333%;height:0;padding-bottom:7%;flex-shrink:0;position:relative;cursor:pointer}.picker-presets-color[data-v-4adab90a]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-presets[data-v-4adab90a]{display:flex;flex-wrap:wrap}.picker-gradient-col[data-v-4adab90a]{width:7%;margin-bottom:3.33333%;display:flex;flex-direction:column}.picker-gradient-col[data-v-4adab90a]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-color[data-v-4adab90a]{width:100%;height:0;padding-bottom:100%;position:relative;cursor:pointer}.recent-colors-title[data-v-4adab90a]{font-size:12px;margin-bottom:4px}.recent-colors[data-v-4adab90a]{display:flex;flex-wrap:wrap} \ No newline at end of file +.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}.export-dialog[data-v-a69a4592]{height:500px;display:flex;justify-content:center;position:relative}.preview[data-v-a69a4592]{width:460px;height:100%;overflow:auto;margin-right:20px;background-color:#2d2d30;color:#fff}.preview pre[data-v-a69a4592]{width:100%;height:100%}.handle[data-v-a69a4592]{flex:1}.handle .btn[data-v-a69a4592]{width:100%;margin-bottom:10px}.editor-header[data-v-ecea6ffc]{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-ecea6ffc],.menu-item[data-v-ecea6ffc],.right[data-v-ecea6ffc]{display:flex;justify-content:center;align-items:center}.menu-item[data-v-ecea6ffc]{height:100%;font-size:14px;padding:0 10px;transition:background-color .2s;cursor:pointer}.menu-item .text[data-v-ecea6ffc]{margin-left:4px}.left .menu-item[data-v-ecea6ffc]: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-1d9b5032]{width:100%;height:100%;position:relative}.image-clip-handler .bottom-img[data-v-1d9b5032]{top:0;left:0;width:100%;height:100%;opacity:.5}.image-clip-handler img[data-v-1d9b5032]{width:100%;height:100%}.image-clip-handler .top-image-content[data-v-1d9b5032]{position:absolute;overflow:hidden}.image-clip-handler .top-image-content img[data-v-1d9b5032]{position:absolute}.operate[data-v-1d9b5032]{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.clip-point[data-v-1d9b5032]{position:absolute;width:16px;height:16px;left:0;top:0;transform-origin:0 0;display:flex;justify-content:center;align-items:center}.clip-point svg[data-v-1d9b5032]{overflow:visible}.clip-point.t-l[data-v-1d9b5032]{left:0;top:0;cursor:nwse-resize}.clip-point.t-r[data-v-1d9b5032]{left:100%;top:0;transform:rotate(90deg);cursor:nesw-resize}.clip-point.b-l[data-v-1d9b5032]{left:0;top:100%;transform:rotate(-90deg);cursor:nesw-resize}.clip-point.b-r[data-v-1d9b5032]{left:100%;top:100%;transform:rotate(180deg);cursor:nwse-resize}.editable-element-image[data-v-1622838f]{position:absolute}.editable-element-image.lock .element-content[data-v-1622838f]{cursor:default}.rotate-wrapper[data-v-1622838f]{width:100%;height:100%}.element-content[data-v-1622838f]{width:100%;height:100%;position:relative;cursor:move}.element-content .image-content[data-v-1622838f]{width:100%;height:100%;overflow:hidden;position:relative}.element-content img[data-v-1622838f]{position:absolute}svg[data-v-2ddaa919]{overflow:visible;position:absolute;top:0;left:0}.editable-element-text[data-v-3d4f3789]{position:absolute}.editable-element-text.lock .element-content[data-v-3d4f3789]{cursor:default}.rotate-wrapper[data-v-3d4f3789]{width:100%;height:100%}.element-content[data-v-3d4f3789]{position:relative;padding:10px;line-height:1.5;word-break:break-word;cursor:move}.element-content .text[data-v-3d4f3789]{position:relative;cursor:text}.editable-element-shape[data-v-6ed7d252]{position:absolute}.editable-element-shape.lock .element-content[data-v-6ed7d252]{cursor:default}.rotate-wrapper[data-v-6ed7d252]{width:100%;height:100%}.element-content[data-v-6ed7d252]{width:100%;height:100%;position:relative;cursor:move}.element-content svg[data-v-6ed7d252]{transform-origin:0 0;overflow:visible}.editable-element-shape[data-v-7d3d40d6]{position:absolute}.editable-element-shape.lock .line-path[data-v-7d3d40d6]{cursor:default}.element-content[data-v-7d3d40d6]{width:100%;height:100%;position:relative}.element-content svg[data-v-7d3d40d6]{transform-origin:0 0;overflow:visible}.line-path[data-v-7d3d40d6]{cursor:move}.chart-content[data-v-233b1dc8]{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-d2dd6e5c]{position:absolute}.editable-element-chart.lock .element-content[data-v-d2dd6e5c]{cursor:default}.element-content[data-v-d2dd6e5c]{width:100%;height:100%;overflow:hidden;cursor:move}.custom-textarea[data-v-0d17e957]{border:0;outline:0}.editable-table[data-v-70bdbb7e],table[data-v-70bdbb7e]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-70bdbb7e]{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-70bdbb7e]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-70bdbb7e]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-70bdbb7e]:last-child,table.theme.col-header tr .cell[data-v-70bdbb7e]:first-child,table.theme.row-footer tr:last-child .cell[data-v-70bdbb7e],table.theme.row-header tr:first-child .cell[data-v-70bdbb7e]{background-color:var(--themeColor)}table tr[data-v-70bdbb7e]{height:36px}table .cell[data-v-70bdbb7e]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle;font-size:14px;cursor:default}table .cell.selected[data-v-70bdbb7e]:after{content:"";width:100%;height:100%;position:absolute;top:0;left:0;background-color:hsla(0,0%,40%,.4)}table .cell-text[data-v-70bdbb7e]{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-70bdbb7e]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.drag-line[data-v-70bdbb7e]{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-70bdbb7e]:hover{opacity:1}.editable-element-table[data-v-1ab7e248]{position:absolute}.editable-element-table.lock .element-content[data-v-1ab7e248]{cursor:default}.element-content[data-v-1ab7e248]{width:100%;height:100%;position:relative;cursor:move}.table-mask[data-v-1ab7e248]{position:absolute;top:0;bottom:0;left:0;right:0;opacity:0;transition:opacity .2s}.table-mask .mask-tip[data-v-1ab7e248]{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-1ab7e248]: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-3cb2c22e]{width:100%;height:100%;position:absolute;top:0;left:0;bottom:0;right:0;overflow:visible;z-index:999;pointer-events:none}.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-3c5b7aac]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;cursor:crosshair}.selection[data-v-3c5b7aac]{position:absolute;opacity:.8}.selection[data-v-3c5b7aac]:not(.line){border:1px solid #d14424}.resize-handler[data-v-1c2a68d0]{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.left-top[data-v-1c2a68d0]{cursor:nwse-resize}.resize-handler.top[data-v-1c2a68d0]{cursor:ns-resize}.resize-handler.right-top[data-v-1c2a68d0]{cursor:nesw-resize}.resize-handler.left[data-v-1c2a68d0],.resize-handler.right[data-v-1c2a68d0]{cursor:ew-resize}.resize-handler.left-bottom[data-v-1c2a68d0]{cursor:nesw-resize}.resize-handler.bottom[data-v-1c2a68d0]{cursor:ns-resize}.resize-handler.right-bottom[data-v-1c2a68d0]{cursor:nwse-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-5b0628aa]{visibility:hidden}.operate[data-v-558a94fe]{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-558a94fe]{opacity:0}.animation-index[data-v-558a94fe]{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;margin-bottom:3px}.canvas[data-v-fb6f9726]{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-fb6f9726]{position:absolute;box-shadow:0 0 15px 0 rgba(0,0,0,.1)}.viewport[data-v-fb6f9726]{position:absolute;top:0;left:0;transform-origin:0 0}.shape-pool[data-v-5aabd717]{width:340px;max-height:540px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-5aabd717]{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-5aabd717]{display:flex;flex-wrap:wrap;margin-bottom:10px}.shape-item[data-v-5aabd717]{width:8%;margin-bottom:2.22222%;height:0;padding-bottom:8%;flex-shrink:0;position:relative;cursor:pointer}.shape-item[data-v-5aabd717]:not(:nth-child(10n)){margin-right:2.22222%}.shape-content[data-v-5aabd717]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center}.shape-content:hover .shape-path[data-v-5aabd717]{stroke:#d14424}.shape-content svg[data-v-5aabd717]:not(:root){overflow:visible}.line-pool[data-v-5087394c]{width:220px;overflow:auto;margin-bottom:-12px;margin-right:-12px;padding-right:12px}.category-name[data-v-5087394c]{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-5087394c]{display:flex;flex-wrap:wrap;margin-bottom:10px}.line-item[data-v-5087394c]{width:19%;margin-bottom:1.25%;height:0;padding-bottom:19%;flex-shrink:0;position:relative;cursor:pointer}.line-item[data-v-5087394c]:not(:nth-child(5n)){margin-right:1.25%}.line-content[data-v-5087394c]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center;color:#999}.line-content[data-v-5087394c]:hover{color:#d14424}.line-content svg[data-v-5087394c]:not(:root){overflow:visible}.chart-pool[data-v-0028f4b9]{width:120px;margin-bottom:-5px;display:flex;flex-wrap:wrap}.chart-item[data-v-0028f4b9]{width:32%;margin-bottom:2%;height:0;padding-bottom:32%;flex-shrink:0;position:relative;cursor:pointer}.chart-item[data-v-0028f4b9]:not(:nth-child(3n)){margin-right:2%}.chart-content[data-v-0028f4b9]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center;color:#999}.chart-content[data-v-0028f4b9]:hover{color:#d14424}.table-generator[data-v-576c614c]{width:100%;margin-top:-12px}.title[data-v-576c614c]{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}.title .right[data-v-576c614c]{cursor:pointer}.title .right[data-v-576c614c]:hover{color:#d14424}table[data-v-576c614c]{border-collapse:separate}td[data-v-576c614c]{width:23px;height:23px;line-height:23px;border:2px solid #fff;background-color:#f7f7f7}.cell[data-v-576c614c]{width:100%;height:100%;border:1px solid #dcdcdc}.cell.active[data-v-576c614c]{background-color:rgba(209,68,36,.1);border-color:#d14424}.custom[data-v-576c614c]{width:230px}.custom .row[data-v-576c614c]{display:flex;align-items:center}.custom .row+.row[data-v-576c614c]{margin-top:10px}.btns[data-v-576c614c]{margin-top:10px;text-align:right}.btns .btn[data-v-576c614c]{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-6fef68fd]{position:absolute}.rotate-wrapper[data-v-6fef68fd]{width:100%;height:100%}.element-content[data-v-6fef68fd]{width:100%;height:100%;position:relative}.element-content svg[data-v-6fef68fd]{transform-origin:0 0;overflow:visible}.editable-element-shape[data-v-56b0510c]{position:absolute}.element-content[data-v-56b0510c]{width:100%;height:100%;position:relative}.element-content svg[data-v-56b0510c]{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-01f791ba],table[data-v-01f791ba]{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}table[data-v-01f791ba]{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-01f791ba]{background-color:var(--subThemeColor1)}table.theme tr:nth-child(odd) .cell[data-v-01f791ba]{background-color:var(--subThemeColor2)}table.theme.col-footer tr .cell[data-v-01f791ba]:last-child,table.theme.col-header tr .cell[data-v-01f791ba]:first-child,table.theme.row-footer tr:last-child .cell[data-v-01f791ba],table.theme.row-header tr:first-child .cell[data-v-01f791ba]{background-color:var(--themeColor)}table tr[data-v-01f791ba]{height:36px}table .cell[data-v-01f791ba]{position:relative;white-space:normal;word-wrap:break-word;vertical-align:middle}table .cell-text[data-v-01f791ba]{min-height:32px;padding:5px;border:0;outline:0;line-height:1.5;font-size:14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.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}.thumbnails[data-v-57618e72]{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-57618e72]{height:40px;font-size:12px;display:flex;justify-content:center;align-items:center;flex-shrink:0;border-bottom:1px solid #eee;cursor:pointer}.add-slide .icon[data-v-57618e72]{margin-right:3px;font-size:14px}.thumbnail-list[data-v-57618e72]{padding:5px 0;flex:1;overflow:auto}.thumbnail-item[data-v-57618e72]{display:flex;justify-content:center;align-items:center;padding:5px 0}.thumbnail-item .thumbnail[data-v-57618e72]{outline:1px solid rgba(209,68,36,.15)}.thumbnail-item.active .label[data-v-57618e72]{color:#d14424}.thumbnail-item.active .thumbnail[data-v-57618e72],.thumbnail-item.selected .thumbnail[data-v-57618e72]{outline-color:#d14424}.label[data-v-57618e72]{font-size:12px;color:#999;width:20px;cursor:-webkit-grab;cursor:grab}.label[data-v-57618e72]: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-131345b8]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.row[data-v-131345b8]{width:100%;display:flex;align-items:center;margin-bottom:10px}.preset-style[data-v-131345b8]{display:flex;flex-wrap:wrap;margin-bottom:10px}.preset-style-item[data-v-131345b8]{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-131345b8]:hover{border-color:#d14424;color:#d14424;z-index:1}.preset-style-item[data-v-131345b8]:nth-child(2n){margin-left:-1px}.preset-style-item[data-v-131345b8]:nth-child(n+3){margin-top:-1px}.text-color-btn[data-v-131345b8]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-131345b8]{width:16px;height:3px;margin-top:1px}.row[data-v-c1cc1cba],.row[data-v-c129286e]{width:100%;display:flex;align-items:center;margin-bottom:10px}.switch-wrapper[data-v-c1cc1cba]{text-align:right}.origin-image[data-v-c1cc1cba]{height:100px;background-size:contain;background-repeat:no-repeat;background-position:50%;background-color:#f9f9f9;margin-bottom:10px}.full-width-btn[data-v-c1cc1cba]{width:100%;margin-bottom:10px}.btn-icon[data-v-c1cc1cba]{margin-right:3px}.filter[data-v-c1cc1cba]{width:280px;font-size:12px}.filter-item[data-v-c1cc1cba]{padding:8px 5px;display:flex;justify-content:center;align-items:center}.filter-item .name[data-v-c1cc1cba]{width:60px}.filter-item .filter-slider[data-v-c1cc1cba]{flex:1;margin:0 6px}.filter-item .value[data-v-c1cc1cba]{width:40px;text-align:right}.clip[data-v-c1cc1cba]{width:260px;font-size:12px}.clip .title[data-v-c1cc1cba]{margin-bottom:5px}.shape-clip[data-v-c1cc1cba]{margin-bottom:10px;display:flex;flex-wrap:wrap}.shape-clip-item[data-v-c1cc1cba]{display:flex;justify-content:center;align-items:center;cursor:pointer;width:16%;margin-bottom:5%}.shape-clip-item[data-v-c1cc1cba]:not(:nth-child(5n)){margin-right:5%}.shape-clip-item .shape[data-v-c1cc1cba]{width:40px;height:40px;background-position:50%;background-repeat:no-repeat;background-size:cover}.row[data-v-65b24fb3],.row[data-v-998a7a02]{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-42e69ec4]{width:600px;position:relative}.editor-content[data-v-42e69ec4]{width:100%;height:360px;overflow:auto;overflow:overlay;position:relative;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.range-box[data-v-42e69ec4]{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-42e69ec4]{position:absolute;top:0;left:0;width:0;height:0;background-color:hsla(0,0%,53.3%,.3)}.range-line[data-v-42e69ec4]{position:absolute;width:0;height:0;left:0;top:0;border:0 solid #d14424}.range-line.t[data-v-42e69ec4]{border-top-width:1px}.range-line.b[data-v-42e69ec4]{border-bottom-width:1px}.range-line.l[data-v-42e69ec4]{border-left-width:1px}.range-line.r[data-v-42e69ec4]{border-right-width:1px}.resizable[data-v-42e69ec4]{position:absolute;width:12px;height:12px;left:0;top:0;margin:-9px 0 0 -9px;cursor:nwse-resize}.resizable[data-v-42e69ec4]:after{content:"";position:absolute;width:4px;height:12px;right:0;top:0;background-color:#d14424}.resizable[data-v-42e69ec4]:before{content:"";position:absolute;width:12px;height:4px;right:0;bottom:0;background-color:#d14424}table[data-v-42e69ec4]{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-42e69ec4]{text-align:center;border:1px solid #ccc;vertical-align:middle;width:100px;height:32px}table td.head[data-v-42e69ec4]{background-color:rgba(209,68,36,.1)}table .item[data-v-42e69ec4]{width:100%;height:100%;border:0;outline:0;font-size:13px;text-align:center;background-color:transparent}table .item.selected[data-v-42e69ec4]{background-color:rgba(209,68,36,.02)}.btns[data-v-42e69ec4]{margin-top:10px;text-align:right}.btns .btn[data-v-42e69ec4]{margin-left:10px}.row[data-v-62789f0d]{width:100%;display:flex;align-items:center;margin-bottom:10px}.full-width-btn[data-v-62789f0d]{width:100%}.btn-icon[data-v-62789f0d]{margin-right:3px}.row[data-v-2db32cac]{width:100%;display:flex;align-items:center;margin-bottom:10px}.theme-switch[data-v-2db32cac]{margin-bottom:18px}.switch-wrapper[data-v-2db32cac]{text-align:right}.text-color-btn[data-v-2db32cac]{display:flex;flex-direction:column;justify-content:center;align-items:center}.text-color-block[data-v-2db32cac]{width:16px;height:3px;margin-top:1px}.row[data-v-15c9ddcc]{width:100%;display:flex;align-items:center;margin-bottom:10px}.label[data-v-15c9ddcc]{text-align:center}.icon-btn[data-v-15c9ddcc]{cursor:pointer}.element-animation-btn[data-v-2a95eecd]{width:100%}.tip[data-v-2a95eecd]{text-align:center;font-style:italic;padding-top:12px}.animation-pool[data-v-2a95eecd]{width:400px;height:500px;overflow-y:auto;overflow-x:hidden;font-size:12px;margin-right:-12px;padding-right:12px}.type-title[data-v-2a95eecd]{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-2a95eecd]{display:flex;flex-wrap:wrap}.pool-item[data-v-2a95eecd]{width:24%;margin-bottom:1.33333%;margin-bottom:10px;height:40px;line-height:40px;text-align:center;cursor:pointer}.pool-item[data-v-2a95eecd]:not(:nth-child(4n)){margin-right:1.33333%}.animation-box[data-v-2a95eecd]{background-color:#f9f9f9}.sequence-item[data-v-2a95eecd]{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-2a95eecd]:active{cursor:-webkit-grabbing;cursor:grabbing}.sequence-item.active[data-v-2a95eecd]{border-color:#d14424}.sequence-item .index[data-v-2a95eecd]{flex:1}.sequence-item .text[data-v-2a95eecd]{flex:6}.sequence-item .handler[data-v-2a95eecd]{flex:2;font-size:15px;text-align:right}.sequence-item .handler-btn[data-v-2a95eecd]{margin-left:8px;cursor:pointer}.row[data-v-40e749dc]{width:100%;display:flex;align-items:center;margin-bottom:10px}.background-image-wrapper[data-v-40e749dc],.title[data-v-40e749dc]{margin-bottom:10px}.background-image[data-v-40e749dc]{height:0;padding-bottom:56.25%;border:1px dashed #eee;border-radius:2px;position:relative;transition:all .2s}.background-image[data-v-40e749dc]:hover{border-color:#d14424;color:#d14424}.background-image .content[data-v-40e749dc]{position:absolute;top:0;bottom:0;left:0;right: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-40e749dc]{display:flex;flex-wrap:wrap}.theme-item[data-v-40e749dc]{width:22%;margin-bottom:4%;padding-bottom:22%;border-radius:2px;position:relative;cursor:pointer}.theme-item[data-v-40e749dc]:not(:nth-child(4n)){margin-right:4%}.theme-item .theme-item-content[data-v-40e749dc]{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;justify-content:center;align-items:center;transition:box-shadow .2s}.theme-item .theme-item-content[data-v-40e749dc]:hover{box-shadow:0 0 4px #888}.theme-item .text[data-v-40e749dc]{font-size:16px}.theme-item .color-block[data-v-40e749dc]{width:28px;height:10px;margin-top:5px}.animation-pool[data-v-6e3028f1]{display:flex;flex-wrap:wrap;margin-bottom:10px}.animation-item[data-v-6e3028f1]{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-6e3028f1]{border-color:#d14424;z-index:1}.animation-item[data-v-6e3028f1]:nth-child(2n){margin-left:-1px}.animation-item[data-v-6e3028f1]:nth-child(n+3){margin-top:-1px}.animation-block[data-v-6e3028f1]{width:64px;height:36px;background:#666;position:relative;overflow:hidden}.animation-block.fade[data-v-6e3028f1]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:fade-6e3028f1 .3s linear;animation:fade-6e3028f1 .3s linear}.animation-block.slideX[data-v-6e3028f1]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideX-6e3028f1 .3s linear;animation:slideX-6e3028f1 .3s linear}.animation-block.slideY[data-v-6e3028f1]:hover:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;background-color:#d9dadb;-webkit-animation:slideY-6e3028f1 .3s linear;animation:slideY-6e3028f1 .3s linear}.animation-text[data-v-6e3028f1]{font-size:12px;color:#333;text-align:center}@-webkit-keyframes fade-6e3028f1{0%{opacity:0}to{opacity:1}}@keyframes fade-6e3028f1{0%{opacity:0}to{opacity:1}}@-webkit-keyframes slideX-6e3028f1{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slideX-6e3028f1{0%{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slideY-6e3028f1{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideY-6e3028f1{0%{transform:translateY(100%)}to{transform:translateY(0)}}.row[data-v-aef45858]{width:100%;display:flex;align-items:center;margin-bottom:10px}.toolbar[data-v-f790671e]{border-left:1px solid #eee;background-color:#fff;display:flex;flex-direction:column}.tabs[data-v-f790671e]{height:40px;font-size:12px;flex-shrink:0;display:flex}.tab[data-v-f790671e]{flex:1;display:flex;justify-content:center;align-items:center;background-color:#f9f9f9;border-bottom:1px solid #eee;cursor:pointer}.tab.active[data-v-f790671e]{background-color:#fff;border-bottom-color:#fff}.tab+.tab[data-v-f790671e]{border-left:1px solid #eee}.content[data-v-f790671e]{padding:12px;font-size:13px;overflow:auto;overflow:overlay}.remark[data-v-89372f4a]{position:relative;border-top:1px solid #eee;background-color:#f9f9f9}.remark textarea[data-v-89372f4a]{width:100%;height:100%;position:absolute;left:0;right:0;top:0;bottom:0;overflow-y:auto;resize:none;border:0;outline:0;padding:8px;font-size:12px;background-color:transparent}.resize-handler[data-v-89372f4a]{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%}.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-9174b3bc]{width:100%;height:100%;position:fixed;top:0;left:0;background-color:#1a1a1a;z-index:99}.return-button[data-v-9174b3bc]{height:60px;padding:20px 30px 0}.return-button .icon[data-v-9174b3bc]{color:#fff;font-size:36px;cursor:pointer}.return-button .icon[data-v-9174b3bc]:hover{color:#d14424}.slide-thumbnails-content[data-v-9174b3bc]{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-9174b3bc]{width:150px;outline:2px solid #aaa;margin-right:12px;margin-bottom:12px}.slide-thumbnails-content .thumbnail[data-v-9174b3bc]:hover{outline-color:#d14424}.slide-thumbnails-content .thumbnail.active[data-v-9174b3bc]{outline-width:3px;outline-color:#d14424}.writing-board[data-v-61d4949c]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:8;cursor:none}.eraser[data-v-61d4949c],.pen[data-v-61d4949c]{pointer-events:none;position:fixed;z-index:9}.eraser .icon[data-v-61d4949c],.pen .icon[data-v-61d4949c]{filter:drop-shadow(2px 2px 2px #555)}.eraser[data-v-61d4949c]{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-f34025bc]{font-size:12px}.writing-board-tool .tools[data-v-f34025bc]{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-f34025bc]{padding:5px 10px;cursor:pointer}.writing-board-tool .btn[data-v-f34025bc]:hover{color:#d14424}.writing-board-tool .btn.active[data-v-f34025bc]{background-color:rgba(209,68,36,.5);color:#fff}.writing-board-tool .icon[data-v-f34025bc]{font-size:20px}.writing-board-tool .colors[data-v-f34025bc]{display:flex;padding:0 10px}.writing-board-tool .color[data-v-f34025bc]{width:16px;height:16px;border-radius:2px;cursor:pointer}.writing-board-tool .color[data-v-f34025bc]:hover{transform:scale(1.15)}.writing-board-tool .color.active[data-v-f34025bc]{transform:scale(1.3)}.writing-board-tool .color+.color[data-v-f34025bc]{margin-left:8px}.pptist-screen[data-v-5e85dd68]{width:100%;height:100%;position:relative;background-color:#111}.slide-list[data-v-5e85dd68]{background:#1d1d1d;position:relative;width:100%;height:100%}.slide-item[data-v-5e85dd68]{position:absolute;top:0;left:0;width:100%;height:100%}.slide-item.current[data-v-5e85dd68]{z-index:2}.slide-item.hide[data-v-5e85dd68]{opacity:0}.slide-item.turning-mode-no.before[data-v-5e85dd68]{transform:translateY(-100%)}.slide-item.turning-mode-no.after[data-v-5e85dd68]{transform:translateY(100%)}.slide-item.turning-mode-fade[data-v-5e85dd68]{transition:opacity .75s}.slide-item.turning-mode-fade.after[data-v-5e85dd68],.slide-item.turning-mode-fade.before[data-v-5e85dd68]{pointer-events:none;opacity:0}.slide-item.turning-mode-slideX[data-v-5e85dd68]{transition:transform .35s}.slide-item.turning-mode-slideX.before[data-v-5e85dd68]{transform:translateX(-100%)}.slide-item.turning-mode-slideX.after[data-v-5e85dd68]{transform:translateX(100%)}.slide-item.turning-mode-slideY[data-v-5e85dd68]{transition:transform .35s}.slide-item.turning-mode-slideY.before[data-v-5e85dd68]{transform:translateY(-100%)}.slide-item.turning-mode-slideY.after[data-v-5e85dd68]{transform:translateY(100%)}.slide-content[data-v-5e85dd68]{background-color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;justify-content:center;align-items:center}.tools[data-v-5e85dd68]{position:fixed;bottom:8px;left:8px;font-size:25px;color:#666;z-index:10;cursor:pointer}.tool-btn[data-v-5e85dd68]{opacity:.35}.tool-btn[data-v-5e85dd68]:hover{opacity:.9}.tool-btn+.tool-btn[data-v-5e85dd68]{margin-left:8px}.page-number[data-v-5e85dd68]{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)}.menu-content[data-v-5490894e]{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-5490894e]{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-5490894e]{display:block}.menu-item:not(.disable):hover>.has-children.has-handler[data-v-5490894e]:after{transform:scale(1)}.menu-item[data-v-5490894e]:hover:not(.disable){background-color:rgba(209,68,36,.2)}.menu-item.divider[data-v-5490894e]{height:1px;overflow:hidden;margin:5px;background-color:#e5e5e5;line-height:0;padding:0}.menu-item.disable[data-v-5490894e]{color:#b1b1b1;cursor:no-drop}.menu-item-content[data-v-5490894e]{display:flex;align-items:center;justify-content:space-between;position:relative}.menu-item-content.has-children[data-v-5490894e]: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-5490894e]: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-5490894e]{opacity:.6}.menu-item-content .sub-menu[data-v-5490894e]{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}.input[data-v-bf80565c]{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-e9a0ac98]{background-size:contain}.alpha-checkboard-wrap[data-v-ecf7d10e],.alpha[data-v-ecf7d10e],.checkerboard[data-v-e9a0ac98]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-checkboard-wrap[data-v-ecf7d10e]{overflow:hidden}.alpha-gradient[data-v-ecf7d10e]{position:absolute;top:0;right:0;bottom:0;left:0}.alpha-container[data-v-ecf7d10e]{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.alpha-pointer[data-v-ecf7d10e]{z-index:2;position:absolute}.alpha-picker[data-v-ecf7d10e]{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-52d10460]{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.hue-container[data-v-52d10460]{cursor:pointer;margin:0 2px;position:relative;height:100%}.hue-pointer[data-v-52d10460]{z-index:2;position:absolute;top:0}.hue-picker[data-v-52d10460]{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-a98797da],.saturation-white[data-v-a98797da],.saturation[data-v-a98797da]{position:absolute;top:0;left:0;right:0;bottom:0;cursor:pointer}.saturation-white[data-v-a98797da]{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.saturation-black[data-v-a98797da]{background:linear-gradient(0deg,#000,transparent)}.saturation-pointer[data-v-a98797da]{cursor:pointer;position:absolute}.saturation-circle[data-v-a98797da]{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-0311fdee]{width:100%;position:relative;overflow:hidden;text-align:center;font-size:14px}.input-content[data-v-0311fdee]{width:100%;padding:3px;border:0;border-bottom:1px solid #ddd;outline:none;text-align:center}.input-label[data-v-0311fdee]{text-transform:capitalize}.color-picker[data-v-4adab90a]{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-4adab90a]{width:100%;padding-bottom:50%;position:relative;overflow:hidden}.picker-controls[data-v-4adab90a]{display:flex}.picker-sliders[data-v-4adab90a]{padding:4px 0;flex:1}.picker-hue-wrap[data-v-4adab90a]{position:relative;height:10px}.picker-alpha-wrap[data-v-4adab90a]{position:relative;height:10px;margin-top:4px;overflow:hidden}.picker-color-wrap[data-v-4adab90a]{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-4adab90a]{background-size:auto}.picker-current-color[data-v-4adab90a]{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2}.picker-field[data-v-4adab90a]{margin-bottom:8px}.picker-presets[data-v-4adab90a]{display:flex;flex-wrap:wrap}.picker-presets-color[data-v-4adab90a]{width:7%;margin-bottom:3.33333%;height:0;padding-bottom:7%;flex-shrink:0;position:relative;cursor:pointer}.picker-presets-color[data-v-4adab90a]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-presets[data-v-4adab90a]{display:flex;flex-wrap:wrap}.picker-gradient-col[data-v-4adab90a]{width:7%;margin-bottom:3.33333%;display:flex;flex-direction:column}.picker-gradient-col[data-v-4adab90a]:not(:nth-child(10n)){margin-right:3.33333%}.picker-gradient-color[data-v-4adab90a]{width:100%;height:0;padding-bottom:100%;position:relative;cursor:pointer}.recent-colors-title[data-v-4adab90a]{font-size:12px;margin-bottom:4px}.recent-colors[data-v-4adab90a]{display:flex;flex-wrap:wrap} \ No newline at end of file diff --git a/index.html b/index.html index 7c129479..55b434b3 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.644735d7.js b/js/app.644735d7.js deleted file mode 100644 index 961be0d3..00000000 --- a/js/app.644735d7.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var o,r,l=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"}}],S={themeColor:"#5b9bd5",fontColor:"#333",fontName:"Microsoft Yahei",backgroundColor:"#fff"},C={activeElementIdList:[],handleElementId:"",activeGroupElementId:"",canvasPercentage:90,canvasScale:1,thumbnailsFocus:!1,editorAreaFocus:!1,disableHotkeys:!1,showGridLines:!1,creatingElement:null,availableFonts:[],toolbarState:"slideStyle",viewportRatio:.5625,theme:S,slides:I,slideIndex:0,selectedSlidesIndex:[],snapshotCursor:-1,snapshotLength:0,ctrlKeyState:!1,shiftKeyState:!1,screening:!1,clipingImageElementId:""},N=(n("d81d"),n("4de4"),n("caad"),n("2532"),n("7db0"),{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)}))},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&&(a.push(c[0]),l--),l>=2&&A.snapshots.update(c[l-2],{index:n.slideIndex}),t.next=15,A.snapshots.bulkDelete(a);case 15:o(y.SET_SNAPSHOT_CURSOR,l-1),o(y.SET_SNAPSHOT_LENGTH,l);case 17:case"end":return t.stop()}}),t)})))()})),Object(T["a"])(L,E.UN_DO,(function(e){return Object(x["a"])(regeneratorRuntime.mark((function t(){var n,o,c,a,r,l,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,A.snapshots.orderBy("id").toArray();case 6:a=t.sent,r=a[c],l=r.index,i=r.slides,u=l>i.length-1?i.length-1:l,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(T["a"])(L,E.RE_DO,(function(e){return Object(x["a"])(regeneratorRuntime.mark((function t(){var n,o,c,a,r,l,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,A.snapshots.orderBy("id").toArray();case 6:a=t.sent,r=a[c],l=r.index,i=r.slides,u=l>i.length-1?i.length-1:l,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)})))()})),L),R=n("2909"),F=n("5530"),H=(n("a434"),n("99af"),n("c740"),n("3eea")),z=n.n(H),U=[{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"}],G=[{label:"仓耳小丸子",value:"仓耳小丸子"},{label:"优设标题黑",value:"优设标题黑"},{label:"峰广明锐体",value:"峰广明锐体"},{label:"摄图摩登小方体",value:"摄图摩登小方体"},{label:"站酷快乐体",value:"站酷快乐体"},{label:"字制区喜脉体",value:"字制区喜脉体"},{label:"素材集市康康体",value:"素材集市康康体"},{label:"联盟起艺卢帅正锐黑体",value:"联盟起艺卢帅正锐黑体"},{label:"素材集市酷方体",value:"素材集市酷方体"},{label:"途牛类圆体",value:"途牛类圆体"},{label:"锐字真言体",value:"锐字真言体"},{label:"阿里汉仪智能黑体",value:"阿里汉仪智能黑体"}],q=(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,a="a",r=document.createElement("canvas"),l=r.getContext("2d");if(!l)return!1;r.width=o,r.height=c,l.textAlign="center",l.fillStyle="black",l.textBaseline="middle";var i=function(e){l.clearRect(0,0,o,c),l.font="".concat(n,"px ").concat(e,", ").concat(t),l.fillText(a,o/2,c/2);var r=l.getImageData(0,0,o,c).data;return[].slice.call(r).filter((function(e){return 0!==e}))};return i(t).join("")!==i(e).join("")}),X=(w={},Object(T["a"])(w,y.SET_ACTIVE_ELEMENT_ID_LIST,(function(e,t){1===t.length?e.handleElementId=t[0]:e.handleElementId="",e.activeElementIdList=t})),Object(T["a"])(w,y.SET_HANDLE_ELEMENT_ID,(function(e,t){e.handleElementId=t})),Object(T["a"])(w,y.SET_ACTIVE_GROUP_ELEMENT_ID,(function(e,t){e.activeGroupElementId=t})),Object(T["a"])(w,y.SET_CANVAS_PERCENTAGE,(function(e,t){e.canvasPercentage=t})),Object(T["a"])(w,y.SET_CANVAS_SCALE,(function(e,t){e.canvasScale=t})),Object(T["a"])(w,y.SET_THUMBNAILS_FOCUS,(function(e,t){e.thumbnailsFocus=t})),Object(T["a"])(w,y.SET_EDITORAREA_FOCUS,(function(e,t){e.editorAreaFocus=t})),Object(T["a"])(w,y.SET_DISABLE_HOTKEYS_STATE,(function(e,t){e.disableHotkeys=t})),Object(T["a"])(w,y.SET_GRID_LINES_STATE,(function(e,t){e.showGridLines=t})),Object(T["a"])(w,y.SET_CREATING_ELEMENT,(function(e,t){e.creatingElement=t})),Object(T["a"])(w,y.SET_AVAILABLE_FONTS,(function(e){e.availableFonts=U.filter((function(e){return q(e.value)}))})),Object(T["a"])(w,y.SET_TOOLBAR_STATE,(function(e,t){e.toolbarState=t})),Object(T["a"])(w,y.SET_CLIPING_IMAGE_ELEMENT_ID,(function(e,t){e.clipingImageElementId=t})),Object(T["a"])(w,y.SET_THEME,(function(e,t){e.theme=Object(F["a"])(Object(F["a"])({},e.theme),t)})),Object(T["a"])(w,y.SET_VIEWPORT_RATIO,(function(e,t){e.viewportRatio=t})),Object(T["a"])(w,y.SET_SLIDES,(function(e,t){e.slides=t})),Object(T["a"])(w,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(R["a"])(o))),e.slideIndex=c})),Object(T["a"])(w,y.UPDATE_SLIDE,(function(e,t){var n=e.slideIndex;e.slides[n]=Object(F["a"])(Object(F["a"])({},e.slides[n]),t)})),Object(T["a"])(w,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)},a=0;al&&(r=l),e.slideIndex=r,e.slides=e.slides.filter((function(e){return!n.includes(e.id)}))})),Object(T["a"])(w,y.UPDATE_SLIDE_INDEX,(function(e,t){e.slideIndex=t})),Object(T["a"])(w,y.UPDATE_SELECTED_SLIDES_INDEX,(function(e,t){e.selectedSlidesIndex=t})),Object(T["a"])(w,y.ADD_ELEMENT,(function(e,t){var n=Array.isArray(t)?t:[t],o=e.slides[e.slideIndex].elements,c=[].concat(Object(R["a"])(o),Object(R["a"])(n));e.slides[e.slideIndex].elements=c})),Object(T["a"])(w,y.UPDATE_ELEMENT,(function(e,t){var n=t.id,o=t.props,c="string"===typeof n?[n]:n,a=e.slideIndex,r=e.slides[a],l=r.elements.map((function(e){return c.includes(e.id)?Object(F["a"])(Object(F["a"])({},e),o):e}));e.slides[a].elements=l})),Object(T["a"])(w,y.REMOVE_ELEMENT_PROPS,(function(e,t){var n=t.id,o=t.propName,c="string"===typeof o?[o]:o,a=e.slideIndex,r=e.slides[a],l=r.elements.map((function(e){return e.id===n?z()(e,c):e}));e.slides[a].elements=l})),Object(T["a"])(w,y.SET_SNAPSHOT_CURSOR,(function(e,t){e.snapshotCursor=t})),Object(T["a"])(w,y.SET_SNAPSHOT_LENGTH,(function(e,t){e.snapshotLength=t})),Object(T["a"])(w,y.SET_CTRL_KEY_STATE,(function(e,t){e.ctrlKeyState=t})),Object(T["a"])(w,y.SET_SHIFT_KEY_STATE,(function(e,t){e.shiftKeyState=t})),Object(T["a"])(w,y.SET_SCREENING,(function(e,t){e.screening=t})),w),W=Symbol(),Y=Object(k["a"])({state:C,getters:N,mutations:X,actions:P}),Z=function(){return Object(k["b"])(W)},J=Object(j["withScopeId"])("data-v-55178b6a");Object(j["pushScopeId"])("data-v-55178b6a");var K={class:"pptist-editor"},Q={class:"layout-content"},$={class:"layout-content-center"};Object(j["popScopeId"])();var ee,te,ne,oe,ce,ae,re=J((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("EditorHeader"),l=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["createBlock"])("div",K,[Object(j["createVNode"])(r,{class:"layout-header"}),Object(j["createVNode"])("div",Q,[Object(j["createVNode"])(l,{class:"layout-content-left"}),Object(j["createVNode"])("div",$,[Object(j["createVNode"])(i,{class:"center-top"}),Object(j["createVNode"])(u,{class:"center-body",style:{height:"calc(100% - ".concat(e.remarkHeight+40,"px)")}},null,8,["style"]),Object(j["createVNode"])(d,{class:"center-bottom",height:e.remarkHeight,"onUpdate:height":t[1]||(t[1]=function(t){return e.remarkHeight=t}),style:{height:"".concat(e.remarkHeight,"px")}},null,8,["height","style"])]),Object(j["createVNode"])(s,{class:"layout-content-right"})])])}));(function(e){e["UP"]="up",e["DOWN"]="down",e["TOP"]="top",e["BOTTOM"]="bottom"})(ee||(ee={})),function(e){e["TOP"]="top",e["BOTTOM"]="bottom",e["LEFT"]="left",e["RIGHT"]="right",e["VERTICAL"]="vertical",e["HORIZONTAL"]="horizontal",e["CENTER"]="center"}(te||(te={})),function(e){e["T"]="top",e["B"]="bottom",e["L"]="left",e["R"]="right"}(ne||(ne={})),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"}(oe||(oe={})),function(e){e["START"]="start",e["END"]="end",e["MID"]="mid"}(ce||(ce={})),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"}(ae||(ae={}));var le=[{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:"Ctrl + B"},{label:"斜体",value:"Ctrl + I"},{label:"下划线",value:"Ctrl + U"},{label:"删除线",value:"Ctrl + D"}]}],ie=(n("3b18"),n("f64c")),ue=(n("a630"),n("3ca3"),n("4106")),de=n.n(ue),se=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6,t="_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",n=t.length,o="",c=0;cwe?(n=we,o=n*a):o>we*c.value&&(o=we*c.value,n=o/a),l({type:"image",id:se(),src:e,width:n,height:o,left:(we-n)/2,top:(we*c.value-o)/2,fixedRatio:!0,rotate:0})}))},u=function(e){l({type:"chart",id:se(),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]]}})},d=function(e,a){var r={fontname:o.value,color:n.value},i=new Array(a).fill({id:se(),colspan:1,rowspan:1,text:"",style:r}),u=new Array(e).fill(i),d=100,s=36,f=new Array(a).fill(1/a),p=a*d,b=e*s;l({type:"table",id:se(),width:p,height:b,colWidths:f,data:u,left:(we-p)/2,top:(we*c.value-b)/2,outline:{width:2,style:"solid",color:"#eeece1"},theme:{color:t.value,rowHeader:!0,rowFooter:!1,colHeader:!1,colFooter:!1}})},s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"请输入内容",c=e.left,a=e.top,r=e.width,i=e.height;l({type:"text",id:se(),left:c,top:a,width:r,height:i,content:t,rotate:0,defaultFontName:o.value,defaultColor:n.value})},f=function(e,n){var o=e.left,c=e.top,a=e.width,r=e.height;l({type:"shape",id:se(),left:o,top:c,width:a,height:r,viewBox:n.viewBox,path:n.path,fill:t.value,fixedRatio:!1,rotate:0})},p=function(e,n){var o=e.left,c=e.top,a=e.start,r=e.end,i={type:"line",id:se(),left:o,top:c,start:a,end:r,points:n.points,color:t.value,style:n.style,width:2};n.isBroken&&(i.broken=[(a[0]+r[0])/2,(a[1]+r[1])/2]),n.isCurve&&(i.curve=[(a[0]+r[0])/2,(a[1]+r[1])/2]),l(i)};return{createImageElement:i,createChartElement:u,createTableElement:d,createTextElement:s,createShapeElement:f,createLineElement:p}},_e=function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=Te(),o=n.addHistorySnapshot,c=Ve(),a=c.createTextElement,r=function(n){var c,a={},r={},l=Object(ke["a"])(n);try{for(l.s();!(c=l.n()).done;){var i=c.value,u=i.groupId;u&&!a[u]&&(a[u]=se()),r[i.id]=se()}}catch(m){l.e(m)}finally{l.f()}var d,s=t.value.elements.map((function(e){return e.id})),f=Object(ke["a"])(n);try{for(f.s();!(d=f.n()).done;){var p=d.value,b=s.includes(p.id);p.id=r[p.id],b&&(p.left=p.left+10,p.top=p.top+10),p.groupId&&(p.groupId=a[p.groupId])}}catch(m){f.e(m)}finally{f.f()}e.commit(y.ADD_ELEMENT,n),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,Object.values(r)),o()},l=function(t){var n=t.map((function(e){return Object(F["a"])(Object(F["a"])({},e),{},{id:se(8)})}));e.commit(y.ADD_SLIDE,n),o()},i=function(e){a({left:0,top:0,width:600,height:50},e)},u=function(e,t){var n,o=(null===t||void 0===t?void 0:t.onlySlide)||!1,c=(null===t||void 0===t?void 0:t.onlyElements)||!1;try{n=JSON.parse(ye(e))}catch(s){n=e}if("object"===Object(Ee["a"])(n)){var a=n,u=a.type,d=a.data;"elements"!==u||o?"slides"!==u||c||l(d):r(d)}else c||o||i(n)};return{pasteTextClipboardData:u}},Be=function(){var e=Z(),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})),a=Object(j["computed"])((function(){return[].concat(Object(R["a"])(e.state.selectedSlidesIndex),[t.value])})),r=Object(j["computed"])((function(){return o.value.filter((function(e,t){return a.value.includes(t)}))})),l=Object(j["computed"])((function(){return r.value.map((function(e){return e.id}))})),i=_e(),u=i.pasteTextClipboardData,d=Te(),s=d.addHistorySnapshot,f=function(){var t={id:se(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])},p=function(n){n===ae.UP&&t.value>0?e.commit(y.UPDATE_SLIDE_INDEX,t.value-1):n===ae.DOWN&&t.value0&&void 0!==arguments[0]?arguments[0]:l.value;o.value.length===t.length?f():e.commit(y.DELETE_SLIDE,t),e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,[]),s()},g=function(){var e=Object(R["a"])(l.value);b(),h(e)},E=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:f,updateSlideIndex:p,copySlide:b,pasteSlide:m,createSlide:v,copyAndPasteSlide:O,deleteSlide:h,cutSlide:g,selectAllSlide:E}},De=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=Te(),c=o.addHistorySnapshot,a=function(){var o,a=JSON.parse(JSON.stringify(n.value.elements)),r=Object(ke["a"])(a);try{for(r.s();!(o=r.n()).done;){var l=o.value;t.value.includes(l.id)&&(l.lock=!0)}}catch(i){r.e(i)}finally{r.f()}e.commit(y.UPDATE_SLIDE,{elements:a}),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),c()},r=function(t){var o=JSON.parse(JSON.stringify(n.value.elements));if(t.groupId){var a,r=Object(ke["a"])(o);try{for(r.s();!(a=r.n()).done;){var l=a.value;l.groupId===t.groupId&&(l.lock=!1)}}catch(s){r.e(s)}finally{r.f()}return o}var i,u=Object(ke["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:a,unlockElement:r}},Me=function(){var e=Z(),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=Te(),a=c.addHistorySnapshot,r=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}),a()}},l=function(){o.value.elements.length&&(e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SLIDE,{elements:[]}),a())};return{deleteElement:r,deleteAllElements:l}},Ae=function(){var e=Z(),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})),a=Te(),r=a.addHistorySnapshot,l=function(){var c;if(n.value.length){var a,l=JSON.parse(JSON.stringify(o.value.elements)),i=se(),u=[],d=Object(ke["a"])(l);try{for(d.s();!(a=d.n()).done;){var s=a.value;t.value.includes(s.id)&&(s.groupId=i,u.push(s))}}catch(m){d.e(m)}finally{d.f()}var f=l.findIndex((function(e){return e.id===u[u.length-1].id})),p=u.map((function(e){return e.id}));l=l.filter((function(e){return!p.includes(e.id)}));var b=f-u.length+1;(c=l).splice.apply(c,[b,0].concat(u)),e.commit(y.UPDATE_SLIDE,{elements:l}),r()}},i=function(){if(n.value.length){var a=n.value.some((function(e){return e.groupId}));if(a){var l,i=JSON.parse(JSON.stringify(o.value.elements)),u=Object(ke["a"])(i);try{for(u.s();!(l=u.n()).done;){var d=l.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),r()}}};return{combineElements:l,uncombineElements:i}},Pe=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=_e(),c=o.pasteTextClipboardData,a=Me(),r=a.deleteElement,l=function(){if(t.value.length){var o=ge(JSON.stringify({type:"elements",data:n.value}));me(o).then((function(){e.commit(y.SET_EDITORAREA_FOCUS,!0)}))}},i=function(){l(),r()},u=function(){ve().then((function(e){c(e)})).catch((function(e){return ie["a"].warning(e)}))},d=function(){l(),u()};return{copyElement:l,cutElement:i,pasteElement:u,quickCopyElement:d}},Re=function(){var e=Z(),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}},Fe=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=Te(),c=o.addHistorySnapshot,a=function(o){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=n.value.elements.map((function(e){if(t.value.includes(e.id)){var n=e.left,c=e.top;switch(o){case ae.LEFT:n-=a;break;case ae.RIGHT:n+=a;break;case ae.UP:c-=a;break;case ae.DOWN:c+=a;break;default:break}return Object(F["a"])(Object(F["a"])({},e),{},{left:n,top:c})}return e}));e.commit(y.UPDATE_SLIDE,{elements:r}),c()};return{moveElement:a}},He=function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=Te(),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}))}},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})),a=c(e,o),r=a.minLevel,l=a.maxLevel;if(l===e.length-1)return;var i=n[l+1],u=n.splice(r,o.length);if(i.groupId){var d=n.filter((function(e){return e.groupId===i.groupId}));n.splice.apply(n,[r+d.length,0].concat(Object(R["a"])(u)))}else n.splice.apply(n,[r+1,0].concat(Object(R["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 b=n.filter((function(e){return e.groupId===f.groupId}));n.splice(s+b.length,0,p)}else n.splice(s+1,0,p)}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})),a=c(e,o),r=a.minLevel;if(0===r)return;var l=n[r-1],i=n.splice(r,o.length);if(l.groupId){var u=n.filter((function(e){return e.groupId===l.groupId}));n.splice.apply(n,[r-u.length,0].concat(Object(R["a"])(i)))}else n.splice.apply(n,[r-1,0].concat(Object(R["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},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})),a=c(e,o),r=a.minLevel,l=a.maxLevel;if(l===e.length-1)return null;var i=n.splice(r,o.length);n.push.apply(n,Object(R["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})),a=c(e,o),r=a.minLevel;if(0===r)return;var l=n.splice(r,o.length);n.unshift.apply(n,Object(R["a"])(l))}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===ee.UP?u=a(t.value.elements,n):c===ee.DOWN?u=r(t.value.elements,n):c===ee.TOP?u=l(t.value.elements,n):c===ee.BOTTOM&&(u=i(t.value.elements,n)),u&&(e.commit(y.UPDATE_SLIDE,{elements:u}),o())};return{orderElement:u}},ze=function(){var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen&&e.webkitRequestFullScreen()},Ue=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},Ge=function(){return document.mozFullScreen||document.webkitIsFullScreen||document.webkitFullScreen},qe=function(){var e=Z(),t=function(){ze(),e.commit(y.SET_SCREENING,!0)},n=function(){e.commit(y.UPDATE_SLIDE_INDEX,0),t()},o=function(){e.commit(y.SET_SCREENING,!1),Ge()&&Ue()};return{enterScreening:t,enterScreeningFromStart:n,exitScreening:o}},Xe=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.canvasPercentage})),n=function(n){var o=t.value,c=5,a=120,r=60;"+"===n&&o<=a&&(o+=c),"-"===n&&o>=r&&(o-=c),e.commit(y.SET_CANVAS_PERCENTAGE,o)},o=function(t){e.commit(y.SET_CANVAS_PERCENTAGE,t)};return{scaleCanvas:n,setCanvasPercentage:o}},We=function(){var e=Z(),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})),a=Object(j["computed"])((function(){return e.getters.handleElement})),r=Object(j["computed"])((function(){return e.getters.currentSlide})),l=Object(j["computed"])((function(){return e.state.editorAreaFocus})),i=Object(j["computed"])((function(){return e.state.thumbnailsFocus})),u=Be(),d=u.updateSlideIndex,s=u.copySlide,f=u.createSlide,p=u.deleteSlide,b=u.cutSlide,m=u.copyAndPasteSlide,v=u.selectAllSlide,O=Ae(),h=O.combineElements,g=O.uncombineElements,E=Me(),k=E.deleteElement,I=De(),S=I.lockElement,C=Pe(),N=C.copyElement,T=C.cutElement,x=C.quickCopyElement,L=Re(),w=L.selectAllElement,V=Fe(),_=V.moveElement,B=He(),D=B.orderElement,M=Te(),A=M.redo,P=M.undo,R=qe(),F=R.enterScreening,H=Xe(),z=H.scaleCanvas,U=H.setCanvasPercentage,G=function(){c.value.length?N():i.value&&s()},q=function(){c.value.length?T():i.value&&b()},X=function(){c.value.length?x():i.value&&m()},W=function(){l.value&&w(),i.value&&v()},Y=function(){l.value&&S()},J=function(){l.value&&h()},K=function(){l.value&&g()},Q=function(){c.value.length?k():i.value&&p()},$=function(e){c.value.length?_(e):e!==ae.UP&&e!==ae.DOWN||d(e)},te=function(e){a.value&&D(a.value,e)},ne=function(){i.value&&f()},oe=function(){if(r.value.elements.length)if(a.value){var t=r.value.elements.findIndex((function(e){return e.id===a.value.id})),n=t>=r.value.elements.length-1?0:t+1,o=r.value.elements[n].id;e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[o])}else{var c=r.value.elements[0];e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[c.id])}},ce=function(c){var a=c.ctrlKey,r=c.shiftKey,u=c.altKey,d=c.metaKey,s=a||d,f=c.key.toUpperCase();if(s&&!t.value&&e.commit(y.SET_CTRL_KEY_STATE,!0),r&&!n.value&&e.commit(y.SET_SHIFT_KEY_STATE,!0),s&&f===ae.F&&(c.preventDefault(),F(),e.commit(y.SET_CTRL_KEY_STATE,!1)),l.value||i.value){if(s&&f===ae.C){if(o.value)return;c.preventDefault(),G()}if(s&&f===ae.X){if(o.value)return;c.preventDefault(),q()}if(s&&f===ae.D){if(o.value)return;c.preventDefault(),X()}if(s&&f===ae.Z){if(o.value)return;c.preventDefault(),P()}if(s&&f===ae.Y){if(o.value)return;c.preventDefault(),A()}if(s&&f===ae.A){if(o.value)return;c.preventDefault(),W()}if(s&&f===ae.L){if(o.value)return;c.preventDefault(),Y()}if(!r&&s&&f===ae.G){if(o.value)return;c.preventDefault(),J()}if(r&&s&&f===ae.G){if(o.value)return;c.preventDefault(),K()}if(u&&f===ae.F){if(o.value)return;c.preventDefault(),te(ee.TOP)}if(u&&f===ae.B){if(o.value)return;c.preventDefault(),te(ee.BOTTOM)}if(f===ae.DELETE||f===ae.BACKSPACE){if(o.value)return;c.preventDefault(),Q()}if(f===ae.UP){if(o.value)return;c.preventDefault(),$(ae.UP)}if(f===ae.DOWN){if(o.value)return;c.preventDefault(),$(ae.DOWN)}if(f===ae.LEFT){if(o.value)return;c.preventDefault(),$(ae.LEFT)}if(f===ae.RIGHT){if(o.value)return;c.preventDefault(),$(ae.RIGHT)}if(f===ae.ENTER){if(o.value)return;c.preventDefault(),ne()}if(f===ae.MINUS){if(o.value)return;c.preventDefault(),z("-")}if(f===ae.EQUAL){if(o.value)return;c.preventDefault(),z("+")}if(f===ae.DIGIT_0){if(o.value)return;c.preventDefault(),U(90)}if(f===ae.TAB){if(o.value)return;c.preventDefault(),oe()}}},re=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",ce),document.addEventListener("keyup",re),window.addEventListener("blur",re)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",ce),document.removeEventListener("keyup",re),window.removeEventListener("blur",re)}))},Ye=function(){var e=Z(),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=_e(),a=c.pasteTextClipboardData,r=Ve(),l=r.createImageElement,i=function(e){Le(e).then((function(e){return l(e)}))},u=function(e){if((t.value||n.value)&&!o.value&&e.clipboardData){var c=e.clipboardData.items,r=c[0];if(r){var l,u=Object(ke["a"])(c);try{for(u.s();!(l=u.n()).done;){var d=l.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"===r.kind&&"text/plain"===r.type&&r.getAsString((function(e){return a(e)}))}}};Object(j["onMounted"])((function(){document.addEventListener("paste",u)})),Object(j["onUnmounted"])((function(){document.removeEventListener("paste",u)}))},Ze=Object(j["withScopeId"])("data-v-ecea6ffc");Object(j["pushScopeId"])("data-v-ecea6ffc");var Je={class:"editor-header"},Ke={class:"left"},Qe={class:"menu-item"},$e=Object(j["createTextVNode"])(),et=Object(j["createVNode"])("span",{class:"text"},"编辑",-1),tt=Object(j["createTextVNode"])("撤销"),nt=Object(j["createTextVNode"])("重做"),ot=Object(j["createTextVNode"])("添加页面"),ct=Object(j["createTextVNode"])("删除页面"),at=Object(j["createTextVNode"])("重置幻灯片"),rt=Object(j["createTextVNode"])("导出 JSON"),lt={class:"menu-item"},it=Object(j["createTextVNode"])(),ut=Object(j["createVNode"])("span",{class:"text"},"演示",-1),dt=Object(j["createTextVNode"])("从头开始"),st=Object(j["createTextVNode"])("从当前页开始"),ft={class:"menu-item"},pt=Object(j["createTextVNode"])(),bt=Object(j["createVNode"])("span",{class:"text"},"帮助",-1),mt=Object(j["createTextVNode"])("快捷键"),vt={class:"right"},Ot={href:"https://github.com/pipipi-pikachu/PPTist",target:"_blank"},ht={class:"menu-item"};Object(j["popScopeId"])();var jt=Ze((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconEdit"),l=Object(j["resolveComponent"])("MenuItem"),i=Object(j["resolveComponent"])("Menu"),u=Object(j["resolveComponent"])("Dropdown"),d=Object(j["resolveComponent"])("IconPpt"),s=Object(j["resolveComponent"])("IconHelpcenter"),f=Object(j["resolveComponent"])("Tooltip"),p=Object(j["resolveComponent"])("IconGithub"),b=Object(j["resolveComponent"])("HotkeyDoc"),m=Object(j["resolveComponent"])("Drawer"),v=Object(j["resolveComponent"])("ExportDialog"),O=Object(j["resolveComponent"])("Modal");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Je,[Object(j["createVNode"])("div",Ke,[Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Ze((function(){return[Object(j["createVNode"])(i,null,{default:Ze((function(){return[Object(j["createVNode"])(l,{onClick:t[1]||(t[1]=function(t){return e.undo()})},{default:Ze((function(){return[tt]})),_:1}),Object(j["createVNode"])(l,{onClick:t[2]||(t[2]=function(t){return e.redo()})},{default:Ze((function(){return[nt]})),_:1}),Object(j["createVNode"])(l,{onClick:t[3]||(t[3]=function(t){return e.createSlide()})},{default:Ze((function(){return[ot]})),_:1}),Object(j["createVNode"])(l,{onClick:t[4]||(t[4]=function(t){return e.deleteSlide()})},{default:Ze((function(){return[ct]})),_:1}),Object(j["createVNode"])(l,{onClick:t[5]||(t[5]=function(t){return e.toggleGridLines()})},{default:Ze((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e.showGridLines?"关闭网格线":"打开网格线"),1)]})),_:1}),Object(j["createVNode"])(l,{onClick:t[6]||(t[6]=function(t){return e.resetSlides()})},{default:Ze((function(){return[at]})),_:1}),Object(j["createVNode"])(l,{onClick:t[7]||(t[7]=function(t){return e.exportDialogVisible=!0})},{default:Ze((function(){return[rt]})),_:1})]})),_:1})]})),default:Ze((function(){return[Object(j["createVNode"])("div",Qe,[Object(j["createVNode"])(r),$e,et])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Ze((function(){return[Object(j["createVNode"])(i,null,{default:Ze((function(){return[Object(j["createVNode"])(l,{onClick:t[8]||(t[8]=function(t){return e.enterScreeningFromStart()})},{default:Ze((function(){return[dt]})),_:1}),Object(j["createVNode"])(l,{onClick:t[9]||(t[9]=function(t){return e.enterScreening()})},{default:Ze((function(){return[st]})),_:1})]})),_:1})]})),default:Ze((function(){return[Object(j["createVNode"])("div",lt,[Object(j["createVNode"])(d),it,ut])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Ze((function(){return[Object(j["createVNode"])(i,null,{default:Ze((function(){return[Object(j["createVNode"])(l,{onClick:t[10]||(t[10]=function(t){return e.hotkeyDrawerVisible=!0})},{default:Ze((function(){return[mt]})),_:1})]})),_:1})]})),default:Ze((function(){return[Object(j["createVNode"])("div",ft,[Object(j["createVNode"])(s),pt,bt])]})),_:1})]),Object(j["createVNode"])("div",vt,[Object(j["createVNode"])(f,{mouseLeaveDelay:0,title:"幻灯片放映"},{default:Ze((function(){return[Object(j["createVNode"])("div",{class:"menu-item",onClick:t[11]||(t[11]=function(t){return e.enterScreening()})},[Object(j["createVNode"])(d,{size:"18",fill:"#666",style:{"margin-top":"2px"}})])]})),_:1}),Object(j["createVNode"])("a",Ot,[Object(j["createVNode"])("div",ht,[Object(j["createVNode"])(p,{size:"18",fill:"#666"})])])]),Object(j["createVNode"])(m,{width:"320",placement:"right",visible:e.hotkeyDrawerVisible,onClose:t[12]||(t[12]=function(t){return e.hotkeyDrawerVisible=!1})},{default:Ze((function(){return[Object(j["createVNode"])(b)]})),_:1},8,["visible"]),Object(j["createVNode"])(O,{visible:e.exportDialogVisible,"onUpdate:visible":t[14]||(t[14]=function(t){return e.exportDialogVisible=t}),footer:null,centered:"",closable:!1,width:680,destroyOnClose:""},{default:Ze((function(){return[Object(j["createVNode"])(v,{onClose:t[13]||(t[13]=function(t){return e.exportDialogVisible=!1})})]})),_:1},8,["visible"])])})),gt=Object(j["withScopeId"])("data-v-47d0351b");Object(j["pushScopeId"])("data-v-47d0351b");var yt={class:"hotkey-doc"},Et={class:"title"},kt={class:"label"},It={class:"value"};Object(j["popScopeId"])();var St=gt((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",yt,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.hotkeys,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:e.type},[Object(j["createVNode"])("div",Et,Object(j["toDisplayString"])(e.type),1),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.children,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"hotkey-item",key:e.label},[Object(j["createVNode"])("div",kt,Object(j["toDisplayString"])(e.label),1),Object(j["createVNode"])("div",It,Object(j["toDisplayString"])(e.value),1)])})),128))],64)})),128))])})),Ct=le,Nt=Object(j["defineComponent"])({name:"hotkey-doc",setup:function(){return{hotkeys:Ct}}});n("ef0f");Nt.render=St,Nt.__scopeId="data-v-47d0351b";var Tt=Nt,xt=Object(j["withScopeId"])("data-v-a69a4592");Object(j["pushScopeId"])("data-v-a69a4592");var Lt={class:"export-dialog"},wt={class:"preview"},Vt={class:"handle"},_t=Object(j["createTextVNode"])("导出"),Bt=Object(j["createTextVNode"])("关闭");Object(j["popScopeId"])();var Dt=xt((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Lt,[Object(j["createVNode"])("div",wt,[Object(j["createVNode"])("pre",null,Object(j["toDisplayString"])(e.slides),1)]),Object(j["createVNode"])("div",Vt,[Object(j["createVNode"])(r,{class:"btn",type:"primary",onClick:t[1]||(t[1]=function(t){return e.exportJSON()})},{default:xt((function(){return[_t]})),_:1}),Object(j["createVNode"])(r,{class:"btn",onClick:t[2]||(t[2]=function(t){return e.emit("close")})},{default:xt((function(){return[Bt]})),_:1})])])})),Mt=n("21a6"),At=Object(j["defineComponent"])({name:"export-dialog",setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.state.slides})),a=function(){var e=new Blob([JSON.stringify(c.value)],{type:""});Object(Mt["saveAs"])(e,"pptist_slides.json")};return{slides:c,exportJSON:a,emit:n}}});n("d1f3");At.render=Dt,At.__scopeId="data-v-a69a4592";var Pt=At,Rt=Object(j["defineComponent"])({name:"editor-header",components:{HotkeyDoc:Tt,ExportDialog:Pt},setup:function(){var e=Z(),t=qe(),n=t.enterScreening,o=t.enterScreeningFromStart,c=Be(),a=c.createSlide,r=c.deleteSlide,l=c.resetSlides,i=Te(),u=i.redo,d=i.undo,s=Object(j["computed"])((function(){return e.state.showGridLines})),f=function(){e.commit(y.SET_GRID_LINES_STATE,!s.value)},p=Object(j["ref"])(!1),b=Object(j["ref"])(!1);return{enterScreening:n,enterScreeningFromStart:o,createSlide:a,deleteSlide:r,redo:u,undo:d,toggleGridLines:f,showGridLines:s,resetSlides:l,hotkeyDrawerVisible:p,exportDialogVisible:b}}});n("8872");Rt.render=jt,Rt.__scopeId="data-v-ecea6ffc";var Ft=Rt,Ht=Object(j["withScopeId"])("data-v-fb6f9726");Object(j["pushScopeId"])("data-v-fb6f9726");var zt={class:"operates"};Object(j["popScopeId"])();var Ut,Gt=Ht((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementCreateSelection"),l=Object(j["resolveComponent"])("AlignmentLine"),i=Object(j["resolveComponent"])("MultiSelectOperate"),u=Object(j["resolveComponent"])("Operate"),d=Object(j["resolveComponent"])("ViewportBackground"),s=Object(j["resolveComponent"])("MouseSelection"),f=Object(j["resolveComponent"])("EditableElement"),p=Object(j["resolveDirective"])("contextmenu"),b=Object(j["resolveDirective"])("click-outside");return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"canvas",ref:"canvasRef",onMousewheel:t[2]||(t[2]=function(t){return e.handleMousewheelCanvas(t)}),onMousedown:t[3]||(t[3]=function(t){return e.handleClickBlankArea(t)})},[e.creatingElement?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,onCreated:t[1]||(t[1]=function(t){return e.insertElementFromCreateSelection(t)})})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",{class:"viewport-wrapper",style:{width:e.viewportStyles.width*e.canvasScale+"px",height:e.viewportStyles.height*e.canvasScale+"px",left:e.viewportStyles.left+"px",top:e.viewportStyles.top+"px"}},[Object(j["createVNode"])("div",zt,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.alignmentLines,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:t,type:e.type,axis:e.axis,length:e.length},null,8,["type","axis","length"])})),128)),e.activeElementIdList.length>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["createBlock"])(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,dragLineElement:e.dragLineElement},null,8,["elementInfo","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","dragLineElement"])})),128)),Object(j["createVNode"])(d)]),Object(j["createVNode"])("div",{class:"viewport",ref:"viewportRef",style:{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["createBlock"])(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},null,8,["elementInfo","elementIndex","isMultiSelect","selectElement"])})),128))],4)],4)],544)),[[p,e.contextmenus],[b,e.removeEditorAreaFocus]])})),qt=function(){var e=window.getSelection();e&&e.removeAllRanges()},Xt=function(e){var t=Object(j["ref"])(0),n=Object(j["ref"])(0),o=Z(),c=Object(j["computed"])((function(){return o.state.canvasPercentage})),a=Object(j["computed"])((function(){return o.state.viewportRatio})),r=function(){if(e.value){var r=e.value.clientWidth,l=e.value.clientHeight;if(l/r>a.value){var i=r*(c.value/100);o.commit(y.SET_CANVAS_SCALE,i/we),t.value=(r-i)/2,n.value=(l-i*a.value)/2}else{var u=l*(c.value/100);o.commit(y.SET_CANVAS_SCALE,u/(we*a.value)),t.value=(r-u/a.value)/2,n.value=(l-u)/2}}};Object(j["watch"])([c,a],r);var l=Object(j["computed"])((function(){return{width:we,height:we*a.value,left:t.value,top:n.value}})),i=new ResizeObserver(r);return Object(j["onMounted"])((function(){e.value&&i.observe(e.value)})),Object(j["onUnmounted"])((function(){e.value&&i.unobserve(e.value)})),{viewportStyles:l}},Wt=(n("159b"),function(e){var t=e.left,n=e.top,o=e.width,c=e.height,a=e.rotate,r=void 0===a?0:a,l=Math.sqrt(Math.pow(o,2)+Math.pow(c,2))/2,i=180*Math.atan(c/o)/Math.PI,u=(180-r-i)*Math.PI/180,d=(i-r)*Math.PI/180,s=t+o/2,f=n+c/2,p=[s+l*Math.cos(u),s+l*Math.cos(d),s-l*Math.cos(u),s-l*Math.cos(d)],b=[f-l*Math.sin(u),f-l*Math.sin(d),f+l*Math.sin(u),f+l*Math.sin(d)];return{xRange:[Math.min.apply(Math,p),Math.max.apply(Math,p)],yRange:[Math.min.apply(Math,b),Math.max.apply(Math,b)]}}),Yt=function(e){var t=Wt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:0}),n=t.xRange,o=t.yRange,c=Wt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.xRange,r=c.yRange;return{offsetX:a[0]-n[0],offsetY:r[0]-o[0]}},Zt=function(e){var t,n,o,c;if("line"===e.type)t=e.left,n=e.left+Math.max(e.start[0],e.end[0]),o=e.top,c=e.top+Math.max(e.start[1],e.end[1]);else if("rotate"in e&&e.rotate){var a=e.left,r=e.top,l=e.width,i=e.height,u=e.rotate,d=Wt({left:a,top:r,width:l,height:i,rotate:u}),s=d.xRange,f=d.yRange;t=s[0],n=s[1],o=f[0],c=f[1]}else t=e.left,n=e.left+e.width,o=e.top,c=e.top+e.height;return{minX:t,maxX:n,minY:o,maxY:c}},Jt=function(e){var t=[],n=[],o=[],c=[];e.forEach((function(e){var a=Zt(e),r=a.minX,l=a.maxX,i=a.minY,u=a.maxY;t.push(r),n.push(i),o.push(l),c.push(u)}));var a=Math.min.apply(Math,t),r=Math.max.apply(Math,o),l=Math.min.apply(Math,n),i=Math.max.apply(Math,c);return{minX:a,maxX:r,minY:l,maxY:i}},Kt=function(e){var t=[];return e.forEach((function(e){var n=t.findIndex((function(t){return t.value===e.value}));if(-1===n)t.push(e);else{var o=t[n],c=Math.min(o.range[0],e.range[0]),a=Math.max(o.range[1],e.range[1]),r=[c,a],l={value:e.value,range:r};t[n]=l}})),t},Qt=function(e,t){var n=Z(),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}),a=function(a){if(t.value){var r=!0,l=t.value.getBoundingClientRect(),i=5,u=a.pageX,d=a.pageY,s=(u-l.x)/o.value,f=(d-l.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(r){var t=e.pageX,n=e.pageY,a=(t-u)/o.value,l=(n-d)/o.value,s=Math.abs(a),f=Math.abs(l);if(!(s0&&l>0?p=4:a<0&&l<0?p=1:a>0&&l<0?p=2:a<0&&l>0&&(p=3),c.isShow=!0,c.quadrant=p,c.width=s,c.height=f}}},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null,r=!1;for(var t=[],o=0;ol&&bi&&vl-u&&bi-d&&vl&&bi-d&&vl-u&&bi&&v0&&Math.abs(l-45)<=d?l-=l-45:l<0&&Math.abs(l+45)<=d?l-=l+45:l>0&&Math.abs(l-90)<=d?l-=l-90:l<0&&Math.abs(l+90)<=d?l-=l+90:l>0&&Math.abs(l-135)<=d?l-=l-135:l<0&&Math.abs(l+135)<=d?l-=l+135:l>0&&Math.abs(l-180)<=d?l-=l-180:l<0&&Math.abs(l+180)<=d&&(l-=l+180),e.value=e.value.map((function(e){return c.id===e.id?Object(F["a"])(Object(F["a"])({},e),{},{rotate:l}):e}))}},document.onmouseup=function(){r=!1,document.onmousemove=null,document.onmouseup=null,i!==l&&(n.commit(y.UPDATE_SLIDE,{elements:e.value}),a())}}};return{rotateElement:r}},nn=n("14b7");(function(e){e["UPDATE_TEXT_STATE"]="UPDATE_TEXT_STATE",e["EXEC_TEXT_COMMAND"]="EXEC_TEXT_COMMAND",e["UPDATE_TABLE_SELECTED_CELL"]="UPDATE_TABLE_SELECTED_CELL",e["SCALE_ELEMENT_STATE"]="SCALE_ELEMENT_STATE"})(Ut||(Ut={}));var on=Object(nn["a"])(),cn=on,an={text:"文本",image:"图片",shape:"形状",line:"线条",chart:"图表",table:"表格"},rn={text:20,image:20,shape:15,chart:200,table:20},ln=function(e,t){var n=e.left,o=e.top,c=e.width,a=e.height,r=Math.sqrt(Math.pow(c,2)+Math.pow(a,2))/2,l=180*Math.atan(a/c)/Math.PI,i=(180-t-l)*Math.PI/180,u=(l-t)*Math.PI/180,d=(90-t)*Math.PI/180,s=t*Math.PI/180,f=c/2,p=a/2,b=n+f,m=o+p,v={left:b+r*Math.cos(i),top:m-r*Math.sin(i)},O={left:b+p*Math.cos(d),top:m-p*Math.sin(d)},h={left:b+r*Math.cos(u),top:m-r*Math.sin(u)},j={left:b+f*Math.cos(s),top:m+f*Math.sin(s)},g={left:b-r*Math.cos(i),top:m+r*Math.sin(i)},y={left:b-p*Math.sin(s),top:m+p*Math.cos(s)},E={left:b-r*Math.cos(u),top:m+r*Math.sin(u)},k={left:b-f*Math.cos(s),top:m-f*Math.sin(s)};return{leftTopPoint:v,topPoint:O,rightTopPoint:h,rightPoint:j,rightBottomPoint:g,bottomPoint:y,leftBottomPoint:E,leftPoint:k}},un=function(e,t){var n,o=(n={},Object(T["a"])(n,oe.RIGHT_BOTTOM,t.leftTopPoint),Object(T["a"])(n,oe.LEFT_BOTTOM,t.rightTopPoint),Object(T["a"])(n,oe.LEFT_TOP,t.rightBottomPoint),Object(T["a"])(n,oe.RIGHT_TOP,t.leftBottomPoint),Object(T["a"])(n,oe.TOP,t.bottomPoint),Object(T["a"])(n,oe.BOTTOM,t.topPoint),Object(T["a"])(n,oe.LEFT,t.rightPoint),Object(T["a"])(n,oe.RIGHT,t.leftPoint),n);return o[e]},dn=function(e,t){var n=Z(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),a=Object(j["computed"])((function(){return n.state.canvasScale})),r=Object(j["computed"])((function(){return n.state.viewportRatio})),l=Object(j["computed"])((function(){return n.getters.ctrlOrShiftKeyActive})),i=Te(),u=i.addHistorySnapshot,d=function(i,d,s){var f=!0;cn.emit(Ut.SCALE_ELEMENT_STATE,!0);var p,b=d.left,m=d.top,v=d.width,O=d.height,h="rotate"in d&&d.rotate?d.rotate:0,j=Math.PI*h/180,g=l.value||"fixedRatio"in d&&d.fixedRatio,E=v/O,k=i.pageX,I=i.pageY,S=rn[d.type]||20,C=function(e){return e2&&void 0!==arguments[2])||arguments[2];if(r.value||n.commit(y.SET_EDITORAREA_FOCUS,!0),o.value.includes(u.id)){if(l.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(a.value!==u.id){var p=i.pageX,b=i.pageY;i.target.onmouseup=function(e){var t=e.pageX,o=e.pageY;p===t&&b===o&&(n.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,u.id),e.target.onmouseup=null)}}}else{var m=[];if(m=l.value?[].concat(Object(R["a"])(o.value),[u.id]):[u.id],u.groupId){var v=[];e.value.forEach((function(e){e.groupId===u.groupId&&v.push(e.id)})),m=[].concat(Object(R["a"])(m),v)}n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,fn()(m)),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}},bn=function(e,t){var n=Z(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),a=Object(j["computed"])((function(){return n.state.canvasScale})),r=Object(j["computed"])((function(){return n.state.viewportRatio})),l=Te(),i=l.addHistorySnapshot,u=function(l,u){if(o.value.includes(u.id)){var d,s=!0,f=we,p=we*r.value,b=5,m=JSON.parse(JSON.stringify(e.value)),v=m.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,k=l.pageX,I=l.pageY,S=null,C=u.id===c.value,N=[],T=[],x=Object(ke["a"])(e.value);try{for(x.s();!(d=x.n()).done;){var L=d.value;if("line"!==L.type&&((!C||L.id!==u.id)&&(C||!o.value.includes(L.id)))){var w=void 0,V=void 0,_=void 0,B=void 0;if("rotate"in L&&L.rotate){var D=Wt({left:L.left,top:L.top,width:L.width,height:L.height,rotate:L.rotate}),M=D.xRange,A=D.yRange;w=M[0],V=A[0],_=M[1]-M[0],B=A[1]-A[0]}else w=L.left,V=L.top,_=L.width,B=L.height;var P=w+_,H=V+B,z=V+B/2,U=w+_/2,G={value:V,range:[w,P]},q={value:H,range:[w,P]},X={value:z,range:[w,P]},W={value:w,range:[V,H]},Y={value:P,range:[V,H]},Z={value:U,range:[V,H]};N.push(G,q,X),T.push(W,Y,Z)}}}catch(ne){x.e(ne)}finally{x.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=Kt(N),T=Kt(T),document.onmousemove=function(n){var c=n.pageX,r=n.pageY;if(!1!==S&&(S=Math.abs(k-c)v&&(D[0]=_-w,M[0]=0),m>O&&(D[1]=B-V,M[1]=0),e.value=e.value.map((function(e){if(e.id===a.id){var t=Object(F["a"])(Object(F["a"])({},e),{},{left:w,top:V,start:D,end:M});return r!==ce.MID?(a.broken&&(t.broken=[(D[0]+M[0])/2,(D[1]+M[1])/2]),a.curve&&(t.curve=[(D[0]+M[0])/2,(D[1]+M[1])/2])):(a.broken&&(t.broken=[j-w,g-V]),a.curve&&(t.curve=[j-w,g-V])),t}return e}))}},document.onmouseup=function(n){l=!1,document.onmousemove=null,document.onmouseup=null;var o=n.pageX,a=n.pageY;u===o&&d===a||(t.commit(y.UPDATE_SLIDE,{elements:e.value}),c())}};return{dragLineElement:a}},vn=n("3835"),On=function(e){var t=Z(),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 a=e.value.getBoundingClientRect(),r=Object(vn["a"])(o,2),l=r[0],i=r[1],u=Object(vn["a"])(c,2),d=u[0],s=u[1],f=Math.min(l,d),p=Math.max(l,d),b=Math.min(i,s),m=Math.max(i,s),v=(f-a.x)/n.value,O=(b-a.y)/n.value,h=(p-f)/n.value,j=(m-b)/n.value;return{left:v,top:O,width:h,height:j}}},a=function(t){var o=t.start,c=t.end;if(e.value){var a=e.value.getBoundingClientRect(),r=Object(vn["a"])(o,2),l=r[0],i=r[1],u=Object(vn["a"])(c,2),d=u[0],s=u[1],f=Math.min(l,d),p=Math.max(l,d),b=Math.min(i,s),m=Math.max(i,s),v=(f-a.x)/n.value,O=(b-a.y)/n.value,h=(p-f)/n.value,j=(m-b)/n.value,g=[l===f?0:h,i===b?0:j],y=[d===f?0:h,s===b?0:j];return{left:v,top:O,start:g,end:y}}},r=Ve(),l=r.createTextElement,i=r.createShapeElement,u=r.createLineElement,d=function(e){if(o.value){var n=o.value.type;if("text"===n){var r=c(e);r&&l(r)}else if("shape"===n){var d=c(e);d&&i(d,o.value.data)}else if("line"===n){var s=a(e);s&&u(s,o.value.data)}t.commit(y.SET_CREATING_ELEMENT,null)}};return{insertElementFromCreateSelection:d}};function hn(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"editable-element",ref:"elementRef",id:"editable-element-".concat(e.elementInfo.id),style:{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,["id"])}var jn;n("a9e3");(function(e){e["TEXT"]="text",e["IMAGE"]="image",e["SHAPE"]="shape",e["LINE"]="line",e["CHART"]="chart",e["TABLE"]="table"})(jn||(jn={}));var gn,yn,En=function(){var e=Z(),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})),a=Te(),r=a.addHistorySnapshot,l=function(a){var l,i=we,u=we*n.value,d=Jt(o.value),s=d.minX,f=d.maxX,p=d.minY,b=d.maxY,m=JSON.parse(JSON.stringify(c.value.elements)),v=Object(ke["a"])(m);try{for(v.s();!(l=v.n()).done;){var O=l.value;if(t.value.includes(O.id)){if(a===te.CENTER){var h=p+(b-p)/2-u/2,j=s+(f-s)/2-i/2;O.top=O.top-h,O.left=O.left-j}if(a===te.TOP){var g=p-0;O.top=O.top-g}else if(a===te.VERTICAL){var E=p+(b-p)/2-u/2;O.top=O.top-E}else if(a===te.BOTTOM){var k=b-u;O.top=O.top-k}else if(a===te.LEFT){var I=s-0;O.left=O.left-I}else if(a===te.HORIZONTAL){var S=s+(f-s)/2-i/2;O.left=O.left-S}else if(a===te.RIGHT){var C=f-i;O.left=O.left-C}}}}catch(N){v.e(N)}finally{v.f()}e.commit(y.UPDATE_SLIDE,{elements:m}),r()};return{alignElementToCanvas:l}},kn=Object(j["withScopeId"])("data-v-1622838f"),In=kn((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ImageClipHandler"),l=Object(j["resolveComponent"])("ImageOutline"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-image",{lock:e.elementInfo.lock}],style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[e.isCliping?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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[1]||(t[1]=function(t){return e.handleClip(t)})},null,8,["src","clipData","width","height","top","left","clipPath"])):Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:1,class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle},onMousedown:t[3]||(t[3]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(l,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createVNode"])("div",{class:"image-content",style:{clipPath:e.clipShape.style}},[Object(j["createVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:{top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter},onDragstart:t[2]||(t[2]=Object(j["withModifiers"])((function(){}),["prevent"])),alt:""},null,44,["src"])],4)],36)),[[i,e.contextmenus]])],4)],6)})),Sn=function(e){var t=Object(j["computed"])((function(){if(e.value){var t=e.value,n=t.h,o=t.v,c=t.blur,a=t.color;return"".concat(n,"px ").concat(o,"px ").concat(c,"px ").concat(a)}return""}));return{shadowStyle:t}},Cn=function(e,t){var n=Object(j["computed"])((function(){var n="";return e.value&&t.value?n="rotateX(180deg) rotateY(180deg)":e.value?n="rotateX(180deg)":t.value&&(n="rotateY(180deg)"),n}));return{flipStyle:n}};(function(e){e["RECT"]="rect",e["ELLIPSE"]="ellipse",e["POLYGON"]="polygon"})(gn||(gn={})),function(e){e["RECT"]="rect",e["ROUNDRECT"]="roundRect",e["ELLIPSE"]="ellipse",e["TRIANGLE"]="triangle",e["PENTAGON"]="pentagon",e["RHOMBUS"]="rhombus",e["STAR"]="star"}(yn||(yn={}));var Nn={rect:{name:"矩形",type:gn.RECT,radius:"0",style:""},rect2:{name:"矩形2",type:gn.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:gn.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:gn.RECT,radius:"10%",style:"inset(0 0 0 0 round 10% 10% 10% 10%)"},ellipse:{name:"圆形",type:gn.ELLIPSE,style:"ellipse(50% 50% at 50% 50%)"},triangle:{name:"三角形",type:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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")}}},Tn=function(e){var t=Object(j["computed"])((function(){if(!e.value)return Nn.rect;var t=e.value.shape||gn.RECT;return Nn[t]})),n=Object(j["computed"])((function(){if(!e.value)return{top:"0",left:"0",width:"100%",height:"100%"};var t=Object(vn["a"])(e.value.range,2),n=t[0],o=t[1],c=(o[0]-n[0])/100,a=(o[1]-n[1])/100,r=n[0]/c,l=n[1]/a;return{left:-r+"%",top:-l+"%",width:100/c+"%",height:100/a+"%"}}));return{clipShape:t,imgPosition:n}},xn=(n("b64b"),function(e){var t=Object(j["computed"])((function(){if(!e.value)return"";for(var t="",n=0,o=Object.keys(e.value);nr.width&&(p=r.width-i.width),b<0?b=0:b+i.height>r.height&&(b=r.height-i.height),f.left=p,f.top=b}},document.onmouseup=function(){n=!1,document.onmousemove=null,document.onmouseup=null,h(),setTimeout((function(){l.value=!1}),0)}},y=function(t,n){l.value=!0;var o=!0,r=50/e.width*100,i=50/e.height*100,u=t.pageX,s=t.pageY,p=d.value,b={left:f.left,top:f.top,width:f.width,height:f.height},m=f.width/f.height;document.onmousemove=function(t){if(o){var l,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;a.value&&("b-r"!==n&&"t-l"!==n||(y=g/m),"b-l"!==n&&"t-r"!==n||(y=-g/m)),"t-l"===n?(b.left+g<0&&(g=-b.left),b.top+y<0&&(y=-b.top),b.width-gp.width&&(g=p.width-(b.left+b.width)),b.top+y<0&&(y=-b.top),b.width+gp.height&&(y=p.height-(b.top+b.height)),b.width-gp.width&&(g=p.width-(b.left+b.width)),b.top+b.height+y>p.height&&(y=p.height-(b.top+b.height)),b.width+g\s$/,e)},mo=function(e){return Object(fo["g"])(/^(\d+)\.\s$/,e,(function(e){return{order:+e[1]}}),(function(e,t){return t.childCount+t.attrs.order===+e[1]}))},vo=function(e){return Object(fo["g"])(/^\s*([-+*])\s$/,e)},Oo=function(e){return Object(fo["e"])(/^```$/,e)},ho=function(e){var t=[].concat(Object(R["a"])(fo["d"]),[fo["a"],fo["b"]]);return t.push(bo(e.nodes.blockquote)),t.push(mo(e.nodes.ordered_list)),t.push(vo(e.nodes.bullet_list)),t.push(Oo(e.nodes.code_block)),Object(fo["c"])({rules:t})},jo=function(e){return[ho(e),Object(ro["b"])(po(e)),Object(ro["b"])(no["a"]),Object(io["a"])(),Object(uo["a"])(),Object(lo["a"])()]},go=n("2210"),yo=Object(F["a"])(Object(F["a"])({},so["d"]),{},{content:"list_item+",group:"block"}),Eo=Object(F["a"])(Object(F["a"])({},so["a"]),{},{content:"list_item+",group:"block"}),ko=Object(F["a"])(Object(F["a"])({},so["c"]),{},{content:"paragraph block*",group:"block"}),Io={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]}},So=Object(F["a"])(Object(F["a"])({},go["b"]),{},{ordered_list:yo,bullet_list:Eo,list_item:ko,paragraph:Io}),Co=(n("5319"),n("ac1f"),{excludes:"subscript",parseDOM:[{tag:"sub"},{style:"vertical-align",getAttrs:function(e){return"sub"===e&&null}}],toDOM:function(){return["sub",0]}}),No={excludes:"superscript",parseDOM:[{tag:"sup"},{style:"vertical-align",getAttrs:function(e){return"super"===e&&null}}],toDOM:function(){return["sup",0]}},To={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]}},xo={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]}},Lo={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]}},wo={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]}},Vo={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]}},_o={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]}},Bo=Object(F["a"])(Object(F["a"])({},go["a"]),{},{subscript:Co,superscript:No,strikethrough:To,underline:xo,forecolor:Lo,backcolor:wo,fontsize:Vo,fontname:_o}),Do=So,Mo=Bo,Ao=new ao["i"]({nodes:Do,marks:Mo}),Po=function(e){var t="
".concat(e,"
"),n=new window.DOMParser,o=n.parseFromString(t,"text/html").body.firstElementChild;return ao["a"].fromSchema(Ao).parse(o)},Ro=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new co["c"](e,Object(F["a"])({state:oo["b"].create({doc:Po(t),plugins:jo(Ao)})},n))},Fo=(n("b0c0"),function(e,t){return Array.isArray(e)&&e.indexOf(t.type)>-1||t.type===e}),Ho=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}}},zo=function(e){return function(t){return Ho(t.$from,e)}},Uo=function(e){return function(t){return zo((function(t){return Fo(e,t)}))(t)}},Go=function(e,t){var n=t.schema.nodes[e];return!!Uo(n)(t.selection)},qo=function(e){var t=e.state,n=t.selection,o=t.doc,c=n.from,a=o.nodeAt(c);return(null===a||void 0===a?void 0:a.marks)||[]},Xo=function(e,t,n){var o,c=qo(e),a=Object(ke["a"])(c);try{for(a.s();!(o=a.n()).done;){var r=o.value;if(r.type.name===t&&r.attrs[n])return r.attrs[n]}}catch(l){a.e(l)}finally{a.f()}return null},Wo=function(e,t){var n,o=qo(e),c=Object(ke["a"])(o);try{for(c.s();!(n=c.n()).done;){var a=n.value;if(a.type.name===t)return!0}}catch(r){c.e(r)}finally{c.f()}return!1},Yo=function(e,t){var n=e.state,o=n.selection,c=n.doc,a=o.from,r=o.to,l=!0,i="";return c.nodesBetween(a,r,(function(e){return l&&e.attrs[t]&&(l=!1,i=e.attrs[t]),l})),i},Zo=function(e){var t=Wo(e,"strong"),n=Wo(e,"em"),o=Wo(e,"underline"),c=Wo(e,"strikethrough"),a=Wo(e,"superscript"),r=Wo(e,"subscript"),l=Wo(e,"code"),i=Xo(e,"forecolor","color")||"#000",u=Xo(e,"backcolor","backcolor")||"#000",d=Xo(e,"fontsize","fontsize")||"20px",s=Xo(e,"fontname","fontname")||"微软雅黑",f=Yo(e,"align")||"left",p=Go("bullet_list",e.state),b=Go("ordered_list",e.state),m=Go("blockquote",e.state);return{bold:t,em:n,underline:o,strikethrough:c,superscript:a,subscript:r,code:l,color:i,backcolor:u,fontsize:d,fontname:s,align:f,bulletList:p,orderedList:b,blockquote:m}},Jo=(n("6062"),function(e,t,n){var o=e,c=o.selection,a=o.doc;if(!c||!a)return e;var r=c.from,l=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 a.nodesBetween(r,l,(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,a=t.nodeType,r=o.attrs;r=n?Object(F["a"])(Object(F["a"])({},r),{},{align:n}):Object(F["a"])(Object(F["a"])({},r),{},{align:null}),e=e.setNodeMarkup(c,a,r,o.marks)})),e):e}),Ko=function(e,t){var n=e.state,o=n.schema,c=n.selection,a=Jo(n.tr.setSelection(c),o,t);e.dispatch(a)},Qo=function(e,t){return e.type===t.nodes.bullet_list||e.type===t.nodes.ordered_list},$o=function(e,t){return function(n,o){var c=n.schema,a=n.selection,r=a.$from,l=a.$to,i=r.blockRange(l);if(!i)return!1;var u=zo((function(e){return Qo(e,c)}))(a);if(i.depth>=1&&u&&i.depth-u.depth<=1){if(u.node.type===e)return Object(so["b"])(t)(n,o);if(Qo(u.node,c)&&e.validContent(u.node.content)){var d=n.tr;return d.setNodeMarkup(u.pos,e),o&&o(d),!1}}return Object(so["g"])(e)(n,o)}},ec=Object(j["withScopeId"])("data-v-2ddaa919"),tc=ec((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return e.outline?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,class:"element-outline",overflow:"visible",width:e.width,height:e.height},{default:ec((function(){return[Object(j["createVNode"])("path",{"vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",fill:"transparent",d:"M0,0 L".concat(e.width,",0 L").concat(e.width,",").concat(e.height," L0,").concat(e.height," Z"),stroke:e.outlineColor,"stroke-width":e.outlineWidth,"stroke-dasharray":"dashed"===e.outlineStyle?"10 6":"0 0"},null,8,["d","stroke","stroke-width","stroke-dasharray"])]})),_:1},8,["width","height"])):Object(j["createCommentVNode"])("",!0)})),nc=Object(j["defineComponent"])({name:"element-outline",props:{width:{type:Number,required:!0},height:{type:Number,required:!0},outline:{type:Object}},setup:function(e){var t=Bn(Object(j["toRef"])(e,"outline")),n=t.outlineWidth,o=t.outlineStyle,c=t.outlineColor;return{outlineWidth:n,outlineStyle:o,outlineColor:c}}});n("d9a3");nc.render=tc,nc.__scopeId="data-v-2ddaa919";var oc=nc,cc=Object(j["defineComponent"])({name:"editable-element-text",components:{ElementOutline:oc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t,n=Z(),o=Te(),c=o.addHistorySnapshot,a=Object(j["ref"])(),r=Object(j["ref"])(!1),l=Object(j["ref"])(-1),i=Object(j["ref"])(),u=Object(j["computed"])((function(){return e.elementInfo.shadow})),d=Sn(u),s=d.shadowStyle,f=Object(j["computed"])((function(){return n.state.handleElementId})),p=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo,n))},b=function(t){f.value===e.elementInfo.id&&(r.value=t,t||-1===l.value||(n.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:l.value}}),l.value=-1))};cn.on(Ut.SCALE_ELEMENT_STATE,(function(e){return b(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.SCALE_ELEMENT_STATE,(function(e){return b(e)}))}));var m=function(t){var o=t[0].contentRect;if(a.value){var c=o.height;e.elementInfo.height!==c&&(r.value?l.value=c:n.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:c}}))}},v=new ResizeObserver(m);Object(j["onMounted"])((function(){a.value&&v.observe(a.value)})),Object(j["onUnmounted"])((function(){a.value&&v.unobserve(a.value)}));var O=Se()((function(){n.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{content:t.dom.innerHTML}}),c()}),300,{trailing:!0}),h=function(){"请输入内容"===e.elementInfo.content&&(t.dom.innerHTML="",O()),n.commit(y.SET_DISABLE_HOTKEYS_STATE,!0)},g=function(){n.commit(y.SET_DISABLE_HOTKEYS_STATE,!1)},E=Se()((function(){var e=Zo(t);cn.emit(Ut.UPDATE_TEXT_STATE,e)}),30,{trailing:!0}),k=function(){O(),E()},I=Object(j["computed"])((function(){return e.elementInfo.content}));Object(j["watch"])(I,(function(){t&&(t.hasFocus()||(t.dom.innerHTML=I.value))}));var S=Object(j["computed"])((function(){return!e.elementInfo.lock}));Object(j["watch"])(S,(function(){t.setProps({editable:function(){return S.value}})})),Object(j["onMounted"])((function(){t=Ro(i.value,I.value,{handleDOMEvents:{focus:h,blur:g,keydown:k,click:E},editable:function(){return S.value}})})),Object(j["onUnmounted"])((function(){t&&t.destroy()}));var C=function(n){if(f.value===e.elementInfo.id){var o,c="command"in n?[n]:n,a=Object(ke["a"])(c);try{for(a.s();!(o=a.n()).done;){var r=o.value;if("fontname"===r.command&&r.value){var l=t.state.schema.marks.fontname.create({fontname:r.value}),i=t.state.selection.empty;i&&Object(no["d"])(t.state,t.dispatch);var u=t.state.selection,d=u.$from,s=u.$to;t.dispatch(t.state.tr.addMark(d.pos,s.pos,l))}else if("fontsize"===r.command&&r.value){var p=t.state.schema.marks.fontsize.create({fontsize:r.value}),b=t.state.selection.empty;b&&Object(no["d"])(t.state,t.dispatch);var m=t.state.selection,v=m.$from,h=m.$to;t.dispatch(t.state.tr.addMark(v.pos,h.pos,p))}else if("color"===r.command&&r.value){var j=t.state.schema.marks.forecolor.create({color:r.value}),g=t.state.selection.empty;g&&Object(no["d"])(t.state,t.dispatch);var y=t.state.selection,k=y.$from,I=y.$to;t.dispatch(t.state.tr.addMark(k.pos,I.pos,j))}else if("backcolor"===r.command&&r.value){var S=t.state.schema.marks.backcolor.create({backcolor:r.value}),C=t.state.selection.empty;C&&Object(no["d"])(t.state,t.dispatch);var N=t.state.selection,T=N.$from,x=N.$to;t.dispatch(t.state.tr.addMark(T.pos,x.pos,S))}else if("bold"===r.command){var L=t.state.selection.empty;L&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.strong)(t.state,t.dispatch)}else if("em"===r.command){var w=t.state.selection.empty;w&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.em)(t.state,t.dispatch)}else if("underline"===r.command){var V=t.state.selection.empty;V&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.underline)(t.state,t.dispatch)}else if("strikethrough"===r.command){var _=t.state.selection.empty;_&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.strikethrough)(t.state,t.dispatch)}else if("subscript"===r.command)Object(no["f"])(t.state.schema.marks.subscript)(t.state,t.dispatch);else if("superscript"===r.command)Object(no["f"])(t.state.schema.marks.superscript)(t.state,t.dispatch);else if("blockquote"===r.command)Object(no["g"])(t.state.schema.nodes.blockquote)(t.state,t.dispatch);else if("code"===r.command)Object(no["f"])(t.state.schema.marks.code)(t.state,t.dispatch);else if("align"===r.command&&r.value)Ko(t,r.value);else if("bulletList"===r.command){var B=t.state.schema.nodes,D=B.bullet_list,M=B.list_item;$o(D,M)(t.state,t.dispatch)}else if("orderedList"===r.command){var A=t.state.schema.nodes,P=A.ordered_list,R=A.list_item;$o(P,R)(t.state,t.dispatch)}else if("clear"===r.command){var F=t.state.selection.empty;F&&Object(no["d"])(t.state,t.dispatch);var H=t.state.selection,z=H.$from,U=H.$to;t.dispatch(t.state.tr.removeMark(z.pos,U.pos))}}}catch(G){a.e(G)}finally{a.f()}t.focus(),O(),E()}};return cn.on(Ut.EXEC_TEXT_COMMAND,(function(e){return C(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.EXEC_TEXT_COMMAND,(function(e){return C(e)}))})),{elementRef:a,editorViewRef:i,handleSelectElement:p,shadowStyle:s}}});n("f67b");cc.render=to,cc.__scopeId="data-v-ad16610e";var ac=cc,rc=Object(j["withScopeId"])("data-v-6ed7d252");Object(j["pushScopeId"])("data-v-6ed7d252");var lc={key:0};Object(j["popScopeId"])();var ic=rc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("GradientDefs"),l=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-shape",{lock:e.elementInfo.lock}],style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["withDirectives"])(Object(j["createVNode"])("div",{class:"element-content",style:{opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle},onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(l,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:rc((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createBlock"])("defs",lc,[Object(j["createVNode"])(r,{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["createVNode"])("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["createVNode"])("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,["d","fill","stroke","stroke-width","stroke-dasharray"])],8,["transform"])]})),_:1},8,["width","height"])],36),[[i,e.contextmenus]])],4)],6)}));function uc(e,t,n,o,c,a){return"linear"===e.type?(Object(j["openBlock"])(),Object(j["createBlock"])("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["createVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,["stop-color"]),Object(j["createVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,["stop-color"])],8,["id","gradientTransform"])):(Object(j["openBlock"])(),Object(j["createBlock"])("radialGradient",{key:1,id:e.id},[Object(j["createVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,["stop-color"]),Object(j["createVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,["stop-color"])],8,["id"]))}var dc=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}}});dc.render=uc;var sc=dc,fc=Object(j["defineComponent"])({name:"editable-element-shape",components:{GradientDefs:sc},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.outline})),o=Bn(n),c=o.outlineWidth,a=o.outlineStyle,r=o.outlineColor,l=Object(j["computed"])((function(){return e.elementInfo.shadow})),i=Sn(l),u=i.shadowStyle,d=Object(j["computed"])((function(){return e.elementInfo.flipH})),s=Object(j["computed"])((function(){return e.elementInfo.flipV})),f=Cn(d,s),p=f.flipStyle;return{handleSelectElement:t,shadowStyle:u,outlineWidth:c,outlineStyle:a,outlineColor:r,flipStyle:p}}});n("cff1");fc.render=ic,fc.__scopeId="data-v-6ed7d252";var pc=fc,bc=Object(j["withScopeId"])("data-v-7d3d40d6"),mc=bc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("LinePointMarker"),l=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-shape",{lock:e.elementInfo.lock}],style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""}},[Object(j["createVNode"])(l,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:bc((function(){return[Object(j["createVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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"])(r,{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["createVNode"])("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,["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"]),Object(j["withDirectives"])(Object(j["createVNode"])("path",{class:"line-path",d:e.path,stroke:"transparent","stroke-width":"20",fill:"none",onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},null,40,["d"]),[[i,e.contextmenus]])]})),_:1},8,["width","height"])],4)],6)}));function vc(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("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["createVNode"])("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,["d","fill","transform"])],8,["id","markerWidth","markerHeight","refX","refY"])}var Oc={dot:"m0 5a5 5 0 1 0 10 0a5 5 0 1 0 -10 0z",arrow:"M0,0 L10,5 0,10 Z"},hc={"arrow-start":180,"arrow-end":0},jc=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 Oc[e.type]})),n=Object(j["computed"])((function(){return hc["".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}}});jc.render=vc;var gc=jc,yc=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:gc},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=Sn(n),c=o.shadowStyle,a=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),r=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),l=Object(j["computed"])((function(){return"dashed"===e.elementInfo.style?"10 6":"0 0"})),i=Object(j["computed"])((function(){var t=e.elementInfo.start.join(","),n=e.elementInfo.end.join(",");if(e.elementInfo.broken){var o=e.elementInfo.broken.join(",");return"M".concat(t," L").concat(o," L").concat(n)}if(e.elementInfo.curve){var c=e.elementInfo.curve.join(",");return"M".concat(t," Q").concat(c," ").concat(n)}return"M".concat(t," L").concat(n)}));return{handleSelectElement:t,shadowStyle:c,svgWidth:a,svgHeight:r,lineDashArray:l,path:i}}});n("b7b4");yc.render=mc,yc.__scopeId="data-v-7d3d40d6";var Ec=yc,kc=Object(j["withScopeId"])("data-v-d2dd6e5c"),Ic=kc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline"),l=Object(j["resolveComponent"])("Chart"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-chart",{lock:e.elementInfo.lock}],style:{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["createVNode"])("div",{class:"element-content",style:{backgroundColor:e.elementInfo.fill},onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(l,{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)})),Sc=Object(j["withScopeId"])("data-v-233b1dc8");Object(j["pushScopeId"])("data-v-233b1dc8");var Cc={class:"chart"};Object(j["popScopeId"])();var Nc=Sc((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Cc,[Object(j["createVNode"])("div",{class:"chart-content",ref:"chartRef",style:{width:e.width+"px",height:e.height+"px",transform:"scale(".concat(1/e.slideScale,")")}},null,4)])})),Tc=n("8103"),xc=n.n(Tc),Lc=n("66cb"),wc=n.n(Lc),Vc=n("ba48"),_c=n.n(Vc),Bc=(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:String,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(F["a"])(Object(F["a"])({},t),{},{width:e.width*o.value,height:e.height*o.value}),c="pie"===e.type?Object(F["a"])(Object(F["a"])({},e.data),{},{series:e.data.series[0]}):e.data;return{data:c,options:n}},a=function(){if(n.value){var o=xc()(e.type),a=c(),r=a.data,l=a.options;t=new _c.a[o](n.value,r,l)}},r=function(){if(t){var e=c(),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 l=function(){if(n.value)for(var t=wc()(e.themeColor).analogous(10),o=0;o<10;o++){var c=t[o].toRgbString();n.value.style.setProperty("--theme-color-".concat(o+1),c)}};Object(j["watch"])((function(){return e.themeColor}),l),Object(j["onMounted"])(l);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("a902"),n("32d8");Bc.render=Nc,Bc.__scopeId="data-v-233b1dc8";var Dc=Bc,Mc=Object(j["defineComponent"])({name:"editable-element-chart",components:{ElementOutline:oc,Chart:Dc},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))};return{handleSelectElement:t}}});n("d32e");Mc.render=Ic,Mc.__scopeId="data-v-d2dd6e5c";var Ac=Mc,Pc=Object(j["withScopeId"])("data-v-1ab7e248");Object(j["pushScopeId"])("data-v-1ab7e248");var Rc={class:"element-content"};Object(j["popScopeId"])();var Fc=Pc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("EditableTable"),l=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-table",{lock:e.elementInfo.lock}],ref:"elementRef",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"}},[Object(j["withDirectives"])(Object(j["createVNode"])("div",Rc,[Object(j["createVNode"])(r,{onMousedown:t[1]||(t[1]=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[2]||(t[2]=function(t){return e.updateTableCells(t)}),onChangeColWidths:t[3]||(t[3]=function(t){return e.updateColWidths(t)}),onChangeSelectedCells:t[4]||(t[4]=function(t){return e.updateSelectedCells(t)})},null,8,["data","width","colWidths","outline","theme","editable"]),!e.editable||e.elementInfo.lock?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:0,class:["table-mask",{lock:e.elementInfo.lock}],onDblclick:t[5]||(t[5]=function(t){return e.startEdit()}),onMousedown:t[6]||(t[6]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])("div",{class:"mask-tip",style:{transform:"scale(".concat(1/e.canvasScale,")")}},"双击编辑",4)],34)):Object(j["createCommentVNode"])("",!0)],512),[[l,e.contextmenus]])],6)})),Hc=(n("13d5"),Object(j["withScopeId"])("data-v-70bdbb7e"));Object(j["pushScopeId"])("data-v-70bdbb7e");var zc={key:0,class:"handler"};Object(j["popScopeId"])();var Uc=Hc((function(e,t,n,o,c,a){var r,l,i,u,d,s=Object(j["resolveComponent"])("CustomTextarea"),f=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"editable-table",style:{width:e.totalWidth+"px"}},[e.editable?(Object(j["openBlock"])(),Object(j["createBlock"])("div",zc,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.dragLinePosition,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"drag-line",key:n,style:{left:t+"px"},onMousedown:function(t){return e.handleMousedownColHandler(t,n)}},null,44,["onMousedown"])})),128))])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("table",{class:{theme:e.theme,"row-header":null===(r=e.theme)||void 0===r?void 0:r.rowHeader,"row-footer":null===(l=e.theme)||void 0===l?void 0:l.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:"--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["createVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])("col",{span:"1",key:t,width:e},null,8,["width"])})),128))]),Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.tableCells,(function(n,o){return Object(j["openBlock"])(),Object(j["createBlock"])("tr",{key:o},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(n,(function(n,c){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("td",{class:["cell",{selected:e.selectedCells.includes("".concat(o,"_").concat(c))&&e.selectedCells.length>1,active:e.activedCell==="".concat(o,"_").concat(c)}],style:Object(F["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(n.style)),key:n.id,rowspan:n.rowspan,colspan:n.colspan,"data-cell-index":"".concat(o,"_").concat(c),onMousedown:function(t){return e.handleCellMousedown(t,o,c)},onMouseenter:function(t){return e.handleCellMouseenter(o,c)}},[Object(j["createVNode"])(s,{class:["cell-text",{active:e.activedCell==="".concat(o,"_").concat(c)}],contenteditable:e.activedCell==="".concat(o,"_").concat(c)&&"plaintext-only",modelValue:n.text,"onUpdate:modelValue":[function(e){return n.text=e},t[1]||(t[1]=function(t){return e.handleInput()})]},null,8,["class","contenteditable","modelValue","onUpdate:modelValue"])],46,["rowspan","colspan","data-cell-index","onMousedown","onMouseenter"])),[[j["vShow"],!e.hideCells.includes("".concat(o,"_").concat(c))],[f,function(t){return e.contextmenus(t)}]])})),128))])})),128))])],6)],4)})),Gc=(n("1276"),n("cc71"),function(e){if(!e)return{};var t=e.bold,n=e.em,o=e.underline,c=e.strikethrough,a=e.color,r=e.backcolor,l=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:a||"#000",backgroundColor:r||"",fontSize:l||"14px",fontFamily:i||"微软雅黑",textAlign:u||"left"}}),qc=function(e){var t=Object(j["computed"])((function(){for(var t=[],n=0;n1||a.rowspan>1)for(var r=n;r=d&&b<=f&&v>=s&&v<=p&&u.push("".concat(b,"_").concat(v));return u}));Object(j["watch"])(g,(function(){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(!r.value.length)return null;var e=Object(vn["a"])(r.value,2),t=e[0],n=e[1];if(!l.value.length)return{row:[t,t],col:[n,n]};var o=Object(vn["a"])(l.value,2),c=o[0],a=o[1];if(t===c&&n===a)return{row:[t,t],col:[n,n]};var i=Math.min(t,c),u=Math.min(n,a),d=Math.max(t,c),s=Math.max(n,a);return{row:[i,d],col:[u,s]}})),k=function(){return a.value=!1},I=function(e,t,n){0===e.button&&(l.value=[],a.value=!0,r.value=[t,n])},S=function(e,t){a.value&&(l.value=[e,t])};Object(j["onMounted"])((function(){document.addEventListener("mouseup",k)})),Object(j["onUnmounted"])((function(){document.removeEventListener("mouseup",k)}));var C=function(e,t){return h.value.includes("".concat(e,"_").concat(t))},N=function(e){var t=i.value.length-1;r.value=[0,e],l.value=[t,e]},T=function(e){var t=i.value[e].length-1;r.value=[e,0],l.value=[e,t]},x=function(){var e=i.value.length-1,t=i.value[e].length-1;r.value=[0,0],l.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(!C(u,l)){t[u][l].rowspan=t[u][l].rowspan-1;break}t.splice(e,1),i.value=t},w=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),o=[],c=0;c=0;u--)if(!C(l,u)){t[l][u].colspan=t[l][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)},V=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=[],o=0;o1,n=e[0].length>1;return{canDeleteRow:t,canDeleteCol:n}},U=function(e,t){var n=g.value.length>1,o=i.value[e][t],c=n,a=!n&&(o.rowspan>1||o.colspan>1);return{canMerge:c,canSplit:a}},G=function(e){var t=e.dataset.cellIndex,n=+t.split("_")[0],o=+t.split("_")[1];g.value.includes("".concat(n,"_").concat(o))||(r.value=[n,o],l.value=[]);var c=U(n,o),a=c.canMerge,i=c.canSplit,u=z(),d=u.canDeleteRow,s=u.canDeleteCol;return[{text:"插入列",children:[{text:"到左侧",handler:function(){return _(o)}},{text:"到右侧",handler:function(){return _(o+1)}}]},{text:"插入行",children:[{text:"到上方",handler:function(){return V(n)}},{text:"到下方",handler:function(){return V(n+1)}}]},{text:"删除列",disable:!s,handler:function(){return w(o)}},{text:"删除行",disable:!d,handler:function(){return L(n)}},{divider:!0},{text:"合并单元格",disable:!a,handler:B},{text:"取消合并单元格",disable:!i,handler:function(){return D(n,o)}},{divider:!0},{text:"选中当前列",handler:function(){return N(o)}},{text:"选中当前行",handler:function(){return T(n)}},{text:"选中全部单元格",handler:x}]};return{getTextStyle:Gc,dragLinePosition:m,tableCells:i,colSizeList:f,totalWidth:p,hideCells:h,selectedCells:g,activedCell:y,selectedRange:E,handleCellMousedown:I,handleCellMouseenter:S,selectCol:N,selectRow:T,handleMousedownColHandler:M,contextmenus:G,handleInput:F,subThemeColor:s}}});n("9fed");Kc.render=Uc,Kc.__scopeId="data-v-70bdbb7e";var Qc=Kc,$c=Object(j["defineComponent"])({name:"editable-element-table",components:{EditableTable:Qc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=Z(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.handleElementId})),c=Object(j["ref"])(),a=Te(),r=a.addHistorySnapshot,l=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["ref"])(-1),f=function(n){o.value===e.elementInfo.id&&(d.value=n,n&&(i.value=!1),n||-1===s.value||(t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:s.value}}),s.value=-1))};cn.on(Ut.SCALE_ELEMENT_STATE,(function(e){return f(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.SCALE_ELEMENT_STATE,(function(e){return f(e)}))}));var p=function(n){var o=n[0].contentRect;if(c.value){var a=o.height;e.elementInfo.height!==a&&(d.value?s.value=a:t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:a}}))}},b=new ResizeObserver(p);Object(j["onMounted"])((function(){c.value&&b.observe(c.value)})),Object(j["onUnmounted"])((function(){c.value&&b.unobserve(c.value)}));var m=function(n){t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{data:n}}),r()},v=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}}),r()},O=function(e){Object(j["nextTick"])((function(){return cn.emit(Ut.UPDATE_TABLE_SELECTED_CELL,e)}))};return{elementRef:c,canvasScale:n,handleSelectElement:l,updateTableCells:m,updateColWidths:v,editable:i,startEdit:u,updateSelectedCells:O}}});n("94b3");$c.render=Fc,$c.__scopeId="data-v-1ab7e248";var ea=$c,ta=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}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(T["a"])(t,jn.IMAGE,$n),Object(T["a"])(t,jn.TEXT,ac),Object(T["a"])(t,jn.SHAPE,pc),Object(T["a"])(t,jn.LINE,Ec),Object(T["a"])(t,jn.CHART,Ac),Object(T["a"])(t,jn.TABLE,ea),t);return n[e.elementInfo.type]||null})),n=He(),o=n.orderElement,c=En(),a=c.alignElementToCanvas,r=Ae(),l=r.combineElements,i=r.uncombineElements,u=Me(),d=u.deleteElement,s=De(),f=s.lockElement,p=s.unlockElement,b=Pe(),m=b.copyElement,v=b.pasteElement,O=b.cutElement,h=Re(),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:m},{text:"粘贴",subText:"Ctrl + V",handler:v},{divider:!0},{text:"水平居中",handler:function(){return a(te.HORIZONTAL)},children:[{text:"水平垂直居中",handler:function(){return a(te.CENTER)}},{text:"水平居中",handler:function(){return a(te.HORIZONTAL)}},{text:"左对齐",handler:function(){return a(te.LEFT)}},{text:"右对齐",handler:function(){return a(te.RIGHT)}}]},{text:"垂直居中",handler:function(){return a(te.VERTICAL)},children:[{text:"水平垂直居中",handler:function(){return a(te.CENTER)}},{text:"垂直居中",handler:function(){return a(te.VERTICAL)}},{text:"顶部对齐",handler:function(){return a(te.TOP)}},{text:"底部对齐",handler:function(){return a(te.BOTTOM)}}]},{divider:!0},{text:"置于顶层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,ee.TOP)},children:[{text:"置于顶层",handler:function(){return o(e.elementInfo,ee.TOP)}},{text:"上移一层",handler:function(){return o(e.elementInfo,ee.UP)}}]},{text:"置于底层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,ee.BOTTOM)},children:[{text:"置于底层",handler:function(){return o(e.elementInfo,ee.BOTTOM)}},{text:"下移一层",handler:function(){return o(e.elementInfo,ee.DOWN)}}]},{divider:!0},{text:e.elementInfo.groupId?"取消组合":"组合",subText:"Ctrl + G",handler:e.elementInfo.groupId?i:l,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}}});ta.render=hn;var na=ta,oa=Object(j["withScopeId"])("data-v-1619c258"),ca=oa((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"mouse-selection quadrant-".concat(n.quadrant),style:{top:n.top+"px",left:n.left+"px",width:n.width+"px",height:n.height+"px"}},null,6)})),aa={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");aa.render=ca,aa.__scopeId="data-v-1619c258";var ra=aa,la=Object(j["withScopeId"])("data-v-a9ca1b50"),ia=la((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("GridLines");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"viewport-background",style:e.backgroundStyle},[e.showGridLines?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0})):Object(j["createCommentVNode"])("",!0)],4)})),ua=Object(j["withScopeId"])("data-v-3cb2c22e"),da=ua((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"grid-lines"},{default:ua((function(){return[Object(j["createVNode"])("path",{style:{transform:"scale(".concat(e.canvasScale,")")},d:e.path,fill:"none",stroke:e.gridColor,"stroke-width":"0.3","stroke-dasharray":"5"},null,12,["d","stroke"])]})),_:1})})),sa=Object(j["defineComponent"])({name:"grid-lines",setup:function(){var e=Z(),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 wc.a.mostReadable(t,n,{includeFallbackColors:!0}).setAlpha(.5).toRgbString()})),a=50,r=function(){for(var e=we,t=we*n.value,o="",c=0;c<=Math.floor(t/a);c++)o+="M0 ".concat(c*a," L").concat(e," ").concat(c*a," ");for(var r=0;r<=Math.floor(e/a);r++)o+="M".concat(r*a," 0 L").concat(r*a," ").concat(t," ");return o};return{canvasScale:t,gridColor:c,width:we,height:we*n.value,path:r()}}});n("5c4c");sa.render=da,sa.__scopeId="data-v-3cb2c22e";var fa=sa,pa=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,a=t.imageSize,r=t.gradientColor,l=t.gradientRotate,i=t.gradientType;if("solid"===n)return{backgroundColor:o};if("image"===n)return c?"repeat"===a?{backgroundImage:"url(".concat(c),backgroundRepeat:"repeat",backgroundSize:"initial"}:{backgroundImage:"url(".concat(c),backgroundRepeat:"no-repeat",backgroundSize:a||"cover"}:{backgroundColor:"#fff"};if("gradient"===n){var u=l||0,d=r?r[0]:"#fff",s=r?r[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}},ba=Object(j["defineComponent"])({name:"viewport-background",components:{GridLines:fa},setup:function(){var e=Z(),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=pa(n),c=o.backgroundStyle;return{showGridLines:t,backgroundStyle:c}}});n("f802");ba.render=ia,ba.__scopeId="data-v-a9ca1b50";var ma=ba,va=Object(j["withScopeId"])("data-v-2d3eddf5"),Oa=va((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"alignment-line",style:{left:e.left,top:e.top}},[Object(j["createVNode"])("div",{class:["line",e.type],style:e.sizeStyle},null,6)],4)})),ha=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=Z(),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"})),a=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:a}}});n("92ad");ha.render=Oa,ha.__scopeId="data-v-2d3eddf5";var ja=ha,ga=Object(j["withScopeId"])("data-v-3c5b7aac"),ya=ga((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"element-create-selection",ref:"selectionRef",onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.createSelection(t)}),["stop"]))},[e.start&&e.end?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:0,class:["selection",e.creatingElement.type],style:e.position},["line"===e.creatingElement.type&&e.lineData?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,overflow:"visible",width:e.lineData.svgWidth,height:e.lineData.svgHeight},{default:ga((function(){return[Object(j["createVNode"])("path",{d:e.lineData.path,stroke:"#d14424",fill:"none","stroke-width":"1","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":""},null,8,["d"])]})),_:1},8,["width","height"])):Object(j["createCommentVNode"])("",!0)],6)):Object(j["createCommentVNode"])("",!0)],544)})),Ea=Object(j["defineComponent"])({name:"element-create-selection",setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.getters.ctrlOrShiftKeyActive})),a=Object(j["computed"])((function(){return o.state.creatingElement})),r=Object(j["ref"])(),l=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;r.value=[o,i],document.onmousemove=function(e){if(a.value&&t){var n=e.pageX,r=e.pageY;if(c.value){var u=n-o,d=r-i,s=Math.abs(u),f=Math.abs(d);if("shape"===a.value.type){var p=d>0&&u<0||d<0&&u>0;s>f?r=p?i-u:i+u:n=p?o-d:o+d}else"line"===a.value.type&&(s>f?r=i:n=o)}l.value=[n,r]}},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=a.value)||void 0===c?void 0:c.type)&&(Math.abs(d-o)>=f||Math.abs(s-i)>=f))n("created",{start:r.value,end:l.value});else if("line"!==(null===(u=a.value)||void 0===u?void 0:u.type)&&Math.abs(d-o)>=f&&Math.abs(s-i)>=f)n("created",{start:r.value,end:l.value});else{var p=200,b=Math.min(d,o),m=Math.min(s,i),v=Math.max(d,o),O=Math.max(s,i),h=v-b>=f?v-b:p,j=O-m>=f?O-m:p;n("created",{start:[b,m],end:[b+h,m+j]})}}},s=Object(j["computed"])((function(){if(!r.value||!l.value)return null;if(!a.value||"line"!==a.value.type)return null;var e=Object(vn["a"])(r.value,2),t=e[0],n=e[1],o=Object(vn["a"])(l.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,b=f-s>=24?f-s:24,m=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(m,", ").concat(v," L").concat(O,", ").concat(h);return{svgWidth:p,svgHeight:b,startX:m,startY:v,endX:O,endY:h,path:j}})),f=Object(j["computed"])((function(){if(!r.value||!l.value)return{};var e=Object(vn["a"])(r.value,2),t=e[0],n=e[1],o=Object(vn["a"])(l.value,2),c=o[0],a=o[1],i=Math.min(t,c),d=Math.max(t,c),s=Math.min(n,a),f=Math.max(n,a),p=d-i,b=f-s;return{left:i-u.x+"px",top:s-u.y+"px",width:p+"px",height:b+"px"}}));return{selectionRef:i,start:r,end:l,creatingElement:a,createSelection:d,lineData:s,position:f}}});n("1949");Ea.render=ya,Ea.__scopeId="data-v-3c5b7aac";var ka=Ea,Ia=Object(j["withScopeId"])("data-v-4def6455"),Sa=Ia((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"multi-select-operate",style:{left:e.minX*e.canvasScale+"px",top:e.minY*e.canvasScale+"px"}},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.disableResize?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:t.direction,type:t.direction,style: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)})),Ca=function(e,t){var n=Object(j["computed"])((function(){return[{direction:oe.LEFT_TOP,style:{}},{direction:oe.TOP,style:{left:e.value/2+"px"}},{direction:oe.RIGHT_TOP,style:{left:e.value+"px"}},{direction:oe.LEFT,style:{top:t.value/2+"px"}},{direction:oe.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}},{direction:oe.LEFT_BOTTOM,style:{top:t.value+"px"}},{direction:oe.BOTTOM,style:{left:e.value/2+"px",top:t.value+"px"}},{direction:oe.RIGHT_BOTTOM,style:{left:e.value+"px",top:t.value+"px"}}]})),o=Object(j["computed"])((function(){return[{direction:oe.LEFT,style:{top:t.value/2+"px"}},{direction:oe.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}}]})),c=Object(j["computed"])((function(){return[{type:ne.T,style:{width:e.value+"px"}},{type:ne.B,style:{top:t.value+"px",width:e.value+"px"}},{type:ne.L,style:{height:t.value+"px"}},{type:ne.R,style:{left:e.value+"px",height:t.value+"px"}}]}));return{resizeHandlers:n,textElementResizeHandlers:o,borderLines:c}},Na=Object(j["withScopeId"])("data-v-1c2a68d0"),Ta=Na((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["resize-handler",n.type]},null,2)})),xa={name:"resize-handler",props:{type:{type:String,default:""}}};n("a933");xa.render=Ta,xa.__scopeId="data-v-1c2a68d0";var La=xa,wa=Object(j["withScopeId"])("data-v-630e246b"),Va=wa((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["border-line",n.type,{wide:n.isWide}]},null,2)})),_a={name:"border-line",props:{type:{type:String,required:!0},isWide:{type:Boolean,default:!1}}};n("fb1d");_a.render=Va,_a.__scopeId="data-v-630e246b";var Ba=_a,Da=Object(j["defineComponent"])({name:"multi-select-operate",components:{ResizeHandler:La,BorderLine:Ba},props:{elementList:{type:Array,required:!0},scaleMultiElement:{type:Function,required:!0}},setup:function(e){var t=Z(),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)}))})),a=Object(j["reactive"])({minX:0,maxX:0,minY:0,maxY:0}),r=Object(j["computed"])((function(){return(a.maxX-a.minX)*o.value})),l=Object(j["computed"])((function(){return(a.maxY-a.minY)*o.value})),i=Ca(r,l),u=i.resizeHandlers,d=i.borderLines,s=function(){var e=Jt(c.value),t=e.minX,n=e.maxX,o=e.minY,r=e.maxY;a.minX=t,a.maxX=n,a.minY=o,a.maxY=r};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(F["a"])(Object(F["a"])({},Object(j["toRefs"])(a)),{},{canvasScale:o,borderLines:d,disableResize:f,resizeHandlers:u})}});n("de7c");Da.render=Sa,Da.__scopeId="data-v-4def6455";var Ma=Da,Aa=Object(j["withScopeId"])("data-v-558a94fe");Object(j["pushScopeId"])("data-v-558a94fe");var Pa={key:1,class:"animation-index"};Object(j["popScopeId"])();var Ra=Aa((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["operate",{"multi-select":e.isMultiSelect&&!e.isActive}],style:{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["createBlock"])("div",Pa,Object(j["toDisplayString"])(e.elementIndexInAnimation+1),1)):Object(j["createCommentVNode"])("",!0)],6)})),Fa=Object(j["withScopeId"])("data-v-5b0628aa"),Ha=Fa((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["image-element-operate",{cliping:e.isCliping}]},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:{left:e.scaleWidth/2+"px"},onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))],2)})),za=Object(j["withScopeId"])("data-v-9a549510");Object(j["pushScopeId"])("data-v-9a549510");var Ua={class:"rotate-handler"};Object(j["popScopeId"])();var Ga=za((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Ua)})),qa={name:"rotate-handler"};n("8754");qa.render=Ga,qa.__scopeId="data-v-9a549510";var Xa=qa,Wa=Object(j["defineComponent"])({name:"image-element-operate",inheritAttrs:!1,components:{RotateHandler:Xa,ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),r=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=Ca(a,r),i=l.resizeHandlers,u=l.borderLines;return{isCliping:c,scaleWidth:a,resizeHandlers:i,borderLines:u}}});n("5c02");Wa.render=Ha,Wa.__scopeId="data-v-5b0628aa";var Ya=Wa,Za={class:"text-element-operate"};function Ja(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Za,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:{left:e.scaleWidth/2+"px"},onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var Ka=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{RotateHandler:Xa,ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Ca(o,c),r=a.textElementResizeHandlers,l=a.borderLines;return{scaleWidth:o,textElementResizeHandlers:r,borderLines:l}}});Ka.render=Ja;var Qa=Ka,$a={class:"shape-element-operate"};function er(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",$a,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:{left:e.scaleWidth/2+"px"},onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var tr=Object(j["defineComponent"])({name:"shape-element-operate",inheritAttrs:!1,components:{RotateHandler:Xa,ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Ca(o,c),r=a.resizeHandlers,l=a.borderLines;return{scaleWidth:o,resizeHandlers:r,borderLines:l}}});tr.render=er;var nr=tr,or={class:"text-element-operate"};function cr(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",or,[e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(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:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.dragLineElement(n,e.elementInfo,t.handler)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var ar=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{ResizeHandler:La},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=Z(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){var t=[{handler:ce.START,style:{left:e.elementInfo.start[0]*n.value+"px",top:e.elementInfo.start[1]*n.value+"px"}},{handler:ce.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:ce.MID,style:{left:o[0]*n.value+"px",top:o[1]*n.value+"px"}})}return t}));return{resizeHandlers:o}}});ar.render=cr;var rr=ar,lr={class:"chart-element-operate"};function ir(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",lr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var ur=Object(j["defineComponent"])({name:"chart-element-operate",inheritAttrs:!1,components:{ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Ca(o,c),r=a.resizeHandlers,l=a.borderLines;return{scaleWidth:o,resizeHandlers:r,borderLines:l}}});ur.render=ir;var dr=ur,sr={class:"table-element-operate"};function fr(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",sr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var pr=Object(j["defineComponent"])({name:"table-element-operate",inheritAttrs:!1,components:{ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),r=Ca(c,a),l=r.textElementResizeHandlers,i=r.borderLines;return{scaleWidth:c,textElementResizeHandlers:l,borderLines:i}}});pr.render=fr;var br=pr,mr=Object(j["defineComponent"])({name:"operate",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}},setup:function(e){var t=Z(),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})),a=Object(j["computed"])((function(){var t,n=(t={},Object(T["a"])(t,jn.IMAGE,Ya),Object(T["a"])(t,jn.TEXT,Qa),Object(T["a"])(t,jn.SHAPE,nr),Object(T["a"])(t,jn.LINE,rr),Object(T["a"])(t,jn.CHART,dr),Object(T["a"])(t,jn.TABLE,br),t);return n[e.elementInfo.type]||null})),r=Object(j["computed"])((function(){var t=c.value.animations||[];return t.findIndex((function(t){return t.elId===e.elementInfo.id}))}));return{currentOperateComponent:a,canvasScale:n,toolbarState:o,elementIndexInAnimation:r}}});n("9884");mr.render=Ra,mr.__scopeId="data-v-558a94fe";var vr=mr,Or=Object(j["defineComponent"])({name:"editor-canvas",components:{EditableElement:na,MouseSelection:ra,ViewportBackground:ma,AlignmentLine:ja,ElementCreateSelection:ka,MultiSelectOperate:Ma,Operate:vr},setup:function(){var e=Z(),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})),a=Object(j["computed"])((function(){return e.state.ctrlKeyState})),r=Object(j["computed"])((function(){return e.getters.ctrlOrShiftKeyActive})),l=Object(j["ref"])(),i=Object(j["ref"])([]);Object(j["watch"])(n,(function(){e.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,"")}));var u=Object(j["computed"])((function(){return e.getters.currentSlide})),d=Object(j["ref"])([]),s=function(){d.value=u.value?JSON.parse(JSON.stringify(u.value.elements)):[]};Object(j["watchEffect"])(s);var f=Object(j["ref"])(),p=Object(j["computed"])((function(){return e.state.canvasScale})),b=Xt(f),m=b.viewportStyles;$t(f);var v=Qt(d,l),O=v.mouseSelectionState,h=v.updateMouseSelection,g=bn(d,i),E=g.dragElement,k=mn(d),I=k.dragLineElement,S=pn(d,E),C=S.selectElement,N=dn(d,i),T=N.scaleElement,x=N.scaleMultiElement,L=tn(d,l),w=L.rotateElement,V=Re(),_=V.selectAllElement,B=Me(),D=B.deleteAllElements,M=Pe(),A=M.pasteElement,P=qe(),R=P.enterScreening,F=Be(),H=F.updateSlideIndex,z=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),r.value||h(t),c.value||e.commit(y.SET_EDITORAREA_FOCUS,!0),qt()},U=function(){c.value&&e.commit(y.SET_EDITORAREA_FOCUS,!1)},G=Xe(),q=G.scaleCanvas,X=Ne()(q,100,{leading:!0,trailing:!1}),W=Ne()(H,300,{leading:!0,trailing:!1}),Y=function(e){e.preventDefault(),a.value?e.deltaY>0?X("-"):e.deltaY<0&&X("+"):e.deltaY>0?W(ae.DOWN):e.deltaY<0&&W(ae.UP)},J=Object(j["computed"])((function(){return e.state.showGridLines})),K=function(){e.commit(y.SET_GRID_LINES_STATE,!J.value)},Q=Object(j["computed"])((function(){return e.state.creatingElement})),$=On(l),ee=$.insertElementFromCreateSelection,te=function(){return[{text:"粘贴",subText:"Ctrl + V",handler:A},{text:"全选",subText:"Ctrl + A",handler:_},{text:"网格线",subText:J.value?"√":"",handler:K},{text:"重置当前页",handler:D},{divider:!0},{text:"从当前页演示",subText:"Ctrl+F",handler:R}]};return Object(j["provide"])("slideScale",p),{elementList:d,activeElementIdList:t,handleElementId:n,activeGroupElementId:o,canvasRef:f,viewportRef:l,viewportStyles:m,canvasScale:p,mouseSelectionState:O,handleClickBlankArea:z,removeEditorAreaFocus:U,currentSlide:u,creatingElement:Q,insertElementFromCreateSelection:ee,alignmentLines:i,selectElement:C,rotateElement:w,scaleElement:T,dragLineElement:I,scaleMultiElement:x,handleMousewheelCanvas:Y,contextmenus:te}}});n("04be");Or.render=Gt,Or.__scopeId="data-v-fb6f9726";var hr=Or,jr=Object(j["withScopeId"])("data-v-59ae6536");Object(j["pushScopeId"])("data-v-59ae6536");var gr={class:"canvas-tool"},yr={class:"left-handler"},Er={class:"add-element-handler"},kr={class:"right-handler"},Ir={class:"text"};Object(j["popScopeId"])();var Sr=jr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconBack"),l=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"),b=Object(j["resolveComponent"])("Popover"),m=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"),k=Object(j["resolveComponent"])("IconPlus"),I=Object(j["resolveComponent"])("IconFullScreen");return Object(j["openBlock"])(),Object(j["createBlock"])("div",gr,[Object(j["createVNode"])("div",yr,[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"撤销"},{default:jr((function(){return[Object(j["createVNode"])(r,{class:["handler-item",{disable:!e.canUndo}],onClick:t[1]||(t[1]=function(t){return e.undo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"重做"},{default:jr((function(){return[Object(j["createVNode"])(i,{class:["handler-item",{disable:!e.canRedo}],onClick:t[2]||(t[2]=function(t){return e.redo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"])]),Object(j["createVNode"])("div",Er,[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入文字"},{default:jr((function(){return[Object(j["createVNode"])(u,{class:"handler-item",onClick:t[3]||(t[3]=function(t){return e.drawText()})})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(s,{onChange:t[4]||(t[4]=function(t){return e.insertImageElement(t)})},{default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图片"},{default:jr((function(){return[Object(j["createVNode"])(d,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(b,{trigger:"click",visible:e.shapePoolVisible,"onUpdate:visible":t[6]||(t[6]=function(t){return e.shapePoolVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(f,{onSelect:t[5]||(t[5]=function(t){return e.drawShape(t)})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入形状"},{default:jr((function(){return[Object(j["createVNode"])(p,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(b,{trigger:"click",visible:e.linePoolVisible,"onUpdate:visible":t[8]||(t[8]=function(t){return e.linePoolVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(m,{onSelect:t[7]||(t[7]=function(t){return e.drawLine(t)})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入线条"},{default:jr((function(){return[Object(j["createVNode"])(v,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(b,{trigger:"click",visible:e.chartPoolVisible,"onUpdate:visible":t[10]||(t[10]=function(t){return e.chartPoolVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(O,{onSelect:t[9]||(t[9]=function(t){e.createChartElement(t),e.chartPoolVisible=!1})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图表"},{default:jr((function(){return[Object(j["createVNode"])(h,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(b,{trigger:"click",visible:e.tableGeneratorVisible,"onUpdate:visible":t[13]||(t[13]=function(t){return e.tableGeneratorVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(g,{onClose:t[11]||(t[11]=function(t){return e.tableGeneratorVisible=!1}),onInsert:t[12]||(t[12]=function(t){var n=t.row,o=t.col;e.createTableElement(n,o),e.tableGeneratorVisible=!1})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入表格"},{default:jr((function(){return[Object(j["createVNode"])(y,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"])]),Object(j["createVNode"])("div",kr,[Object(j["createVNode"])(E,{class:"handler-item viewport-size",onClick:t[14]||(t[14]=function(t){return e.scaleCanvas("-")})}),Object(j["createVNode"])("span",Ir,Object(j["toDisplayString"])(e.canvasScalePercentage),1),Object(j["createVNode"])(k,{class:"handler-item viewport-size",onClick:t[15]||(t[15]=function(t){return e.scaleCanvas("+")})}),Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"适配屏幕"},{default:jr((function(){return[Object(j["createVNode"])(I,{class:"handler-item viewport-size-adaptation",onClick:t[16]||(t[16]=function(t){return e.setCanvasPercentage(90)})})]})),_:1},8,["mouseEnterDelay"])])])})),Cr=Object(j["withScopeId"])("data-v-5aabd717");Object(j["pushScopeId"])("data-v-5aabd717");var Nr={class:"shape-pool"},Tr={class:"category-name"},xr={class:"shape-list"};Object(j["popScopeId"])();var Lr=Cr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Nr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.shapeList,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"category",key:t.type},[Object(j["createVNode"])("div",Tr,Object(j["toDisplayString"])(t.type),1),Object(j["createVNode"])("div",xr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"shape-item",key:n},[Object(j["createVNode"])("div",{class:"shape-content",onClick:function(n){return e.selectShape(t)}},[Object(j["createVNode"])(r,{overflow:"visible",width:"18",height:"18"},{default:Cr((function(){return[Object(j["createVNode"])("g",{transform:"scale(".concat(18/t.viewBox,", ").concat(18/t.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createVNode"])("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,["d"])],8,["transform"])]})),_:2},1024)],8,["onClick"])])})),128))])])})),128))])})),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 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"}]},{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"},{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"}]},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"}]}],Vr=Object(j["defineComponent"])({name:"shape-pool",setup:function(e,t){var n=t.emit,o=wr,c=function(e){n("select",e)};return{shapeList:o,selectShape:c}}});n("3041");Vr.render=Lr,Vr.__scopeId="data-v-5aabd717";var _r=Vr,Br=Object(j["withScopeId"])("data-v-5087394c");Object(j["pushScopeId"])("data-v-5087394c");var Dr={class:"line-pool"},Mr={class:"category-name"},Ar={class:"line-list"};Object(j["popScopeId"])();var Pr=Br((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("LinePointMarker"),l=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Dr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.lineList,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"category",key:t.type},[Object(j["createVNode"])("div",Mr,Object(j["toDisplayString"])(t.type),1),Object(j["createVNode"])("div",Ar,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"line-item",key:n},[Object(j["createVNode"])("div",{class:"line-content",onClick:function(n){return e.selectLine(t)}},[Object(j["createVNode"])(l,{overflow:"visible",width:"20",height:"20"},{default:Br((function(){return[Object(j["createVNode"])("defs",null,[t.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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"])(r,{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["createVNode"])("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,["d","stroke-dasharray","marker-start","marker-end"])]})),_:2},1024)],8,["onClick"])])})),128))])])})),128))])})),Rr=[{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}]}],Fr=Object(j["defineComponent"])({name:"line-pool",components:{LinePointMarker:gc},setup:function(e,t){var n=t.emit,o=Rr,c=function(e){n("select",e)};return{lineList:o,selectLine:c}}});n("6530");Fr.render=Pr,Fr.__scopeId="data-v-5087394c";var Hr=Fr,zr=Object(j["withScopeId"])("data-v-0028f4b9");Object(j["pushScopeId"])("data-v-0028f4b9");var Ur={class:"chart-pool"};Object(j["popScopeId"])();var Gr=zr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconChartLine"),l=Object(j["resolveComponent"])("IconChartHistogram"),i=Object(j["resolveComponent"])("IconChartPie");return Object(j["openBlock"])(),Object(j["createBlock"])("ul",Ur,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.chartList,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("li",{class:"chart-item",key:n},[Object(j["createVNode"])("div",{class:"chart-content",onClick:function(n){return e.selectChart(t)}},["line"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,size:"24"})):"bar"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:1,size:"24"})):"pie"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:2,size:"24"})):Object(j["createCommentVNode"])("",!0)],8,["onClick"])])})),128))])})),qr=Object(j["defineComponent"])({name:"chart-pool",setup:function(e,t){var n=t.emit,o=["bar","line","pie"],c=function(e){n("select",e)};return{chartList:o,selectChart:c}}});n("f558");qr.render=Gr,qr.__scopeId="data-v-0028f4b9";var Xr=qr,Wr=Object(j["withScopeId"])("data-v-576c614c");Object(j["pushScopeId"])("data-v-576c614c");var Yr={class:"table-generator"},Zr={class:"title"},Jr={class:"lef"},Kr={key:1,class:"custom"},Qr={class:"row"},$r=Object(j["createVNode"])("div",{class:"label",style:{flex:"1"}},"行数:",-1),el={class:"row"},tl=Object(j["createVNode"])("div",{class:"label",style:{flex:"1"}},"列数:",-1),nl={class:"btns"},ol=Object(j["createTextVNode"])("取消"),cl=Object(j["createTextVNode"])("确认");Object(j["popScopeId"])();var al=Wr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("InputNumber"),l=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Yr,[Object(j["createVNode"])("div",Zr,[Object(j["createVNode"])("div",Jr,"表格 "+Object(j["toDisplayString"])(e.endCell.length?"".concat(e.endCell[0]," x ").concat(e.endCell[1]):""),1),Object(j["createVNode"])("div",{class:"right",onClick:t[1]||(t[1]=function(t){return e.isCustom=!e.isCustom})},Object(j["toDisplayString"])(e.isCustom?"返回":"自定义"),1)]),e.isCustom?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Kr,[Object(j["createVNode"])("div",Qr,[$r,Object(j["createVNode"])(r,{min:1,max:20,value:e.customRow,"onUpdate:value":t[4]||(t[4]=function(t){return e.customRow=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createVNode"])("div",el,[tl,Object(j["createVNode"])(r,{min:1,max:20,value:e.customCol,"onUpdate:value":t[5]||(t[5]=function(t){return e.customCol=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createVNode"])("div",nl,[Object(j["createVNode"])(l,{class:"btn",onClick:t[6]||(t[6]=function(t){return e.close()})},{default:Wr((function(){return[ol]})),_:1}),Object(j["createVNode"])(l,{class:"btn",type:"primary",onClick:t[7]||(t[7]=function(t){return e.insertCustomTable()})},{default:Wr((function(){return[cl]})),_:1})])])):(Object(j["openBlock"])(),Object(j["createBlock"])("table",{key:0,onMouseleave:t[2]||(t[2]=function(t){return e.endCell=[]}),onClick:t[3]||(t[3]=function(t){return e.handleClickTable()})},[Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(t){return Object(j["createVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(n){return Object(j["createVNode"])("td",{onMouseenter:function(o){return e.endCell=[t,n]},key:n},[Object(j["createVNode"])("div",{class:["cell",{active:e.endCell.length&&t<=e.endCell[0]&&n<=e.endCell[1]}]},null,2)],40,["onMouseenter"])})),64))])})),64))])],32))])})),rl=Object(j["defineComponent"])({name:"table-generator",setup:function(e,t){var n=t.emit,o=Object(j["ref"])([]),c=Object(j["ref"])(3),a=Object(j["ref"])(3),r=Object(j["ref"])(!1),l=function(){if(o.value.length){var e=Object(vn["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||a.value<1||a.value>20?ie["a"].warning("行数/列数必须在0~20之间!"):(n("insert",{row:c.value,col:a.value}),void(r.value=!1))},u=function(){n("close"),r.value=!1};return{endCell:o,customRow:c,customCol:a,handleClickTable:l,insertCustomTable:i,isCustom:r,close:u}}});n("b61d");rl.render=al,rl.__scopeId="data-v-576c614c";var ll=rl,il=Object(j["defineComponent"])({name:"canvas-tool",components:{ShapePool:_r,LinePool:Hr,ChartPool:Xr,TableGenerator:ll},setup:function(){var e=Z(),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+"")+"%"})),a=Xe(),r=a.scaleCanvas,l=a.setCanvasPercentage,i=Te(),u=i.redo,d=i.undo,s=Ve(),f=s.createImageElement,p=s.createChartElement,b=s.createTableElement,m=function(e){var t=e[0];t&&Le(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})},k=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"shape",data:t}),v.value=!1},I=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"line",data:t}),O.value=!1};return{scaleCanvas:r,setCanvasPercentage:l,canvasScalePercentage:c,canUndo:n,canRedo:o,redo:u,undo:d,insertImageElement:m,shapePoolVisible:v,linePoolVisible:O,chartPoolVisible:h,tableGeneratorVisible:g,drawText:E,drawShape:k,drawLine:I,createChartElement:p,createTableElement:b}}});n("f91d");il.render=Sr,il.__scopeId="data-v-59ae6536";var ul=il,dl=Object(j["withScopeId"])("data-v-57618e72");Object(j["pushScopeId"])("data-v-57618e72");var sl=Object(j["createTextVNode"])("添加幻灯片"),fl={class:"label"};Object(j["popScopeId"])();var pl=dl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconPlus"),l=Object(j["resolveComponent"])("ThumbnailSlide"),i=Object(j["resolveComponent"])("Draggable"),u=Object(j["resolveDirective"])("contextmenu"),d=Object(j["resolveDirective"])("click-outside");return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"thumbnails",onMousedown:t[2]||(t[2]=function(){return e.setThumbnailsFocus(!0)})},[Object(j["createVNode"])("div",{class:"add-slide",onClick:t[1]||(t[1]=function(t){return e.createSlide()})},[Object(j["createVNode"])(r,{class:"icon"}),sl]),Object(j["createVNode"])(i,{class:"thumbnail-list",modelValue:e.slides,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:dl((function(t){var n=t.element,o=t.index;return[Object(j["withDirectives"])(Object(j["createVNode"])("div",{class:["thumbnail-item",{active:e.slideIndex===o,selected:e.selectedSlidesIndex.includes(o)}],onMousedown:function(t){return e.handleClickSlideThumbnail(t,o)}},[Object(j["createVNode"])("div",fl,Object(j["toDisplayString"])(e.fillDigit(o+1,2)),1),Object(j["createVNode"])(l,{class:"thumbnail",slide:n,size:120},null,8,["slide"])],42,["onMousedown"]),[[u,e.contextmenusThumbnailItem]])]})),_:1},8,["modelValue","onEnd"])],544)),[[d,function(){return e.setThumbnailsFocus(!1)}],[u,e.contextmenusThumbnails]])})),bl=n("b76a"),ml=n.n(bl),vl=Object(j["withScopeId"])("data-v-4e59015e"),Ol=vl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ThumbnailElement");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"thumbnail-slide",style:{width:e.size+"px",height:e.size*e.viewportRatio+"px"}},[Object(j["createVNode"])("div",{class:"elements",style:{width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")}},[Object(j["createVNode"])("div",{class:"background",style:e.backgroundStyle},null,4),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.id,elementInfo:e,elementIndex:t+1},null,8,["elementInfo","elementIndex"])})),128))],4)],4)}));function hl(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element",style:{zIndex:e.elementIndex}},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,target:"thumbnail"},null,8,["elementInfo"]))],4)}var jl=Object(j["withScopeId"])("data-v-b0d4d1b2"),gl=jl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ImageOutline");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-image",style:{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["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["createVNode"])("div",{class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}},[Object(j["createVNode"])(r,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createVNode"])("div",{class:"image-content",style:{clipPath:e.clipShape.style}},[Object(j["createVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:{top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter},alt:""},null,12,["src"])],4)],4)],4)],4)})),yl=Object(j["defineComponent"])({name:"base-element-image",components:{ImageOutline:Xn},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=Sn(t),o=n.shadowStyle,c=Object(j["computed"])((function(){return e.elementInfo.flipH})),a=Object(j["computed"])((function(){return e.elementInfo.flipV})),r=Cn(c,a),l=r.flipStyle,i=Object(j["computed"])((function(){return e.elementInfo.clip})),u=Tn(i),d=u.clipShape,s=u.imgPosition,f=Object(j["computed"])((function(){return e.elementInfo.filters})),p=xn(f),b=p.filter;return{imgPosition:s,filter:b,flipStyle:l,shadowStyle:o,clipShape:d}}});n("a576");yl.render=gl,yl.__scopeId="data-v-b0d4d1b2";var El=yl,kl=Object(j["withScopeId"])("data-v-2ec235c4"),Il=kl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-text",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["createVNode"])("div",{class:"element-content",style:{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"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])("div",{class:"text ProseMirror-static",innerHTML:e.elementInfo.content},null,8,["innerHTML"])],4)],4)],4)})),Sl=Object(j["defineComponent"])({name:"base-element-text",components:{ElementOutline:oc},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=Sn(t),o=n.shadowStyle;return{shadowStyle:o}}});n("5264");Sl.render=Il,Sl.__scopeId="data-v-2ec235c4";var Cl=Sl,Nl=Object(j["withScopeId"])("data-v-6fef68fd");Object(j["pushScopeId"])("data-v-6fef68fd");var Tl={key:0};Object(j["popScopeId"])();var xl=Nl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("GradientDefs"),l=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-shape",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["createVNode"])("div",{class:"element-content",style:{opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}},[Object(j["createVNode"])(l,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:Nl((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createBlock"])("defs",Tl,[Object(j["createVNode"])(r,{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["createVNode"])("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["createVNode"])("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,["d","fill","stroke","stroke-width","stroke-dasharray"])],8,["transform"])]})),_:1},8,["width","height"])],4)],4)],4)})),Ll=Object(j["defineComponent"])({name:"base-element-shape",components:{GradientDefs:sc},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.outline})),n=Bn(t),o=n.outlineWidth,c=n.outlineStyle,a=n.outlineColor,r=Object(j["computed"])((function(){return e.elementInfo.shadow})),l=Sn(r),i=l.shadowStyle,u=Object(j["computed"])((function(){return e.elementInfo.flipH})),d=Object(j["computed"])((function(){return e.elementInfo.flipV})),s=Cn(u,d),f=s.flipStyle;return{shadowStyle:i,outlineWidth:o,outlineStyle:c,outlineColor:a,flipStyle:f}}});n("9569");Ll.render=xl,Ll.__scopeId="data-v-6fef68fd";var wl=Ll,Vl=Object(j["withScopeId"])("data-v-56b0510c"),_l=Vl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("LinePointMarker"),l=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"editable-element-shape",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""}},[Object(j["createVNode"])(l,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:Vl((function(){return[Object(j["createVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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"])(r,{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["createVNode"])("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,["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"])]})),_:1},8,["width","height"])],4)],4)})),Bl=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:gc},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=Sn(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})),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, 5":"0, 0"})),l=Object(j["computed"])((function(){var t=e.elementInfo.start.join(","),n=e.elementInfo.end.join(",");if(e.elementInfo.broken){var o=e.elementInfo.broken.join(",");return"M".concat(t," L").concat(o," L").concat(n)}if(e.elementInfo.curve){var c=e.elementInfo.curve.join(",");return"M".concat(t," Q").concat(c," ").concat(n)}return"M".concat(t," L").concat(n)}));return{shadowStyle:o,svgWidth:c,svgHeight:a,lineDashArray:r,path:l}}});n("387f");Bl.render=_l,Bl.__scopeId="data-v-56b0510c";var Dl=Bl,Ml=Object(j["withScopeId"])("data-v-2d25f60a"),Al=Ml((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline"),l=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["createBlock"])("div",{class:"base-element-chart",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{backgroundColor:e.elementInfo.fill}},[Object(j["createVNode"])(r,{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"])(l,{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)})),Pl=Object(j["defineComponent"])({name:"base-element-chart",components:{ElementOutline:oc},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");Pl.render=Al,Pl.__scopeId="data-v-2d25f60a";var Rl=Pl,Fl=Object(j["withScopeId"])("data-v-dea016ac");Object(j["pushScopeId"])("data-v-dea016ac");var Hl={class:"element-content"};Object(j["popScopeId"])();var zl=Fl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("StaticTable");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-table",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"}},[Object(j["createVNode"])("div",Hl,[Object(j["createVNode"])(r,{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)})),Ul=Object(j["withScopeId"])("data-v-01f791ba"),Gl=Ul((function(e,t,n,o,c,a){var r,l,i,u,d;return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"static-table",style:{width:e.totalWidth+"px"}},[Object(j["createVNode"])("table",{class:{theme:e.theme,"row-header":null===(r=e.theme)||void 0===r?void 0:r.rowHeader,"row-footer":null===(l=e.theme)||void 0===l?void 0:l.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:"--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["createVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])("col",{span:"1",key:t,width:e},null,8,["width"])})),128))]),Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.data,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("tr",{key:n},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t,o){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("td",{class:"cell",style:Object(F["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["createVNode"])("div",{class:"cell-text",innerHTML:t.text},null,8,["innerHTML"])],12,["rowspan","colspan"])),[[j["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))]])})),128))])})),128))])],6)],4)})),ql=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=qc(o),a=c.hideCells,r=Object(j["computed"])((function(){return e.theme})),l=Xc(r),i=l.subThemeColor;return{colSizeList:t,totalWidth:n,hideCells:a,getTextStyle:Gc,subThemeColor:i}}});n("1726");ql.render=Gl,ql.__scopeId="data-v-01f791ba";var Xl=ql,Wl=Object(j["defineComponent"])({name:"base-element-table",components:{StaticTable:Xl},props:{elementInfo:{type:Object,required:!0}}});n("ba04");Wl.render=zl,Wl.__scopeId="data-v-dea016ac";var Yl=Wl,Zl=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(T["a"])(t,jn.IMAGE,El),Object(T["a"])(t,jn.TEXT,Cl),Object(T["a"])(t,jn.SHAPE,wl),Object(T["a"])(t,jn.LINE,Dl),Object(T["a"])(t,jn.CHART,Rl),Object(T["a"])(t,jn.TABLE,Yl),t);return n[e.elementInfo.type]||null}));return{currentElementComponent:t}}});Zl.render=hl;var Jl=Zl,Kl=Object(j["defineComponent"])({name:"thumbnail-slide",components:{ThumbnailElement:Jl},props:{slide:{type:Object,required:!0},size:{type:Number,required:!0}},setup:function(e){var t=Z(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=pa(o),a=c.backgroundStyle,r=Object(j["computed"])((function(){return e.size/we}));return{scale:r,backgroundStyle:a,VIEWPORT_SIZE:we,viewportRatio:n}}});n("2b61");Kl.render=Ol,Kl.__scopeId="data-v-4e59015e";var Ql=Kl,$l=Object(j["defineComponent"])({name:"thumbnails",components:{Draggable:ml.a,ThumbnailSlide:Ql},setup:function(){var e=Z(),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})),a=Object(j["computed"])((function(){return[].concat(Object(R["a"])(e.state.selectedSlidesIndex),[n.value])})),r=Be(),l=r.copySlide,i=r.pasteSlide,u=r.createSlide,d=r.copyAndPasteSlide,s=r.deleteSlide,f=r.cutSlide,p=r.selectAllSlide,b=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),n.value!==t&&e.commit(y.UPDATE_SLIDE_INDEX,t)},m=function(t,r){var l=a.value.length>1;if(!l||!a.value.includes(r)||0===t.button)if(o.value)if(n.value===r){if(!l)return;var i=a.value.filter((function(e){return e!==r}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,i),b(a.value[0])}else if(a.value.includes(r)){var u=a.value.filter((function(e){return e!==r}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,u)}else{var d=[].concat(Object(R["a"])(a.value),[r]);e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,d),b(r)}else if(c.value){if(n.value===r&&!l)return;var s=Math.min.apply(Math,Object(R["a"])(a.value)),f=r;r1&&void 0!==arguments[1]?arguments[1]:0,c=u(),a=c.originClipRange,l=c.originWidth,d=c.originHeight,s=c.originLeft,f=c.originTop;if(o){var p,b=d/l,m=0,v=100;if(b>o){var O=(1-o/b)/2*100;p=[[m,O],[v,v-O]]}else{var h=(1-b/o)/2*100;p=[[h,m],[v-h,v]]}e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{clip:Object(F["a"])(Object(F["a"])({},t.value.clip),{},{shape:n,range:p}),left:s+l*(p[0][0]/100),top:f+d*(p[0][1]/100),width:l*(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(F["a"])(Object(F["a"])({},t.value.clip),{},{shape:n,range:a})}});i(),r()},s=function(n){var o=n[0];o&&(Le(o).then((function(n){var o={src:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o})})),r())},f=function(){if(t.value.clip){var n=u(),o=n.originWidth,c=n.originHeight,a=n.originLeft,l=n.originTop;e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{left:a,top:l,width:o,height:c}})}e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:["clip","outline","flip","shadow","filters"]}),r()},p=function(){var o=Object(F["a"])(Object(F["a"])({},n.value.background),{},{type:"image",image:t.value.src,imageSize:"cover"});e.commit(y.UPDATE_SLIDE,{background:o}),r()};return{clipPanelVisible:o,shapeClipPathOptions:Bu,ratioClipOptions:Du,filterOptions:c,handleElement:t,updateFilter:l,clipImage:i,presetImageClip:d,replaceImage:s,resetImage:f,setBackgroundImage:p}}});n("83fa");Mu.render=Su,Mu.__scopeId="data-v-c1cc1cba";var Au=Mu,Pu=Object(j["withScopeId"])("data-v-998a7a02");Object(j["pushScopeId"])("data-v-998a7a02");var Ru={class:"shape-style-panel"},Fu={class:"row"},Hu=Object(j["createTextVNode"])("纯色填充"),zu=Object(j["createTextVNode"])("渐变填充"),Uu=Object(j["createVNode"])("div",{style:{flex:"1"}},null,-1),Gu=Object(j["createTextVNode"])("线性渐变"),qu=Object(j["createTextVNode"])("径向渐变"),Xu={class:"row"},Wu=Object(j["createVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),Yu={class:"row"},Zu=Object(j["createVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Ju={key:0,class:"row"},Ku=Object(j["createVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1);Object(j["popScopeId"])();var Qu=Pu((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SelectOption"),l=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"),b=Object(j["resolveComponent"])("ElementOutline"),m=Object(j["resolveComponent"])("ElementShadow"),v=Object(j["resolveComponent"])("ElementOpacity");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Ru,[Object(j["createVNode"])("div",Fu,[Object(j["createVNode"])(l,{style:{flex:"10"},value:e.fillType,onChange:t[1]||(t[1]=function(t){return e.updateFillType(t)})},{default:Pu((function(){return[Object(j["createVNode"])(r,{value:"fill"},{default:Pu((function(){return[Hu]})),_:1}),Object(j["createVNode"])(r,{value:"gradient"},{default:Pu((function(){return[zu]})),_:1})]})),_:1},8,["value"]),Uu,"fill"===e.fillType?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:Pu((function(){return[Object(j["createVNode"])(i,{modelValue:e.fill,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Pu((function(){return[Object(j["createVNode"])(u,{color:e.fill,style:{flex:"10"}},null,8,["color"])]})),_:1})):(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:1,style:{flex:"10"},value:e.gradient.type,onChange:t[3]||(t[3]=function(t){return e.updateGradient({type:t})})},{default:Pu((function(){return[Object(j["createVNode"])(r,{value:"linear"},{default:Pu((function(){return[Gu]})),_:1}),Object(j["createVNode"])(r,{value:"radial"},{default:Pu((function(){return[qu]})),_:1})]})),_:1},8,["value"]))]),"gradient"===e.fillType?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",Xu,[Wu,Object(j["createVNode"])(d,{trigger:"click"},{content:Pu((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[0],"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateGradient({color:[t,e.gradient.color[1]]})})},null,8,["modelValue"])]})),default:Pu((function(){return[Object(j["createVNode"])(u,{color:e.gradient.color[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Yu,[Zu,Object(j["createVNode"])(d,{trigger:"click"},{content:Pu((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[1],"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.updateGradient({color:[e.gradient.color[0],t]})})},null,8,["modelValue"])]})),default:Pu((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["createBlock"])("div",Ju,[Ku,Object(j["createVNode"])(s,{min:0,max:360,step:15,value:e.gradient.rotate,style:{flex:"3"},onChange:t[6]||(t[6]=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),Object(j["createVNode"])(b),Object(j["createVNode"])(p),Object(j["createVNode"])(m),Object(j["createVNode"])(p),Object(j["createVNode"])(v)])})),$u=Object(j["defineComponent"])({name:"shape-style-panel",components:{ElementOpacity:Ii,ElementOutline:Gi,ElementShadow:ru,ElementFlip:Vu,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(),o=Object(j["ref"])(),c=Object(j["ref"])("fill");Object(j["watch"])(t,(function(){t.value&&"shape"===t.value.type&&(n.value=t.value.fill||"#000",o.value=t.value.gradient||{type:"linear",rotate:0,color:[n.value,"#fff"]},c.value=t.value.gradient?"gradient":"fill")}),{deep:!0,immediate:!0});var a=Te(),r=a.addHistorySnapshot,l=function(n){if("fill"===n)e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:"gradient"});else{var c={gradient:o.value};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c})}r()},i=function(n){var c={gradient:Object(F["a"])(Object(F["a"])({},o.value),n)};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),r()},u=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),r()};return{fill:n,gradient:o,fillType:c,updateFillType:l,updateFill:u,updateGradient:i}}});n("6f16");$u.render=Qu,$u.__scopeId="data-v-998a7a02";var ed=$u,td=Object(j["withScopeId"])("data-v-65b24fb3");Object(j["pushScopeId"])("data-v-65b24fb3");var nd={class:"line-style-panel"},od={class:"row"},cd=Object(j["createVNode"])("div",{style:{flex:"2"}},"线条样式:",-1),ad=Object(j["createTextVNode"])("实线"),rd=Object(j["createTextVNode"])("虚线"),ld={class:"row"},id=Object(j["createVNode"])("div",{style:{flex:"2"}},"线条颜色:",-1),ud={class:"row"},dd=Object(j["createVNode"])("div",{style:{flex:"2"}},"线条宽度:",-1),sd={class:"row"},fd=Object(j["createVNode"])("div",{style:{flex:"2"}},"起点样式:",-1),pd=Object(j["createTextVNode"])("无"),bd=Object(j["createTextVNode"])("箭头"),md=Object(j["createTextVNode"])("圆点"),vd={class:"row"},Od=Object(j["createVNode"])("div",{style:{flex:"2"}},"终点样式:",-1),hd=Object(j["createTextVNode"])("无"),jd=Object(j["createTextVNode"])("箭头"),gd=Object(j["createTextVNode"])("圆点");Object(j["popScopeId"])();var yd=td((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SelectOption"),l=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["createBlock"])("div",nd,[Object(j["createVNode"])("div",od,[cd,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.handleElement.style,onChange:t[1]||(t[1]=function(t){return e.updateLine({style:t})})},{default:td((function(){return[Object(j["createVNode"])(r,{value:"solid"},{default:td((function(){return[ad]})),_:1}),Object(j["createVNode"])(r,{value:"dashed"},{default:td((function(){return[rd]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])("div",ld,[id,Object(j["createVNode"])(d,{trigger:"click"},{content:td((function(){return[Object(j["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateLine({color:t})})},null,8,["modelValue"])]})),default:td((function(){return[Object(j["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",ud,[dd,Object(j["createVNode"])(s,{value:e.handleElement.width,onChange:t[3]||(t[3]=function(t){return e.updateLine({width:t})}),style:{flex:"3"}},null,8,["value"])]),Object(j["createVNode"])("div",sd,[fd,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.handleElement.points[0],onChange:t[4]||(t[4]=function(t){return e.updateLine({points:[t,e.handleElement.points[1]]})})},{default:td((function(){return[Object(j["createVNode"])(r,{value:""},{default:td((function(){return[pd]})),_:1}),Object(j["createVNode"])(r,{value:"arrow"},{default:td((function(){return[bd]})),_:1}),Object(j["createVNode"])(r,{value:"dot"},{default:td((function(){return[md]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])("div",vd,[Od,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.handleElement.points[1],onChange:t[5]||(t[5]=function(t){return e.updateLine({points:[e.handleElement.points[0],t]})})},{default:td((function(){return[Object(j["createVNode"])(r,{value:""},{default:td((function(){return[hd]})),_:1}),Object(j["createVNode"])(r,{value:"arrow"},{default:td((function(){return[jd]})),_:1}),Object(j["createVNode"])(r,{value:"dot"},{default:td((function(){return[gd]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])(f),Object(j["createVNode"])(p)])})),Ed=Object(j["defineComponent"])({name:"line-style-panel",components:{ElementShadow:ru,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Te(),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");Ed.render=yd,Ed.__scopeId="data-v-65b24fb3";var kd=Ed,Id=Object(j["withScopeId"])("data-v-62789f0d");Object(j["pushScopeId"])("data-v-62789f0d");var Sd={class:"chart-style-panel"},Cd=Object(j["createTextVNode"])(" 编辑图表数据 "),Nd={class:"row"},Td=Object(j["createTextVNode"])("面积图样式"),xd=Object(j["createTextVNode"])("散点图样式"),Ld={class:"row"},wd=Object(j["createTextVNode"])("使用平滑曲线"),Vd={key:1,class:"row"},_d=Object(j["createTextVNode"])("条形图样式"),Bd={key:2,class:"row"},Dd=Object(j["createTextVNode"])("环形图样式"),Md={class:"row"},Ad=Object(j["createVNode"])("div",{style:{flex:"2"}},"背景填充:",-1),Pd={class:"row"},Rd=Object(j["createVNode"])("div",{style:{flex:"2"}},"主题配色:",-1),Fd={class:"row"},Hd=Object(j["createVNode"])("div",{style:{flex:"2"}},"网格颜色:",-1);Object(j["popScopeId"])();var zd=Id((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconEdit"),l=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"])("ElementOutline"),b=Object(j["resolveComponent"])("ChartDataEditor"),m=Object(j["resolveComponent"])("Modal");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Sd,[Object(j["createVNode"])(l,{class:"full-width-btn",onClick:t[1]||(t[1]=function(t){return e.chartDataEditorVisible=!0})},{default:Id((function(){return[Object(j["createVNode"])(r,{class:"btn-icon"}),Cd]})),_:1}),Object(j["createVNode"])(i),"line"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",Nd,[Object(j["createVNode"])(u,{onChange:t[2]||(t[2]=function(t){return e.updateOptions({showArea:t.target.checked})}),checked:e.showArea,style:{flex:"1"}},{default:Id((function(){return[Td]})),_:1},8,["checked"]),Object(j["createVNode"])(u,{onChange:t[3]||(t[3]=function(t){return e.updateOptions({showLine:!t.target.checked})}),checked:!e.showLine,style:{flex:"1"}},{default:Id((function(){return[xd]})),_:1},8,["checked"])]),Object(j["createVNode"])("div",Ld,[Object(j["createVNode"])(u,{onChange:t[4]||(t[4]=function(t){return e.updateOptions({lineSmooth:t.target.checked})}),checked:e.lineSmooth},{default:Id((function(){return[wd]})),_:1},8,["checked"])])],64)):Object(j["createCommentVNode"])("",!0),"bar"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Vd,[Object(j["createVNode"])(u,{onChange:t[5]||(t[5]=function(t){return e.updateOptions({horizontalBars:t.target.checked})}),checked:e.horizontalBars},{default:Id((function(){return[_d]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),"pie"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Bd,[Object(j["createVNode"])(u,{onChange:t[6]||(t[6]=function(t){return e.updateOptions({donut:t.target.checked})}),checked:e.donut},{default:Id((function(){return[Dd]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(i),Object(j["createVNode"])("div",Md,[Ad,Object(j["createVNode"])(f,{trigger:"click"},{content:Id((function(){return[Object(j["createVNode"])(d,{modelValue:e.fill,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Id((function(){return[Object(j["createVNode"])(s,{color:e.fill,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Pd,[Rd,Object(j["createVNode"])(f,{trigger:"click"},{content:Id((function(){return[Object(j["createVNode"])(d,{modelValue:e.themeColor,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.updateTheme(t)})},null,8,["modelValue"])]})),default:Id((function(){return[Object(j["createVNode"])(s,{color:e.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Fd,[Hd,Object(j["createVNode"])(f,{trigger:"click"},{content:Id((function(){return[Object(j["createVNode"])(d,{modelValue:e.gridColor,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.updateGridColor(t)})},null,8,["modelValue"])]})),default:Id((function(){return[Object(j["createVNode"])(s,{color:e.gridColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])(i),Object(j["createVNode"])(p),Object(j["createVNode"])(m,{visible:e.chartDataEditorVisible,"onUpdate:visible":t[12]||(t[12]=function(t){return e.chartDataEditorVisible=t}),footer:null,centered:"",closable:!1,width:648,destroyOnClose:""},{default:Id((function(){return[Object(j["createVNode"])(b,{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"])])})),Ud=Object(j["withScopeId"])("data-v-42e69ec4");Object(j["pushScopeId"])("data-v-42e69ec4");var Gd={class:"chart-data-editor"},qd={class:"editor-content"},Xd={class:"range-box"},Wd={class:"btns"},Yd=Object(j["createTextVNode"])("取消"),Zd=Object(j["createTextVNode"])("确认");Object(j["popScopeId"])();var Jd=Ud((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Gd,[Object(j["createVNode"])("div",qd,[Object(j["createVNode"])("div",Xd,[Object(j["createVNode"])("div",{class:"temp-range",style:{width:e.tempRangeSize.width+"px",height:e.tempRangeSize.height+"px"}},null,4),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.rangeLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["range-line",e.type],key:e.type,style:e.style},null,6)})),128)),Object(j["createVNode"])("div",{class:"resizable",style:e.resizablePointStyle,onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.changeSelectRange(t)}),["stop"]))},null,36)]),Object(j["createVNode"])("table",null,[Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(30,(function(t){return Object(j["createVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(7,(function(n){return Object(j["createVNode"])("td",{key:n,class:{head:1===n&&t<=e.selectedRange[1]}},[Object(j["createVNode"])("input",{class:["item",{selected:t<=e.selectedRange[1]&&n<=e.selectedRange[0]}],id:"cell-".concat(t-1,"-").concat(n-1),autocomplete:"off"},null,10,["id"])],2)})),64))])})),64))])])]),Object(j["createVNode"])("div",Wd,[Object(j["createVNode"])(r,{class:"btn",onClick:t[2]||(t[2]=function(t){return e.closeEditor()})},{default:Ud((function(){return[Yd]})),_:1}),Object(j["createVNode"])(r,{type:"primary",class:"btn",onClick:t[3]||(t[3]=function(t){return e.getTableData()})},{default:Ud((function(){return[Zd]})),_:1})])])})),Kd=100,Qd=32,$d=Object(j["defineComponent"])({name:"chart-data-editor",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}),a=Object(j["computed"])((function(){var e=o.value[0]*Kd,t=o.value[1]*Qd;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]*Kd,t=o.value[1]*Qd;return{left:e+"px",top:t+"px"}})),l=function(){for(var t=[],n=e.data,c=n.labels,a=n.series,r=c.length,l=a.length,i=0;i.5*Kd&&(i+=Kd-i%Kd),u%Qd>.5*Qd&&(u+=Qd-u%Qd);var d=Math.round(u/Qd),s=Math.round(i/Kd);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,changeSelectRange:d,selectedRange:o,getTableData:i,closeEditor:u}}});n("f14f");$d.render=Jd,$d.__scopeId="data-v-42e69ec4";var es=$d,ts=Object(j["defineComponent"])({name:"chart-style-panel",components:{ElementOutline:Gi,ChartDataEditor:es,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(!1),o=Te(),c=o.addHistorySnapshot,a=Object(j["ref"])(),r=Object(j["ref"])(""),l=Object(j["ref"])(""),i=Object(j["ref"])(!0),u=Object(j["ref"])(!0),d=Object(j["ref"])(!1),s=Object(j["ref"])(!1),f=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,p=e.horizontalBars,b=e.donut;void 0!==n&&(i.value=n),void 0!==o&&(u.value=o),void 0!==c&&(d.value=c),void 0!==p&&(s.value=p),void 0!==b&&(f.value=b)}r.value=t.value.themeColor,l.value=t.value.gridColor||"rgba(0, 0, 0, 0.4)"}}),{deep:!0,immediate:!0});var p=function(o){n.value=!1;var a={data:o};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:a}),c()},b=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),c()},m=function(n){var o=t.value.options||{},a=Object(F["a"])(Object(F["a"])({},o),n),r={options:a};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:r}),c()},v=function(n){var o={themeColor:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),c()},O=function(n){var o={gridColor:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),c()};return{chartDataEditorVisible:n,handleElement:t,updateData:p,fill:a,updateFill:b,lineSmooth:i,showLine:u,showArea:d,horizontalBars:s,donut:f,updateOptions:m,themeColor:r,gridColor:l,updateTheme:v,updateGridColor:O}}});n("89f5");ts.render=zd,ts.__scopeId="data-v-62789f0d";var ns=ts,os=Object(j["withScopeId"])("data-v-2db32cac");Object(j["pushScopeId"])("data-v-2db32cac");var cs={class:"table-style-panel"},as={class:"row"},rs=Object(j["createVNode"])("div",{style:{flex:"2"}},"行数:",-1),ls={class:"row"},is=Object(j["createVNode"])("div",{style:{flex:"2"}},"列数:",-1),us={class:"row theme-switch"},ds=Object(j["createVNode"])("div",{style:{flex:"2"}},"启用主题表格:",-1),ss={class:"switch-wrapper",style:{flex:"3"}},fs={class:"row"},ps=Object(j["createTextVNode"])("标题行"),bs=Object(j["createTextVNode"])("汇总行"),ms={class:"row"},vs=Object(j["createTextVNode"])("第一列"),Os=Object(j["createTextVNode"])("最后一列"),hs={class:"row"},js=Object(j["createVNode"])("div",{style:{flex:"2"}},"主题颜色:",-1);Object(j["popScopeId"])();var gs=os((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconFontSize"),l=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"),b=Object(j["resolveComponent"])("Button"),m=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"),k=Object(j["resolveComponent"])("IconTextUnderline"),I=Object(j["resolveComponent"])("IconStrikethrough"),S=Object(j["resolveComponent"])("CheckboxButtonGroup"),C=Object(j["resolveComponent"])("IconAlignTextLeft"),N=Object(j["resolveComponent"])("RadioButton"),T=Object(j["resolveComponent"])("IconAlignTextCenter"),x=Object(j["resolveComponent"])("IconAlignTextRight"),L=Object(j["resolveComponent"])("RadioGroup"),w=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["createBlock"])("div",cs,[Object(j["createVNode"])(s,{compact:"",class:"row"},{default:os((function(){return[Object(j["createVNode"])(u,{style:{flex:"3"},value:e.textAttrs.fontname,onChange:t[1]||(t[1]=function(t){return e.updateTextAttrs({fontname:t})})},{suffixIcon:os((function(){return[Object(j["createVNode"])(r)]})),default:os((function(){return[Object(j["createVNode"])(i,{label:"系统字体"},{default:os((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:e.value,value:e.value},{default:os((function(){return[Object(j["createVNode"])("span",{style:{fontFamily:e.value}},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(i,{label:"在线字体"},{default:os((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:e.value,value:e.value},{default:os((function(){return[Object(j["createVNode"])("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[2]||(t[2]=function(t){return e.updateTextAttrs({fontsize:t})})},{suffixIcon:os((function(){return[Object(j["createVNode"])(d)]})),default:os((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.fontSizeOptions,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:e,value:e},{default:os((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:os((function(){return[Object(j["createVNode"])(v,{trigger:"click"},{content:os((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.color,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateTextAttrs({color:t})})},null,8,["modelValue"])]})),default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:os((function(){return[Object(j["createVNode"])(b,{class:"text-color-btn",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(p),Object(j["createVNode"])("div",{class:"text-color-block",style:{backgroundColor:e.textAttrs.color}},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(v,{trigger:"click"},{content:os((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.backcolor,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateTextAttrs({backcolor:t})})},null,8,["modelValue"])]})),default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"单元格填充"},{default:os((function(){return[Object(j["createVNode"])(b,{class:"text-color-btn",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(O),Object(j["createVNode"])("div",{class:"text-color-block",style:{backgroundColor:e.textAttrs.backcolor}},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(j["createVNode"])(S,{class:"row"},{default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.bold,onClick:t[5]||(t[5]=function(t){return e.updateTextAttrs({bold:!e.textAttrs.bold})})},{default:os((function(){return[Object(j["createVNode"])(g)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.em,onClick:t[6]||(t[6]=function(t){return e.updateTextAttrs({em:!e.textAttrs.em})})},{default:os((function(){return[Object(j["createVNode"])(E)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.underline,onClick:t[7]||(t[7]=function(t){return e.updateTextAttrs({underline:!e.textAttrs.underline})})},{default:os((function(){return[Object(j["createVNode"])(k)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除线"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.strikethrough,onClick:t[8]||(t[8]=function(t){return e.updateTextAttrs({strikethrough:!e.textAttrs.strikethrough})})},{default:os((function(){return[Object(j["createVNode"])(I)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(L,{class:"row","button-style":"solid",value:e.textAttrs.align,onChange:t[9]||(t[9]=function(t){return e.updateTextAttrs({align:t.target.value})})},{default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:os((function(){return[Object(j["createVNode"])(N,{value:"left",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(C)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:os((function(){return[Object(j["createVNode"])(N,{value:"center",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(T)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:os((function(){return[Object(j["createVNode"])(N,{value:"right",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(x)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(w),Object(j["createVNode"])(V,{fixed:!0}),Object(j["createVNode"])(w),Object(j["createVNode"])("div",as,[rs,Object(j["createVNode"])(_,{min:e.minRowCount,max:20,value:e.rowCount,"onUpdate:value":t[10]||(t[10]=function(t){return e.rowCount=t}),onPressEnter:t[11]||(t[11]=function(t){return e.setTableRow(t)}),onBlur:t[12]||(t[12]=function(t){return e.setTableRow(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createVNode"])("div",ls,[is,Object(j["createVNode"])(_,{min:e.minColCount,max:20,value:e.colCount,"onUpdate:value":t[13]||(t[13]=function(t){return e.colCount=t}),onPressEnter:t[14]||(t[14]=function(t){return e.setTableCol(t)}),onBlur:t[15]||(t[15]=function(t){return e.setTableCol(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createVNode"])(w),Object(j["createVNode"])("div",us,[ds,Object(j["createVNode"])("div",ss,[Object(j["createVNode"])(B,{checked:e.hasTheme,onChange:t[16]||(t[16]=function(t){return e.toggleTheme(t)})},null,8,["checked"])])]),e.hasTheme?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",fs,[Object(j["createVNode"])(D,{onChange:t[17]||(t[17]=function(t){return e.updateTheme({rowHeader:t.target.checked})}),checked:e.theme.rowHeader,style:{flex:"1"}},{default:os((function(){return[ps]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[18]||(t[18]=function(t){return e.updateTheme({rowFooter:t.target.checked})}),checked:e.theme.rowFooter,style:{flex:"1"}},{default:os((function(){return[bs]})),_:1},8,["checked"])]),Object(j["createVNode"])("div",ms,[Object(j["createVNode"])(D,{onChange:t[19]||(t[19]=function(t){return e.updateTheme({colHeader:t.target.checked})}),checked:e.theme.colHeader,style:{flex:"1"}},{default:os((function(){return[vs]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[20]||(t[20]=function(t){return e.updateTheme({colFooter:t.target.checked})}),checked:e.theme.colFooter,style:{flex:"1"}},{default:os((function(){return[Os]})),_:1},8,["checked"])]),Object(j["createVNode"])("div",hs,[js,Object(j["createVNode"])(v,{trigger:"click"},{content:os((function(){return[Object(j["createVNode"])(f,{modelValue:e.theme.color,"onUpdate:modelValue":t[21]||(t[21]=function(t){return e.updateTheme({color:t})})},null,8,["modelValue"])]})),default:os((function(){return[Object(j["createVNode"])(M,{color:e.theme.color,style:{flex:"3"}},null,8,["color"])]})),_:1})])],64)):Object(j["createCommentVNode"])("",!0)])})),ys=G,Es=Object(j["defineComponent"])({name:"table-style-panel",components:{ElementOutline:Gi,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.availableFonts})),o=["12px","14px","16px","18px","20px","22px","24px","28px","32px"],c=Object(j["ref"])({bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}),a=Object(j["ref"])(),r=Object(j["ref"])(!1),l=Object(j["ref"])(0),i=Object(j["ref"])(0),u=Object(j["ref"])(0),d=Object(j["ref"])(0);Object(j["watch"])(t,(function(){t.value&&"table"===t.value.type&&(a.value=t.value.theme,r.value=!!a.value,l.value=t.value.data.length,i.value=t.value.data[0].length,u.value=t.value.data.length,d.value=t.value.data[0].length)}),{deep:!0,immediate:!0});var s=Te(),f=s.addHistorySnapshot,p=Object(j["ref"])([]),b=function(){if(t.value){var e=0,n=0;if(p.value.length){var o=p.value[0];e=+o.split("_")[0],n=+o.split("_")[1]}var a=t.value.data[e][n].style;c.value=a?{bold:!!a.bold,em:!!a.em,underline:!!a.underline,strikethrough:!!a.strikethrough,color:a.color||"#000",backcolor:a.backcolor||"#000",fontsize:a.fontsize||"12px",fontname:a.fontname||"微软雅黑",align:a.align||"left"}:{bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}}},m=function(e){p.value=e,b()};cn.on(Ut.UPDATE_TABLE_SELECTED_CELL,(function(e){return m(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.UPDATE_TABLE_SELECTED_CELL,(function(e){return m(e)}))}));var v=function(n){for(var o=JSON.parse(JSON.stringify(t.value.data)),c=0;c
X
Y
',1),Vs={class:"row"},_s=Object(j["createVNode"])("div",{style:{flex:"3"}},"大小:",-1),Bs={key:1,style:{flex:"1"}},Ds=Object(j["createStaticVNode"])('
',1),Ms={class:"row"},As=Object(j["createVNode"])("div",{style:{flex:"3"}},"旋转:",-1),Ps=Object(j["createVNode"])("div",{style:{flex:"1"}},null,-1);Object(j["popScopeId"])();var Rs=Cs((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconSendToBack"),l=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconBringToFrontOne"),d=Object(j["resolveComponent"])("IconBringToFront"),s=Object(j["resolveComponent"])("IconSentToBack"),f=Object(j["resolveComponent"])("ButtonGroup"),p=Object(j["resolveComponent"])("IconAlignLeft"),b=Object(j["resolveComponent"])("IconAlignVertically"),m=Object(j["resolveComponent"])("IconAlignRight"),v=Object(j["resolveComponent"])("IconAlignTop"),O=Object(j["resolveComponent"])("IconAlignHorizontally"),h=Object(j["resolveComponent"])("IconAlignBottom"),g=Object(j["resolveComponent"])("Divider"),y=Object(j["resolveComponent"])("InputNumber"),E=Object(j["resolveComponent"])("IconLock"),k=Object(j["resolveComponent"])("IconUnlock"),I=Object(j["resolveComponent"])("IconRotate");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Ns,[Object(j["createVNode"])(f,{class:"row"},{default:Cs((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"置顶层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.orderElement(e.handleElement,"top")})},{default:Cs((function(){return[Object(j["createVNode"])(r)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"置底层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.orderElement(e.handleElement,"bottom")})},{default:Cs((function(){return[Object(j["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上移一层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.orderElement(e.handleElement,"up")})},{default:Cs((function(){return[Object(j["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下移一层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.orderElement(e.handleElement,"down")})},{default:Cs((function(){return[Object(j["createVNode"])(s)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(f,{class:"row"},{default:Cs((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElementToCanvas("left")})},{default:Cs((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElementToCanvas("horizontal")})},{default:Cs((function(){return[Object(j["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.alignElementToCanvas("right")})},{default:Cs((function(){return[Object(j["createVNode"])(m)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(f,{class:"row"},{default:Cs((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.alignElementToCanvas("top")})},{default:Cs((function(){return[Object(j["createVNode"])(v)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.alignElementToCanvas("vertical")})},{default:Cs((function(){return[Object(j["createVNode"])(O)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[10]||(t[10]=function(t){return e.alignElementToCanvas("bottom")})},{default:Cs((function(){return[Object(j["createVNode"])(h)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(g),Object(j["createVNode"])("div",Ts,[xs,Object(j["createVNode"])(y,{step:5,value:e.left,onChange:t[11]||(t[11]=function(t){return e.updateLeft(t)}),style:{flex:"4"}},null,8,["value"]),Ls,Object(j["createVNode"])(y,{step:5,value:e.top,onChange:t[12]||(t[12]=function(t){return e.updateTop(t)}),style:{flex:"4"}},null,8,["value"])]),ws,"line"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",Vs,[_s,Object(j["createVNode"])(y,{min:e.minSize,max:1500,step:5,value:e.width,onChange:t[13]||(t[13]=function(t){return e.updateWidth(t)}),style:{flex:"4"}},null,8,["min","value"]),["image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[e.fixedRatio?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"解除宽高比锁定"},{default:Cs((function(){return[Object(j["createVNode"])(E,{style:{flex:"1"},class:"icon-btn",onClick:t[14]||(t[14]=function(t){return e.updateFixedRatio(!1)})})]})),_:1},8,["mouseEnterDelay"])):(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:1,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"宽高比锁定"},{default:Cs((function(){return[Object(j["createVNode"])(k,{style:{flex:"1"},class:"icon-btn",onClick:t[15]||(t[15]=function(t){return e.updateFixedRatio(!0)})})]})),_:1},8,["mouseEnterDelay"]))],64)):(Object(j["openBlock"])(),Object(j["createBlock"])("div",Bs)),Object(j["createVNode"])(y,{min:e.minSize,max:800,step:5,disabled:"text"===e.handleElement.type,value:e.height,onChange:t[16]||(t[16]=function(t){return e.updateHeight(t)}),style:{flex:"4"}},null,8,["min","disabled","value"])]),Ds],64)):Object(j["createCommentVNode"])("",!0),["text","image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:1},[Object(j["createVNode"])(g),Object(j["createVNode"])("div",Ms,[As,Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"逆时针旋转"},{default:Cs((function(){return[Object(j["createVNode"])(I,{class:"icon-btn",onClick:t[17]||(t[17]=function(t){return e.updateRotate45("-")}),style:{flex:"2"}})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顺时针旋转"},{default:Cs((function(){return[Object(j["createVNode"])(I,{class:"icon-btn",onClick:t[18]||(t[18]=function(t){return e.updateRotate45("+")}),style:{flex:2,transform:"rotateY(180deg)"}},null,8,["style"])]})),_:1},8,["mouseEnterDelay"]),Ps,Object(j["createVNode"])(y,{min:-180,max:180,step:5,value:e.rotate,onChange:t[19]||(t[19]=function(t){return e.updateRotate(t)}),style:{flex:"4"}},null,8,["value"])])],64)):Object(j["createCommentVNode"])("",!0)])})),Fs=n("b69c"),Hs=n.n(Fs),zs=Object(j["defineComponent"])({name:"element-positopn-panel",setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(0),o=Object(j["ref"])(0),c=Object(j["ref"])(0),a=Object(j["ref"])(0),r=Object(j["ref"])(0),l=Object(j["ref"])(!1),i=Object(j["computed"])((function(){return t.value&&rn[t.value.type]||20}));Object(j["watch"])(t,(function(){t.value&&(n.value=Hs()(t.value.left,1),o.value=Hs()(t.value.top,1),l.value="fixedRatio"in t.value&&!!t.value.fixedRatio,"line"!==t.value.type&&(c.value=Hs()(t.value.width,1),a.value=Hs()(t.value.height,1),r.value="rotate"in t.value&&void 0!==t.value.rotate?Hs()(t.value.rotate,1):0))}),{deep:!0,immediate:!0});var u=He(),d=u.orderElement,s=En(),f=s.alignElementToCanvas,p=Te(),b=p.addHistorySnapshot,m=function(n){var o={left:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},v=function(n){var o={top:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},O=function(n){var o={width:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},h=function(n){var o={height:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},g=function(n){var o={rotate:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},E=function(n){var o={fixedRatio:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},k=function(n){var o=45*Math.floor(r.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}),b()};return{handleElement:t,orderElement:d,alignElementToCanvas:f,left:n,top:o,width:c,height:a,rotate:r,fixedRatio:l,minSize:i,updateLeft:m,updateTop:v,updateWidth:O,updateHeight:h,updateRotate:g,updateFixedRatio:E,updateRotate45:k}}});n("b7a1");zs.render=Rs,zs.__scopeId="data-v-15c9ddcc";var Us=zs,Gs=Object(j["withScopeId"])("data-v-2a95eecd");Object(j["pushScopeId"])("data-v-2a95eecd");var qs={class:"element-animation-panel"},Xs={key:0,class:"element-animation"},Ws={class:"animation-pool"},Ys={class:"type-title"},Zs={class:"pool-item-wrapper"},Js=Object(j["createTextVNode"])(" 图表元素暂不支持动画 "),Ks={key:1,class:"tip"},Qs=Object(j["createTextVNode"])(" 选中画布中的元素添加动画"),$s={class:"index"},ef={class:"text"},tf={class:"handler"};Object(j["popScopeId"])();var nf,of=Gs((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconEffects"),l=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Popover"),u=Object(j["resolveComponent"])("IconClick"),d=Object(j["resolveComponent"])("Divider"),s=Object(j["resolveComponent"])("IconPlayOne"),f=Object(j["resolveComponent"])("Tooltip"),p=Object(j["resolveComponent"])("IconCloseSmall"),b=Object(j["resolveComponent"])("Draggable");return Object(j["openBlock"])(),Object(j["createBlock"])("div",qs,[e.handleElement?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Xs,["chart"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,trigger:"click",visible:e.animationPoolVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.animationPoolVisible=t})},{content:Gs((function(){return[Object(j["createVNode"])("div",Ws,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"pool-type",key:n.name},[Object(j["createVNode"])("div",Ys,Object(j["toDisplayString"])(n.name)+":",1),Object(j["createVNode"])("div",Zs,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(n.children,(function(n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"pool-item",key:n.name,onMouseenter:function(t){return e.hoverPreviewAnimation=n.value},onMouseleave:t[1]||(t[1]=function(t){return e.hoverPreviewAnimation=""}),onClick:function(t){return e.addAnimation(n.value)}},[Object(j["createVNode"])("div",{class:["animation-box",["animate__animated","animate__faster",e.hoverPreviewAnimation===n.value&&"animate__".concat(n.value)]]},Object(j["toDisplayString"])(n.name),3)],40,["onMouseenter","onClick"])})),128))])])})),128))])]})),default:Gs((function(){return[Object(j["createVNode"])(l,{class:"element-animation-btn"},{default:Gs((function(){return[Object(j["createVNode"])(r,{style:{"margin-right":"5px"}}),Object(j["createTextVNode"])(" "+Object(j["toDisplayString"])(e.handleElementAnimation||"点击选择动画"),1)]})),_:1})]})),_:1},8,["visible"])):(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:1,class:"element-animation-btn",disabled:""},{default:Gs((function(){return[Object(j["createVNode"])(r,{style:{"margin-right":"5px"}}),Js]})),_:1}))])):(Object(j["openBlock"])(),Object(j["createBlock"])("div",Ks,[Object(j["createVNode"])(u),Qs])),Object(j["createVNode"])(d),Object(j["createVNode"])(b,{class:"animation-sequence",modelValue:e.animationSequence,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:Gs((function(t){var n,o=t.element,c=t.index;return[Object(j["createVNode"])("div",{class:["sequence-item",{active:(null===(n=e.handleElement)||void 0===n?void 0:n.id)===o.elId}]},[Object(j["createVNode"])("div",$s,Object(j["toDisplayString"])(c+1),1),Object(j["createVNode"])("div",ef,"【"+Object(j["toDisplayString"])(o.elType)+"】"+Object(j["toDisplayString"])(o.animationType),1),Object(j["createVNode"])("div",tf,[Object(j["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"预览"},{default:Gs((function(){return[Object(j["createVNode"])(s,{class:"handler-btn",onClick:function(t){return e.runAnimation(o.elId,o.type)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"]),Object(j["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Gs((function(){return[Object(j["createVNode"])(p,{class:"handler-btn",onClick:function(t){return e.deleteAnimation(o.elId)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"])])],2)]})),_:1},8,["modelValue","onEnd"])])})),cf=[{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"}]}],af={},rf=Object(ke["a"])(cf);try{for(rf.s();!(nf=rf.n()).done;){var lf,uf=nf.value,df=Object(ke["a"])(uf.children);try{for(df.s();!(lf=df.n()).done;){var sf=lf.value;af[sf.value]=sf.name}}catch(_O){df.e(_O)}finally{df.f()}}}catch(_O){rf.e(_O)}finally{rf.f()}var ff=Object(j["defineComponent"])({name:"element-animation-panel",components:{Draggable:ml.a},setup:function(){var e=Z(),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"])(""),a=Object(j["ref"])(!1),r=Te(),l=r.addHistorySnapshot,i=cf,u=Object(j["computed"])((function(){if(!n.value)return[];var e,t=[],c=Object(ke["a"])(n.value);try{var a=function(){var n=e.value,c=o.value.elements.find((function(e){return e.id===n.elId}));if(!c)return"continue";var a=an[c.type],r=af[n.type];t.push(Object(F["a"])(Object(F["a"])({},n),{},{elType:a,animationType:r}))};for(c.s();!(e=c.n()).done;)a()}catch(_O){c.e(_O)}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?af[o.type]:null})),s=function(t){var o=n.value.filter((function(e){return e.elId!==t}));e.commit(y.UPDATE_SLIDE,{animations:o}),l()},f=function(t){var o=t.newIndex,c=t.oldIndex;if(c!==o){var a=JSON.parse(JSON.stringify(n.value)),r=a[c];a.splice(c,1),a.splice(o,0,r),e.commit(y.UPDATE_SLIDE,{animations:a}),l()}},p=function(e,t){var n="animate__",o=document.querySelector("#editable-element-".concat(e," [class^=editable-element-]"));if(o){var c="".concat(n).concat(t);o.classList.add("".concat(n,"animated"),c);var a=function(){o.classList.remove("".concat(n,"animated"),c)};o.addEventListener("animationend",a,{once:!0})}},b=function(o){var c=n.value.map((function(e){return e.elId===t.value.id?Object(F["a"])(Object(F["a"])({},e),{},{type:o}):e}));e.commit(y.UPDATE_SLIDE,{animations:c}),a.value=!1,l(),p(t.value.id,o)},m=function(o){if(d.value)b(o);else{var c=n.value?JSON.parse(JSON.stringify(n.value)):[];c.push({elId:t.value.id,type:o,duration:1e3}),e.commit(y.UPDATE_SLIDE,{animations:c}),a.value=!1,l(),p(t.value.id,o)}};return{handleElement:t,animationPoolVisible:a,animations:i,animationSequence:u,hoverPreviewAnimation:c,handleElementAnimation:d,addAnimation:m,deleteAnimation:s,handleDragEnd:f,runAnimation:p}}});n("967d");ff.render=of,ff.__scopeId="data-v-2a95eecd";var pf=ff,bf=Object(j["withScopeId"])("data-v-40e749dc");Object(j["pushScopeId"])("data-v-40e749dc");var mf={class:"slide-style-panel"},vf=Object(j["createVNode"])("div",{class:"title"},"背景填充",-1),Of={class:"row"},hf=Object(j["createTextVNode"])("纯色填充"),jf=Object(j["createTextVNode"])("图片填充"),gf=Object(j["createTextVNode"])("渐变填充"),yf=Object(j["createVNode"])("div",{style:{flex:"1"}},null,-1),Ef=Object(j["createTextVNode"])("原始大小"),kf=Object(j["createTextVNode"])("缩放"),If=Object(j["createTextVNode"])("拼贴"),Sf=Object(j["createTextVNode"])("缩放铺满"),Cf=Object(j["createTextVNode"])("线性渐变"),Nf=Object(j["createTextVNode"])("径向渐变"),Tf={key:0,class:"background-image-wrapper"},xf={class:"background-image"},Lf={key:1,class:"background-gradient-wrapper"},wf={class:"row"},Vf=Object(j["createVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),_f={class:"row"},Bf=Object(j["createVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Df={key:0,class:"row"},Mf=Object(j["createVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1),Af={class:"row"},Pf=Object(j["createTextVNode"])("应用背景到全部"),Rf={class:"row"},Ff=Object(j["createVNode"])("div",{style:{flex:"2"}},"画布尺寸:",-1),Hf=Object(j["createTextVNode"])("宽屏 16 : 9"),zf=Object(j["createTextVNode"])("宽屏 16 :10"),Uf=Object(j["createTextVNode"])("标准 4 :3"),Gf=Object(j["createVNode"])("div",{class:"title"},"全局主题",-1),qf={class:"row"},Xf=Object(j["createVNode"])("div",{style:{flex:"2"}},"字体:",-1),Wf={class:"row"},Yf=Object(j["createVNode"])("div",{style:{flex:"2"}},"字体颜色:",-1),Zf={class:"row"},Jf=Object(j["createVNode"])("div",{style:{flex:"2"}},"背景颜色:",-1),Kf={class:"row"},Qf=Object(j["createVNode"])("div",{style:{flex:"2"}},"主题色:",-1),$f=Object(j["createVNode"])("div",{class:"title",style:{"margin-top":"20px"}},"预置主题:",-1),ep={class:"theme-list"},tp={class:"theme-item-content"},np={class:"row"},op=Object(j["createTextVNode"])("应用主题到全部");Object(j["popScopeId"])();var cp=bf((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SelectOption"),l=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"),b=Object(j["resolveComponent"])("Button"),m=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("SelectOptGroup");return Object(j["openBlock"])(),Object(j["createBlock"])("div",mf,[vf,Object(j["createVNode"])("div",Of,[Object(j["createVNode"])(l,{style:{flex:"10"},value:e.background.type,onChange:t[1]||(t[1]=function(t){return e.updateBackgroundType(t)})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:"solid"},{default:bf((function(){return[hf]})),_:1}),Object(j["createVNode"])(r,{value:"image"},{default:bf((function(){return[jf]})),_:1}),Object(j["createVNode"])(r,{value:"gradient"},{default:bf((function(){return[gf]})),_:1})]})),_:1},8,["value"]),yf,"solid"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateBackground({color:t})})},null,8,["modelValue"])]})),default:bf((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"])(l,{key:1,style:{flex:"10"},value:e.background.size||"cover",onChange:t[3]||(t[3]=function(t){return e.updateBackground({imageSize:t})})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:"initial"},{default:bf((function(){return[Ef]})),_:1}),Object(j["createVNode"])(r,{value:"contain"},{default:bf((function(){return[kf]})),_:1}),Object(j["createVNode"])(r,{value:"repeat"},{default:bf((function(){return[If]})),_:1}),Object(j["createVNode"])(r,{value:"cover"},{default:bf((function(){return[Sf]})),_:1})]})),_:1},8,["value"])):(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:2,style:{flex:"10"},value:e.background.gradientType,onChange:t[4]||(t[4]=function(t){return e.updateBackground({gradientType:t})})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:"linear"},{default:bf((function(){return[Cf]})),_:1}),Object(j["createVNode"])(r,{value:"radial"},{default:bf((function(){return[Nf]})),_:1})]})),_:1},8,["value"]))]),"image"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Tf,[Object(j["createVNode"])(f,{onChange:t[5]||(t[5]=function(t){return e.uploadBackgroundImage(t)})},{default:bf((function(){return[Object(j["createVNode"])("div",xf,[Object(j["createVNode"])("div",{class:"content",style:{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["createBlock"])("div",Lf,[Object(j["createVNode"])("div",wf,[Vf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[0],"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.updateBackground({gradientColor:[t,e.background.gradientColor[1]]})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.background.gradientColor[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",_f,[Bf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[1],"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.updateBackground({gradientColor:[e.background.gradientColor[0],t]})})},null,8,["modelValue"])]})),default:bf((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["createBlock"])("div",Df,[Mf,Object(j["createVNode"])(p,{min:0,max:360,step:15,value:e.background.gradientRotate,style:{flex:"3"},onChange:t[8]||(t[8]=function(t){return e.updateBackground({gradientRotate:t})})},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",Af,[Object(j["createVNode"])(b,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.applyBackgroundAllSlide()})},{default:bf((function(){return[Pf]})),_:1})]),Object(j["createVNode"])(m),Object(j["createVNode"])("div",Rf,[Ff,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.viewportRatio,onChange:t[10]||(t[10]=function(t){return e.updateViewportRatio(t)})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:.5625},{default:bf((function(){return[Hf]})),_:1},8,["value"]),Object(j["createVNode"])(r,{value:.625},{default:bf((function(){return[zf]})),_:1},8,["value"]),Object(j["createVNode"])(r,{value:.75},{default:bf((function(){return[Uf]})),_:1},8,["value"])]})),_:1},8,["value"])]),Object(j["createVNode"])(m),Gf,Object(j["createVNode"])("div",qf,[Xf,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.theme.fontName,onChange:t[11]||(t[11]=function(t){return e.updateTheme({fontName:t})})},{default:bf((function(){return[Object(j["createVNode"])(v,{label:"系统字体"},{default:bf((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(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:bf((function(){return[Object(j["createVNode"])("span",{style:{fontFamily:e.value}},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(v,{label:"在线字体"},{default:bf((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(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:bf((function(){return[Object(j["createVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])("div",Wf,[Yf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.fontColor,"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.updateTheme({fontColor:t})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.theme.fontColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Zf,[Jf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.backgroundColor,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.updateTheme({backgroundColor:t})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.theme.backgroundColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Kf,[Qf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.themeColor,"onUpdate:modelValue":t[14]||(t[14]=function(t){return e.updateTheme({themeColor:t})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.theme.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),$f,Object(j["createVNode"])("div",ep,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themes,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"theme-item",key:n,style:{backgroundColor:t.background},onClick:function(n){return e.updateTheme({fontColor:t.text,backgroundColor:t.background,themeColor:t.color})}},[Object(j["createVNode"])("div",tp,[Object(j["createVNode"])("div",{class:"text",style:{color:t.text}},"Aa",4),Object(j["createVNode"])("div",{class:"color-block",style:{backgroundColor:t.color}},null,4)])],12,["onClick"])})),128))]),Object(j["createVNode"])("div",np,[Object(j["createVNode"])(b,{style:{flex:"1"},onClick:t[15]||(t[15]=function(t){return e.applyThemeAllSlide()})},{default:bf((function(){return[op]})),_:1})])])})),ap=[{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"}],rp=ap,lp=G,ip=Object(j["defineComponent"])({name:"slide-style-panel",components:{ColorButton:zi},setup:function(){var e=Z(),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})),a=Object(j["computed"])((function(){return e.getters.currentSlide})),r=Object(j["computed"])((function(){return a.value.background?a.value.background:{type:"solid",value:"#fff"}})),l=Te(),i=l.addHistorySnapshot,u=function(t){if("solid"===t){var n=Object(F["a"])(Object(F["a"])({},r.value),{},{type:"solid",color:r.value.color||"#fff"});e.commit(y.UPDATE_SLIDE,{background:n})}else if("image"===t){var o=Object(F["a"])(Object(F["a"])({},r.value),{},{type:"image",image:r.value.image||"",imageSize:r.value.imageSize||"cover"});e.commit(y.UPDATE_SLIDE,{background:o})}else{var c=Object(F["a"])(Object(F["a"])({},r.value),{},{type:"gradient",gradientType:r.value.gradientType||"linear",gradientColor:r.value.gradientColor||["#fff","#fff"],gradientRotate:r.value.gradientRotate||0});e.commit(y.UPDATE_SLIDE,{background:c})}i()},d=function(t){e.commit(y.UPDATE_SLIDE,{background:Object(F["a"])(Object(F["a"])({},r.value),t)}),i()},s=function(e){var t=e[0];t&&Le(t).then((function(e){return d({image:e})}))},f=function(){var n=t.value.map((function(e){return Object(F["a"])(Object(F["a"])({},e),{},{background:a.value.background})}));e.commit(y.SET_SLIDES,n),i()},p=function(t){e.commit(y.SET_THEME,t)},b=function(){var o,c=JSON.parse(JSON.stringify(t.value)),a=n.value,r=a.themeColor,l=a.backgroundColor,u=a.fontColor,d=a.fontName,s=Object(ke["a"])(c);try{for(s.s();!(o=s.n()).done;){var f=o.value;f.background&&"image"===f.background.type||(f.background=Object(F["a"])(Object(F["a"])({},f.background),{},{type:"solid",color:l}));var p,b=f.elements,m=Object(ke["a"])(b);try{for(m.s();!(p=m.n()).done;){var v=p.value;if("shape"===v.type)v.fill=r;else if("line"===v.type)v.color=r;else if("text"===v.type)v.defaultColor=u,v.defaultFontName=d,v.fill&&(v.fill=r);else if("table"===v.type){v.theme&&(v.theme.color=r);var O,h=Object(ke["a"])(v.data);try{for(h.s();!(O=h.n()).done;){var j,g=O.value,E=Object(ke["a"])(g);try{for(E.s();!(j=E.n()).done;){var k=j.value;k.style&&(k.style.color=u,k.style.fontname=d)}}catch(_O){E.e(_O)}finally{E.f()}}}catch(_O){h.e(_O)}finally{h.f()}}else"chart"===v.type&&(v.themeColor=r,v.gridColor=u)}}catch(_O){m.e(_O)}finally{m.f()}}}catch(_O){s.e(_O)}finally{s.f()}e.commit(y.SET_SLIDES,c),i()},m=function(t){e.commit(y.SET_VIEWPORT_RATIO,t)};return{availableFonts:o,background:r,updateBackgroundType:u,updateBackground:d,uploadBackgroundImage:s,applyBackgroundAllSlide:f,themes:rp,theme:n,webFonts:lp,updateTheme:p,applyThemeAllSlide:b,viewportRatio:c,updateViewportRatio:m}}});n("7dec");ip.render=cp,ip.__scopeId="data-v-40e749dc";var up=ip,dp=Object(j["withScopeId"])("data-v-6e3028f1");Object(j["pushScopeId"])("data-v-6e3028f1");var sp={class:"slide-animation-panel"},fp={class:"animation-pool"},pp={class:"animation-text"},bp=Object(j["createTextVNode"])("应用到全部");Object(j["popScopeId"])();var mp=dp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",sp,[Object(j["createVNode"])("div",fp,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["animation-item",{active:e.currentTurningMode===t.value}],key:t.label,onClick:function(n){return e.updateTurningMode(t.value)}},[Object(j["createVNode"])("div",{class:["animation-block",t.value]},null,2),Object(j["createVNode"])("div",pp,Object(j["toDisplayString"])(t.label),1)],10,["onClick"])})),128))]),Object(j["createVNode"])(r,{style:{width:"100%"},onClick:t[1]||(t[1]=function(t){return e.applyAllSlide()})},{default:dp((function(){return[bp]})),_:1})])})),vp=Object(j["defineComponent"])({name:"slide-animation-panel",setup:function(){var e=Z(),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"}],a=Te(),r=a.addHistorySnapshot,l=function(t){t!==o.value&&(e.commit(y.UPDATE_SLIDE,{turningMode:t}),r())},i=function(){var o=t.value.map((function(e){return Object(F["a"])(Object(F["a"])({},e),{},{turningMode:n.value.turningMode})}));e.commit(y.SET_SLIDES,o),r()};return{currentTurningMode:o,animations:c,updateTurningMode:l,applyAllSlide:i}}});n("5217");vp.render=mp,vp.__scopeId="data-v-6e3028f1";var Op=vp,hp=Object(j["withScopeId"])("data-v-aef45858");Object(j["pushScopeId"])("data-v-aef45858");var jp={class:"multi-position-panel"},gp=Object(j["createTextVNode"])("水平均匀分布"),yp=Object(j["createTextVNode"])("垂直均匀分布"),Ep=Object(j["createTextVNode"])("组合"),kp=Object(j["createTextVNode"])("取消组合");Object(j["popScopeId"])();var Ip=hp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconAlignLeft"),l=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconAlignVertically"),d=Object(j["resolveComponent"])("IconAlignRight"),s=Object(j["resolveComponent"])("ButtonGroup"),f=Object(j["resolveComponent"])("IconAlignTop"),p=Object(j["resolveComponent"])("IconAlignHorizontally"),b=Object(j["resolveComponent"])("IconAlignBottom"),m=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("IconGroup"),O=Object(j["resolveComponent"])("IconUngroup");return Object(j["openBlock"])(),Object(j["createBlock"])("div",jp,[Object(j["createVNode"])(s,{class:"row"},{default:hp((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.alignElement("left")})},{default:hp((function(){return[Object(j["createVNode"])(r)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.alignElement("horizontal")})},{default:hp((function(){return[Object(j["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.alignElement("right")})},{default:hp((function(){return[Object(j["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(s,{class:"row"},{default:hp((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElement("top")})},{default:hp((function(){return[Object(j["createVNode"])(f)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElement("vertical")})},{default:hp((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElement("bottom")})},{default:hp((function(){return[Object(j["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),e.activeElementList.length>2?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,class:"row"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.uniformHorizontalDisplay()})},{default:hp((function(){return[gp]})),_:1}),Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.uniformVerticalDisplay()})},{default:hp((function(){return[yp]})),_:1})]})),_:1})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(m),Object(j["createVNode"])(s,{class:"row"},{default:hp((function(){return[Object(j["createVNode"])(l,{disabled:!e.canCombine,onClick:t[9]||(t[9]=function(t){return e.combineElements()}),style:{flex:"1"}},{default:hp((function(){return[Object(j["createVNode"])(v,{style:{"margin-right":"3px"}}),Ep]})),_:1},8,["disabled"]),Object(j["createVNode"])(l,{disabled:e.canCombine,onClick:t[10]||(t[10]=function(t){return e.uncombineElements()}),style:{flex:"1"}},{default:hp((function(){return[Object(j["createVNode"])(O,{style:{"margin-right":"3px"}}),kp]})),_:1},8,["disabled"])]})),_:1})])})),Sp=function(){var e=Z(),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=Te(),a=c.addHistorySnapshot,r=function(c){var r,l=Jt(n.value),i=l.minX,u=l.maxX,d=l.minY,s=l.maxY,f=JSON.parse(JSON.stringify(o.value.elements)),p={},b=Object(ke["a"])(n.value);try{var m=function(){var e=r.value;if(e.groupId&&!p[e.groupId]){var t=n.value.filter((function(t){return t.groupId===e.groupId}));p[e.groupId]=Jt(t)}};for(b.s();!(r=b.n()).done;)m()}catch(_O){b.e(_O)}finally{b.f()}if(c===te.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=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetX;e.left=i-a}else e.left=i}));else if(c===te.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 a=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),r=a.offsetX;e.left=u-c+r}else e.left=u-c}}));else if(c===te.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=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetY;e.top=d-a}else e.top=d}));else if(c===te.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 a=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),r=a.offsetY;e.top=s-c+r}else e.top=s-c}}));else if(c===te.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 a="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;e.left=v-a/2}}))}else if(c===te.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 a="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;e.top=O-a/2}}))}e.commit(y.UPDATE_SLIDE,{elements:f}),a()};return{alignActiveElement:r}},Cp=function(){var e=Z(),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=Te(),a=c.addHistorySnapshot,r=function(){var c=Jt(n.value),r=c.minX,l=c.maxX,i=JSON.parse(JSON.stringify(n.value)),u=JSON.parse(JSON.stringify(o.value.elements));i.sort((function(e,t){var n=Zt(e),o=n.minX,c=Zt(t),a=c.minX;return o-a}));var d,s=0,f=Object(ke["a"])(n.value);try{for(f.s();!(d=f.n()).done;){var p=d.value,b=Zt(p),m=b.minX,v=b.maxX;s+=v-m}}catch(_O){f.e(_O)}finally{f.f()}var O,h=(l-r-s)/(n.value.length-1),j=[],g=Object(ke["a"])(i);try{for(g.s();!(O=g.n()).done;){var E=O.value;if(j.length){var k=j[j.length-1].el,I=j[j.length-1].pos,S=Zt(k),C=S.minX,N=S.maxX,T=N-C;j.push({el:E,pos:I+T+h})}else{var x=Zt(E),L=x.minX;j.push({el:E,pos:L})}}}catch(_O){g.e(_O)}finally{g.f()}var w,V=Object(ke["a"])(u);try{for(V.s();!(w=V.n()).done;){var _=w.value;if(t.value.includes(_.id)){var B,D=Object(ke["a"])(j);try{for(D.s();!(B=D.n()).done;){var M=B.value;if(M.el.id===_.id)if("rotate"in _&&_.rotate){var A=Yt({left:_.left,top:_.top,width:_.width,height:_.height,rotate:_.rotate}),P=A.offsetX;_.left=M.pos-P}else _.left=M.pos}}catch(_O){D.e(_O)}finally{D.f()}}}}catch(_O){V.e(_O)}finally{V.f()}e.commit(y.UPDATE_SLIDE,{elements:u}),a()},l=function(){var c=Jt(n.value),r=c.minY,l=c.maxY,i=JSON.parse(JSON.stringify(n.value)),u=JSON.parse(JSON.stringify(o.value.elements));i.sort((function(e,t){var n=Zt(e),o=n.minY,c=Zt(t),a=c.minY;return o-a}));var d,s=0,f=Object(ke["a"])(n.value);try{for(f.s();!(d=f.n()).done;){var p=d.value,b=Zt(p),m=b.minY,v=b.maxY;s+=v-m}}catch(_O){f.e(_O)}finally{f.f()}var O,h=(l-r-s)/(n.value.length-1),j=[],g=Object(ke["a"])(i);try{for(g.s();!(O=g.n()).done;){var E=O.value;if(j.length){var k=j[j.length-1].el,I=j[j.length-1].pos,S=Zt(k),C=S.minY,N=S.maxY,T=N-C;j.push({el:E,pos:I+T+h})}else{var x=Zt(E),L=x.minY;j.push({el:E,pos:L})}}}catch(_O){g.e(_O)}finally{g.f()}var w,V=Object(ke["a"])(u);try{for(V.s();!(w=V.n()).done;){var _=w.value;if(t.value.includes(_.id)){var B,D=Object(ke["a"])(j);try{for(D.s();!(B=D.n()).done;){var M=B.value;if(M.el.id===_.id)if("rotate"in _&&_.rotate){var A=Yt({left:_.left,top:_.top,width:_.width,height:_.height,rotate:_.rotate}),P=A.offsetY;_.top=M.pos-P}else _.top=M.pos}}catch(_O){D.e(_O)}finally{D.f()}}}}catch(_O){V.e(_O)}finally{V.f()}e.commit(y.UPDATE_SLIDE,{elements:u}),a()};return{uniformHorizontalDisplay:r,uniformVerticalDisplay:l}},Np=Object(j["defineComponent"])({name:"multi-position-panel",setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.activeElementList})),n=Ae(),o=n.combineElements,c=n.uncombineElements,a=Sp(),r=a.alignActiveElement,l=En(),i=l.alignElementToCanvas,u=Cp(),d=u.uniformHorizontalDisplay,s=u.uniformVerticalDisplay,f=Object(j["computed"])((function(){var e=t.value[0].groupId;if(!e)return!0;var n=t.value.every((function(t){return(t.groupId&&t.groupId)===e}));return!n})),p=function(e){f.value?r(e):i(e)};return{activeElementList:t,canCombine:f,combineElements:o,uncombineElements:c,uniformHorizontalDisplay:d,uniformVerticalDisplay:s,alignElement:p}}});n("2701");Np.render=Ip,Np.__scopeId="data-v-aef45858";var Tp=Np,xp=Object(j["defineComponent"])({name:"toolbar",setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.toolbarState})),n=[{label:"样式",value:ri.EL_STYLE},{label:"位置",value:ri.EL_POSITION},{label:"动画",value:ri.EL_ANIMATION}],o=[{label:"页面样式",value:ri.SLIDE_STYLE},{label:"切换",value:ri.SLIDE_ANIMATION},{label:"动画",value:ri.EL_ANIMATION}],c=[{label:"位置",value:ri.MULTI_POSITION},{label:"样式",value:ri.EL_STYLE}],a=function(t){e.commit(y.SET_TOOLBAR_STATE,t)},r=Object(j["computed"])((function(){return e.state.activeElementIdList})),l=Object(j["computed"])((function(){return r.value.length?r.value.length>1?c:n:o}));Object(j["watch"])(l,(function(){var n=l.value.map((function(e){return e.value}));n.includes(t.value)||e.commit(y.SET_TOOLBAR_STATE,n[0])}));var i=Object(j["computed"])((function(){var e,n=(e={},Object(T["a"])(e,ri.EL_STYLE,Ss),Object(T["a"])(e,ri.EL_POSITION,Us),Object(T["a"])(e,ri.EL_ANIMATION,pf),Object(T["a"])(e,ri.SLIDE_STYLE,up),Object(T["a"])(e,ri.SLIDE_ANIMATION,Op),Object(T["a"])(e,ri.MULTI_POSITION,Tp),e);return n[t.value]||null}));return{toolbarState:t,currentTabs:l,setToolbarState:a,currentPanelComponent:i}}});n("a5b8");xp.render=ai,xp.__scopeId="data-v-f790671e";var Lp=xp,wp=Object(j["withScopeId"])("data-v-89372f4a");Object(j["pushScopeId"])("data-v-89372f4a");var Vp={class:"remark"};Object(j["popScopeId"])();var _p=wp((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Vp,[Object(j["createVNode"])("div",{class:"resize-handler",onMousedown:t[1]||(t[1]=function(t){return e.resize(t)})},null,32),Object(j["createVNode"])("textarea",{value:e.remark,placeholder:"点击输入演讲者备注",onInput:t[2]||(t[2]=function(t){return e.handleInput(t)})},null,40,["value"])])})),Bp=Object(j["defineComponent"])({name:"remark",props:{height:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.getters.currentSlide})),a=Object(j["computed"])((function(){var e;return(null===(e=c.value)||void 0===e?void 0:e.remark)||""})),r=function(e){var t=e.target.value;o.commit(y.UPDATE_SLIDE,{remark:t})},l=function(t){var o=!0,c=t.pageY,a=e.height;document.onmousemove=function(e){if(o){var t=e.pageY,r=t-c,l=-r+a;l<40&&(l=40),l>120&&(l=120),n("update:height",l)}},document.onmouseup=function(){o=!1,document.onmousemove=null,document.onmouseup=null}};return{remark:a,handleInput:r,resize:l}}});n("4615");Bp.render=_p,Bp.__scopeId="data-v-89372f4a";var Dp=Bp,Mp=Object(j["defineComponent"])({name:"editor",components:{EditorHeader:Ft,Canvas:hr,CanvasTool:ul,Thumbnails:ei,Toolbar:Lp,Remark:Dp},setup:function(){var e=Object(j["ref"])(40);return We(),Ye(),{remarkHeight:e}}});n("1fecb");Mp.render=re,Mp.__scopeId="data-v-55178b6a";var Ap=Mp,Pp=Object(j["withScopeId"])("data-v-5e85dd68");Object(j["pushScopeId"])("data-v-5e85dd68");var Rp={class:"pptist-screen"},Fp={class:"tools"};Object(j["popScopeId"])();var Hp=Pp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ScreenSlide"),l=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["createBlock"])("div",Rp,[Object(j["withDirectives"])(Object(j["createVNode"])("div",{class:"slide-list",onMousewheel:t[1]||(t[1]=function(t){return e.mousewheelListener(t)})},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["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["createVNode"])("div",{class:"slide-content",style:{width:e.slideWidth+"px",height:e.slideHeight+"px"}},[Object(j["createVNode"])(r,{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"])(l,{key:0,turnSlideToIndex:e.turnSlideToIndex,onClose:t[2]||(t[2]=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[3]||(t[3]=function(t){return e.writingBoardToolVisible=!1})})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",Fp,[Object(j["createVNode"])(u,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[4]||(t[4]=function(t){return e.execPrev()})}),Object(j["createVNode"])(d,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[5]||(t[5]=function(t){return e.execNext()})}),Object(j["createVNode"])(s,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[6]||(t[6]=function(t){return e.writingBoardToolVisible=!0})})]),e.showPageNumber?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:2,class:"page-number",onClick:t[7]||(t[7]=function(t){return e.slideThumbnailModelVisible=!0})},Object(j["toDisplayString"])(e.slideIndex+1)+" / "+Object(j["toDisplayString"])(e.slides.length),1)):Object(j["createCommentVNode"])("",!0)])})),zp=Object(j["withScopeId"])("data-v-a094625a"),Up=zp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ScreenElement");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"screen-slide",style:{width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")}},[Object(j["createVNode"])("div",{class:"background",style:Object(F["a"])({},e.backgroundStyle)},null,4),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:t.id,elementInfo:t,elementIndex:n+1,animationIndex:e.animationIndex},null,8,["elementInfo","elementIndex","animationIndex"])})),128))],4)}));function Gp(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"screen-element",id:"screen-element-".concat(e.elementInfo.id),style:{zIndex:e.elementIndex,color:e.theme.fontColor,fontFamily:e.theme.fontName,visibility:e.needWaitAnimation?"hidden":"visible"}},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo},null,8,["elementInfo"]))],12,["id"])}var qp=Object(j["withScopeId"])("data-v-1423f8c2"),Xp=qp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline"),l=Object(j["resolveComponent"])("Chart");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"screen-element-chart",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{backgroundColor:e.elementInfo.fill}},[Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(l,{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)})),Wp=Object(j["defineComponent"])({name:"screen-element-chart",components:{ElementOutline:oc,Chart:Dc},props:{elementInfo:{type:Object,required:!0}}});n("1539");Wp.render=Xp,Wp.__scopeId="data-v-1423f8c2";var Yp=Wp,Zp=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(T["a"])(t,jn.IMAGE,El),Object(T["a"])(t,jn.TEXT,Cl),Object(T["a"])(t,jn.SHAPE,wl),Object(T["a"])(t,jn.LINE,Dl),Object(T["a"])(t,jn.CHART,Yp),Object(T["a"])(t,jn.TABLE,Yl),t);return n[e.elementInfo.type]||null})),n=Z(),o=Object(j["computed"])((function(){return n.state.theme})),c=Object(j["computed"])((function(){return n.getters.currentSlide})),a=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}));return{currentElementComponent:t,needWaitAnimation:a,theme:o}}});Zp.render=Gp;var Jp=Zp,Kp=Object(j["defineComponent"])({name:"screen-slide",components:{ScreenElement:Jp},props:{slide:{type:Object,required:!0},scale:{type:Number,required:!0},animationIndex:{type:Number,default:-1}},setup:function(e){var t=Z(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=pa(o),a=c.backgroundStyle;return{backgroundStyle:a,VIEWPORT_SIZE:we,viewportRatio:n}}});n("7599");Kp.render=Up,Kp.__scopeId="data-v-a094625a";var Qp=Kp,$p=Object(j["withScopeId"])("data-v-9174b3bc");Object(j["pushScopeId"])("data-v-9174b3bc");var eb={class:"slide-thumbnails"},tb={class:"return-button"},nb={class:"slide-thumbnails-content"};Object(j["popScopeId"])();var ob=$p((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconArrowCircleLeft"),l=Object(j["resolveComponent"])("ThumbnailSlide");return Object(j["openBlock"])(),Object(j["createBlock"])("div",eb,[Object(j["createVNode"])("div",tb,[Object(j["createVNode"])(r,{class:"icon",onClick:t[1]||(t[1]=function(t){return e.close()})})]),Object(j["createVNode"])("div",nb,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["thumbnail",{active:n===e.slideIndex}],key:t.id,onClick:function(t){return e.turnSlideToIndex(n)}},[Object(j["createVNode"])(l,{slide:t,size:150},null,8,["slide"])],10,["onClick"])})),128))])])})),cb=Object(j["defineComponent"])({name:"slide-thumbnails",components:{ThumbnailSlide:Ql},props:{turnSlideToIndex:{type:Function}},setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.state.slides})),a=Object(j["computed"])((function(){return o.state.slideIndex})),r=function(){return n("close")};return{slides:c,slideIndex:a,close:r}}});n("fe34");cb.render=ob,cb.__scopeId="data-v-9174b3bc";var ab=cb,rb=Object(j["withScopeId"])("data-v-f34025bc");Object(j["pushScopeId"])("data-v-f34025bc");var lb={class:"writing-board-tool"},ib={class:"tools"},ub={class:"colors"};Object(j["popScopeId"])();var db=rb((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("WritingBoard"),l=Object(j["resolveComponent"])("IconWrite"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconErase"),d=Object(j["resolveComponent"])("IconClear"),s=Object(j["resolveComponent"])("IconClose");return Object(j["openBlock"])(),Object(j["createBlock"])("div",lb,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Teleport"],{to:"body"},[Object(j["createVNode"])(r,{ref:"writingBoardRef",color:e.writingBoardColor,model:e.writingBoardModel},null,8,["color","model"])])),Object(j["createVNode"])("div",ib,[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"画笔"},{default:rb((function(){return[Object(j["createVNode"])("div",{class:["btn",{active:"pen"===e.writingBoardModel}],onClick:t[1]||(t[1]=function(t){return e.changePen()})},[Object(j["createVNode"])(l,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"橡皮擦"},{default:rb((function(){return[Object(j["createVNode"])("div",{class:["btn",{active:"eraser"===e.writingBoardModel}],onClick:t[2]||(t[2]=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:rb((function(){return[Object(j["createVNode"])("div",{class:"btn",onClick:t[3]||(t[3]=function(t){return e.clearCanvas()})},[Object(j["createVNode"])(d,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])("div",ub,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.writingBoardColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["color",{active:t===e.writingBoardColor}],key:t,style:{backgroundColor:t},onClick:function(n){return e.changeColor(t)}},null,14,["onClick"])})),128))]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"关闭画笔"},{default:rb((function(){return[Object(j["createVNode"])("div",{class:"btn",onClick:t[4]||(t[4]=function(t){return e.closeWritingBoard()})},[Object(j["createVNode"])(s,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"])])])})),sb=Object(j["withScopeId"])("data-v-61d4949c");Object(j["pushScopeId"])("data-v-61d4949c");var fb={class:"writing-board",ref:"writingBoardRef"};Object(j["popScopeId"])();var pb=sb((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconWrite");return Object(j["openBlock"])(),Object(j["createBlock"])("div",fb,[Object(j["createVNode"])("canvas",{class:"canvas",ref:"canvasRef",onMousedown:t[1]||(t[1]=function(t){return e.handleMousedown(t)}),onMousemove:t[2]||(t[2]=function(t){return e.handleMousemove(t)}),onMouseup:t[3]||(t[3]=function(t){return e.handleMouseup()}),onTouchstart:t[4]||(t[4]=function(t){return e.handleMousedown(t)}),onTouchmove:t[5]||(t[5]=function(t){return e.handleMousemove(t)}),onTouchend:t[6]||(t[6]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseleave:t[7]||(t[7]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseenter:t[8]||(t[8]=function(t){return e.mouseInCanvas=!0})},null,544),e.mouseInCanvas&&"pen"===e.model?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:0,class:"pen",style:{left:e.mouse.x-e.penSize/2+"px",top:e.mouse.y-36+e.penSize/2+"px",color:e.color}},[Object(j["createVNode"])(r,{class:"icon",size:"36"})],4)):Object(j["createCommentVNode"])("",!0),e.mouseInCanvas&&"eraser"===e.model?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:1,class:"eraser",style:{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)})),bb=6,mb=80,vb=Object(j["defineComponent"])({name:"writing-board",props:{color:{type:String,default:"#ffcc00"},model:{type:String,default:"pen"}},setup:function(e){var t=null,n=Object(j["ref"])(),o=Object(j["ref"])(),c={x:0,y:0},a=!1,r=0,l=-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,a){if(t){var r=c.x,l=c.y;t.lineWidth=a,t.strokeStyle=e.color,t.beginPath(),t.moveTo(r,l),t.lineTo(n,o),t.stroke(),t.closePath()}},p=function(e,n){var a,r,l,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))),b=[u+f,d-p],m=[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(),(a=t).moveTo.apply(a,b),(r=t).lineTo.apply(r,v),(l=t).lineTo.apply(l,O),(i=t).lineTo.apply(i,m),t.closePath(),t.clip(),t.clearRect(0,0,o.value.width,o.value.height),t.restore()}},b=function(e,t){var n=c.x,o=c.y;return Math.sqrt((e-n)*(e-n)+(t-o)*(t-o))},m=function(e,t){var n,o=10,c=.1,a=bb,r=3,i=e/t;return n=i<=c?a:i>=o?r:a-i/o*a,-1===l?n:1*n/3+2*l/3},v=function(t,n){var o=(new Date).getTime();if("pen"===e.model){var a=b(t,n),i=o-r,u=m(a,i);f(t,n,u),l=u}else p(t,n);c={x:t,y:n},r=(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;a=!0,c={x:t,y:n},r=(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),a&&v(t,n)},g=function(){a&&(a=!1)},y=function(){t&&o.value&&t.clearRect(0,0,o.value.width,o.value.height)};return{mouse:i,mouseInCanvas:d,penSize:bb,rubberSize:mb,writingBoardRef:n,canvasRef:o,handleMousedown:O,handleMousemove:h,handleMouseup:g,clearCanvas:y}}});n("ff6d");vb.render=pb,vb.__scopeId="data-v-61d4949c";var Ob=vb,hb=["#000000","#ffffff","#1e497b","#4e81bb","#e2534d","#9aba60","#8165a0","#47acc5","#f9974c"],jb=Object(j["defineComponent"])({name:"writing-board-tool",components:{WritingBoard:Ob},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(),c=Object(j["ref"])("#e2534d"),a=Object(j["ref"])("pen"),r=function(){a.value="pen"},l=function(){a.value="eraser"},i=function(){o.value.clearCanvas()},u=function(e){"pen"!==a.value&&(a.value="pen"),c.value=e},d=function(){n("close")};return{writingBoardRef:o,writingBoardColors:hb,writingBoardColor:c,writingBoardModel:a,changePen:r,changeEraser:l,clearCanvas:i,changeColor:u,closeWritingBoard:d}}});n("5f39");jb.render=db,jb.__scopeId="data-v-f34025bc";var gb=jb,yb=Object(j["defineComponent"])({name:"screen",components:{ScreenSlide:Qp,SlideThumbnails:ab,WritingBoardTool:gb},setup:function(){var e=Z(),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})),a=Object(j["ref"])(0),r=Object(j["ref"])(0),l=Object(j["computed"])((function(){return a.value/we})),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),a.value=e,r.value=t},f=qe(),p=f.exitScreening,b=function(){s(),Ge()||p()};Object(j["onMounted"])((function(){window.addEventListener("resize",b)})),Object(j["onUnmounted"])((function(){window.removeEventListener("resize",b)}));var m=Object(j["computed"])((function(){return c.value.animations||[]})),v=Object(j["ref"])(0),O=function(){var e="animate__",t=m.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);n.classList.add("".concat(e,"animated"),o);var c=function(){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=function(){if(m.value.length&&v.value>0)v.value-=1;else if(n.value>0){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1);var t=m.value?m.value.length:0;v.value=t}else ie["a"].success("已经是第一页了")},k=function(){m.value.length&&v.value0&&k()}),500,{leading:!0,trailing:!1}),C=function(e){var t=e.key.toUpperCase();t===ae.UP||t===ae.LEFT?E():t!==ae.DOWN&&t!==ae.RIGHT&&t!==ae.SPACE&&t!==ae.ENTER||k()};Object(j["onMounted"])((function(){document.addEventListener("keydown",C)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",C)}));var N=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1),v.value=0},T=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value+1),v.value=0},x=function(t){u.value=!1,e.commit(y.UPDATE_SLIDE_INDEX,t),v.value=0},L=function(){return[{text:"上一页",subText:"↑ ←",disable:n.value<=0,handler:function(){return N()}},{text:"下一页",subText:"↓ →",disable:n.value>=t.value.length-1,handler:function(){return T()}},{text:"第一页",disable:0===n.value,handler:function(){return x(0)}},{text:"最后一页",disable:n.value===t.value.length-1,handler:function(){return x(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:I},{text:"结束放映",subText:"ESC",handler:p}]};return Object(j["provide"])("slideScale",l),{slides:t,slideIndex:n,currentSlide:c,slideWidth:a,slideHeight:r,scale:l,mousewheelListener:S,animationIndex:v,contextmenus:L,execPrev:E,execNext:k,slideThumbnailModelVisible:u,turnSlideToIndex:x,writingBoardToolVisible:d,showPageNumber:i}}});n("9b75");yb.render=Hp,yb.__scopeId="data-v-5e85dd68";var Eb=yb,kb=Object(j["defineComponent"])({name:"app",components:{Editor:Ap,Screen:Eb},setup:function(){var e=Z(),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");kb.render=g;var Ib=kb;n("793f"),n("41ed"),n("5952"),n("c860"),n("ae3f"),n("8c56"),n("77ed");function Sb(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("MenuContent");return Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,[Object(j["createVNode"])("div",{class:"mask",onContextmenu:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.removeContextmenu()}),["prevent"])),onMousedown:t[2]||(t[2]=function(t){return e.removeContextmenu()})},null,32),Object(j["createVNode"])("div",{class:"contextmenu",style:{left:e.style.left+"px",top:e.style.top+"px"},onContextmenu:t[3]||(t[3]=Object(j["withModifiers"])((function(){}),["prevent"]))},[Object(j["createVNode"])(r,{menus:e.menus,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])],36)],64)}var Cb=Object(j["withScopeId"])("data-v-5490894e");Object(j["pushScopeId"])("data-v-5490894e");var Nb={class:"menu-content"},Tb={class:"text"},xb={key:0,class:"sub-text"};Object(j["popScopeId"])();var Lb=Cb((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("menu-content",!0);return Object(j["openBlock"])(),Object(j["createBlock"])("ul",Nb,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.menus,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:t.text||n},[t.hide?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])("li",{key:0,class:["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["createBlock"])("div",{key:0,class:["menu-item-content",{"has-children":t.children,"has-handler":t.handler}]},[Object(j["createVNode"])("span",Tb,Object(j["toDisplayString"])(t.text),1),t.subText&&!t.children?(Object(j["openBlock"])(),Object(j["createBlock"])("span",xb,Object(j["toDisplayString"])(t.subText),1)):Object(j["createCommentVNode"])("",!0),t.children&&t.children.length?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,class:"sub-menu",menus:t.children,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])):Object(j["createCommentVNode"])("",!0)],2))],10,["onClick"]))],64)})),128))])})),wb=Object(j["defineComponent"])({name:"menu-content",props:{menus:{type:Array,required:!0},handleClickMenuItem:{type:Function,required:!0}}});n("823f");wb.render=Lb,wb.__scopeId="data-v-5490894e";var Vb=wb,_b=Object(j["defineComponent"])({name:"contextmenu",components:{MenuContent:Vb},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,a=e.axis,r=a.x,l=a.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<=r+d?r-d:r,top:p<=l+s?l-s:l}})),n=function(t){t.disable||t.children&&!t.handler||(t.handler&&t.handler(e.el),e.removeContextmenu())};return{style:t,handleClickMenuItem:n}}});n("b8378");_b.render=Sb;var Bb=_b,Db="CTX_CONTEXTMENU_HANDLER",Mb=function(e,t,n){t.stopPropagation(),t.preventDefault();var o=n.value(e);if(o){var c=null,a=function t(){c&&(document.body.removeChild(c),c=null),e.classList.remove("contextmenu-active"),document.body.removeEventListener("scroll",t),window.removeEventListener("resize",t)},r={axis:{x:t.x,y:t.y},el:e,menus:o,removeContextmenu:a};c=document.createElement("div");var l=Object(j["createVNode"])(Bb,r,null);Object(j["render"])(l,c),document.body.appendChild(c),e.classList.add("contextmenu-active"),document.body.addEventListener("scroll",a),window.addEventListener("resize",a)}},Ab={mounted:function(e,t){e[Db]=function(n){return Mb(e,n,t)},e.addEventListener("contextmenu",e[Db])},unmounted:function(e){e&&e[Db]&&(e.removeEventListener("contextmenu",e[Db]),delete e[Db])}},Pb=Ab,Rb="CTX_CLICK_OUTSIDE_HANDLER",Fb=function(e,t,n){var o=n.value,c=t.composedPath(),a=c?c.indexOf(e)<0:!e.contains(t.target);a&&o(t)},Hb={mounted:function(e,t){e[Rb]=function(n){return Fb(e,n,t)},setTimeout((function(){document.addEventListener("click",e[Rb])}),0)},unmounted:function(e){e[Rb]&&(document.removeEventListener("click",e[Rb]),delete e[Rb])}},zb=Hb,Ub=n("84e7b"),Gb=n("1e27"),qb=n("8845"),Xb=n("a3ef"),Wb=n("8331"),Yb=n("4040"),Zb=n("f745"),Jb=n("2e2d"),Kb=n("6010"),Qb=n("1fcb"),$b=n("500e"),em=n("0996"),tm=n("1646"),nm=n("fbe7"),om=n("b8af"),cm=n("bf2c"),am=n("fd52"),rm=n("f259"),lm=n("1b1c"),im=n("bde2"),um=n("23fa"),dm=n("5a28"),sm=n("c53e"),fm=n("8377"),pm=n("246f"),bm=n("33a2"),mm=n("fdbcb"),vm=n("ccc7"),Om=n("e3b9"),hm=n("3a3e"),jm=n("eac59"),gm=n("694b"),ym=n("e9ec"),Em=n("ea01"),km=n("74f3"),Im=n("4bad"),Sm=n("e7f4"),Cm=n("eb50"),Nm=n("0be2"),Tm=n("a90c"),xm=n("c90a"),Lm=n("d41d6"),wm=n("2c06"),Vm=n("a5dc"),_m=n("8678"),Bm=n("d7fb"),Dm=n("ce42"),Mm=n("7abc"),Am=n("5b20"),Pm=n("69de"),Rm=n("d0c6"),Fm=n("dcc2"),Hm=n("f1d2"),zm=n("d16b"),Um=n("a5f1"),Gm=n("df0d"),qm=n("70f2"),Xm=n("b7c8"),Wm=n("f99d"),Ym=n("40bb"),Zm=n("ae33"),Jm=n("8c1a"),Km=n("b7b3"),Qm=n("96be"),$m=n("5a69"),ev=n("f9e5"),tv=n("bbce"),nv=n("77ad"),ov=n("46cd"),cv=n("3ee3"),av=n("dde4"),rv=n("cead"),lv=n("fa00"),iv=n("e970"),uv=n("f3c2"),dv=n("7312"),sv=n("5294b"),fv=n("9fbc"),pv={install:function(e){e.component("IconFontSize",fv["a"]),e.component("IconPicture",sv["a"]),e.component("IconGraphicDesign",dv["a"]),e.component("IconConnection",uv["a"]),e.component("IconChartProportion",iv["a"]),e.component("IconInsertTable",lv["a"]),e.component("IconLock",rv["a"]),e.component("IconUnlock",av["a"]),e.component("IconFullScreen",cv["a"]),e.component("IconBack",ov["a"]),e.component("IconNext",nv["a"]),e.component("IconAlignTop",tv["a"]),e.component("IconAlignLeft",ev["a"]),e.component("IconAlignRight",$m["a"]),e.component("IconAlignBottom",Qm["a"]),e.component("IconAlignVertically",Km["a"]),e.component("IconAlignHorizontally",Jm["a"]),e.component("IconBringToFront",Zm["a"]),e.component("IconSentToBack",Ym["a"]),e.component("IconBringToFrontOne",Wm["a"]),e.component("IconSendToBack",Xm["a"]),e.component("IconGroup",qm["a"]),e.component("IconUngroup",Gm["a"]),e.component("IconFill",Um["a"]),e.component("IconBackgroundColor",zm["a"]),e.component("IconPlatte",Hm["a"]),e.component("IconTailoring",Fm["a"]),e.component("IconColorFilter",Rm["a"]),e.component("IconFlipVertically",Pm["a"]),e.component("IconFlipHorizontally",Am["a"]),e.component("IconText",Mm["a"]),e.component("IconAddText",Dm["a"]),e.component("IconAlignTextLeft",Bm["a"]),e.component("IconAlignTextRight",_m["a"]),e.component("IconAlignTextCenter",Vm["a"]),e.component("IconRowHeight",wm["a"]),e.component("IconFullwidth",Lm["a"]),e.component("IconCode",xm["a"]),e.component("IconTextBold",Tm["a"]),e.component("IconTextItalic",Nm["a"]),e.component("IconTextUnderline",Cm["a"]),e.component("IconStrikethrough",Sm["a"]),e.component("IconQuote",Im["a"]),e.component("IconList",km["a"]),e.component("IconOrderedList",Em["a"]),e.component("IconUpOne",ym["a"]),e.component("IconDownOne",gm["a"]),e.component("IconFormat",jm["a"]),e.component("IconDown",hm["a"]),e.component("IconLeftTwo",Om["a"]),e.component("IconRightTwo",vm["a"]),e.component("IconPlus",mm["a"]),e.component("IconMinus",bm["a"]),e.component("IconClose",pm["a"]),e.component("IconCloseSmall",fm["a"]),e.component("IconChartHistogram",sm["a"]),e.component("IconChartHistogramOne",dm["a"]),e.component("IconChartLine",um["a"]),e.component("IconChartLineArea",im["a"]),e.component("IconChartScatter",lm["a"]),e.component("IconChartPie",rm["a"]),e.component("IconChartRing",am["a"]),e.component("IconPlayOne",cm["a"]),e.component("IconPpt",om["a"]),e.component("IconHelpcenter",nm["a"]),e.component("IconGithub",tm["a"]),e.component("IconWrite",em["a"]),e.component("IconErase",$b["a"]),e.component("IconEffects",Qb["a"]),e.component("IconRotate",Kb["a"]),e.component("IconEdit",Jb["a"]),e.component("IconUndo",Zb["a"]),e.component("IconTransform",Yb["a"]),e.component("IconClick",Wb["a"]),e.component("IconTheme",Xb["a"]),e.component("IconArrowCircleLeft",qb["a"]),e.component("IconLogout",Gb["a"]),e.component("IconClear",Ub["a"])}},bv=Object(j["withScopeId"])("data-v-bf80565c"),mv=bv((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"file-input",onClick:t[2]||(t[2]=function(t){return e.handleClick()})},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0),Object(j["createVNode"])("input",{class:"input",type:"file",name:"upload",ref:"inputRef",accept:e.accept,onChange:t[1]||(t[1]=function(t){return e.handleChange(t)})},null,40,["accept"])])})),vv=Object(j["defineComponent"])({name:"file-input",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())},a=function(e){var t=e.target.files;t&&n("change",t)};return{handleClick:c,handleChange:a,inputRef:o}}});n("e3f5");vv.render=mv,vv.__scopeId="data-v-bf80565c";var Ov=vv,hv={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",version:"1.1"};function jv(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("svg",hv,[Object(j["renderSlot"])(e.$slots,"default")])}var gv={name:"svg-wrapper"};gv.render=jv;var yv=gv,Ev=Object(j["withScopeId"])("data-v-7cae2b90"),kv=Ev((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("button",{class:["checkbox-button",{checked:n.checked}]},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)],2)})),Iv={name:"checkbox-button",props:{checked:{type:Boolean,default:!1}}};n("782e");Iv.render=kv,Iv.__scopeId="data-v-7cae2b90";var Sv=Iv,Cv=Object(j["withScopeId"])("data-v-7dafd0a9");Object(j["pushScopeId"])("data-v-7dafd0a9");var Nv={class:"checkbox-button-group"};Object(j["popScopeId"])();var Tv=Cv((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Nv,[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)])})),xv={name:"checkbox-button-group"};n("69d58");xv.render=Tv,xv.__scopeId="data-v-7dafd0a9";var Lv=xv,wv=Object(j["withScopeId"])("data-v-4adab90a");Object(j["pushScopeId"])("data-v-4adab90a");var Vv={class:"color-picker"},_v={class:"picker-saturation-wrap"},Bv={class:"picker-controls"},Dv={class:"picker-color-wrap"},Mv={class:"picker-sliders"},Av={class:"picker-hue-wrap"},Pv={class:"picker-alpha-wrap"},Rv={class:"picker-field"},Fv={class:"picker-presets"},Hv={class:"picker-gradient-presets"},zv={class:"picker-presets"},Uv={key:0,class:"recent-colors-title"},Gv={class:"recent-colors"};Object(j["popScopeId"])();var qv=wv((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Saturation"),l=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["createBlock"])("div",Vv,[Object(j["createVNode"])("div",_v,[Object(j["createVNode"])(r,{value:e.color,hue:e.hue,onColorChange:t[1]||(t[1]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createVNode"])("div",Bv,[Object(j["createVNode"])("div",Dv,[Object(j["createVNode"])("div",{class:"picker-current-color",style:{background:e.currentColor}},null,4),Object(j["createVNode"])(l)]),Object(j["createVNode"])("div",Mv,[Object(j["createVNode"])("div",Av,[Object(j["createVNode"])(i,{value:e.color,hue:e.hue,onColorChange:t[2]||(t[2]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createVNode"])("div",Pv,[Object(j["createVNode"])(u,{value:e.color,onColorChange:t[3]||(t[3]=function(t){return e.changeColor(t)})},null,8,["value"])])])]),Object(j["createVNode"])("div",Rv,[Object(j["createVNode"])(d,{value:e.color,onColorChange:t[4]||(t[4]=function(t){return e.changeColor(t)})},null,8,["value"])]),Object(j["createVNode"])("div",Fv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themeColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"picker-presets-color",key:t,style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))]),Object(j["createVNode"])("div",Hv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.presetColors,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"picker-gradient-col",key:n},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"picker-gradient-color",key:t,style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))])})),128))]),Object(j["createVNode"])("div",zv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.standardColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:t,class:"picker-presets-color",style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))]),e.recentColors.length?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Uv,"最近使用:")):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",Gv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.recentColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:t,class:"picker-presets-color",style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))])])})),Xv=Object(j["withScopeId"])("data-v-ecf7d10e");Object(j["pushScopeId"])("data-v-ecf7d10e");var Wv={class:"alpha"},Yv={class:"alpha-checkboard-wrap"},Zv=Object(j["createVNode"])("div",{class:"alpha-picker"},null,-1);Object(j["popScopeId"])();var Jv=Xv((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Checkboard");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Wv,[Object(j["createVNode"])("div",Yv,[Object(j["createVNode"])(r)]),Object(j["createVNode"])("div",{class:"alpha-gradient",style:{background:e.gradientColor}},null,4),Object(j["createVNode"])("div",{class:"alpha-container",ref:"alphaRef",onMousedown:t[1]||(t[1]=function(t){return e.handleMouseDown(t)})},[Object(j["createVNode"])("div",{class:"alpha-pointer",style:{left:100*e.color.a+"%"}},[Zv],4)],544)])})),Kv=Object(j["withScopeId"])("data-v-e9a0ac98"),Qv=Kv((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"checkerboard",style:e.bgStyle},null,4)})),$v={},eO=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},tO=function(e,t,n){var o=e+","+t+","+n;if($v[o])return $v[o];var c=eO(e,t,n);return $v[o]=c,c},nO=Object(j["defineComponent"])({name:"checkboard",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=tO(e.white,e.grey,e.size);return{backgroundImage:"url(".concat(t,")")}}));return{bgStyle:t}}});n("62d8");nO.render=Qv,nO.__scopeId="data-v-e9a0ac98";var oO=nO,cO=Object(j["defineComponent"])({name:"alpha",components:{Checkboard:oO},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%)")})),a=Object(j["ref"])(),r=function(e){if(e.preventDefault(),a.value){var t,c=a.value.clientWidth,r=a.value.getBoundingClientRect().left+window.pageXOffset,l=e.pageX-r;t=l<0?0:l>c?1:Math.round(100*l/c)/100,o.value.a!==t&&n("colorChange",{r:o.value.r,g:o.value.g,b:o.value.b,a:t})}},l=function e(){window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",e)},i=function(e){r(e),window.addEventListener("mousemove",r),window.addEventListener("mouseup",l)};return Object(j["onUnmounted"])(l),{alphaRef:a,gradientColor:c,handleMouseDown:i,color:o}}});n("5c5e");cO.render=Jv,cO.__scopeId="data-v-ecf7d10e";var aO=cO,rO=Object(j["withScopeId"])("data-v-52d10460");Object(j["pushScopeId"])("data-v-52d10460");var lO={class:"hue"},iO=Object(j["createVNode"])("div",{class:"hue-picker"},null,-1);Object(j["popScopeId"])();var uO=rO((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",lO,[Object(j["createVNode"])("div",{class:"hue-container",ref:"hueRef",onMousedown:t[1]||(t[1]=function(t){return e.handleMouseDown(t)})},[Object(j["createVNode"])("div",{class:"hue-pointer",style:{left:e.pointerLeft}},[iO],4)],544)])})),dO=Object(j["defineComponent"])({name:"hue",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"])(""),a=Object(j["computed"])((function(){var t=wc()(e.value).toHsl();return-1!==e.hue&&(t.h=e.hue),t})),r=Object(j["computed"])((function(){return 0===a.value.h&&"right"===c.value?"100%":100*a.value.h/360+"%"}));Object(j["watch"])((function(){return e.value}),(function(){var t=wc()(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 l=Object(j["ref"])(),i=function(t){if(t.preventDefault(),l.value){var o,c,r=l.value.clientWidth,i=l.value.getBoundingClientRect().left+window.pageXOffset,u=t.pageX-i;u<0?o=0:u>r?o=360:(c=100*u/r,o=360*c/100),-1!==e.hue&&a.value.h===o||n("colorChange",{h:o,l:a.value.l,s:a.value.s,a:a.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:l,handleMouseDown:d,pointerLeft:r}}});n("82cd");dO.render=uO,dO.__scopeId="data-v-52d10460";var sO=dO,fO=Object(j["withScopeId"])("data-v-a98797da");Object(j["pushScopeId"])("data-v-a98797da");var pO=Object(j["createVNode"])("div",{class:"saturation-white"},null,-1),bO=Object(j["createVNode"])("div",{class:"saturation-black"},null,-1),mO=Object(j["createVNode"])("div",{class:"saturation-circle"},null,-1);Object(j["popScopeId"])();var vO=fO((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"saturation",ref:"saturationRef",style:{background:e.bgColor},onMousedown:t[1]||(t[1]=function(t){return e.handleMouseDown(t)})},[pO,bO,Object(j["createVNode"])("div",{class:"saturation-pointer",style:{top:e.pointerTop,left:e.pointerLeft}},[mO],4)],36)})),OO=n("f678"),hO=n.n(OO),jO=Object(j["defineComponent"])({name:"saturation",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=wc()(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%)")})),a=Object(j["computed"])((function(){return-100*o.value.v+1+100+"%"})),r=Object(j["computed"])((function(){return 100*o.value.s+"%"})),l=Ne()((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,a=i.value.getBoundingClientRect().top+window.pageYOffset,r=hO()(e.pageX-c,0,t),u=hO()(e.pageY-a,0,n),d=r/t,s=hO()(-u/n+1,0,1);l({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:a,pointerLeft:r}}});n("820d");jO.render=vO,jO.__scopeId="data-v-a98797da";var gO=jO,yO=Object(j["withScopeId"])("data-v-0311fdee");Object(j["pushScopeId"])("data-v-0311fdee");var EO={class:"editable-input"};Object(j["popScopeId"])();var kO=yO((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",EO,[Object(j["createVNode"])("input",{class:"input-content",value:e.val,onInput:t[1]||(t[1]=function(t){return e.handleInput(t)})},null,40,["value"])])})),IO=Object(j["defineComponent"])({name:"editable-input",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?wc()(e.value).toHex8String().toUpperCase():wc()(e.value).toHexString().toUpperCase(),t.replace("#","")})),c=function(e){var t=e.target.value;t.length>=6&&n("colorChange",wc()(t).toRgb())};return{val:o,handleInput:c}}});n("3706");IO.render=kO,IO.__scopeId="data-v-0311fdee";var SO=IO,CO="RECENT_COLORS",NO=[["#7f7f7f","#f2f2f2"],["#0d0d0d","#808080"],["#1c1a10","#ddd8c3"],["#0e243d","#c6d9f0"],["#233f5e","#dae5f0"],["#632623","#f2dbdb"],["#4d602c","#eaf1de"],["#3f3150","#e6e0ec"],["#1e5867","#d9eef3"],["#99490f","#fee9da"]],TO=function(e,t,n){for(var o=wc()(e).toRgb(),c=wc()(t).toRgb(),a=(c.r-o.r)/n,r=(c.g-o.g)/n,l=(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(CO);e&&(c.value=JSON.parse(e))})),Object(j["watch"])(c,(function(){var e=JSON.stringify(c.value);localStorage.setItem(CO,e)}));var f=function(e){"h"in e?(o.value=e.h,a.value=wc()(e).toRgb()):(o.value=wc()(e).toHsl().h,a.value=e),s()};return{themeColors:r,standardColors:l,presetColors:i,color:a,hue:o,currentColor:u,changeColor:f,selectPresetColor:d,recentColors:c}}});n("bf3c");LO.render=qv,LO.__scopeId="data-v-4adab90a";var wO=LO,VO=Object(j["createApp"])(Ib);VO.directive("contextmenu",Pb),VO.directive("click-outside",zb),VO.use(pv),VO.component("FileInput",Ov),VO.component("SvgWrapper",yv),VO.component("CheckboxButton",Sv),VO.component("CheckboxButtonGroup",Lv),VO.component("ColorPicker",wO),VO.component("InputNumber",h["a"]),VO.component("Divider",O["a"]),VO.component("Button",v["a"]),VO.component("ButtonGroup",v["a"].Group),VO.component("Tooltip",m["a"]),VO.component("Popover",b["a"]),VO.component("Slider",p["a"]),VO.component("Select",f["a"]),VO.component("SelectOption",f["a"].Option),VO.component("SelectOptGroup",f["a"].OptGroup),VO.component("Switch",s["a"]),VO.component("Radio",d["a"]),VO.component("RadioGroup",d["a"].Group),VO.component("RadioButton",d["a"].Button),VO.component("Input",u["a"]),VO.component("InputGroup",u["a"].Group),VO.component("Modal",i["a"]),VO.component("Dropdown",l["a"]),VO.component("Menu",r["a"]),VO.component("MenuItem",r["a"].Item),VO.component("Checkbox",a["a"]),VO.component("Drawer",c["a"]),VO.component("Spin",o["a"]),VO.use(Y,W),VO.mount("#app")},ce7d:function(e,t,n){},cff1:function(e,t,n){"use strict";n("4501")},d1f3:function(e,t,n){"use strict";n("3a03")},d251:function(e,t,n){},d32e:function(e,t,n){"use strict";n("26b5")},d38a:function(e,t,n){},d572:function(e,t,n){},d905:function(e,t,n){},d9a3:function(e,t,n){"use strict";n("0eae")},d9ed:function(e,t,n){},dc5e:function(e,t,n){},de7c:function(e,t,n){"use strict";n("fad2")},e3f5:function(e,t,n){"use strict";n("13b2")},e81d:function(e,t,n){},ec3f:function(e,t,n){},ee08:function(e,t,n){},ef0f:function(e,t,n){"use strict";n("930c")},f0b6:function(e,t,n){},f14f:function(e,t,n){"use strict";n("d905")},f2d4:function(e,t,n){},f558:function(e,t,n){"use strict";n("ac99")},f67b:function(e,t,n){"use strict";n("2a2c")},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")},fe34:function(e,t,n){"use strict";n("a6ef")},ff6d:function(e,t,n){"use strict";n("71a5")},fff2:function(e,t,n){}}); -//# sourceMappingURL=app.644735d7.js.map \ No newline at end of file diff --git a/js/app.644735d7.js.map b/js/app.644735d7.js.map deleted file mode 100644 index 3d90c891..00000000 --- a/js/app.644735d7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/Editor/Canvas/index.vue?c0c1","webpack:///./src/views/components/element/ImageElement/index.vue?4fcb","webpack:///./src/App.vue?25ed","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?6938","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/views/components/element/TableElement/StaticTable.vue?70f4","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?a6c4","webpack:///./src/views/Editor/index.vue?0894","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?185b","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?09db","webpack:///./src/views/components/ThumbnailSlide/index.vue?a2a6","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?9f2f","webpack:///./src/views/components/element/ChartElement/Chart.vue?6f91","webpack:///./src/components/ColorPicker/EditableInput.vue?72fc","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?23c0","webpack:///./src/views/Editor/Remark/index.vue?33a3","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?0831","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?b50b","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?8e40","webpack:///./src/views/Editor/Canvas/GridLines.vue?7220","webpack:///./src/components/ColorPicker/Alpha.vue?464a","webpack:///./src/views/Screen/WritingBoardTool.vue?33e5","webpack:///./src/components/ColorPicker/Checkboard.vue?024a","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?de61","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?6c64","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?4645","webpack:///./src/components/CheckboxButtonGroup.vue?3a3e","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?7480","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?b1b9","webpack:///./src/views/Screen/ScreenSlide.vue?6e86","webpack:///./src/components/CheckboxButton.vue?2273","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?a0ca","webpack:///./src/views/Editor/Toolbar/SlideStylePanel.vue?e459","webpack:///./src/components/ColorPicker/Saturation.vue?da63","webpack:///./src/components/Contextmenu/MenuContent.vue?5248","webpack:///./src/components/ColorPicker/Hue.vue?aa9d","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?dd5c","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?ba52","webpack:///./src/views/Editor/EditorHeader/index.vue?75c8","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?39c4","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?09bd","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?ae92","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?b21b","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?627d","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?fb4e","webpack:///./src/views/components/element/TableElement/index.vue?b892","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?9984","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?4444","webpack:///./src/views/Editor/Canvas/Operate/index.vue?13d6","webpack:///./src/views/Screen/index.vue?bace","webpack:///./src/views/components/element/TableElement/EditableTable.vue?74ef","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?7f0a","webpack:///./src/views/Editor/Toolbar/index.vue?6401","webpack:///./src/views/Editor/Thumbnails/index.vue?1680","webpack:///./src/views/components/element/ChartElement/Chart.vue?607f","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?16dd","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?a16c","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?5e37","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?8b3d","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?9d3f","webpack:///./src/views/components/element/LineElement/index.vue?e320","webpack:///./src/components/Contextmenu/index.vue?06fd","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?04c5","webpack:///./src/components/ColorPicker/index.vue?220a","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?152c","webpack:///./src/App.vue","webpack:///./src/store/constants.ts","webpack:///./src/mocks/slides.ts","webpack:///./src/mocks/theme.ts","webpack:///./src/store/state.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/views/Editor/index.vue","webpack:///./src/types/edit.ts","webpack:///./src/configs/hotkey.ts","webpack:///./src/utils/common.ts","webpack:///./src/utils/clipboard.ts","webpack:///./src/utils/crypto.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/views/Editor/EditorHeader/HotkeyDoc.vue","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?98af","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue?c9c2","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue?d122","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/emitter.ts","webpack:///./src/utils/selection.ts","webpack:///./src/views/Editor/Canvas/hooks/useViewportSize.ts","webpack:///./src/utils/element.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/configs/imageClip.ts","webpack:///./src/views/components/element/ImageElement/index.vue","webpack:///./src/views/components/element/hooks/useElementShadow.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/prosemirror/plugins/keymap.ts","webpack:///./src/prosemirror/plugins/inputrules.ts","webpack:///./src/prosemirror/plugins/index.ts","webpack:///./src/prosemirror/schema/nodes.ts","webpack:///./src/prosemirror/schema/marks.ts","webpack:///./src/prosemirror/schema/index.ts","webpack:///./src/prosemirror/index.ts","webpack:///./src/prosemirror/utils.ts","webpack:///./src/prosemirror/commands/setTextAlign.ts","webpack:///./src/prosemirror/commands/toggleList.ts","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/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/index.vue?4919","webpack:///./src/views/Editor/Canvas/Operate/index.vue?3933","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/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/SlideStylePanel.vue","webpack:///./src/configs/theme.ts","webpack:///./src/views/Editor/Toolbar/SlideStylePanel.vue?1908","webpack:///./src/views/Editor/Toolbar/SlideStylePanel.vue?0da1","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/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/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/contextmenu.ts","webpack:///./src/plugins/clickOutside.ts","webpack:///./src/plugins/iconPark.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/main.ts","webpack:///./src/views/components/element/ShapeElement/index.vue?a115","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue?5456","webpack:///./src/views/components/element/ChartElement/index.vue?fe88","webpack:///./src/views/components/element/ElementOutline.vue?a889","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?a30e","webpack:///./src/components/FileInput.vue?320a","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?e4d6","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?8c5c","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?f27b","webpack:///./src/views/components/element/TextElement/index.vue?7589","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","webpack:///./src/views/Screen/SlideThumbnails.vue?dab0","webpack:///./src/components/WritingBoard.vue?e57b"],"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","flipH","lineHeight","content","defaultFontName","defaultColor","start","end","points","color","style","background","themeColor","fontColor","fontName","backgroundColor","activeElementIdList","handleElementId","activeGroupElementId","canvasPercentage","canvasScale","thumbnailsFocus","editorAreaFocus","disableHotkeys","showGridLines","creatingElement","availableFonts","toolbarState","viewportRatio","theme","slides","slideIndex","selectedSlidesIndex","snapshotCursor","snapshotLength","ctrlKeyState","shiftKeyState","clipingImageElementId","getters","currentSlide","state","currentSlideAnimations","animations","els","elIds","el","filter","animation","includes","elId","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_THEME","themeProps","SET_VIEWPORT_RATIO","ADD_SLIDE","slide","Array","isArray","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","class","ElementOrderCommands","ElementAlignCommands","OperateBorderLines","OperateResizeHandlers","OperateLineHandlers","KEYS","remarkHeight","HOTKEY_DOC","children","createRandomCode","len","charset","maxLen","ret","randomIndex","floor","random","digit","Promise","reject","fakeElement","clipboard","text","action","container","body","on","destroy","appendChild","click","removeChild","readClipboard","navigator","readText","then","CRYPTO_KEY","msg","AES","encrypt","toString","ciphertext","bytes","decrypt","enc","Utf8","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","createImageElement","createChartElement","chartType","gridColor","labels","series","createTableElement","row","col","fontname","rowCells","colspan","rowspan","DEFAULT_CELL_WIDTH","DEFAULT_CELL_HEIGHT","colWidths","outline","rowHeader","rowFooter","colHeader","colFooter","createTextElement","position","createShapeElement","createLineElement","newElement","isBroken","broken","isCurve","curve","useCreateElement","pasteElement","groupIdMap","elIdMap","groupId","currentSlideElementIdList","inCurrentSlide","values","pasteSlides","newSlides","pasteText","pasteTextClipboardData","options","clipboardData","onlySlide","onlyElements","JSON","parse","selectedSlides","selectedSlidesId","usePasteTextClipboardData","resetSlides","emptySlide","updateSlideIndex","command","UP","DOWN","copySlide","stringify","pasteSlide","catch","err","message","warning","createSlide","copyAndPasteSlide","deleteSlide","targetSlidesId","cutSlide","selectAllSlide","newSelectedSlidesIndex","from","lockElement","newElementList","lock","unlockElement","deleteElement","deleteAllElements","combineElements","combineElementList","combineElementMaxLevel","_element","combineElementIdList","insertLevel","uncombineElements","hasElementInGroup","some","handleElementIdList","useDeleteElement","copyElement","cutElement","quickCopyElement","selectAllElement","unlockedElements","newActiveElementIdList","moveElement","step","LEFT","RIGHT","getCombineElementLevelRange","elementList","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","max","setCanvasPercentage","ctrlKeyActive","shiftKeyActive","useSlideHandler","useCombineElement","useLockElement","useCopyAndPasteElement","useSelectAllElement","useMoveElement","useOrderElement","useScreening","useScaleCanvas","copy","cut","quickCopy","selectAll","combine","uncombine","remove","move","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","indexOf","getAsFile","getAsString","href","target","trigger","overlay","toggleGridLines","exportDialogVisible","hotkeyDrawerVisible","mouseLeaveDelay","title","placement","visible","footer","centered","closable","destroyOnClose","hotkeys","hotkey","setup","render","__scopeId","exportJSON","emit","blob","Blob","components","HotkeyDoc","ExportDialog","EmitterEvents","ref","$event","handleMousewheelCanvas","handleClickBlankArea","insertElementFromCreateSelection","alignmentLines","line","axis","scaleMultiElement","elementInfo","isSelected","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","dragLineElement","mouseSelectionState","isShow","quadrant","elementIndex","selectElement","contextmenus","removeEditorAreaFocus","removeAllRanges","selection","getSelection","canvasRef","viewportLeft","viewportTop","setViewportPosition","canvasWidth","canvasHeight","viewportActualWidth","viewportActualHeight","viewportStyles","resizeObserver","ResizeObserver","observe","unobserve","getRectRotatedRange","radius","sqrt","pow","auxiliaryAngle","atan","PI","tlbraRadian","trblaRadian","middleLeft","middleTop","xAxis","cos","yAxis","sin","xRange","yRange","getRectRotatedOffset","originXRange","originYRange","rotatedXRange","rotatedYRange","offsetX","offsetY","getElementRange","minX","maxX","minY","maxY","getElementListRange","leftValues","topValues","rightValues","bottomValues","forEach","uniqAlignLines","lines","uniqLines","_line","uniqLine","rangeMin","range","rangeMax","viewportRef","updateMouseSelection","isMouseDown","viewportRect","getBoundingClientRect","minSelectionRange","startPageX","pageX","startPageY","pageY","x","y","onmousemove","currentPageX","currentPageY","offsetWidth","offsetHeight","abs","onmouseup","inRangeElementList","mouseSelectionLeft","mouseSelectionTop","mouseSelectionWidth","mouseSelectionHeight","isInclude","inRangeElement","groupElementList","every","groupElement","inRangeElementIdList","elementRef","handleDrop","dataTransfer","dataTransferItem","ondragleave","ondrop","ondragenter","ondragover","getAngleFromCoordinate","radian","atan2","angle","elOriginRotate","elLeft","elTop","elWidth","elHeight","centerX","centerY","mouseX","mouseY","sorptionRange","emitter","ELEMENT_TYPE_ZH","image","shape","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","SCALE_ELEMENT_STATE","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","mid","midX","midY","START","adsorptionPoint","END","newEl","MID","formatCreateSelection","selectionData","formatCreateSelectionForLine","_start","_end","currentElementComponent","ElementTypes","ClipPathTypes","ClipPaths","alignElementToCanvas","viewportWidth","viewportHeight","CENTER","VERTICAL","HORIZONTAL","isCliping","clipData","clip","clipPath","clipShape","handleClip","handleSelectElement","draggable","alt","shadow","shadowStyle","h","v","blur","flipV","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","rx","ry","stroke","outlineColor","stroke-width","outlineWidth","stroke-dasharray","outlineStyle","Number","required","String","default","useElementOutline","cx","cy","Function","ImageRectOutline","ImageEllipseOutline","ImagePolygonOutline","useClipImage","shape-rendering","clipWrapperPositionStyle","bottomImgPositionStyle","topImgPositionStyle","topImgWrapperPositionStyle","moveClipRange","point","scaleClipRange","isSettingClipRange","currentRange","getClipDataTransformInfo","topImgWrapperPosition","bottomWidth","bottomHeight","topLeft","topTop","topWidth","topHeight","initClipPosition","clipedEmitData","keyboardListener","updateRange","retPosition","parseInt","bottomPosition","originPositopn","setTimeout","minWidth","minHeight","targetWidth","targetHeight","ImageOutline","ImageClipHandler","useElementShadow","useElementFlip","useFilter","stopPropagation","originClip","_props","schema","cmd","marks","strong","em","underline","strikethrough","nodes","list_item","nodeType","match","node","childCount","attrs","rules","blockquote","ordered_list","bullet_list","code_block","_orderedList","group","_bulletList","align","parseDOM","tag","getAttrs","dom","getAttribute","test","toDOM","paragraph","subscript","excludes","superscript","forecolor","mark","backcolor","inline","fontsize","replace","schemaNodes","schemaMarks","htmlString","parser","DOMParser","parseFromString","firstElementChild","fromSchema","doc","plugins","equalNodeType","findParentNodeClosestToPos","$pos","predicate","depth","pos","before","findParentNode","_ref","$from","findParentNodeOfType","isActiveOfParentNodeType","getMarkAttrs","view","nodeAt","markType","attr","getAttrValueInSelection","to","keepChecking","nodesBetween","getTextAttrs","isBold","isEm","isUnderline","isStrikethrough","isSuperscript","isSubscript","isCode","isBulletList","isOrderedList","isBlockquote","bold","bulletList","orderedList","tr","alignment","listItem","tasks","allowedNodeTypes","Set","has","task","setNodeMarkup","alignmentCommand","setSelection","isList","listType","itemType","$to","blockRange","parentList","validContent","ElementOutline","editorView","isScaling","realHeightCache","editorViewRef","canMove","scaleElementStateListener","off","updateTextElementHeight","entries","contentRect","realHeight","handleInput","innerHTML","handleFocus","handleBlur","handleClick","UPDATE_TEXT_STATE","handleKeydown","textContent","hasFocus","setProps","editable","handleDOMEvents","focus","keydown","execCommand","payload","commands","empty","addMark","removeMark","EXEC_TEXT_COMMAND","gradient","color1","color2","transform","x1","y1","x2","y2","gradientTransform","offset","stop-color","GradientDefs","svgWidth","svgHeight","baseSize","lineDashArray","marker-start","marker-end","markerUnits","orient","markerWidth","markerHeight","refX","refY","pathMap","dot","arrow","rotateMap","LinePointMarker","chartRef","slideScale","getDataAndOptions","propsOptopns","renderChart","updateChart","updateTheme","colors","analogous","toRgbString","setProperty","updateGridColor","Chart","updateTableCells","widths","updateColWidths","cells","updateSelectedCells","startEdit","totalWidth","dragLinePosition","handleMousedownColHandler","subThemeColor","colSizeList","span","tableCells","rowIndex","cell","colIndex","data-cell-index","handleCellMousedown","handleCellMouseenter","activedCell","contenteditable","hideCells","getTextStyle","textDecoration","fontWeight","fontStyle","fontSize","fontFamily","rgba","toRgb","subRgba1","g","b","a","subRgba2","immediate","modelValue","Boolean","textareaRef","onpaste","CustomTextarea","isStartSelect","startCell","endCell","set","newData","useSubThemeColor","reduce","removeSelectedCells","useHideCells","selectedCells","selectedRange","handleMouseup","button","isHideCell","selectCol","maxRow","selectRow","maxCol","deleteRow","_tableCells","targetCells","hideCellsPos","deleteCol","insertRow","insertCol","mergeCells","splitCells","originWidth","round","clearSelectedCellText","tabActiveCell","getNextCell","nextRow","nextCol","nextCell","textRef","querySelector","split","getEffectiveTableCells","effectiveTableCells","_rowCells","checkCanDeleteRowOrCol","canDeleteRow","canDeleteCol","checkCanMergeOrSplit","isMultiSelected","targetCell","canMerge","canSplit","cellIndex","dataset","handler","divider","EditableTable","updateTableElementHeight","UPDATE_TABLE_SELECTED_CELL","elementTypeMap","IMAGE","ImageElement","TEXT","TextElement","SHAPE","ShapeElement","LINE","LineElement","CHART","ChartElement","TABLE","TableElement","useAlignElementToCanvas","subText","hide","validator","backgroundStyle","bgColor","colorList","mostReadable","includeFallbackColors","setAlpha","gridSize","getPath","imageSize","gradientColor","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","isWide","ResizeHandler","BorderLine","localActiveElementList","useCommonOperate","setRange","currentOperateComponent","elementIndexInAnimation","scaleWidth","inheritAttrs","RotateHandler","scaleHeight","handlers","midHandler","ImageElementOperate","TextElementOperate","ShapeElementOperate","LineElementOperate","ChartElementOperate","TableElementOperate","EditableElement","MouseSelection","ViewportBackground","AlignmentLine","ElementCreateSelection","MultiSelectOperate","Operate","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","close","insertCustomTable","handleClickTable","ShapePool","LinePool","ChartPool","TableGenerator","setThumbnailsFocus","scroll","scrollSensitivity","handleDragEnd","itemKey","handleClickSlideThumbnail","fillDigit","contextmenusThumbnailItem","contextmenusThumbnails","strokeWidth","_chartType","_options","horizontalBars","showArea","showLine","donut","StaticTable","BaseImageElement","BaseTextElement","BaseShapeElement","BaseLineElement","BaseChartElement","BaseTableElement","ThumbnailElement","Draggable","ThumbnailSlide","changSlideIndex","minIndex","eventData","oldIndex","_slides","_slide","currentTabs","tab","setToolbarState","currentPanelComponent","ToolbarStates","EL_ANIMATION","EL_STYLE","EL_POSITION","SLIDE_STYLE","SLIDE_ANIMATION","MULTI_POSITION","presetStyles","emitBatchRichTextCommand","compact","richTextAttrs","emitRichTextCommand","suffixIcon","webFonts","fontSizeOptions","updateFill","checked","button-style","updateLineHeight","lineHeightOptions","wordSpace","updateWordSpace","wordSpaceOptions","updateOpacity","undefined","deep","fixed","hasOutline","toggleOutline","updateOutline","ColorButton","outlineProps","hasShadow","toggleShadow","updateShadow","shadowProps","ElementOpacity","ElementShadow","updateRichTextAttrs","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","gradientProps","updateLine","chartDataEditorVisible","updateOptions","lineSmooth","updateData","rangeLines","resizablePointStyle","changeSelectRange","autocomplete","closeEditor","getTableData","CELL_WIDTH","CELL_HEIGHT","tempRangeSize","initData","_data","rowCount","colCount","inputRef","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","handleElementAnimation","animationSequence","elType","animationType","runAnimation","deleteAnimation","ANIMATIONS","animationTypes","prefix","elRef","animationName","classList","handleAnimationEnd","once","updateElementAnimation","duration","updateBackgroundType","updateBackground","uploadBackgroundImage","applyBackgroundAllSlide","updateViewportRatio","themes","applyThemeAllSlide","PRESET_THEMES","newBackground","currentTurningMode","updateTurningMode","applyAllSlide","turningMode","alignElement","uniformHorizontalDisplay","uniformVerticalDisplay","canCombine","alignActiveElement","groupElementRangeMap","activeElement","groupElements","horizontalCenter","center","verticalCenter","copyOfActiveElementList","sort","elementA","elementB","elAMinX","elBMinX","elMinX","elMaxX","sortedElementData","lastItemElement","lastItemPos","lastElementMinX","lastElementMaxX","lastElementWidth","firstElMinX","sortedItem","elAMinY","elBMinY","totalHeight","elMinY","elMaxY","lastElementMinY","lastElementMaxY","lastElementHeight","firstElMinY","useAlignActiveElement","useUniformDisplayElement","firstGroupId","inSameGroup","elementTabs","slideTabs","multiSelectTabs","currentTabsValue","ElementStylePanel","ElementPositionPanel","ElementAnimationPanel","SlideStylePanel","SlideAnimationPanel","MultiPositionPanel","resize","remark","placeholder","newHeight","EditorHeader","Canvas","CanvasTool","Thumbnails","Toolbar","Remark","useGlobalHotkey","usePasteEvent","mousewheelListener","animationIndex","slideThumbnailModelVisible","turnSlideToIndex","writingBoardToolVisible","execPrev","execNext","showPageNumber","ScreenChartElement","needWaitAnimation","ScreenElement","writingBoardColor","model","writingBoardModel","changePen","changeEraser","clearCanvas","writingBoardColors","changeColor","closeWritingBoard","handleMousedown","handleMousemove","mouseInCanvas","penSize","rubberSize","writingBoardRef","lastPos","lastTime","lastLineWidth","mouse","updateMousePosition","initCanvas","lineCap","lineJoin","draw","posX","posY","lineWidth","lastPosX","lastPosY","strokeStyle","beginPath","moveTo","lineTo","closePath","erase","sinRadius","cosRadius","rectPoint1","rectPoint2","rectPoint3","rectPoint4","save","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","lastIndex","success","autoPlay","setInterval","SPACE","turnPrevSlide","turnNextSlide","Editor","Screen","onbeforeunload","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","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","toHexString","RECENT_COLORS","presetColorConfig","startColor","endColor","_startColor","_endColor","rStep","gStep","bStep","gradientColorArr","Alpha","Hue","Saturation","EditableInput","rgbaString","colorString","updateRecentColorsCache","_color","maxLength","recentColorsCache","localStorage","getItem","setItem","App","directive","use","FileInput","SvgWrapper","CheckboxButton","CheckboxButtonGroup","ColorPicker","Group","Option","OptGroup","Button","Item","mount"],"mappings":"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BAAgB5W,EAAM3lB,QAAtB,aAA6B,GAAU2lB,EAAM3lB,QAA7C,yC,CAEV,yBAUQ,QATNuK,MAAM,aACNslB,gBAAc,qBACdC,iBAAe,OACfC,oBAAkB,IAClBC,kBAAA,GACA9vB,KAAK,cACLiwB,OAAO,OACPE,eAAa,IACZlzB,EAAGwoB,EAAM1lB,M,4FCnBfyrC,GAAa,CACxB,CACE/rC,KAAM,KACNqL,SAAU,CACR,CACEhL,QAAS,IACTC,KAAM,qCAER,CACED,QAAS,IACTC,KAAM,wGAER,CACED,QAAS,IACTC,KAAM,+DAER,CACED,QAAS,IACTC,KAAM,oDAER,CACED,QAAS,IACTC,KAAM,6DAER,CACED,QAAS,IACTC,KAAM,yEAER,CACED,QAAS,IACTC,KAAM,0DAER,CACED,QAAS,IACTC,KAAM,yEAKZ,CACEN,KAAM,OACNqL,SAAU,CACR,CACEhL,QAAS,IACTC,KAAM,uDAER,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,+CAKZ,CACEN,KAAM,KACNqL,SAAU,CACR,CACEhL,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,+IAER,CACED,QAAS,KACTC,KAAM,mJAKZ,CACEN,KAAM,OACNqL,SAAU,CACR,CACEhL,QAAS,KACTC,KAAM,svCAER,CACED,QAAS,KACTC,KAAM,62BAER,CACED,QAAS,KACTC,KAAM,kcAER,CACED,QAAS,KACTC,KAAM,ofAER,CACED,QAAS,KACTC,KAAM,ipDAER,CACED,QAAS,KACTC,KAAM,6uBAER,CACED,QAAS,KACTC,KAAM,ibAER,CACED,QAAS,KACTC,KAAM,usCAER,CACED,QAAS,KACTC,KAAM,y/BAER,CACED,QAAS,KACTC,KA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","file":"js/app.644735d7.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([0,\"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!./index.vue?vue&type=style&index=0&id=fb6f9726&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=1622838f&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!./ElementFlip.vue?vue&type=style&index=0&id=c129286e&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!./StaticTable.vue?vue&type=style&index=0&id=01f791ba&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=3c5b7aac&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!./MultiPositionPanel.vue?vue&type=style&index=0&id=aef45858&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!./ShapePool.vue?vue&type=style&index=0&id=5aabd717&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=233b1dc8&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!./EditableInput.vue?vue&type=style&index=0&id=0311fdee&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=56b0510c&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=89372f4a&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\": \"e81d1\",\n\t\"./km.js\": \"e81d1\",\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!./SlideAnimationPanel.vue?vue&type=style&index=0&id=6e3028f1&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!./ImageElementOperate.vue?vue&type=style&index=0&id=5b0628aa&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=3cb2c22e&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=ecf7d10e&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=f34025bc&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=e9a0ac98&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!./LinePool.vue?vue&type=style&index=0&id=5087394c&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!./ImageClipHandler.vue?vue&type=style&index=0&id=1d9b5032&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=998a7a02&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!./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!./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!./SlideStylePanel.vue?vue&type=style&index=0&id=40e749dc&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=a98797da&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=5490894e&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!./Hue.vue?vue&type=style&index=0&id=52d10460&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=c1cc1cba&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!./index.vue?vue&type=style&index=0&id=ecea6ffc&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=2db32cac&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=62789f0d&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!./CustomTextarea.vue?vue&type=style&index=0&id=0d17e957&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=43fccffc&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!./index.vue?vue&type=style&index=0&id=1ab7e248&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!./BaseShapeElement.vue?vue&type=style&index=0&id=6fef68fd&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=2a95eecd&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=558a94fe&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=5e85dd68&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=70bdbb7e&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!./index.vue?vue&type=style&index=0&id=f790671e&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=57618e72&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=233b1dc8&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=1c2a68d0&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!./TableGenerator.vue?vue&type=style&index=0&id=576c614c&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!./ElementPositionPanel.vue?vue&type=style&index=0&id=15c9ddcc&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=7d3d40d6&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!./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!./index.vue?vue&type=style&index=0&id=4adab90a&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\"","\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\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 flipH: 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 { 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\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}\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: 'slideStyle', // 右侧工具栏状态\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}","import { GetterTree } from 'vuex'\r\nimport { State } from './state'\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 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/omit'\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\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, type) {\r\n state.toolbarState = type\r\n },\r\n\r\n [MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID](state, elId) {\r\n state.clipingImageElementId = elId\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)","\n\n\n\n","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: 'Ctrl + B' },\n { label: '斜体', value: 'Ctrl + I' },\n { label: '下划线', value: 'Ctrl + U' },\n { label: '删除线', value: 'Ctrl + D' },\n ],\n },\n]","import padStart from 'lodash/padStart'\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 Clipboard from 'clipboard'\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}","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 debounce from 'lodash/debounce'\nimport throttle from 'lodash/throttle'\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 } 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\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 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 rowCells: TableCell[] = new Array(col).fill({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '', style })\n const data: TableCell[][] = new Array(row).fill(rowCells)\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 createElement({\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 }\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 { decrypt } from '@/utils/crypto'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\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 pasteElement = (elements: PPTElement[]) => {\n const groupIdMap = {}\n const elIdMap = {}\n for (const element of elements) {\n const groupId = element.groupId\n if (groupId && !groupIdMap[groupId]) {\n groupIdMap[groupId] = createRandomCode()\n }\n elIdMap[element.id] = createRandomCode()\n }\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 pasteSlides = (slides: Slide[]) => {\n const newSlides = slides.map(slide => ({\n ...slide,\n id: createRandomCode(8),\n }))\n store.commit(MutationTypes.ADD_SLIDE, newSlides)\n addHistorySnapshot()\n }\n\n /**\n * 粘贴普通文本:创建为新的文本元素\n * @param text 文本\n */\n const pasteText = (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 let clipboardData\n try {\n clipboardData = JSON.parse(decrypt(text))\n }\n catch {\n clipboardData = text\n }\n\n // 元素或页面\n if (typeof clipboardData === 'object') {\n const { type, data } = clipboardData\n\n if (type === 'elements' && !onlySlide) pasteElement(data)\n else if (type === 'slides' && !onlyElements) pasteSlides(data)\n }\n\n // 普通文本\n else if (!onlyElements && !onlySlide) pasteText(clipboardData)\n }\n\n return {\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 { 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 } = 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 copyAndPasteSlide = () => {\n store.commit(MutationTypes.ADD_SLIDE, {\n ...currentSlide.value,\n id: createRandomCode(8),\n })\n addHistorySnapshot()\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 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 * 组合当前选中的元素:给当前选中的元素赋予一个相同的分组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 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 { 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 currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\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 const newElementList = currentSlide.value.elements.map(el => {\r\n if (activeElementIdList.value.includes(el.id)) {\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 return el\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","\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","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { saveAs } from 'file-saver'\n\nexport default defineComponent({\n name: 'export-dialog',\n setup(props, { emit }) {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n\n\n const exportJSON = () => {\n const blob = new Blob([JSON.stringify(slides.value)], { type: '' })\n saveAs(blob, 'pptist_slides.json')\n }\n\n return {\n slides,\n exportJSON,\n emit,\n }\n },\n})\n","import { render } from \"./ExportDialog.vue?vue&type=template&id=a69a4592&scoped=true\"\nimport script from \"./ExportDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./ExportDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./ExportDialog.vue?vue&type=style&index=0&id=a69a4592&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a69a4592\"\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'\n\nimport HotkeyDoc from './HotkeyDoc.vue'\nimport ExportDialog from './ExportDialog.vue'\n\nexport default defineComponent({\n name: 'editor-header',\n components: {\n HotkeyDoc,\n ExportDialog,\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\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 const exportDialogVisible = ref(false)\n\n return {\n enterScreening,\n enterScreeningFromStart,\n createSlide,\n deleteSlide,\n redo,\n undo,\n toggleGridLines,\n showGridLines,\n resetSlides,\n hotkeyDrawerVisible,\n exportDialogVisible,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=ecea6ffc&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=ecea6ffc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ecea6ffc\"\n\nexport default script","\n\n\n\n","import mitt, { Emitter } from 'mitt'\n\nexport const enum EmitterEvents {\n UPDATE_TEXT_STATE = 'UPDATE_TEXT_STATE',\n EXEC_TEXT_COMMAND = 'EXEC_TEXT_COMMAND',\n UPDATE_TABLE_SELECTED_CELL = 'UPDATE_TABLE_SELECTED_CELL',\n SCALE_ELEMENT_STATE = 'SCALE_ELEMENT_STATE',\n}\n\nconst emitter: Emitter = mitt()\n\nexport default emitter","// 清除文字选区\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 { PPTElement } from '@/types/slides'\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}","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 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) 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 createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, text)\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 emitter, { EmitterEvents } from '@/utils/emitter'\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 emitter.emit(EmitterEvents.SCALE_ELEMENT_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 emitter.emit(EmitterEvents.SCALE_ELEMENT_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/uniq'\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 interface PPTElementShadow {\n h: number;\n v: number;\n blur: number;\n color: string;\n}\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\nexport interface PPTElementOutline {\n style?: 'dashed' | 'solid';\n width?: number;\n color?: string;\n}\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}\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\nexport interface ImageOrShapeFlip {\n flipH?: boolean;\n flipV?: boolean;\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}\nexport interface ImageElementClip {\n range: [[number, number], [number, number]];\n shape: string;\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\nexport interface ShapeGradient {\n type: 'linear' | 'radial';\n color: [string, string];\n rotate: number;\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}\n\nexport interface PPTLineElement extends Omit {\n type: 'line';\n start: [number, number];\n end: [number, number];\n style: string;\n color: string;\n points: [string, string];\n shadow?: PPTElementShadow;\n broken?: [number, number];\n curve?: [number, number];\n}\n\nexport type ChartType = 'bar' | 'line' | 'pie'\nexport interface ChartData {\n labels: string[];\n series: number[][];\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\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?: string;\n}\nexport interface TableCell {\n id: string;\n colspan: number;\n rowspan: number;\n text: string;\n style?: TableCellStyle;\n}\nexport interface TableTheme {\n color: string;\n rowHeader: boolean;\n rowFooter: boolean;\n colHeader: boolean;\n colFooter: boolean;\n} \nexport interface PPTTableElement extends PPTBaseElement {\n type: 'table';\n outline: PPTElementOutline;\n theme?: TableTheme;\n colWidths: number[];\n data: TableCell[][];\n}\n\nexport type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement\n\nexport interface PPTAnimation {\n elId: string;\n type: string;\n duration: number;\n}\n\nexport interface SlideBackground {\n type: 'solid' | 'image' | 'gradient';\n color?: string;\n image?: string;\n imageSize?: 'cover' | 'contain' | 'repeat' | 'initial';\n gradientType?: 'linear' | 'radial';\n gradientColor?: [string, string];\n gradientRotate?: number;\n}\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\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}","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}","\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}","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 (flipH.value) style = 'rotateX(180deg)'\n else if (flipV.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 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 {\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 \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=1d9b5032&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=1d9b5032&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1d9b5032\"\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 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 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\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=1622838f&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=1622838f&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1622838f\"\n\nexport default script","\n\n\n\n\n","import { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list'\r\nimport { Schema } from 'prosemirror-model'\r\nimport { undo, redo } from 'prosemirror-history'\r\nimport { undoInputRule } from 'prosemirror-inputrules'\r\nimport {\r\n toggleMark,\r\n selectParentNode,\r\n joinUp,\r\n joinDown,\r\n Command,\r\n} from 'prosemirror-commands'\r\n\r\nexport const buildKeymap = (schema: Schema) => {\r\n const keys = {}\r\n const bind = (key: string, cmd: Command) => keys[key] = cmd\r\n\r\n bind('Alt-ArrowUp', joinUp)\r\n bind('Alt-ArrowDown', joinDown)\r\n bind('Ctrl-z', undo)\r\n bind('Ctrl-y', redo)\r\n bind('Backspace', undoInputRule)\r\n bind('Escape', selectParentNode)\r\n bind('Ctrl-b', toggleMark(schema.marks.strong))\r\n bind('Ctrl-i', toggleMark(schema.marks.em))\r\n bind('Ctrl-u', toggleMark(schema.marks.underline))\r\n bind('Ctrl-d', toggleMark(schema.marks.strikethrough))\r\n\r\n bind('Enter', splitListItem(schema.nodes.list_item))\r\n bind('Mod-[', liftListItem(schema.nodes.list_item))\r\n bind('Mod-]', sinkListItem(schema.nodes.list_item))\r\n\r\n return keys\r\n}","import { NodeType, Schema } from 'prosemirror-model'\r\nimport {\r\n inputRules,\r\n wrappingInputRule,\r\n textblockTypeInputRule,\r\n smartQuotes,\r\n emDash,\r\n ellipsis,\r\n} from 'prosemirror-inputrules'\r\n\r\nconst blockQuoteRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*>\\s$/, nodeType)\r\n\r\nconst orderedListRule = (nodeType: NodeType) => (\r\n wrappingInputRule(\r\n /^(\\d+)\\.\\s$/, \r\n nodeType, \r\n match => ({order: +match[1]}),\r\n (match, node) => node.childCount + node.attrs.order === +match[1],\r\n )\r\n)\r\n\r\nconst bulletListRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)\r\n\r\nconst codeBlockRule = (nodeType: NodeType) => textblockTypeInputRule(/^```$/, nodeType)\r\n\r\nexport const buildInputRules = (schema: Schema) => {\r\n const rules = [\r\n ...smartQuotes,\r\n ellipsis,\r\n emDash,\r\n ]\r\n rules.push(blockQuoteRule(schema.nodes.blockquote))\r\n rules.push(orderedListRule(schema.nodes.ordered_list))\r\n rules.push(bulletListRule(schema.nodes.bullet_list))\r\n rules.push(codeBlockRule(schema.nodes.code_block))\r\n\r\n return inputRules({ rules })\r\n}","import { keymap } from 'prosemirror-keymap'\r\nimport { Schema } from 'prosemirror-model'\r\nimport { history } from 'prosemirror-history'\r\nimport { baseKeymap } from 'prosemirror-commands'\r\nimport { dropCursor } from 'prosemirror-dropcursor'\r\nimport { gapCursor } from 'prosemirror-gapcursor'\r\n\r\nimport { buildKeymap } from './keymap'\r\nimport { buildInputRules } from './inputrules'\r\n\r\nexport const buildPlugins = (schema: Schema) => {\r\n return [\r\n buildInputRules(schema),\r\n keymap(buildKeymap(schema)),\r\n keymap(baseKeymap),\r\n dropCursor(),\r\n gapCursor(),\r\n history(),\r\n ]\r\n}","import { nodes } from 'prosemirror-schema-basic'\r\nimport { Node, NodeSpec } from 'prosemirror-model'\r\nimport { orderedList, bulletList, listItem } from 'prosemirror-schema-list'\r\n\r\nconst _orderedList: NodeSpec = {\r\n ...orderedList,\r\n content: 'list_item+',\r\n group: 'block',\r\n}\r\n\r\nconst _bulletList: NodeSpec = {\r\n ...bulletList,\r\n content: 'list_item+',\r\n group: 'block',\r\n}\r\n\r\nconst _listItem: NodeSpec = {\r\n ...listItem,\r\n content: 'paragraph block*',\r\n group: 'block',\r\n}\r\n\r\nconst paragraph: NodeSpec = {\r\n attrs: {\r\n align: {\r\n default: '',\r\n },\r\n },\r\n content: 'inline*',\r\n group: 'block',\r\n parseDOM: [\r\n {\r\n tag: 'p',\r\n getAttrs: dom => {\r\n const { textAlign } = (dom as HTMLElement).style\r\n let align = (dom as HTMLElement).getAttribute('align') || textAlign || ''\r\n align = /(left|right|center|justify)/.test(align) ? align : ''\r\n \r\n return { align }\r\n }\r\n }\r\n ],\r\n toDOM: (node: Node) => {\r\n const { align } = node.attrs\r\n let style = ''\r\n if (align && align !== 'left') style += `text-align: ${align};`\r\n\r\n return ['p', { style }, 0]\r\n },\r\n}\r\n\r\nexport default {\r\n ...nodes,\r\n 'ordered_list': _orderedList,\r\n 'bullet_list': _bulletList,\r\n 'list_item': _listItem,\r\n paragraph,\r\n}\r\n","import { marks } from 'prosemirror-schema-basic'\r\nimport { MarkSpec } from 'prosemirror-model'\r\n\r\nconst subscript: MarkSpec = {\r\n excludes: 'subscript',\r\n parseDOM: [\r\n { tag: 'sub' },\r\n {\r\n style: 'vertical-align',\r\n getAttrs: value => value === 'sub' && null\r\n },\r\n ],\r\n toDOM: () => ['sub', 0],\r\n}\r\n\r\nconst superscript: MarkSpec = {\r\n excludes: 'superscript',\r\n parseDOM: [\r\n { tag: 'sup' },\r\n {\r\n style: 'vertical-align',\r\n getAttrs: value => value === 'super' && null\r\n },\r\n ],\r\n toDOM: () => ['sup', 0],\r\n}\r\n\r\nconst strikethrough: MarkSpec = {\r\n parseDOM: [\r\n { tag: 'strike' },\r\n {\r\n style: 'text-decoration',\r\n getAttrs: value => value === 'line-through' && null\r\n },\r\n {\r\n style: 'text-decoration-line',\r\n getAttrs: value => value === 'line-through' && null\r\n },\r\n ],\r\n toDOM: () => ['span', { style: 'text-decoration-line: line-through' }, 0],\r\n}\r\n\r\nconst underline: MarkSpec = {\r\n parseDOM: [\r\n { tag: 'u' },\r\n {\r\n style: 'text-decoration',\r\n getAttrs: value => value === 'underline' && null\r\n },\r\n {\r\n style: 'text-decoration-line',\r\n getAttrs: value => value === 'underline' && null\r\n },\r\n ],\r\n toDOM: () => ['span', { style: 'text-decoration: underline' }, 0],\r\n}\r\n\r\nconst forecolor: MarkSpec = {\r\n attrs: {\r\n color: {},\r\n },\r\n parseDOM: [\r\n {\r\n style: 'color',\r\n getAttrs: color => color ? { color } : {}\r\n },\r\n ],\r\n toDOM: mark => {\r\n const { color } = mark.attrs\r\n let style = ''\r\n if (color) style += `color: ${color};`\r\n return ['span', { style }, 0]\r\n },\r\n}\r\n\r\nconst backcolor: MarkSpec = {\r\n attrs: {\r\n backcolor: {},\r\n },\r\n inline: true,\r\n group: 'inline',\r\n parseDOM: [\r\n {\r\n tag: 'span[style*=background-color]',\r\n getAttrs: backcolor => backcolor ? { backcolor } : {}\r\n },\r\n ],\r\n toDOM: mark => {\r\n const { backcolor } = mark.attrs\r\n let style = ''\r\n if (backcolor) style += `background-color: ${backcolor};`\r\n return ['span', { style }, 0]\r\n },\r\n}\r\n\r\nconst fontsize: MarkSpec = {\r\n attrs: {\r\n fontsize: {},\r\n },\r\n inline: true,\r\n group: 'inline',\r\n parseDOM: [\r\n {\r\n style: 'font-size',\r\n getAttrs: fontsize => fontsize ? { fontsize } : {}\r\n },\r\n ],\r\n toDOM: mark => {\r\n const { fontsize } = mark.attrs\r\n let style = ''\r\n if (fontsize) style += `font-size: ${fontsize}`\r\n return ['span', { style }, 0]\r\n },\r\n}\r\n\r\nconst fontname: MarkSpec = {\r\n attrs: {\r\n fontname: {},\r\n },\r\n inline: true,\r\n group: 'inline',\r\n parseDOM: [\r\n {\r\n style: 'font-family',\r\n getAttrs: fontname => {\r\n return { fontname: fontname && typeof fontname === 'string' ? fontname.replace(/[\\\"\\']/g, '') : '' }\r\n }\r\n },\r\n ],\r\n toDOM: mark => {\r\n const { fontname } = mark.attrs\r\n let style = ''\r\n if (fontname) style += `font-family: ${fontname}`\r\n return ['span', { style }, 0]\r\n },\r\n}\r\n\r\nexport default {\r\n ...marks,\r\n subscript,\r\n superscript,\r\n strikethrough,\r\n underline,\r\n forecolor,\r\n backcolor,\r\n fontsize,\r\n fontname,\r\n}","import nodes from './nodes'\r\nimport marks from './marks'\r\n\r\nexport const schemaNodes = nodes\r\nexport const schemaMarks = marks\r\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\nconst 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 { Node, NodeType, ResolvedPos } 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 const node = doc.nodeAt(from)\n return node?.marks || []\n}\n\nexport const getAttrValue = (view: EditorView, markType: string, attr: string) => {\n const marks = getMarkAttrs(view)\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 = (view: EditorView, markType: string) => {\n const marks = getMarkAttrs(view)\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\nexport const getTextAttrs = (view: EditorView) => {\n const isBold = isActiveMark(view, 'strong')\n const isEm = isActiveMark(view, 'em')\n const isUnderline = isActiveMark(view, 'underline')\n const isStrikethrough = isActiveMark(view, 'strikethrough')\n const isSuperscript = isActiveMark(view, 'superscript')\n const isSubscript = isActiveMark(view, 'subscript')\n const isCode = isActiveMark(view, 'code')\n const color = getAttrValue(view, 'forecolor', 'color') || '#000'\n const backcolor = getAttrValue(view, 'backcolor', 'backcolor') || '#000'\n const fontsize = getAttrValue(view, 'fontsize', 'fontsize') || '20px'\n const fontname = getAttrValue(view, 'fontname', 'fontname') || '微软雅黑'\n const align = getAttrValueInSelection(view, 'align') || 'left'\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","import { Schema, Node, NodeType } from 'prosemirror-model'\r\nimport { Transaction } from 'prosemirror-state'\r\nimport { EditorView } from 'prosemirror-view'\r\n\r\nexport const setTextAlign = (tr: Transaction, schema: Schema, alignment: string) => {\r\n const { selection, doc } = tr\r\n if (!selection || !doc) return tr\r\n\r\n const { from, to } = selection\r\n const { nodes } = schema\r\n\r\n const blockquote = nodes.blockquote\r\n const listItem = nodes.list_item\r\n const paragraph = nodes.paragraph\r\n\r\n interface Task {\r\n node: Node;\r\n pos: number;\r\n nodeType: NodeType;\r\n }\r\n\r\n const tasks: Task[] = []\r\n alignment = alignment || ''\r\n\r\n const allowedNodeTypes = new Set([blockquote, listItem, paragraph])\r\n\r\n doc.nodesBetween(from, to, (node, pos) => {\r\n const nodeType = node.type\r\n const align = node.attrs.align || ''\r\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\r\n tasks.push({\r\n node,\r\n pos,\r\n nodeType,\r\n })\r\n }\r\n return true\r\n })\r\n\r\n if (!tasks.length) return tr\r\n\r\n tasks.forEach(task => {\r\n const { node, pos, nodeType } = task\r\n let { attrs } = node\r\n if (alignment) attrs = { ...attrs, align: alignment }\r\n else attrs = { ...attrs, align: null }\r\n tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks)\r\n })\r\n\r\n return tr\r\n}\r\n\r\nexport const alignmentCommand = (view: EditorView, alignment: string) => {\r\n const { state } = view\r\n const { schema, selection } = state\r\n const tr = setTextAlign(\r\n state.tr.setSelection(selection),\r\n schema,\r\n alignment,\r\n )\r\n view.dispatch(tr)\r\n}","import { wrapInList, liftListItem } from 'prosemirror-schema-list'\r\nimport { Schema, Node, NodeType } from 'prosemirror-model'\r\nimport { Transaction, EditorState } from 'prosemirror-state'\r\nimport { findParentNode } from '../utils'\r\n\r\nconst isList = (node: Node, schema: Schema) => {\r\n return (\r\n node.type === schema.nodes.bullet_list ||\r\n node.type === schema.nodes.ordered_list\r\n )\r\n}\r\n\r\nexport const toggleList = (listType: NodeType, itemType: NodeType) => {\r\n return (state: EditorState, dispatch: (tr: Transaction) => void) => {\r\n const { schema, selection } = state\r\n const { $from, $to } = selection\r\n const range = $from.blockRange($to)\r\n\r\n if (!range) return false\r\n\r\n const parentList = findParentNode((node: Node) => isList(node, schema))(selection)\r\n\r\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\r\n if (parentList.node.type === listType) {\r\n return liftListItem(itemType)(state, dispatch)\r\n }\r\n\r\n if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {\r\n const { tr } = state\r\n tr.setNodeMarkup(parentList.pos, listType)\r\n\r\n if (dispatch) dispatch(tr)\r\n\r\n return false\r\n }\r\n }\r\n\r\n return wrapInList(listType)(state, dispatch)\r\n }\r\n}\r\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","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { MutationTypes, useStore } from '@/store'\nimport { EditorView } from 'prosemirror-view'\nimport { toggleMark, wrapIn, selectAll } from 'prosemirror-commands'\nimport { PPTTextElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { initProsemirrorEditor } from '@/prosemirror/'\nimport { getTextAttrs } from '@/prosemirror/utils'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport { alignmentCommand } from '@/prosemirror/commands/setTextAlign'\nimport { toggleList } from '@/prosemirror/commands/toggleList'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\n\ninterface CommandPayload {\n command: string;\n value?: string;\n}\n\nexport default defineComponent({\n name: 'editable-element-text',\n components: {\n ElementOutline,\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 isScaling = ref(false)\n const realHeightCache = ref(-1)\n\n const editorViewRef = ref()\n let editorView: EditorView\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 scaleElementStateListener = (state: boolean) => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n isScaling.value = state\n\n if (!state && 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 emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\n onUnmounted(() => {\n emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\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 // 富文本的各种交互事件监听:\n // 聚焦时取消全局快捷键事件\n // 输入文字时同步数据到vuex\n // 点击鼠标和键盘时同步富文本状态到工具栏\n const handleInput = debounce(function() {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { content: editorView.dom.innerHTML },\n })\n addHistorySnapshot()\n }, 300, { trailing: true })\n\n const handleFocus = () => {\n if (props.elementInfo.content === '请输入内容') {\n editorView.dom.innerHTML = ''\n handleInput()\n }\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, true)\n }\n\n const handleBlur = () => {\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, false)\n }\n\n const handleClick = debounce(function() {\n const attr = getTextAttrs(editorView)\n emitter.emit(EmitterEvents.UPDATE_TEXT_STATE, attr)\n }, 30, { trailing: true })\n\n const handleKeydown = () => {\n handleInput()\n handleClick()\n }\n\n // 将富文本内容同步到DOM\n const textContent = computed(() => props.elementInfo.content)\n watch(textContent, () => {\n if (!editorView) return\n if (editorView.hasFocus()) return\n editorView.dom.innerHTML = textContent.value\n })\n\n // 打开/关闭编辑器的编辑模式\n const editable = computed(() => !props.elementInfo.lock)\n watch(editable, () => {\n editorView.setProps({ editable: () => editable.value })\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: () => editable.value,\n })\n })\n onUnmounted(() => {\n editorView && editorView.destroy()\n })\n \n // 执行富文本命令(可以是一个或多个)\n // 部分命令在执行前先判断当前选区是否为空,如果选区为空先进行全选操作\n const execCommand = (payload: CommandPayload | CommandPayload[]) => {\n if (handleElementId.value !== props.elementInfo.id) 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 }\n\n editorView.focus()\n handleInput()\n handleClick()\n }\n\n emitter.on(EmitterEvents.EXEC_TEXT_COMMAND, payload => execCommand(payload))\n onUnmounted(() => {\n emitter.off(EmitterEvents.EXEC_TEXT_COMMAND, payload => execCommand(payload))\n })\n\n return {\n elementRef,\n editorViewRef,\n handleSelectElement,\n shadowStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=ad16610e&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=ad16610e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ad16610e\"\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 } from 'vue'\nimport { PPTShapeElement } 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'\n\nimport GradientDefs from './GradientDefs.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n GradientDefs,\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 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 return {\n handleSelectElement,\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=6ed7d252&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=6ed7d252&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6ed7d252\"\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 { 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 const start = props.elementInfo.start.join(',')\n const end = props.elementInfo.end.join(',')\n if (props.elementInfo.broken) {\n const mid = props.elementInfo.broken.join(',')\n return `M${start} L${mid} L${end}`\n }\n if (props.elementInfo.curve) {\n const mid = props.elementInfo.curve.join(',')\n return `M${start} Q${mid} ${end}`\n }\n return `M${start} L${end}`\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=7d3d40d6&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=7d3d40d6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7d3d40d6\"\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/upperFirst'\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: String,\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 const updateTheme = () => {\n if (!chartRef.value) return\n\n const colors = tinycolor(props.themeColor).analogous(10)\n for (let i = 0; i < 10; i++) {\n const color = colors[i].toRgbString()\n chartRef.value.style.setProperty(`--theme-color-${i + 1}`, color)\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=233b1dc8&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=233b1dc8&lang=scss&scoped=true\"\nimport \"./Chart.vue?vue&type=style&index=1&id=233b1dc8&lang=scss\"\nscript.render = render\nscript.__scopeId = \"data-v-233b1dc8\"\n\nexport default script","\r\nimport { defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\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 return {\r\n handleSelectElement,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=d2dd6e5c&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=d2dd6e5c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-d2dd6e5c\"\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}","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 tinycolor from 'tinycolor2'\nimport { TableTheme } from '@/types/slides'\n\n// 通过表格的主题色计算辅助颜色\n\nexport default (theme: Ref) => {\n const subThemeColor = ref(['', ''])\n watch(() => theme.value, () => {\n if (theme.value) {\n const rgba = tinycolor(theme.value.color).toRgb()\n const subRgba1 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.3 }\n const subRgba2 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.1 }\n subThemeColor.value = [\n `rgba(${[subRgba1.r, subRgba1.g, subRgba1.b, subRgba1.a].join(',')})`,\n `rgba(${[subRgba2.r, subRgba2.g, subRgba2.b, subRgba2.a].join(',')})`,\n ]\n }\n }, { immediate: true })\n\n return {\n subThemeColor,\n }\n}","\n\n\n\n","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\n\nexport default defineComponent({\n name: 'custom-textarea',\n props: {\n modelValue: {\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.modelValue, () => {\n if (isFocus.value) return\n text.value = props.modelValue\n if (textareaRef.value) textareaRef.value.innerHTML = props.modelValue\n }, { immediate: true })\n\n const handleInput = () => {\n if (!textareaRef.value) return\n const text = textareaRef.value.innerHTML\n emit('update:modelValue', 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 => emit('update:modelValue', text))\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=0d17e957&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=0d17e957&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0d17e957\"\n\nexport default script","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport debounce from 'lodash/debounce'\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 } 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 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, () => {\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 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() {\n emit('change', tableCells.value)\n }, 300, { trailing: true })\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 subThemeColor,\n }\n },\n})\n","import { render } from \"./EditableTable.vue?vue&type=template&id=70bdbb7e&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=70bdbb7e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-70bdbb7e\"\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 emitter, { EmitterEvents } from '@/utils/emitter'\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 isScaling = ref(false)\n const realHeightCache = ref(-1)\n\n const scaleElementStateListener = (state: boolean) => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n isScaling.value = state\n\n if (state) editable.value = false\n\n if (!state && 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 emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\n onUnmounted(() => {\n emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\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(() => emitter.emit(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, 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=1ab7e248&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=1ab7e248&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1ab7e248\"\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 },\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: 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=4c19a1fc\"\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=3cb2c22e&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=3cb2c22e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3cb2c22e\"\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: 'initial',\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 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=3c5b7aac&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=3c5b7aac&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3c5b7aac\"\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 { PropType } from 'vue'\nimport { OperateResizeHandler } from '@/types/edit'\n\nexport default {\n name: 'resize-handler',\n props: {\n type: {\n type: String as PropType,\n default: '',\n },\n },\n}\n","import { render } from \"./ResizeHandler.vue?vue&type=template&id=1c2a68d0&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=1c2a68d0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1c2a68d0\"\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=5b0628aa&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=5b0628aa&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5b0628aa\"\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=1f730982\"\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=bfcf602e\"\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","\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\n\r\nexport default defineComponent({\r\n name: 'operate',\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 },\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=558a94fe&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=558a94fe&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-558a94fe\"\n\nexport default script","\nimport { computed, defineComponent, provide, ref, watch, watchEffect } from 'vue'\nimport throttle from 'lodash/throttle'\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'\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 },\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 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 handleClickBlankArea,\n removeEditorAreaFocus,\n currentSlide,\n creatingElement,\n insertElementFromCreateSelection,\n alignmentLines,\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=fb6f9726&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=fb6f9726&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-fb6f9726\"\n\nexport default script","\n\n\n\n","\n\n\n\n","export interface ShapePoolItem {\n viewBox: number;\n path: string;\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 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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { SHAPE_LIST, ShapePoolItem } from '@/configs/shapes'\n\nexport default defineComponent({\n name: 'shape-pool',\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=5aabd717&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=5aabd717&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5aabd717\"\n\nexport default script","\n\n\n\n","export interface LinePoolItem {\n path: string;\n style: string;\n points: [string, string];\n isBroken?: boolean;\n isCurve?: boolean;\n}\n\nexport const LINE_LIST = [\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 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=5087394c&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=5087394c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5087394c\"\n\nexport default script","\n\n\n\n","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'chart-pool',\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=0028f4b9&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=0028f4b9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0028f4b9\"\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 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=576c614c&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=576c614c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-576c614c\"\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 } 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 return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n }\n },\n})\n","import { render } from \"./BaseShapeElement.vue?vue&type=template&id=6fef68fd&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=6fef68fd&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6fef68fd\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\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 const start = props.elementInfo.start.join(',')\n const end = props.elementInfo.end.join(',')\n if (props.elementInfo.broken) {\n const mid = props.elementInfo.broken.join(',')\n return `M${start} L${mid} L${end}`\n }\n if (props.elementInfo.curve) {\n const mid = props.elementInfo.curve.join(',')\n return `M${start} Q${mid} ${end}`\n }\n return `M${start} L${end}`\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=56b0510c&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=56b0510c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-56b0510c\"\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 } 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 subThemeColor,\n }\n },\n})\n","import { render } from \"./StaticTable.vue?vue&type=template&id=01f791ba&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=01f791ba&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-01f791ba\"\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=4f5c0caa\"\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","\nimport { computed, defineComponent } 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'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n Draggable,\n ThumbnailSlide,\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 {\n copySlide,\n pasteSlide,\n createSlide,\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 setThumbnailsFocus,\n slides,\n slideIndex,\n selectedSlidesIndex,\n createSlide,\n handleClickSlideThumbnail,\n contextmenusThumbnails,\n contextmenusThumbnailItem,\n fillDigit,\n handleDragEnd,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=57618e72&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=57618e72&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-57618e72\"\n\nexport default script","\n\n\n\n","export type ToolbarState = 'elAnimation' | 'elStyle' | 'elPosition' | 'slideStyle' | 'slideAnimation' | 'multiPosition'\n\nexport const ToolbarStates = {\n EL_ANIMATION: 'elAnimation',\n EL_STYLE: 'elStyle',\n EL_POSITION: 'elPosition',\n SLIDE_STYLE: 'slideStyle',\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, onUnmounted, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport { TextAttrs } from '@/prosemirror/utils'\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\ninterface CommandPayload {\n command: string;\n value?: string;\n}\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\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 richTextAttrs = ref({\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 })\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 updateRichTextAttrs = (attr: TextAttrs) => richTextAttrs.value = attr\n\n emitter.on(EmitterEvents.UPDATE_TEXT_STATE, attr => updateRichTextAttrs(attr))\n onUnmounted(() => {\n emitter.off(EmitterEvents.UPDATE_TEXT_STATE, attr => updateRichTextAttrs(attr))\n })\n\n // 发射富文本设置命令\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.EXEC_TEXT_COMMAND, { command, value })\n }\n\n // 发射富文本设置命令(批量)\n const emitBatchRichTextCommand = (payload: CommandPayload[]) => {\n emitter.emit(EmitterEvents.EXEC_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=43fccffc&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=43fccffc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-43fccffc\"\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=c129286e&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=c129286e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-c129286e\"\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=c1cc1cba&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=c1cc1cba&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-c1cc1cba\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTShapeElement, ShapeGradient } from '@/types/slides'\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\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\n const fill = ref()\n const gradient = ref()\n const fillType = ref('fill')\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 }, { 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 return {\n fill,\n gradient,\n fillType,\n updateFillType,\n updateFill,\n updateGradient,\n }\n },\n})\n","import { render } from \"./ShapeStylePanel.vue?vue&type=template&id=998a7a02&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=998a7a02&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-998a7a02\"\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 { ChartData } from '@/types/slides'\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue'\n\nconst CELL_WIDTH = 100\nconst CELL_HEIGHT = 32\n\nexport default defineComponent({\n name: 'chart-data-editor',\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\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 // 获取当前图表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 changeSelectRange,\n selectedRange,\n getTableData,\n closeEditor,\n }\n },\n})\n","import { render } from \"./ChartDataEditor.vue?vue&type=template&id=42e69ec4&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=42e69ec4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-42e69ec4\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\nimport { MutationTypes, useStore } from '@/store'\nimport { ChartData, PPTChartElement } from '@/types/slides'\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\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 = (themeColor: string) => {\n const props = { themeColor }\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 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 updateGridColor,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=62789f0d&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=62789f0d&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-62789f0d\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTableElement, TableCell, TableCellStyle, TableTheme } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\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 \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 const selectedCells = ref([])\n\n // 更新当前选中单元格的文本样式状态\n const updateTextAttrState = () => {\n if (!handleElement.value) 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 // 监听并更新当前选中的单元格\n const updateSelectedCells = (cells: string[]) => {\n selectedCells.value = cells\n updateTextAttrState()\n }\n\n emitter.on(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, cells => updateSelectedCells(cells))\n onUnmounted(() => {\n emitter.off(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, cells => updateSelectedCells(cells))\n })\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: '#d14424',\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=2db32cac&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=2db32cac&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2db32cac\"\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/round'\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=15c9ddcc&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=15c9ddcc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-15c9ddcc\"\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 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 if (!animation) return null\n return animationTypes[animation.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) => {\n const prefix = 'animate__'\n const elRef = document.querySelector(`#editable-element-${elId} [class^=editable-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animationType}`\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\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 const animations = (currentSlideAnimations.value as PPTAnimation[]).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 runAnimation(handleElement.value.id, type)\n }\n\n // 添加元素入场动画,并执行一次预览\n const addAnimation = (type: string) => {\n if (handleElementAnimation.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: 1000,\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n runAnimation(handleElement.value.id, type)\n }\n\n return {\n handleElement,\n animationPoolVisible,\n animations,\n animationSequence,\n hoverPreviewAnimation,\n handleElementAnimation,\n addAnimation,\n deleteAnimation,\n handleDragEnd,\n runAnimation,\n }\n },\n})\n","import { render } from \"./ElementAnimationPanel.vue?vue&type=template&id=2a95eecd&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=2a95eecd&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2a95eecd\"\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 } 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-style-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 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 }\n },\n})\n","import { render } from \"./SlideStylePanel.vue?vue&type=template&id=40e749dc&scoped=true\"\nimport script from \"./SlideStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideStylePanel.vue?vue&type=style&index=0&id=40e749dc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-40e749dc\"\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=6e3028f1&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=6e3028f1&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6e3028f1\"\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 SortedElementData {\r\n el: PPTElement;\r\n pos: 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 // 水平均匀排列\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 copyOfActiveElementList.sort((elementA, elementB) => {\r\n const { minX: elAMinX } = getElementRange(elementA)\r\n const { minX: elBMinX } = getElementRange(elementB)\r\n return elAMinX - elBMinX\r\n })\r\n\r\n // 计算元素均匀分布所需要的间隔:\r\n // (所选元素整体范围 - 所有所选元素宽度和) / (所选元素数 - 1)\r\n let totalWidth = 0\r\n for (const element of activeElementList.value) {\r\n const { minX: elMinX, maxX: elMaxX } = getElementRange(element)\r\n totalWidth += (elMaxX - elMinX)\r\n }\r\n const span = ((maxX - minX) - totalWidth) / (activeElementList.value.length - 1)\r\n\r\n // 将所选元素按位置顺序依次计算目标位置\r\n // 注意pos并非元素目标left值,而是目标位置范围最小值(元素旋转后的left值 ≠ 范围最小值)\r\n const sortedElementData: SortedElementData[] = []\r\n for (const element of copyOfActiveElementList) {\r\n if (!sortedElementData.length) {\r\n const { minX: firstElMinX } = getElementRange(element)\r\n sortedElementData.push({ el: element, pos: firstElMinX })\r\n continue\r\n }\r\n \r\n const lastItemElement = sortedElementData[sortedElementData.length - 1].el\r\n const lastItemPos = sortedElementData[sortedElementData.length - 1].pos\r\n const { minX: lastElementMinX, maxX: lastElementMaxX } = getElementRange(lastItemElement)\r\n const lastElementWidth = lastElementMaxX - lastElementMinX\r\n \r\n sortedElementData.push({ el: element, pos: lastItemPos + lastElementWidth + span })\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 copyOfActiveElementList.sort((elementA, elementB) => {\r\n const { minY: elAMinY } = getElementRange(elementA)\r\n const { minY: elBMinY } = getElementRange(elementB)\r\n return elAMinY - elBMinY\r\n })\r\n\r\n let totalHeight = 0\r\n for (const element of activeElementList.value) {\r\n const { minY: elMinY, maxY: elMaxY } = getElementRange(element)\r\n totalHeight += (elMaxY - elMinY)\r\n }\r\n const span = ((maxY - minY) - totalHeight) / (activeElementList.value.length - 1)\r\n\r\n const sortedElementData: SortedElementData[] = []\r\n for (const element of copyOfActiveElementList) {\r\n if (!sortedElementData.length) {\r\n const { minY: firstElMinY } = getElementRange(element)\r\n sortedElementData.push({ el: element, pos: firstElMinY })\r\n continue\r\n }\r\n \r\n const lastItemElement = sortedElementData[sortedElementData.length - 1].el\r\n const lastItemPos = sortedElementData[sortedElementData.length - 1].pos\r\n const { minY: lastElementMinY, maxY: lastElementMaxY } = getElementRange(lastItemElement)\r\n const lastElementHeight = lastElementMaxY - lastElementMinY\r\n \r\n sortedElementData.push({ el: element, pos: lastItemPos + lastElementHeight + span })\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 uniformHorizontalDisplay,\r\n uniformVerticalDisplay,\r\n }\r\n}","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\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 store = useStore()\n const activeElementList = computed(() => store.getters.activeElementList)\n\n const { combineElements, uncombineElements } = useCombineElement()\n const { alignActiveElement } = useAlignActiveElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { uniformHorizontalDisplay, uniformVerticalDisplay } = useUniformDisplayElement()\n\n // 判断当前多选的几个元素是否可以组合\n const canCombine = computed(() => {\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 // 如果所选元素为一组组合元素,则将它对齐到画布;\n // 如果所选元素不是组合元素或不止一组元素(即当前为可组合状态),则将这多个(多组)元素相互对齐。\n const alignElement = (command: ElementAlignCommand) => {\n if (canCombine.value) alignActiveElement(command)\n else alignElementToCanvas(command)\n }\n\n return {\n activeElementList,\n canCombine,\n combineElements,\n uncombineElements,\n uniformHorizontalDisplay,\n uniformVerticalDisplay,\n alignElement,\n }\n },\n})\n","import { render } from \"./MultiPositionPanel.vue?vue&type=template&id=aef45858&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=aef45858&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-aef45858\"\n\nexport default script","\nimport { computed, defineComponent, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { ToolbarState, ToolbarStates } from '@/types/toolbar'\n\nimport ElementStylePanel from './ElementStylePanel/index.vue'\nimport ElementPositionPanel from './ElementPositionPanel.vue'\nimport ElementAnimationPanel from './ElementAnimationPanel.vue'\nimport SlideStylePanel from './SlideStylePanel.vue'\nimport SlideAnimationPanel from './SlideAnimationPanel.vue'\nimport MultiPositionPanel from './MultiPositionPanel.vue'\n\nexport default defineComponent({\n name: 'toolbar',\n setup() {\n const store = useStore()\n const toolbarState = computed(() => store.state.toolbarState)\n\n const elementTabs = [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n const slideTabs = [\n { label: '页面样式', value: ToolbarStates.SLIDE_STYLE },\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\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_STYLE]: SlideStylePanel,\n [ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,\n [ToolbarStates.MULTI_POSITION]: MultiPositionPanel,\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=f790671e&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=f790671e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-f790671e\"\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 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=89372f4a&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=89372f4a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-89372f4a\"\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","\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 return {\n currentElementComponent,\n needWaitAnimation,\n theme,\n }\n },\n})\n","import { render } from \"./ScreenElement.vue?vue&type=template&id=6490813d\"\nimport script from \"./ScreenElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenElement.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 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 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=9174b3bc&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=9174b3bc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9174b3bc\"\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 },\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=61d4949c&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=61d4949c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-61d4949c\"\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 components: {\n WritingBoard,\n },\n setup(props, { emit }) {\n const writingBoardRef = ref()\n const writingBoardColor = ref('#e2534d')\n const writingBoardModel = ref('pen')\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 changePen,\n changeEraser,\n clearCanvas,\n changeColor,\n closeWritingBoard,\n }\n },\n})\n","import { render } from \"./WritingBoardTool.vue?vue&type=template&id=f34025bc&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=f34025bc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-f34025bc\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, onUnmounted, provide, ref } from 'vue'\nimport throttle from 'lodash/throttle'\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 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 elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\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 // 向上/向下播放\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 message.success('已经是第一页了')\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 message.success('已经是最后一页了')\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 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 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=5e85dd68&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=5e85dd68&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5e85dd68\"\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","\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=5490894e&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=5490894e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5490894e\"\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","// 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} 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\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 }\n}","\n\n\n\n","\nimport { defineComponent, ref } from 'vue'\n\nexport default defineComponent({\n name: 'file-input',\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=bf80565c&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=bf80565c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-bf80565c\"\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 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=e9a0ac98&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=e9a0ac98&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-e9a0ac98\"\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 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=ecf7d10e&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=ecf7d10e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ecf7d10e\"\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 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=52d10460&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=52d10460&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-52d10460\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport throttle from 'lodash/throttle'\nimport clamp from 'lodash/clamp'\n\nexport default defineComponent({\n name: 'saturation',\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=a98797da&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=a98797da&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a98797da\"\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 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=0311fdee&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=0311fdee&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0311fdee\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport debounce from 'lodash/debounce'\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 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=4adab90a&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=4adab90a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4adab90a\"\n\nexport default script","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 '@/assets/styles/prosemirror.scss'\nimport '@/assets/styles/global.scss'\nimport '@/assets/styles/antd.scss'\nimport '@/assets/styles/font.scss'\nimport 'animate.css'\n\n// 自定义插件\nimport Contextmenu from './plugins/contextmenu'\nimport ClickOutside from './plugins/clickOutside'\nimport IconPark from './plugins/iconPark'\n\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'\n\n// antd 组件\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.directive('contextmenu', Contextmenu)\napp.directive('click-outside', ClickOutside)\napp.use(IconPark)\n\napp.component('FileInput', FileInput)\napp.component('SvgWrapper', SvgWrapper)\napp.component('CheckboxButton', CheckboxButton)\napp.component('CheckboxButtonGroup', CheckboxButtonGroup)\napp.component('ColorPicker', ColorPicker)\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(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!./index.vue?vue&type=style&index=0&id=6ed7d252&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!./ExportDialog.vue?vue&type=style&index=0&id=a69a4592&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=d2dd6e5c&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=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!./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!./FileInput.vue?vue&type=style&index=0&id=bf80565c&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!./ChartDataEditor.vue?vue&type=style&index=0&id=42e69ec4&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=0028f4b9&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=ad16610e&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\"","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=9174b3bc&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!./WritingBoard.vue?vue&type=style&index=0&id=61d4949c&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file diff --git a/js/app.d87f5fba.js b/js/app.d87f5fba.js new file mode 100644 index 00000000..06442c51 --- /dev/null +++ b/js/app.d87f5fba.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var o,r,l=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"}}],S={themeColor:"#5b9bd5",fontColor:"#333",fontName:"Microsoft Yahei",backgroundColor:"#fff"},C={activeElementIdList:[],handleElementId:"",activeGroupElementId:"",canvasPercentage:90,canvasScale:1,thumbnailsFocus:!1,editorAreaFocus:!1,disableHotkeys:!1,showGridLines:!1,creatingElement:null,availableFonts:[],toolbarState:"slideStyle",viewportRatio:.5625,theme:S,slides:I,slideIndex:0,selectedSlidesIndex:[],snapshotCursor:-1,snapshotLength:0,ctrlKeyState:!1,shiftKeyState:!1,screening:!1,clipingImageElementId:""},N=(n("d81d"),n("4de4"),n("caad"),n("2532"),n("7db0"),{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)}))},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&&(a.push(c[0]),l--),l>=2&&A.snapshots.update(c[l-2],{index:n.slideIndex}),t.next=15,A.snapshots.bulkDelete(a);case 15:o(y.SET_SNAPSHOT_CURSOR,l-1),o(y.SET_SNAPSHOT_LENGTH,l);case 17:case"end":return t.stop()}}),t)})))()})),Object(T["a"])(L,E.UN_DO,(function(e){return Object(x["a"])(regeneratorRuntime.mark((function t(){var n,o,c,a,r,l,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,A.snapshots.orderBy("id").toArray();case 6:a=t.sent,r=a[c],l=r.index,i=r.slides,u=l>i.length-1?i.length-1:l,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(T["a"])(L,E.RE_DO,(function(e){return Object(x["a"])(regeneratorRuntime.mark((function t(){var n,o,c,a,r,l,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,A.snapshots.orderBy("id").toArray();case 6:a=t.sent,r=a[c],l=r.index,i=r.slides,u=l>i.length-1?i.length-1:l,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)})))()})),L),R=n("2909"),F=n("5530"),H=(n("a434"),n("99af"),n("c740"),n("3eea")),z=n.n(H),U=[{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"}],G=[{label:"仓耳小丸子",value:"仓耳小丸子"},{label:"优设标题黑",value:"优设标题黑"},{label:"峰广明锐体",value:"峰广明锐体"},{label:"摄图摩登小方体",value:"摄图摩登小方体"},{label:"站酷快乐体",value:"站酷快乐体"},{label:"字制区喜脉体",value:"字制区喜脉体"},{label:"素材集市康康体",value:"素材集市康康体"},{label:"联盟起艺卢帅正锐黑体",value:"联盟起艺卢帅正锐黑体"},{label:"素材集市酷方体",value:"素材集市酷方体"},{label:"途牛类圆体",value:"途牛类圆体"},{label:"锐字真言体",value:"锐字真言体"},{label:"阿里汉仪智能黑体",value:"阿里汉仪智能黑体"}],q=(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,a="a",r=document.createElement("canvas"),l=r.getContext("2d");if(!l)return!1;r.width=o,r.height=c,l.textAlign="center",l.fillStyle="black",l.textBaseline="middle";var i=function(e){l.clearRect(0,0,o,c),l.font="".concat(n,"px ").concat(e,", ").concat(t),l.fillText(a,o/2,c/2);var r=l.getImageData(0,0,o,c).data;return[].slice.call(r).filter((function(e){return 0!==e}))};return i(t).join("")!==i(e).join("")}),X=(w={},Object(T["a"])(w,y.SET_ACTIVE_ELEMENT_ID_LIST,(function(e,t){1===t.length?e.handleElementId=t[0]:e.handleElementId="",e.activeElementIdList=t})),Object(T["a"])(w,y.SET_HANDLE_ELEMENT_ID,(function(e,t){e.handleElementId=t})),Object(T["a"])(w,y.SET_ACTIVE_GROUP_ELEMENT_ID,(function(e,t){e.activeGroupElementId=t})),Object(T["a"])(w,y.SET_CANVAS_PERCENTAGE,(function(e,t){e.canvasPercentage=t})),Object(T["a"])(w,y.SET_CANVAS_SCALE,(function(e,t){e.canvasScale=t})),Object(T["a"])(w,y.SET_THUMBNAILS_FOCUS,(function(e,t){e.thumbnailsFocus=t})),Object(T["a"])(w,y.SET_EDITORAREA_FOCUS,(function(e,t){e.editorAreaFocus=t})),Object(T["a"])(w,y.SET_DISABLE_HOTKEYS_STATE,(function(e,t){e.disableHotkeys=t})),Object(T["a"])(w,y.SET_GRID_LINES_STATE,(function(e,t){e.showGridLines=t})),Object(T["a"])(w,y.SET_CREATING_ELEMENT,(function(e,t){e.creatingElement=t})),Object(T["a"])(w,y.SET_AVAILABLE_FONTS,(function(e){e.availableFonts=U.filter((function(e){return q(e.value)}))})),Object(T["a"])(w,y.SET_TOOLBAR_STATE,(function(e,t){e.toolbarState=t})),Object(T["a"])(w,y.SET_CLIPING_IMAGE_ELEMENT_ID,(function(e,t){e.clipingImageElementId=t})),Object(T["a"])(w,y.SET_THEME,(function(e,t){e.theme=Object(F["a"])(Object(F["a"])({},e.theme),t)})),Object(T["a"])(w,y.SET_VIEWPORT_RATIO,(function(e,t){e.viewportRatio=t})),Object(T["a"])(w,y.SET_SLIDES,(function(e,t){e.slides=t})),Object(T["a"])(w,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(R["a"])(o))),e.slideIndex=c})),Object(T["a"])(w,y.UPDATE_SLIDE,(function(e,t){var n=e.slideIndex;e.slides[n]=Object(F["a"])(Object(F["a"])({},e.slides[n]),t)})),Object(T["a"])(w,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)},a=0;al&&(r=l),e.slideIndex=r,e.slides=e.slides.filter((function(e){return!n.includes(e.id)}))})),Object(T["a"])(w,y.UPDATE_SLIDE_INDEX,(function(e,t){e.slideIndex=t})),Object(T["a"])(w,y.UPDATE_SELECTED_SLIDES_INDEX,(function(e,t){e.selectedSlidesIndex=t})),Object(T["a"])(w,y.ADD_ELEMENT,(function(e,t){var n=Array.isArray(t)?t:[t],o=e.slides[e.slideIndex].elements,c=[].concat(Object(R["a"])(o),Object(R["a"])(n));e.slides[e.slideIndex].elements=c})),Object(T["a"])(w,y.UPDATE_ELEMENT,(function(e,t){var n=t.id,o=t.props,c="string"===typeof n?[n]:n,a=e.slideIndex,r=e.slides[a],l=r.elements.map((function(e){return c.includes(e.id)?Object(F["a"])(Object(F["a"])({},e),o):e}));e.slides[a].elements=l})),Object(T["a"])(w,y.REMOVE_ELEMENT_PROPS,(function(e,t){var n=t.id,o=t.propName,c="string"===typeof o?[o]:o,a=e.slideIndex,r=e.slides[a],l=r.elements.map((function(e){return e.id===n?z()(e,c):e}));e.slides[a].elements=l})),Object(T["a"])(w,y.SET_SNAPSHOT_CURSOR,(function(e,t){e.snapshotCursor=t})),Object(T["a"])(w,y.SET_SNAPSHOT_LENGTH,(function(e,t){e.snapshotLength=t})),Object(T["a"])(w,y.SET_CTRL_KEY_STATE,(function(e,t){e.ctrlKeyState=t})),Object(T["a"])(w,y.SET_SHIFT_KEY_STATE,(function(e,t){e.shiftKeyState=t})),Object(T["a"])(w,y.SET_SCREENING,(function(e,t){e.screening=t})),w),W=Symbol(),Y=Object(k["a"])({state:C,getters:N,mutations:X,actions:P}),Z=function(){return Object(k["b"])(W)},J=Object(j["withScopeId"])("data-v-55178b6a");Object(j["pushScopeId"])("data-v-55178b6a");var K={class:"pptist-editor"},Q={class:"layout-content"},$={class:"layout-content-center"};Object(j["popScopeId"])();var ee,te,ne,oe,ce,ae,re=J((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("EditorHeader"),l=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["createBlock"])("div",K,[Object(j["createVNode"])(r,{class:"layout-header"}),Object(j["createVNode"])("div",Q,[Object(j["createVNode"])(l,{class:"layout-content-left"}),Object(j["createVNode"])("div",$,[Object(j["createVNode"])(i,{class:"center-top"}),Object(j["createVNode"])(u,{class:"center-body",style:{height:"calc(100% - ".concat(e.remarkHeight+40,"px)")}},null,8,["style"]),Object(j["createVNode"])(d,{class:"center-bottom",height:e.remarkHeight,"onUpdate:height":t[1]||(t[1]=function(t){return e.remarkHeight=t}),style:{height:"".concat(e.remarkHeight,"px")}},null,8,["height","style"])]),Object(j["createVNode"])(s,{class:"layout-content-right"})])])}));(function(e){e["UP"]="up",e["DOWN"]="down",e["TOP"]="top",e["BOTTOM"]="bottom"})(ee||(ee={})),function(e){e["TOP"]="top",e["BOTTOM"]="bottom",e["LEFT"]="left",e["RIGHT"]="right",e["VERTICAL"]="vertical",e["HORIZONTAL"]="horizontal",e["CENTER"]="center"}(te||(te={})),function(e){e["T"]="top",e["B"]="bottom",e["L"]="left",e["R"]="right"}(ne||(ne={})),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"}(oe||(oe={})),function(e){e["START"]="start",e["END"]="end",e["MID"]="mid"}(ce||(ce={})),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"}(ae||(ae={}));var le=[{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:"Ctrl + B"},{label:"斜体",value:"Ctrl + I"},{label:"下划线",value:"Ctrl + U"},{label:"删除线",value:"Ctrl + D"}]}],ie=(n("3b18"),n("f64c")),ue=(n("a630"),n("3ca3"),n("4106")),de=n.n(ue),se=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6,t="_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",n=t.length,o="",c=0;cwe?(n=we,o=n*a):o>we*c.value&&(o=we*c.value,n=o/a),l({type:"image",id:se(),src:e,width:n,height:o,left:(we-n)/2,top:(we*c.value-o)/2,fixedRatio:!0,rotate:0})}))},u=function(e){l({type:"chart",id:se(),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]]}})},d=function(e,a){var r={fontname:o.value,color:n.value},i=new Array(a).fill({id:se(),colspan:1,rowspan:1,text:"",style:r}),u=new Array(e).fill(i),d=100,s=36,f=new Array(a).fill(1/a),p=a*d,b=e*s;l({type:"table",id:se(),width:p,height:b,colWidths:f,data:u,left:(we-p)/2,top:(we*c.value-b)/2,outline:{width:2,style:"solid",color:"#eeece1"},theme:{color:t.value,rowHeader:!0,rowFooter:!1,colHeader:!1,colFooter:!1}})},s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"请输入内容",c=e.left,a=e.top,r=e.width,i=e.height;l({type:"text",id:se(),left:c,top:a,width:r,height:i,content:t,rotate:0,defaultFontName:o.value,defaultColor:n.value})},f=function(e,n){var o=e.left,c=e.top,a=e.width,r=e.height;l({type:"shape",id:se(),left:o,top:c,width:a,height:r,viewBox:n.viewBox,path:n.path,fill:t.value,fixedRatio:!1,rotate:0})},p=function(e,n){var o=e.left,c=e.top,a=e.start,r=e.end,i={type:"line",id:se(),left:o,top:c,start:a,end:r,points:n.points,color:t.value,style:n.style,width:2};n.isBroken&&(i.broken=[(a[0]+r[0])/2,(a[1]+r[1])/2]),n.isCurve&&(i.curve=[(a[0]+r[0])/2,(a[1]+r[1])/2]),l(i)};return{createImageElement:i,createChartElement:u,createTableElement:d,createTextElement:s,createShapeElement:f,createLineElement:p}},_e=function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=Te(),o=n.addHistorySnapshot,c=Ve(),a=c.createTextElement,r=function(n){var c,a={},r={},l=Object(ke["a"])(n);try{for(l.s();!(c=l.n()).done;){var i=c.value,u=i.groupId;u&&!a[u]&&(a[u]=se()),r[i.id]=se()}}catch(m){l.e(m)}finally{l.f()}var d,s=t.value.elements.map((function(e){return e.id})),f=Object(ke["a"])(n);try{for(f.s();!(d=f.n()).done;){var p=d.value,b=s.includes(p.id);p.id=r[p.id],b&&(p.left=p.left+10,p.top=p.top+10),p.groupId&&(p.groupId=a[p.groupId])}}catch(m){f.e(m)}finally{f.f()}e.commit(y.ADD_ELEMENT,n),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,Object.values(r)),o()},l=function(t){var n=t.map((function(e){return Object(F["a"])(Object(F["a"])({},e),{},{id:se(8)})}));e.commit(y.ADD_SLIDE,n),o()},i=function(e){a({left:0,top:0,width:600,height:50},e)},u=function(e,t){var n,o=(null===t||void 0===t?void 0:t.onlySlide)||!1,c=(null===t||void 0===t?void 0:t.onlyElements)||!1;try{n=JSON.parse(ye(e))}catch(s){n=e}if("object"===Object(Ee["a"])(n)){var a=n,u=a.type,d=a.data;"elements"!==u||o?"slides"!==u||c||l(d):r(d)}else c||o||i(n)};return{pasteTextClipboardData:u}},Be=function(){var e=Z(),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})),a=Object(j["computed"])((function(){return[].concat(Object(R["a"])(e.state.selectedSlidesIndex),[t.value])})),r=Object(j["computed"])((function(){return o.value.filter((function(e,t){return a.value.includes(t)}))})),l=Object(j["computed"])((function(){return r.value.map((function(e){return e.id}))})),i=_e(),u=i.pasteTextClipboardData,d=Te(),s=d.addHistorySnapshot,f=function(){var t={id:se(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])},p=function(n){n===ae.UP&&t.value>0?e.commit(y.UPDATE_SLIDE_INDEX,t.value-1):n===ae.DOWN&&t.value0&&void 0!==arguments[0]?arguments[0]:l.value;o.value.length===t.length?f():e.commit(y.DELETE_SLIDE,t),e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,[]),s()},g=function(){var e=Object(R["a"])(l.value);b(),h(e)},E=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:f,updateSlideIndex:p,copySlide:b,pasteSlide:m,createSlide:v,copyAndPasteSlide:O,deleteSlide:h,cutSlide:g,selectAllSlide:E}},De=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=Te(),c=o.addHistorySnapshot,a=function(){var o,a=JSON.parse(JSON.stringify(n.value.elements)),r=Object(ke["a"])(a);try{for(r.s();!(o=r.n()).done;){var l=o.value;t.value.includes(l.id)&&(l.lock=!0)}}catch(i){r.e(i)}finally{r.f()}e.commit(y.UPDATE_SLIDE,{elements:a}),e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),c()},r=function(t){var o=JSON.parse(JSON.stringify(n.value.elements));if(t.groupId){var a,r=Object(ke["a"])(o);try{for(r.s();!(a=r.n()).done;){var l=a.value;l.groupId===t.groupId&&(l.lock=!1)}}catch(s){r.e(s)}finally{r.f()}return o}var i,u=Object(ke["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:a,unlockElement:r}},Me=function(){var e=Z(),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=Te(),a=c.addHistorySnapshot,r=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}),a()}},l=function(){o.value.elements.length&&(e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),e.commit(y.UPDATE_SLIDE,{elements:[]}),a())};return{deleteElement:r,deleteAllElements:l}},Ae=function(){var e=Z(),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})),a=Te(),r=a.addHistorySnapshot,l=function(){var c;if(n.value.length){var a,l=JSON.parse(JSON.stringify(o.value.elements)),i=se(),u=[],d=Object(ke["a"])(l);try{for(d.s();!(a=d.n()).done;){var s=a.value;t.value.includes(s.id)&&(s.groupId=i,u.push(s))}}catch(m){d.e(m)}finally{d.f()}var f=l.findIndex((function(e){return e.id===u[u.length-1].id})),p=u.map((function(e){return e.id}));l=l.filter((function(e){return!p.includes(e.id)}));var b=f-u.length+1;(c=l).splice.apply(c,[b,0].concat(u)),e.commit(y.UPDATE_SLIDE,{elements:l}),r()}},i=function(){if(n.value.length){var a=n.value.some((function(e){return e.groupId}));if(a){var l,i=JSON.parse(JSON.stringify(o.value.elements)),u=Object(ke["a"])(i);try{for(u.s();!(l=u.n()).done;){var d=l.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),r()}}};return{combineElements:l,uncombineElements:i}},Pe=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.activeElementList})),o=_e(),c=o.pasteTextClipboardData,a=Me(),r=a.deleteElement,l=function(){if(t.value.length){var o=ge(JSON.stringify({type:"elements",data:n.value}));me(o).then((function(){e.commit(y.SET_EDITORAREA_FOCUS,!0)}))}},i=function(){l(),r()},u=function(){ve().then((function(e){c(e)})).catch((function(e){return ie["a"].warning(e)}))},d=function(){l(),u()};return{copyElement:l,cutElement:i,pasteElement:u,quickCopyElement:d}},Re=function(){var e=Z(),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}},Fe=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.activeElementIdList})),n=Object(j["computed"])((function(){return e.getters.currentSlide})),o=Te(),c=o.addHistorySnapshot,a=function(o){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=n.value.elements.map((function(e){if(t.value.includes(e.id)){var n=e.left,c=e.top;switch(o){case ae.LEFT:n-=a;break;case ae.RIGHT:n+=a;break;case ae.UP:c-=a;break;case ae.DOWN:c+=a;break;default:break}return Object(F["a"])(Object(F["a"])({},e),{},{left:n,top:c})}return e}));e.commit(y.UPDATE_SLIDE,{elements:r}),c()};return{moveElement:a}},He=function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.currentSlide})),n=Te(),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}))}},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})),a=c(e,o),r=a.minLevel,l=a.maxLevel;if(l===e.length-1)return;var i=n[l+1],u=n.splice(r,o.length);if(i.groupId){var d=n.filter((function(e){return e.groupId===i.groupId}));n.splice.apply(n,[r+d.length,0].concat(Object(R["a"])(u)))}else n.splice.apply(n,[r+1,0].concat(Object(R["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 b=n.filter((function(e){return e.groupId===f.groupId}));n.splice(s+b.length,0,p)}else n.splice(s+1,0,p)}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})),a=c(e,o),r=a.minLevel;if(0===r)return;var l=n[r-1],i=n.splice(r,o.length);if(l.groupId){var u=n.filter((function(e){return e.groupId===l.groupId}));n.splice.apply(n,[r-u.length,0].concat(Object(R["a"])(i)))}else n.splice.apply(n,[r-1,0].concat(Object(R["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},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})),a=c(e,o),r=a.minLevel,l=a.maxLevel;if(l===e.length-1)return null;var i=n.splice(r,o.length);n.push.apply(n,Object(R["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})),a=c(e,o),r=a.minLevel;if(0===r)return;var l=n.splice(r,o.length);n.unshift.apply(n,Object(R["a"])(l))}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===ee.UP?u=a(t.value.elements,n):c===ee.DOWN?u=r(t.value.elements,n):c===ee.TOP?u=l(t.value.elements,n):c===ee.BOTTOM&&(u=i(t.value.elements,n)),u&&(e.commit(y.UPDATE_SLIDE,{elements:u}),o())};return{orderElement:u}},ze=function(){var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen&&e.webkitRequestFullScreen()},Ue=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},Ge=function(){return document.mozFullScreen||document.webkitIsFullScreen||document.webkitFullScreen},qe=function(){var e=Z(),t=function(){ze(),e.commit(y.SET_SCREENING,!0)},n=function(){e.commit(y.UPDATE_SLIDE_INDEX,0),t()},o=function(){e.commit(y.SET_SCREENING,!1),Ge()&&Ue()};return{enterScreening:t,enterScreeningFromStart:n,exitScreening:o}},Xe=function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.canvasPercentage})),n=function(n){var o=t.value,c=5,a=120,r=60;"+"===n&&o<=a&&(o+=c),"-"===n&&o>=r&&(o-=c),e.commit(y.SET_CANVAS_PERCENTAGE,o)},o=function(t){e.commit(y.SET_CANVAS_PERCENTAGE,t)};return{scaleCanvas:n,setCanvasPercentage:o}},We=function(){var e=Z(),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})),a=Object(j["computed"])((function(){return e.getters.handleElement})),r=Object(j["computed"])((function(){return e.getters.currentSlide})),l=Object(j["computed"])((function(){return e.state.editorAreaFocus})),i=Object(j["computed"])((function(){return e.state.thumbnailsFocus})),u=Be(),d=u.updateSlideIndex,s=u.copySlide,f=u.createSlide,p=u.deleteSlide,b=u.cutSlide,m=u.copyAndPasteSlide,v=u.selectAllSlide,O=Ae(),h=O.combineElements,g=O.uncombineElements,E=Me(),k=E.deleteElement,I=De(),S=I.lockElement,C=Pe(),N=C.copyElement,T=C.cutElement,x=C.quickCopyElement,L=Re(),w=L.selectAllElement,V=Fe(),_=V.moveElement,B=He(),D=B.orderElement,M=Te(),A=M.redo,P=M.undo,R=qe(),F=R.enterScreening,H=Xe(),z=H.scaleCanvas,U=H.setCanvasPercentage,G=function(){c.value.length?N():i.value&&s()},q=function(){c.value.length?T():i.value&&b()},X=function(){c.value.length?x():i.value&&m()},W=function(){l.value&&w(),i.value&&v()},Y=function(){l.value&&S()},J=function(){l.value&&h()},K=function(){l.value&&g()},Q=function(){c.value.length?k():i.value&&p()},$=function(e){c.value.length?_(e):e!==ae.UP&&e!==ae.DOWN||d(e)},te=function(e){a.value&&D(a.value,e)},ne=function(){i.value&&f()},oe=function(){if(r.value.elements.length)if(a.value){var t=r.value.elements.findIndex((function(e){return e.id===a.value.id})),n=t>=r.value.elements.length-1?0:t+1,o=r.value.elements[n].id;e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[o])}else{var c=r.value.elements[0];e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[c.id])}},ce=function(c){var a=c.ctrlKey,r=c.shiftKey,u=c.altKey,d=c.metaKey,s=a||d,f=c.key.toUpperCase();if(s&&!t.value&&e.commit(y.SET_CTRL_KEY_STATE,!0),r&&!n.value&&e.commit(y.SET_SHIFT_KEY_STATE,!0),s&&f===ae.F&&(c.preventDefault(),F(),e.commit(y.SET_CTRL_KEY_STATE,!1)),l.value||i.value){if(s&&f===ae.C){if(o.value)return;c.preventDefault(),G()}if(s&&f===ae.X){if(o.value)return;c.preventDefault(),q()}if(s&&f===ae.D){if(o.value)return;c.preventDefault(),X()}if(s&&f===ae.Z){if(o.value)return;c.preventDefault(),P()}if(s&&f===ae.Y){if(o.value)return;c.preventDefault(),A()}if(s&&f===ae.A){if(o.value)return;c.preventDefault(),W()}if(s&&f===ae.L){if(o.value)return;c.preventDefault(),Y()}if(!r&&s&&f===ae.G){if(o.value)return;c.preventDefault(),J()}if(r&&s&&f===ae.G){if(o.value)return;c.preventDefault(),K()}if(u&&f===ae.F){if(o.value)return;c.preventDefault(),te(ee.TOP)}if(u&&f===ae.B){if(o.value)return;c.preventDefault(),te(ee.BOTTOM)}if(f===ae.DELETE||f===ae.BACKSPACE){if(o.value)return;c.preventDefault(),Q()}if(f===ae.UP){if(o.value)return;c.preventDefault(),$(ae.UP)}if(f===ae.DOWN){if(o.value)return;c.preventDefault(),$(ae.DOWN)}if(f===ae.LEFT){if(o.value)return;c.preventDefault(),$(ae.LEFT)}if(f===ae.RIGHT){if(o.value)return;c.preventDefault(),$(ae.RIGHT)}if(f===ae.ENTER){if(o.value)return;c.preventDefault(),ne()}if(f===ae.MINUS){if(o.value)return;c.preventDefault(),z("-")}if(f===ae.EQUAL){if(o.value)return;c.preventDefault(),z("+")}if(f===ae.DIGIT_0){if(o.value)return;c.preventDefault(),U(90)}if(f===ae.TAB){if(o.value)return;c.preventDefault(),oe()}}},re=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",ce),document.addEventListener("keyup",re),window.addEventListener("blur",re)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",ce),document.removeEventListener("keyup",re),window.removeEventListener("blur",re)}))},Ye=function(){var e=Z(),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=_e(),a=c.pasteTextClipboardData,r=Ve(),l=r.createImageElement,i=function(e){Le(e).then((function(e){return l(e)}))},u=function(e){if((t.value||n.value)&&!o.value&&e.clipboardData){var c=e.clipboardData.items,r=c[0];if(r){var l,u=Object(ke["a"])(c);try{for(u.s();!(l=u.n()).done;){var d=l.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"===r.kind&&"text/plain"===r.type&&r.getAsString((function(e){return a(e)}))}}};Object(j["onMounted"])((function(){document.addEventListener("paste",u)})),Object(j["onUnmounted"])((function(){document.removeEventListener("paste",u)}))},Ze=Object(j["withScopeId"])("data-v-ecea6ffc");Object(j["pushScopeId"])("data-v-ecea6ffc");var Je={class:"editor-header"},Ke={class:"left"},Qe={class:"menu-item"},$e=Object(j["createTextVNode"])(),et=Object(j["createVNode"])("span",{class:"text"},"编辑",-1),tt=Object(j["createTextVNode"])("撤销"),nt=Object(j["createTextVNode"])("重做"),ot=Object(j["createTextVNode"])("添加页面"),ct=Object(j["createTextVNode"])("删除页面"),at=Object(j["createTextVNode"])("重置幻灯片"),rt=Object(j["createTextVNode"])("导出 JSON"),lt={class:"menu-item"},it=Object(j["createTextVNode"])(),ut=Object(j["createVNode"])("span",{class:"text"},"演示",-1),dt=Object(j["createTextVNode"])("从头开始"),st=Object(j["createTextVNode"])("从当前页开始"),ft={class:"menu-item"},pt=Object(j["createTextVNode"])(),bt=Object(j["createVNode"])("span",{class:"text"},"帮助",-1),mt=Object(j["createTextVNode"])("快捷键"),vt={class:"right"},Ot={href:"https://github.com/pipipi-pikachu/PPTist",target:"_blank"},ht={class:"menu-item"};Object(j["popScopeId"])();var jt=Ze((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconEdit"),l=Object(j["resolveComponent"])("MenuItem"),i=Object(j["resolveComponent"])("Menu"),u=Object(j["resolveComponent"])("Dropdown"),d=Object(j["resolveComponent"])("IconPpt"),s=Object(j["resolveComponent"])("IconHelpcenter"),f=Object(j["resolveComponent"])("Tooltip"),p=Object(j["resolveComponent"])("IconGithub"),b=Object(j["resolveComponent"])("HotkeyDoc"),m=Object(j["resolveComponent"])("Drawer"),v=Object(j["resolveComponent"])("ExportDialog"),O=Object(j["resolveComponent"])("Modal");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Je,[Object(j["createVNode"])("div",Ke,[Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Ze((function(){return[Object(j["createVNode"])(i,null,{default:Ze((function(){return[Object(j["createVNode"])(l,{onClick:t[1]||(t[1]=function(t){return e.undo()})},{default:Ze((function(){return[tt]})),_:1}),Object(j["createVNode"])(l,{onClick:t[2]||(t[2]=function(t){return e.redo()})},{default:Ze((function(){return[nt]})),_:1}),Object(j["createVNode"])(l,{onClick:t[3]||(t[3]=function(t){return e.createSlide()})},{default:Ze((function(){return[ot]})),_:1}),Object(j["createVNode"])(l,{onClick:t[4]||(t[4]=function(t){return e.deleteSlide()})},{default:Ze((function(){return[ct]})),_:1}),Object(j["createVNode"])(l,{onClick:t[5]||(t[5]=function(t){return e.toggleGridLines()})},{default:Ze((function(){return[Object(j["createTextVNode"])(Object(j["toDisplayString"])(e.showGridLines?"关闭网格线":"打开网格线"),1)]})),_:1}),Object(j["createVNode"])(l,{onClick:t[6]||(t[6]=function(t){return e.resetSlides()})},{default:Ze((function(){return[at]})),_:1}),Object(j["createVNode"])(l,{onClick:t[7]||(t[7]=function(t){return e.exportDialogVisible=!0})},{default:Ze((function(){return[rt]})),_:1})]})),_:1})]})),default:Ze((function(){return[Object(j["createVNode"])("div",Qe,[Object(j["createVNode"])(r),$e,et])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Ze((function(){return[Object(j["createVNode"])(i,null,{default:Ze((function(){return[Object(j["createVNode"])(l,{onClick:t[8]||(t[8]=function(t){return e.enterScreeningFromStart()})},{default:Ze((function(){return[dt]})),_:1}),Object(j["createVNode"])(l,{onClick:t[9]||(t[9]=function(t){return e.enterScreening()})},{default:Ze((function(){return[st]})),_:1})]})),_:1})]})),default:Ze((function(){return[Object(j["createVNode"])("div",lt,[Object(j["createVNode"])(d),it,ut])]})),_:1}),Object(j["createVNode"])(u,{trigger:["click"]},{overlay:Ze((function(){return[Object(j["createVNode"])(i,null,{default:Ze((function(){return[Object(j["createVNode"])(l,{onClick:t[10]||(t[10]=function(t){return e.hotkeyDrawerVisible=!0})},{default:Ze((function(){return[mt]})),_:1})]})),_:1})]})),default:Ze((function(){return[Object(j["createVNode"])("div",ft,[Object(j["createVNode"])(s),pt,bt])]})),_:1})]),Object(j["createVNode"])("div",vt,[Object(j["createVNode"])(f,{mouseLeaveDelay:0,title:"幻灯片放映"},{default:Ze((function(){return[Object(j["createVNode"])("div",{class:"menu-item",onClick:t[11]||(t[11]=function(t){return e.enterScreening()})},[Object(j["createVNode"])(d,{size:"18",fill:"#666",style:{"margin-top":"2px"}})])]})),_:1}),Object(j["createVNode"])("a",Ot,[Object(j["createVNode"])("div",ht,[Object(j["createVNode"])(p,{size:"18",fill:"#666"})])])]),Object(j["createVNode"])(m,{width:"320",placement:"right",visible:e.hotkeyDrawerVisible,onClose:t[12]||(t[12]=function(t){return e.hotkeyDrawerVisible=!1})},{default:Ze((function(){return[Object(j["createVNode"])(b)]})),_:1},8,["visible"]),Object(j["createVNode"])(O,{visible:e.exportDialogVisible,"onUpdate:visible":t[14]||(t[14]=function(t){return e.exportDialogVisible=t}),footer:null,centered:"",closable:!1,width:680,destroyOnClose:""},{default:Ze((function(){return[Object(j["createVNode"])(v,{onClose:t[13]||(t[13]=function(t){return e.exportDialogVisible=!1})})]})),_:1},8,["visible"])])})),gt=Object(j["withScopeId"])("data-v-47d0351b");Object(j["pushScopeId"])("data-v-47d0351b");var yt={class:"hotkey-doc"},Et={class:"title"},kt={class:"label"},It={class:"value"};Object(j["popScopeId"])();var St=gt((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",yt,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.hotkeys,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:e.type},[Object(j["createVNode"])("div",Et,Object(j["toDisplayString"])(e.type),1),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.children,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"hotkey-item",key:e.label},[Object(j["createVNode"])("div",kt,Object(j["toDisplayString"])(e.label),1),Object(j["createVNode"])("div",It,Object(j["toDisplayString"])(e.value),1)])})),128))],64)})),128))])})),Ct=le,Nt=Object(j["defineComponent"])({name:"hotkey-doc",setup:function(){return{hotkeys:Ct}}});n("ef0f");Nt.render=St,Nt.__scopeId="data-v-47d0351b";var Tt=Nt,xt=Object(j["withScopeId"])("data-v-a69a4592");Object(j["pushScopeId"])("data-v-a69a4592");var Lt={class:"export-dialog"},wt={class:"preview"},Vt={class:"handle"},_t=Object(j["createTextVNode"])("导出"),Bt=Object(j["createTextVNode"])("关闭");Object(j["popScopeId"])();var Dt=xt((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Lt,[Object(j["createVNode"])("div",wt,[Object(j["createVNode"])("pre",null,Object(j["toDisplayString"])(e.slides),1)]),Object(j["createVNode"])("div",Vt,[Object(j["createVNode"])(r,{class:"btn",type:"primary",onClick:t[1]||(t[1]=function(t){return e.exportJSON()})},{default:xt((function(){return[_t]})),_:1}),Object(j["createVNode"])(r,{class:"btn",onClick:t[2]||(t[2]=function(t){return e.emit("close")})},{default:xt((function(){return[Bt]})),_:1})])])})),Mt=n("21a6"),At=Object(j["defineComponent"])({name:"export-dialog",setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.state.slides})),a=function(){var e=new Blob([JSON.stringify(c.value)],{type:""});Object(Mt["saveAs"])(e,"pptist_slides.json")};return{slides:c,exportJSON:a,emit:n}}});n("d1f3");At.render=Dt,At.__scopeId="data-v-a69a4592";var Pt=At,Rt=Object(j["defineComponent"])({name:"editor-header",components:{HotkeyDoc:Tt,ExportDialog:Pt},setup:function(){var e=Z(),t=qe(),n=t.enterScreening,o=t.enterScreeningFromStart,c=Be(),a=c.createSlide,r=c.deleteSlide,l=c.resetSlides,i=Te(),u=i.redo,d=i.undo,s=Object(j["computed"])((function(){return e.state.showGridLines})),f=function(){e.commit(y.SET_GRID_LINES_STATE,!s.value)},p=Object(j["ref"])(!1),b=Object(j["ref"])(!1);return{enterScreening:n,enterScreeningFromStart:o,createSlide:a,deleteSlide:r,redo:u,undo:d,toggleGridLines:f,showGridLines:s,resetSlides:l,hotkeyDrawerVisible:p,exportDialogVisible:b}}});n("8872");Rt.render=jt,Rt.__scopeId="data-v-ecea6ffc";var Ft=Rt,Ht=Object(j["withScopeId"])("data-v-fb6f9726");Object(j["pushScopeId"])("data-v-fb6f9726");var zt={class:"operates"};Object(j["popScopeId"])();var Ut,Gt=Ht((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementCreateSelection"),l=Object(j["resolveComponent"])("AlignmentLine"),i=Object(j["resolveComponent"])("MultiSelectOperate"),u=Object(j["resolveComponent"])("Operate"),d=Object(j["resolveComponent"])("ViewportBackground"),s=Object(j["resolveComponent"])("MouseSelection"),f=Object(j["resolveComponent"])("EditableElement"),p=Object(j["resolveDirective"])("contextmenu"),b=Object(j["resolveDirective"])("click-outside");return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"canvas",ref:"canvasRef",onMousewheel:t[2]||(t[2]=function(t){return e.handleMousewheelCanvas(t)}),onMousedown:t[3]||(t[3]=function(t){return e.handleClickBlankArea(t)})},[e.creatingElement?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,onCreated:t[1]||(t[1]=function(t){return e.insertElementFromCreateSelection(t)})})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",{class:"viewport-wrapper",style:{width:e.viewportStyles.width*e.canvasScale+"px",height:e.viewportStyles.height*e.canvasScale+"px",left:e.viewportStyles.left+"px",top:e.viewportStyles.top+"px"}},[Object(j["createVNode"])("div",zt,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.alignmentLines,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:t,type:e.type,axis:e.axis,length:e.length},null,8,["type","axis","length"])})),128)),e.activeElementIdList.length>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["createBlock"])(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,dragLineElement:e.dragLineElement},null,8,["elementInfo","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","dragLineElement"])})),128)),Object(j["createVNode"])(d)]),Object(j["createVNode"])("div",{class:"viewport",ref:"viewportRef",style:{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["createBlock"])(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},null,8,["elementInfo","elementIndex","isMultiSelect","selectElement"])})),128))],4)],4)],544)),[[p,e.contextmenus],[b,e.removeEditorAreaFocus]])})),qt=function(){var e=window.getSelection();e&&e.removeAllRanges()},Xt=function(e){var t=Object(j["ref"])(0),n=Object(j["ref"])(0),o=Z(),c=Object(j["computed"])((function(){return o.state.canvasPercentage})),a=Object(j["computed"])((function(){return o.state.viewportRatio})),r=function(){if(e.value){var r=e.value.clientWidth,l=e.value.clientHeight;if(l/r>a.value){var i=r*(c.value/100);o.commit(y.SET_CANVAS_SCALE,i/we),t.value=(r-i)/2,n.value=(l-i*a.value)/2}else{var u=l*(c.value/100);o.commit(y.SET_CANVAS_SCALE,u/(we*a.value)),t.value=(r-u/a.value)/2,n.value=(l-u)/2}}};Object(j["watch"])([c,a],r);var l=Object(j["computed"])((function(){return{width:we,height:we*a.value,left:t.value,top:n.value}})),i=new ResizeObserver(r);return Object(j["onMounted"])((function(){e.value&&i.observe(e.value)})),Object(j["onUnmounted"])((function(){e.value&&i.unobserve(e.value)})),{viewportStyles:l}},Wt=(n("159b"),function(e){var t=e.left,n=e.top,o=e.width,c=e.height,a=e.rotate,r=void 0===a?0:a,l=Math.sqrt(Math.pow(o,2)+Math.pow(c,2))/2,i=180*Math.atan(c/o)/Math.PI,u=(180-r-i)*Math.PI/180,d=(i-r)*Math.PI/180,s=t+o/2,f=n+c/2,p=[s+l*Math.cos(u),s+l*Math.cos(d),s-l*Math.cos(u),s-l*Math.cos(d)],b=[f-l*Math.sin(u),f-l*Math.sin(d),f+l*Math.sin(u),f+l*Math.sin(d)];return{xRange:[Math.min.apply(Math,p),Math.max.apply(Math,p)],yRange:[Math.min.apply(Math,b),Math.max.apply(Math,b)]}}),Yt=function(e){var t=Wt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:0}),n=t.xRange,o=t.yRange,c=Wt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.xRange,r=c.yRange;return{offsetX:a[0]-n[0],offsetY:r[0]-o[0]}},Zt=function(e){var t,n,o,c;if("line"===e.type)t=e.left,n=e.left+Math.max(e.start[0],e.end[0]),o=e.top,c=e.top+Math.max(e.start[1],e.end[1]);else if("rotate"in e&&e.rotate){var a=e.left,r=e.top,l=e.width,i=e.height,u=e.rotate,d=Wt({left:a,top:r,width:l,height:i,rotate:u}),s=d.xRange,f=d.yRange;t=s[0],n=s[1],o=f[0],c=f[1]}else t=e.left,n=e.left+e.width,o=e.top,c=e.top+e.height;return{minX:t,maxX:n,minY:o,maxY:c}},Jt=function(e){var t=[],n=[],o=[],c=[];e.forEach((function(e){var a=Zt(e),r=a.minX,l=a.maxX,i=a.minY,u=a.maxY;t.push(r),n.push(i),o.push(l),c.push(u)}));var a=Math.min.apply(Math,t),r=Math.max.apply(Math,o),l=Math.min.apply(Math,n),i=Math.max.apply(Math,c);return{minX:a,maxX:r,minY:l,maxY:i}},Kt=function(e){var t=[];return e.forEach((function(e){var n=t.findIndex((function(t){return t.value===e.value}));if(-1===n)t.push(e);else{var o=t[n],c=Math.min(o.range[0],e.range[0]),a=Math.max(o.range[1],e.range[1]),r=[c,a],l={value:e.value,range:r};t[n]=l}})),t},Qt=function(e,t){var n=Z(),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}),a=function(a){if(t.value){var r=!0,l=t.value.getBoundingClientRect(),i=5,u=a.pageX,d=a.pageY,s=(u-l.x)/o.value,f=(d-l.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(r){var t=e.pageX,n=e.pageY,a=(t-u)/o.value,l=(n-d)/o.value,s=Math.abs(a),f=Math.abs(l);if(!(s0&&l>0?p=4:a<0&&l<0?p=1:a>0&&l<0?p=2:a<0&&l>0&&(p=3),c.isShow=!0,c.quadrant=p,c.width=s,c.height=f}}},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null,r=!1;for(var t=[],o=0;ol&&bi&&vl-u&&bi-d&&vl&&bi-d&&vl-u&&bi&&v0&&Math.abs(l-45)<=d?l-=l-45:l<0&&Math.abs(l+45)<=d?l-=l+45:l>0&&Math.abs(l-90)<=d?l-=l-90:l<0&&Math.abs(l+90)<=d?l-=l+90:l>0&&Math.abs(l-135)<=d?l-=l-135:l<0&&Math.abs(l+135)<=d?l-=l+135:l>0&&Math.abs(l-180)<=d?l-=l-180:l<0&&Math.abs(l+180)<=d&&(l-=l+180),e.value=e.value.map((function(e){return c.id===e.id?Object(F["a"])(Object(F["a"])({},e),{},{rotate:l}):e}))}},document.onmouseup=function(){r=!1,document.onmousemove=null,document.onmouseup=null,i!==l&&(n.commit(y.UPDATE_SLIDE,{elements:e.value}),a())}}};return{rotateElement:r}},nn=n("14b7");(function(e){e["UPDATE_TEXT_STATE"]="UPDATE_TEXT_STATE",e["EXEC_TEXT_COMMAND"]="EXEC_TEXT_COMMAND",e["UPDATE_TABLE_SELECTED_CELL"]="UPDATE_TABLE_SELECTED_CELL",e["SCALE_ELEMENT_STATE"]="SCALE_ELEMENT_STATE"})(Ut||(Ut={}));var on=Object(nn["a"])(),cn=on,an={text:"文本",image:"图片",shape:"形状",line:"线条",chart:"图表",table:"表格"},rn={text:20,image:20,shape:15,chart:200,table:20},ln=function(e,t){var n=e.left,o=e.top,c=e.width,a=e.height,r=Math.sqrt(Math.pow(c,2)+Math.pow(a,2))/2,l=180*Math.atan(a/c)/Math.PI,i=(180-t-l)*Math.PI/180,u=(l-t)*Math.PI/180,d=(90-t)*Math.PI/180,s=t*Math.PI/180,f=c/2,p=a/2,b=n+f,m=o+p,v={left:b+r*Math.cos(i),top:m-r*Math.sin(i)},O={left:b+p*Math.cos(d),top:m-p*Math.sin(d)},h={left:b+r*Math.cos(u),top:m-r*Math.sin(u)},j={left:b+f*Math.cos(s),top:m+f*Math.sin(s)},g={left:b-r*Math.cos(i),top:m+r*Math.sin(i)},y={left:b-p*Math.sin(s),top:m+p*Math.cos(s)},E={left:b-r*Math.cos(u),top:m+r*Math.sin(u)},k={left:b-f*Math.cos(s),top:m-f*Math.sin(s)};return{leftTopPoint:v,topPoint:O,rightTopPoint:h,rightPoint:j,rightBottomPoint:g,bottomPoint:y,leftBottomPoint:E,leftPoint:k}},un=function(e,t){var n,o=(n={},Object(T["a"])(n,oe.RIGHT_BOTTOM,t.leftTopPoint),Object(T["a"])(n,oe.LEFT_BOTTOM,t.rightTopPoint),Object(T["a"])(n,oe.LEFT_TOP,t.rightBottomPoint),Object(T["a"])(n,oe.RIGHT_TOP,t.leftBottomPoint),Object(T["a"])(n,oe.TOP,t.bottomPoint),Object(T["a"])(n,oe.BOTTOM,t.topPoint),Object(T["a"])(n,oe.LEFT,t.rightPoint),Object(T["a"])(n,oe.RIGHT,t.leftPoint),n);return o[e]},dn=function(e,t){var n=Z(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),a=Object(j["computed"])((function(){return n.state.canvasScale})),r=Object(j["computed"])((function(){return n.state.viewportRatio})),l=Object(j["computed"])((function(){return n.getters.ctrlOrShiftKeyActive})),i=Te(),u=i.addHistorySnapshot,d=function(i,d,s){var f=!0;cn.emit(Ut.SCALE_ELEMENT_STATE,!0);var p,b=d.left,m=d.top,v=d.width,O=d.height,h="rotate"in d&&d.rotate?d.rotate:0,j=Math.PI*h/180,g=l.value||"fixedRatio"in d&&d.fixedRatio,E=v/O,k=i.pageX,I=i.pageY,S=rn[d.type]||20,C=function(e){return e2&&void 0!==arguments[2])||arguments[2];if(r.value||n.commit(y.SET_EDITORAREA_FOCUS,!0),o.value.includes(u.id)){if(l.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(a.value!==u.id){var p=i.pageX,b=i.pageY;i.target.onmouseup=function(e){var t=e.pageX,o=e.pageY;p===t&&b===o&&(n.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,u.id),e.target.onmouseup=null)}}}else{var m=[];if(m=l.value?[].concat(Object(R["a"])(o.value),[u.id]):[u.id],u.groupId){var v=[];e.value.forEach((function(e){e.groupId===u.groupId&&v.push(e.id)})),m=[].concat(Object(R["a"])(m),v)}n.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,fn()(m)),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}},bn=function(e,t){var n=Z(),o=Object(j["computed"])((function(){return n.state.activeElementIdList})),c=Object(j["computed"])((function(){return n.state.activeGroupElementId})),a=Object(j["computed"])((function(){return n.state.canvasScale})),r=Object(j["computed"])((function(){return n.state.viewportRatio})),l=Te(),i=l.addHistorySnapshot,u=function(l,u){if(o.value.includes(u.id)){var d,s=!0,f=we,p=we*r.value,b=5,m=JSON.parse(JSON.stringify(e.value)),v=m.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,k=l.pageX,I=l.pageY,S=null,C=u.id===c.value,N=[],T=[],x=Object(ke["a"])(e.value);try{for(x.s();!(d=x.n()).done;){var L=d.value;if("line"!==L.type&&((!C||L.id!==u.id)&&(C||!o.value.includes(L.id)))){var w=void 0,V=void 0,_=void 0,B=void 0;if("rotate"in L&&L.rotate){var D=Wt({left:L.left,top:L.top,width:L.width,height:L.height,rotate:L.rotate}),M=D.xRange,A=D.yRange;w=M[0],V=A[0],_=M[1]-M[0],B=A[1]-A[0]}else w=L.left,V=L.top,_=L.width,B=L.height;var P=w+_,H=V+B,z=V+B/2,U=w+_/2,G={value:V,range:[w,P]},q={value:H,range:[w,P]},X={value:z,range:[w,P]},W={value:w,range:[V,H]},Y={value:P,range:[V,H]},Z={value:U,range:[V,H]};N.push(G,q,X),T.push(W,Y,Z)}}}catch(ne){x.e(ne)}finally{x.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=Kt(N),T=Kt(T),document.onmousemove=function(n){var c=n.pageX,r=n.pageY;if(!1!==S&&(S=Math.abs(k-c)v&&(D[0]=_-w,M[0]=0),m>O&&(D[1]=B-V,M[1]=0),e.value=e.value.map((function(e){if(e.id===a.id){var t=Object(F["a"])(Object(F["a"])({},e),{},{left:w,top:V,start:D,end:M});return r!==ce.MID?(a.broken&&(t.broken=[(D[0]+M[0])/2,(D[1]+M[1])/2]),a.curve&&(t.curve=[(D[0]+M[0])/2,(D[1]+M[1])/2])):(a.broken&&(t.broken=[j-w,g-V]),a.curve&&(t.curve=[j-w,g-V])),t}return e}))}},document.onmouseup=function(n){l=!1,document.onmousemove=null,document.onmouseup=null;var o=n.pageX,a=n.pageY;u===o&&d===a||(t.commit(y.UPDATE_SLIDE,{elements:e.value}),c())}};return{dragLineElement:a}},vn=n("3835"),On=function(e){var t=Z(),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 a=e.value.getBoundingClientRect(),r=Object(vn["a"])(o,2),l=r[0],i=r[1],u=Object(vn["a"])(c,2),d=u[0],s=u[1],f=Math.min(l,d),p=Math.max(l,d),b=Math.min(i,s),m=Math.max(i,s),v=(f-a.x)/n.value,O=(b-a.y)/n.value,h=(p-f)/n.value,j=(m-b)/n.value;return{left:v,top:O,width:h,height:j}}},a=function(t){var o=t.start,c=t.end;if(e.value){var a=e.value.getBoundingClientRect(),r=Object(vn["a"])(o,2),l=r[0],i=r[1],u=Object(vn["a"])(c,2),d=u[0],s=u[1],f=Math.min(l,d),p=Math.max(l,d),b=Math.min(i,s),m=Math.max(i,s),v=(f-a.x)/n.value,O=(b-a.y)/n.value,h=(p-f)/n.value,j=(m-b)/n.value,g=[l===f?0:h,i===b?0:j],y=[d===f?0:h,s===b?0:j];return{left:v,top:O,start:g,end:y}}},r=Ve(),l=r.createTextElement,i=r.createShapeElement,u=r.createLineElement,d=function(e){if(o.value){var n=o.value.type;if("text"===n){var r=c(e);r&&l(r)}else if("shape"===n){var d=c(e);d&&i(d,o.value.data)}else if("line"===n){var s=a(e);s&&u(s,o.value.data)}t.commit(y.SET_CREATING_ELEMENT,null)}};return{insertElementFromCreateSelection:d}};function hn(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"editable-element",ref:"elementRef",id:"editable-element-".concat(e.elementInfo.id),style:{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,["id"])}var jn;n("a9e3");(function(e){e["TEXT"]="text",e["IMAGE"]="image",e["SHAPE"]="shape",e["LINE"]="line",e["CHART"]="chart",e["TABLE"]="table"})(jn||(jn={}));var gn,yn,En=function(){var e=Z(),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})),a=Te(),r=a.addHistorySnapshot,l=function(a){var l,i=we,u=we*n.value,d=Jt(o.value),s=d.minX,f=d.maxX,p=d.minY,b=d.maxY,m=JSON.parse(JSON.stringify(c.value.elements)),v=Object(ke["a"])(m);try{for(v.s();!(l=v.n()).done;){var O=l.value;if(t.value.includes(O.id)){if(a===te.CENTER){var h=p+(b-p)/2-u/2,j=s+(f-s)/2-i/2;O.top=O.top-h,O.left=O.left-j}if(a===te.TOP){var g=p-0;O.top=O.top-g}else if(a===te.VERTICAL){var E=p+(b-p)/2-u/2;O.top=O.top-E}else if(a===te.BOTTOM){var k=b-u;O.top=O.top-k}else if(a===te.LEFT){var I=s-0;O.left=O.left-I}else if(a===te.HORIZONTAL){var S=s+(f-s)/2-i/2;O.left=O.left-S}else if(a===te.RIGHT){var C=f-i;O.left=O.left-C}}}}catch(N){v.e(N)}finally{v.f()}e.commit(y.UPDATE_SLIDE,{elements:m}),r()};return{alignElementToCanvas:l}},kn=Object(j["withScopeId"])("data-v-1622838f"),In=kn((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ImageClipHandler"),l=Object(j["resolveComponent"])("ImageOutline"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-image",{lock:e.elementInfo.lock}],style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[e.isCliping?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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[1]||(t[1]=function(t){return e.handleClip(t)})},null,8,["src","clipData","width","height","top","left","clipPath"])):Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:1,class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle},onMousedown:t[3]||(t[3]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(l,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createVNode"])("div",{class:"image-content",style:{clipPath:e.clipShape.style}},[Object(j["createVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:{top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter},onDragstart:t[2]||(t[2]=Object(j["withModifiers"])((function(){}),["prevent"])),alt:""},null,44,["src"])],4)],36)),[[i,e.contextmenus]])],4)],6)})),Sn=function(e){var t=Object(j["computed"])((function(){if(e.value){var t=e.value,n=t.h,o=t.v,c=t.blur,a=t.color;return"".concat(n,"px ").concat(o,"px ").concat(c,"px ").concat(a)}return""}));return{shadowStyle:t}},Cn=function(e,t){var n=Object(j["computed"])((function(){var n="";return e.value&&t.value?n="rotateX(180deg) rotateY(180deg)":e.value?n="rotateX(180deg)":t.value&&(n="rotateY(180deg)"),n}));return{flipStyle:n}};(function(e){e["RECT"]="rect",e["ELLIPSE"]="ellipse",e["POLYGON"]="polygon"})(gn||(gn={})),function(e){e["RECT"]="rect",e["ROUNDRECT"]="roundRect",e["ELLIPSE"]="ellipse",e["TRIANGLE"]="triangle",e["PENTAGON"]="pentagon",e["RHOMBUS"]="rhombus",e["STAR"]="star"}(yn||(yn={}));var Nn={rect:{name:"矩形",type:gn.RECT,radius:"0",style:""},rect2:{name:"矩形2",type:gn.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:gn.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:gn.RECT,radius:"10%",style:"inset(0 0 0 0 round 10% 10% 10% 10%)"},ellipse:{name:"圆形",type:gn.ELLIPSE,style:"ellipse(50% 50% at 50% 50%)"},triangle:{name:"三角形",type:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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:gn.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")}}},Tn=function(e){var t=Object(j["computed"])((function(){if(!e.value)return Nn.rect;var t=e.value.shape||gn.RECT;return Nn[t]})),n=Object(j["computed"])((function(){if(!e.value)return{top:"0",left:"0",width:"100%",height:"100%"};var t=Object(vn["a"])(e.value.range,2),n=t[0],o=t[1],c=(o[0]-n[0])/100,a=(o[1]-n[1])/100,r=n[0]/c,l=n[1]/a;return{left:-r+"%",top:-l+"%",width:100/c+"%",height:100/a+"%"}}));return{clipShape:t,imgPosition:n}},xn=(n("b64b"),function(e){var t=Object(j["computed"])((function(){if(!e.value)return"";for(var t="",n=0,o=Object.keys(e.value);nr.width&&(p=r.width-i.width),b<0?b=0:b+i.height>r.height&&(b=r.height-i.height),f.left=p,f.top=b}},document.onmouseup=function(){n=!1,document.onmousemove=null,document.onmouseup=null,h(),setTimeout((function(){l.value=!1}),0)}},y=function(t,n){l.value=!0;var o=!0,r=50/e.width*100,i=50/e.height*100,u=t.pageX,s=t.pageY,p=d.value,b={left:f.left,top:f.top,width:f.width,height:f.height},m=f.width/f.height;document.onmousemove=function(t){if(o){var l,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;a.value&&("b-r"!==n&&"t-l"!==n||(y=g/m),"b-l"!==n&&"t-r"!==n||(y=-g/m)),"t-l"===n?(b.left+g<0&&(g=-b.left),b.top+y<0&&(y=-b.top),b.width-gp.width&&(g=p.width-(b.left+b.width)),b.top+y<0&&(y=-b.top),b.width+gp.height&&(y=p.height-(b.top+b.height)),b.width-gp.width&&(g=p.width-(b.left+b.width)),b.top+b.height+y>p.height&&(y=p.height-(b.top+b.height)),b.width+g\s$/,e)},mo=function(e){return Object(fo["g"])(/^(\d+)\.\s$/,e,(function(e){return{order:+e[1]}}),(function(e,t){return t.childCount+t.attrs.order===+e[1]}))},vo=function(e){return Object(fo["g"])(/^\s*([-+*])\s$/,e)},Oo=function(e){return Object(fo["e"])(/^```$/,e)},ho=function(e){var t=[].concat(Object(R["a"])(fo["d"]),[fo["a"],fo["b"]]);return t.push(bo(e.nodes.blockquote)),t.push(mo(e.nodes.ordered_list)),t.push(vo(e.nodes.bullet_list)),t.push(Oo(e.nodes.code_block)),Object(fo["c"])({rules:t})},jo=function(e){return[ho(e),Object(ro["b"])(po(e)),Object(ro["b"])(no["a"]),Object(io["a"])(),Object(uo["a"])(),Object(lo["a"])()]},go=n("2210"),yo=Object(F["a"])(Object(F["a"])({},so["d"]),{},{content:"list_item+",group:"block"}),Eo=Object(F["a"])(Object(F["a"])({},so["a"]),{},{content:"list_item+",group:"block"}),ko=Object(F["a"])(Object(F["a"])({},so["c"]),{},{content:"paragraph block*",group:"block"}),Io={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]}},So=Object(F["a"])(Object(F["a"])({},go["b"]),{},{ordered_list:yo,bullet_list:Eo,list_item:ko,paragraph:Io}),Co=(n("5319"),n("ac1f"),{excludes:"subscript",parseDOM:[{tag:"sub"},{style:"vertical-align",getAttrs:function(e){return"sub"===e&&null}}],toDOM:function(){return["sub",0]}}),No={excludes:"superscript",parseDOM:[{tag:"sup"},{style:"vertical-align",getAttrs:function(e){return"super"===e&&null}}],toDOM:function(){return["sup",0]}},To={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]}},xo={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]}},Lo={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]}},wo={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]}},Vo={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]}},_o={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]}},Bo=Object(F["a"])(Object(F["a"])({},go["a"]),{},{subscript:Co,superscript:No,strikethrough:To,underline:xo,forecolor:Lo,backcolor:wo,fontsize:Vo,fontname:_o}),Do=So,Mo=Bo,Ao=new ao["i"]({nodes:Do,marks:Mo}),Po=function(e){var t="
".concat(e,"
"),n=new window.DOMParser,o=n.parseFromString(t,"text/html").body.firstElementChild;return ao["a"].fromSchema(Ao).parse(o)},Ro=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new co["c"](e,Object(F["a"])({state:oo["b"].create({doc:Po(t),plugins:jo(Ao)})},n))},Fo=(n("b0c0"),function(e,t){return Array.isArray(e)&&e.indexOf(t.type)>-1||t.type===e}),Ho=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}}},zo=function(e){return function(t){return Ho(t.$from,e)}},Uo=function(e){return function(t){return zo((function(t){return Fo(e,t)}))(t)}},Go=function(e,t){var n=t.schema.nodes[e];return!!Uo(n)(t.selection)},qo=function(e){var t=e.state,n=t.selection,o=t.doc,c=n.from,a=o.nodeAt(c);return(null===a||void 0===a?void 0:a.marks)||[]},Xo=function(e,t,n){var o,c=qo(e),a=Object(ke["a"])(c);try{for(a.s();!(o=a.n()).done;){var r=o.value;if(r.type.name===t&&r.attrs[n])return r.attrs[n]}}catch(l){a.e(l)}finally{a.f()}return null},Wo=function(e,t){var n,o=qo(e),c=Object(ke["a"])(o);try{for(c.s();!(n=c.n()).done;){var a=n.value;if(a.type.name===t)return!0}}catch(r){c.e(r)}finally{c.f()}return!1},Yo=function(e,t){var n=e.state,o=n.selection,c=n.doc,a=o.from,r=o.to,l=!0,i="";return c.nodesBetween(a,r,(function(e){return l&&e.attrs[t]&&(l=!1,i=e.attrs[t]),l})),i},Zo=function(e){var t=Wo(e,"strong"),n=Wo(e,"em"),o=Wo(e,"underline"),c=Wo(e,"strikethrough"),a=Wo(e,"superscript"),r=Wo(e,"subscript"),l=Wo(e,"code"),i=Xo(e,"forecolor","color")||"#000",u=Xo(e,"backcolor","backcolor")||"#000",d=Xo(e,"fontsize","fontsize")||"20px",s=Xo(e,"fontname","fontname")||"微软雅黑",f=Yo(e,"align")||"left",p=Go("bullet_list",e.state),b=Go("ordered_list",e.state),m=Go("blockquote",e.state);return{bold:t,em:n,underline:o,strikethrough:c,superscript:a,subscript:r,code:l,color:i,backcolor:u,fontsize:d,fontname:s,align:f,bulletList:p,orderedList:b,blockquote:m}},Jo=(n("6062"),function(e,t,n){var o=e,c=o.selection,a=o.doc;if(!c||!a)return e;var r=c.from,l=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 a.nodesBetween(r,l,(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,a=t.nodeType,r=o.attrs;r=n?Object(F["a"])(Object(F["a"])({},r),{},{align:n}):Object(F["a"])(Object(F["a"])({},r),{},{align:null}),e=e.setNodeMarkup(c,a,r,o.marks)})),e):e}),Ko=function(e,t){var n=e.state,o=n.schema,c=n.selection,a=Jo(n.tr.setSelection(c),o,t);e.dispatch(a)},Qo=function(e,t){return e.type===t.nodes.bullet_list||e.type===t.nodes.ordered_list},$o=function(e,t){return function(n,o){var c=n.schema,a=n.selection,r=a.$from,l=a.$to,i=r.blockRange(l);if(!i)return!1;var u=zo((function(e){return Qo(e,c)}))(a);if(i.depth>=1&&u&&i.depth-u.depth<=1){if(u.node.type===e)return Object(so["b"])(t)(n,o);if(Qo(u.node,c)&&e.validContent(u.node.content)){var d=n.tr;return d.setNodeMarkup(u.pos,e),o&&o(d),!1}}return Object(so["g"])(e)(n,o)}},ec=Object(j["withScopeId"])("data-v-2ddaa919"),tc=ec((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return e.outline?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,class:"element-outline",overflow:"visible",width:e.width,height:e.height},{default:ec((function(){return[Object(j["createVNode"])("path",{"vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8","stroke-linejoin":"",fill:"transparent",d:"M0,0 L".concat(e.width,",0 L").concat(e.width,",").concat(e.height," L0,").concat(e.height," Z"),stroke:e.outlineColor,"stroke-width":e.outlineWidth,"stroke-dasharray":"dashed"===e.outlineStyle?"10 6":"0 0"},null,8,["d","stroke","stroke-width","stroke-dasharray"])]})),_:1},8,["width","height"])):Object(j["createCommentVNode"])("",!0)})),nc=Object(j["defineComponent"])({name:"element-outline",props:{width:{type:Number,required:!0},height:{type:Number,required:!0},outline:{type:Object}},setup:function(e){var t=Bn(Object(j["toRef"])(e,"outline")),n=t.outlineWidth,o=t.outlineStyle,c=t.outlineColor;return{outlineWidth:n,outlineStyle:o,outlineColor:c}}});n("d9a3");nc.render=tc,nc.__scopeId="data-v-2ddaa919";var oc=nc,cc=Object(j["defineComponent"])({name:"editable-element-text",components:{ElementOutline:oc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t,n=Z(),o=Te(),c=o.addHistorySnapshot,a=Object(j["ref"])(),r=Object(j["ref"])(!1),l=Object(j["ref"])(-1),i=Object(j["ref"])(),u=Object(j["computed"])((function(){return e.elementInfo.shadow})),d=Sn(u),s=d.shadowStyle,f=Object(j["computed"])((function(){return n.state.handleElementId})),p=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo,n))},b=function(t){f.value===e.elementInfo.id&&(r.value=t,t||-1===l.value||(n.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:l.value}}),l.value=-1))};cn.on(Ut.SCALE_ELEMENT_STATE,(function(e){return b(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.SCALE_ELEMENT_STATE,(function(e){return b(e)}))}));var m=function(t){var o=t[0].contentRect;if(a.value){var c=o.height;e.elementInfo.height!==c&&(r.value?l.value=c:n.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:c}}))}},v=new ResizeObserver(m);Object(j["onMounted"])((function(){a.value&&v.observe(a.value)})),Object(j["onUnmounted"])((function(){a.value&&v.unobserve(a.value)}));var O=Se()((function(){n.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{content:t.dom.innerHTML}}),c()}),300,{trailing:!0}),h=function(){"请输入内容"===e.elementInfo.content&&setTimeout((function(){Object(no["d"])(t.state,t.dispatch)}),0),n.commit(y.SET_DISABLE_HOTKEYS_STATE,!0)},g=function(){n.commit(y.SET_DISABLE_HOTKEYS_STATE,!1)},E=Se()((function(){var e=Zo(t);cn.emit(Ut.UPDATE_TEXT_STATE,e)}),30,{trailing:!0}),k=function(){O(),E()},I=Object(j["computed"])((function(){return e.elementInfo.content}));Object(j["watch"])(I,(function(){t&&(t.hasFocus()||(t.dom.innerHTML=I.value))}));var S=Object(j["computed"])((function(){return!e.elementInfo.lock}));Object(j["watch"])(S,(function(){t.setProps({editable:function(){return S.value}})})),Object(j["onMounted"])((function(){t=Ro(i.value,I.value,{handleDOMEvents:{focus:h,blur:g,keydown:k,click:E},editable:function(){return S.value}})})),Object(j["onUnmounted"])((function(){t&&t.destroy()}));var C=function(n){if(f.value===e.elementInfo.id){var o,c="command"in n?[n]:n,a=Object(ke["a"])(c);try{for(a.s();!(o=a.n()).done;){var r=o.value;if("fontname"===r.command&&r.value){var l=t.state.schema.marks.fontname.create({fontname:r.value}),i=t.state.selection.empty;i&&Object(no["d"])(t.state,t.dispatch);var u=t.state.selection,d=u.$from,s=u.$to;t.dispatch(t.state.tr.addMark(d.pos,s.pos,l))}else if("fontsize"===r.command&&r.value){var p=t.state.schema.marks.fontsize.create({fontsize:r.value}),b=t.state.selection.empty;b&&Object(no["d"])(t.state,t.dispatch);var m=t.state.selection,v=m.$from,h=m.$to;t.dispatch(t.state.tr.addMark(v.pos,h.pos,p))}else if("color"===r.command&&r.value){var j=t.state.schema.marks.forecolor.create({color:r.value}),g=t.state.selection.empty;g&&Object(no["d"])(t.state,t.dispatch);var y=t.state.selection,k=y.$from,I=y.$to;t.dispatch(t.state.tr.addMark(k.pos,I.pos,j))}else if("backcolor"===r.command&&r.value){var S=t.state.schema.marks.backcolor.create({backcolor:r.value}),C=t.state.selection.empty;C&&Object(no["d"])(t.state,t.dispatch);var N=t.state.selection,T=N.$from,x=N.$to;t.dispatch(t.state.tr.addMark(T.pos,x.pos,S))}else if("bold"===r.command){var L=t.state.selection.empty;L&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.strong)(t.state,t.dispatch)}else if("em"===r.command){var w=t.state.selection.empty;w&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.em)(t.state,t.dispatch)}else if("underline"===r.command){var V=t.state.selection.empty;V&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.underline)(t.state,t.dispatch)}else if("strikethrough"===r.command){var _=t.state.selection.empty;_&&Object(no["d"])(t.state,t.dispatch),Object(no["f"])(t.state.schema.marks.strikethrough)(t.state,t.dispatch)}else if("subscript"===r.command)Object(no["f"])(t.state.schema.marks.subscript)(t.state,t.dispatch);else if("superscript"===r.command)Object(no["f"])(t.state.schema.marks.superscript)(t.state,t.dispatch);else if("blockquote"===r.command)Object(no["g"])(t.state.schema.nodes.blockquote)(t.state,t.dispatch);else if("code"===r.command)Object(no["f"])(t.state.schema.marks.code)(t.state,t.dispatch);else if("align"===r.command&&r.value)Ko(t,r.value);else if("bulletList"===r.command){var B=t.state.schema.nodes,D=B.bullet_list,M=B.list_item;$o(D,M)(t.state,t.dispatch)}else if("orderedList"===r.command){var A=t.state.schema.nodes,P=A.ordered_list,R=A.list_item;$o(P,R)(t.state,t.dispatch)}else if("clear"===r.command){var F=t.state.selection.empty;F&&Object(no["d"])(t.state,t.dispatch);var H=t.state.selection,z=H.$from,U=H.$to;t.dispatch(t.state.tr.removeMark(z.pos,U.pos))}}}catch(G){a.e(G)}finally{a.f()}t.focus(),O(),E()}};return cn.on(Ut.EXEC_TEXT_COMMAND,(function(e){return C(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.EXEC_TEXT_COMMAND,(function(e){return C(e)}))})),{elementRef:a,editorViewRef:i,handleSelectElement:p,shadowStyle:s}}});n("88cc");cc.render=to,cc.__scopeId="data-v-3d4f3789";var ac=cc,rc=Object(j["withScopeId"])("data-v-6ed7d252");Object(j["pushScopeId"])("data-v-6ed7d252");var lc={key:0};Object(j["popScopeId"])();var ic=rc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("GradientDefs"),l=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-shape",{lock:e.elementInfo.lock}],style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["withDirectives"])(Object(j["createVNode"])("div",{class:"element-content",style:{opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle},onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(l,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:rc((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createBlock"])("defs",lc,[Object(j["createVNode"])(r,{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["createVNode"])("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["createVNode"])("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,["d","fill","stroke","stroke-width","stroke-dasharray"])],8,["transform"])]})),_:1},8,["width","height"])],36),[[i,e.contextmenus]])],4)],6)}));function uc(e,t,n,o,c,a){return"linear"===e.type?(Object(j["openBlock"])(),Object(j["createBlock"])("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["createVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,["stop-color"]),Object(j["createVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,["stop-color"])],8,["id","gradientTransform"])):(Object(j["openBlock"])(),Object(j["createBlock"])("radialGradient",{key:1,id:e.id},[Object(j["createVNode"])("stop",{offset:"0%","stop-color":e.color1},null,8,["stop-color"]),Object(j["createVNode"])("stop",{offset:"100%","stop-color":e.color2},null,8,["stop-color"])],8,["id"]))}var dc=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}}});dc.render=uc;var sc=dc,fc=Object(j["defineComponent"])({name:"editable-element-shape",components:{GradientDefs:sc},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.outline})),o=Bn(n),c=o.outlineWidth,a=o.outlineStyle,r=o.outlineColor,l=Object(j["computed"])((function(){return e.elementInfo.shadow})),i=Sn(l),u=i.shadowStyle,d=Object(j["computed"])((function(){return e.elementInfo.flipH})),s=Object(j["computed"])((function(){return e.elementInfo.flipV})),f=Cn(d,s),p=f.flipStyle;return{handleSelectElement:t,shadowStyle:u,outlineWidth:c,outlineStyle:a,outlineColor:r,flipStyle:p}}});n("cff1");fc.render=ic,fc.__scopeId="data-v-6ed7d252";var pc=fc,bc=Object(j["withScopeId"])("data-v-7d3d40d6"),mc=bc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("LinePointMarker"),l=Object(j["resolveComponent"])("SvgWrapper"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-shape",{lock:e.elementInfo.lock}],style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""}},[Object(j["createVNode"])(l,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:bc((function(){return[Object(j["createVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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"])(r,{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["createVNode"])("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,["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"]),Object(j["withDirectives"])(Object(j["createVNode"])("path",{class:"line-path",d:e.path,stroke:"transparent","stroke-width":"20",fill:"none",onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},null,40,["d"]),[[i,e.contextmenus]])]})),_:1},8,["width","height"])],4)],6)}));function vc(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("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["createVNode"])("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,["d","fill","transform"])],8,["id","markerWidth","markerHeight","refX","refY"])}var Oc={dot:"m0 5a5 5 0 1 0 10 0a5 5 0 1 0 -10 0z",arrow:"M0,0 L10,5 0,10 Z"},hc={"arrow-start":180,"arrow-end":0},jc=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 Oc[e.type]})),n=Object(j["computed"])((function(){return hc["".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}}});jc.render=vc;var gc=jc,yc=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:gc},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=Sn(n),c=o.shadowStyle,a=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),r=Object(j["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),l=Object(j["computed"])((function(){return"dashed"===e.elementInfo.style?"10 6":"0 0"})),i=Object(j["computed"])((function(){var t=e.elementInfo.start.join(","),n=e.elementInfo.end.join(",");if(e.elementInfo.broken){var o=e.elementInfo.broken.join(",");return"M".concat(t," L").concat(o," L").concat(n)}if(e.elementInfo.curve){var c=e.elementInfo.curve.join(",");return"M".concat(t," Q").concat(c," ").concat(n)}return"M".concat(t," L").concat(n)}));return{handleSelectElement:t,shadowStyle:c,svgWidth:a,svgHeight:r,lineDashArray:l,path:i}}});n("b7b4");yc.render=mc,yc.__scopeId="data-v-7d3d40d6";var Ec=yc,kc=Object(j["withScopeId"])("data-v-d2dd6e5c"),Ic=kc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline"),l=Object(j["resolveComponent"])("Chart"),i=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-chart",{lock:e.elementInfo.lock}],style:{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["createVNode"])("div",{class:"element-content",style:{backgroundColor:e.elementInfo.fill},onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(l,{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)})),Sc=Object(j["withScopeId"])("data-v-233b1dc8");Object(j["pushScopeId"])("data-v-233b1dc8");var Cc={class:"chart"};Object(j["popScopeId"])();var Nc=Sc((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Cc,[Object(j["createVNode"])("div",{class:"chart-content",ref:"chartRef",style:{width:e.width+"px",height:e.height+"px",transform:"scale(".concat(1/e.slideScale,")")}},null,4)])})),Tc=n("8103"),xc=n.n(Tc),Lc=n("66cb"),wc=n.n(Lc),Vc=n("ba48"),_c=n.n(Vc),Bc=(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:String,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(F["a"])(Object(F["a"])({},t),{},{width:e.width*o.value,height:e.height*o.value}),c="pie"===e.type?Object(F["a"])(Object(F["a"])({},e.data),{},{series:e.data.series[0]}):e.data;return{data:c,options:n}},a=function(){if(n.value){var o=xc()(e.type),a=c(),r=a.data,l=a.options;t=new _c.a[o](n.value,r,l)}},r=function(){if(t){var e=c(),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 l=function(){if(n.value)for(var t=wc()(e.themeColor).analogous(10),o=0;o<10;o++){var c=t[o].toRgbString();n.value.style.setProperty("--theme-color-".concat(o+1),c)}};Object(j["watch"])((function(){return e.themeColor}),l),Object(j["onMounted"])(l);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("a902"),n("32d8");Bc.render=Nc,Bc.__scopeId="data-v-233b1dc8";var Dc=Bc,Mc=Object(j["defineComponent"])({name:"editable-element-chart",components:{ElementOutline:oc,Chart:Dc},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))};return{handleSelectElement:t}}});n("d32e");Mc.render=Ic,Mc.__scopeId="data-v-d2dd6e5c";var Ac=Mc,Pc=Object(j["withScopeId"])("data-v-1ab7e248");Object(j["pushScopeId"])("data-v-1ab7e248");var Rc={class:"element-content"};Object(j["popScopeId"])();var Fc=Pc((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("EditableTable"),l=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["editable-element-table",{lock:e.elementInfo.lock}],ref:"elementRef",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"}},[Object(j["withDirectives"])(Object(j["createVNode"])("div",Rc,[Object(j["createVNode"])(r,{onMousedown:t[1]||(t[1]=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[2]||(t[2]=function(t){return e.updateTableCells(t)}),onChangeColWidths:t[3]||(t[3]=function(t){return e.updateColWidths(t)}),onChangeSelectedCells:t[4]||(t[4]=function(t){return e.updateSelectedCells(t)})},null,8,["data","width","colWidths","outline","theme","editable"]),!e.editable||e.elementInfo.lock?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:0,class:["table-mask",{lock:e.elementInfo.lock}],onDblclick:t[5]||(t[5]=function(t){return e.startEdit()}),onMousedown:t[6]||(t[6]=function(t){return e.handleSelectElement(t)})},[Object(j["createVNode"])("div",{class:"mask-tip",style:{transform:"scale(".concat(1/e.canvasScale,")")}},"双击编辑",4)],34)):Object(j["createCommentVNode"])("",!0)],512),[[l,e.contextmenus]])],6)})),Hc=(n("13d5"),Object(j["withScopeId"])("data-v-70bdbb7e"));Object(j["pushScopeId"])("data-v-70bdbb7e");var zc={key:0,class:"handler"};Object(j["popScopeId"])();var Uc=Hc((function(e,t,n,o,c,a){var r,l,i,u,d,s=Object(j["resolveComponent"])("CustomTextarea"),f=Object(j["resolveDirective"])("contextmenu");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"editable-table",style:{width:e.totalWidth+"px"}},[e.editable?(Object(j["openBlock"])(),Object(j["createBlock"])("div",zc,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.dragLinePosition,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"drag-line",key:n,style:{left:t+"px"},onMousedown:function(t){return e.handleMousedownColHandler(t,n)}},null,44,["onMousedown"])})),128))])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("table",{class:{theme:e.theme,"row-header":null===(r=e.theme)||void 0===r?void 0:r.rowHeader,"row-footer":null===(l=e.theme)||void 0===l?void 0:l.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:"--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["createVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])("col",{span:"1",key:t,width:e},null,8,["width"])})),128))]),Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.tableCells,(function(n,o){return Object(j["openBlock"])(),Object(j["createBlock"])("tr",{key:o},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(n,(function(n,c){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("td",{class:["cell",{selected:e.selectedCells.includes("".concat(o,"_").concat(c))&&e.selectedCells.length>1,active:e.activedCell==="".concat(o,"_").concat(c)}],style:Object(F["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(n.style)),key:n.id,rowspan:n.rowspan,colspan:n.colspan,"data-cell-index":"".concat(o,"_").concat(c),onMousedown:function(t){return e.handleCellMousedown(t,o,c)},onMouseenter:function(t){return e.handleCellMouseenter(o,c)}},[Object(j["createVNode"])(s,{class:["cell-text",{active:e.activedCell==="".concat(o,"_").concat(c)}],contenteditable:e.activedCell==="".concat(o,"_").concat(c)&&"plaintext-only",modelValue:n.text,"onUpdate:modelValue":[function(e){return n.text=e},t[1]||(t[1]=function(t){return e.handleInput()})]},null,8,["class","contenteditable","modelValue","onUpdate:modelValue"])],46,["rowspan","colspan","data-cell-index","onMousedown","onMouseenter"])),[[j["vShow"],!e.hideCells.includes("".concat(o,"_").concat(c))],[f,function(t){return e.contextmenus(t)}]])})),128))])})),128))])],6)],4)})),Gc=(n("1276"),n("cc71"),function(e){if(!e)return{};var t=e.bold,n=e.em,o=e.underline,c=e.strikethrough,a=e.color,r=e.backcolor,l=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:a||"#000",backgroundColor:r||"",fontSize:l||"14px",fontFamily:i||"微软雅黑",textAlign:u||"left"}}),qc=function(e){var t=Object(j["computed"])((function(){for(var t=[],n=0;n1||a.rowspan>1)for(var r=n;r=d&&b<=f&&v>=s&&v<=p&&u.push("".concat(b,"_").concat(v));return u}));Object(j["watch"])(g,(function(){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(!r.value.length)return null;var e=Object(vn["a"])(r.value,2),t=e[0],n=e[1];if(!l.value.length)return{row:[t,t],col:[n,n]};var o=Object(vn["a"])(l.value,2),c=o[0],a=o[1];if(t===c&&n===a)return{row:[t,t],col:[n,n]};var i=Math.min(t,c),u=Math.min(n,a),d=Math.max(t,c),s=Math.max(n,a);return{row:[i,d],col:[u,s]}})),k=function(){return a.value=!1},I=function(e,t,n){0===e.button&&(l.value=[],a.value=!0,r.value=[t,n])},S=function(e,t){a.value&&(l.value=[e,t])};Object(j["onMounted"])((function(){document.addEventListener("mouseup",k)})),Object(j["onUnmounted"])((function(){document.removeEventListener("mouseup",k)}));var C=function(e,t){return h.value.includes("".concat(e,"_").concat(t))},N=function(e){var t=i.value.length-1;r.value=[0,e],l.value=[t,e]},T=function(e){var t=i.value[e].length-1;r.value=[e,0],l.value=[e,t]},x=function(){var e=i.value.length-1,t=i.value[e].length-1;r.value=[0,0],l.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(!C(u,l)){t[u][l].rowspan=t[u][l].rowspan-1;break}t.splice(e,1),i.value=t},w=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),o=[],c=0;c=0;u--)if(!C(l,u)){t[l][u].colspan=t[l][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)},V=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=[],o=0;o1,n=e[0].length>1;return{canDeleteRow:t,canDeleteCol:n}},U=function(e,t){var n=g.value.length>1,o=i.value[e][t],c=n,a=!n&&(o.rowspan>1||o.colspan>1);return{canMerge:c,canSplit:a}},G=function(e){var t=e.dataset.cellIndex,n=+t.split("_")[0],o=+t.split("_")[1];g.value.includes("".concat(n,"_").concat(o))||(r.value=[n,o],l.value=[]);var c=U(n,o),a=c.canMerge,i=c.canSplit,u=z(),d=u.canDeleteRow,s=u.canDeleteCol;return[{text:"插入列",children:[{text:"到左侧",handler:function(){return _(o)}},{text:"到右侧",handler:function(){return _(o+1)}}]},{text:"插入行",children:[{text:"到上方",handler:function(){return V(n)}},{text:"到下方",handler:function(){return V(n+1)}}]},{text:"删除列",disable:!s,handler:function(){return w(o)}},{text:"删除行",disable:!d,handler:function(){return L(n)}},{divider:!0},{text:"合并单元格",disable:!a,handler:B},{text:"取消合并单元格",disable:!i,handler:function(){return D(n,o)}},{divider:!0},{text:"选中当前列",handler:function(){return N(o)}},{text:"选中当前行",handler:function(){return T(n)}},{text:"选中全部单元格",handler:x}]};return{getTextStyle:Gc,dragLinePosition:m,tableCells:i,colSizeList:f,totalWidth:p,hideCells:h,selectedCells:g,activedCell:y,selectedRange:E,handleCellMousedown:I,handleCellMouseenter:S,selectCol:N,selectRow:T,handleMousedownColHandler:M,contextmenus:G,handleInput:F,subThemeColor:s}}});n("9fed");Kc.render=Uc,Kc.__scopeId="data-v-70bdbb7e";var Qc=Kc,$c=Object(j["defineComponent"])({name:"editable-element-table",components:{EditableTable:Qc},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=Z(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){return t.state.handleElementId})),c=Object(j["ref"])(),a=Te(),r=a.addHistorySnapshot,l=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["ref"])(-1),f=function(n){o.value===e.elementInfo.id&&(d.value=n,n&&(i.value=!1),n||-1===s.value||(t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:s.value}}),s.value=-1))};cn.on(Ut.SCALE_ELEMENT_STATE,(function(e){return f(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.SCALE_ELEMENT_STATE,(function(e){return f(e)}))}));var p=function(n){var o=n[0].contentRect;if(c.value){var a=o.height;e.elementInfo.height!==a&&(d.value?s.value=a:t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{height:a}}))}},b=new ResizeObserver(p);Object(j["onMounted"])((function(){c.value&&b.observe(c.value)})),Object(j["onUnmounted"])((function(){c.value&&b.unobserve(c.value)}));var m=function(n){t.commit(y.UPDATE_ELEMENT,{id:e.elementInfo.id,props:{data:n}}),r()},v=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}}),r()},O=function(e){Object(j["nextTick"])((function(){return cn.emit(Ut.UPDATE_TABLE_SELECTED_CELL,e)}))};return{elementRef:c,canvasScale:n,handleSelectElement:l,updateTableCells:m,updateColWidths:v,editable:i,startEdit:u,updateSelectedCells:O}}});n("94b3");$c.render=Fc,$c.__scopeId="data-v-1ab7e248";var ea=$c,ta=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}},setup:function(e){var t=Object(j["computed"])((function(){var t,n=(t={},Object(T["a"])(t,jn.IMAGE,$n),Object(T["a"])(t,jn.TEXT,ac),Object(T["a"])(t,jn.SHAPE,pc),Object(T["a"])(t,jn.LINE,Ec),Object(T["a"])(t,jn.CHART,Ac),Object(T["a"])(t,jn.TABLE,ea),t);return n[e.elementInfo.type]||null})),n=He(),o=n.orderElement,c=En(),a=c.alignElementToCanvas,r=Ae(),l=r.combineElements,i=r.uncombineElements,u=Me(),d=u.deleteElement,s=De(),f=s.lockElement,p=s.unlockElement,b=Pe(),m=b.copyElement,v=b.pasteElement,O=b.cutElement,h=Re(),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:m},{text:"粘贴",subText:"Ctrl + V",handler:v},{divider:!0},{text:"水平居中",handler:function(){return a(te.HORIZONTAL)},children:[{text:"水平垂直居中",handler:function(){return a(te.CENTER)}},{text:"水平居中",handler:function(){return a(te.HORIZONTAL)}},{text:"左对齐",handler:function(){return a(te.LEFT)}},{text:"右对齐",handler:function(){return a(te.RIGHT)}}]},{text:"垂直居中",handler:function(){return a(te.VERTICAL)},children:[{text:"水平垂直居中",handler:function(){return a(te.CENTER)}},{text:"垂直居中",handler:function(){return a(te.VERTICAL)}},{text:"顶部对齐",handler:function(){return a(te.TOP)}},{text:"底部对齐",handler:function(){return a(te.BOTTOM)}}]},{divider:!0},{text:"置于顶层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,ee.TOP)},children:[{text:"置于顶层",handler:function(){return o(e.elementInfo,ee.TOP)}},{text:"上移一层",handler:function(){return o(e.elementInfo,ee.UP)}}]},{text:"置于底层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,ee.BOTTOM)},children:[{text:"置于底层",handler:function(){return o(e.elementInfo,ee.BOTTOM)}},{text:"下移一层",handler:function(){return o(e.elementInfo,ee.DOWN)}}]},{divider:!0},{text:e.elementInfo.groupId?"取消组合":"组合",subText:"Ctrl + G",handler:e.elementInfo.groupId?i:l,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}}});ta.render=hn;var na=ta,oa=Object(j["withScopeId"])("data-v-1619c258"),ca=oa((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"mouse-selection quadrant-".concat(n.quadrant),style:{top:n.top+"px",left:n.left+"px",width:n.width+"px",height:n.height+"px"}},null,6)})),aa={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");aa.render=ca,aa.__scopeId="data-v-1619c258";var ra=aa,la=Object(j["withScopeId"])("data-v-a9ca1b50"),ia=la((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("GridLines");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"viewport-background",style:e.backgroundStyle},[e.showGridLines?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0})):Object(j["createCommentVNode"])("",!0)],4)})),ua=Object(j["withScopeId"])("data-v-3cb2c22e"),da=ua((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"grid-lines"},{default:ua((function(){return[Object(j["createVNode"])("path",{style:{transform:"scale(".concat(e.canvasScale,")")},d:e.path,fill:"none",stroke:e.gridColor,"stroke-width":"0.3","stroke-dasharray":"5"},null,12,["d","stroke"])]})),_:1})})),sa=Object(j["defineComponent"])({name:"grid-lines",setup:function(){var e=Z(),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 wc.a.mostReadable(t,n,{includeFallbackColors:!0}).setAlpha(.5).toRgbString()})),a=50,r=function(){for(var e=we,t=we*n.value,o="",c=0;c<=Math.floor(t/a);c++)o+="M0 ".concat(c*a," L").concat(e," ").concat(c*a," ");for(var r=0;r<=Math.floor(e/a);r++)o+="M".concat(r*a," 0 L").concat(r*a," ").concat(t," ");return o};return{canvasScale:t,gridColor:c,width:we,height:we*n.value,path:r()}}});n("5c4c");sa.render=da,sa.__scopeId="data-v-3cb2c22e";var fa=sa,pa=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,a=t.imageSize,r=t.gradientColor,l=t.gradientRotate,i=t.gradientType;if("solid"===n)return{backgroundColor:o};if("image"===n)return c?"repeat"===a?{backgroundImage:"url(".concat(c),backgroundRepeat:"repeat",backgroundSize:"initial"}:{backgroundImage:"url(".concat(c),backgroundRepeat:"no-repeat",backgroundSize:a||"cover"}:{backgroundColor:"#fff"};if("gradient"===n){var u=l||0,d=r?r[0]:"#fff",s=r?r[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}},ba=Object(j["defineComponent"])({name:"viewport-background",components:{GridLines:fa},setup:function(){var e=Z(),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=pa(n),c=o.backgroundStyle;return{showGridLines:t,backgroundStyle:c}}});n("f802");ba.render=ia,ba.__scopeId="data-v-a9ca1b50";var ma=ba,va=Object(j["withScopeId"])("data-v-2d3eddf5"),Oa=va((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"alignment-line",style:{left:e.left,top:e.top}},[Object(j["createVNode"])("div",{class:["line",e.type],style:e.sizeStyle},null,6)],4)})),ha=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=Z(),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"})),a=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:a}}});n("92ad");ha.render=Oa,ha.__scopeId="data-v-2d3eddf5";var ja=ha,ga=Object(j["withScopeId"])("data-v-3c5b7aac"),ya=ga((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"element-create-selection",ref:"selectionRef",onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.createSelection(t)}),["stop"]))},[e.start&&e.end?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:0,class:["selection",e.creatingElement.type],style:e.position},["line"===e.creatingElement.type&&e.lineData?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,overflow:"visible",width:e.lineData.svgWidth,height:e.lineData.svgHeight},{default:ga((function(){return[Object(j["createVNode"])("path",{d:e.lineData.path,stroke:"#d14424",fill:"none","stroke-width":"1","stroke-linecap":"","stroke-linejoin":"","stroke-miterlimit":""},null,8,["d"])]})),_:1},8,["width","height"])):Object(j["createCommentVNode"])("",!0)],6)):Object(j["createCommentVNode"])("",!0)],544)})),Ea=Object(j["defineComponent"])({name:"element-create-selection",setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.getters.ctrlOrShiftKeyActive})),a=Object(j["computed"])((function(){return o.state.creatingElement})),r=Object(j["ref"])(),l=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;r.value=[o,i],document.onmousemove=function(e){if(a.value&&t){var n=e.pageX,r=e.pageY;if(c.value){var u=n-o,d=r-i,s=Math.abs(u),f=Math.abs(d);if("shape"===a.value.type){var p=d>0&&u<0||d<0&&u>0;s>f?r=p?i-u:i+u:n=p?o-d:o+d}else"line"===a.value.type&&(s>f?r=i:n=o)}l.value=[n,r]}},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=a.value)||void 0===c?void 0:c.type)&&(Math.abs(d-o)>=f||Math.abs(s-i)>=f))n("created",{start:r.value,end:l.value});else if("line"!==(null===(u=a.value)||void 0===u?void 0:u.type)&&Math.abs(d-o)>=f&&Math.abs(s-i)>=f)n("created",{start:r.value,end:l.value});else{var p=200,b=Math.min(d,o),m=Math.min(s,i),v=Math.max(d,o),O=Math.max(s,i),h=v-b>=f?v-b:p,j=O-m>=f?O-m:p;n("created",{start:[b,m],end:[b+h,m+j]})}}},s=Object(j["computed"])((function(){if(!r.value||!l.value)return null;if(!a.value||"line"!==a.value.type)return null;var e=Object(vn["a"])(r.value,2),t=e[0],n=e[1],o=Object(vn["a"])(l.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,b=f-s>=24?f-s:24,m=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(m,", ").concat(v," L").concat(O,", ").concat(h);return{svgWidth:p,svgHeight:b,startX:m,startY:v,endX:O,endY:h,path:j}})),f=Object(j["computed"])((function(){if(!r.value||!l.value)return{};var e=Object(vn["a"])(r.value,2),t=e[0],n=e[1],o=Object(vn["a"])(l.value,2),c=o[0],a=o[1],i=Math.min(t,c),d=Math.max(t,c),s=Math.min(n,a),f=Math.max(n,a),p=d-i,b=f-s;return{left:i-u.x+"px",top:s-u.y+"px",width:p+"px",height:b+"px"}}));return{selectionRef:i,start:r,end:l,creatingElement:a,createSelection:d,lineData:s,position:f}}});n("1949");Ea.render=ya,Ea.__scopeId="data-v-3c5b7aac";var ka=Ea,Ia=Object(j["withScopeId"])("data-v-4def6455"),Sa=Ia((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"multi-select-operate",style:{left:e.minX*e.canvasScale+"px",top:e.minY*e.canvasScale+"px"}},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.disableResize?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:t.direction,type:t.direction,style: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)})),Ca=function(e,t){var n=Object(j["computed"])((function(){return[{direction:oe.LEFT_TOP,style:{}},{direction:oe.TOP,style:{left:e.value/2+"px"}},{direction:oe.RIGHT_TOP,style:{left:e.value+"px"}},{direction:oe.LEFT,style:{top:t.value/2+"px"}},{direction:oe.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}},{direction:oe.LEFT_BOTTOM,style:{top:t.value+"px"}},{direction:oe.BOTTOM,style:{left:e.value/2+"px",top:t.value+"px"}},{direction:oe.RIGHT_BOTTOM,style:{left:e.value+"px",top:t.value+"px"}}]})),o=Object(j["computed"])((function(){return[{direction:oe.LEFT,style:{top:t.value/2+"px"}},{direction:oe.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}}]})),c=Object(j["computed"])((function(){return[{type:ne.T,style:{width:e.value+"px"}},{type:ne.B,style:{top:t.value+"px",width:e.value+"px"}},{type:ne.L,style:{height:t.value+"px"}},{type:ne.R,style:{left:e.value+"px",height:t.value+"px"}}]}));return{resizeHandlers:n,textElementResizeHandlers:o,borderLines:c}},Na=Object(j["withScopeId"])("data-v-1c2a68d0"),Ta=Na((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["resize-handler",n.type]},null,2)})),xa={name:"resize-handler",props:{type:{type:String,default:""}}};n("a933");xa.render=Ta,xa.__scopeId="data-v-1c2a68d0";var La=xa,wa=Object(j["withScopeId"])("data-v-630e246b"),Va=wa((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["border-line",n.type,{wide:n.isWide}]},null,2)})),_a={name:"border-line",props:{type:{type:String,required:!0},isWide:{type:Boolean,default:!1}}};n("fb1d");_a.render=Va,_a.__scopeId="data-v-630e246b";var Ba=_a,Da=Object(j["defineComponent"])({name:"multi-select-operate",components:{ResizeHandler:La,BorderLine:Ba},props:{elementList:{type:Array,required:!0},scaleMultiElement:{type:Function,required:!0}},setup:function(e){var t=Z(),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)}))})),a=Object(j["reactive"])({minX:0,maxX:0,minY:0,maxY:0}),r=Object(j["computed"])((function(){return(a.maxX-a.minX)*o.value})),l=Object(j["computed"])((function(){return(a.maxY-a.minY)*o.value})),i=Ca(r,l),u=i.resizeHandlers,d=i.borderLines,s=function(){var e=Jt(c.value),t=e.minX,n=e.maxX,o=e.minY,r=e.maxY;a.minX=t,a.maxX=n,a.minY=o,a.maxY=r};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(F["a"])(Object(F["a"])({},Object(j["toRefs"])(a)),{},{canvasScale:o,borderLines:d,disableResize:f,resizeHandlers:u})}});n("de7c");Da.render=Sa,Da.__scopeId="data-v-4def6455";var Ma=Da,Aa=Object(j["withScopeId"])("data-v-558a94fe");Object(j["pushScopeId"])("data-v-558a94fe");var Pa={key:1,class:"animation-index"};Object(j["popScopeId"])();var Ra=Aa((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["operate",{"multi-select":e.isMultiSelect&&!e.isActive}],style:{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["createBlock"])("div",Pa,Object(j["toDisplayString"])(e.elementIndexInAnimation+1),1)):Object(j["createCommentVNode"])("",!0)],6)})),Fa=Object(j["withScopeId"])("data-v-5b0628aa"),Ha=Fa((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["image-element-operate",{cliping:e.isCliping}]},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:{left:e.scaleWidth/2+"px"},onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))],2)})),za=Object(j["withScopeId"])("data-v-9a549510");Object(j["pushScopeId"])("data-v-9a549510");var Ua={class:"rotate-handler"};Object(j["popScopeId"])();var Ga=za((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Ua)})),qa={name:"rotate-handler"};n("8754");qa.render=Ga,qa.__scopeId="data-v-9a549510";var Xa=qa,Wa=Object(j["defineComponent"])({name:"image-element-operate",inheritAttrs:!1,components:{RotateHandler:Xa,ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Object(j["computed"])((function(){return e.elementInfo.width*n.value})),r=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),l=Ca(a,r),i=l.resizeHandlers,u=l.borderLines;return{isCliping:c,scaleWidth:a,resizeHandlers:i,borderLines:u}}});n("5c02");Wa.render=Ha,Wa.__scopeId="data-v-5b0628aa";var Ya=Wa,Za={class:"text-element-operate"};function Ja(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Za,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:{left:e.scaleWidth/2+"px"},onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var Ka=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{RotateHandler:Xa,ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Ca(o,c),r=a.textElementResizeHandlers,l=a.borderLines;return{scaleWidth:o,textElementResizeHandlers:r,borderLines:l}}});Ka.render=Ja;var Qa=Ka,$a={class:"shape-element-operate"};function er(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler"),i=Object(j["resolveComponent"])("RotateHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",$a,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128)),Object(j["createVNode"])(i,{class:"operate-rotate-handler",style:{left:e.scaleWidth/2+"px"},onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64))])}var tr=Object(j["defineComponent"])({name:"shape-element-operate",inheritAttrs:!1,components:{RotateHandler:Xa,ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Ca(o,c),r=a.resizeHandlers,l=a.borderLines;return{scaleWidth:o,resizeHandlers:r,borderLines:l}}});tr.render=er;var nr=tr,or={class:"text-element-operate"};function cr(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",or,[e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(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:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.dragLineElement(n,e.elementInfo,t.handler)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var ar=Object(j["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{ResizeHandler:La},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=Z(),n=Object(j["computed"])((function(){return t.state.canvasScale})),o=Object(j["computed"])((function(){var t=[{handler:ce.START,style:{left:e.elementInfo.start[0]*n.value+"px",top:e.elementInfo.start[1]*n.value+"px"}},{handler:ce.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:ce.MID,style:{left:o[0]*n.value+"px",top:o[1]*n.value+"px"}})}return t}));return{resizeHandlers:o}}});ar.render=cr;var rr=ar,lr={class:"chart-element-operate"};function ir(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",lr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.resizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var ur=Object(j["defineComponent"])({name:"chart-element-operate",inheritAttrs:!1,components:{ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Ca(o,c),r=a.resizeHandlers,l=a.borderLines;return{scaleWidth:o,resizeHandlers:r,borderLines:l}}});ur.render=ir;var dr=ur,sr={class:"table-element-operate"};function fr(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("BorderLine"),l=Object(j["resolveComponent"])("ResizeHandler");return Object(j["openBlock"])(),Object(j["createBlock"])("div",sr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.borderLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{class:"operate-border-line",key:e.type,type:e.type,style:e.style},null,8,["type","style"])})),128)),e.elementInfo.lock||!e.isActiveGroupElement&&e.isMultiSelect?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],{key:0},Object(j["renderList"])(e.textElementResizeHandlers,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{class:"operate-resize-handler",key:t.direction,type:t.direction,style:t.style,onMousedown:Object(j["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))])}var pr=Object(j["defineComponent"])({name:"table-element-operate",inheritAttrs:!1,components:{ResizeHandler:La,BorderLine:Ba},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=Z(),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})),a=Object(j["computed"])((function(){return e.elementInfo.height*n.value})),r=Ca(c,a),l=r.textElementResizeHandlers,i=r.borderLines;return{scaleWidth:c,textElementResizeHandlers:l,borderLines:i}}});pr.render=fr;var br=pr,mr=Object(j["defineComponent"])({name:"operate",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}},setup:function(e){var t=Z(),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})),a=Object(j["computed"])((function(){var t,n=(t={},Object(T["a"])(t,jn.IMAGE,Ya),Object(T["a"])(t,jn.TEXT,Qa),Object(T["a"])(t,jn.SHAPE,nr),Object(T["a"])(t,jn.LINE,rr),Object(T["a"])(t,jn.CHART,dr),Object(T["a"])(t,jn.TABLE,br),t);return n[e.elementInfo.type]||null})),r=Object(j["computed"])((function(){var t=c.value.animations||[];return t.findIndex((function(t){return t.elId===e.elementInfo.id}))}));return{currentOperateComponent:a,canvasScale:n,toolbarState:o,elementIndexInAnimation:r}}});n("9884");mr.render=Ra,mr.__scopeId="data-v-558a94fe";var vr=mr,Or=Object(j["defineComponent"])({name:"editor-canvas",components:{EditableElement:na,MouseSelection:ra,ViewportBackground:ma,AlignmentLine:ja,ElementCreateSelection:ka,MultiSelectOperate:Ma,Operate:vr},setup:function(){var e=Z(),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})),a=Object(j["computed"])((function(){return e.state.ctrlKeyState})),r=Object(j["computed"])((function(){return e.getters.ctrlOrShiftKeyActive})),l=Object(j["ref"])(),i=Object(j["ref"])([]);Object(j["watch"])(n,(function(){e.commit(y.SET_ACTIVE_GROUP_ELEMENT_ID,"")}));var u=Object(j["computed"])((function(){return e.getters.currentSlide})),d=Object(j["ref"])([]),s=function(){d.value=u.value?JSON.parse(JSON.stringify(u.value.elements)):[]};Object(j["watchEffect"])(s);var f=Object(j["ref"])(),p=Object(j["computed"])((function(){return e.state.canvasScale})),b=Xt(f),m=b.viewportStyles;$t(f);var v=Qt(d,l),O=v.mouseSelectionState,h=v.updateMouseSelection,g=bn(d,i),E=g.dragElement,k=mn(d),I=k.dragLineElement,S=pn(d,E),C=S.selectElement,N=dn(d,i),T=N.scaleElement,x=N.scaleMultiElement,L=tn(d,l),w=L.rotateElement,V=Re(),_=V.selectAllElement,B=Me(),D=B.deleteAllElements,M=Pe(),A=M.pasteElement,P=qe(),R=P.enterScreening,F=Be(),H=F.updateSlideIndex,z=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),r.value||h(t),c.value||e.commit(y.SET_EDITORAREA_FOCUS,!0),qt()},U=function(){c.value&&e.commit(y.SET_EDITORAREA_FOCUS,!1)},G=Xe(),q=G.scaleCanvas,X=Ne()(q,100,{leading:!0,trailing:!1}),W=Ne()(H,300,{leading:!0,trailing:!1}),Y=function(e){e.preventDefault(),a.value?e.deltaY>0?X("-"):e.deltaY<0&&X("+"):e.deltaY>0?W(ae.DOWN):e.deltaY<0&&W(ae.UP)},J=Object(j["computed"])((function(){return e.state.showGridLines})),K=function(){e.commit(y.SET_GRID_LINES_STATE,!J.value)},Q=Object(j["computed"])((function(){return e.state.creatingElement})),$=On(l),ee=$.insertElementFromCreateSelection,te=function(){return[{text:"粘贴",subText:"Ctrl + V",handler:A},{text:"全选",subText:"Ctrl + A",handler:_},{text:"网格线",subText:J.value?"√":"",handler:K},{text:"重置当前页",handler:D},{divider:!0},{text:"从当前页演示",subText:"Ctrl+F",handler:R}]};return Object(j["provide"])("slideScale",p),{elementList:d,activeElementIdList:t,handleElementId:n,activeGroupElementId:o,canvasRef:f,viewportRef:l,viewportStyles:m,canvasScale:p,mouseSelectionState:O,handleClickBlankArea:z,removeEditorAreaFocus:U,currentSlide:u,creatingElement:Q,insertElementFromCreateSelection:ee,alignmentLines:i,selectElement:C,rotateElement:w,scaleElement:T,dragLineElement:I,scaleMultiElement:x,handleMousewheelCanvas:Y,contextmenus:te}}});n("04be");Or.render=Gt,Or.__scopeId="data-v-fb6f9726";var hr=Or,jr=Object(j["withScopeId"])("data-v-59ae6536");Object(j["pushScopeId"])("data-v-59ae6536");var gr={class:"canvas-tool"},yr={class:"left-handler"},Er={class:"add-element-handler"},kr={class:"right-handler"},Ir={class:"text"};Object(j["popScopeId"])();var Sr=jr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconBack"),l=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"),b=Object(j["resolveComponent"])("Popover"),m=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"),k=Object(j["resolveComponent"])("IconPlus"),I=Object(j["resolveComponent"])("IconFullScreen");return Object(j["openBlock"])(),Object(j["createBlock"])("div",gr,[Object(j["createVNode"])("div",yr,[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"撤销"},{default:jr((function(){return[Object(j["createVNode"])(r,{class:["handler-item",{disable:!e.canUndo}],onClick:t[1]||(t[1]=function(t){return e.undo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"重做"},{default:jr((function(){return[Object(j["createVNode"])(i,{class:["handler-item",{disable:!e.canRedo}],onClick:t[2]||(t[2]=function(t){return e.redo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"])]),Object(j["createVNode"])("div",Er,[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入文字"},{default:jr((function(){return[Object(j["createVNode"])(u,{class:"handler-item",onClick:t[3]||(t[3]=function(t){return e.drawText()})})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(s,{onChange:t[4]||(t[4]=function(t){return e.insertImageElement(t)})},{default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图片"},{default:jr((function(){return[Object(j["createVNode"])(d,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(b,{trigger:"click",visible:e.shapePoolVisible,"onUpdate:visible":t[6]||(t[6]=function(t){return e.shapePoolVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(f,{onSelect:t[5]||(t[5]=function(t){return e.drawShape(t)})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入形状"},{default:jr((function(){return[Object(j["createVNode"])(p,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(b,{trigger:"click",visible:e.linePoolVisible,"onUpdate:visible":t[8]||(t[8]=function(t){return e.linePoolVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(m,{onSelect:t[7]||(t[7]=function(t){return e.drawLine(t)})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入线条"},{default:jr((function(){return[Object(j["createVNode"])(v,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(b,{trigger:"click",visible:e.chartPoolVisible,"onUpdate:visible":t[10]||(t[10]=function(t){return e.chartPoolVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(O,{onSelect:t[9]||(t[9]=function(t){e.createChartElement(t),e.chartPoolVisible=!1})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图表"},{default:jr((function(){return[Object(j["createVNode"])(h,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(j["createVNode"])(b,{trigger:"click",visible:e.tableGeneratorVisible,"onUpdate:visible":t[13]||(t[13]=function(t){return e.tableGeneratorVisible=t})},{content:jr((function(){return[Object(j["createVNode"])(g,{onClose:t[11]||(t[11]=function(t){return e.tableGeneratorVisible=!1}),onInsert:t[12]||(t[12]=function(t){var n=t.row,o=t.col;e.createTableElement(n,o),e.tableGeneratorVisible=!1})})]})),default:jr((function(){return[Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入表格"},{default:jr((function(){return[Object(j["createVNode"])(y,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"])]),Object(j["createVNode"])("div",kr,[Object(j["createVNode"])(E,{class:"handler-item viewport-size",onClick:t[14]||(t[14]=function(t){return e.scaleCanvas("-")})}),Object(j["createVNode"])("span",Ir,Object(j["toDisplayString"])(e.canvasScalePercentage),1),Object(j["createVNode"])(k,{class:"handler-item viewport-size",onClick:t[15]||(t[15]=function(t){return e.scaleCanvas("+")})}),Object(j["createVNode"])(l,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"适配屏幕"},{default:jr((function(){return[Object(j["createVNode"])(I,{class:"handler-item viewport-size-adaptation",onClick:t[16]||(t[16]=function(t){return e.setCanvasPercentage(90)})})]})),_:1},8,["mouseEnterDelay"])])])})),Cr=Object(j["withScopeId"])("data-v-5aabd717");Object(j["pushScopeId"])("data-v-5aabd717");var Nr={class:"shape-pool"},Tr={class:"category-name"},xr={class:"shape-list"};Object(j["popScopeId"])();var Lr=Cr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Nr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.shapeList,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"category",key:t.type},[Object(j["createVNode"])("div",Tr,Object(j["toDisplayString"])(t.type),1),Object(j["createVNode"])("div",xr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"shape-item",key:n},[Object(j["createVNode"])("div",{class:"shape-content",onClick:function(n){return e.selectShape(t)}},[Object(j["createVNode"])(r,{overflow:"visible",width:"18",height:"18"},{default:Cr((function(){return[Object(j["createVNode"])("g",{transform:"scale(".concat(18/t.viewBox,", ").concat(18/t.viewBox,") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(j["createVNode"])("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,["d"])],8,["transform"])]})),_:2},1024)],8,["onClick"])])})),128))])])})),128))])})),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 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"}]},{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"},{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"}]},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"},{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"}]}],Vr=Object(j["defineComponent"])({name:"shape-pool",setup:function(e,t){var n=t.emit,o=wr,c=function(e){n("select",e)};return{shapeList:o,selectShape:c}}});n("3041");Vr.render=Lr,Vr.__scopeId="data-v-5aabd717";var _r=Vr,Br=Object(j["withScopeId"])("data-v-5087394c");Object(j["pushScopeId"])("data-v-5087394c");var Dr={class:"line-pool"},Mr={class:"category-name"},Ar={class:"line-list"};Object(j["popScopeId"])();var Pr=Br((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("LinePointMarker"),l=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Dr,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.lineList,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"category",key:t.type},[Object(j["createVNode"])("div",Mr,Object(j["toDisplayString"])(t.type),1),Object(j["createVNode"])("div",Ar,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t.children,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"line-item",key:n},[Object(j["createVNode"])("div",{class:"line-content",onClick:function(n){return e.selectLine(t)}},[Object(j["createVNode"])(l,{overflow:"visible",width:"20",height:"20"},{default:Br((function(){return[Object(j["createVNode"])("defs",null,[t.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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"])(r,{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["createVNode"])("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,["d","stroke-dasharray","marker-start","marker-end"])]})),_:2},1024)],8,["onClick"])])})),128))])])})),128))])})),Rr=[{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}]}],Fr=Object(j["defineComponent"])({name:"line-pool",components:{LinePointMarker:gc},setup:function(e,t){var n=t.emit,o=Rr,c=function(e){n("select",e)};return{lineList:o,selectLine:c}}});n("6530");Fr.render=Pr,Fr.__scopeId="data-v-5087394c";var Hr=Fr,zr=Object(j["withScopeId"])("data-v-0028f4b9");Object(j["pushScopeId"])("data-v-0028f4b9");var Ur={class:"chart-pool"};Object(j["popScopeId"])();var Gr=zr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconChartLine"),l=Object(j["resolveComponent"])("IconChartHistogram"),i=Object(j["resolveComponent"])("IconChartPie");return Object(j["openBlock"])(),Object(j["createBlock"])("ul",Ur,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.chartList,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("li",{class:"chart-item",key:n},[Object(j["createVNode"])("div",{class:"chart-content",onClick:function(n){return e.selectChart(t)}},["line"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:0,size:"24"})):"bar"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:1,size:"24"})):"pie"===t?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:2,size:"24"})):Object(j["createCommentVNode"])("",!0)],8,["onClick"])])})),128))])})),qr=Object(j["defineComponent"])({name:"chart-pool",setup:function(e,t){var n=t.emit,o=["bar","line","pie"],c=function(e){n("select",e)};return{chartList:o,selectChart:c}}});n("f558");qr.render=Gr,qr.__scopeId="data-v-0028f4b9";var Xr=qr,Wr=Object(j["withScopeId"])("data-v-576c614c");Object(j["pushScopeId"])("data-v-576c614c");var Yr={class:"table-generator"},Zr={class:"title"},Jr={class:"lef"},Kr={key:1,class:"custom"},Qr={class:"row"},$r=Object(j["createVNode"])("div",{class:"label",style:{flex:"1"}},"行数:",-1),el={class:"row"},tl=Object(j["createVNode"])("div",{class:"label",style:{flex:"1"}},"列数:",-1),nl={class:"btns"},ol=Object(j["createTextVNode"])("取消"),cl=Object(j["createTextVNode"])("确认");Object(j["popScopeId"])();var al=Wr((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("InputNumber"),l=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Yr,[Object(j["createVNode"])("div",Zr,[Object(j["createVNode"])("div",Jr,"表格 "+Object(j["toDisplayString"])(e.endCell.length?"".concat(e.endCell[0]," x ").concat(e.endCell[1]):""),1),Object(j["createVNode"])("div",{class:"right",onClick:t[1]||(t[1]=function(t){return e.isCustom=!e.isCustom})},Object(j["toDisplayString"])(e.isCustom?"返回":"自定义"),1)]),e.isCustom?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Kr,[Object(j["createVNode"])("div",Qr,[$r,Object(j["createVNode"])(r,{min:1,max:20,value:e.customRow,"onUpdate:value":t[4]||(t[4]=function(t){return e.customRow=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createVNode"])("div",el,[tl,Object(j["createVNode"])(r,{min:1,max:20,value:e.customCol,"onUpdate:value":t[5]||(t[5]=function(t){return e.customCol=t}),style:{flex:"3"}},null,8,["value"])]),Object(j["createVNode"])("div",nl,[Object(j["createVNode"])(l,{class:"btn",onClick:t[6]||(t[6]=function(t){return e.close()})},{default:Wr((function(){return[ol]})),_:1}),Object(j["createVNode"])(l,{class:"btn",type:"primary",onClick:t[7]||(t[7]=function(t){return e.insertCustomTable()})},{default:Wr((function(){return[cl]})),_:1})])])):(Object(j["openBlock"])(),Object(j["createBlock"])("table",{key:0,onMouseleave:t[2]||(t[2]=function(t){return e.endCell=[]}),onClick:t[3]||(t[3]=function(t){return e.handleClickTable()})},[Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(t){return Object(j["createVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(10,(function(n){return Object(j["createVNode"])("td",{onMouseenter:function(o){return e.endCell=[t,n]},key:n},[Object(j["createVNode"])("div",{class:["cell",{active:e.endCell.length&&t<=e.endCell[0]&&n<=e.endCell[1]}]},null,2)],40,["onMouseenter"])})),64))])})),64))])],32))])})),rl=Object(j["defineComponent"])({name:"table-generator",setup:function(e,t){var n=t.emit,o=Object(j["ref"])([]),c=Object(j["ref"])(3),a=Object(j["ref"])(3),r=Object(j["ref"])(!1),l=function(){if(o.value.length){var e=Object(vn["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||a.value<1||a.value>20?ie["a"].warning("行数/列数必须在0~20之间!"):(n("insert",{row:c.value,col:a.value}),void(r.value=!1))},u=function(){n("close"),r.value=!1};return{endCell:o,customRow:c,customCol:a,handleClickTable:l,insertCustomTable:i,isCustom:r,close:u}}});n("b61d");rl.render=al,rl.__scopeId="data-v-576c614c";var ll=rl,il=Object(j["defineComponent"])({name:"canvas-tool",components:{ShapePool:_r,LinePool:Hr,ChartPool:Xr,TableGenerator:ll},setup:function(){var e=Z(),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+"")+"%"})),a=Xe(),r=a.scaleCanvas,l=a.setCanvasPercentage,i=Te(),u=i.redo,d=i.undo,s=Ve(),f=s.createImageElement,p=s.createChartElement,b=s.createTableElement,m=function(e){var t=e[0];t&&Le(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})},k=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"shape",data:t}),v.value=!1},I=function(t){e.commit(y.SET_CREATING_ELEMENT,{type:"line",data:t}),O.value=!1};return{scaleCanvas:r,setCanvasPercentage:l,canvasScalePercentage:c,canUndo:n,canRedo:o,redo:u,undo:d,insertImageElement:m,shapePoolVisible:v,linePoolVisible:O,chartPoolVisible:h,tableGeneratorVisible:g,drawText:E,drawShape:k,drawLine:I,createChartElement:p,createTableElement:b}}});n("f91d");il.render=Sr,il.__scopeId="data-v-59ae6536";var ul=il,dl=Object(j["withScopeId"])("data-v-57618e72");Object(j["pushScopeId"])("data-v-57618e72");var sl=Object(j["createTextVNode"])("添加幻灯片"),fl={class:"label"};Object(j["popScopeId"])();var pl=dl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconPlus"),l=Object(j["resolveComponent"])("ThumbnailSlide"),i=Object(j["resolveComponent"])("Draggable"),u=Object(j["resolveDirective"])("contextmenu"),d=Object(j["resolveDirective"])("click-outside");return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"thumbnails",onMousedown:t[2]||(t[2]=function(){return e.setThumbnailsFocus(!0)})},[Object(j["createVNode"])("div",{class:"add-slide",onClick:t[1]||(t[1]=function(t){return e.createSlide()})},[Object(j["createVNode"])(r,{class:"icon"}),sl]),Object(j["createVNode"])(i,{class:"thumbnail-list",modelValue:e.slides,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:dl((function(t){var n=t.element,o=t.index;return[Object(j["withDirectives"])(Object(j["createVNode"])("div",{class:["thumbnail-item",{active:e.slideIndex===o,selected:e.selectedSlidesIndex.includes(o)}],onMousedown:function(t){return e.handleClickSlideThumbnail(t,o)}},[Object(j["createVNode"])("div",fl,Object(j["toDisplayString"])(e.fillDigit(o+1,2)),1),Object(j["createVNode"])(l,{class:"thumbnail",slide:n,size:120},null,8,["slide"])],42,["onMousedown"]),[[u,e.contextmenusThumbnailItem]])]})),_:1},8,["modelValue","onEnd"])],544)),[[d,function(){return e.setThumbnailsFocus(!1)}],[u,e.contextmenusThumbnails]])})),bl=n("b76a"),ml=n.n(bl),vl=Object(j["withScopeId"])("data-v-4e59015e"),Ol=vl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ThumbnailElement");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"thumbnail-slide",style:{width:e.size+"px",height:e.size*e.viewportRatio+"px"}},[Object(j["createVNode"])("div",{class:"elements",style:{width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")}},[Object(j["createVNode"])("div",{class:"background",style:e.backgroundStyle},null,4),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:e.id,elementInfo:e,elementIndex:t+1},null,8,["elementInfo","elementIndex"])})),128))],4)],4)}));function hl(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element",style:{zIndex:e.elementIndex}},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,target:"thumbnail"},null,8,["elementInfo"]))],4)}var jl=Object(j["withScopeId"])("data-v-b0d4d1b2"),gl=jl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ImageOutline");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-image",style:{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["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["createVNode"])("div",{class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}},[Object(j["createVNode"])(r,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(j["createVNode"])("div",{class:"image-content",style:{clipPath:e.clipShape.style}},[Object(j["createVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:{top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter},alt:""},null,12,["src"])],4)],4)],4)],4)})),yl=Object(j["defineComponent"])({name:"base-element-image",components:{ImageOutline:Xn},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=Sn(t),o=n.shadowStyle,c=Object(j["computed"])((function(){return e.elementInfo.flipH})),a=Object(j["computed"])((function(){return e.elementInfo.flipV})),r=Cn(c,a),l=r.flipStyle,i=Object(j["computed"])((function(){return e.elementInfo.clip})),u=Tn(i),d=u.clipShape,s=u.imgPosition,f=Object(j["computed"])((function(){return e.elementInfo.filters})),p=xn(f),b=p.filter;return{imgPosition:s,filter:b,flipStyle:l,shadowStyle:o,clipShape:d}}});n("a576");yl.render=gl,yl.__scopeId="data-v-b0d4d1b2";var El=yl,kl=Object(j["withScopeId"])("data-v-2ec235c4"),Il=kl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-text",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["createVNode"])("div",{class:"element-content",style:{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"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])("div",{class:"text ProseMirror-static",innerHTML:e.elementInfo.content},null,8,["innerHTML"])],4)],4)],4)})),Sl=Object(j["defineComponent"])({name:"base-element-text",components:{ElementOutline:oc},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=Sn(t),o=n.shadowStyle;return{shadowStyle:o}}});n("5264");Sl.render=Il,Sl.__scopeId="data-v-2ec235c4";var Cl=Sl,Nl=Object(j["withScopeId"])("data-v-6fef68fd");Object(j["pushScopeId"])("data-v-6fef68fd");var Tl={key:0};Object(j["popScopeId"])();var xl=Nl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("GradientDefs"),l=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-shape",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"rotate-wrapper",style:{transform:"rotate(".concat(e.elementInfo.rotate,"deg)")}},[Object(j["createVNode"])("div",{class:"element-content",style:{opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}},[Object(j["createVNode"])(l,{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},{default:Nl((function(){return[e.elementInfo.gradient?(Object(j["openBlock"])(),Object(j["createBlock"])("defs",Tl,[Object(j["createVNode"])(r,{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["createVNode"])("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["createVNode"])("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,["d","fill","stroke","stroke-width","stroke-dasharray"])],8,["transform"])]})),_:1},8,["width","height"])],4)],4)],4)})),Ll=Object(j["defineComponent"])({name:"base-element-shape",components:{GradientDefs:sc},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.outline})),n=Bn(t),o=n.outlineWidth,c=n.outlineStyle,a=n.outlineColor,r=Object(j["computed"])((function(){return e.elementInfo.shadow})),l=Sn(r),i=l.shadowStyle,u=Object(j["computed"])((function(){return e.elementInfo.flipH})),d=Object(j["computed"])((function(){return e.elementInfo.flipV})),s=Cn(u,d),f=s.flipStyle;return{shadowStyle:i,outlineWidth:o,outlineStyle:c,outlineColor:a,flipStyle:f}}});n("9569");Ll.render=xl,Ll.__scopeId="data-v-6fef68fd";var wl=Ll,Vl=Object(j["withScopeId"])("data-v-56b0510c"),_l=Vl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("LinePointMarker"),l=Object(j["resolveComponent"])("SvgWrapper");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"editable-element-shape",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""}},[Object(j["createVNode"])(l,{overflow:"visible",width:e.svgWidth,height:e.svgHeight},{default:Vl((function(){return[Object(j["createVNode"])("defs",null,[e.elementInfo.points[0]?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{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"])(r,{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["createVNode"])("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,["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"])]})),_:1},8,["width","height"])],4)],4)})),Bl=Object(j["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:gc},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(j["computed"])((function(){return e.elementInfo.shadow})),n=Sn(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})),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, 5":"0, 0"})),l=Object(j["computed"])((function(){var t=e.elementInfo.start.join(","),n=e.elementInfo.end.join(",");if(e.elementInfo.broken){var o=e.elementInfo.broken.join(",");return"M".concat(t," L").concat(o," L").concat(n)}if(e.elementInfo.curve){var c=e.elementInfo.curve.join(",");return"M".concat(t," Q").concat(c," ").concat(n)}return"M".concat(t," L").concat(n)}));return{shadowStyle:o,svgWidth:c,svgHeight:a,lineDashArray:r,path:l}}});n("387f");Bl.render=_l,Bl.__scopeId="data-v-56b0510c";var Dl=Bl,Ml=Object(j["withScopeId"])("data-v-2d25f60a"),Al=Ml((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline"),l=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["createBlock"])("div",{class:"base-element-chart",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{backgroundColor:e.elementInfo.fill}},[Object(j["createVNode"])(r,{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"])(l,{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)})),Pl=Object(j["defineComponent"])({name:"base-element-chart",components:{ElementOutline:oc},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");Pl.render=Al,Pl.__scopeId="data-v-2d25f60a";var Rl=Pl,Fl=Object(j["withScopeId"])("data-v-dea016ac");Object(j["pushScopeId"])("data-v-dea016ac");var Hl={class:"element-content"};Object(j["popScopeId"])();var zl=Fl((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("StaticTable");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"base-element-table",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"}},[Object(j["createVNode"])("div",Hl,[Object(j["createVNode"])(r,{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)})),Ul=Object(j["withScopeId"])("data-v-01f791ba"),Gl=Ul((function(e,t,n,o,c,a){var r,l,i,u,d;return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"static-table",style:{width:e.totalWidth+"px"}},[Object(j["createVNode"])("table",{class:{theme:e.theme,"row-header":null===(r=e.theme)||void 0===r?void 0:r.rowHeader,"row-footer":null===(l=e.theme)||void 0===l?void 0:l.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:"--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["createVNode"])("colgroup",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.colSizeList,(function(e,t){return Object(j["openBlock"])(),Object(j["createBlock"])("col",{span:"1",key:t,width:e},null,8,["width"])})),128))]),Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.data,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("tr",{key:n},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t,o){return Object(j["withDirectives"])((Object(j["openBlock"])(),Object(j["createBlock"])("td",{class:"cell",style:Object(F["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["createVNode"])("div",{class:"cell-text",innerHTML:t.text},null,8,["innerHTML"])],12,["rowspan","colspan"])),[[j["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))]])})),128))])})),128))])],6)],4)})),ql=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=qc(o),a=c.hideCells,r=Object(j["computed"])((function(){return e.theme})),l=Xc(r),i=l.subThemeColor;return{colSizeList:t,totalWidth:n,hideCells:a,getTextStyle:Gc,subThemeColor:i}}});n("1726");ql.render=Gl,ql.__scopeId="data-v-01f791ba";var Xl=ql,Wl=Object(j["defineComponent"])({name:"base-element-table",components:{StaticTable:Xl},props:{elementInfo:{type:Object,required:!0}}});n("ba04");Wl.render=zl,Wl.__scopeId="data-v-dea016ac";var Yl=Wl,Zl=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(T["a"])(t,jn.IMAGE,El),Object(T["a"])(t,jn.TEXT,Cl),Object(T["a"])(t,jn.SHAPE,wl),Object(T["a"])(t,jn.LINE,Dl),Object(T["a"])(t,jn.CHART,Rl),Object(T["a"])(t,jn.TABLE,Yl),t);return n[e.elementInfo.type]||null}));return{currentElementComponent:t}}});Zl.render=hl;var Jl=Zl,Kl=Object(j["defineComponent"])({name:"thumbnail-slide",components:{ThumbnailElement:Jl},props:{slide:{type:Object,required:!0},size:{type:Number,required:!0}},setup:function(e){var t=Z(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=pa(o),a=c.backgroundStyle,r=Object(j["computed"])((function(){return e.size/we}));return{scale:r,backgroundStyle:a,VIEWPORT_SIZE:we,viewportRatio:n}}});n("2b61");Kl.render=Ol,Kl.__scopeId="data-v-4e59015e";var Ql=Kl,$l=Object(j["defineComponent"])({name:"thumbnails",components:{Draggable:ml.a,ThumbnailSlide:Ql},setup:function(){var e=Z(),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})),a=Object(j["computed"])((function(){return[].concat(Object(R["a"])(e.state.selectedSlidesIndex),[n.value])})),r=Be(),l=r.copySlide,i=r.pasteSlide,u=r.createSlide,d=r.copyAndPasteSlide,s=r.deleteSlide,f=r.cutSlide,p=r.selectAllSlide,b=function(t){e.commit(y.SET_ACTIVE_ELEMENT_ID_LIST,[]),n.value!==t&&e.commit(y.UPDATE_SLIDE_INDEX,t)},m=function(t,r){var l=a.value.length>1;if(!l||!a.value.includes(r)||0===t.button)if(o.value)if(n.value===r){if(!l)return;var i=a.value.filter((function(e){return e!==r}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,i),b(a.value[0])}else if(a.value.includes(r)){var u=a.value.filter((function(e){return e!==r}));e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,u)}else{var d=[].concat(Object(R["a"])(a.value),[r]);e.commit(y.UPDATE_SELECTED_SLIDES_INDEX,d),b(r)}else if(c.value){if(n.value===r&&!l)return;var s=Math.min.apply(Math,Object(R["a"])(a.value)),f=r;r1&&void 0!==arguments[1]?arguments[1]:0,c=u(),a=c.originClipRange,l=c.originWidth,d=c.originHeight,s=c.originLeft,f=c.originTop;if(o){var p,b=d/l,m=0,v=100;if(b>o){var O=(1-o/b)/2*100;p=[[m,O],[v,v-O]]}else{var h=(1-b/o)/2*100;p=[[h,m],[v-h,v]]}e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{clip:Object(F["a"])(Object(F["a"])({},t.value.clip),{},{shape:n,range:p}),left:s+l*(p[0][0]/100),top:f+d*(p[0][1]/100),width:l*(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(F["a"])(Object(F["a"])({},t.value.clip),{},{shape:n,range:a})}});i(),r()},s=function(n){var o=n[0];o&&(Le(o).then((function(n){var o={src:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o})})),r())},f=function(){if(t.value.clip){var n=u(),o=n.originWidth,c=n.originHeight,a=n.originLeft,l=n.originTop;e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:{left:a,top:l,width:o,height:c}})}e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:["clip","outline","flip","shadow","filters"]}),r()},p=function(){var o=Object(F["a"])(Object(F["a"])({},n.value.background),{},{type:"image",image:t.value.src,imageSize:"cover"});e.commit(y.UPDATE_SLIDE,{background:o}),r()};return{clipPanelVisible:o,shapeClipPathOptions:Bu,ratioClipOptions:Du,filterOptions:c,handleElement:t,updateFilter:l,clipImage:i,presetImageClip:d,replaceImage:s,resetImage:f,setBackgroundImage:p}}});n("83fa");Mu.render=Su,Mu.__scopeId="data-v-c1cc1cba";var Au=Mu,Pu=Object(j["withScopeId"])("data-v-998a7a02");Object(j["pushScopeId"])("data-v-998a7a02");var Ru={class:"shape-style-panel"},Fu={class:"row"},Hu=Object(j["createTextVNode"])("纯色填充"),zu=Object(j["createTextVNode"])("渐变填充"),Uu=Object(j["createVNode"])("div",{style:{flex:"1"}},null,-1),Gu=Object(j["createTextVNode"])("线性渐变"),qu=Object(j["createTextVNode"])("径向渐变"),Xu={class:"row"},Wu=Object(j["createVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),Yu={class:"row"},Zu=Object(j["createVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Ju={key:0,class:"row"},Ku=Object(j["createVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1);Object(j["popScopeId"])();var Qu=Pu((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SelectOption"),l=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"),b=Object(j["resolveComponent"])("ElementOutline"),m=Object(j["resolveComponent"])("ElementShadow"),v=Object(j["resolveComponent"])("ElementOpacity");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Ru,[Object(j["createVNode"])("div",Fu,[Object(j["createVNode"])(l,{style:{flex:"10"},value:e.fillType,onChange:t[1]||(t[1]=function(t){return e.updateFillType(t)})},{default:Pu((function(){return[Object(j["createVNode"])(r,{value:"fill"},{default:Pu((function(){return[Hu]})),_:1}),Object(j["createVNode"])(r,{value:"gradient"},{default:Pu((function(){return[zu]})),_:1})]})),_:1},8,["value"]),Uu,"fill"===e.fillType?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:Pu((function(){return[Object(j["createVNode"])(i,{modelValue:e.fill,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Pu((function(){return[Object(j["createVNode"])(u,{color:e.fill,style:{flex:"10"}},null,8,["color"])]})),_:1})):(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:1,style:{flex:"10"},value:e.gradient.type,onChange:t[3]||(t[3]=function(t){return e.updateGradient({type:t})})},{default:Pu((function(){return[Object(j["createVNode"])(r,{value:"linear"},{default:Pu((function(){return[Gu]})),_:1}),Object(j["createVNode"])(r,{value:"radial"},{default:Pu((function(){return[qu]})),_:1})]})),_:1},8,["value"]))]),"gradient"===e.fillType?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",Xu,[Wu,Object(j["createVNode"])(d,{trigger:"click"},{content:Pu((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[0],"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateGradient({color:[t,e.gradient.color[1]]})})},null,8,["modelValue"])]})),default:Pu((function(){return[Object(j["createVNode"])(u,{color:e.gradient.color[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Yu,[Zu,Object(j["createVNode"])(d,{trigger:"click"},{content:Pu((function(){return[Object(j["createVNode"])(i,{modelValue:e.gradient.color[1],"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.updateGradient({color:[e.gradient.color[0],t]})})},null,8,["modelValue"])]})),default:Pu((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["createBlock"])("div",Ju,[Ku,Object(j["createVNode"])(s,{min:0,max:360,step:15,value:e.gradient.rotate,style:{flex:"3"},onChange:t[6]||(t[6]=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),Object(j["createVNode"])(b),Object(j["createVNode"])(p),Object(j["createVNode"])(m),Object(j["createVNode"])(p),Object(j["createVNode"])(v)])})),$u=Object(j["defineComponent"])({name:"shape-style-panel",components:{ElementOpacity:Ii,ElementOutline:Gi,ElementShadow:ru,ElementFlip:Vu,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(),o=Object(j["ref"])(),c=Object(j["ref"])("fill");Object(j["watch"])(t,(function(){t.value&&"shape"===t.value.type&&(n.value=t.value.fill||"#000",o.value=t.value.gradient||{type:"linear",rotate:0,color:[n.value,"#fff"]},c.value=t.value.gradient?"gradient":"fill")}),{deep:!0,immediate:!0});var a=Te(),r=a.addHistorySnapshot,l=function(n){if("fill"===n)e.commit(y.REMOVE_ELEMENT_PROPS,{id:t.value.id,propName:"gradient"});else{var c={gradient:o.value};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c})}r()},i=function(n){var c={gradient:Object(F["a"])(Object(F["a"])({},o.value),n)};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:c}),r()},u=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),r()};return{fill:n,gradient:o,fillType:c,updateFillType:l,updateFill:u,updateGradient:i}}});n("6f16");$u.render=Qu,$u.__scopeId="data-v-998a7a02";var ed=$u,td=Object(j["withScopeId"])("data-v-65b24fb3");Object(j["pushScopeId"])("data-v-65b24fb3");var nd={class:"line-style-panel"},od={class:"row"},cd=Object(j["createVNode"])("div",{style:{flex:"2"}},"线条样式:",-1),ad=Object(j["createTextVNode"])("实线"),rd=Object(j["createTextVNode"])("虚线"),ld={class:"row"},id=Object(j["createVNode"])("div",{style:{flex:"2"}},"线条颜色:",-1),ud={class:"row"},dd=Object(j["createVNode"])("div",{style:{flex:"2"}},"线条宽度:",-1),sd={class:"row"},fd=Object(j["createVNode"])("div",{style:{flex:"2"}},"起点样式:",-1),pd=Object(j["createTextVNode"])("无"),bd=Object(j["createTextVNode"])("箭头"),md=Object(j["createTextVNode"])("圆点"),vd={class:"row"},Od=Object(j["createVNode"])("div",{style:{flex:"2"}},"终点样式:",-1),hd=Object(j["createTextVNode"])("无"),jd=Object(j["createTextVNode"])("箭头"),gd=Object(j["createTextVNode"])("圆点");Object(j["popScopeId"])();var yd=td((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SelectOption"),l=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["createBlock"])("div",nd,[Object(j["createVNode"])("div",od,[cd,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.handleElement.style,onChange:t[1]||(t[1]=function(t){return e.updateLine({style:t})})},{default:td((function(){return[Object(j["createVNode"])(r,{value:"solid"},{default:td((function(){return[ad]})),_:1}),Object(j["createVNode"])(r,{value:"dashed"},{default:td((function(){return[rd]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])("div",ld,[id,Object(j["createVNode"])(d,{trigger:"click"},{content:td((function(){return[Object(j["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateLine({color:t})})},null,8,["modelValue"])]})),default:td((function(){return[Object(j["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",ud,[dd,Object(j["createVNode"])(s,{value:e.handleElement.width,onChange:t[3]||(t[3]=function(t){return e.updateLine({width:t})}),style:{flex:"3"}},null,8,["value"])]),Object(j["createVNode"])("div",sd,[fd,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.handleElement.points[0],onChange:t[4]||(t[4]=function(t){return e.updateLine({points:[t,e.handleElement.points[1]]})})},{default:td((function(){return[Object(j["createVNode"])(r,{value:""},{default:td((function(){return[pd]})),_:1}),Object(j["createVNode"])(r,{value:"arrow"},{default:td((function(){return[bd]})),_:1}),Object(j["createVNode"])(r,{value:"dot"},{default:td((function(){return[md]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])("div",vd,[Od,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.handleElement.points[1],onChange:t[5]||(t[5]=function(t){return e.updateLine({points:[e.handleElement.points[0],t]})})},{default:td((function(){return[Object(j["createVNode"])(r,{value:""},{default:td((function(){return[hd]})),_:1}),Object(j["createVNode"])(r,{value:"arrow"},{default:td((function(){return[jd]})),_:1}),Object(j["createVNode"])(r,{value:"dot"},{default:td((function(){return[gd]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])(f),Object(j["createVNode"])(p)])})),Ed=Object(j["defineComponent"])({name:"line-style-panel",components:{ElementShadow:ru,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Te(),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");Ed.render=yd,Ed.__scopeId="data-v-65b24fb3";var kd=Ed,Id=Object(j["withScopeId"])("data-v-62789f0d");Object(j["pushScopeId"])("data-v-62789f0d");var Sd={class:"chart-style-panel"},Cd=Object(j["createTextVNode"])(" 编辑图表数据 "),Nd={class:"row"},Td=Object(j["createTextVNode"])("面积图样式"),xd=Object(j["createTextVNode"])("散点图样式"),Ld={class:"row"},wd=Object(j["createTextVNode"])("使用平滑曲线"),Vd={key:1,class:"row"},_d=Object(j["createTextVNode"])("条形图样式"),Bd={key:2,class:"row"},Dd=Object(j["createTextVNode"])("环形图样式"),Md={class:"row"},Ad=Object(j["createVNode"])("div",{style:{flex:"2"}},"背景填充:",-1),Pd={class:"row"},Rd=Object(j["createVNode"])("div",{style:{flex:"2"}},"主题配色:",-1),Fd={class:"row"},Hd=Object(j["createVNode"])("div",{style:{flex:"2"}},"网格颜色:",-1);Object(j["popScopeId"])();var zd=Id((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconEdit"),l=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"])("ElementOutline"),b=Object(j["resolveComponent"])("ChartDataEditor"),m=Object(j["resolveComponent"])("Modal");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Sd,[Object(j["createVNode"])(l,{class:"full-width-btn",onClick:t[1]||(t[1]=function(t){return e.chartDataEditorVisible=!0})},{default:Id((function(){return[Object(j["createVNode"])(r,{class:"btn-icon"}),Cd]})),_:1}),Object(j["createVNode"])(i),"line"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",Nd,[Object(j["createVNode"])(u,{onChange:t[2]||(t[2]=function(t){return e.updateOptions({showArea:t.target.checked})}),checked:e.showArea,style:{flex:"1"}},{default:Id((function(){return[Td]})),_:1},8,["checked"]),Object(j["createVNode"])(u,{onChange:t[3]||(t[3]=function(t){return e.updateOptions({showLine:!t.target.checked})}),checked:!e.showLine,style:{flex:"1"}},{default:Id((function(){return[xd]})),_:1},8,["checked"])]),Object(j["createVNode"])("div",Ld,[Object(j["createVNode"])(u,{onChange:t[4]||(t[4]=function(t){return e.updateOptions({lineSmooth:t.target.checked})}),checked:e.lineSmooth},{default:Id((function(){return[wd]})),_:1},8,["checked"])])],64)):Object(j["createCommentVNode"])("",!0),"bar"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Vd,[Object(j["createVNode"])(u,{onChange:t[5]||(t[5]=function(t){return e.updateOptions({horizontalBars:t.target.checked})}),checked:e.horizontalBars},{default:Id((function(){return[_d]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),"pie"===e.handleElement.chartType?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Bd,[Object(j["createVNode"])(u,{onChange:t[6]||(t[6]=function(t){return e.updateOptions({donut:t.target.checked})}),checked:e.donut},{default:Id((function(){return[Dd]})),_:1},8,["checked"])])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(i),Object(j["createVNode"])("div",Md,[Ad,Object(j["createVNode"])(f,{trigger:"click"},{content:Id((function(){return[Object(j["createVNode"])(d,{modelValue:e.fill,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Id((function(){return[Object(j["createVNode"])(s,{color:e.fill,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Pd,[Rd,Object(j["createVNode"])(f,{trigger:"click"},{content:Id((function(){return[Object(j["createVNode"])(d,{modelValue:e.themeColor,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.updateTheme(t)})},null,8,["modelValue"])]})),default:Id((function(){return[Object(j["createVNode"])(s,{color:e.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Fd,[Hd,Object(j["createVNode"])(f,{trigger:"click"},{content:Id((function(){return[Object(j["createVNode"])(d,{modelValue:e.gridColor,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.updateGridColor(t)})},null,8,["modelValue"])]})),default:Id((function(){return[Object(j["createVNode"])(s,{color:e.gridColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])(i),Object(j["createVNode"])(p),Object(j["createVNode"])(m,{visible:e.chartDataEditorVisible,"onUpdate:visible":t[12]||(t[12]=function(t){return e.chartDataEditorVisible=t}),footer:null,centered:"",closable:!1,width:648,destroyOnClose:""},{default:Id((function(){return[Object(j["createVNode"])(b,{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"])])})),Ud=Object(j["withScopeId"])("data-v-42e69ec4");Object(j["pushScopeId"])("data-v-42e69ec4");var Gd={class:"chart-data-editor"},qd={class:"editor-content"},Xd={class:"range-box"},Wd={class:"btns"},Yd=Object(j["createTextVNode"])("取消"),Zd=Object(j["createTextVNode"])("确认");Object(j["popScopeId"])();var Jd=Ud((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Gd,[Object(j["createVNode"])("div",qd,[Object(j["createVNode"])("div",Xd,[Object(j["createVNode"])("div",{class:"temp-range",style:{width:e.tempRangeSize.width+"px",height:e.tempRangeSize.height+"px"}},null,4),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.rangeLines,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["range-line",e.type],key:e.type,style:e.style},null,6)})),128)),Object(j["createVNode"])("div",{class:"resizable",style:e.resizablePointStyle,onMousedown:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.changeSelectRange(t)}),["stop"]))},null,36)]),Object(j["createVNode"])("table",null,[Object(j["createVNode"])("tbody",null,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(30,(function(t){return Object(j["createVNode"])("tr",{key:t},[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(7,(function(n){return Object(j["createVNode"])("td",{key:n,class:{head:1===n&&t<=e.selectedRange[1]}},[Object(j["createVNode"])("input",{class:["item",{selected:t<=e.selectedRange[1]&&n<=e.selectedRange[0]}],id:"cell-".concat(t-1,"-").concat(n-1),autocomplete:"off"},null,10,["id"])],2)})),64))])})),64))])])]),Object(j["createVNode"])("div",Wd,[Object(j["createVNode"])(r,{class:"btn",onClick:t[2]||(t[2]=function(t){return e.closeEditor()})},{default:Ud((function(){return[Yd]})),_:1}),Object(j["createVNode"])(r,{type:"primary",class:"btn",onClick:t[3]||(t[3]=function(t){return e.getTableData()})},{default:Ud((function(){return[Zd]})),_:1})])])})),Kd=100,Qd=32,$d=Object(j["defineComponent"])({name:"chart-data-editor",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}),a=Object(j["computed"])((function(){var e=o.value[0]*Kd,t=o.value[1]*Qd;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]*Kd,t=o.value[1]*Qd;return{left:e+"px",top:t+"px"}})),l=function(){for(var t=[],n=e.data,c=n.labels,a=n.series,r=c.length,l=a.length,i=0;i.5*Kd&&(i+=Kd-i%Kd),u%Qd>.5*Qd&&(u+=Qd-u%Qd);var d=Math.round(u/Qd),s=Math.round(i/Kd);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,changeSelectRange:d,selectedRange:o,getTableData:i,closeEditor:u}}});n("f14f");$d.render=Jd,$d.__scopeId="data-v-42e69ec4";var es=$d,ts=Object(j["defineComponent"])({name:"chart-style-panel",components:{ElementOutline:Gi,ChartDataEditor:es,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(!1),o=Te(),c=o.addHistorySnapshot,a=Object(j["ref"])(),r=Object(j["ref"])(""),l=Object(j["ref"])(""),i=Object(j["ref"])(!0),u=Object(j["ref"])(!0),d=Object(j["ref"])(!1),s=Object(j["ref"])(!1),f=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,p=e.horizontalBars,b=e.donut;void 0!==n&&(i.value=n),void 0!==o&&(u.value=o),void 0!==c&&(d.value=c),void 0!==p&&(s.value=p),void 0!==b&&(f.value=b)}r.value=t.value.themeColor,l.value=t.value.gridColor||"rgba(0, 0, 0, 0.4)"}}),{deep:!0,immediate:!0});var p=function(o){n.value=!1;var a={data:o};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:a}),c()},b=function(n){var o={fill:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),c()},m=function(n){var o=t.value.options||{},a=Object(F["a"])(Object(F["a"])({},o),n),r={options:a};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:r}),c()},v=function(n){var o={themeColor:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),c()},O=function(n){var o={gridColor:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),c()};return{chartDataEditorVisible:n,handleElement:t,updateData:p,fill:a,updateFill:b,lineSmooth:i,showLine:u,showArea:d,horizontalBars:s,donut:f,updateOptions:m,themeColor:r,gridColor:l,updateTheme:v,updateGridColor:O}}});n("89f5");ts.render=zd,ts.__scopeId="data-v-62789f0d";var ns=ts,os=Object(j["withScopeId"])("data-v-2db32cac");Object(j["pushScopeId"])("data-v-2db32cac");var cs={class:"table-style-panel"},as={class:"row"},rs=Object(j["createVNode"])("div",{style:{flex:"2"}},"行数:",-1),ls={class:"row"},is=Object(j["createVNode"])("div",{style:{flex:"2"}},"列数:",-1),us={class:"row theme-switch"},ds=Object(j["createVNode"])("div",{style:{flex:"2"}},"启用主题表格:",-1),ss={class:"switch-wrapper",style:{flex:"3"}},fs={class:"row"},ps=Object(j["createTextVNode"])("标题行"),bs=Object(j["createTextVNode"])("汇总行"),ms={class:"row"},vs=Object(j["createTextVNode"])("第一列"),Os=Object(j["createTextVNode"])("最后一列"),hs={class:"row"},js=Object(j["createVNode"])("div",{style:{flex:"2"}},"主题颜色:",-1);Object(j["popScopeId"])();var gs=os((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconFontSize"),l=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"),b=Object(j["resolveComponent"])("Button"),m=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"),k=Object(j["resolveComponent"])("IconTextUnderline"),I=Object(j["resolveComponent"])("IconStrikethrough"),S=Object(j["resolveComponent"])("CheckboxButtonGroup"),C=Object(j["resolveComponent"])("IconAlignTextLeft"),N=Object(j["resolveComponent"])("RadioButton"),T=Object(j["resolveComponent"])("IconAlignTextCenter"),x=Object(j["resolveComponent"])("IconAlignTextRight"),L=Object(j["resolveComponent"])("RadioGroup"),w=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["createBlock"])("div",cs,[Object(j["createVNode"])(s,{compact:"",class:"row"},{default:os((function(){return[Object(j["createVNode"])(u,{style:{flex:"3"},value:e.textAttrs.fontname,onChange:t[1]||(t[1]=function(t){return e.updateTextAttrs({fontname:t})})},{suffixIcon:os((function(){return[Object(j["createVNode"])(r)]})),default:os((function(){return[Object(j["createVNode"])(i,{label:"系统字体"},{default:os((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.availableFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:e.value,value:e.value},{default:os((function(){return[Object(j["createVNode"])("span",{style:{fontFamily:e.value}},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(i,{label:"在线字体"},{default:os((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.webFonts,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:e.value,value:e.value},{default:os((function(){return[Object(j["createVNode"])("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[2]||(t[2]=function(t){return e.updateTextAttrs({fontsize:t})})},{suffixIcon:os((function(){return[Object(j["createVNode"])(d)]})),default:os((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.fontSizeOptions,(function(e){return Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:e,value:e},{default:os((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:os((function(){return[Object(j["createVNode"])(v,{trigger:"click"},{content:os((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.color,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateTextAttrs({color:t})})},null,8,["modelValue"])]})),default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:os((function(){return[Object(j["createVNode"])(b,{class:"text-color-btn",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(p),Object(j["createVNode"])("div",{class:"text-color-block",style:{backgroundColor:e.textAttrs.color}},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(v,{trigger:"click"},{content:os((function(){return[Object(j["createVNode"])(f,{modelValue:e.textAttrs.backcolor,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateTextAttrs({backcolor:t})})},null,8,["modelValue"])]})),default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"单元格填充"},{default:os((function(){return[Object(j["createVNode"])(b,{class:"text-color-btn",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(O),Object(j["createVNode"])("div",{class:"text-color-block",style:{backgroundColor:e.textAttrs.backcolor}},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(j["createVNode"])(S,{class:"row"},{default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.bold,onClick:t[5]||(t[5]=function(t){return e.updateTextAttrs({bold:!e.textAttrs.bold})})},{default:os((function(){return[Object(j["createVNode"])(g)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.em,onClick:t[6]||(t[6]=function(t){return e.updateTextAttrs({em:!e.textAttrs.em})})},{default:os((function(){return[Object(j["createVNode"])(E)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.underline,onClick:t[7]||(t[7]=function(t){return e.updateTextAttrs({underline:!e.textAttrs.underline})})},{default:os((function(){return[Object(j["createVNode"])(k)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除线"},{default:os((function(){return[Object(j["createVNode"])(y,{style:{flex:"1"},checked:e.textAttrs.strikethrough,onClick:t[8]||(t[8]=function(t){return e.updateTextAttrs({strikethrough:!e.textAttrs.strikethrough})})},{default:os((function(){return[Object(j["createVNode"])(I)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(L,{class:"row","button-style":"solid",value:e.textAttrs.align,onChange:t[9]||(t[9]=function(t){return e.updateTextAttrs({align:t.target.value})})},{default:os((function(){return[Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:os((function(){return[Object(j["createVNode"])(N,{value:"left",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(C)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:os((function(){return[Object(j["createVNode"])(N,{value:"center",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(T)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:os((function(){return[Object(j["createVNode"])(N,{value:"right",style:{flex:"1"}},{default:os((function(){return[Object(j["createVNode"])(x)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(j["createVNode"])(w),Object(j["createVNode"])(V,{fixed:!0}),Object(j["createVNode"])(w),Object(j["createVNode"])("div",as,[rs,Object(j["createVNode"])(_,{min:e.minRowCount,max:20,value:e.rowCount,"onUpdate:value":t[10]||(t[10]=function(t){return e.rowCount=t}),onPressEnter:t[11]||(t[11]=function(t){return e.setTableRow(t)}),onBlur:t[12]||(t[12]=function(t){return e.setTableRow(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createVNode"])("div",ls,[is,Object(j["createVNode"])(_,{min:e.minColCount,max:20,value:e.colCount,"onUpdate:value":t[13]||(t[13]=function(t){return e.colCount=t}),onPressEnter:t[14]||(t[14]=function(t){return e.setTableCol(t)}),onBlur:t[15]||(t[15]=function(t){return e.setTableCol(t)}),style:{flex:"3"}},null,8,["min","value"])]),Object(j["createVNode"])(w),Object(j["createVNode"])("div",us,[ds,Object(j["createVNode"])("div",ss,[Object(j["createVNode"])(B,{checked:e.hasTheme,onChange:t[16]||(t[16]=function(t){return e.toggleTheme(t)})},null,8,["checked"])])]),e.hasTheme?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",fs,[Object(j["createVNode"])(D,{onChange:t[17]||(t[17]=function(t){return e.updateTheme({rowHeader:t.target.checked})}),checked:e.theme.rowHeader,style:{flex:"1"}},{default:os((function(){return[ps]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[18]||(t[18]=function(t){return e.updateTheme({rowFooter:t.target.checked})}),checked:e.theme.rowFooter,style:{flex:"1"}},{default:os((function(){return[bs]})),_:1},8,["checked"])]),Object(j["createVNode"])("div",ms,[Object(j["createVNode"])(D,{onChange:t[19]||(t[19]=function(t){return e.updateTheme({colHeader:t.target.checked})}),checked:e.theme.colHeader,style:{flex:"1"}},{default:os((function(){return[vs]})),_:1},8,["checked"]),Object(j["createVNode"])(D,{onChange:t[20]||(t[20]=function(t){return e.updateTheme({colFooter:t.target.checked})}),checked:e.theme.colFooter,style:{flex:"1"}},{default:os((function(){return[Os]})),_:1},8,["checked"])]),Object(j["createVNode"])("div",hs,[js,Object(j["createVNode"])(v,{trigger:"click"},{content:os((function(){return[Object(j["createVNode"])(f,{modelValue:e.theme.color,"onUpdate:modelValue":t[21]||(t[21]=function(t){return e.updateTheme({color:t})})},null,8,["modelValue"])]})),default:os((function(){return[Object(j["createVNode"])(M,{color:e.theme.color,style:{flex:"3"}},null,8,["color"])]})),_:1})])],64)):Object(j["createCommentVNode"])("",!0)])})),ys=G,Es=Object(j["defineComponent"])({name:"table-style-panel",components:{ElementOutline:Gi,ColorButton:zi},setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["computed"])((function(){return e.state.availableFonts})),o=["12px","14px","16px","18px","20px","22px","24px","28px","32px"],c=Object(j["ref"])({bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}),a=Object(j["ref"])(),r=Object(j["ref"])(!1),l=Object(j["ref"])(0),i=Object(j["ref"])(0),u=Object(j["ref"])(0),d=Object(j["ref"])(0);Object(j["watch"])(t,(function(){t.value&&"table"===t.value.type&&(a.value=t.value.theme,r.value=!!a.value,l.value=t.value.data.length,i.value=t.value.data[0].length,u.value=t.value.data.length,d.value=t.value.data[0].length)}),{deep:!0,immediate:!0});var s=Te(),f=s.addHistorySnapshot,p=Object(j["ref"])([]),b=function(){if(t.value){var e=0,n=0;if(p.value.length){var o=p.value[0];e=+o.split("_")[0],n=+o.split("_")[1]}var a=t.value.data[e][n].style;c.value=a?{bold:!!a.bold,em:!!a.em,underline:!!a.underline,strikethrough:!!a.strikethrough,color:a.color||"#000",backcolor:a.backcolor||"#000",fontsize:a.fontsize||"12px",fontname:a.fontname||"微软雅黑",align:a.align||"left"}:{bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}}},m=function(e){p.value=e,b()};cn.on(Ut.UPDATE_TABLE_SELECTED_CELL,(function(e){return m(e)})),Object(j["onUnmounted"])((function(){cn.off(Ut.UPDATE_TABLE_SELECTED_CELL,(function(e){return m(e)}))}));var v=function(n){for(var o=JSON.parse(JSON.stringify(t.value.data)),c=0;c
X
Y
',1),Vs={class:"row"},_s=Object(j["createVNode"])("div",{style:{flex:"3"}},"大小:",-1),Bs={key:1,style:{flex:"1"}},Ds=Object(j["createStaticVNode"])('
',1),Ms={class:"row"},As=Object(j["createVNode"])("div",{style:{flex:"3"}},"旋转:",-1),Ps=Object(j["createVNode"])("div",{style:{flex:"1"}},null,-1);Object(j["popScopeId"])();var Rs=Cs((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconSendToBack"),l=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconBringToFrontOne"),d=Object(j["resolveComponent"])("IconBringToFront"),s=Object(j["resolveComponent"])("IconSentToBack"),f=Object(j["resolveComponent"])("ButtonGroup"),p=Object(j["resolveComponent"])("IconAlignLeft"),b=Object(j["resolveComponent"])("IconAlignVertically"),m=Object(j["resolveComponent"])("IconAlignRight"),v=Object(j["resolveComponent"])("IconAlignTop"),O=Object(j["resolveComponent"])("IconAlignHorizontally"),h=Object(j["resolveComponent"])("IconAlignBottom"),g=Object(j["resolveComponent"])("Divider"),y=Object(j["resolveComponent"])("InputNumber"),E=Object(j["resolveComponent"])("IconLock"),k=Object(j["resolveComponent"])("IconUnlock"),I=Object(j["resolveComponent"])("IconRotate");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Ns,[Object(j["createVNode"])(f,{class:"row"},{default:Cs((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"置顶层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.orderElement(e.handleElement,"top")})},{default:Cs((function(){return[Object(j["createVNode"])(r)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"置底层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.orderElement(e.handleElement,"bottom")})},{default:Cs((function(){return[Object(j["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上移一层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.orderElement(e.handleElement,"up")})},{default:Cs((function(){return[Object(j["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下移一层"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.orderElement(e.handleElement,"down")})},{default:Cs((function(){return[Object(j["createVNode"])(s)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(f,{class:"row"},{default:Cs((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElementToCanvas("left")})},{default:Cs((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElementToCanvas("horizontal")})},{default:Cs((function(){return[Object(j["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.alignElementToCanvas("right")})},{default:Cs((function(){return[Object(j["createVNode"])(m)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(f,{class:"row"},{default:Cs((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.alignElementToCanvas("top")})},{default:Cs((function(){return[Object(j["createVNode"])(v)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.alignElementToCanvas("vertical")})},{default:Cs((function(){return[Object(j["createVNode"])(O)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Cs((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[10]||(t[10]=function(t){return e.alignElementToCanvas("bottom")})},{default:Cs((function(){return[Object(j["createVNode"])(h)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(g),Object(j["createVNode"])("div",Ts,[xs,Object(j["createVNode"])(y,{step:5,value:e.left,onChange:t[11]||(t[11]=function(t){return e.updateLeft(t)}),style:{flex:"4"}},null,8,["value"]),Ls,Object(j["createVNode"])(y,{step:5,value:e.top,onChange:t[12]||(t[12]=function(t){return e.updateTop(t)}),style:{flex:"4"}},null,8,["value"])]),ws,"line"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[Object(j["createVNode"])("div",Vs,[_s,Object(j["createVNode"])(y,{min:e.minSize,max:1500,step:5,value:e.width,onChange:t[13]||(t[13]=function(t){return e.updateWidth(t)}),style:{flex:"4"}},null,8,["min","value"]),["image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:0},[e.fixedRatio?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"解除宽高比锁定"},{default:Cs((function(){return[Object(j["createVNode"])(E,{style:{flex:"1"},class:"icon-btn",onClick:t[14]||(t[14]=function(t){return e.updateFixedRatio(!1)})})]})),_:1},8,["mouseEnterDelay"])):(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:1,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"宽高比锁定"},{default:Cs((function(){return[Object(j["createVNode"])(k,{style:{flex:"1"},class:"icon-btn",onClick:t[15]||(t[15]=function(t){return e.updateFixedRatio(!0)})})]})),_:1},8,["mouseEnterDelay"]))],64)):(Object(j["openBlock"])(),Object(j["createBlock"])("div",Bs)),Object(j["createVNode"])(y,{min:e.minSize,max:800,step:5,disabled:"text"===e.handleElement.type,value:e.height,onChange:t[16]||(t[16]=function(t){return e.updateHeight(t)}),style:{flex:"4"}},null,8,["min","disabled","value"])]),Ds],64)):Object(j["createCommentVNode"])("",!0),["text","image","shape"].includes(e.handleElement.type)?(Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:1},[Object(j["createVNode"])(g),Object(j["createVNode"])("div",Ms,[As,Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"逆时针旋转"},{default:Cs((function(){return[Object(j["createVNode"])(I,{class:"icon-btn",onClick:t[17]||(t[17]=function(t){return e.updateRotate45("-")}),style:{flex:"2"}})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顺时针旋转"},{default:Cs((function(){return[Object(j["createVNode"])(I,{class:"icon-btn",onClick:t[18]||(t[18]=function(t){return e.updateRotate45("+")}),style:{flex:2,transform:"rotateY(180deg)"}},null,8,["style"])]})),_:1},8,["mouseEnterDelay"]),Ps,Object(j["createVNode"])(y,{min:-180,max:180,step:5,value:e.rotate,onChange:t[19]||(t[19]=function(t){return e.updateRotate(t)}),style:{flex:"4"}},null,8,["value"])])],64)):Object(j["createCommentVNode"])("",!0)])})),Fs=n("b69c"),Hs=n.n(Fs),zs=Object(j["defineComponent"])({name:"element-positopn-panel",setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.handleElement})),n=Object(j["ref"])(0),o=Object(j["ref"])(0),c=Object(j["ref"])(0),a=Object(j["ref"])(0),r=Object(j["ref"])(0),l=Object(j["ref"])(!1),i=Object(j["computed"])((function(){return t.value&&rn[t.value.type]||20}));Object(j["watch"])(t,(function(){t.value&&(n.value=Hs()(t.value.left,1),o.value=Hs()(t.value.top,1),l.value="fixedRatio"in t.value&&!!t.value.fixedRatio,"line"!==t.value.type&&(c.value=Hs()(t.value.width,1),a.value=Hs()(t.value.height,1),r.value="rotate"in t.value&&void 0!==t.value.rotate?Hs()(t.value.rotate,1):0))}),{deep:!0,immediate:!0});var u=He(),d=u.orderElement,s=En(),f=s.alignElementToCanvas,p=Te(),b=p.addHistorySnapshot,m=function(n){var o={left:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},v=function(n){var o={top:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},O=function(n){var o={width:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},h=function(n){var o={height:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},g=function(n){var o={rotate:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},E=function(n){var o={fixedRatio:n};e.commit(y.UPDATE_ELEMENT,{id:t.value.id,props:o}),b()},k=function(n){var o=45*Math.floor(r.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}),b()};return{handleElement:t,orderElement:d,alignElementToCanvas:f,left:n,top:o,width:c,height:a,rotate:r,fixedRatio:l,minSize:i,updateLeft:m,updateTop:v,updateWidth:O,updateHeight:h,updateRotate:g,updateFixedRatio:E,updateRotate45:k}}});n("b7a1");zs.render=Rs,zs.__scopeId="data-v-15c9ddcc";var Us=zs,Gs=Object(j["withScopeId"])("data-v-2a95eecd");Object(j["pushScopeId"])("data-v-2a95eecd");var qs={class:"element-animation-panel"},Xs={key:0,class:"element-animation"},Ws={class:"animation-pool"},Ys={class:"type-title"},Zs={class:"pool-item-wrapper"},Js=Object(j["createTextVNode"])(" 图表元素暂不支持动画 "),Ks={key:1,class:"tip"},Qs=Object(j["createTextVNode"])(" 选中画布中的元素添加动画"),$s={class:"index"},ef={class:"text"},tf={class:"handler"};Object(j["popScopeId"])();var nf,of=Gs((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconEffects"),l=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Popover"),u=Object(j["resolveComponent"])("IconClick"),d=Object(j["resolveComponent"])("Divider"),s=Object(j["resolveComponent"])("IconPlayOne"),f=Object(j["resolveComponent"])("Tooltip"),p=Object(j["resolveComponent"])("IconCloseSmall"),b=Object(j["resolveComponent"])("Draggable");return Object(j["openBlock"])(),Object(j["createBlock"])("div",qs,[e.handleElement?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Xs,["chart"!==e.handleElement.type?(Object(j["openBlock"])(),Object(j["createBlock"])(i,{key:0,trigger:"click",visible:e.animationPoolVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.animationPoolVisible=t})},{content:Gs((function(){return[Object(j["createVNode"])("div",Ws,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"pool-type",key:n.name},[Object(j["createVNode"])("div",Ys,Object(j["toDisplayString"])(n.name)+":",1),Object(j["createVNode"])("div",Zs,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(n.children,(function(n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"pool-item",key:n.name,onMouseenter:function(t){return e.hoverPreviewAnimation=n.value},onMouseleave:t[1]||(t[1]=function(t){return e.hoverPreviewAnimation=""}),onClick:function(t){return e.addAnimation(n.value)}},[Object(j["createVNode"])("div",{class:["animation-box",["animate__animated","animate__faster",e.hoverPreviewAnimation===n.value&&"animate__".concat(n.value)]]},Object(j["toDisplayString"])(n.name),3)],40,["onMouseenter","onClick"])})),128))])])})),128))])]})),default:Gs((function(){return[Object(j["createVNode"])(l,{class:"element-animation-btn"},{default:Gs((function(){return[Object(j["createVNode"])(r,{style:{"margin-right":"5px"}}),Object(j["createTextVNode"])(" "+Object(j["toDisplayString"])(e.handleElementAnimation||"点击选择动画"),1)]})),_:1})]})),_:1},8,["visible"])):(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:1,class:"element-animation-btn",disabled:""},{default:Gs((function(){return[Object(j["createVNode"])(r,{style:{"margin-right":"5px"}}),Js]})),_:1}))])):(Object(j["openBlock"])(),Object(j["createBlock"])("div",Ks,[Object(j["createVNode"])(u),Qs])),Object(j["createVNode"])(d),Object(j["createVNode"])(b,{class:"animation-sequence",modelValue:e.animationSequence,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:Gs((function(t){var n,o=t.element,c=t.index;return[Object(j["createVNode"])("div",{class:["sequence-item",{active:(null===(n=e.handleElement)||void 0===n?void 0:n.id)===o.elId}]},[Object(j["createVNode"])("div",$s,Object(j["toDisplayString"])(c+1),1),Object(j["createVNode"])("div",ef,"【"+Object(j["toDisplayString"])(o.elType)+"】"+Object(j["toDisplayString"])(o.animationType),1),Object(j["createVNode"])("div",tf,[Object(j["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"预览"},{default:Gs((function(){return[Object(j["createVNode"])(s,{class:"handler-btn",onClick:function(t){return e.runAnimation(o.elId,o.type)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"]),Object(j["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Gs((function(){return[Object(j["createVNode"])(p,{class:"handler-btn",onClick:function(t){return e.deleteAnimation(o.elId)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"])])],2)]})),_:1},8,["modelValue","onEnd"])])})),cf=[{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"}]}],af={},rf=Object(ke["a"])(cf);try{for(rf.s();!(nf=rf.n()).done;){var lf,uf=nf.value,df=Object(ke["a"])(uf.children);try{for(df.s();!(lf=df.n()).done;){var sf=lf.value;af[sf.value]=sf.name}}catch(_O){df.e(_O)}finally{df.f()}}}catch(_O){rf.e(_O)}finally{rf.f()}var ff=Object(j["defineComponent"])({name:"element-animation-panel",components:{Draggable:ml.a},setup:function(){var e=Z(),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"])(""),a=Object(j["ref"])(!1),r=Te(),l=r.addHistorySnapshot,i=cf,u=Object(j["computed"])((function(){if(!n.value)return[];var e,t=[],c=Object(ke["a"])(n.value);try{var a=function(){var n=e.value,c=o.value.elements.find((function(e){return e.id===n.elId}));if(!c)return"continue";var a=an[c.type],r=af[n.type];t.push(Object(F["a"])(Object(F["a"])({},n),{},{elType:a,animationType:r}))};for(c.s();!(e=c.n()).done;)a()}catch(_O){c.e(_O)}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?af[o.type]:null})),s=function(t){var o=n.value.filter((function(e){return e.elId!==t}));e.commit(y.UPDATE_SLIDE,{animations:o}),l()},f=function(t){var o=t.newIndex,c=t.oldIndex;if(c!==o){var a=JSON.parse(JSON.stringify(n.value)),r=a[c];a.splice(c,1),a.splice(o,0,r),e.commit(y.UPDATE_SLIDE,{animations:a}),l()}},p=function(e,t){var n="animate__",o=document.querySelector("#editable-element-".concat(e," [class^=editable-element-]"));if(o){var c="".concat(n).concat(t);o.classList.add("".concat(n,"animated"),c);var a=function(){o.classList.remove("".concat(n,"animated"),c)};o.addEventListener("animationend",a,{once:!0})}},b=function(o){var c=n.value.map((function(e){return e.elId===t.value.id?Object(F["a"])(Object(F["a"])({},e),{},{type:o}):e}));e.commit(y.UPDATE_SLIDE,{animations:c}),a.value=!1,l(),p(t.value.id,o)},m=function(o){if(d.value)b(o);else{var c=n.value?JSON.parse(JSON.stringify(n.value)):[];c.push({elId:t.value.id,type:o,duration:1e3}),e.commit(y.UPDATE_SLIDE,{animations:c}),a.value=!1,l(),p(t.value.id,o)}};return{handleElement:t,animationPoolVisible:a,animations:i,animationSequence:u,hoverPreviewAnimation:c,handleElementAnimation:d,addAnimation:m,deleteAnimation:s,handleDragEnd:f,runAnimation:p}}});n("967d");ff.render=of,ff.__scopeId="data-v-2a95eecd";var pf=ff,bf=Object(j["withScopeId"])("data-v-40e749dc");Object(j["pushScopeId"])("data-v-40e749dc");var mf={class:"slide-style-panel"},vf=Object(j["createVNode"])("div",{class:"title"},"背景填充",-1),Of={class:"row"},hf=Object(j["createTextVNode"])("纯色填充"),jf=Object(j["createTextVNode"])("图片填充"),gf=Object(j["createTextVNode"])("渐变填充"),yf=Object(j["createVNode"])("div",{style:{flex:"1"}},null,-1),Ef=Object(j["createTextVNode"])("原始大小"),kf=Object(j["createTextVNode"])("缩放"),If=Object(j["createTextVNode"])("拼贴"),Sf=Object(j["createTextVNode"])("缩放铺满"),Cf=Object(j["createTextVNode"])("线性渐变"),Nf=Object(j["createTextVNode"])("径向渐变"),Tf={key:0,class:"background-image-wrapper"},xf={class:"background-image"},Lf={key:1,class:"background-gradient-wrapper"},wf={class:"row"},Vf=Object(j["createVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1),_f={class:"row"},Bf=Object(j["createVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1),Df={key:0,class:"row"},Mf=Object(j["createVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1),Af={class:"row"},Pf=Object(j["createTextVNode"])("应用背景到全部"),Rf={class:"row"},Ff=Object(j["createVNode"])("div",{style:{flex:"2"}},"画布尺寸:",-1),Hf=Object(j["createTextVNode"])("宽屏 16 : 9"),zf=Object(j["createTextVNode"])("宽屏 16 :10"),Uf=Object(j["createTextVNode"])("标准 4 :3"),Gf=Object(j["createVNode"])("div",{class:"title"},"全局主题",-1),qf={class:"row"},Xf=Object(j["createVNode"])("div",{style:{flex:"2"}},"字体:",-1),Wf={class:"row"},Yf=Object(j["createVNode"])("div",{style:{flex:"2"}},"字体颜色:",-1),Zf={class:"row"},Jf=Object(j["createVNode"])("div",{style:{flex:"2"}},"背景颜色:",-1),Kf={class:"row"},Qf=Object(j["createVNode"])("div",{style:{flex:"2"}},"主题色:",-1),$f=Object(j["createVNode"])("div",{class:"title",style:{"margin-top":"20px"}},"预置主题:",-1),ep={class:"theme-list"},tp={class:"theme-item-content"},np={class:"row"},op=Object(j["createTextVNode"])("应用主题到全部");Object(j["popScopeId"])();var cp=bf((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("SelectOption"),l=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"),b=Object(j["resolveComponent"])("Button"),m=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("SelectOptGroup");return Object(j["openBlock"])(),Object(j["createBlock"])("div",mf,[vf,Object(j["createVNode"])("div",Of,[Object(j["createVNode"])(l,{style:{flex:"10"},value:e.background.type,onChange:t[1]||(t[1]=function(t){return e.updateBackgroundType(t)})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:"solid"},{default:bf((function(){return[hf]})),_:1}),Object(j["createVNode"])(r,{value:"image"},{default:bf((function(){return[jf]})),_:1}),Object(j["createVNode"])(r,{value:"gradient"},{default:bf((function(){return[gf]})),_:1})]})),_:1},8,["value"]),yf,"solid"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])(d,{key:0,trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateBackground({color:t})})},null,8,["modelValue"])]})),default:bf((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"])(l,{key:1,style:{flex:"10"},value:e.background.size||"cover",onChange:t[3]||(t[3]=function(t){return e.updateBackground({imageSize:t})})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:"initial"},{default:bf((function(){return[Ef]})),_:1}),Object(j["createVNode"])(r,{value:"contain"},{default:bf((function(){return[kf]})),_:1}),Object(j["createVNode"])(r,{value:"repeat"},{default:bf((function(){return[If]})),_:1}),Object(j["createVNode"])(r,{value:"cover"},{default:bf((function(){return[Sf]})),_:1})]})),_:1},8,["value"])):(Object(j["openBlock"])(),Object(j["createBlock"])(l,{key:2,style:{flex:"10"},value:e.background.gradientType,onChange:t[4]||(t[4]=function(t){return e.updateBackground({gradientType:t})})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:"linear"},{default:bf((function(){return[Cf]})),_:1}),Object(j["createVNode"])(r,{value:"radial"},{default:bf((function(){return[Nf]})),_:1})]})),_:1},8,["value"]))]),"image"===e.background.type?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Tf,[Object(j["createVNode"])(f,{onChange:t[5]||(t[5]=function(t){return e.uploadBackgroundImage(t)})},{default:bf((function(){return[Object(j["createVNode"])("div",xf,[Object(j["createVNode"])("div",{class:"content",style:{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["createBlock"])("div",Lf,[Object(j["createVNode"])("div",wf,[Vf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[0],"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.updateBackground({gradientColor:[t,e.background.gradientColor[1]]})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.background.gradientColor[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",_f,[Bf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.background.gradientColor[1],"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.updateBackground({gradientColor:[e.background.gradientColor[0],t]})})},null,8,["modelValue"])]})),default:bf((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["createBlock"])("div",Df,[Mf,Object(j["createVNode"])(p,{min:0,max:360,step:15,value:e.background.gradientRotate,style:{flex:"3"},onChange:t[8]||(t[8]=function(t){return e.updateBackground({gradientRotate:t})})},null,8,["value"])])):Object(j["createCommentVNode"])("",!0)])):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",Af,[Object(j["createVNode"])(b,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.applyBackgroundAllSlide()})},{default:bf((function(){return[Pf]})),_:1})]),Object(j["createVNode"])(m),Object(j["createVNode"])("div",Rf,[Ff,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.viewportRatio,onChange:t[10]||(t[10]=function(t){return e.updateViewportRatio(t)})},{default:bf((function(){return[Object(j["createVNode"])(r,{value:.5625},{default:bf((function(){return[Hf]})),_:1},8,["value"]),Object(j["createVNode"])(r,{value:.625},{default:bf((function(){return[zf]})),_:1},8,["value"]),Object(j["createVNode"])(r,{value:.75},{default:bf((function(){return[Uf]})),_:1},8,["value"])]})),_:1},8,["value"])]),Object(j["createVNode"])(m),Gf,Object(j["createVNode"])("div",qf,[Xf,Object(j["createVNode"])(l,{style:{flex:"3"},value:e.theme.fontName,onChange:t[11]||(t[11]=function(t){return e.updateTheme({fontName:t})})},{default:bf((function(){return[Object(j["createVNode"])(v,{label:"系统字体"},{default:bf((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(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:bf((function(){return[Object(j["createVNode"])("span",{style:{fontFamily:e.value}},Object(j["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(j["createVNode"])(v,{label:"在线字体"},{default:bf((function(){return[(Object(j["openBlock"])(!0),Object(j["createBlock"])(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:bf((function(){return[Object(j["createVNode"])("span",null,Object(j["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"])]),Object(j["createVNode"])("div",Wf,[Yf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.fontColor,"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.updateTheme({fontColor:t})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.theme.fontColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Zf,[Jf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.backgroundColor,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.updateTheme({backgroundColor:t})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.theme.backgroundColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(j["createVNode"])("div",Kf,[Qf,Object(j["createVNode"])(d,{trigger:"click"},{content:bf((function(){return[Object(j["createVNode"])(i,{modelValue:e.theme.themeColor,"onUpdate:modelValue":t[14]||(t[14]=function(t){return e.updateTheme({themeColor:t})})},null,8,["modelValue"])]})),default:bf((function(){return[Object(j["createVNode"])(u,{color:e.theme.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),$f,Object(j["createVNode"])("div",ep,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themes,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"theme-item",key:n,style:{backgroundColor:t.background},onClick:function(n){return e.updateTheme({fontColor:t.text,backgroundColor:t.background,themeColor:t.color})}},[Object(j["createVNode"])("div",tp,[Object(j["createVNode"])("div",{class:"text",style:{color:t.text}},"Aa",4),Object(j["createVNode"])("div",{class:"color-block",style:{backgroundColor:t.color}},null,4)])],12,["onClick"])})),128))]),Object(j["createVNode"])("div",np,[Object(j["createVNode"])(b,{style:{flex:"1"},onClick:t[15]||(t[15]=function(t){return e.applyThemeAllSlide()})},{default:bf((function(){return[op]})),_:1})])])})),ap=[{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"}],rp=ap,lp=G,ip=Object(j["defineComponent"])({name:"slide-style-panel",components:{ColorButton:zi},setup:function(){var e=Z(),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})),a=Object(j["computed"])((function(){return e.getters.currentSlide})),r=Object(j["computed"])((function(){return a.value.background?a.value.background:{type:"solid",value:"#fff"}})),l=Te(),i=l.addHistorySnapshot,u=function(t){if("solid"===t){var n=Object(F["a"])(Object(F["a"])({},r.value),{},{type:"solid",color:r.value.color||"#fff"});e.commit(y.UPDATE_SLIDE,{background:n})}else if("image"===t){var o=Object(F["a"])(Object(F["a"])({},r.value),{},{type:"image",image:r.value.image||"",imageSize:r.value.imageSize||"cover"});e.commit(y.UPDATE_SLIDE,{background:o})}else{var c=Object(F["a"])(Object(F["a"])({},r.value),{},{type:"gradient",gradientType:r.value.gradientType||"linear",gradientColor:r.value.gradientColor||["#fff","#fff"],gradientRotate:r.value.gradientRotate||0});e.commit(y.UPDATE_SLIDE,{background:c})}i()},d=function(t){e.commit(y.UPDATE_SLIDE,{background:Object(F["a"])(Object(F["a"])({},r.value),t)}),i()},s=function(e){var t=e[0];t&&Le(t).then((function(e){return d({image:e})}))},f=function(){var n=t.value.map((function(e){return Object(F["a"])(Object(F["a"])({},e),{},{background:a.value.background})}));e.commit(y.SET_SLIDES,n),i()},p=function(t){e.commit(y.SET_THEME,t)},b=function(){var o,c=JSON.parse(JSON.stringify(t.value)),a=n.value,r=a.themeColor,l=a.backgroundColor,u=a.fontColor,d=a.fontName,s=Object(ke["a"])(c);try{for(s.s();!(o=s.n()).done;){var f=o.value;f.background&&"image"===f.background.type||(f.background=Object(F["a"])(Object(F["a"])({},f.background),{},{type:"solid",color:l}));var p,b=f.elements,m=Object(ke["a"])(b);try{for(m.s();!(p=m.n()).done;){var v=p.value;if("shape"===v.type)v.fill=r;else if("line"===v.type)v.color=r;else if("text"===v.type)v.defaultColor=u,v.defaultFontName=d,v.fill&&(v.fill=r);else if("table"===v.type){v.theme&&(v.theme.color=r);var O,h=Object(ke["a"])(v.data);try{for(h.s();!(O=h.n()).done;){var j,g=O.value,E=Object(ke["a"])(g);try{for(E.s();!(j=E.n()).done;){var k=j.value;k.style&&(k.style.color=u,k.style.fontname=d)}}catch(_O){E.e(_O)}finally{E.f()}}}catch(_O){h.e(_O)}finally{h.f()}}else"chart"===v.type&&(v.themeColor=r,v.gridColor=u)}}catch(_O){m.e(_O)}finally{m.f()}}}catch(_O){s.e(_O)}finally{s.f()}e.commit(y.SET_SLIDES,c),i()},m=function(t){e.commit(y.SET_VIEWPORT_RATIO,t)};return{availableFonts:o,background:r,updateBackgroundType:u,updateBackground:d,uploadBackgroundImage:s,applyBackgroundAllSlide:f,themes:rp,theme:n,webFonts:lp,updateTheme:p,applyThemeAllSlide:b,viewportRatio:c,updateViewportRatio:m}}});n("7dec");ip.render=cp,ip.__scopeId="data-v-40e749dc";var up=ip,dp=Object(j["withScopeId"])("data-v-6e3028f1");Object(j["pushScopeId"])("data-v-6e3028f1");var sp={class:"slide-animation-panel"},fp={class:"animation-pool"},pp={class:"animation-text"},bp=Object(j["createTextVNode"])("应用到全部");Object(j["popScopeId"])();var mp=dp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Button");return Object(j["openBlock"])(),Object(j["createBlock"])("div",sp,[Object(j["createVNode"])("div",fp,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.animations,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["animation-item",{active:e.currentTurningMode===t.value}],key:t.label,onClick:function(n){return e.updateTurningMode(t.value)}},[Object(j["createVNode"])("div",{class:["animation-block",t.value]},null,2),Object(j["createVNode"])("div",pp,Object(j["toDisplayString"])(t.label),1)],10,["onClick"])})),128))]),Object(j["createVNode"])(r,{style:{width:"100%"},onClick:t[1]||(t[1]=function(t){return e.applyAllSlide()})},{default:dp((function(){return[bp]})),_:1})])})),vp=Object(j["defineComponent"])({name:"slide-animation-panel",setup:function(){var e=Z(),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"}],a=Te(),r=a.addHistorySnapshot,l=function(t){t!==o.value&&(e.commit(y.UPDATE_SLIDE,{turningMode:t}),r())},i=function(){var o=t.value.map((function(e){return Object(F["a"])(Object(F["a"])({},e),{},{turningMode:n.value.turningMode})}));e.commit(y.SET_SLIDES,o),r()};return{currentTurningMode:o,animations:c,updateTurningMode:l,applyAllSlide:i}}});n("5217");vp.render=mp,vp.__scopeId="data-v-6e3028f1";var Op=vp,hp=Object(j["withScopeId"])("data-v-aef45858");Object(j["pushScopeId"])("data-v-aef45858");var jp={class:"multi-position-panel"},gp=Object(j["createTextVNode"])("水平均匀分布"),yp=Object(j["createTextVNode"])("垂直均匀分布"),Ep=Object(j["createTextVNode"])("组合"),kp=Object(j["createTextVNode"])("取消组合");Object(j["popScopeId"])();var Ip=hp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconAlignLeft"),l=Object(j["resolveComponent"])("Button"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconAlignVertically"),d=Object(j["resolveComponent"])("IconAlignRight"),s=Object(j["resolveComponent"])("ButtonGroup"),f=Object(j["resolveComponent"])("IconAlignTop"),p=Object(j["resolveComponent"])("IconAlignHorizontally"),b=Object(j["resolveComponent"])("IconAlignBottom"),m=Object(j["resolveComponent"])("Divider"),v=Object(j["resolveComponent"])("IconGroup"),O=Object(j["resolveComponent"])("IconUngroup");return Object(j["openBlock"])(),Object(j["createBlock"])("div",jp,[Object(j["createVNode"])(s,{class:"row"},{default:hp((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.alignElement("left")})},{default:hp((function(){return[Object(j["createVNode"])(r)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.alignElement("horizontal")})},{default:hp((function(){return[Object(j["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.alignElement("right")})},{default:hp((function(){return[Object(j["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(j["createVNode"])(s,{class:"row"},{default:hp((function(){return[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElement("top")})},{default:hp((function(){return[Object(j["createVNode"])(f)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElement("vertical")})},{default:hp((function(){return[Object(j["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElement("bottom")})},{default:hp((function(){return[Object(j["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),e.activeElementList.length>2?(Object(j["openBlock"])(),Object(j["createBlock"])(s,{key:0,class:"row"},{default:hp((function(){return[Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.uniformHorizontalDisplay()})},{default:hp((function(){return[gp]})),_:1}),Object(j["createVNode"])(l,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.uniformVerticalDisplay()})},{default:hp((function(){return[yp]})),_:1})]})),_:1})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])(m),Object(j["createVNode"])(s,{class:"row"},{default:hp((function(){return[Object(j["createVNode"])(l,{disabled:!e.canCombine,onClick:t[9]||(t[9]=function(t){return e.combineElements()}),style:{flex:"1"}},{default:hp((function(){return[Object(j["createVNode"])(v,{style:{"margin-right":"3px"}}),Ep]})),_:1},8,["disabled"]),Object(j["createVNode"])(l,{disabled:e.canCombine,onClick:t[10]||(t[10]=function(t){return e.uncombineElements()}),style:{flex:"1"}},{default:hp((function(){return[Object(j["createVNode"])(O,{style:{"margin-right":"3px"}}),kp]})),_:1},8,["disabled"])]})),_:1})])})),Sp=function(){var e=Z(),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=Te(),a=c.addHistorySnapshot,r=function(c){var r,l=Jt(n.value),i=l.minX,u=l.maxX,d=l.minY,s=l.maxY,f=JSON.parse(JSON.stringify(o.value.elements)),p={},b=Object(ke["a"])(n.value);try{var m=function(){var e=r.value;if(e.groupId&&!p[e.groupId]){var t=n.value.filter((function(t){return t.groupId===e.groupId}));p[e.groupId]=Jt(t)}};for(b.s();!(r=b.n()).done;)m()}catch(_O){b.e(_O)}finally{b.f()}if(c===te.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=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetX;e.left=i-a}else e.left=i}));else if(c===te.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 a=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),r=a.offsetX;e.left=u-c+r}else e.left=u-c}}));else if(c===te.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=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetY;e.top=d-a}else e.top=d}));else if(c===te.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 a=Yt({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),r=a.offsetY;e.top=s-c+r}else e.top=s-c}}));else if(c===te.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 a="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;e.left=v-a/2}}))}else if(c===te.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 a="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;e.top=O-a/2}}))}e.commit(y.UPDATE_SLIDE,{elements:f}),a()};return{alignActiveElement:r}},Cp=function(){var e=Z(),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=Te(),a=c.addHistorySnapshot,r=function(){var c=Jt(n.value),r=c.minX,l=c.maxX,i=JSON.parse(JSON.stringify(n.value)),u=JSON.parse(JSON.stringify(o.value.elements));i.sort((function(e,t){var n=Zt(e),o=n.minX,c=Zt(t),a=c.minX;return o-a}));var d,s=0,f=Object(ke["a"])(n.value);try{for(f.s();!(d=f.n()).done;){var p=d.value,b=Zt(p),m=b.minX,v=b.maxX;s+=v-m}}catch(_O){f.e(_O)}finally{f.f()}var O,h=(l-r-s)/(n.value.length-1),j=[],g=Object(ke["a"])(i);try{for(g.s();!(O=g.n()).done;){var E=O.value;if(j.length){var k=j[j.length-1].el,I=j[j.length-1].pos,S=Zt(k),C=S.minX,N=S.maxX,T=N-C;j.push({el:E,pos:I+T+h})}else{var x=Zt(E),L=x.minX;j.push({el:E,pos:L})}}}catch(_O){g.e(_O)}finally{g.f()}var w,V=Object(ke["a"])(u);try{for(V.s();!(w=V.n()).done;){var _=w.value;if(t.value.includes(_.id)){var B,D=Object(ke["a"])(j);try{for(D.s();!(B=D.n()).done;){var M=B.value;if(M.el.id===_.id)if("rotate"in _&&_.rotate){var A=Yt({left:_.left,top:_.top,width:_.width,height:_.height,rotate:_.rotate}),P=A.offsetX;_.left=M.pos-P}else _.left=M.pos}}catch(_O){D.e(_O)}finally{D.f()}}}}catch(_O){V.e(_O)}finally{V.f()}e.commit(y.UPDATE_SLIDE,{elements:u}),a()},l=function(){var c=Jt(n.value),r=c.minY,l=c.maxY,i=JSON.parse(JSON.stringify(n.value)),u=JSON.parse(JSON.stringify(o.value.elements));i.sort((function(e,t){var n=Zt(e),o=n.minY,c=Zt(t),a=c.minY;return o-a}));var d,s=0,f=Object(ke["a"])(n.value);try{for(f.s();!(d=f.n()).done;){var p=d.value,b=Zt(p),m=b.minY,v=b.maxY;s+=v-m}}catch(_O){f.e(_O)}finally{f.f()}var O,h=(l-r-s)/(n.value.length-1),j=[],g=Object(ke["a"])(i);try{for(g.s();!(O=g.n()).done;){var E=O.value;if(j.length){var k=j[j.length-1].el,I=j[j.length-1].pos,S=Zt(k),C=S.minY,N=S.maxY,T=N-C;j.push({el:E,pos:I+T+h})}else{var x=Zt(E),L=x.minY;j.push({el:E,pos:L})}}}catch(_O){g.e(_O)}finally{g.f()}var w,V=Object(ke["a"])(u);try{for(V.s();!(w=V.n()).done;){var _=w.value;if(t.value.includes(_.id)){var B,D=Object(ke["a"])(j);try{for(D.s();!(B=D.n()).done;){var M=B.value;if(M.el.id===_.id)if("rotate"in _&&_.rotate){var A=Yt({left:_.left,top:_.top,width:_.width,height:_.height,rotate:_.rotate}),P=A.offsetY;_.top=M.pos-P}else _.top=M.pos}}catch(_O){D.e(_O)}finally{D.f()}}}}catch(_O){V.e(_O)}finally{V.f()}e.commit(y.UPDATE_SLIDE,{elements:u}),a()};return{uniformHorizontalDisplay:r,uniformVerticalDisplay:l}},Np=Object(j["defineComponent"])({name:"multi-position-panel",setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.getters.activeElementList})),n=Ae(),o=n.combineElements,c=n.uncombineElements,a=Sp(),r=a.alignActiveElement,l=En(),i=l.alignElementToCanvas,u=Cp(),d=u.uniformHorizontalDisplay,s=u.uniformVerticalDisplay,f=Object(j["computed"])((function(){var e=t.value[0].groupId;if(!e)return!0;var n=t.value.every((function(t){return(t.groupId&&t.groupId)===e}));return!n})),p=function(e){f.value?r(e):i(e)};return{activeElementList:t,canCombine:f,combineElements:o,uncombineElements:c,uniformHorizontalDisplay:d,uniformVerticalDisplay:s,alignElement:p}}});n("2701");Np.render=Ip,Np.__scopeId="data-v-aef45858";var Tp=Np,xp=Object(j["defineComponent"])({name:"toolbar",setup:function(){var e=Z(),t=Object(j["computed"])((function(){return e.state.toolbarState})),n=[{label:"样式",value:ri.EL_STYLE},{label:"位置",value:ri.EL_POSITION},{label:"动画",value:ri.EL_ANIMATION}],o=[{label:"页面样式",value:ri.SLIDE_STYLE},{label:"切换",value:ri.SLIDE_ANIMATION},{label:"动画",value:ri.EL_ANIMATION}],c=[{label:"位置",value:ri.MULTI_POSITION},{label:"样式",value:ri.EL_STYLE}],a=function(t){e.commit(y.SET_TOOLBAR_STATE,t)},r=Object(j["computed"])((function(){return e.state.activeElementIdList})),l=Object(j["computed"])((function(){return r.value.length?r.value.length>1?c:n:o}));Object(j["watch"])(l,(function(){var n=l.value.map((function(e){return e.value}));n.includes(t.value)||e.commit(y.SET_TOOLBAR_STATE,n[0])}));var i=Object(j["computed"])((function(){var e,n=(e={},Object(T["a"])(e,ri.EL_STYLE,Ss),Object(T["a"])(e,ri.EL_POSITION,Us),Object(T["a"])(e,ri.EL_ANIMATION,pf),Object(T["a"])(e,ri.SLIDE_STYLE,up),Object(T["a"])(e,ri.SLIDE_ANIMATION,Op),Object(T["a"])(e,ri.MULTI_POSITION,Tp),e);return n[t.value]||null}));return{toolbarState:t,currentTabs:l,setToolbarState:a,currentPanelComponent:i}}});n("a5b8");xp.render=ai,xp.__scopeId="data-v-f790671e";var Lp=xp,wp=Object(j["withScopeId"])("data-v-89372f4a");Object(j["pushScopeId"])("data-v-89372f4a");var Vp={class:"remark"};Object(j["popScopeId"])();var _p=wp((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Vp,[Object(j["createVNode"])("div",{class:"resize-handler",onMousedown:t[1]||(t[1]=function(t){return e.resize(t)})},null,32),Object(j["createVNode"])("textarea",{value:e.remark,placeholder:"点击输入演讲者备注",onInput:t[2]||(t[2]=function(t){return e.handleInput(t)})},null,40,["value"])])})),Bp=Object(j["defineComponent"])({name:"remark",props:{height:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.getters.currentSlide})),a=Object(j["computed"])((function(){var e;return(null===(e=c.value)||void 0===e?void 0:e.remark)||""})),r=function(e){var t=e.target.value;o.commit(y.UPDATE_SLIDE,{remark:t})},l=function(t){var o=!0,c=t.pageY,a=e.height;document.onmousemove=function(e){if(o){var t=e.pageY,r=t-c,l=-r+a;l<40&&(l=40),l>120&&(l=120),n("update:height",l)}},document.onmouseup=function(){o=!1,document.onmousemove=null,document.onmouseup=null}};return{remark:a,handleInput:r,resize:l}}});n("4615");Bp.render=_p,Bp.__scopeId="data-v-89372f4a";var Dp=Bp,Mp=Object(j["defineComponent"])({name:"editor",components:{EditorHeader:Ft,Canvas:hr,CanvasTool:ul,Thumbnails:ei,Toolbar:Lp,Remark:Dp},setup:function(){var e=Object(j["ref"])(40);return We(),Ye(),{remarkHeight:e}}});n("1fecb");Mp.render=re,Mp.__scopeId="data-v-55178b6a";var Ap=Mp,Pp=Object(j["withScopeId"])("data-v-5e85dd68");Object(j["pushScopeId"])("data-v-5e85dd68");var Rp={class:"pptist-screen"},Fp={class:"tools"};Object(j["popScopeId"])();var Hp=Pp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ScreenSlide"),l=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["createBlock"])("div",Rp,[Object(j["withDirectives"])(Object(j["createVNode"])("div",{class:"slide-list",onMousewheel:t[1]||(t[1]=function(t){return e.mousewheelListener(t)})},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["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["createVNode"])("div",{class:"slide-content",style:{width:e.slideWidth+"px",height:e.slideHeight+"px"}},[Object(j["createVNode"])(r,{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"])(l,{key:0,turnSlideToIndex:e.turnSlideToIndex,onClose:t[2]||(t[2]=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[3]||(t[3]=function(t){return e.writingBoardToolVisible=!1})})):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",Fp,[Object(j["createVNode"])(u,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[4]||(t[4]=function(t){return e.execPrev()})}),Object(j["createVNode"])(d,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[5]||(t[5]=function(t){return e.execNext()})}),Object(j["createVNode"])(s,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[6]||(t[6]=function(t){return e.writingBoardToolVisible=!0})})]),e.showPageNumber?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:2,class:"page-number",onClick:t[7]||(t[7]=function(t){return e.slideThumbnailModelVisible=!0})},Object(j["toDisplayString"])(e.slideIndex+1)+" / "+Object(j["toDisplayString"])(e.slides.length),1)):Object(j["createCommentVNode"])("",!0)])})),zp=Object(j["withScopeId"])("data-v-a094625a"),Up=zp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ScreenElement");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"screen-slide",style:{width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")}},[Object(j["createVNode"])("div",{class:"background",style:Object(F["a"])({},e.backgroundStyle)},null,4),(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slide.elements,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:t.id,elementInfo:t,elementIndex:n+1,animationIndex:e.animationIndex},null,8,["elementInfo","elementIndex","animationIndex"])})),128))],4)}));function Gp(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"screen-element",id:"screen-element-".concat(e.elementInfo.id),style:{zIndex:e.elementIndex,color:e.theme.fontColor,fontFamily:e.theme.fontName,visibility:e.needWaitAnimation?"hidden":"visible"}},[(Object(j["openBlock"])(),Object(j["createBlock"])(Object(j["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo},null,8,["elementInfo"]))],12,["id"])}var qp=Object(j["withScopeId"])("data-v-1423f8c2"),Xp=qp((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("ElementOutline"),l=Object(j["resolveComponent"])("Chart");return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"screen-element-chart",style:{top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"}},[Object(j["createVNode"])("div",{class:"element-content",style:{backgroundColor:e.elementInfo.fill}},[Object(j["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(j["createVNode"])(l,{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)})),Wp=Object(j["defineComponent"])({name:"screen-element-chart",components:{ElementOutline:oc,Chart:Dc},props:{elementInfo:{type:Object,required:!0}}});n("1539");Wp.render=Xp,Wp.__scopeId="data-v-1423f8c2";var Yp=Wp,Zp=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(T["a"])(t,jn.IMAGE,El),Object(T["a"])(t,jn.TEXT,Cl),Object(T["a"])(t,jn.SHAPE,wl),Object(T["a"])(t,jn.LINE,Dl),Object(T["a"])(t,jn.CHART,Yp),Object(T["a"])(t,jn.TABLE,Yl),t);return n[e.elementInfo.type]||null})),n=Z(),o=Object(j["computed"])((function(){return n.state.theme})),c=Object(j["computed"])((function(){return n.getters.currentSlide})),a=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}));return{currentElementComponent:t,needWaitAnimation:a,theme:o}}});Zp.render=Gp;var Jp=Zp,Kp=Object(j["defineComponent"])({name:"screen-slide",components:{ScreenElement:Jp},props:{slide:{type:Object,required:!0},scale:{type:Number,required:!0},animationIndex:{type:Number,default:-1}},setup:function(e){var t=Z(),n=Object(j["computed"])((function(){return t.state.viewportRatio})),o=Object(j["computed"])((function(){return e.slide.background})),c=pa(o),a=c.backgroundStyle;return{backgroundStyle:a,VIEWPORT_SIZE:we,viewportRatio:n}}});n("7599");Kp.render=Up,Kp.__scopeId="data-v-a094625a";var Qp=Kp,$p=Object(j["withScopeId"])("data-v-9174b3bc");Object(j["pushScopeId"])("data-v-9174b3bc");var eb={class:"slide-thumbnails"},tb={class:"return-button"},nb={class:"slide-thumbnails-content"};Object(j["popScopeId"])();var ob=$p((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconArrowCircleLeft"),l=Object(j["resolveComponent"])("ThumbnailSlide");return Object(j["openBlock"])(),Object(j["createBlock"])("div",eb,[Object(j["createVNode"])("div",tb,[Object(j["createVNode"])(r,{class:"icon",onClick:t[1]||(t[1]=function(t){return e.close()})})]),Object(j["createVNode"])("div",nb,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.slides,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["thumbnail",{active:n===e.slideIndex}],key:t.id,onClick:function(t){return e.turnSlideToIndex(n)}},[Object(j["createVNode"])(l,{slide:t,size:150},null,8,["slide"])],10,["onClick"])})),128))])])})),cb=Object(j["defineComponent"])({name:"slide-thumbnails",components:{ThumbnailSlide:Ql},props:{turnSlideToIndex:{type:Function}},setup:function(e,t){var n=t.emit,o=Z(),c=Object(j["computed"])((function(){return o.state.slides})),a=Object(j["computed"])((function(){return o.state.slideIndex})),r=function(){return n("close")};return{slides:c,slideIndex:a,close:r}}});n("fe34");cb.render=ob,cb.__scopeId="data-v-9174b3bc";var ab=cb,rb=Object(j["withScopeId"])("data-v-f34025bc");Object(j["pushScopeId"])("data-v-f34025bc");var lb={class:"writing-board-tool"},ib={class:"tools"},ub={class:"colors"};Object(j["popScopeId"])();var db=rb((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("WritingBoard"),l=Object(j["resolveComponent"])("IconWrite"),i=Object(j["resolveComponent"])("Tooltip"),u=Object(j["resolveComponent"])("IconErase"),d=Object(j["resolveComponent"])("IconClear"),s=Object(j["resolveComponent"])("IconClose");return Object(j["openBlock"])(),Object(j["createBlock"])("div",lb,[(Object(j["openBlock"])(),Object(j["createBlock"])(j["Teleport"],{to:"body"},[Object(j["createVNode"])(r,{ref:"writingBoardRef",color:e.writingBoardColor,model:e.writingBoardModel},null,8,["color","model"])])),Object(j["createVNode"])("div",ib,[Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"画笔"},{default:rb((function(){return[Object(j["createVNode"])("div",{class:["btn",{active:"pen"===e.writingBoardModel}],onClick:t[1]||(t[1]=function(t){return e.changePen()})},[Object(j["createVNode"])(l,{class:"icon"})],2)]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"橡皮擦"},{default:rb((function(){return[Object(j["createVNode"])("div",{class:["btn",{active:"eraser"===e.writingBoardModel}],onClick:t[2]||(t[2]=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:rb((function(){return[Object(j["createVNode"])("div",{class:"btn",onClick:t[3]||(t[3]=function(t){return e.clearCanvas()})},[Object(j["createVNode"])(d,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"]),Object(j["createVNode"])("div",ub,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.writingBoardColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:["color",{active:t===e.writingBoardColor}],key:t,style:{backgroundColor:t},onClick:function(n){return e.changeColor(t)}},null,14,["onClick"])})),128))]),Object(j["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"关闭画笔"},{default:rb((function(){return[Object(j["createVNode"])("div",{class:"btn",onClick:t[4]||(t[4]=function(t){return e.closeWritingBoard()})},[Object(j["createVNode"])(s,{class:"icon"})])]})),_:1},8,["mouseEnterDelay"])])])})),sb=Object(j["withScopeId"])("data-v-61d4949c");Object(j["pushScopeId"])("data-v-61d4949c");var fb={class:"writing-board",ref:"writingBoardRef"};Object(j["popScopeId"])();var pb=sb((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("IconWrite");return Object(j["openBlock"])(),Object(j["createBlock"])("div",fb,[Object(j["createVNode"])("canvas",{class:"canvas",ref:"canvasRef",onMousedown:t[1]||(t[1]=function(t){return e.handleMousedown(t)}),onMousemove:t[2]||(t[2]=function(t){return e.handleMousemove(t)}),onMouseup:t[3]||(t[3]=function(t){return e.handleMouseup()}),onTouchstart:t[4]||(t[4]=function(t){return e.handleMousedown(t)}),onTouchmove:t[5]||(t[5]=function(t){return e.handleMousemove(t)}),onTouchend:t[6]||(t[6]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseleave:t[7]||(t[7]=function(t){e.handleMouseup(),e.mouseInCanvas=!1}),onMouseenter:t[8]||(t[8]=function(t){return e.mouseInCanvas=!0})},null,544),e.mouseInCanvas&&"pen"===e.model?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:0,class:"pen",style:{left:e.mouse.x-e.penSize/2+"px",top:e.mouse.y-36+e.penSize/2+"px",color:e.color}},[Object(j["createVNode"])(r,{class:"icon",size:"36"})],4)):Object(j["createCommentVNode"])("",!0),e.mouseInCanvas&&"eraser"===e.model?(Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:1,class:"eraser",style:{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)})),bb=6,mb=80,vb=Object(j["defineComponent"])({name:"writing-board",props:{color:{type:String,default:"#ffcc00"},model:{type:String,default:"pen"}},setup:function(e){var t=null,n=Object(j["ref"])(),o=Object(j["ref"])(),c={x:0,y:0},a=!1,r=0,l=-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,a){if(t){var r=c.x,l=c.y;t.lineWidth=a,t.strokeStyle=e.color,t.beginPath(),t.moveTo(r,l),t.lineTo(n,o),t.stroke(),t.closePath()}},p=function(e,n){var a,r,l,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))),b=[u+f,d-p],m=[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(),(a=t).moveTo.apply(a,b),(r=t).lineTo.apply(r,v),(l=t).lineTo.apply(l,O),(i=t).lineTo.apply(i,m),t.closePath(),t.clip(),t.clearRect(0,0,o.value.width,o.value.height),t.restore()}},b=function(e,t){var n=c.x,o=c.y;return Math.sqrt((e-n)*(e-n)+(t-o)*(t-o))},m=function(e,t){var n,o=10,c=.1,a=bb,r=3,i=e/t;return n=i<=c?a:i>=o?r:a-i/o*a,-1===l?n:1*n/3+2*l/3},v=function(t,n){var o=(new Date).getTime();if("pen"===e.model){var a=b(t,n),i=o-r,u=m(a,i);f(t,n,u),l=u}else p(t,n);c={x:t,y:n},r=(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;a=!0,c={x:t,y:n},r=(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),a&&v(t,n)},g=function(){a&&(a=!1)},y=function(){t&&o.value&&t.clearRect(0,0,o.value.width,o.value.height)};return{mouse:i,mouseInCanvas:d,penSize:bb,rubberSize:mb,writingBoardRef:n,canvasRef:o,handleMousedown:O,handleMousemove:h,handleMouseup:g,clearCanvas:y}}});n("ff6d");vb.render=pb,vb.__scopeId="data-v-61d4949c";var Ob=vb,hb=["#000000","#ffffff","#1e497b","#4e81bb","#e2534d","#9aba60","#8165a0","#47acc5","#f9974c"],jb=Object(j["defineComponent"])({name:"writing-board-tool",components:{WritingBoard:Ob},setup:function(e,t){var n=t.emit,o=Object(j["ref"])(),c=Object(j["ref"])("#e2534d"),a=Object(j["ref"])("pen"),r=function(){a.value="pen"},l=function(){a.value="eraser"},i=function(){o.value.clearCanvas()},u=function(e){"pen"!==a.value&&(a.value="pen"),c.value=e},d=function(){n("close")};return{writingBoardRef:o,writingBoardColors:hb,writingBoardColor:c,writingBoardModel:a,changePen:r,changeEraser:l,clearCanvas:i,changeColor:u,closeWritingBoard:d}}});n("5f39");jb.render=db,jb.__scopeId="data-v-f34025bc";var gb=jb,yb=Object(j["defineComponent"])({name:"screen",components:{ScreenSlide:Qp,SlideThumbnails:ab,WritingBoardTool:gb},setup:function(){var e=Z(),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})),a=Object(j["ref"])(0),r=Object(j["ref"])(0),l=Object(j["computed"])((function(){return a.value/we})),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),a.value=e,r.value=t},f=qe(),p=f.exitScreening,b=function(){s(),Ge()||p()};Object(j["onMounted"])((function(){window.addEventListener("resize",b)})),Object(j["onUnmounted"])((function(){window.removeEventListener("resize",b)}));var m=Object(j["computed"])((function(){return c.value.animations||[]})),v=Object(j["ref"])(0),O=function(){var e="animate__",t=m.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);n.classList.add("".concat(e,"animated"),o);var c=function(){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=function(){if(m.value.length&&v.value>0)v.value-=1;else if(n.value>0){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1);var t=m.value?m.value.length:0;v.value=t}else ie["a"].success("已经是第一页了")},k=function(){m.value.length&&v.value0&&k()}),500,{leading:!0,trailing:!1}),C=function(e){var t=e.key.toUpperCase();t===ae.UP||t===ae.LEFT?E():t!==ae.DOWN&&t!==ae.RIGHT&&t!==ae.SPACE&&t!==ae.ENTER||k()};Object(j["onMounted"])((function(){document.addEventListener("keydown",C)})),Object(j["onUnmounted"])((function(){document.removeEventListener("keydown",C)}));var N=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value-1),v.value=0},T=function(){e.commit(y.UPDATE_SLIDE_INDEX,n.value+1),v.value=0},x=function(t){u.value=!1,e.commit(y.UPDATE_SLIDE_INDEX,t),v.value=0},L=function(){return[{text:"上一页",subText:"↑ ←",disable:n.value<=0,handler:function(){return N()}},{text:"下一页",subText:"↓ →",disable:n.value>=t.value.length-1,handler:function(){return T()}},{text:"第一页",disable:0===n.value,handler:function(){return x(0)}},{text:"最后一页",disable:n.value===t.value.length-1,handler:function(){return x(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:I},{text:"结束放映",subText:"ESC",handler:p}]};return Object(j["provide"])("slideScale",l),{slides:t,slideIndex:n,currentSlide:c,slideWidth:a,slideHeight:r,scale:l,mousewheelListener:S,animationIndex:v,contextmenus:L,execPrev:E,execNext:k,slideThumbnailModelVisible:u,turnSlideToIndex:x,writingBoardToolVisible:d,showPageNumber:i}}});n("9b75");yb.render=Hp,yb.__scopeId="data-v-5e85dd68";var Eb=yb,kb=Object(j["defineComponent"])({name:"app",components:{Editor:Ap,Screen:Eb},setup:function(){var e=Z(),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");kb.render=g;var Ib=kb;n("793f"),n("41ed"),n("5952"),n("c860"),n("ae3f"),n("8c56"),n("77ed");function Sb(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("MenuContent");return Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],null,[Object(j["createVNode"])("div",{class:"mask",onContextmenu:t[1]||(t[1]=Object(j["withModifiers"])((function(t){return e.removeContextmenu()}),["prevent"])),onMousedown:t[2]||(t[2]=function(t){return e.removeContextmenu()})},null,32),Object(j["createVNode"])("div",{class:"contextmenu",style:{left:e.style.left+"px",top:e.style.top+"px"},onContextmenu:t[3]||(t[3]=Object(j["withModifiers"])((function(){}),["prevent"]))},[Object(j["createVNode"])(r,{menus:e.menus,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])],36)],64)}var Cb=Object(j["withScopeId"])("data-v-5490894e");Object(j["pushScopeId"])("data-v-5490894e");var Nb={class:"menu-content"},Tb={class:"text"},xb={key:0,class:"sub-text"};Object(j["popScopeId"])();var Lb=Cb((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("menu-content",!0);return Object(j["openBlock"])(),Object(j["createBlock"])("ul",Nb,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.menus,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])(j["Fragment"],{key:t.text||n},[t.hide?Object(j["createCommentVNode"])("",!0):(Object(j["openBlock"])(),Object(j["createBlock"])("li",{key:0,class:["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["createBlock"])("div",{key:0,class:["menu-item-content",{"has-children":t.children,"has-handler":t.handler}]},[Object(j["createVNode"])("span",Tb,Object(j["toDisplayString"])(t.text),1),t.subText&&!t.children?(Object(j["openBlock"])(),Object(j["createBlock"])("span",xb,Object(j["toDisplayString"])(t.subText),1)):Object(j["createCommentVNode"])("",!0),t.children&&t.children.length?(Object(j["openBlock"])(),Object(j["createBlock"])(r,{key:1,class:"sub-menu",menus:t.children,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])):Object(j["createCommentVNode"])("",!0)],2))],10,["onClick"]))],64)})),128))])})),wb=Object(j["defineComponent"])({name:"menu-content",props:{menus:{type:Array,required:!0},handleClickMenuItem:{type:Function,required:!0}}});n("823f");wb.render=Lb,wb.__scopeId="data-v-5490894e";var Vb=wb,_b=Object(j["defineComponent"])({name:"contextmenu",components:{MenuContent:Vb},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,a=e.axis,r=a.x,l=a.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<=r+d?r-d:r,top:p<=l+s?l-s:l}})),n=function(t){t.disable||t.children&&!t.handler||(t.handler&&t.handler(e.el),e.removeContextmenu())};return{style:t,handleClickMenuItem:n}}});n("b8378");_b.render=Sb;var Bb=_b,Db="CTX_CONTEXTMENU_HANDLER",Mb=function(e,t,n){t.stopPropagation(),t.preventDefault();var o=n.value(e);if(o){var c=null,a=function t(){c&&(document.body.removeChild(c),c=null),e.classList.remove("contextmenu-active"),document.body.removeEventListener("scroll",t),window.removeEventListener("resize",t)},r={axis:{x:t.x,y:t.y},el:e,menus:o,removeContextmenu:a};c=document.createElement("div");var l=Object(j["createVNode"])(Bb,r,null);Object(j["render"])(l,c),document.body.appendChild(c),e.classList.add("contextmenu-active"),document.body.addEventListener("scroll",a),window.addEventListener("resize",a)}},Ab={mounted:function(e,t){e[Db]=function(n){return Mb(e,n,t)},e.addEventListener("contextmenu",e[Db])},unmounted:function(e){e&&e[Db]&&(e.removeEventListener("contextmenu",e[Db]),delete e[Db])}},Pb=Ab,Rb="CTX_CLICK_OUTSIDE_HANDLER",Fb=function(e,t,n){var o=n.value,c=t.composedPath(),a=c?c.indexOf(e)<0:!e.contains(t.target);a&&o(t)},Hb={mounted:function(e,t){e[Rb]=function(n){return Fb(e,n,t)},setTimeout((function(){document.addEventListener("click",e[Rb])}),0)},unmounted:function(e){e[Rb]&&(document.removeEventListener("click",e[Rb]),delete e[Rb])}},zb=Hb,Ub=n("84e7b"),Gb=n("1e27"),qb=n("8845"),Xb=n("a3ef"),Wb=n("8331"),Yb=n("4040"),Zb=n("f745"),Jb=n("2e2d"),Kb=n("6010"),Qb=n("1fcb"),$b=n("500e"),em=n("0996"),tm=n("1646"),nm=n("fbe7"),om=n("b8af"),cm=n("bf2c"),am=n("fd52"),rm=n("f259"),lm=n("1b1c"),im=n("bde2"),um=n("23fa"),dm=n("5a28"),sm=n("c53e"),fm=n("8377"),pm=n("246f"),bm=n("33a2"),mm=n("fdbcb"),vm=n("ccc7"),Om=n("e3b9"),hm=n("3a3e"),jm=n("eac59"),gm=n("694b"),ym=n("e9ec"),Em=n("ea01"),km=n("74f3"),Im=n("4bad"),Sm=n("e7f4"),Cm=n("eb50"),Nm=n("0be2"),Tm=n("a90c"),xm=n("c90a"),Lm=n("d41d6"),wm=n("2c06"),Vm=n("a5dc"),_m=n("8678"),Bm=n("d7fb"),Dm=n("ce42"),Mm=n("7abc"),Am=n("5b20"),Pm=n("69de"),Rm=n("d0c6"),Fm=n("dcc2"),Hm=n("f1d2"),zm=n("d16b"),Um=n("a5f1"),Gm=n("df0d"),qm=n("70f2"),Xm=n("b7c8"),Wm=n("f99d"),Ym=n("40bb"),Zm=n("ae33"),Jm=n("8c1a"),Km=n("b7b3"),Qm=n("96be"),$m=n("5a69"),ev=n("f9e5"),tv=n("bbce"),nv=n("77ad"),ov=n("46cd"),cv=n("3ee3"),av=n("dde4"),rv=n("cead"),lv=n("fa00"),iv=n("e970"),uv=n("f3c2"),dv=n("7312"),sv=n("5294b"),fv=n("9fbc"),pv={install:function(e){e.component("IconFontSize",fv["a"]),e.component("IconPicture",sv["a"]),e.component("IconGraphicDesign",dv["a"]),e.component("IconConnection",uv["a"]),e.component("IconChartProportion",iv["a"]),e.component("IconInsertTable",lv["a"]),e.component("IconLock",rv["a"]),e.component("IconUnlock",av["a"]),e.component("IconFullScreen",cv["a"]),e.component("IconBack",ov["a"]),e.component("IconNext",nv["a"]),e.component("IconAlignTop",tv["a"]),e.component("IconAlignLeft",ev["a"]),e.component("IconAlignRight",$m["a"]),e.component("IconAlignBottom",Qm["a"]),e.component("IconAlignVertically",Km["a"]),e.component("IconAlignHorizontally",Jm["a"]),e.component("IconBringToFront",Zm["a"]),e.component("IconSentToBack",Ym["a"]),e.component("IconBringToFrontOne",Wm["a"]),e.component("IconSendToBack",Xm["a"]),e.component("IconGroup",qm["a"]),e.component("IconUngroup",Gm["a"]),e.component("IconFill",Um["a"]),e.component("IconBackgroundColor",zm["a"]),e.component("IconPlatte",Hm["a"]),e.component("IconTailoring",Fm["a"]),e.component("IconColorFilter",Rm["a"]),e.component("IconFlipVertically",Pm["a"]),e.component("IconFlipHorizontally",Am["a"]),e.component("IconText",Mm["a"]),e.component("IconAddText",Dm["a"]),e.component("IconAlignTextLeft",Bm["a"]),e.component("IconAlignTextRight",_m["a"]),e.component("IconAlignTextCenter",Vm["a"]),e.component("IconRowHeight",wm["a"]),e.component("IconFullwidth",Lm["a"]),e.component("IconCode",xm["a"]),e.component("IconTextBold",Tm["a"]),e.component("IconTextItalic",Nm["a"]),e.component("IconTextUnderline",Cm["a"]),e.component("IconStrikethrough",Sm["a"]),e.component("IconQuote",Im["a"]),e.component("IconList",km["a"]),e.component("IconOrderedList",Em["a"]),e.component("IconUpOne",ym["a"]),e.component("IconDownOne",gm["a"]),e.component("IconFormat",jm["a"]),e.component("IconDown",hm["a"]),e.component("IconLeftTwo",Om["a"]),e.component("IconRightTwo",vm["a"]),e.component("IconPlus",mm["a"]),e.component("IconMinus",bm["a"]),e.component("IconClose",pm["a"]),e.component("IconCloseSmall",fm["a"]),e.component("IconChartHistogram",sm["a"]),e.component("IconChartHistogramOne",dm["a"]),e.component("IconChartLine",um["a"]),e.component("IconChartLineArea",im["a"]),e.component("IconChartScatter",lm["a"]),e.component("IconChartPie",rm["a"]),e.component("IconChartRing",am["a"]),e.component("IconPlayOne",cm["a"]),e.component("IconPpt",om["a"]),e.component("IconHelpcenter",nm["a"]),e.component("IconGithub",tm["a"]),e.component("IconWrite",em["a"]),e.component("IconErase",$b["a"]),e.component("IconEffects",Qb["a"]),e.component("IconRotate",Kb["a"]),e.component("IconEdit",Jb["a"]),e.component("IconUndo",Zb["a"]),e.component("IconTransform",Yb["a"]),e.component("IconClick",Wb["a"]),e.component("IconTheme",Xb["a"]),e.component("IconArrowCircleLeft",qb["a"]),e.component("IconLogout",Gb["a"]),e.component("IconClear",Ub["a"])}},bv=Object(j["withScopeId"])("data-v-bf80565c"),mv=bv((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"file-input",onClick:t[2]||(t[2]=function(t){return e.handleClick()})},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0),Object(j["createVNode"])("input",{class:"input",type:"file",name:"upload",ref:"inputRef",accept:e.accept,onChange:t[1]||(t[1]=function(t){return e.handleChange(t)})},null,40,["accept"])])})),vv=Object(j["defineComponent"])({name:"file-input",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())},a=function(e){var t=e.target.files;t&&n("change",t)};return{handleClick:c,handleChange:a,inputRef:o}}});n("e3f5");vv.render=mv,vv.__scopeId="data-v-bf80565c";var Ov=vv,hv={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",version:"1.1"};function jv(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("svg",hv,[Object(j["renderSlot"])(e.$slots,"default")])}var gv={name:"svg-wrapper"};gv.render=jv;var yv=gv,Ev=Object(j["withScopeId"])("data-v-7cae2b90"),kv=Ev((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("button",{class:["checkbox-button",{checked:n.checked}]},[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)],2)})),Iv={name:"checkbox-button",props:{checked:{type:Boolean,default:!1}}};n("782e");Iv.render=kv,Iv.__scopeId="data-v-7cae2b90";var Sv=Iv,Cv=Object(j["withScopeId"])("data-v-7dafd0a9");Object(j["pushScopeId"])("data-v-7dafd0a9");var Nv={class:"checkbox-button-group"};Object(j["popScopeId"])();var Tv=Cv((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",Nv,[Object(j["renderSlot"])(e.$slots,"default",{},void 0,!0)])})),xv={name:"checkbox-button-group"};n("69d58");xv.render=Tv,xv.__scopeId="data-v-7dafd0a9";var Lv=xv,wv=Object(j["withScopeId"])("data-v-4adab90a");Object(j["pushScopeId"])("data-v-4adab90a");var Vv={class:"color-picker"},_v={class:"picker-saturation-wrap"},Bv={class:"picker-controls"},Dv={class:"picker-color-wrap"},Mv={class:"picker-sliders"},Av={class:"picker-hue-wrap"},Pv={class:"picker-alpha-wrap"},Rv={class:"picker-field"},Fv={class:"picker-presets"},Hv={class:"picker-gradient-presets"},zv={class:"picker-presets"},Uv={key:0,class:"recent-colors-title"},Gv={class:"recent-colors"};Object(j["popScopeId"])();var qv=wv((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Saturation"),l=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["createBlock"])("div",Vv,[Object(j["createVNode"])("div",_v,[Object(j["createVNode"])(r,{value:e.color,hue:e.hue,onColorChange:t[1]||(t[1]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createVNode"])("div",Bv,[Object(j["createVNode"])("div",Dv,[Object(j["createVNode"])("div",{class:"picker-current-color",style:{background:e.currentColor}},null,4),Object(j["createVNode"])(l)]),Object(j["createVNode"])("div",Mv,[Object(j["createVNode"])("div",Av,[Object(j["createVNode"])(i,{value:e.color,hue:e.hue,onColorChange:t[2]||(t[2]=function(t){return e.changeColor(t)})},null,8,["value","hue"])]),Object(j["createVNode"])("div",Pv,[Object(j["createVNode"])(u,{value:e.color,onColorChange:t[3]||(t[3]=function(t){return e.changeColor(t)})},null,8,["value"])])])]),Object(j["createVNode"])("div",Rv,[Object(j["createVNode"])(d,{value:e.color,onColorChange:t[4]||(t[4]=function(t){return e.changeColor(t)})},null,8,["value"])]),Object(j["createVNode"])("div",Fv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.themeColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"picker-presets-color",key:t,style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))]),Object(j["createVNode"])("div",Hv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.presetColors,(function(t,n){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"picker-gradient-col",key:n},[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(t,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"picker-gradient-color",key:t,style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))])})),128))]),Object(j["createVNode"])("div",zv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.standardColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:t,class:"picker-presets-color",style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))]),e.recentColors.length?(Object(j["openBlock"])(),Object(j["createBlock"])("div",Uv,"最近使用:")):Object(j["createCommentVNode"])("",!0),Object(j["createVNode"])("div",Gv,[(Object(j["openBlock"])(!0),Object(j["createBlock"])(j["Fragment"],null,Object(j["renderList"])(e.recentColors,(function(t){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{key:t,class:"picker-presets-color",style:{background:t},onClick:function(n){return e.selectPresetColor(t)}},null,12,["onClick"])})),128))])])})),Xv=Object(j["withScopeId"])("data-v-ecf7d10e");Object(j["pushScopeId"])("data-v-ecf7d10e");var Wv={class:"alpha"},Yv={class:"alpha-checkboard-wrap"},Zv=Object(j["createVNode"])("div",{class:"alpha-picker"},null,-1);Object(j["popScopeId"])();var Jv=Xv((function(e,t,n,o,c,a){var r=Object(j["resolveComponent"])("Checkboard");return Object(j["openBlock"])(),Object(j["createBlock"])("div",Wv,[Object(j["createVNode"])("div",Yv,[Object(j["createVNode"])(r)]),Object(j["createVNode"])("div",{class:"alpha-gradient",style:{background:e.gradientColor}},null,4),Object(j["createVNode"])("div",{class:"alpha-container",ref:"alphaRef",onMousedown:t[1]||(t[1]=function(t){return e.handleMouseDown(t)})},[Object(j["createVNode"])("div",{class:"alpha-pointer",style:{left:100*e.color.a+"%"}},[Zv],4)],544)])})),Kv=Object(j["withScopeId"])("data-v-e9a0ac98"),Qv=Kv((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"checkerboard",style:e.bgStyle},null,4)})),$v={},eO=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},tO=function(e,t,n){var o=e+","+t+","+n;if($v[o])return $v[o];var c=eO(e,t,n);return $v[o]=c,c},nO=Object(j["defineComponent"])({name:"checkboard",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=tO(e.white,e.grey,e.size);return{backgroundImage:"url(".concat(t,")")}}));return{bgStyle:t}}});n("62d8");nO.render=Qv,nO.__scopeId="data-v-e9a0ac98";var oO=nO,cO=Object(j["defineComponent"])({name:"alpha",components:{Checkboard:oO},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%)")})),a=Object(j["ref"])(),r=function(e){if(e.preventDefault(),a.value){var t,c=a.value.clientWidth,r=a.value.getBoundingClientRect().left+window.pageXOffset,l=e.pageX-r;t=l<0?0:l>c?1:Math.round(100*l/c)/100,o.value.a!==t&&n("colorChange",{r:o.value.r,g:o.value.g,b:o.value.b,a:t})}},l=function e(){window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",e)},i=function(e){r(e),window.addEventListener("mousemove",r),window.addEventListener("mouseup",l)};return Object(j["onUnmounted"])(l),{alphaRef:a,gradientColor:c,handleMouseDown:i,color:o}}});n("5c5e");cO.render=Jv,cO.__scopeId="data-v-ecf7d10e";var aO=cO,rO=Object(j["withScopeId"])("data-v-52d10460");Object(j["pushScopeId"])("data-v-52d10460");var lO={class:"hue"},iO=Object(j["createVNode"])("div",{class:"hue-picker"},null,-1);Object(j["popScopeId"])();var uO=rO((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",lO,[Object(j["createVNode"])("div",{class:"hue-container",ref:"hueRef",onMousedown:t[1]||(t[1]=function(t){return e.handleMouseDown(t)})},[Object(j["createVNode"])("div",{class:"hue-pointer",style:{left:e.pointerLeft}},[iO],4)],544)])})),dO=Object(j["defineComponent"])({name:"hue",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"])(""),a=Object(j["computed"])((function(){var t=wc()(e.value).toHsl();return-1!==e.hue&&(t.h=e.hue),t})),r=Object(j["computed"])((function(){return 0===a.value.h&&"right"===c.value?"100%":100*a.value.h/360+"%"}));Object(j["watch"])((function(){return e.value}),(function(){var t=wc()(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 l=Object(j["ref"])(),i=function(t){if(t.preventDefault(),l.value){var o,c,r=l.value.clientWidth,i=l.value.getBoundingClientRect().left+window.pageXOffset,u=t.pageX-i;u<0?o=0:u>r?o=360:(c=100*u/r,o=360*c/100),-1!==e.hue&&a.value.h===o||n("colorChange",{h:o,l:a.value.l,s:a.value.s,a:a.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:l,handleMouseDown:d,pointerLeft:r}}});n("82cd");dO.render=uO,dO.__scopeId="data-v-52d10460";var sO=dO,fO=Object(j["withScopeId"])("data-v-a98797da");Object(j["pushScopeId"])("data-v-a98797da");var pO=Object(j["createVNode"])("div",{class:"saturation-white"},null,-1),bO=Object(j["createVNode"])("div",{class:"saturation-black"},null,-1),mO=Object(j["createVNode"])("div",{class:"saturation-circle"},null,-1);Object(j["popScopeId"])();var vO=fO((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",{class:"saturation",ref:"saturationRef",style:{background:e.bgColor},onMousedown:t[1]||(t[1]=function(t){return e.handleMouseDown(t)})},[pO,bO,Object(j["createVNode"])("div",{class:"saturation-pointer",style:{top:e.pointerTop,left:e.pointerLeft}},[mO],4)],36)})),OO=n("f678"),hO=n.n(OO),jO=Object(j["defineComponent"])({name:"saturation",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=wc()(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%)")})),a=Object(j["computed"])((function(){return-100*o.value.v+1+100+"%"})),r=Object(j["computed"])((function(){return 100*o.value.s+"%"})),l=Ne()((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,a=i.value.getBoundingClientRect().top+window.pageYOffset,r=hO()(e.pageX-c,0,t),u=hO()(e.pageY-a,0,n),d=r/t,s=hO()(-u/n+1,0,1);l({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:a,pointerLeft:r}}});n("820d");jO.render=vO,jO.__scopeId="data-v-a98797da";var gO=jO,yO=Object(j["withScopeId"])("data-v-0311fdee");Object(j["pushScopeId"])("data-v-0311fdee");var EO={class:"editable-input"};Object(j["popScopeId"])();var kO=yO((function(e,t,n,o,c,a){return Object(j["openBlock"])(),Object(j["createBlock"])("div",EO,[Object(j["createVNode"])("input",{class:"input-content",value:e.val,onInput:t[1]||(t[1]=function(t){return e.handleInput(t)})},null,40,["value"])])})),IO=Object(j["defineComponent"])({name:"editable-input",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?wc()(e.value).toHex8String().toUpperCase():wc()(e.value).toHexString().toUpperCase(),t.replace("#","")})),c=function(e){var t=e.target.value;t.length>=6&&n("colorChange",wc()(t).toRgb())};return{val:o,handleInput:c}}});n("3706");IO.render=kO,IO.__scopeId="data-v-0311fdee";var SO=IO,CO="RECENT_COLORS",NO=[["#7f7f7f","#f2f2f2"],["#0d0d0d","#808080"],["#1c1a10","#ddd8c3"],["#0e243d","#c6d9f0"],["#233f5e","#dae5f0"],["#632623","#f2dbdb"],["#4d602c","#eaf1de"],["#3f3150","#e6e0ec"],["#1e5867","#d9eef3"],["#99490f","#fee9da"]],TO=function(e,t,n){for(var o=wc()(e).toRgb(),c=wc()(t).toRgb(),a=(c.r-o.r)/n,r=(c.g-o.g)/n,l=(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(CO);e&&(c.value=JSON.parse(e))})),Object(j["watch"])(c,(function(){var e=JSON.stringify(c.value);localStorage.setItem(CO,e)}));var f=function(e){"h"in e?(o.value=e.h,a.value=wc()(e).toRgb()):(o.value=wc()(e).toHsl().h,a.value=e),s()};return{themeColors:r,standardColors:l,presetColors:i,color:a,hue:o,currentColor:u,changeColor:f,selectPresetColor:d,recentColors:c}}});n("bf3c");LO.render=qv,LO.__scopeId="data-v-4adab90a";var wO=LO,VO=Object(j["createApp"])(Ib);VO.directive("contextmenu",Pb),VO.directive("click-outside",zb),VO.use(pv),VO.component("FileInput",Ov),VO.component("SvgWrapper",yv),VO.component("CheckboxButton",Sv),VO.component("CheckboxButtonGroup",Lv),VO.component("ColorPicker",wO),VO.component("InputNumber",h["a"]),VO.component("Divider",O["a"]),VO.component("Button",v["a"]),VO.component("ButtonGroup",v["a"].Group),VO.component("Tooltip",m["a"]),VO.component("Popover",b["a"]),VO.component("Slider",p["a"]),VO.component("Select",f["a"]),VO.component("SelectOption",f["a"].Option),VO.component("SelectOptGroup",f["a"].OptGroup),VO.component("Switch",s["a"]),VO.component("Radio",d["a"]),VO.component("RadioGroup",d["a"].Group),VO.component("RadioButton",d["a"].Button),VO.component("Input",u["a"]),VO.component("InputGroup",u["a"].Group),VO.component("Modal",i["a"]),VO.component("Dropdown",l["a"]),VO.component("Menu",r["a"]),VO.component("MenuItem",r["a"].Item),VO.component("Checkbox",a["a"]),VO.component("Drawer",c["a"]),VO.component("Spin",o["a"]),VO.use(Y,W),VO.mount("#app")},ce7d:function(e,t,n){},cff1:function(e,t,n){"use strict";n("4501")},d1f3:function(e,t,n){"use strict";n("3a03")},d251:function(e,t,n){},d32e:function(e,t,n){"use strict";n("26b5")},d38a:function(e,t,n){},d572:function(e,t,n){},d905:function(e,t,n){},d9a3:function(e,t,n){"use strict";n("0eae")},d9ed:function(e,t,n){},dc5e:function(e,t,n){},de7c:function(e,t,n){"use strict";n("fad2")},e3f5:function(e,t,n){"use strict";n("13b2")},e81d:function(e,t,n){},ec3f:function(e,t,n){},ee08:function(e,t,n){},ef0f:function(e,t,n){"use strict";n("930c")},f0b6:function(e,t,n){},f14f:function(e,t,n){"use strict";n("d905")},f2d4:function(e,t,n){},f558:function(e,t,n){"use strict";n("ac99")},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")},fe34:function(e,t,n){"use strict";n("a6ef")},ff6d:function(e,t,n){"use strict";n("71a5")},fff2:function(e,t,n){}}); +//# sourceMappingURL=app.d87f5fba.js.map \ No newline at end of file diff --git a/js/app.d87f5fba.js.map b/js/app.d87f5fba.js.map new file mode 100644 index 00000000..0ff1528c --- /dev/null +++ b/js/app.d87f5fba.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/Editor/Canvas/index.vue?c0c1","webpack:///./src/views/components/element/ImageElement/index.vue?4fcb","webpack:///./src/App.vue?25ed","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?6938","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/views/components/element/TableElement/StaticTable.vue?70f4","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?a6c4","webpack:///./src/views/Editor/index.vue?0894","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?185b","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?09db","webpack:///./src/views/components/ThumbnailSlide/index.vue?a2a6","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?9f2f","webpack:///./src/views/components/element/ChartElement/Chart.vue?6f91","webpack:///./src/components/ColorPicker/EditableInput.vue?72fc","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?23c0","webpack:///./src/views/Editor/Remark/index.vue?33a3","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?0831","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?b50b","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?8e40","webpack:///./src/views/Editor/Canvas/GridLines.vue?7220","webpack:///./src/components/ColorPicker/Alpha.vue?464a","webpack:///./src/views/Screen/WritingBoardTool.vue?33e5","webpack:///./src/components/ColorPicker/Checkboard.vue?024a","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?de61","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?6c64","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?4645","webpack:///./src/components/CheckboxButtonGroup.vue?3a3e","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?7480","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?b1b9","webpack:///./src/views/Screen/ScreenSlide.vue?6e86","webpack:///./src/components/CheckboxButton.vue?2273","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?a0ca","webpack:///./src/views/Editor/Toolbar/SlideStylePanel.vue?e459","webpack:///./src/components/ColorPicker/Saturation.vue?da63","webpack:///./src/components/Contextmenu/MenuContent.vue?5248","webpack:///./src/components/ColorPicker/Hue.vue?aa9d","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?dd5c","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?ba52","webpack:///./src/views/Editor/EditorHeader/index.vue?75c8","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?39c4","webpack:///./src/views/components/element/TextElement/index.vue?00e7","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?09bd","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?ae92","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?b21b","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?fb4e","webpack:///./src/views/components/element/TableElement/index.vue?b892","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?9984","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?4444","webpack:///./src/views/Editor/Canvas/Operate/index.vue?13d6","webpack:///./src/views/Screen/index.vue?bace","webpack:///./src/views/components/element/TableElement/EditableTable.vue?74ef","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?7f0a","webpack:///./src/views/Editor/Toolbar/index.vue?6401","webpack:///./src/views/Editor/Thumbnails/index.vue?1680","webpack:///./src/views/components/element/ChartElement/Chart.vue?607f","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?16dd","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?a16c","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?9a27","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?5e37","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?8b3d","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?9d3f","webpack:///./src/views/components/element/LineElement/index.vue?e320","webpack:///./src/components/Contextmenu/index.vue?06fd","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?04c5","webpack:///./src/components/ColorPicker/index.vue?220a","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?152c","webpack:///./src/App.vue","webpack:///./src/store/constants.ts","webpack:///./src/mocks/slides.ts","webpack:///./src/mocks/theme.ts","webpack:///./src/store/state.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/views/Editor/index.vue","webpack:///./src/types/edit.ts","webpack:///./src/configs/hotkey.ts","webpack:///./src/utils/common.ts","webpack:///./src/utils/clipboard.ts","webpack:///./src/utils/crypto.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/views/Editor/EditorHeader/HotkeyDoc.vue","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?98af","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue?c9c2","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue?d122","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/emitter.ts","webpack:///./src/utils/selection.ts","webpack:///./src/views/Editor/Canvas/hooks/useViewportSize.ts","webpack:///./src/utils/element.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/configs/imageClip.ts","webpack:///./src/views/components/element/ImageElement/index.vue","webpack:///./src/views/components/element/hooks/useElementShadow.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/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/utils.ts","webpack:///./src/utils/prosemirror/commands/setTextAlign.ts","webpack:///./src/utils/prosemirror/commands/toggleList.ts","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/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/index.vue?4919","webpack:///./src/views/Editor/Canvas/Operate/index.vue?3933","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/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/SlideStylePanel.vue","webpack:///./src/configs/theme.ts","webpack:///./src/views/Editor/Toolbar/SlideStylePanel.vue?1908","webpack:///./src/views/Editor/Toolbar/SlideStylePanel.vue?0da1","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/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/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/contextmenu.ts","webpack:///./src/plugins/clickOutside.ts","webpack:///./src/plugins/iconPark.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/main.ts","webpack:///./src/views/components/element/ShapeElement/index.vue?a115","webpack:///./src/views/Editor/EditorHeader/ExportDialog.vue?5456","webpack:///./src/views/components/element/ChartElement/index.vue?fe88","webpack:///./src/views/components/element/ElementOutline.vue?a889","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?a30e","webpack:///./src/components/FileInput.vue?320a","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?e4d6","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?8c5c","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?f27b","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","webpack:///./src/views/Screen/SlideThumbnails.vue?dab0","webpack:///./src/components/WritingBoard.vue?e57b"],"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","flipH","lineHeight","content","defaultFontName","defaultColor","start","end","points","color","style","background","themeColor","fontColor","fontName","backgroundColor","activeElementIdList","handleElementId","activeGroupElementId","canvasPercentage","canvasScale","thumbnailsFocus","editorAreaFocus","disableHotkeys","showGridLines","creatingElement","availableFonts","toolbarState","viewportRatio","theme","slides","slideIndex","selectedSlidesIndex","snapshotCursor","snapshotLength","ctrlKeyState","shiftKeyState","clipingImageElementId","getters","currentSlide","state","currentSlideAnimations","animations","els","elIds","el","filter","animation","includes","elId","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_THEME","themeProps","SET_VIEWPORT_RATIO","ADD_SLIDE","slide","Array","isArray","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","class","ElementOrderCommands","ElementAlignCommands","OperateBorderLines","OperateResizeHandlers","OperateLineHandlers","KEYS","remarkHeight","HOTKEY_DOC","children","createRandomCode","len","charset","maxLen","ret","randomIndex","floor","random","digit","Promise","reject","fakeElement","clipboard","text","action","container","body","on","destroy","appendChild","click","removeChild","readClipboard","navigator","readText","then","CRYPTO_KEY","msg","AES","encrypt","toString","ciphertext","bytes","decrypt","enc","Utf8","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","createImageElement","createChartElement","chartType","gridColor","labels","series","createTableElement","row","col","fontname","rowCells","colspan","rowspan","DEFAULT_CELL_WIDTH","DEFAULT_CELL_HEIGHT","colWidths","outline","rowHeader","rowFooter","colHeader","colFooter","createTextElement","position","createShapeElement","createLineElement","newElement","isBroken","broken","isCurve","curve","useCreateElement","pasteElement","groupIdMap","elIdMap","groupId","currentSlideElementIdList","inCurrentSlide","values","pasteSlides","newSlides","pasteText","pasteTextClipboardData","options","clipboardData","onlySlide","onlyElements","JSON","parse","selectedSlides","selectedSlidesId","usePasteTextClipboardData","resetSlides","emptySlide","updateSlideIndex","command","UP","DOWN","copySlide","stringify","pasteSlide","catch","err","message","warning","createSlide","copyAndPasteSlide","deleteSlide","targetSlidesId","cutSlide","selectAllSlide","newSelectedSlidesIndex","from","lockElement","newElementList","lock","unlockElement","deleteElement","deleteAllElements","combineElements","combineElementList","combineElementMaxLevel","_element","combineElementIdList","insertLevel","uncombineElements","hasElementInGroup","some","handleElementIdList","useDeleteElement","copyElement","cutElement","quickCopyElement","selectAllElement","unlockedElements","newActiveElementIdList","moveElement","step","LEFT","RIGHT","getCombineElementLevelRange","elementList","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","max","setCanvasPercentage","ctrlKeyActive","shiftKeyActive","useSlideHandler","useCombineElement","useLockElement","useCopyAndPasteElement","useSelectAllElement","useMoveElement","useOrderElement","useScreening","useScaleCanvas","copy","cut","quickCopy","selectAll","combine","uncombine","remove","move","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","indexOf","getAsFile","getAsString","href","target","trigger","overlay","toggleGridLines","exportDialogVisible","hotkeyDrawerVisible","mouseLeaveDelay","title","placement","visible","footer","centered","closable","destroyOnClose","hotkeys","hotkey","setup","render","__scopeId","exportJSON","emit","blob","Blob","components","HotkeyDoc","ExportDialog","EmitterEvents","ref","$event","handleMousewheelCanvas","handleClickBlankArea","insertElementFromCreateSelection","alignmentLines","line","axis","scaleMultiElement","elementInfo","isSelected","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","dragLineElement","mouseSelectionState","isShow","quadrant","elementIndex","selectElement","contextmenus","removeEditorAreaFocus","removeAllRanges","selection","getSelection","canvasRef","viewportLeft","viewportTop","setViewportPosition","canvasWidth","canvasHeight","viewportActualWidth","viewportActualHeight","viewportStyles","resizeObserver","ResizeObserver","observe","unobserve","getRectRotatedRange","radius","sqrt","pow","auxiliaryAngle","atan","PI","tlbraRadian","trblaRadian","middleLeft","middleTop","xAxis","cos","yAxis","sin","xRange","yRange","getRectRotatedOffset","originXRange","originYRange","rotatedXRange","rotatedYRange","offsetX","offsetY","getElementRange","minX","maxX","minY","maxY","getElementListRange","leftValues","topValues","rightValues","bottomValues","forEach","uniqAlignLines","lines","uniqLines","_line","uniqLine","rangeMin","range","rangeMax","viewportRef","updateMouseSelection","isMouseDown","viewportRect","getBoundingClientRect","minSelectionRange","startPageX","pageX","startPageY","pageY","x","y","onmousemove","currentPageX","currentPageY","offsetWidth","offsetHeight","abs","onmouseup","inRangeElementList","mouseSelectionLeft","mouseSelectionTop","mouseSelectionWidth","mouseSelectionHeight","isInclude","inRangeElement","groupElementList","every","groupElement","inRangeElementIdList","elementRef","handleDrop","dataTransfer","dataTransferItem","ondragleave","ondrop","ondragenter","ondragover","getAngleFromCoordinate","radian","atan2","angle","elOriginRotate","elLeft","elTop","elWidth","elHeight","centerX","centerY","mouseX","mouseY","sorptionRange","emitter","ELEMENT_TYPE_ZH","image","shape","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","SCALE_ELEMENT_STATE","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","mid","midX","midY","START","adsorptionPoint","END","newEl","MID","formatCreateSelection","selectionData","formatCreateSelectionForLine","_start","_end","currentElementComponent","ElementTypes","ClipPathTypes","ClipPaths","alignElementToCanvas","viewportWidth","viewportHeight","CENTER","VERTICAL","HORIZONTAL","isCliping","clipData","clip","clipPath","clipShape","handleClip","handleSelectElement","draggable","alt","shadow","shadowStyle","h","v","blur","flipV","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","rx","ry","stroke","outlineColor","stroke-width","outlineWidth","stroke-dasharray","outlineStyle","Number","required","String","default","useElementOutline","cx","cy","Function","ImageRectOutline","ImageEllipseOutline","ImagePolygonOutline","useClipImage","shape-rendering","clipWrapperPositionStyle","bottomImgPositionStyle","topImgPositionStyle","topImgWrapperPositionStyle","moveClipRange","point","scaleClipRange","isSettingClipRange","currentRange","getClipDataTransformInfo","topImgWrapperPosition","bottomWidth","bottomHeight","topLeft","topTop","topWidth","topHeight","initClipPosition","clipedEmitData","keyboardListener","updateRange","retPosition","parseInt","bottomPosition","originPositopn","setTimeout","minWidth","minHeight","targetWidth","targetHeight","ImageOutline","ImageClipHandler","useElementShadow","useElementFlip","useFilter","stopPropagation","originClip","_props","schema","cmd","marks","strong","em","underline","strikethrough","nodes","list_item","nodeType","match","node","childCount","attrs","rules","blockquote","ordered_list","bullet_list","code_block","_orderedList","group","_bulletList","align","parseDOM","tag","getAttrs","dom","getAttribute","test","toDOM","paragraph","subscript","excludes","superscript","forecolor","mark","backcolor","inline","fontsize","replace","schemaNodes","schemaMarks","htmlString","parser","DOMParser","parseFromString","firstElementChild","fromSchema","doc","plugins","equalNodeType","findParentNodeClosestToPos","$pos","predicate","depth","pos","before","findParentNode","_ref","$from","findParentNodeOfType","isActiveOfParentNodeType","getMarkAttrs","view","nodeAt","markType","attr","getAttrValueInSelection","to","keepChecking","nodesBetween","getTextAttrs","isBold","isEm","isUnderline","isStrikethrough","isSuperscript","isSubscript","isCode","isBulletList","isOrderedList","isBlockquote","bold","bulletList","orderedList","tr","alignment","listItem","tasks","allowedNodeTypes","Set","has","task","setNodeMarkup","alignmentCommand","setSelection","isList","listType","itemType","$to","blockRange","parentList","validContent","ElementOutline","editorView","isScaling","realHeightCache","editorViewRef","canMove","scaleElementStateListener","off","updateTextElementHeight","entries","contentRect","realHeight","handleInput","innerHTML","handleFocus","handleBlur","handleClick","UPDATE_TEXT_STATE","handleKeydown","textContent","hasFocus","setProps","editable","handleDOMEvents","focus","keydown","execCommand","payload","commands","empty","addMark","removeMark","EXEC_TEXT_COMMAND","gradient","color1","color2","transform","x1","y1","x2","y2","gradientTransform","offset","stop-color","GradientDefs","svgWidth","svgHeight","baseSize","lineDashArray","marker-start","marker-end","markerUnits","orient","markerWidth","markerHeight","refX","refY","pathMap","dot","arrow","rotateMap","LinePointMarker","chartRef","slideScale","getDataAndOptions","propsOptopns","renderChart","updateChart","updateTheme","colors","analogous","toRgbString","setProperty","updateGridColor","Chart","updateTableCells","widths","updateColWidths","cells","updateSelectedCells","startEdit","totalWidth","dragLinePosition","handleMousedownColHandler","subThemeColor","colSizeList","span","tableCells","rowIndex","cell","colIndex","data-cell-index","handleCellMousedown","handleCellMouseenter","activedCell","contenteditable","hideCells","getTextStyle","textDecoration","fontWeight","fontStyle","fontSize","fontFamily","rgba","toRgb","subRgba1","g","b","a","subRgba2","immediate","modelValue","Boolean","textareaRef","onpaste","CustomTextarea","isStartSelect","startCell","endCell","set","newData","useSubThemeColor","reduce","removeSelectedCells","useHideCells","selectedCells","selectedRange","handleMouseup","button","isHideCell","selectCol","maxRow","selectRow","maxCol","deleteRow","_tableCells","targetCells","hideCellsPos","deleteCol","insertRow","insertCol","mergeCells","splitCells","originWidth","round","clearSelectedCellText","tabActiveCell","getNextCell","nextRow","nextCol","nextCell","textRef","querySelector","split","getEffectiveTableCells","effectiveTableCells","_rowCells","checkCanDeleteRowOrCol","canDeleteRow","canDeleteCol","checkCanMergeOrSplit","isMultiSelected","targetCell","canMerge","canSplit","cellIndex","dataset","handler","divider","EditableTable","updateTableElementHeight","UPDATE_TABLE_SELECTED_CELL","elementTypeMap","IMAGE","ImageElement","TEXT","TextElement","SHAPE","ShapeElement","LINE","LineElement","CHART","ChartElement","TABLE","TableElement","useAlignElementToCanvas","subText","hide","validator","backgroundStyle","bgColor","colorList","mostReadable","includeFallbackColors","setAlpha","gridSize","getPath","imageSize","gradientColor","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","isWide","ResizeHandler","BorderLine","localActiveElementList","useCommonOperate","setRange","currentOperateComponent","elementIndexInAnimation","scaleWidth","inheritAttrs","RotateHandler","scaleHeight","handlers","midHandler","ImageElementOperate","TextElementOperate","ShapeElementOperate","LineElementOperate","ChartElementOperate","TableElementOperate","EditableElement","MouseSelection","ViewportBackground","AlignmentLine","ElementCreateSelection","MultiSelectOperate","Operate","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","close","insertCustomTable","handleClickTable","ShapePool","LinePool","ChartPool","TableGenerator","setThumbnailsFocus","scroll","scrollSensitivity","handleDragEnd","itemKey","handleClickSlideThumbnail","fillDigit","contextmenusThumbnailItem","contextmenusThumbnails","strokeWidth","_chartType","_options","horizontalBars","showArea","showLine","donut","StaticTable","BaseImageElement","BaseTextElement","BaseShapeElement","BaseLineElement","BaseChartElement","BaseTableElement","ThumbnailElement","Draggable","ThumbnailSlide","changSlideIndex","minIndex","eventData","oldIndex","_slides","_slide","currentTabs","tab","setToolbarState","currentPanelComponent","ToolbarStates","EL_ANIMATION","EL_STYLE","EL_POSITION","SLIDE_STYLE","SLIDE_ANIMATION","MULTI_POSITION","presetStyles","emitBatchRichTextCommand","compact","richTextAttrs","emitRichTextCommand","suffixIcon","webFonts","fontSizeOptions","updateFill","checked","button-style","updateLineHeight","lineHeightOptions","wordSpace","updateWordSpace","wordSpaceOptions","updateOpacity","undefined","deep","fixed","hasOutline","toggleOutline","updateOutline","ColorButton","outlineProps","hasShadow","toggleShadow","updateShadow","shadowProps","ElementOpacity","ElementShadow","updateRichTextAttrs","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","gradientProps","updateLine","chartDataEditorVisible","updateOptions","lineSmooth","updateData","rangeLines","resizablePointStyle","changeSelectRange","autocomplete","closeEditor","getTableData","CELL_WIDTH","CELL_HEIGHT","tempRangeSize","initData","_data","rowCount","colCount","inputRef","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","handleElementAnimation","animationSequence","elType","animationType","runAnimation","deleteAnimation","ANIMATIONS","animationTypes","prefix","elRef","animationName","classList","handleAnimationEnd","once","updateElementAnimation","duration","updateBackgroundType","updateBackground","uploadBackgroundImage","applyBackgroundAllSlide","updateViewportRatio","themes","applyThemeAllSlide","PRESET_THEMES","newBackground","currentTurningMode","updateTurningMode","applyAllSlide","turningMode","alignElement","uniformHorizontalDisplay","uniformVerticalDisplay","canCombine","alignActiveElement","groupElementRangeMap","activeElement","groupElements","horizontalCenter","center","verticalCenter","copyOfActiveElementList","sort","elementA","elementB","elAMinX","elBMinX","elMinX","elMaxX","sortedElementData","lastItemElement","lastItemPos","lastElementMinX","lastElementMaxX","lastElementWidth","firstElMinX","sortedItem","elAMinY","elBMinY","totalHeight","elMinY","elMaxY","lastElementMinY","lastElementMaxY","lastElementHeight","firstElMinY","useAlignActiveElement","useUniformDisplayElement","firstGroupId","inSameGroup","elementTabs","slideTabs","multiSelectTabs","currentTabsValue","ElementStylePanel","ElementPositionPanel","ElementAnimationPanel","SlideStylePanel","SlideAnimationPanel","MultiPositionPanel","resize","remark","placeholder","newHeight","EditorHeader","Canvas","CanvasTool","Thumbnails","Toolbar","Remark","useGlobalHotkey","usePasteEvent","mousewheelListener","animationIndex","slideThumbnailModelVisible","turnSlideToIndex","writingBoardToolVisible","execPrev","execNext","showPageNumber","ScreenChartElement","needWaitAnimation","ScreenElement","writingBoardColor","model","writingBoardModel","changePen","changeEraser","clearCanvas","writingBoardColors","changeColor","closeWritingBoard","handleMousedown","handleMousemove","mouseInCanvas","penSize","rubberSize","writingBoardRef","lastPos","lastTime","lastLineWidth","mouse","updateMousePosition","initCanvas","lineCap","lineJoin","draw","posX","posY","lineWidth","lastPosX","lastPosY","strokeStyle","beginPath","moveTo","lineTo","closePath","erase","sinRadius","cosRadius","rectPoint1","rectPoint2","rectPoint3","rectPoint4","save","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","lastIndex","success","autoPlay","setInterval","SPACE","turnPrevSlide","turnNextSlide","Editor","Screen","onbeforeunload","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","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","toHexString","RECENT_COLORS","presetColorConfig","startColor","endColor","_startColor","_endColor","rStep","gStep","bStep","gradientColorArr","Alpha","Hue","Saturation","EditableInput","rgbaString","colorString","updateRecentColorsCache","_color","maxLength","recentColorsCache","localStorage","getItem","setItem","App","directive","use","FileInput","SvgWrapper","CheckboxButton","CheckboxButtonGroup","ColorPicker","Group","Option","OptGroup","Button","Item","mount"],"mappings":"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cI,CAdJ,yBAcI,KAbDw8B,UAAS,mBAAgB5W,EAAM3lB,QAAtB,aAA6B,GAAU2lB,EAAM3lB,QAA7C,yC,CAEV,yBAUQ,QATNuK,MAAM,aACNslB,gBAAc,qBACdC,iBAAe,OACfC,oBAAkB,IAClBC,kBAAA,GACA9vB,KAAK,cACLiwB,OAAO,OACPE,eAAa,IACZlzB,EAAGwoB,EAAM1lB,M,4FCnBfyrC,GAAa,CACxB,CACE/rC,KAAM,KACNqL,SAAU,CACR,CACEhL,QAAS,IACTC,KAAM,qCAER,CACED,QAAS,IACTC,KAAM,wGAER,CACED,QAAS,IACTC,KAAM,+DAER,CACED,QAAS,IACTC,KAAM,oDAER,CACED,QAAS,IACTC,KAAM,6DAER,CACED,QAAS,IACTC,KAAM,yEAER,CACED,QAAS,IACTC,KAAM,0DAER,CACED,QAAS,IACTC,KAAM,yEAKZ,CACEN,KAAM,OACNqL,SAAU,CACR,CACEhL,QAAS,IACTC,KAAM,uDAER,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,+CAKZ,CACEN,KAAM,KACNqL,SAAU,CACR,CACEhL,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,+IAER,CACED,QAAS,KACTC,KAAM,mJAKZ,CACEN,KAAM,OACNqL,SAAU,CACR,CACEhL,QAAS,KACTC,KAAM,svCAER,CACED,QAAS,KACTC,KAAM,62BAER,CACED,QAAS,KACTC,KAAM,kcAER,CACED,QAAS,KACTC,KAAM,ofAER,CACED,QAAS,KACTC,KAAM,ipDAER,CACED,QAAS,KACTC,KAAM,6uBAER,CACED,QAAS,KACTC,KAAM,ibAER,CACED,QAAS,KACTC,KAAM,usCAER,CACED,QAAS,KACTC,KAA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","file":"js/app.d87f5fba.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([0,\"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!./index.vue?vue&type=style&index=0&id=fb6f9726&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=1622838f&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!./ElementFlip.vue?vue&type=style&index=0&id=c129286e&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!./StaticTable.vue?vue&type=style&index=0&id=01f791ba&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=3c5b7aac&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!./MultiPositionPanel.vue?vue&type=style&index=0&id=aef45858&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!./ShapePool.vue?vue&type=style&index=0&id=5aabd717&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=233b1dc8&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!./EditableInput.vue?vue&type=style&index=0&id=0311fdee&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=56b0510c&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=89372f4a&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\": \"e81d1\",\n\t\"./km.js\": \"e81d1\",\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!./SlideAnimationPanel.vue?vue&type=style&index=0&id=6e3028f1&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!./ImageElementOperate.vue?vue&type=style&index=0&id=5b0628aa&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=3cb2c22e&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=ecf7d10e&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=f34025bc&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=e9a0ac98&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!./LinePool.vue?vue&type=style&index=0&id=5087394c&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!./ImageClipHandler.vue?vue&type=style&index=0&id=1d9b5032&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=998a7a02&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!./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!./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!./SlideStylePanel.vue?vue&type=style&index=0&id=40e749dc&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=a98797da&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=5490894e&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!./Hue.vue?vue&type=style&index=0&id=52d10460&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=c1cc1cba&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!./index.vue?vue&type=style&index=0&id=ecea6ffc&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=2db32cac&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=3d4f3789&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=62789f0d&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!./CustomTextarea.vue?vue&type=style&index=0&id=0d17e957&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!./index.vue?vue&type=style&index=0&id=1ab7e248&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!./BaseShapeElement.vue?vue&type=style&index=0&id=6fef68fd&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=2a95eecd&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=558a94fe&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=5e85dd68&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=70bdbb7e&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!./index.vue?vue&type=style&index=0&id=f790671e&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=57618e72&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=233b1dc8&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=1c2a68d0&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!./TextStylePanel.vue?vue&type=style&index=0&id=131345b8&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=576c614c&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!./ElementPositionPanel.vue?vue&type=style&index=0&id=15c9ddcc&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=7d3d40d6&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!./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!./index.vue?vue&type=style&index=0&id=4adab90a&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\"","\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\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 flipH: 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 { 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\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}\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: 'slideStyle', // 右侧工具栏状态\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}","import { GetterTree } from 'vuex'\r\nimport { State } from './state'\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 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/omit'\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\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, type) {\r\n state.toolbarState = type\r\n },\r\n\r\n [MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID](state, elId) {\r\n state.clipingImageElementId = elId\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)","\n\n\n\n","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: 'Ctrl + B' },\n { label: '斜体', value: 'Ctrl + I' },\n { label: '下划线', value: 'Ctrl + U' },\n { label: '删除线', value: 'Ctrl + D' },\n ],\n },\n]","import padStart from 'lodash/padStart'\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 Clipboard from 'clipboard'\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}","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 debounce from 'lodash/debounce'\nimport throttle from 'lodash/throttle'\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 } 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\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 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 rowCells: TableCell[] = new Array(col).fill({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '', style })\n const data: TableCell[][] = new Array(row).fill(rowCells)\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 createElement({\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 }\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 { decrypt } from '@/utils/crypto'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\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 pasteElement = (elements: PPTElement[]) => {\n const groupIdMap = {}\n const elIdMap = {}\n for (const element of elements) {\n const groupId = element.groupId\n if (groupId && !groupIdMap[groupId]) {\n groupIdMap[groupId] = createRandomCode()\n }\n elIdMap[element.id] = createRandomCode()\n }\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 pasteSlides = (slides: Slide[]) => {\n const newSlides = slides.map(slide => ({\n ...slide,\n id: createRandomCode(8),\n }))\n store.commit(MutationTypes.ADD_SLIDE, newSlides)\n addHistorySnapshot()\n }\n\n /**\n * 粘贴普通文本:创建为新的文本元素\n * @param text 文本\n */\n const pasteText = (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 let clipboardData\n try {\n clipboardData = JSON.parse(decrypt(text))\n }\n catch {\n clipboardData = text\n }\n\n // 元素或页面\n if (typeof clipboardData === 'object') {\n const { type, data } = clipboardData\n\n if (type === 'elements' && !onlySlide) pasteElement(data)\n else if (type === 'slides' && !onlyElements) pasteSlides(data)\n }\n\n // 普通文本\n else if (!onlyElements && !onlySlide) pasteText(clipboardData)\n }\n\n return {\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 { 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 } = 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 copyAndPasteSlide = () => {\n store.commit(MutationTypes.ADD_SLIDE, {\n ...currentSlide.value,\n id: createRandomCode(8),\n })\n addHistorySnapshot()\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 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 * 组合当前选中的元素:给当前选中的元素赋予一个相同的分组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 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 { 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 currentSlide = computed(() => store.getters.currentSlide)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\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 const newElementList = currentSlide.value.elements.map(el => {\r\n if (activeElementIdList.value.includes(el.id)) {\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 return el\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","\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","\n\n\n\n","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { saveAs } from 'file-saver'\n\nexport default defineComponent({\n name: 'export-dialog',\n setup(props, { emit }) {\n const store = useStore()\n const slides = computed(() => store.state.slides)\n\n\n const exportJSON = () => {\n const blob = new Blob([JSON.stringify(slides.value)], { type: '' })\n saveAs(blob, 'pptist_slides.json')\n }\n\n return {\n slides,\n exportJSON,\n emit,\n }\n },\n})\n","import { render } from \"./ExportDialog.vue?vue&type=template&id=a69a4592&scoped=true\"\nimport script from \"./ExportDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./ExportDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./ExportDialog.vue?vue&type=style&index=0&id=a69a4592&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a69a4592\"\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'\n\nimport HotkeyDoc from './HotkeyDoc.vue'\nimport ExportDialog from './ExportDialog.vue'\n\nexport default defineComponent({\n name: 'editor-header',\n components: {\n HotkeyDoc,\n ExportDialog,\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\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 const exportDialogVisible = ref(false)\n\n return {\n enterScreening,\n enterScreeningFromStart,\n createSlide,\n deleteSlide,\n redo,\n undo,\n toggleGridLines,\n showGridLines,\n resetSlides,\n hotkeyDrawerVisible,\n exportDialogVisible,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=ecea6ffc&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=ecea6ffc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ecea6ffc\"\n\nexport default script","\n\n\n\n","import mitt, { Emitter } from 'mitt'\n\nexport const enum EmitterEvents {\n UPDATE_TEXT_STATE = 'UPDATE_TEXT_STATE',\n EXEC_TEXT_COMMAND = 'EXEC_TEXT_COMMAND',\n UPDATE_TABLE_SELECTED_CELL = 'UPDATE_TABLE_SELECTED_CELL',\n SCALE_ELEMENT_STATE = 'SCALE_ELEMENT_STATE',\n}\n\nconst emitter: Emitter = mitt()\n\nexport default emitter","// 清除文字选区\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 { PPTElement } from '@/types/slides'\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}","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 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) 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 createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, text)\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 emitter, { EmitterEvents } from '@/utils/emitter'\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 emitter.emit(EmitterEvents.SCALE_ELEMENT_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 emitter.emit(EmitterEvents.SCALE_ELEMENT_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/uniq'\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 interface PPTElementShadow {\n h: number;\n v: number;\n blur: number;\n color: string;\n}\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\nexport interface PPTElementOutline {\n style?: 'dashed' | 'solid';\n width?: number;\n color?: string;\n}\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}\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\nexport interface ImageOrShapeFlip {\n flipH?: boolean;\n flipV?: boolean;\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}\nexport interface ImageElementClip {\n range: [[number, number], [number, number]];\n shape: string;\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\nexport interface ShapeGradient {\n type: 'linear' | 'radial';\n color: [string, string];\n rotate: number;\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}\n\nexport interface PPTLineElement extends Omit {\n type: 'line';\n start: [number, number];\n end: [number, number];\n style: string;\n color: string;\n points: [string, string];\n shadow?: PPTElementShadow;\n broken?: [number, number];\n curve?: [number, number];\n}\n\nexport type ChartType = 'bar' | 'line' | 'pie'\nexport interface ChartData {\n labels: string[];\n series: number[][];\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\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?: string;\n}\nexport interface TableCell {\n id: string;\n colspan: number;\n rowspan: number;\n text: string;\n style?: TableCellStyle;\n}\nexport interface TableTheme {\n color: string;\n rowHeader: boolean;\n rowFooter: boolean;\n colHeader: boolean;\n colFooter: boolean;\n} \nexport interface PPTTableElement extends PPTBaseElement {\n type: 'table';\n outline: PPTElementOutline;\n theme?: TableTheme;\n colWidths: number[];\n data: TableCell[][];\n}\n\nexport type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement\n\nexport interface PPTAnimation {\n elId: string;\n type: string;\n duration: number;\n}\n\nexport interface SlideBackground {\n type: 'solid' | 'image' | 'gradient';\n color?: string;\n image?: string;\n imageSize?: 'cover' | 'contain' | 'repeat' | 'initial';\n gradientType?: 'linear' | 'radial';\n gradientColor?: [string, string];\n gradientRotate?: number;\n}\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\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}","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}","\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}","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 (flipH.value) style = 'rotateX(180deg)'\n else if (flipV.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 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 {\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 \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=1d9b5032&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=1d9b5032&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1d9b5032\"\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 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 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\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=1622838f&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=1622838f&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1622838f\"\n\nexport default script","\n\n\n\n\n","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\nconst 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 { Node, NodeType, ResolvedPos } 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 const node = doc.nodeAt(from)\n return node?.marks || []\n}\n\nexport const getAttrValue = (view: EditorView, markType: string, attr: string) => {\n const marks = getMarkAttrs(view)\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 = (view: EditorView, markType: string) => {\n const marks = getMarkAttrs(view)\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\nexport const getTextAttrs = (view: EditorView) => {\n const isBold = isActiveMark(view, 'strong')\n const isEm = isActiveMark(view, 'em')\n const isUnderline = isActiveMark(view, 'underline')\n const isStrikethrough = isActiveMark(view, 'strikethrough')\n const isSuperscript = isActiveMark(view, 'superscript')\n const isSubscript = isActiveMark(view, 'subscript')\n const isCode = isActiveMark(view, 'code')\n const color = getAttrValue(view, 'forecolor', 'color') || '#000'\n const backcolor = getAttrValue(view, 'backcolor', 'backcolor') || '#000'\n const fontsize = getAttrValue(view, 'fontsize', 'fontsize') || '20px'\n const fontname = getAttrValue(view, 'fontname', 'fontname') || '微软雅黑'\n const align = getAttrValueInSelection(view, 'align') || 'left'\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","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","\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","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { MutationTypes, useStore } from '@/store'\nimport { EditorView } from 'prosemirror-view'\nimport { toggleMark, wrapIn, selectAll } from 'prosemirror-commands'\nimport { PPTTextElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { initProsemirrorEditor } from '@/utils/prosemirror/'\nimport { getTextAttrs } from '@/utils/prosemirror/utils'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport { alignmentCommand } from '@/utils/prosemirror/commands/setTextAlign'\nimport { toggleList } from '@/utils/prosemirror/commands/toggleList'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\n\ninterface CommandPayload {\n command: string;\n value?: string;\n}\n\nexport default defineComponent({\n name: 'editable-element-text',\n components: {\n ElementOutline,\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 isScaling = ref(false)\n const realHeightCache = ref(-1)\n\n const editorViewRef = ref()\n let editorView: EditorView\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 scaleElementStateListener = (state: boolean) => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n isScaling.value = state\n\n if (!state && 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 emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\n onUnmounted(() => {\n emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\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 // 富文本的各种交互事件监听:\n // 聚焦时取消全局快捷键事件\n // 输入文字时同步数据到vuex\n // 点击鼠标和键盘时同步富文本状态到工具栏\n const handleInput = debounce(function() {\n store.commit(MutationTypes.UPDATE_ELEMENT, {\n id: props.elementInfo.id, \n props: { content: editorView.dom.innerHTML },\n })\n addHistorySnapshot()\n }, 300, { trailing: true })\n\n const handleFocus = () => {\n if (props.elementInfo.content === '请输入内容') {\n setTimeout(() => {\n selectAll(editorView.state, editorView.dispatch)\n }, 0)\n }\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, true)\n }\n\n const handleBlur = () => {\n store.commit(MutationTypes.SET_DISABLE_HOTKEYS_STATE, false)\n }\n\n const handleClick = debounce(function() {\n const attr = getTextAttrs(editorView)\n emitter.emit(EmitterEvents.UPDATE_TEXT_STATE, attr)\n }, 30, { trailing: true })\n\n const handleKeydown = () => {\n handleInput()\n handleClick()\n }\n\n // 将富文本内容同步到DOM\n const textContent = computed(() => props.elementInfo.content)\n watch(textContent, () => {\n if (!editorView) return\n if (editorView.hasFocus()) return\n editorView.dom.innerHTML = textContent.value\n })\n\n // 打开/关闭编辑器的编辑模式\n const editable = computed(() => !props.elementInfo.lock)\n watch(editable, () => {\n editorView.setProps({ editable: () => editable.value })\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: () => editable.value,\n })\n })\n onUnmounted(() => {\n editorView && editorView.destroy()\n })\n \n // 执行富文本命令(可以是一个或多个)\n // 部分命令在执行前先判断当前选区是否为空,如果选区为空先进行全选操作\n const execCommand = (payload: CommandPayload | CommandPayload[]) => {\n if (handleElementId.value !== props.elementInfo.id) 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 }\n\n editorView.focus()\n handleInput()\n handleClick()\n }\n\n emitter.on(EmitterEvents.EXEC_TEXT_COMMAND, payload => execCommand(payload))\n onUnmounted(() => {\n emitter.off(EmitterEvents.EXEC_TEXT_COMMAND, payload => execCommand(payload))\n })\n\n return {\n elementRef,\n editorViewRef,\n handleSelectElement,\n shadowStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=3d4f3789&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=3d4f3789&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3d4f3789\"\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 } from 'vue'\nimport { PPTShapeElement } 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'\n\nimport GradientDefs from './GradientDefs.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n GradientDefs,\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 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 return {\n handleSelectElement,\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=6ed7d252&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=6ed7d252&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6ed7d252\"\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 { 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 const start = props.elementInfo.start.join(',')\n const end = props.elementInfo.end.join(',')\n if (props.elementInfo.broken) {\n const mid = props.elementInfo.broken.join(',')\n return `M${start} L${mid} L${end}`\n }\n if (props.elementInfo.curve) {\n const mid = props.elementInfo.curve.join(',')\n return `M${start} Q${mid} ${end}`\n }\n return `M${start} L${end}`\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=7d3d40d6&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=7d3d40d6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7d3d40d6\"\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/upperFirst'\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: String,\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 const updateTheme = () => {\n if (!chartRef.value) return\n\n const colors = tinycolor(props.themeColor).analogous(10)\n for (let i = 0; i < 10; i++) {\n const color = colors[i].toRgbString()\n chartRef.value.style.setProperty(`--theme-color-${i + 1}`, color)\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=233b1dc8&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=233b1dc8&lang=scss&scoped=true\"\nimport \"./Chart.vue?vue&type=style&index=1&id=233b1dc8&lang=scss\"\nscript.render = render\nscript.__scopeId = \"data-v-233b1dc8\"\n\nexport default script","\r\nimport { defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\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 return {\r\n handleSelectElement,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=d2dd6e5c&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=d2dd6e5c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-d2dd6e5c\"\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}","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 tinycolor from 'tinycolor2'\nimport { TableTheme } from '@/types/slides'\n\n// 通过表格的主题色计算辅助颜色\n\nexport default (theme: Ref) => {\n const subThemeColor = ref(['', ''])\n watch(() => theme.value, () => {\n if (theme.value) {\n const rgba = tinycolor(theme.value.color).toRgb()\n const subRgba1 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.3 }\n const subRgba2 = { r: rgba.r, g: rgba.g, b: rgba.b, a: rgba.a * 0.1 }\n subThemeColor.value = [\n `rgba(${[subRgba1.r, subRgba1.g, subRgba1.b, subRgba1.a].join(',')})`,\n `rgba(${[subRgba2.r, subRgba2.g, subRgba2.b, subRgba2.a].join(',')})`,\n ]\n }\n }, { immediate: true })\n\n return {\n subThemeColor,\n }\n}","\n\n\n\n","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\n\nexport default defineComponent({\n name: 'custom-textarea',\n props: {\n modelValue: {\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.modelValue, () => {\n if (isFocus.value) return\n text.value = props.modelValue\n if (textareaRef.value) textareaRef.value.innerHTML = props.modelValue\n }, { immediate: true })\n\n const handleInput = () => {\n if (!textareaRef.value) return\n const text = textareaRef.value.innerHTML\n emit('update:modelValue', 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 => emit('update:modelValue', text))\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=0d17e957&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=0d17e957&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0d17e957\"\n\nexport default script","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport debounce from 'lodash/debounce'\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 } 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 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, () => {\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 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() {\n emit('change', tableCells.value)\n }, 300, { trailing: true })\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 subThemeColor,\n }\n },\n})\n","import { render } from \"./EditableTable.vue?vue&type=template&id=70bdbb7e&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=70bdbb7e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-70bdbb7e\"\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 emitter, { EmitterEvents } from '@/utils/emitter'\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 isScaling = ref(false)\n const realHeightCache = ref(-1)\n\n const scaleElementStateListener = (state: boolean) => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n isScaling.value = state\n\n if (state) editable.value = false\n\n if (!state && 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 emitter.on(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\n onUnmounted(() => {\n emitter.off(EmitterEvents.SCALE_ELEMENT_STATE, state => scaleElementStateListener(state))\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(() => emitter.emit(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, 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=1ab7e248&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=1ab7e248&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1ab7e248\"\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 },\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: 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=4c19a1fc\"\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=3cb2c22e&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=3cb2c22e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3cb2c22e\"\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: 'initial',\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 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=3c5b7aac&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=3c5b7aac&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-3c5b7aac\"\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 { PropType } from 'vue'\nimport { OperateResizeHandler } from '@/types/edit'\n\nexport default {\n name: 'resize-handler',\n props: {\n type: {\n type: String as PropType,\n default: '',\n },\n },\n}\n","import { render } from \"./ResizeHandler.vue?vue&type=template&id=1c2a68d0&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=1c2a68d0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1c2a68d0\"\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=5b0628aa&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=5b0628aa&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5b0628aa\"\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=1f730982\"\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=bfcf602e\"\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","\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\n\r\nexport default defineComponent({\r\n name: 'operate',\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 },\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=558a94fe&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=558a94fe&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-558a94fe\"\n\nexport default script","\nimport { computed, defineComponent, provide, ref, watch, watchEffect } from 'vue'\nimport throttle from 'lodash/throttle'\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'\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 },\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 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 handleClickBlankArea,\n removeEditorAreaFocus,\n currentSlide,\n creatingElement,\n insertElementFromCreateSelection,\n alignmentLines,\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=fb6f9726&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=fb6f9726&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-fb6f9726\"\n\nexport default script","\n\n\n\n","\n\n\n\n","export interface ShapePoolItem {\n viewBox: number;\n path: string;\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 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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\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 },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { SHAPE_LIST, ShapePoolItem } from '@/configs/shapes'\n\nexport default defineComponent({\n name: 'shape-pool',\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=5aabd717&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=5aabd717&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5aabd717\"\n\nexport default script","\n\n\n\n","export interface LinePoolItem {\n path: string;\n style: string;\n points: [string, string];\n isBroken?: boolean;\n isCurve?: boolean;\n}\n\nexport const LINE_LIST = [\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 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=5087394c&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=5087394c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5087394c\"\n\nexport default script","\n\n\n\n","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'chart-pool',\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=0028f4b9&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=0028f4b9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0028f4b9\"\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 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=576c614c&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=576c614c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-576c614c\"\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 } 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 return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n }\n },\n})\n","import { render } from \"./BaseShapeElement.vue?vue&type=template&id=6fef68fd&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=6fef68fd&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6fef68fd\"\n\nexport default script","\n\n\n\n\n","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\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 const start = props.elementInfo.start.join(',')\n const end = props.elementInfo.end.join(',')\n if (props.elementInfo.broken) {\n const mid = props.elementInfo.broken.join(',')\n return `M${start} L${mid} L${end}`\n }\n if (props.elementInfo.curve) {\n const mid = props.elementInfo.curve.join(',')\n return `M${start} Q${mid} ${end}`\n }\n return `M${start} L${end}`\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=56b0510c&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=56b0510c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-56b0510c\"\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 } 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 subThemeColor,\n }\n },\n})\n","import { render } from \"./StaticTable.vue?vue&type=template&id=01f791ba&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=01f791ba&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-01f791ba\"\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=4f5c0caa\"\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","\nimport { computed, defineComponent } 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'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n Draggable,\n ThumbnailSlide,\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 {\n copySlide,\n pasteSlide,\n createSlide,\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 setThumbnailsFocus,\n slides,\n slideIndex,\n selectedSlidesIndex,\n createSlide,\n handleClickSlideThumbnail,\n contextmenusThumbnails,\n contextmenusThumbnailItem,\n fillDigit,\n handleDragEnd,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=57618e72&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=57618e72&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-57618e72\"\n\nexport default script","\n\n\n\n","export type ToolbarState = 'elAnimation' | 'elStyle' | 'elPosition' | 'slideStyle' | 'slideAnimation' | 'multiPosition'\n\nexport const ToolbarStates = {\n EL_ANIMATION: 'elAnimation',\n EL_STYLE: 'elStyle',\n EL_POSITION: 'elPosition',\n SLIDE_STYLE: 'slideStyle',\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, onUnmounted, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport { TextAttrs } from '@/utils/prosemirror/utils'\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\ninterface CommandPayload {\n command: string;\n value?: string;\n}\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\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 richTextAttrs = ref({\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 })\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 updateRichTextAttrs = (attr: TextAttrs) => richTextAttrs.value = attr\n\n emitter.on(EmitterEvents.UPDATE_TEXT_STATE, attr => updateRichTextAttrs(attr))\n onUnmounted(() => {\n emitter.off(EmitterEvents.UPDATE_TEXT_STATE, attr => updateRichTextAttrs(attr))\n })\n\n // 发射富文本设置命令\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.EXEC_TEXT_COMMAND, { command, value })\n }\n\n // 发射富文本设置命令(批量)\n const emitBatchRichTextCommand = (payload: CommandPayload[]) => {\n emitter.emit(EmitterEvents.EXEC_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=131345b8&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=131345b8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-131345b8\"\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=c129286e&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=c129286e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-c129286e\"\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=c1cc1cba&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=c1cc1cba&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-c1cc1cba\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTShapeElement, ShapeGradient } from '@/types/slides'\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\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\n const fill = ref()\n const gradient = ref()\n const fillType = ref('fill')\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 }, { 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 return {\n fill,\n gradient,\n fillType,\n updateFillType,\n updateFill,\n updateGradient,\n }\n },\n})\n","import { render } from \"./ShapeStylePanel.vue?vue&type=template&id=998a7a02&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=998a7a02&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-998a7a02\"\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 { ChartData } from '@/types/slides'\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue'\n\nconst CELL_WIDTH = 100\nconst CELL_HEIGHT = 32\n\nexport default defineComponent({\n name: 'chart-data-editor',\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\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 // 获取当前图表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 changeSelectRange,\n selectedRange,\n getTableData,\n closeEditor,\n }\n },\n})\n","import { render } from \"./ChartDataEditor.vue?vue&type=template&id=42e69ec4&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=42e69ec4&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-42e69ec4\"\n\nexport default script","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\nimport { MutationTypes, useStore } from '@/store'\nimport { ChartData, PPTChartElement } from '@/types/slides'\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\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 = (themeColor: string) => {\n const props = { themeColor }\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 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 updateGridColor,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=62789f0d&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=62789f0d&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-62789f0d\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { PPTTableElement, TableCell, TableCellStyle, TableTheme } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\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 \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 const selectedCells = ref([])\n\n // 更新当前选中单元格的文本样式状态\n const updateTextAttrState = () => {\n if (!handleElement.value) 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 // 监听并更新当前选中的单元格\n const updateSelectedCells = (cells: string[]) => {\n selectedCells.value = cells\n updateTextAttrState()\n }\n\n emitter.on(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, cells => updateSelectedCells(cells))\n onUnmounted(() => {\n emitter.off(EmitterEvents.UPDATE_TABLE_SELECTED_CELL, cells => updateSelectedCells(cells))\n })\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: '#d14424',\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=2db32cac&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=2db32cac&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2db32cac\"\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/round'\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=15c9ddcc&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=15c9ddcc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-15c9ddcc\"\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 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 if (!animation) return null\n return animationTypes[animation.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) => {\n const prefix = 'animate__'\n const elRef = document.querySelector(`#editable-element-${elId} [class^=editable-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animationType}`\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\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 const animations = (currentSlideAnimations.value as PPTAnimation[]).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 runAnimation(handleElement.value.id, type)\n }\n\n // 添加元素入场动画,并执行一次预览\n const addAnimation = (type: string) => {\n if (handleElementAnimation.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: 1000,\n })\n store.commit(MutationTypes.UPDATE_SLIDE, { animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n runAnimation(handleElement.value.id, type)\n }\n\n return {\n handleElement,\n animationPoolVisible,\n animations,\n animationSequence,\n hoverPreviewAnimation,\n handleElementAnimation,\n addAnimation,\n deleteAnimation,\n handleDragEnd,\n runAnimation,\n }\n },\n})\n","import { render } from \"./ElementAnimationPanel.vue?vue&type=template&id=2a95eecd&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=2a95eecd&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2a95eecd\"\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 } 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-style-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 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 }\n },\n})\n","import { render } from \"./SlideStylePanel.vue?vue&type=template&id=40e749dc&scoped=true\"\nimport script from \"./SlideStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideStylePanel.vue?vue&type=style&index=0&id=40e749dc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-40e749dc\"\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=6e3028f1&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=6e3028f1&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6e3028f1\"\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 SortedElementData {\r\n el: PPTElement;\r\n pos: 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 // 水平均匀排列\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 copyOfActiveElementList.sort((elementA, elementB) => {\r\n const { minX: elAMinX } = getElementRange(elementA)\r\n const { minX: elBMinX } = getElementRange(elementB)\r\n return elAMinX - elBMinX\r\n })\r\n\r\n // 计算元素均匀分布所需要的间隔:\r\n // (所选元素整体范围 - 所有所选元素宽度和) / (所选元素数 - 1)\r\n let totalWidth = 0\r\n for (const element of activeElementList.value) {\r\n const { minX: elMinX, maxX: elMaxX } = getElementRange(element)\r\n totalWidth += (elMaxX - elMinX)\r\n }\r\n const span = ((maxX - minX) - totalWidth) / (activeElementList.value.length - 1)\r\n\r\n // 将所选元素按位置顺序依次计算目标位置\r\n // 注意pos并非元素目标left值,而是目标位置范围最小值(元素旋转后的left值 ≠ 范围最小值)\r\n const sortedElementData: SortedElementData[] = []\r\n for (const element of copyOfActiveElementList) {\r\n if (!sortedElementData.length) {\r\n const { minX: firstElMinX } = getElementRange(element)\r\n sortedElementData.push({ el: element, pos: firstElMinX })\r\n continue\r\n }\r\n \r\n const lastItemElement = sortedElementData[sortedElementData.length - 1].el\r\n const lastItemPos = sortedElementData[sortedElementData.length - 1].pos\r\n const { minX: lastElementMinX, maxX: lastElementMaxX } = getElementRange(lastItemElement)\r\n const lastElementWidth = lastElementMaxX - lastElementMinX\r\n \r\n sortedElementData.push({ el: element, pos: lastItemPos + lastElementWidth + span })\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 copyOfActiveElementList.sort((elementA, elementB) => {\r\n const { minY: elAMinY } = getElementRange(elementA)\r\n const { minY: elBMinY } = getElementRange(elementB)\r\n return elAMinY - elBMinY\r\n })\r\n\r\n let totalHeight = 0\r\n for (const element of activeElementList.value) {\r\n const { minY: elMinY, maxY: elMaxY } = getElementRange(element)\r\n totalHeight += (elMaxY - elMinY)\r\n }\r\n const span = ((maxY - minY) - totalHeight) / (activeElementList.value.length - 1)\r\n\r\n const sortedElementData: SortedElementData[] = []\r\n for (const element of copyOfActiveElementList) {\r\n if (!sortedElementData.length) {\r\n const { minY: firstElMinY } = getElementRange(element)\r\n sortedElementData.push({ el: element, pos: firstElMinY })\r\n continue\r\n }\r\n \r\n const lastItemElement = sortedElementData[sortedElementData.length - 1].el\r\n const lastItemPos = sortedElementData[sortedElementData.length - 1].pos\r\n const { minY: lastElementMinY, maxY: lastElementMaxY } = getElementRange(lastItemElement)\r\n const lastElementHeight = lastElementMaxY - lastElementMinY\r\n \r\n sortedElementData.push({ el: element, pos: lastItemPos + lastElementHeight + span })\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 uniformHorizontalDisplay,\r\n uniformVerticalDisplay,\r\n }\r\n}","\nimport { computed, defineComponent } from 'vue'\nimport { useStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\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 store = useStore()\n const activeElementList = computed(() => store.getters.activeElementList)\n\n const { combineElements, uncombineElements } = useCombineElement()\n const { alignActiveElement } = useAlignActiveElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { uniformHorizontalDisplay, uniformVerticalDisplay } = useUniformDisplayElement()\n\n // 判断当前多选的几个元素是否可以组合\n const canCombine = computed(() => {\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 // 如果所选元素为一组组合元素,则将它对齐到画布;\n // 如果所选元素不是组合元素或不止一组元素(即当前为可组合状态),则将这多个(多组)元素相互对齐。\n const alignElement = (command: ElementAlignCommand) => {\n if (canCombine.value) alignActiveElement(command)\n else alignElementToCanvas(command)\n }\n\n return {\n activeElementList,\n canCombine,\n combineElements,\n uncombineElements,\n uniformHorizontalDisplay,\n uniformVerticalDisplay,\n alignElement,\n }\n },\n})\n","import { render } from \"./MultiPositionPanel.vue?vue&type=template&id=aef45858&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=aef45858&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-aef45858\"\n\nexport default script","\nimport { computed, defineComponent, watch } from 'vue'\nimport { MutationTypes, useStore } from '@/store'\nimport { ToolbarState, ToolbarStates } from '@/types/toolbar'\n\nimport ElementStylePanel from './ElementStylePanel/index.vue'\nimport ElementPositionPanel from './ElementPositionPanel.vue'\nimport ElementAnimationPanel from './ElementAnimationPanel.vue'\nimport SlideStylePanel from './SlideStylePanel.vue'\nimport SlideAnimationPanel from './SlideAnimationPanel.vue'\nimport MultiPositionPanel from './MultiPositionPanel.vue'\n\nexport default defineComponent({\n name: 'toolbar',\n setup() {\n const store = useStore()\n const toolbarState = computed(() => store.state.toolbarState)\n\n const elementTabs = [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n const slideTabs = [\n { label: '页面样式', value: ToolbarStates.SLIDE_STYLE },\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\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_STYLE]: SlideStylePanel,\n [ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,\n [ToolbarStates.MULTI_POSITION]: MultiPositionPanel,\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=f790671e&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=f790671e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-f790671e\"\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 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=89372f4a&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=89372f4a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-89372f4a\"\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","\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 return {\n currentElementComponent,\n needWaitAnimation,\n theme,\n }\n },\n})\n","import { render } from \"./ScreenElement.vue?vue&type=template&id=6490813d\"\nimport script from \"./ScreenElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenElement.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 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 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=9174b3bc&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=9174b3bc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9174b3bc\"\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 },\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=61d4949c&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=61d4949c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-61d4949c\"\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 components: {\n WritingBoard,\n },\n setup(props, { emit }) {\n const writingBoardRef = ref()\n const writingBoardColor = ref('#e2534d')\n const writingBoardModel = ref('pen')\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 changePen,\n changeEraser,\n clearCanvas,\n changeColor,\n closeWritingBoard,\n }\n },\n})\n","import { render } from \"./WritingBoardTool.vue?vue&type=template&id=f34025bc&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=f34025bc&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-f34025bc\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, onUnmounted, provide, ref } from 'vue'\nimport throttle from 'lodash/throttle'\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 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 elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\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 // 向上/向下播放\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 message.success('已经是第一页了')\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 message.success('已经是最后一页了')\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 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 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=5e85dd68&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=5e85dd68&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5e85dd68\"\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","\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=5490894e&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=5490894e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5490894e\"\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","// 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} 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\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 }\n}","\n\n\n\n","\nimport { defineComponent, ref } from 'vue'\n\nexport default defineComponent({\n name: 'file-input',\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=bf80565c&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=bf80565c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-bf80565c\"\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 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=e9a0ac98&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=e9a0ac98&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-e9a0ac98\"\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 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=ecf7d10e&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=ecf7d10e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-ecf7d10e\"\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 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=52d10460&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=52d10460&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-52d10460\"\n\nexport default script","\n\n\n\n","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport throttle from 'lodash/throttle'\nimport clamp from 'lodash/clamp'\n\nexport default defineComponent({\n name: 'saturation',\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=a98797da&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=a98797da&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a98797da\"\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 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=0311fdee&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=0311fdee&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0311fdee\"\n\nexport default script","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport debounce from 'lodash/debounce'\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 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=4adab90a&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=4adab90a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-4adab90a\"\n\nexport default script","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 '@/assets/styles/prosemirror.scss'\nimport '@/assets/styles/global.scss'\nimport '@/assets/styles/antd.scss'\nimport '@/assets/styles/font.scss'\nimport 'animate.css'\n\n// 自定义插件\nimport Contextmenu from './plugins/contextmenu'\nimport ClickOutside from './plugins/clickOutside'\nimport IconPark from './plugins/iconPark'\n\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'\n\n// antd 组件\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.directive('contextmenu', Contextmenu)\napp.directive('click-outside', ClickOutside)\napp.use(IconPark)\n\napp.component('FileInput', FileInput)\napp.component('SvgWrapper', SvgWrapper)\napp.component('CheckboxButton', CheckboxButton)\napp.component('CheckboxButtonGroup', CheckboxButtonGroup)\napp.component('ColorPicker', ColorPicker)\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(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!./index.vue?vue&type=style&index=0&id=6ed7d252&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!./ExportDialog.vue?vue&type=style&index=0&id=a69a4592&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=d2dd6e5c&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=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!./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!./FileInput.vue?vue&type=style&index=0&id=bf80565c&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!./ChartDataEditor.vue?vue&type=style&index=0&id=42e69ec4&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=0028f4b9&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\"","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=9174b3bc&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!./WritingBoard.vue?vue&type=style&index=0&id=61d4949c&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file