From ad46c328c1ce311ae41f4c008b6ebfc3251cd0e4 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Tue, 26 Apr 2022 15:42:05 +0000 Subject: [PATCH] deploy to github pages e4f1fa5eae9a4e0326a4871ffa53164036112e83 --- index.html | 2 +- js/app.47a45865.js | 2 ++ js/{app.90f175cd.js.map => app.47a45865.js.map} | 2 +- js/app.90f175cd.js | 2 -- 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 js/app.47a45865.js rename js/{app.90f175cd.js.map => app.47a45865.js.map} (60%) delete mode 100644 js/app.90f175cd.js diff --git a/index.html b/index.html index b0ef6fee..7bd3ee1b 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.47a45865.js b/js/app.47a45865.js new file mode 100644 index 00000000..f13e96e2 --- /dev/null +++ b/js/app.47a45865.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var o,a,r=t[0],i=t[1],u=t[2],s=0,f=[];sb){var p=e.nodeAt(l),m=p&&p.marks.find(c);if(!m||m!==a)break;s=l,r=p,l--}l=n+1,b=e.nodeSize-2;while(l-1||t.type===e},F=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}}},R=function(e){return function(t){return F(t.$from,e)}},P=function(e){return function(t){return R((function(t){return A(e,t)}))(t)}},H=function(e,t){var n=t.schema.nodes[e];return!!P(n)(t.selection)},q=function(e){var t,n,o=e.state,l=o.selection,c=o.doc,a=l.from,r=c.nodeAt(a)||c.nodeAt(a-1);return null!==(t=r)&&void 0!==t&&t.lastChild&&(r=r.lastChild),(null===(n=r)||void 0===n?void 0:n.marks)||[]},W=function(e,t,n){var o,l=Object(T["a"])(e);try{for(l.s();!(o=l.n()).done;){var c=o.value;if(c.type.name===t&&c.attrs[n])return c.attrs[n]}}catch(a){l.e(a)}finally{l.f()}return null},G=function(e,t){var n,o=Object(T["a"])(e);try{for(o.s();!(n=o.n()).done;){var l=n.value;if(l.type.name===t)return!0}}catch(c){o.e(c)}finally{o.f()}return!1},U=function(e,t){var n=e.selection,o=n.from,l=n.$from,c=n.to,a=n.empty;return a?t.isInSet(e.storedMarks||l.marks()):e.doc.rangeHasMark(o,c,t)},X=function(e,t){var n=e.state,o=n.selection,l=n.doc,c=o.from,a=o.to,r=!0,i="";return l.nodesBetween(c,a,(function(e){return r&&e.attrs[t]&&(r=!1,i=e.attrs[t]),r})),i},Z={color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",align:"left"},Y=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=Object(L["a"])(Object(L["a"])({},Z),t);var n=q(e),o=G(n,"strong"),l=G(n,"em"),c=G(n,"underline"),a=G(n,"strikethrough"),r=G(n,"superscript"),i=G(n,"subscript"),u=G(n,"code"),d=W(n,"forecolor","color")||t.color,s=W(n,"backcolor","backcolor")||t.backcolor,f=W(n,"fontsize","fontsize")||t.fontsize,b=W(n,"fontname","fontname")||t.fontname,p=W(n,"link","href")||"",m=X(e,"align")||t.align,v=H("bullet_list",e.state),O=H("ordered_list",e.state),h=H("blockquote",e.state);return{bold:o,em:l,underline:c,strikethrough:a,superscript:r,subscript:i,code:u,color:d,backcolor:s,fontsize:f,fontname:b,link:p,align:m,bulletList:v,orderedList:O,blockquote:h}},J={bold:!1,em:!1,underline:!1,strikethrough:!1,superscript:!1,subscript:!1,code:!1,color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",link:"",align:"left",bulletList:!1,orderedList:!1,blockquote:!1},Q=(n("99af"),n("fb6a"),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,l=100,c="a",a=document.createElement("canvas"),r=a.getContext("2d");if(!r)return!1;a.width=o,a.height=l,r.textAlign="center",r.fillStyle="black",r.textBaseline="middle";var i=function(e){r.clearRect(0,0,o,l),r.font="".concat(n,"px ").concat(e,", ").concat(t),r.fillText(c,o/2,l/2);var a=r.getImageData(0,0,o,l).data;return[].slice.call(a).filter((function(e){return 0!==e}))};return i(t).join("")!==i(e).join("")}),K=n("2909"),$=(n("d81d"),n("ac1f"),n("5319"),n("5b81"),n("e9c4"),n("a434"),n("c740"),n("66cb")),ee=n.n($),te=n("2ef0"),ne=[{id:"test123456",elements:[{type:"shape",id:"4cbRxp",left:0,top:200,width:546,height:362.5,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"#5b9bd5",fixedRatio:!1,opacity:.7,rotate:0},{type:"shape",id:"ookHrf",left:0,top:0,width:300,height:320,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"#5b9bd5",fixedRatio:!1,flipV:!0,rotate:0},{type:"text",id:"idn7Mx",left:355,top:65.25,width:585,height:188,lineHeight:1.2,content:"

PPTIST

",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"}}],oe={themeColor:"#5b9bd5",fontColor:"#333",fontName:"Microsoft Yahei",backgroundColor:"#fff"},le=[{id:"template",elements:[{type:"shape",id:"4cbRxp",left:0,top:200,width:546,height:362.5,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,opacity:.7,rotate:0},{type:"shape",id:"ookHrf",left:0,top:0,width:300,height:320,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,flipV:!0,rotate:0},{type:"text",id:"AkIh3E",left:355,top:95.11111111111111,width:585,height:116,lineHeight:1.2,content:"

输入标题

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

请在此处输入副标题

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

在此处添加标题

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

在此处添加副标题

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

感谢观看

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

01

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

在此处输入标题

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

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

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

1

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

4

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

3

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

2

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

01

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

在此处添加标题

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

3.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

4.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

请在此处输入标题

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

请在此处输入内容1

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

请在此处输入内容2

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

请在此处输入内容3

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

请在此处输入内容4

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

1

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

在此输入内容

在此输入内容

在此输入内容

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

2

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

在此输入内容

在此输入内容

在此输入内容

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

3

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

在此输入内容

在此输入内容

在此输入内容

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

4

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

在此输入内容

在此输入内容

在此输入内容

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

5

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

在此输入内容

在此输入内容

在此输入内容

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

6

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

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}}],ce=Object(g["b"])("slides",{state:function(){return{theme:oe,slides:ne,slideIndex:0,viewportRatio:.5625}},getters:{currentSlide:function(e){return e.slides[e.slideIndex]},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,l=o.map((function(e){return e.id}));return n.filter((function(e){return l.includes(e.elId)}))},layouts:function(e){var t=e.theme,n=t.themeColor,o=t.fontColor,l=t.fontName,c=t.backgroundColor,a=ee()(o).isDark()?"rgba(230, 230, 230, 0.5)":"rgba(180, 180, 180, 0.5)",r=JSON.stringify(le).replaceAll("{{themeColor}}",n).replaceAll("{{fontColor}}",o).replaceAll("{{fontName}}",l).replaceAll("{{backgroundColor}}",c).replaceAll("{{subColor}}",a);return JSON.parse(r)}},actions:{setTheme:function(e){this.theme=Object(L["a"])(Object(L["a"])({},this.theme),e)},setViewportRatio:function(e){this.viewportRatio=e},setSlides:function(e){this.slides=e},addSlide:function(e){var t,n=Array.isArray(e)?e:[e],o=this.slideIndex+1;(t=this.slides).splice.apply(t,[o,0].concat(Object(K["a"])(n))),this.slideIndex=o},updateSlide:function(e){var t=this.slideIndex;this.slides[t]=Object(L["a"])(Object(L["a"])({},this.slides[t]),e)},deleteSlide:function(e){for(var t=this,n=Array.isArray(e)?e:[e],o=[],l=function(e){var l=t.slides.findIndex((function(t){return t.id===n[e]}));o.push(l)},c=0;cr&&(a=r),this.slideIndex=a,this.slides=this.slides.filter((function(e){return!n.includes(e.id)}))},updateSlideIndex:function(e){this.slideIndex=e},addElement:function(e){var t=Array.isArray(e)?e:[e],n=this.slides[this.slideIndex].elements,o=[].concat(Object(K["a"])(n),Object(K["a"])(t));this.slides[this.slideIndex].elements=o},updateElement:function(e){var t=e.id,n=e.props,o="string"===typeof t?[t]:t,l=this.slideIndex,c=this.slides[l],a=c.elements.map((function(e){return o.includes(e.id)?Object(L["a"])(Object(L["a"])({},e),n):e}));this.slides[l].elements=a},removeElementProps:function(e){var t=e.id,n=e.propName,o="string"===typeof n?[n]:n,l=this.slideIndex,c=this.slides[l],a=c.elements.map((function(e){return e.id===t?Object(te["omit"])(e,o):e}));this.slides[l].elements=a}}}),ae=Object(g["b"])("main",{state:function(){return{activeElementIdList:[],handleElementId:"",activeGroupElementId:"",canvasPercentage:90,canvasScale:1,thumbnailsFocus:!1,editorAreaFocus:!1,disableHotkeys:!1,showGridLines:!1,creatingElement:null,availableFonts:S,toolbarState:C.SLIDE_DESIGN,clipingImageElementId:"",richTextAttrs:J,selectedTableCells:[],isScaling:!1,editingShapeElementId:"",selectedSlidesIndex:[]}},getters:{activeElementList:function(e){var t=ce(),n=t.currentSlide;return n&&n.elements?n.elements.filter((function(t){return e.activeElementIdList.includes(t.id)})):[]},handleElement:function(e){var t=ce(),n=t.currentSlide;return n&&n.elements&&n.elements.find((function(t){return e.handleElementId===t.id}))||null}},actions:{setActiveElementIdList:function(e){1===e.length?this.handleElementId=e[0]:this.handleElementId="",this.activeElementIdList=e},setHandleElementId:function(e){this.handleElementId=e},setActiveGroupElementId:function(e){this.activeGroupElementId=e},setCanvasPercentage:function(e){this.canvasPercentage=e},setCanvasScale:function(e){this.canvasScale=e},setThumbnailsFocus:function(e){this.thumbnailsFocus=e},setEditorareaFocus:function(e){this.editorAreaFocus=e},setDisableHotkeysState:function(e){this.disableHotkeys=e},setGridLinesState:function(e){this.showGridLines=e},setCreatingElement:function(e){this.creatingElement=e},setAvailableFonts:function(){this.availableFonts=S.filter((function(e){return Q(e.value)}))},setToolbarState:function(e){this.toolbarState=e},setClipingImageElementId:function(e){this.clipingImageElementId=e},setRichtextAttrs:function(e){this.richTextAttrs=e},setSelectedTableCells:function(e){this.selectedTableCells=e},setScalingState:function(e){this.isScaling=e},setEditingShapeElementId:function(e){this.editingShapeElementId=e},updateSelectedSlidesIndex:function(e){this.selectedSlidesIndex=e}}}),re=n("1da1"),ie=(n("96cf"),n("ddb0"),n("d4ec")),ue=n("257e"),de=n("262e"),se=n("2caf"),fe=n("ade3"),be=n("4dec"),pe=function(e){Object(de["a"])(n,e);var t=Object(se["a"])(n);function n(){var e;return Object(ie["a"])(this,n),e=t.call(this,"SnapshotDatabase"),Object(fe["a"])(Object(ue["a"])(e),"snapshots",void 0),e.version(1).stores({snapshots:"++id"}),e.snapshots=e.table("snapshots"),e}return n}(be["a"]),me=new pe,ve=Object(g["b"])("snapshot",{state:function(){return{snapshotCursor:-1,snapshotLength:0}},getters:{canUndo:function(e){return e.snapshotCursor>0},canRedo:function(e){return e.snapshotCursor=0&&e.snapshotCursorr&&(l.push(o[0]),a--),a>=2&&me.snapshots.update(o[a-2],{index:n.slideIndex}),t.next=15,me.snapshots.bulkDelete(l);case 15:e.setSnapshotCursor(a-1),e.setSnapshotLength(a);case 17:case"end":return t.stop()}}),t)})))()},unDo:function(){var e=this;return Object(re["a"])(regeneratorRuntime.mark((function t(){var n,o,l,c,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!(e.snapshotCursor<=0)){t.next=2;break}return t.abrupt("return");case 2:return n=ce(),o=ae(),l=e.snapshotCursor-1,t.next=7,me.snapshots.orderBy("id").toArray();case 7:c=t.sent,a=c[l],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,n.setSlides(i),n.updateSlideIndex(u),e.setSnapshotCursor(l),o.setActiveElementIdList([]);case 15:case"end":return t.stop()}}),t)})))()},reDo:function(){var e=this;return Object(re["a"])(regeneratorRuntime.mark((function t(){var n,o,l,c,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!(e.snapshotCursor>=e.snapshotLength-1)){t.next=2;break}return t.abrupt("return");case 2:return n=ce(),o=ae(),l=e.snapshotCursor+1,t.next=7,me.snapshots.orderBy("id").toArray();case 7:c=t.sent,a=c[l],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,n.setSlides(i),n.updateSlideIndex(u),e.setSnapshotCursor(l),o.setActiveElementIdList([]);case 15:case"end":return t.stop()}}),t)})))()}}}),Oe=Object(g["b"])("keyboard",{state:function(){return{ctrlKeyState:!1,shiftKeyState:!1}},getters:{ctrlOrShiftKeyActive:function(e){return e.ctrlKeyState||e.shiftKeyState}},actions:{setCtrlKeyState:function(e){this.ctrlKeyState=e},setShiftKeyState:function(e){this.shiftKeyState=e}}}),he=Object(g["b"])("screen",{state:function(){return{screening:!1}},actions:{setScreening:function(e){this.screening=e}}}),je=(n("466d"),function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:8,t="_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",n=t.length,o="",l=0;l"),o=n.split("
"),l="",c=Object(T["a"])(o);try{for(c.s();!(t=c.n()).done;){var a=t.value;a&&(l+="
".concat(a,"
"))}}catch(r){c.e(r)}finally{c.f()}return l}),$e=function(){var e=ve(),t=Object(te["debounce"])((function(){e.addSnapshot()}),300,{trailing:!0}),n=Object(te["throttle"])((function(){e.reDo()}),100,{leading:!0,trailing:!1}),o=Object(te["throttle"])((function(){e.unDo()}),100,{leading:!0,trailing:!1});return{addHistorySnapshot:t,redo:n,undo:o}},et=(n("cb29"),function(e){return new Promise((function(t){var n=document.createElement("img");n.src=e,n.style.opacity="0",document.body.appendChild(n),n.onload=function(){var e=n.clientWidth,o=n.clientHeight;n.onload=null,n.onerror=null,document.body.removeChild(n),t({width:e,height:o})},n.onerror=function(){n.onload=null,n.onerror=null}}))}),tt=function(e){return new Promise((function(t){var n=new FileReader;n.addEventListener("load",(function(){t(n.result)})),n.readAsDataURL(e)}))},nt=1e3;(function(e){e["ROUND_RECT"]="roundRect",e["ROUND_RECT_DIAGONAL"]="roundRectDiagonal",e["ROUND_RECT_SINGLE"]="roundRectSingle",e["ROUND_RECT_SAMESIDE"]="roundRectSameSide",e["CUT_RECT_DIAGONAL"]="cutRectDiagonal",e["CUT_RECT_SINGLE"]="cutRectSingle",e["CUT_RECT_SAMESIDE"]="cutRectSameSide",e["MESSAGE"]="message",e["ROUND_MESSAGE"]="roundMessage",e["L"]="L",e["RING_RECT"]="ringRect",e["PLUS"]="plus"})(we||(we={})),function(e){e["TEXT"]="text",e["IMAGE"]="image",e["SHAPE"]="shape",e["LINE"]="line",e["CHART"]="chart",e["TABLE"]="table",e["LATEX"]="latex",e["VIDEO"]="video",e["AUDIO"]="audio"}(Ne||(Ne={}));var ot=(Ie={},Object(fe["a"])(Ie,we.ROUND_RECT,(function(e,t){var n=Math.min(e,t)/8;return"M ".concat(n," 0 L ").concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t-n," Q ").concat(e," ").concat(t," ").concat(e-n," ").concat(t," L ").concat(n," ").concat(t," Q 0 ").concat(t," 0 ").concat(t-n," L 0 ").concat(n," Q 0 0 ").concat(n," 0 Z")})),Object(fe["a"])(Ie,we.CUT_RECT_DIAGONAL,(function(e,t){var n=Math.min(e,t)/5;return"M 0 ".concat(t-n," L 0 0 L ").concat(e-n," 0 L ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L ").concat(n," ").concat(t," Z")})),Object(fe["a"])(Ie,we.CUT_RECT_SINGLE,(function(e,t){var n=Math.min(e,t)/5;return"M 0 ".concat(t," L 0 0 L ").concat(e-n," 0 L ").concat(e," ").concat(n," L ").concat(e," ").concat(t," Z")})),Object(fe["a"])(Ie,we.CUT_RECT_SAMESIDE,(function(e,t){var n=Math.min(e,t)/5;return"M 0 ".concat(n," L ").concat(n," 0 L ").concat(e-n," 0 L ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L 0 ").concat(t," Z")})),Object(fe["a"])(Ie,we.ROUND_RECT_DIAGONAL,(function(e,t){var n=Math.min(e,t)/8;return"M 0 0 L ".concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L ").concat(n," ").concat(t," Q 0 ").concat(t," 0 ").concat(t-n," L 0 0 Z")})),Object(fe["a"])(Ie,we.ROUND_RECT_SINGLE,(function(e,t){var n=Math.min(e,t)/8;return"M 0 0 L ".concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L 0 ").concat(t," L 0 0 Z")})),Object(fe["a"])(Ie,we.ROUND_RECT_SAMESIDE,(function(e,t){var n=Math.min(e,t)/8;return"M 0 ".concat(n," Q 0 0 ").concat(n," 0 L ").concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L 0 ").concat(t," Z")})),Object(fe["a"])(Ie,we.MESSAGE,(function(e,t){var n=e/5,o=t/5;return"M 0 0 L ".concat(e," 0 L ").concat(e," ").concat(t-o," L ").concat(e/2," ").concat(t-o," L ").concat(e/2-n," ").concat(t," L ").concat(e/2-n," ").concat(t-o," L 0 ").concat(t-o," Z")})),Object(fe["a"])(Ie,we.ROUND_MESSAGE,(function(e,t){var n=Math.min(e,t)/8,o=e/5,l=t/5;return"M 0 ".concat(n," Q 0 0 ").concat(n," 0 L ").concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t-n-l," Q ").concat(e," ").concat(t-l," ").concat(e-n," ").concat(t-l," L ").concat(e/2," ").concat(t-l," L ").concat(e/2-o," ").concat(t," L ").concat(e/2-o," ").concat(t-l," L ").concat(n," ").concat(t-l," Q 0 ").concat(t-l," 0 ").concat(t-n-l," L 0 ").concat(n," Z")})),Object(fe["a"])(Ie,we.L,(function(e,t){var n=Math.min(e,t)/4;return"M 0 0 L 0 ".concat(t," L ").concat(e," ").concat(t," L ").concat(e," ").concat(t-n," L ").concat(n," ").concat(t-n," L ").concat(n," 0 Z")})),Object(fe["a"])(Ie,we.RING_RECT,(function(e,t){var n=Math.min(e,t)/4;return"M 0 0 ".concat(e," 0 ").concat(e," ").concat(t," L 0 ").concat(t," L 0 0 Z M ").concat(n," ").concat(n," L ").concat(n," ").concat(t-n," L ").concat(e-n," ").concat(t-n," L ").concat(e-n," ").concat(n," Z")})),Object(fe["a"])(Ie,we.PLUS,(function(e,t){var n=Math.min(e,t)/4;return"M ".concat(e/2-n/2," 0 L ").concat(e/2-n/2," ").concat(t/2-n/2," L 0 ").concat(t/2-n/2," L 0 ").concat(t/2+n/2," L ").concat(e/2-n/2," ").concat(t/2+n/2," L ").concat(e/2-n/2," ").concat(t," L ").concat(e/2+n/2," ").concat(t," L ").concat(e/2+n/2," ").concat(t/2+n/2," L ").concat(e," ").concat(t/2+n/2," L ").concat(e," ").concat(t/2-n/2," L ").concat(e/2+n/2," ").concat(t/2-n/2," L ").concat(e/2+n/2," 0 Z")})),Ie),lt=[{type:"矩形",children:[{viewBox:[200,200],path:"M 0 0 L 200 0 L 200 200 L 0 200 Z"},{viewBox:[200,200],path:"M 50 0 L 150 0 Q 200 0 200 50 L 200 150 Q 200 200 150 200 L 50 200 Q 0 200 0 150 L 0 50 Q 0 0 50 0 Z",pathFormula:we.ROUND_RECT},{viewBox:[200,200],path:"M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 Z",pathFormula:we.CUT_RECT_DIAGONAL},{viewBox:[200,200],path:"M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 Z",pathFormula:we.CUT_RECT_SINGLE},{viewBox:[200,200],path:"M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 Z",pathFormula:we.CUT_RECT_SAMESIDE},{viewBox:[200,200],path:"M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 50 200 Q 0 200 0 150 L 0 0 Z",pathFormula:we.ROUND_RECT_DIAGONAL},{viewBox:[200,200],path:"M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 0 Z",pathFormula:we.ROUND_RECT_SINGLE},{viewBox:[200,200],path:"M 0 50 Q 0 0 50 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 Z",pathFormula:we.ROUND_RECT_SAMESIDE}]},{type:"常用形状",children:[{viewBox:[200,200],path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z"},{viewBox:[200,200],path:"M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z"},{viewBox:[200,200],path:"M 40 20 A 100 100 0 1 0 200 100 L 100 100 L 40 20 Z"},{viewBox:[200,200],path:"M 100 0 A 100 100 102 1 0 200 100 L 100 100 L 100 0 Z"},{viewBox:[200,200],path:"M 160 20 A 100 100 0 1 0 200 100 L 100 100 L 160 20 Z"},{viewBox:[200,200],path:"M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z"},{viewBox:[200,200],path:"M 100 0 A 100 100 102 1 0 200 100 L 200 0 L 100 0 Z"},{viewBox:[200,200],path:"M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z"},{viewBox:[200,200],path:"M 100 0 L 0 200 L 200 200 L 100 0 Z"},{viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z"},{viewBox:[200,200],path:"M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z"},{viewBox:[200,200],path:"M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z"},{viewBox:[200,200],path:"M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z"},{viewBox:[200,200],path:"M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z"},{viewBox:[200,200],path:"M 100 0 L 0 90 L 50 200 L 150 200 L 200 90 L 100 0 Z"},{viewBox:[200,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,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,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,200],path:"M 100 0 L 0 50 L 0 200 L 200 200 L 200 50 L 100 0 Z"},{viewBox:[200,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,200],path:"M 50 0 A 25 50 0 1 0 50 200 L 150 200 A 25 50 0 1 0 150 0 L 50 0 Z"},{viewBox:[200,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,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,200],path:"M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z"},{viewBox:[200,200],path:"M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z"},{viewBox:[200,200],path:"M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z"},{viewBox:[200,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,200],path:"M 0 0 L 0 200 L 200 200 L 200 140 L 60 140 L 60 0 L 0 0 Z",pathFormula:we.L},{viewBox:[200,200],path:"M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z",pathFormula:we.RING_RECT},{viewBox:[200,200],path:"M0 100 A100 100 0 1 1 0 101 Z M150 100 A50 50 0 1 0 150 101 Z"},{viewBox:[200,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",pathFormula:we.PLUS},{viewBox:[200,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,200],path:"M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 Z",pathFormula:we.MESSAGE},{viewBox:[200,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",pathFormula:we.ROUND_MESSAGE},{viewBox:[200,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,200],path:"M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z"},{viewBox:[200,200],path:"M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z"},{viewBox:[200,200],path:"M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z"},{viewBox:[200,200],path:"M 100 0 Q 0 50 0 175 Q 100 225 200 175 Q 200 50 100 0 Z"},{viewBox:[200,200],path:"M 0 100 A 50 50 0 1 1 200 100 L 100 200 L 0 100 Z"},{viewBox:[200,200],path:"M 100 0 L 60 60 L 0 100 L 60 140 L 100 200 L 140 140 L 200 100 L 140 60 L 100 0 Z"},{viewBox:[200,200],path:"M 100 0 L 80 40 L 20 20 L 40 80 L 0 100 L 40 120 L 20 180 L 80 160 L 100 200 L 120 160 L 180 180 L 160 120 L 200 100 L 160 80 L 180 20 L 120 40 L 100 0 Z"}]},{type:"箭头",children:[{viewBox:[200,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,200],path:"M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z"},{viewBox:[200,200],path:"M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z"},{viewBox:[200,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,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,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,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,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,1024],path:"M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z",special:!0},{viewBox:[1024,1024],path:"M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z",special:!0}]},{type:"其他形状",children:[{viewBox:[1024,1024],path:"M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z",special:!0},{viewBox:[1024,1024],path:"M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z",special:!0},{viewBox:[1024,1024],path:"M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z",special:!0},{viewBox:[1024,1024],path:"M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z",special:!0},{viewBox:[1024,1024],path:"M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z",special:!0},{viewBox:[1024,1024],path:"M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z",special:!0},{viewBox:[1024,1024],path:"M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z",special:!0},{viewBox:[1024,1024],path:"M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z",special:!0},{viewBox:[1024,1024],path:"M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z",special:!0},{viewBox:[1024,1024],path:"M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z",special:!0},{viewBox:[1024,1024],path:"M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z",special:!0},{viewBox:[1024,1024],path:"M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z",special:!0},{viewBox:[1024,1024],path:"M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z",special:!0},{viewBox:[1024,1024],path:"M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z",special:!0},{viewBox:[1024,1024],path:"M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z",special:!0},{viewBox:[1024,1024],path:"M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z",special:!0},{viewBox:[1024,1024],path:"M997.8886764 504.17210418L537.2729208 43.89182982c-13.97838539-13.97838539-36.56745619-13.97838539-50.5458416 0L26.1113236 504.17210418c-13.41924998 13.41924998-21.02349164 31.64706454-21.02349163 50.65766867 0 39.47496036 32.09437288 71.56933323 71.56933324 71.56933323h48.53295408V954.83524937c0 19.79339373 15.99127289 35.78466661 35.78466663 35.78466662H440.43066677V740.12724968h125.24633315v250.49266631h297.34821416c19.79339373 0 35.78466661-15.99127289 35.78466663-35.78466662V626.39910608h48.53295408c19.01060414 0 37.23841869-7.49241457 50.65766869-21.02349163 27.84494371-27.95677079 27.84494371-73.24673948-0.11182708-101.20351027z",special:!0}]}],ct={bar:"bar",horizontalBar:"bar",line:"line",area:"line",scatter:"line",pie:"pie",ring:"pie"},at=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.creatingElement,l=Object(g["c"])(t),c=l.theme,a=l.viewportRatio,r=$e(),i=r.addHistorySnapshot,u=function(n){t.addElement(n),e.setActiveElementIdList([n.id]),o.value&&e.setCreatingElement(null),setTimeout((function(){e.setEditorareaFocus(!0)}),0),i()},d=function(e){et(e).then((function(t){var n=t.width,o=t.height,l=o/n;lnt?(n=nt,o=n*l):o>nt*a.value&&(o=nt*a.value,n=o/l),u({type:"image",id:je(),src:e,width:n,height:o,left:(nt-n)/2,top:(nt*a.value-o)/2,fixedRatio:!0,rotate:0})}))},s=function(e){var t={type:"chart",id:je(),chartType:ct[e],left:300,top:81.25,width:400,height:400,rotate:0,themeColor:[c.value.themeColor],gridColor:c.value.fontColor,data:{labels:["类别1","类别2","类别3","类别4","类别5"],legends:["系列1"],series:[[12,19,5,2,18]]}},n={};"horizontalBar"===e?n={horizontalBars:!0}:"area"===e?n={showArea:!0}:"scatter"===e?n={showLine:!1}:"ring"===e&&(n={donut:!0}),u(Object(L["a"])(Object(L["a"])({},t),{},{options:n}))},f=function(e,t){for(var n={fontname:c.value.fontName,color:c.value.fontColor},o=[],l=0;l1&&void 0!==arguments[1]?arguments[1]:"请输入内容",n=e.left,o=e.top,l=e.width,a=e.height;u({type:"text",id:je(),left:n,top:o,width:l,height:a,content:t,rotate:0,defaultFontName:c.value.fontName,defaultColor:c.value.fontColor})},p=function(e,t){var n=e.left,o=e.top,l=e.width,a=e.height,r={type:"shape",id:je(),left:n,top:o,width:l,height:a,viewBox:t.viewBox,path:t.path,fill:c.value.themeColor,fixedRatio:!1,rotate:0};t.special&&(r.special=!0),t.pathFormula&&(r.pathFormula=t.pathFormula,r.viewBox=[l,a],r.path=ot[t.pathFormula](l,a)),u(r)},m=function(e,t){var n=e.left,o=e.top,l=e.start,a=e.end,r={type:"line",id:je(),left:n,top:o,start:l,end:a,points:t.points,color:c.value.themeColor,style:t.style,width:2};t.isBroken&&(r.broken=[(l[0]+a[0])/2,(l[1]+a[1])/2]),t.isCurve&&(r.curve=[(l[0]+a[0])/2,(l[1]+a[1])/2]),t.isCubic&&(r.cubic=[[(l[0]+a[0])/2,(l[1]+a[1])/2],[(l[0]+a[0])/2,(l[1]+a[1])/2]]),u(r)},v=function(e){u({type:"latex",id:je(),width:e.w,height:e.h,rotate:0,left:(nt-e.w)/2,top:(nt*a.value-e.h)/2,path:e.path,latex:e.latex,color:c.value.fontColor,strokeWidth:2,viewBox:[e.w,e.h],fixedRatio:!0})},O=function(e){u({type:"video",id:je(),width:500,height:300,rotate:0,left:(nt-500)/2,top:(nt*a.value-300)/2,src:e})},h=function(e){u({type:"audio",id:je(),width:50,height:50,rotate:0,left:(nt-50)/2,top:(nt*a.value-50)/2,loop:!1,autoplay:!1,fixedRatio:!0,color:c.value.themeColor,src:e})};return{createImageElement:d,createChartElement:s,createTableElement:f,createTextElement:b,createShapeElement:p,createLineElement:m,createLatexElement:v,createVideoElement:O,createAudioElement:h}},rt=function(){var e=ae(),t=ce(),n=Object(g["c"])(t),o=n.currentSlide,l=$e(),c=l.addHistorySnapshot,a=at(),r=a.createTextElement,i=function(n){var l,a=Ze(n),r=a.groupIdMap,i=a.elIdMap,u=o.value.elements.map((function(e){return e.id})),d=Object(T["a"])(n);try{for(d.s();!(l=d.n()).done;){var s=l.value,f=u.includes(s.id);s.id=i[s.id],f&&(s.left=s.left+10,s.top=s.top+10),s.groupId&&(s.groupId=r[s.groupId])}}catch(b){d.e(b)}finally{d.f()}t.addElement(n),e.setActiveElementIdList(Object.values(i)),c()},u=function(e){var n=e.map((function(e){var t,n=Ze(e.elements),o=n.groupIdMap,l=n.elIdMap,c=Object(T["a"])(e.elements);try{for(c.s();!(t=c.n()).done;){var a=t.value;a.id=l[a.id],a.groupId&&(a.groupId=o[a.groupId])}}catch(d){c.e(d)}finally{c.f()}if(e.animations){var r,i=Object(T["a"])(e.animations);try{for(i.s();!(r=i.n()).done;){var u=r.value;u.elId=l[u.elId]}}catch(d){i.e(d)}finally{i.f()}}return Object(L["a"])(Object(L["a"])({},e),{},{id:je()})}));t.addSlide(n),c()},d=function(e){r({left:0,top:0,width:600,height:50},e)},s=function(e,t){var n=(null===t||void 0===t?void 0:t.onlySlide)||!1,o=(null===t||void 0===t?void 0:t.onlyElements)||!1,l=Re(e);if("object"===Object(Qe["a"])(l)){var c=l.type,a=l.data;"elements"!==c||n?"slides"!==c||o||u(a):i(a)}else if(!o&&!n){var r=Ke(l);d(r)}};return{addSlidesFromClipboard:u,pasteTextClipboardData:s}},it=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.selectedSlidesIndex,l=Object(g["c"])(t),c=l.currentSlide,a=l.slides,r=l.theme,i=l.slideIndex,u=Object(y["computed"])((function(){return[].concat(Object(K["a"])(o.value),[i.value])})),d=Object(y["computed"])((function(){return a.value.filter((function(e,t){return u.value.includes(t)}))})),s=Object(y["computed"])((function(){return d.value.map((function(e){return e.id}))})),f=rt(),b=f.pasteTextClipboardData,p=f.addSlidesFromClipboard,m=$e(),v=m.addHistorySnapshot,O=function(){var n={id:je(),elements:[],background:{type:"solid",color:r.value.backgroundColor}};t.updateSlideIndex(0),e.setActiveElementIdList([]),t.setSlides([n])},h=function(e){e===V.UP&&i.value>0?t.updateSlideIndex(i.value-1):e===V.DOWN&&i.value0&&void 0!==arguments[0]?arguments[0]:s.value;a.value.length===n.length?O():t.deleteSlide(n),e.updateSelectedSlidesIndex([]),v()},N=function(){var e=Object(K["a"])(s.value);j(),w(e)},I=function(){var t=Array.from(Array(a.value.length),(function(e,t){return t}));e.setActiveElementIdList([]),e.updateSelectedSlidesIndex(t)};return{resetSlides:O,updateSlideIndex:h,copySlide:j,pasteSlide:x,createSlide:C,createSlideByTemplate:k,copyAndPasteSlide:E,deleteSlide:w,cutSlide:N,selectAllSlide:I}},ut=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.activeElementIdList,l=Object(g["c"])(t),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=function(){var n,l=JSON.parse(JSON.stringify(c.value.elements)),a=Object(T["a"])(l);try{for(a.s();!(n=a.n()).done;){var i=n.value;o.value.includes(i.id)&&(i.lock=!0)}}catch(u){a.e(u)}finally{a.f()}t.updateSlide({elements:l}),e.setActiveElementIdList([]),r()},u=function(n){var o=JSON.parse(JSON.stringify(c.value.elements));if(n.groupId){var l,a=[],i=Object(T["a"])(o);try{for(i.s();!(l=i.n()).done;){var u=l.value;u.groupId===n.groupId&&(u.lock=!1,a.push(u.id))}}catch(b){i.e(b)}finally{i.f()}t.updateSlide({elements:o}),e.setActiveElementIdList(a)}else{var d,s=Object(T["a"])(o);try{for(s.s();!(d=s.n()).done;){var f=d.value;if(f.id===n.id){f.lock=!1;break}}}catch(b){s.e(b)}finally{s.f()}t.updateSlide({elements:o}),e.setActiveElementIdList([n.id])}r()};return{lockElement:i,unlockElement:u}},dt=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.activeElementIdList,l=n.activeGroupElementId,c=Object(g["c"])(t),a=c.currentSlide,r=$e(),i=r.addHistorySnapshot,u=function(){if(o.value.length){var n=[];n=l.value?a.value.elements.filter((function(e){return e.id!==l.value})):a.value.elements.filter((function(e){return!o.value.includes(e.id)})),e.setActiveElementIdList([]),t.updateSlide({elements:n}),i()}},d=function(){a.value.elements.length&&(e.setActiveElementIdList([]),t.updateSlide({elements:[]}),i())};return{deleteElement:u,deleteAllElements:d}},st=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.activeElementIdList,l=n.activeElementList,c=n.handleElementId,a=Object(g["c"])(t),r=a.currentSlide,i=$e(),u=i.addHistorySnapshot,d=Object(y["computed"])((function(){if(l.value.length<2)return!1;var e=l.value[0].groupId;if(!e)return!0;var t=l.value.every((function(t){return(t.groupId&&t.groupId)===e}));return!t})),s=function(){var e;if(l.value.length){var n,c=JSON.parse(JSON.stringify(r.value.elements)),a=je(),i=[],d=Object(T["a"])(c);try{for(d.s();!(n=d.n()).done;){var s=n.value;o.value.includes(s.id)&&(s.groupId=a,i.push(s))}}catch(m){d.e(m)}finally{d.f()}var f=c.findIndex((function(e){return e.id===i[i.length-1].id})),b=i.map((function(e){return e.id}));c=c.filter((function(e){return!b.includes(e.id)}));var p=f-i.length+1;(e=c).splice.apply(e,[p,0].concat(i)),t.updateSlide({elements:c}),u()}},f=function(){if(l.value.length){var n=l.value.some((function(e){return e.groupId}));if(n){var a,i=JSON.parse(JSON.stringify(r.value.elements)),d=Object(T["a"])(i);try{for(d.s();!(a=d.n()).done;){var s=a.value;o.value.includes(s.id)&&s.groupId&&delete s.groupId}}catch(b){d.e(b)}finally{d.f()}t.updateSlide({elements:i});var f=c.value?[c.value]:[];e.setActiveElementIdList(f),u()}}};return{canCombine:d,combineElements:s,uncombineElements:f}},ft=function(){var e=ae(),t=Object(g["c"])(e),n=t.activeElementIdList,o=t.activeElementList,l=rt(),c=l.pasteTextClipboardData,a=dt(),r=a.deleteElement,i=function(){if(n.value.length){var t=De(JSON.stringify({type:"elements",data:o.value}));Ae(t).then((function(){e.setEditorareaFocus(!0)}))}},u=function(){i(),r()},d=function(){Fe().then((function(e){c(e)})).catch((function(e){return Se["a"].warning(e)}))},s=function(){i(),d()};return{copyElement:i,cutElement:u,pasteElement:d,quickCopyElement:s}},bt=function(){var e=ae(),t=Object(g["c"])(ce()),n=t.currentSlide,o=function(){var t=n.value.elements.filter((function(e){return!e.lock})),o=t.map((function(e){return e.id}));e.setActiveElementIdList(o)};return{selectAllElement:o}},pt=function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeGroupElementId,l=Object(g["c"])(e),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=function(t){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,a=[],i=function(e){var n=e.left,o=e.top;switch(t){case V.LEFT:n-=l;break;case V.RIGHT:n+=l;break;case V.UP:o-=l;break;case V.DOWN:o+=l;break;default:break}return Object(L["a"])(Object(L["a"])({},e),{},{left:n,top:o})};a=o.value?c.value.elements.map((function(e){return o.value===e.id?i(e):e})):c.value.elements.map((function(e){return n.value.includes(e.id)?i(e):e})),e.updateSlide({elements:a}),r()};return{moveElement:i}},mt=function(){var e=ce(),t=Object(g["c"])(e),n=t.currentSlide,o=$e(),l=o.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})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return;var i=n[r+1],u=n.splice(a,o.length);if(i.groupId){var d=n.filter((function(e){return e.groupId===i.groupId}));n.splice.apply(n,[a+d.length,0].concat(Object(K["a"])(u)))}else n.splice.apply(n,[a+1,0].concat(Object(K["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],b=n.splice(s,1)[0];if(f.groupId){var p=n.filter((function(e){return e.groupId===f.groupId}));n.splice(s+p.length,0,b)}else n.splice(s+1,0,b)}return n},r=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n[a-1],i=n.splice(a,o.length);if(r.groupId){var u=n.filter((function(e){return e.groupId===r.groupId}));n.splice.apply(n,[a-u.length,0].concat(Object(K["a"])(i)))}else n.splice.apply(n,[a-1,0].concat(Object(K["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 b=n.filter((function(e){return e.groupId===s.groupId}));n.splice(d-b.length,0,f)}else n.splice(d-1,0,f)}return n},i=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return null;var i=n.splice(a,o.length);n.push.apply(n,Object(K["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},u=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n.splice(a,o.length);n.unshift.apply(n,Object(K["a"])(r))}else{var i=e.findIndex((function(e){return e.id===t.id}));if(0===i)return;n.splice(i,1),n.unshift(t)}return n},d=function(t,o){var c;o===k.UP?c=a(n.value.elements,t):o===k.DOWN?c=r(n.value.elements,t):o===k.TOP?c=i(n.value.elements,t):o===k.BOTTOM&&(c=u(n.value.elements,t)),c&&(e.updateSlide({elements:c}),l())};return{orderElement:d}},vt=function(){var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen&&e.webkitRequestFullScreen()},Ot=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},ht=function(){return document.mozFullScreen||document.webkitIsFullScreen||document.webkitFullScreen},jt=function(){var e=he(),t=ce(),n=function(){vt(),e.setScreening(!0)},o=function(){t.updateSlideIndex(0),n()},l=function(){e.setScreening(!1),ht()&&Ot()};return{enterScreening:n,enterScreeningFromStart:o,exitScreening:l}},yt=function(){var e=ae(),t=Object(g["c"])(e),n=t.canvasPercentage,o=function(t){var o=n.value,l=5,c=120,a=60;"+"===t&&o<=c&&(o+=l),"-"===t&&o>=a&&(o-=l),e.setCanvasPercentage(o)},l=function(t){e.setCanvasPercentage(t)};return{scaleCanvas:o,setCanvasPercentage:l}},gt=function(){var e=ae(),t=Oe(),n=Object(g["c"])(e),o=n.activeElementIdList,l=n.disableHotkeys,c=n.handleElement,a=n.handleElementId,r=n.editorAreaFocus,i=n.thumbnailsFocus,u=Object(g["c"])(ce()),d=u.currentSlide,s=Object(g["c"])(t),f=s.ctrlKeyState,b=s.shiftKeyState,p=it(),m=p.updateSlideIndex,v=p.copySlide,O=p.createSlide,h=p.deleteSlide,j=p.cutSlide,x=p.copyAndPasteSlide,C=p.selectAllSlide,E=st(),w=E.combineElements,N=E.uncombineElements,I=dt(),S=I.deleteElement,B=ut(),L=B.lockElement,T=ft(),M=T.copyElement,_=T.cutElement,D=T.quickCopyElement,z=bt(),A=z.selectAllElement,F=pt(),R=F.moveElement,P=mt(),H=P.orderElement,q=$e(),W=q.redo,G=q.undo,U=jt(),X=U.enterScreening,Z=yt(),Y=Z.scaleCanvas,J=Z.setCanvasPercentage,Q=function(){o.value.length?M():i.value&&v()},K=function(){o.value.length?_():i.value&&j()},$=function(){o.value.length?D():i.value&&x()},ee=function(){r.value&&A(),i.value&&C()},te=function(){r.value&&L()},ne=function(){r.value&&w()},oe=function(){r.value&&N()},le=function(){o.value.length?S():i.value&&h()},re=function(e){o.value.length?R(e):e!==V.UP&&e!==V.DOWN||m(e)},ie=function(e){c.value&&H(c.value,e)},ue=function(){i.value&&O()},de=function(){if(d.value.elements.length)if(a.value){var t=d.value.elements.findIndex((function(e){return e.id===a.value})),n=t>=d.value.elements.length-1?0:t+1,o=d.value.elements[n].id;e.setActiveElementIdList([o])}else{var l=d.value.elements[0];e.setActiveElementIdList([l.id])}},se=function(e){var n=e.ctrlKey,o=e.shiftKey,c=e.altKey,a=e.metaKey,u=n||a,d=e.key.toUpperCase();if(u&&!f.value&&t.setCtrlKeyState(!0),o&&!b.value&&t.setShiftKeyState(!0),u&&d===V.F&&(e.preventDefault(),X(),t.setCtrlKeyState(!1)),r.value||i.value){if(u&&d===V.C){if(l.value)return;e.preventDefault(),Q()}if(u&&d===V.X){if(l.value)return;e.preventDefault(),K()}if(u&&d===V.D){if(l.value)return;e.preventDefault(),$()}if(u&&d===V.Z){if(l.value)return;e.preventDefault(),G()}if(u&&d===V.Y){if(l.value)return;e.preventDefault(),W()}if(u&&d===V.A){if(l.value)return;e.preventDefault(),ee()}if(u&&d===V.L){if(l.value)return;e.preventDefault(),te()}if(!o&&u&&d===V.G){if(l.value)return;e.preventDefault(),ne()}if(o&&u&&d===V.G){if(l.value)return;e.preventDefault(),oe()}if(c&&d===V.F){if(l.value)return;e.preventDefault(),ie(k.TOP)}if(c&&d===V.B){if(l.value)return;e.preventDefault(),ie(k.BOTTOM)}if(d===V.DELETE||d===V.BACKSPACE){if(l.value)return;e.preventDefault(),le()}if(d===V.UP){if(l.value)return;e.preventDefault(),re(V.UP)}if(d===V.DOWN){if(l.value)return;e.preventDefault(),re(V.DOWN)}if(d===V.LEFT){if(l.value)return;e.preventDefault(),re(V.LEFT)}if(d===V.RIGHT){if(l.value)return;e.preventDefault(),re(V.RIGHT)}if(d===V.ENTER){if(l.value)return;e.preventDefault(),ue()}if(d===V.MINUS){if(l.value)return;e.preventDefault(),Y("-")}if(d===V.EQUAL){if(l.value)return;e.preventDefault(),Y("+")}if(d===V.DIGIT_0){if(l.value)return;e.preventDefault(),J(90)}if(d===V.TAB){if(l.value)return;e.preventDefault(),de()}}},fe=function(){f.value&&t.setCtrlKeyState(!1),b.value&&t.setShiftKeyState(!1)};Object(y["onMounted"])((function(){document.addEventListener("keydown",se),document.addEventListener("keyup",fe),window.addEventListener("blur",fe)})),Object(y["onUnmounted"])((function(){document.removeEventListener("keydown",se),document.removeEventListener("keyup",fe),window.removeEventListener("blur",fe)}))},xt=function(){var e=Object(g["c"])(ae()),t=e.editorAreaFocus,n=e.thumbnailsFocus,o=e.disableHotkeys,l=rt(),c=l.pasteTextClipboardData,a=at(),r=a.createImageElement,i=function(e){tt(e).then((function(e){return r(e)}))},u=function(e){if((t.value||n.value)&&!o.value&&e.clipboardData){var l=e.clipboardData.items,a=l[0];if(a){var r,u=Object(T["a"])(l);try{for(u.s();!(r=u.n()).done;){var d=r.value;if("file"===d.kind&&-1!==d.type.indexOf("image")){var s=d.getAsFile();return void(s&&i(s))}}}catch(f){u.e(f)}finally{u.f()}"string"===a.kind&&"text/plain"===a.type&&a.getAsString((function(e){return c(e)}))}}};Object(y["onMounted"])((function(){document.addEventListener("paste",u)})),Object(y["onUnmounted"])((function(){document.removeEventListener("paste",u)}))},Ct=function(e){return Object(y["pushScopeId"])("data-v-5e62abba"),e=e(),Object(y["popScopeId"])(),e},kt={class:"editor-header"},Et={class:"left"},wt={class:"menu-item"},Nt=Object(y["createTextVNode"])(),It=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"文件",-1)})),Vt=Object(y["createTextVNode"])("导出 JSON"),St=Object(y["createTextVNode"])("导出 PPTX"),Bt=Object(y["createTextVNode"])("导出图片"),Lt={class:"menu-item"},Tt=Object(y["createTextVNode"])(),Mt=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"编辑",-1)})),_t=Object(y["createTextVNode"])("撤销"),Dt=Object(y["createTextVNode"])("重做"),zt=Object(y["createTextVNode"])("添加页面"),At=Object(y["createTextVNode"])("删除页面"),Ft=Object(y["createTextVNode"])("重置幻灯片"),Rt={class:"menu-item"},Pt=Object(y["createTextVNode"])(),Ht=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"演示",-1)})),qt=Object(y["createTextVNode"])("从头开始"),Wt=Object(y["createTextVNode"])("从当前页开始"),Gt={class:"menu-item"},Ut=Object(y["createTextVNode"])(),Xt=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"帮助",-1)})),Zt=Object(y["createTextVNode"])("意见反馈"),Yt=Object(y["createTextVNode"])("快捷键"),Jt={class:"right"},Qt={href:"https://github.com/pipipi-pikachu/PPTist",target:"_blank"},Kt={class:"menu-item"};function $t(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconFolderClose"),r=Object(y["resolveComponent"])("MenuItem"),i=Object(y["resolveComponent"])("Menu"),u=Object(y["resolveComponent"])("Dropdown"),d=Object(y["resolveComponent"])("IconEdit"),s=Object(y["resolveComponent"])("IconPpt"),f=Object(y["resolveComponent"])("IconHelpcenter"),b=Object(y["resolveComponent"])("Tooltip"),p=Object(y["resolveComponent"])("IconGithub"),m=Object(y["resolveComponent"])("HotkeyDoc"),v=Object(y["resolveComponent"])("Drawer"),O=Object(y["resolveComponent"])("ExportImgDialog"),h=Object(y["resolveComponent"])("Modal"),j=Object(y["resolveComponent"])("FullscreenSpin");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",kt,[Object(y["createElementVNode"])("div",Et,[Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[0]||(t[0]=function(t){return e.exportJSON()})},{default:Object(y["withCtx"])((function(){return[Vt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.exportPPTX()})},{default:Object(y["withCtx"])((function(){return[St]})),_:1}),Object(y["createVNode"])(r,{onClick:t[2]||(t[2]=function(t){return e.exportImgDialogVisible=!0})},{default:Object(y["withCtx"])((function(){return[Bt]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",wt,[Object(y["createVNode"])(a),Nt,It])]})),_:1}),Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[3]||(t[3]=function(t){return e.undo()})},{default:Object(y["withCtx"])((function(){return[_t]})),_:1}),Object(y["createVNode"])(r,{onClick:t[4]||(t[4]=function(t){return e.redo()})},{default:Object(y["withCtx"])((function(){return[Dt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[5]||(t[5]=function(t){return e.createSlide()})},{default:Object(y["withCtx"])((function(){return[zt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[6]||(t[6]=function(t){return e.deleteSlide()})},{default:Object(y["withCtx"])((function(){return[At]})),_:1}),Object(y["createVNode"])(r,{onClick:t[7]||(t[7]=function(t){return e.toggleGridLines()})},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])(Object(y["toDisplayString"])(e.showGridLines?"关闭网格线":"打开网格线"),1)]})),_:1}),Object(y["createVNode"])(r,{onClick:t[8]||(t[8]=function(t){return e.resetSlides()})},{default:Object(y["withCtx"])((function(){return[Ft]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Lt,[Object(y["createVNode"])(d),Tt,Mt])]})),_:1}),Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[9]||(t[9]=function(t){return e.enterScreeningFromStart()})},{default:Object(y["withCtx"])((function(){return[qt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[10]||(t[10]=function(t){return e.enterScreening()})},{default:Object(y["withCtx"])((function(){return[Wt]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Rt,[Object(y["createVNode"])(s),Pt,Ht])]})),_:1}),Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[11]||(t[11]=function(t){return e.goIssues()})},{default:Object(y["withCtx"])((function(){return[Zt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[12]||(t[12]=function(t){return e.hotkeyDrawerVisible=!0})},{default:Object(y["withCtx"])((function(){return[Yt]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Gt,[Object(y["createVNode"])(f),Ut,Xt])]})),_:1})]),Object(y["createElementVNode"])("div",Jt,[Object(y["createVNode"])(b,{mouseLeaveDelay:0,title:"幻灯片放映"},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",{class:"menu-item",onClick:t[13]||(t[13]=function(t){return e.enterScreening()})},[Object(y["createVNode"])(s,{size:"18",fill:"#666",style:{"margin-top":"2px"}})])]})),_:1}),Object(y["createElementVNode"])("a",Qt,[Object(y["createElementVNode"])("div",Kt,[Object(y["createVNode"])(p,{size:"18",fill:"#666"})])])]),Object(y["createVNode"])(v,{width:"320",placement:"right",visible:e.hotkeyDrawerVisible,onClose:t[14]||(t[14]=function(t){return e.hotkeyDrawerVisible=!1})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m)]})),_:1},8,["visible"]),Object(y["createVNode"])(h,{visible:e.exportImgDialogVisible,"onUpdate:visible":t[16]||(t[16]=function(t){return e.exportImgDialogVisible=t}),footer:null,centered:"",closable:!1,width:680,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{onClose:t[15]||(t[15]=function(t){return e.exportImgDialogVisible=!1})})]})),_:1},8,["visible"]),Object(y["createVNode"])(j,{loading:e.exporting,tip:"正在导出..."},null,8,["loading"])])}n("9911"),n("cc71");var en=n("21a6"),tn=n("8f74"),nn=n("e774"),on=(n("00b4"),["style","script","template"]),ln=["html","head","body","p","dt","dd","li","option","thead","th","tbody","tr","td","tfoot","colgroup"],cn={li:["ul","ol","menu"],dt:["dl"],dd:["dl"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table"],td:["table"]},an=["!doctype","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],rn=function(e,t){var n=t-e.position;un(e,n)},un=function(e,t){e.position=e.position+t},dn=function(e,t){var n=!1;while(!n){var o=e.indexOf("<",t);if(-1===o)return o;var l=e.charAt(o+1);if("/"===l||"!"===l||/[A-Za-z0-9]/.test(l))return o;t=o+1}return-1},sn=function(e){var t=e.str,n=dn(t,e.position);if(n!==e.position){-1===n&&(n=t.length);var o=t.slice(e.position,n);rn(e,n),e.tokens.push({type:"text",content:o})}},fn=function(e){var t=e.str;un(e,4);var n=t.indexOf("--\x3e",e.position),o=n+3;-1===n&&(n=o=t.length);var l=t.slice(e.position,n);rn(e,o),e.tokens.push({type:"comment",content:l})},bn=function(e){var t=e.str,n=t.length,o=e.position;while(o"===l);if(c)break;o++}var a=o+1;while(a"===r);if(!i)break;a++}rn(e,a);var u=t.slice(o,a);return e.tokens.push({type:"tag",content:u}),u},pn=function(e){var t=e.str,n=e.tokens,o=e.position,l=null,c=o,a=[],r=t.length;while(o"===i;if(d){o!==c&&a.push(t.slice(c,o));break}var s=/\s/.test(i);if(s)o!==c&&a.push(t.slice(c,o)),c=o+1,o++;else{var f="'"===i||'"'===i;f?(l=i,o++):o++}}}rn(e,o);for(var b="attribute",p=0;p1){var h=m+O;n.push({type:b,content:h}),p+=1;continue}var j=a[p+2];if(p+=1,j){var y=m+"="+j;n.push({type:b,content:y}),p+=1;continue}}}if(Object(te["endsWith"])(m,"=")){var g=a[p+1];if(g&&-1===g.indexOf("=")){var x=m+g;n.push({type:b,content:x}),p+=1;continue}var C=m.slice(0,-1);n.push({type:b,content:C})}else n.push({type:b,content:m})}},mn=function(e,t){var n=t.str,o=t.tokens,l=e.toLowerCase(),c=n.length,a=t.position;while(a=0){var l=t[o].tagName;if(l===e)break;if(n.includes(l))return!0;o--}}return!1},gn=function(e,t){e.splice(t)},xn=function e(t){var n=t.stack,o=t.tokens,l=t.cursor,c=n[n.length-1].children,a=o.length;while(l-1)if(n[d].tagName===u){s=!0;break}while(l0){if(u===n[p].tagName){gn(n,p);var m=p-1;c=n[m].children;break}p-=1}}var v=[],O=void 0;while(l127&&o<2048?(t+=String.fromCharCode(o>>6|192),t+=String.fromCharCode(63&o|128)):(t+=String.fromCharCode(o>>12|224),t+=String.fromCharCode(o>>6&63|128),t+=String.fromCharCode(63&o|128))}return t},_n=function(e){var t,n,o,l,c,a,r,i="",u=0;e=Mn(e);while(u>2,c=(3&t)<<4|n>>4,a=(15&n)<<2|o>>6,r=63&o,isNaN(n)?a=r=64:isNaN(o)&&(r=64),i=i+Ln.charAt(l)+Ln.charAt(c)+Ln.charAt(a)+Ln.charAt(r);return i},Dn=function(e){var t=new XMLSerializer,n=t.serializeToString(e);return Tn+_n(n)},zn=function(){var e=Object(g["c"])(ce()),t=e.slides,n=Object(y["ref"])(!1),o=function(e,t,o){var l=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];n.value=!0;var c="png"===t?nn["c"]:nn["b"];setTimeout((function(){if(e){var a=function(e){return!e.tagName||"FOREIGNOBJECT"!==e.tagName.toUpperCase()},r={quality:o,width:1600,filter:a};l&&(r.fontEmbedCSS=""),c(e,r).then((function(e){n.value=!1,Object(en["saveAs"])(e,"pptist_slides.".concat(t))})).catch((function(){n.value=!1,Se["a"].error("导出图片失败")}))}}),200)},l=function(){var e=new Blob([JSON.stringify(t.value)],{type:""});Object(en["saveAs"])(e,"pptist_slides.json")},c=function(e){var t=ee()(e),n=t.getAlpha(),o=0===n?"#ffffff":t.setAlpha(1).toHexString();return{alpha:n,color:o}},a=function(e){var t=Nn(e),n=[],o=function e(t){var o,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=Object(T["a"])(t);try{for(a.s();!(o=a.n()).done;){var r=o.value;if("tagName"in r&&["div","li","p"].includes(r.tagName)&&n.length){var i=n[n.length-1];i.options||(i.options={}),i.options.breakLine=!0}var u=Object(L["a"])({},l),d="attributes"in r?r.attributes.find((function(e){return"style"===e.key})):null;if(d&&d.value){var s,f=d.value.split(";"),b=Object(T["a"])(f);try{for(b.s();!(s=b.n()).done;){var p=s.value,m=p.split(": "),v=Object(He["a"])(m,2),O=v[0],h=v[1],j=[Object(te["trim"])(O),Object(te["trim"])(h)],y=j[0],g=j[1];y&&g&&(u[y]=g)}}catch(w){b.e(w)}finally{b.f()}}if("tagName"in r&&("ul"===r.tagName&&(u["list-type"]="ul"),"ol"===r.tagName&&(u["list-type"]="ol")),"tagName"in r&&("em"===r.tagName&&(u["font-style"]="italic"),"strong"===r.tagName&&(u["font-weight"]="bold"),"sup"===r.tagName&&(u["vertical-align"]="super"),"sub"===r.tagName&&(u["vertical-align"]="sub"),"a"===r.tagName)){var x=r.attributes.find((function(e){return"href"===e.key}));u["href"]=(null===x||void 0===x?void 0:x.value)||""}if("tagName"in r&&"br"===r.tagName)n.push({text:"",options:{breakLine:!0}});else if("content"in r){var C=r.content.replace(/ /g," ").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,""),k={};u["font-size"]&&(k.fontSize=.75*parseInt(u["font-size"])),u["color"]&&(k.color=c(u["color"]).color),u["background-color"]&&(k.highlight=c(u["background-color"]).color),u["text-decoration-line"]&&(-1!==u["text-decoration-line"].indexOf("underline")&&(k.underline={color:k.color||"#000000",style:"sng"}),-1!==u["text-decoration-line"].indexOf("line-through")&&(k.strike="sngStrike")),u["text-decoration"]&&(-1!==u["text-decoration"].indexOf("underline")&&(k.underline={color:k.color||"#000000",style:"sng"}),-1!==u["text-decoration"].indexOf("line-through")&&(k.strike="sngStrike")),u["vertical-align"]&&("super"===u["vertical-align"]&&(k.superscript=!0),"sub"===u["vertical-align"]&&(k.subscript=!0)),u["text-align"]&&(k.align=u["text-align"]),u["font-weight"]&&(k.bold="bold"===u["font-weight"]),u["font-style"]&&(k.italic="italic"===u["font-style"]),u["font-family"]&&(k.fontFace=u["font-family"]),u["href"]&&(k.hyperlink={url:u["href"]}),n.push({text:C,options:k})}else"children"in r&&e(r.children,u);if("tagName"in r&&"li"===r.tagName){var E=n[n.length-1];E.options||(E.options={}),"ol"===u["list-type"]&&(E.options.bullet={type:"number",indent:15}),"ul"===u["list-type"]&&(E.options.bullet={indent:15})}}}catch(w){a.e(w)}finally{a.f()}};return o(t),n},r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:1,y:1};return e.map((function(e){if(void 0!==e.close)return{close:!0};if("M"===e.type)return{x:e.x/100*t.x,y:e.y/100*t.y,moveTo:!0};if(e.curve){if("cubic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"cubic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y,x2:e.curve.x2/100*t.x,y2:e.curve.y2/100*t.y}};if("quadratic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"quadratic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y}}}return{x:e.x/100*t.x,y:e.y/100*t.y}}))},i=function(e){var t=c(e.color);return{type:"outer",color:t.color.replace("#",""),opacity:t.alpha,blur:.75*e.blur,offset:(e.h+e.v)/2*.75,angle:45}},u=function(e){var t=c((null===e||void 0===e?void 0:e.color)||"#000000");return{color:t.color,transparency:100*(1-t.alpha),width:.75*(e.width||1),dashType:"solid"===e.style?"solid":"dash"}},d=function(){n.value=!0;var e,o=new tn["a"],l=Object(T["a"])(t.value);try{for(l.s();!(e=l.n()).done;){var d=e.value,s=o.addSlide();if(d.background){var f=d.background;if("image"===f.type&&f.image)s.background={data:f.image};else if("solid"===f.type&&f.color){var b=c(f.color);s.background={color:b.color,transparency:100*(1-b.alpha)}}else if("gradient"===f.type&&f.gradientColor){var p=Object(He["a"])(f.gradientColor,2),m=p[0],v=p[1],O=ee.a.mix(m,v).toHexString(),h=c(O);s.background={color:h.color,transparency:100*(1-h.alpha)}}}if(d.elements){var j,y=Object(T["a"])(d.elements);try{var g=function(){var e=j.value;if("text"===e.type){var n,l=a(e.content),d={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:"middle",margin:7.5,lineSpacingMultiple:1.25};if(e.rotate&&(d.rotate=e.rotate),e.wordSpace&&(d.charSpacing=.75*e.wordSpace),e.lineHeight&&(d.lineSpacingMultiple=e.lineHeight/1.2),e.fill){var f=c(e.fill),b=void 0===e.opacity?1:e.opacity;d.fill={color:f.color,transparency:100*(1-f.alpha*b)}}e.defaultColor&&(d.color=c(e.defaultColor).color),e.defaultFontName&&(d.fontFace=e.defaultFontName),e.shadow&&(d.shadow=i(e.shadow)),null!==(n=e.outline)&&void 0!==n&&n.width&&(d.line=u(e.outline)),void 0!==e.opacity&&(d.transparency=100*(1-e.opacity)),s.addText(l,d)}else if("image"===e.type){var p,m,v={path:e.src,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};if(e.flipH&&(v.flipH=e.flipH),e.flipV&&(v.flipV=e.flipV),e.rotate&&(v.rotate=e.rotate),e.link){var O=e.link,h=O.type,y=O.target;if("web"===h)v.hyperlink={url:y};else if("slide"===h){var g=t.value.findIndex((function(e){return e.id===y}));-1!==g&&(v.hyperlink={slide:g+1})}}if(null!==(p=e.filters)&&void 0!==p&&p.opacity&&(v.transparency=100-parseInt(null===(m=e.filters)||void 0===m?void 0:m.opacity)),e.clip){"ellipse"===e.clip.shape&&(v.rounding=!0);var x=e.clip.range,C=e.width/((x[1][0]-x[0][0])/100),k=e.height/((x[1][1]-x[0][1])/100);v.w=C/100,v.h=k/100;var E=x[0][0]/100*C/100,w=x[0][1]/100*k/100,N=(x[1][0]-x[0][0])/100*C/100,I=(x[1][1]-x[0][1])/100*k/100;v.sizing={type:"crop",w:N,h:I,x:E,y:w}}s.addImage(v)}else if("shape"===e.type){if(e.special){var V=document.querySelector(".thumbnail-list .base-element-".concat(e.id," svg")),S=Dn(V),B={data:S,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};if(e.rotate&&(B.rotate=e.rotate),e.link){var L=e.link,T=L.type,M=L.target;if("web"===T)B.hyperlink={url:M};else if("slide"===T){var _=t.value.findIndex((function(e){return e.id===M}));-1!==_&&(B.hyperlink={slide:_+1})}}s.addImage(B)}else{var D,z={x:e.width/e.viewBox[0],y:e.height/e.viewBox[1]},A=r(Bn(e.path),z),F=c(e.fill),R=void 0===e.opacity?1:e.opacity,P={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fill:{color:F.color,transparency:100*(1-F.alpha*R)},points:A};if(e.flipH&&(P.flipH=e.flipH),e.flipV&&(P.flipV=e.flipV),e.shadow&&(P.shadow=i(e.shadow)),null!==(D=e.outline)&&void 0!==D&&D.width&&(P.line=u(e.outline)),e.link){var H=e.link,q=H.type,W=H.target;if("web"===q)P.hyperlink={url:W};else if("slide"===q){var G=t.value.findIndex((function(e){return e.id===W}));-1!==G&&(P.hyperlink={slide:G+1})}}s.addShape("custGeom",P)}if(e.text){var U=a(e.text.content),X={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:e.text.align};e.rotate&&(X.rotate=e.rotate),e.text.defaultColor&&(X.color=c(e.text.defaultColor).color),e.text.defaultFontName&&(X.fontFace=e.text.defaultFontName),s.addText(U,X)}}else if("line"===e.type){var Z=Je(e),Y=r(Bn(Z)),J=Ge(e),Q=J.minX,$=J.maxX,te=J.minY,ne=J.maxY,oe=c(e.color),le={x:e.left/100,y:e.top/100,w:($-Q)/100,h:(ne-te)/100,line:{color:oe.color,transparency:100*(1-oe.alpha),width:.75*e.width,dashType:"solid"===e.style?"solid":"dash",beginArrowType:e.points[0]?"arrow":"none",endArrowType:e.points[1]?"arrow":"none"},points:Y};e.shadow&&(le.shadow=i(e.shadow)),s.addShape("custGeom",le)}else if("chart"===e.type){for(var ce=[],ae=0;ae1||xe.rowspan>1)for(var Ce=je;Ce=10)t=e.themeColor;else if(1===e.themeColor.length)t=ee()(e.themeColor[0]).analogous(10).map((function(e){return e.toHexString()}));else{var n=e.themeColor.length,o=ee()(e.themeColor[n-1]).analogous(11-n).map((function(e){return e.toHexString()}));t=[].concat(Object(K["a"])(e.themeColor.slice(0,n-1)),Object(K["a"])(o))}return t})),u=function(){if(n.value)for(var e=0;e<10;e++)n.value.style.setProperty("--theme-color-".concat(e+1),i.value[e])};Object(y["watch"])(i,u),Object(y["onMounted"])(u);var d=function(){n.value&&e.gridColor&&n.value.style.setProperty("--grid-color",e.gridColor)};return Object(y["watch"])((function(){return e.gridColor}),d),Object(y["onMounted"])(d),{chartHeight:l,themeColors:i,slideScale:o,chartRef:n}}}));n("97a7"),n("8749");const Ql=Gn()(Jl,[["render",Xl],["__scopeId","data-v-79ce410e"]]);var Kl=Ql,$l=Object(y["defineComponent"])({name:"base-element-chart",components:{ElementOutline:ul,Chart:Kl},props:{elementInfo:{type:Object,required:!0},needScaleSize:{type:Boolean,default:!0}},setup:function(e){return{chartWidth:Object(y["computed"])((function(){return e.needScaleSize?10*e.elementInfo.width:e.elementInfo.width})),chartHeight:Object(y["computed"])((function(){return e.needScaleSize?10*e.elementInfo.height:e.elementInfo.height}))}}});n("c645");const ec=Gn()($l,[["render",Ul],["__scopeId","data-v-60d9ae43"]]);var tc=ec,nc={class:"element-content"};function oc(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("StaticTable");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"base-element-table",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["createElementVNode"])("div",nc,[Object(y["createVNode"])(a,{data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme},null,8,["data","width","colWidths","outline","theme"])])],4)],4)}var lc=["width"],cc=["rowspan","colspan"],ac=["innerHTML"];function rc(e,t,n,o,l,c){var a,r,i,u,d;return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"static-table",style:Object(y["normalizeStyle"])({width:e.totalWidth+"px"})},[Object(y["createElementVNode"])("table",{class:Object(y["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(y["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(y["createElementVNode"])("colgroup",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.colSizeList,(function(e,t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,lc)})),128))]),Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.data,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("tr",{key:n},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t,(function(t,o){return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("td",{class:"cell",style:Object(y["normalizeStyle"])(Object(L["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(y["createElementVNode"])("div",{class:"cell-text",innerHTML:e.formatText(t.text)},null,8,ac)],12,cc)),[[y["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))]])})),128))])})),128))])],6)],4)}var ic=function(e){if(!e)return{};var t=e.bold,n=e.em,o=e.underline,l=e.strikethrough,c=e.color,a=e.backcolor,r=e.fontsize,i=e.fontname,u=e.align,d="".concat(o?"underline":""," ").concat(l?"line-through":"");return" "===d&&(d="none"),{fontWeight:t?"bold":"normal",fontStyle:n?"italic":"normal",textDecoration:d,color:c||"#000",backgroundColor:a||"",fontSize:r||"14px",fontFamily:i||"微软雅黑",textAlign:u||"left"}},uc=function(e){return e.replace(/\n/g,"
").replace(/ /g," ")},dc=function(e){var t=Object(y["computed"])((function(){for(var t=[],n=0;n1||c.rowspan>1)for(var a=n;a1?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0,elementList:e.elementList,scaleMultiElement:e.scaleMultiElement},null,8,["elementList","scaleMultiElement"])):Object(y["createCommentVNode"])("",!0),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.elementList,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:t.id,elementInfo:t,isSelected:e.activeElementIdList.includes(t.id),isActive:e.handleElementId===t.id,isActiveGroupElement:e.activeGroupElementId===t.id,isMultiSelect:e.activeElementIdList.length>1,rotateElement:e.rotateElement,scaleElement:e.scaleElement,openLinkDialog:e.openLinkDialog,dragLineElement:e.dragLineElement},null,8,["elementInfo","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement"])})),128)),Object(y["createVNode"])(d)]),Object(y["createElementVNode"])("div",{class:"viewport",ref:"viewportRef",style:Object(y["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")})},[e.mouseSelectionVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:0,top:e.mouseSelection.top,left:e.mouseSelection.left,width:e.mouseSelection.width,height:e.mouseSelection.height,quadrant:e.mouseSelectionQuadrant},null,8,["top","left","width","height","quadrant"])):Object(y["createCommentVNode"])("",!0),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.elementList,(function(t,n){return Object(y["openBlock"])(),Object(y["createBlock"])(f,{key:t.id,elementInfo:t,elementIndex:n+1,isMultiSelect:e.activeElementIdList.length>1,selectElement:e.selectElement,openLinkDialog:e.openLinkDialog},null,8,["elementInfo","elementIndex","isMultiSelect","selectElement","openLinkDialog"])})),128))],4)],4),Object(y["createVNode"])(p,{visible:e.linkDialogVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.linkDialogVisible=t}),footer:null,centered:"",width:540,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{onClose:t[1]||(t[1]=function(t){return e.linkDialogVisible=!1})})]})),_:1},8,["visible"])],32)),[[m,e.contextmenus],[v,e.removeEditorAreaFocus]])}var Yc=function(){var e=window.getSelection();e&&e.removeAllRanges()},Jc=function(e){var t=Object(y["ref"])(0),n=Object(y["ref"])(0),o=ae(),l=Object(g["c"])(o),c=l.canvasPercentage,a=Object(g["c"])(ce()),r=a.viewportRatio,i=function(){if(e.value){var l=e.value.clientWidth,a=e.value.clientHeight;if(a/l>r.value){var i=l*(c.value/100);o.setCanvasScale(i/nt),t.value=(l-i)/2,n.value=(a-i*r.value)/2}else{var u=a*(c.value/100);o.setCanvasScale(u/(nt*r.value)),t.value=(l-u/r.value)/2,n.value=(a-u)/2}}};Object(y["watch"])([c,r],i);var u=Object(y["computed"])((function(){return{width:nt,height:nt*r.value,left:t.value,top:n.value}})),d=new ResizeObserver(i);return Object(y["onMounted"])((function(){e.value&&d.observe(e.value)})),Object(y["onUnmounted"])((function(){e.value&&d.unobserve(e.value)})),{viewportStyles:u}},Qc=function(e,t){var n=ae(),o=Object(g["c"])(n),l=o.canvasScale,c=Object(y["ref"])(!1),a=Object(y["ref"])(1),r=Object(y["ref"])({top:0,left:0,width:0,height:0}),i=function(o){if(t.value){var i=!0,u=t.value.getBoundingClientRect(),d=5,s=o.pageX,f=o.pageY,b=(s-u.x)/l.value,p=(f-u.y)/l.value;r.value={top:p,left:b,width:0,height:0},c.value=!1,a.value=4,document.onmousemove=function(e){if(i){var t=e.pageX,n=e.pageY,o=(t-s)/l.value,u=(n-f)/l.value,b=Math.abs(o),p=Math.abs(u);if(!(b0&&u>0?m=4:o<0&&u<0?m=1:o>0&&u<0?m=2:o<0&&u>0&&(m=3),r.value=Object(L["a"])(Object(L["a"])({},r.value),{},{width:b,height:p}),c.value=!0,a.value=m}}},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null,i=!1;for(var t=[],o=0;ou&&md&&Ou-s&&md-f&&Ou&&md-f&&Ou-s&&md&&O0&&Math.abs(r-45)<=d?r-=r-45:r<0&&Math.abs(r+45)<=d?r-=r+45:r>0&&Math.abs(r-90)<=d?r-=r-90:r<0&&Math.abs(r+90)<=d?r-=r+90:r>0&&Math.abs(r-135)<=d?r-=r-135:r<0&&Math.abs(r+135)<=d?r-=r+135:r>0&&Math.abs(r-180)<=d?r-=r-180:r<0&&Math.abs(r+180)<=d&&(r-=r+180),e.value=e.value.map((function(e){return o.id===e.id?Object(L["a"])(Object(L["a"])({},e),{},{rotate:r}):e}))}},document.onmouseup=function(){c=!1,document.onmousemove=null,document.onmouseup=null,i!==r&&(n.updateSlide({elements:e.value}),a())}}};return{rotateElement:r}},ta={text:"文本",image:"图片",shape:"形状",line:"线条",chart:"图表",table:"表格",video:"视频",audio:"音频"},na={text:20,image:20,shape:15,chart:200,table:20,video:250,audio:20},oa=function(e,t){var n=e.left,o=e.top,l=e.width,c=e.height,a=Math.sqrt(Math.pow(l,2)+Math.pow(c,2))/2,r=180*Math.atan(c/l)/Math.PI,i=(180-t-r)*Math.PI/180,u=(r-t)*Math.PI/180,d=(90-t)*Math.PI/180,s=t*Math.PI/180,f=l/2,b=c/2,p=n+f,m=o+b,v={left:p+a*Math.cos(i),top:m-a*Math.sin(i)},O={left:p+b*Math.cos(d),top:m-b*Math.sin(d)},h={left:p+a*Math.cos(u),top:m-a*Math.sin(u)},j={left:p+f*Math.cos(s),top:m+f*Math.sin(s)},y={left:p-a*Math.cos(i),top:m+a*Math.sin(i)},g={left:p-b*Math.sin(s),top:m+b*Math.cos(s)},x={left:p-a*Math.cos(u),top:m+a*Math.sin(u)},C={left:p-f*Math.cos(s),top:m-f*Math.sin(s)};return{leftTopPoint:v,topPoint:O,rightTopPoint:h,rightPoint:j,rightBottomPoint:y,bottomPoint:g,leftBottomPoint:x,leftPoint:C}},la=function(e,t){var n,o=(n={},Object(fe["a"])(n,N.RIGHT_BOTTOM,t.leftTopPoint),Object(fe["a"])(n,N.LEFT_BOTTOM,t.rightTopPoint),Object(fe["a"])(n,N.LEFT_TOP,t.rightBottomPoint),Object(fe["a"])(n,N.RIGHT_TOP,t.leftBottomPoint),Object(fe["a"])(n,N.TOP,t.bottomPoint),Object(fe["a"])(n,N.BOTTOM,t.topPoint),Object(fe["a"])(n,N.LEFT,t.rightPoint),Object(fe["a"])(n,N.RIGHT,t.leftPoint),n);return o[e]},ca=function(e,t){var n=ae(),o=ce(),l=Object(g["c"])(n),c=l.activeElementIdList,a=l.activeGroupElementId,r=l.canvasScale,i=Object(g["c"])(o),u=i.viewportRatio,d=Object(g["c"])(Oe()),s=d.ctrlOrShiftKeyActive,f=$e(),b=f.addHistorySnapshot,p=function(l,i,d){var f=!0;n.setScalingState(!0);var p,m=i.left,v=i.top,O=i.width,h=i.height,j="rotate"in i&&i.rotate?i.rotate:0,y=Math.PI*j/180,g=s.value||"fixedRatio"in i&&i.fixedRatio,x=O/h,C=l.pageX,k=l.pageY,E=na[i.type]||20,w=function(e){return e2&&void 0!==arguments[2])||arguments[2];if(r.value||n.setEditorareaFocus(!0),l.value.includes(i.id)){if(u.value){var s=[];if(i.groupId){var f=[];e.value.forEach((function(e){e.groupId===i.groupId&&f.push(e.id)})),s=l.value.filter((function(e){return!f.includes(e)}))}else s=l.value.filter((function(e){return e!==i.id}));s.length>0&&n.setActiveElementIdList(s)}else if(a.value!==i.id)n.setHandleElementId(i.id);else if(c.value!==i.id){var b=o.pageX,p=o.pageY;o.target.onmouseup=function(e){var t=e.pageX,o=e.pageY;b===t&&p===o&&(n.setActiveGroupElementId(i.id),e.target.onmouseup=null)}}}else{var m=[];if(m=u.value?[].concat(Object(K["a"])(l.value),[i.id]):[i.id],i.groupId){var v=[];e.value.forEach((function(e){e.groupId===i.groupId&&v.push(e.id)})),m=[].concat(Object(K["a"])(m),v)}n.setActiveElementIdList(Object(te["uniq"])(m)),n.setHandleElementId(i.id)}d&&t(o,i)},s=function(){var t=e.value.filter((function(e){return!e.lock})),o=t.map((function(e){return e.id}));n.setActiveElementIdList(o)};return{selectElement:d,selectAllElement:s}},ra=function(e,t){var n=ce(),o=Object(g["c"])(ae()),l=o.activeElementIdList,c=o.activeGroupElementId,a=o.canvasScale,r=Object(g["c"])(n),i=r.viewportRatio,u=$e(),d=u.addHistorySnapshot,s=function(o,r){if(l.value.includes(r.id)){var u,s=!0,f=nt,b=nt*i.value,p=5,m=JSON.parse(JSON.stringify(e.value)),v=m.filter((function(e){return l.value.includes(e.id)})),O=r.left,h=r.top,j=r.width,y="height"in r&&r.height?r.height:0,g="rotate"in r&&r.rotate?r.rotate:0,x=o.pageX,C=o.pageY,k=null,E=r.id===c.value,w=[],N=[],I=Object(T["a"])(e.value);try{for(I.s();!(u=I.n()).done;){var V=u.value;if("line"!==V.type&&((!E||V.id!==r.id)&&(E||!l.value.includes(V.id)))){var S=void 0,B=void 0,M=void 0,_=void 0;if("rotate"in V&&V.rotate){var D=qe({left:V.left,top:V.top,width:V.width,height:V.height,rotate:V.rotate}),z=D.xRange,A=D.yRange;S=z[0],B=A[0],M=z[1]-z[0],_=A[1]-A[0]}else S=V.left,B=V.top,M=V.width,_=V.height;var F=S+M,R=B+_,P=B+_/2,H=S+M/2,q={value:B,range:[S,F]},W={value:R,range:[S,F]},G={value:P,range:[S,F]},U={value:S,range:[B,R]},X={value:F,range:[B,R]},Z={value:H,range:[B,R]};w.push(q,W,G),N.push(U,X,Z)}}}catch(ne){I.e(ne)}finally{I.f()}var Y={value:0,range:[0,f]},J={value:b,range:[0,f]},Q={value:b/2,range:[0,f]},$={value:0,range:[0,b]},ee={value:f,range:[0,b]},te={value:f/2,range:[0,b]};w.push(Y,J,Q),N.push($,ee,te),w=Xe(w),N=Xe(N),document.onmousemove=function(n){var o=n.pageX,c=n.pageY;if(!1!==k&&(k=Math.abs(x-o)v&&(U[0]=W-H,X[0]=0),m>O&&(U[1]=G-q,X[1]=0),e.value=e.value.map((function(e){if(e.id===l.id){var t=Object(L["a"])(Object(L["a"])({},e),{},{left:H,top:q,start:U,end:X});return a===I.START||a===I.END?(l.broken&&(t.broken=[(U[0]+X[0])/2,(U[1]+X[1])/2]),l.curve&&(t.curve=[(U[0]+X[0])/2,(U[1]+X[1])/2]),l.cubic&&(t.cubic=[[(U[0]+X[0])/2,(U[1]+X[1])/2],[(U[0]+X[0])/2,(U[1]+X[1])/2]])):a===I.C?(l.broken&&(t.broken=[j-H,y-q]),l.curve&&(t.curve=[j-H,y-q])):l.cubic&&(t.cubic=[[E-H,w-q],[N-H,V-q]]),t}return e}))}},document.onmouseup=function(n){r=!1,document.onmousemove=null,document.onmouseup=null;var o=n.pageX,l=n.pageY;u===o&&d===l||(t.updateSlide({elements:e.value}),c())}};return{dragLineElement:a}},ua=function(e){var t=ae(),n=Object(g["c"])(t),o=n.canvasScale,l=n.creatingElement,c=function(t){var n=t.start,l=t.end;if(e.value){var c=e.value.getBoundingClientRect(),a=Object(He["a"])(n,2),r=a[0],i=a[1],u=Object(He["a"])(l,2),d=u[0],s=u[1],f=Math.min(r,d),b=Math.max(r,d),p=Math.min(i,s),m=Math.max(i,s),v=(f-c.x)/o.value,O=(p-c.y)/o.value,h=(b-f)/o.value,j=(m-p)/o.value;return{left:v,top:O,width:h,height:j}}},a=function(t){var n=t.start,l=t.end;if(e.value){var c=e.value.getBoundingClientRect(),a=Object(He["a"])(n,2),r=a[0],i=a[1],u=Object(He["a"])(l,2),d=u[0],s=u[1],f=Math.min(r,d),b=Math.max(r,d),p=Math.min(i,s),m=Math.max(i,s),v=(f-c.x)/o.value,O=(p-c.y)/o.value,h=(b-f)/o.value,j=(m-p)/o.value,y=[r===f?0:h,i===p?0:j],g=[d===f?0:h,s===p?0:j];return{left:v,top:O,start:y,end:g}}},r=at(),i=r.createTextElement,u=r.createShapeElement,d=r.createLineElement,s=function(e){if(l.value){var n=l.value.type;if("text"===n){var o=c(e);o&&i(o)}else if("shape"===n){var r=c(e);r&&u(r,l.value.data)}else if("line"===n){var s=a(e);s&&d(s,l.value.data)}t.setCreatingElement(null)}};return{insertElementFromCreateSelection:s}},da=["id"];function sa(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"editable-element",ref:"elementRef",id:"editable-element-".concat(e.elementInfo.id),style:Object(y["normalizeStyle"])({zIndex:e.elementIndex})},[(Object(y["openBlock"])(),Object(y["createBlock"])(Object(y["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,selectElement:e.selectElement,contextmenus:e.contextmenus},null,8,["elementInfo","selectElement","contextmenus"]))],12,da)}var fa=function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeElementList,l=Object(g["c"])(e),c=l.currentSlide,a=l.viewportRatio,r=$e(),i=r.addHistorySnapshot,u=function(t){var l,r=nt,u=nt*a.value,d=Ue(o.value),s=d.minX,f=d.maxX,b=d.minY,p=d.maxY,m=JSON.parse(JSON.stringify(c.value.elements)),v=Object(T["a"])(m);try{for(v.s();!(l=v.n()).done;){var O=l.value;if(n.value.includes(O.id)){if(t===E.CENTER){var h=b+(p-b)/2-u/2,j=s+(f-s)/2-r/2;O.top=O.top-h,O.left=O.left-j}if(t===E.TOP){var y=b-0;O.top=O.top-y}else if(t===E.VERTICAL){var g=b+(p-b)/2-u/2;O.top=O.top-g}else if(t===E.BOTTOM){var x=p-u;O.top=O.top-x}else if(t===E.LEFT){var C=s-0;O.left=O.left-C}else if(t===E.HORIZONTAL){var k=s+(f-s)/2-r/2;O.left=O.left-k}else if(t===E.RIGHT){var w=f-r;O.left=O.left-w}}}}catch(N){v.e(N)}finally{v.f()}e.updateSlide({elements:m}),i()};return{alignElementToCanvas:u}},ba=["src"];function pa(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ImageClipHandler"),r=Object(y["resolveComponent"])("ImageOutline"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-image",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[e.isCliping?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,src:e.elementInfo.src,clipData:e.elementInfo.clip,width:e.elementInfo.width,height:e.elementInfo.height,top:e.elementInfo.top,left:e.elementInfo.left,rotate:e.elementInfo.rotate,clipPath:e.clipShape.style,onClip:t[0]||(t[0]=function(t){return e.handleClip(t)})},null,8,["src","clipData","width","height","top","left","rotate","clipPath"])):Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:1,class:"element-content",style:Object(y["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)})},[Object(y["createVNode"])(r,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(y["createElementVNode"])("div",{class:"image-content",style:Object(y["normalizeStyle"])({clipPath:e.clipShape.style})},[Object(y["createElementVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:Object(y["normalizeStyle"])({top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter}),onDragstart:t[1]||(t[1]=Object(y["withModifiers"])((function(){}),["prevent"])),alt:""},null,44,ba)],4)],36)),[[i,e.contextmenus]])],4)],6)}var ma=function(e){return Object(y["pushScopeId"])("data-v-e9da1d6a"),e=e(),Object(y["popScopeId"])(),e},va=["src"],Oa=["src"],ha=["onMousedown"],ja=ma((function(){return Object(y["createElementVNode"])("svg",{width:"16",height:"16",fill:"#fff",stroke:"#333"},[Object(y["createElementVNode"])("path",{"stroke-width":"0.3","shape-rendering":"crispEdges",d:"M 16 0 L 0 0 L 0 16 L 4 16 L 4 4 L 16 4 L 16 0 Z"})],-1)})),ya=[ja],ga=["onMousedown"],xa=ma((function(){return Object(y["createElementVNode"])("svg",{width:"16",height:"16",fill:"#fff",stroke:"#333"},[Object(y["createElementVNode"])("path",{"stroke-width":"0.3","shape-rendering":"crispEdges",d:"M 16 0 L 0 0 L 0 4 L 16 4 Z"})],-1)})),Ca=[xa];function ka(e,t,n,o,l,c){var a=Object(y["resolveDirective"])("click-outside");return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"image-clip-handler",style:Object(y["normalizeStyle"])(e.clipWrapperPositionStyle)},[Object(y["createElementVNode"])("img",{class:"bottom-img",src:e.src,draggable:!1,alt:"",style:Object(y["normalizeStyle"])(e.bottomImgPositionStyle)},null,12,va),Object(y["createElementVNode"])("div",{class:"top-image-content",style:Object(y["normalizeStyle"])(Object(L["a"])(Object(L["a"])({},e.topImgWrapperPositionStyle),{},{clipPath:e.clipPath}))},[Object(y["createElementVNode"])("img",{class:"top-img",src:e.src,draggable:!1,alt:"",style:Object(y["normalizeStyle"])(e.topImgPositionStyle)},null,12,Oa)],4),Object(y["createElementVNode"])("div",{class:"operate",style:Object(y["normalizeStyle"])(e.topImgWrapperPositionStyle),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.moveClipRange(t)}),["stop"]))},[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(["left-top","right-top","left-bottom","right-bottom"],(function(t){return Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["clip-point",t,e.rotateClassName]),key:t,onMousedown:Object(y["withModifiers"])((function(n){return e.scaleClipRange(n,t)}),["stop"])},ya,42,ha)})),64)),(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(["top","bottom","left","right"],(function(t){return Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["clip-point",t,e.rotateClassName]),key:t,onMousedown:Object(y["withModifiers"])((function(n){return e.scaleClipRange(n,t)}),["stop"])},Ca,42,ga)})),64))],36)],4)),[[a,e.handleClip]])}var Ea=Object(y["defineComponent"])({name:"image-clip-handler",emits:["clip"],props:{src:{type:String,required:!0},clipData:{type:Object},clipPath:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},top:{type:Number,required:!0},left:{type:Number,required:!0},rotate:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(g["c"])(ae()),l=o.canvasScale,c=Object(g["c"])(Oe()),a=c.ctrlOrShiftKeyActive,r=Object(y["ref"])({top:"0",left:"0"}),i=Object(y["ref"])(!1),u=Object(y["ref"])(null),d=function(){var t=e.clipData?e.clipData.range:[[0,0],[100,100]],n=Object(He["a"])(t,2),o=n[0],l=n[1],c=(l[0]-o[0])/100,a=(l[1]-o[1])/100,r=o[0]/c,i=o[1]/a;return{widthScale:c,heightScale:a,left:r,top:i}},s=Object(y["computed"])((function(){var e=d(),t=e.widthScale,n=e.heightScale,o=e.left,l=e.top;return{left:-o,top:-l,width:100/t,height:100/n}})),f=Object(y["computed"])((function(){return{top:s.value.top+"%",left:s.value.left+"%",width:s.value.width+"%",height:s.value.height+"%"}})),b=Object(y["ref"])({top:0,left:0,width:0,height:0}),p=Object(y["computed"])((function(){var e=b.value,t=e.top,n=e.left,o=e.width,l=e.height;return{top:t+"%",left:n+"%",width:o+"%",height:l+"%"}})),m=Object(y["computed"])((function(){var e=s.value.width,t=s.value.height,n=b.value,o=n.top,l=n.left,c=n.width,a=n.height;return{left:100/c*-l+"%",top:100/a*-o+"%",width:e/c*100+"%",height:t/a*100+"%"}})),v=function(){var e=d(),t=e.left,n=e.top;b.value={left:t,top:n,width:100,height:100},r.value={top:-n+"%",left:-t+"%"}},O=function(){if(!i.value)if(u.value){var t=d(),o=t.left,l=t.top,c={left:(b.value.left-o)/100*e.width,top:(b.value.top-l)/100*e.height,width:(b.value.width-100)/100*e.width,height:(b.value.height-100)/100*e.height},a={range:u.value,position:c};n("clip",a)}else n("clip",null)},h=function(e){var t=e.key.toUpperCase();t===V.ENTER&&O()};Object(y["onMounted"])((function(){v(),document.addEventListener("keydown",h)})),Object(y["onUnmounted"])((function(){document.removeEventListener("keydown",h)}));var j=function(){var e={left:parseInt(m.value.left),top:parseInt(m.value.top),width:parseInt(m.value.width),height:parseInt(m.value.height)},t=100/e.width,n=100/e.height,o=[-e.left*t,-e.top*n],l=[100*t+o[0],100*n+o[1]];u.value=[o,l]},x=function(t){i.value=!0;var n=!0,o=t.pageX,c=t.pageY,a=s.value,r=Object(L["a"])({},b.value);document.onmousemove=function(t){if(n){var i=t.pageX,u=t.pageY,d=(i-o)/l.value/e.width*100,s=(u-c)/l.value/e.height*100;e.rotate>45&&e.rotate<135&&(d=(u-c)/l.value/e.width*100,s=-(i-o)/l.value/e.height*100),(e.rotate>=135&&e.rotate<=180||e.rotate>=-180&&e.rotate<=-135)&&(d=-d,s=-s),e.rotate>-135&&e.rotate<-45&&(d=-(u-c)/l.value/e.width*100,s=(i-o)/l.value/e.height*100);var f=r.left+d,p=r.top+s;f<0?f=0:f+r.width>a.width&&(f=a.width-r.width),p<0?p=0:p+r.height>a.height&&(p=a.height-r.height),b.value=Object(L["a"])(Object(L["a"])({},b.value),{},{left:f,top:p})}},document.onmouseup=function(){n=!1,document.onmousemove=null,document.onmouseup=null,j(),setTimeout((function(){i.value=!1}),0)}},C=function(t,n){i.value=!0;var o=!0,c=50/e.width*100,r=50/e.height*100,u=t.pageX,d=t.pageY,f=s.value,p=Object(L["a"])({},b.value),m=b.value.width/b.value.height;document.onmousemove=function(t){if(o){var i,s,v,O,h=t.pageX,j=t.pageY,y=(h-u)/l.value/e.width*100,g=(j-d)/l.value/e.height*100;e.rotate>45&&e.rotate<135&&(y=(j-d)/l.value/e.width*100,g=-(h-u)/l.value/e.height*100),(e.rotate>=135&&e.rotate<=180||e.rotate>=-180&&e.rotate<=-135)&&(y=-y,g=-g),e.rotate>-135&&e.rotate<-45&&(y=-(j-d)/l.value/e.width*100,g=(h-u)/l.value/e.height*100),a.value&&(n!==N.RIGHT_BOTTOM&&n!==N.LEFT_TOP||(g=y/m),n!==N.LEFT_BOTTOM&&n!==N.RIGHT_TOP||(g=-y/m)),n===N.LEFT_TOP?(p.left+y<0&&(y=-p.left),p.top+g<0&&(g=-p.top),p.width-yf.width&&(y=f.width-(p.left+p.width)),p.top+g<0&&(g=-p.top),p.width+yf.height&&(g=f.height-(p.top+p.height)),p.width-yf.width&&(y=f.width-(p.left+p.width)),p.top+p.height+g>f.height&&(g=f.height-(p.top+p.height)),p.width+yf.height&&(g=f.height-(p.top+p.height)),p.height+gf.width&&(y=f.width-(p.left+p.width)),p.width+y-22.5&&n<=22.5?t+0:n>22.5&&n<=67.5?t+45:n>67.5&&n<=112.5?t+90:n>112.5&&n<=157.5?t+135:n>157.5||n<=-157.5?t+0:n>-157.5&&n<=-112.5?t+45:n>-112.5&&n<=-67.5?t+90:n>-67.5&&n<=-22.5?t+135:t+0}));return{clipWrapperPositionStyle:r,bottomImgPositionStyle:f,topImgWrapperPositionStyle:p,topImgPositionStyle:m,rotateClassName:k,handleClip:O,moveClipRange:x,scaleClipRange:C}}});n("663b");const wa=Gn()(Ea,[["render",ka],["__scopeId","data-v-e9da1d6a"]]);var Na=wa,Ia=Object(y["defineComponent"])({name:"editable-element-image",components:{ImageOutline:Ko,ImageClipHandler:Na},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.clipingImageElementId,c=Object(y["computed"])((function(){return l.value===e.elementInfo.id})),a=$e(),r=a.addHistorySnapshot,i=Object(y["computed"])((function(){return e.elementInfo.shadow})),u=ko(i),d=u.shadowStyle,s=Object(y["computed"])((function(){return e.elementInfo.flipH})),f=Object(y["computed"])((function(){return e.elementInfo.flipV})),b=Eo(s,f),p=b.flipStyle,m=Object(y["computed"])((function(){return e.elementInfo.clip})),v=No(m),O=v.clipShape,h=v.imgPosition,j=Object(y["computed"])((function(){return e.elementInfo.filters})),x=Io(j),C=x.filter,k=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},E=function(o){if(t.setClipingImageElementId(""),o){var l=o.range,c=o.position,a=e.elementInfo.clip||{shape:"rect",range:[[0,0],[100,100]]},i=e.elementInfo.left+c.left,u=e.elementInfo.top+c.top,d=e.elementInfo.width+c.width,s=e.elementInfo.height+c.height,f=0,b=0;if(e.elementInfo.rotate){var p=i+d/2-(e.elementInfo.left+e.elementInfo.width/2),m=-(u+s/2-(e.elementInfo.top+e.elementInfo.height/2)),v=-e.elementInfo.rotate*Math.PI/180,O=p*Math.cos(v)-m*Math.sin(v),h=p*Math.sin(v)+m*Math.cos(v);f=O-p,b=-(h-m)}var j={clip:Object(L["a"])(Object(L["a"])({},a),{},{range:l}),left:i+f,top:u+b,width:d,height:s};n.updateElement({id:e.elementInfo.id,props:j}),r()}};return{isCliping:c,handleClip:E,clipingImageElementId:l,shadowStyle:d,handleSelectElement:k,clipShape:O,imgPosition:h,filter:C,flipStyle:p}}});n("fc7e");const Va=Gn()(Ia,[["render",pa],["__scopeId","data-v-288ee59d"]]);var Sa=Va,Ba=function(e){return Object(y["pushScopeId"])("data-v-d7761db4"),e=e(),Object(y["popScopeId"])(),e},La=Ba((function(){return Object(y["createElementVNode"])("div",{class:"drag-handler top"},null,-1)})),Ta=Ba((function(){return Object(y["createElementVNode"])("div",{class:"drag-handler bottom"},null,-1)}));function Ma(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ElementOutline"),r=Object(y["resolveComponent"])("ProsemirrorEditor"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-text",{lock:e.elementInfo.lock}]),ref:"elementRef",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({backgroundColor:e.elementInfo.fill,opacity:e.elementInfo.opacity,textShadow:e.shadowStyle,lineHeight:e.elementInfo.lineHeight,letterSpacing:(e.elementInfo.wordSpace||0)+"px",color:e.elementInfo.defaultColor,fontFamily:e.elementInfo.defaultFontName}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)})},[Object(y["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(y["createVNode"])(r,{class:"text",elementId:e.elementInfo.id,defaultColor:e.elementInfo.defaultColor,defaultFontName:e.elementInfo.defaultFontName,editable:!e.elementInfo.lock,value:e.elementInfo.content,onUpdate:t[0]||(t[0]=function(t){return e.updateContent(t)}),onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t,!1)})},null,8,["elementId","defaultColor","defaultFontName","editable","value"]),La,Ta],36)),[[i,e.contextmenus]])],4)],6)}var _a={class:"prosemirror-editor",ref:"editorViewRef"};function Da(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",_a,null,512)}var za,Aa=n("5313"),Fa=n("576a"),Ra=n("304a"),Pa=n("7f06"),Ha=n("8726"),qa=n("23f1"),Wa=n("1a16"),Ga=n("665f"),Ua=n("f95e"),Xa=function(e){var t={},n=function(e,n){return t[e]=n};return n("Alt-ArrowUp",M["c"]),n("Alt-ArrowDown",M["b"]),n("Ctrl-z",Ha["c"]),n("Ctrl-y",Ha["b"]),n("Backspace",Ua["f"]),n("Escape",M["e"]),n("Ctrl-b",Object(M["f"])(e.marks.strong)),n("Ctrl-i",Object(M["f"])(e.marks.em)),n("Ctrl-u",Object(M["f"])(e.marks.underline)),n("Ctrl-d",Object(M["f"])(e.marks.strikethrough)),n("Enter",Object(Ga["f"])(e.nodes.list_item)),n("Mod-[",Object(Ga["b"])(e.nodes.list_item)),n("Mod-]",Object(Ga["e"])(e.nodes.list_item)),t},Za=function(e){return Object(Ua["g"])(/^\s*>\s$/,e)},Ya=function(e){return Object(Ua["g"])(/^(\d+)\.\s$/,e,(function(e){return{order:+e[1]}}),(function(e,t){return t.childCount+t.attrs.order===+e[1]}))},Ja=function(e){return Object(Ua["g"])(/^\s*([-+*])\s$/,e)},Qa=function(e){return Object(Ua["e"])(/^```$/,e)},Ka=function(e){var t=[].concat(Object(K["a"])(Ua["d"]),[Ua["a"],Ua["b"]]);return t.push(Za(e.nodes.blockquote)),t.push(Ya(e.nodes.ordered_list)),t.push(Ja(e.nodes.bullet_list)),t.push(Qa(e.nodes.code_block)),Object(Ua["c"])({rules:t})},$a=function(e){return[Ka(e),Object(Pa["b"])(Xa(e)),Object(Pa["b"])(M["a"]),Object(qa["a"])(),Object(Wa["a"])(),Object(Ha["a"])()]},er=n("2210"),tr=Object(L["a"])(Object(L["a"])({},Ga["d"]),{},{content:"list_item+",group:"block"}),nr=Object(L["a"])(Object(L["a"])({},Ga["a"]),{},{content:"list_item+",group:"block"}),or=Object(L["a"])(Object(L["a"])({},Ga["c"]),{},{content:"paragraph block*",group:"block"}),lr={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]}},cr=Object(L["a"])(Object(L["a"])({},er["b"]),{},{ordered_list:tr,bullet_list:nr,list_item:or,paragraph:lr}),ar={excludes:"subscript",parseDOM:[{tag:"sub"},{style:"vertical-align",getAttrs:function(e){return"sub"===e&&null}}],toDOM:function(){return["sub",0]}},rr={excludes:"superscript",parseDOM:[{tag:"sup"},{style:"vertical-align",getAttrs:function(e){return"super"===e&&null}}],toDOM:function(){return["sup",0]}},ir={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]}},ur={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]}},dr={attrs:{color:{}},inline:!0,group:"inline",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]}},sr={attrs:{backcolor:{}},inline:!0,group:"inline",parseDOM:[{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]}},fr={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]}},br={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]}},pr={attrs:{href:{},title:{default:null},target:{default:"_blank"}},inclusive:!1,parseDOM:[{tag:"a[href]",getAttrs:function(e){var t=e.getAttribute("href"),n=e.getAttribute("title");return{href:t,title:n}}}],toDOM:function(e){return["a",e.attrs,0]}},mr=Object(L["a"])(Object(L["a"])({},er["a"]),{},{subscript:ar,superscript:rr,strikethrough:ir,underline:ur,forecolor:dr,backcolor:sr,fontsize:fr,fontname:br,link:pr}),vr=cr,Or=mr,hr=new Ra["i"]({nodes:vr,marks:Or}),jr=function(e){var t="
".concat(e,"
"),n=new window.DOMParser,o=n.parseFromString(t,"text/html").body.firstElementChild;return Ra["a"].fromSchema(hr).parse(o)},yr=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Fa["c"](e,Object(L["a"])({state:Aa["b"].create({doc:jr(t),plugins:$a(hr)})},n))},gr=n("1344");(function(e){e["RICH_TEXT_COMMAND"]="RICH_TEXT_COMMAND",e["OPEN_CHART_DATA_EDITOR"]="OPEN_CHART_DATA_EDITOR",e["OPEN_LATEX_EDITOR"]="OPEN_LATEX_EDITOR"})(za||(za={}));var xr=Object(gr["a"])(),Cr=xr,kr=(n("6062"),function(e,t,n){var o=e,l=o.selection,c=o.doc;if(!l||!c)return e;var a=l.from,r=l.to,i=t.nodes,u=i.blockquote,d=i.list_item,s=i.paragraph,f=[];n=n||"";var b=new Set([u,d,s]);return c.nodesBetween(a,r,(function(e,t){var o=e.type,l=e.attrs.align||"";return l!==n&&b.has(o)&&f.push({node:e,pos:t,nodeType:o}),!0})),f.length?(f.forEach((function(t){var o=t.node,l=t.pos,c=t.nodeType,a=o.attrs;a=n?Object(L["a"])(Object(L["a"])({},a),{},{align:n}):Object(L["a"])(Object(L["a"])({},a),{},{align:null}),e=e.setNodeMarkup(l,c,a,o.marks)})),e):e}),Er=function(e,t){var n=e.state,o=n.schema,l=n.selection,c=kr(n.tr.setSelection(l),o,t);e.dispatch(c)},wr=function(e,t){return e.type===t.nodes.bullet_list||e.type===t.nodes.ordered_list},Nr=function(e,t){return function(n,o){var l=n.schema,c=n.selection,a=c.$from,r=c.$to,i=a.blockRange(r);if(!i)return!1;var u=R((function(e){return wr(e,l)}))(c);if(i.depth>=1&&u&&i.depth-u.depth<=1){if(u.node.type===e)return Object(Ga["b"])(t)(n,o);if(wr(u.node,l)&&e.validContent(u.node.content)){var d=n.tr;return d.setNodeMarkup(u.pos,e),o&&o(d),!1}}return Object(Ga["g"])(e)(n,o)}},Ir=Object(y["defineComponent"])({name:"prosemirror-editor",emits:["update","focus","blur"],props:{elementId:{type:String,required:!0},defaultColor:{type:String,required:!0},defaultFontName:{type:String,required:!0},editable:{type:Boolean,default:!1},value:{type:String,required:!0},autoFocus:{type:Boolean,default:!1}},setup:function(e,t){var n,o=t.emit,l=ae(),c=Object(g["c"])(l),a=c.handleElementId,r=Object(y["ref"])(),i=Object(te["debounce"])((function(){o("update",n.dom.innerHTML)}),300,{trailing:!0}),u=function(){"请输入内容"===e.value&&setTimeout((function(){Object(M["d"])(n.state,n.dispatch)}),100),l.setDisableHotkeysState(!0),o("focus")},d=function(){l.setDisableHotkeysState(!1),o("blur")},s=Object(te["debounce"])((function(){var t=Y(n,{color:e.defaultColor,fontname:e.defaultFontName});l.setRichtextAttrs(t)}),30,{trailing:!0}),f=function(){i(),s()},b=Object(y["computed"])((function(){return e.value}));Object(y["watch"])(b,(function(){if(n&&!n.hasFocus()){var e=n.state,t=e.doc,o=e.tr;n.dispatch(o.replaceRangeWith(0,t.content.size,jr(b.value)))}})),Object(y["watch"])((function(){return e.editable}),(function(){n.setProps({editable:function(){return e.editable}})})),Object(y["onMounted"])((function(){n=yr(r.value,b.value,{handleDOMEvents:{focus:u,blur:d,keydown:f,click:s},editable:function(){return e.editable}}),e.autoFocus&&n.focus()})),Object(y["onUnmounted"])((function(){n&&n.destroy()}));var p=function(t){if(a.value===e.elementId){var o,l="command"in t?[t]:t,c=Object(T["a"])(l);try{for(c.s();!(o=c.n()).done;){var r=o.value;if("fontname"===r.command&&r.value){var u=n.state.schema.marks.fontname.create({fontname:r.value});_(n),D(n,u)}else if("fontsize"===r.command&&r.value){var d=n.state.schema.marks.fontsize.create({fontsize:r.value});_(n),D(n,d)}else if("color"===r.command&&r.value){var f=n.state.schema.marks.forecolor.create({color:r.value});_(n),D(n,f)}else if("backcolor"===r.command&&r.value){var b=n.state.schema.marks.backcolor.create({backcolor:r.value});_(n),D(n,b)}else if("bold"===r.command)_(n),Object(M["f"])(n.state.schema.marks.strong)(n.state,n.dispatch);else if("em"===r.command)_(n),Object(M["f"])(n.state.schema.marks.em)(n.state,n.dispatch);else if("underline"===r.command)_(n),Object(M["f"])(n.state.schema.marks.underline)(n.state,n.dispatch);else if("strikethrough"===r.command)_(n),Object(M["f"])(n.state.schema.marks.strikethrough)(n.state,n.dispatch);else if("subscript"===r.command)Object(M["f"])(n.state.schema.marks.subscript)(n.state,n.dispatch);else if("superscript"===r.command)Object(M["f"])(n.state.schema.marks.superscript)(n.state,n.dispatch);else if("blockquote"===r.command)Object(M["g"])(n.state.schema.nodes.blockquote)(n.state,n.dispatch);else if("code"===r.command)Object(M["f"])(n.state.schema.marks.code)(n.state,n.dispatch);else if("align"===r.command&&r.value)Er(n,r.value);else if("bulletList"===r.command){var p=n.state.schema.nodes,m=p.bullet_list,v=p.list_item;Nr(m,v)(n.state,n.dispatch)}else if("orderedList"===r.command){var O=n.state.schema.nodes,h=O.ordered_list,j=O.list_item;Nr(h,j)(n.state,n.dispatch)}else if("clear"===r.command){_(n);var y=n.state.selection,g=y.$from,x=y.$to;n.dispatch(n.state.tr.removeMark(g.pos,x.pos))}else if("link"===r.command){var C=n.state.schema.marks.link,k=n.state.selection,E=k.from,w=k.to,N=z(n.state.doc,E,w,C);if(N)if(r.value){var I=n.state.schema.marks.link.create({href:r.value,title:r.value});D(n,I,{from:N.from.pos,to:N.to.pos+1})}else n.dispatch(n.state.tr.removeMark(N.from.pos,N.to.pos+1,C));else if(U(n.state,C))if(r.value){var V=n.state.schema.marks.link.create({href:r.value,title:r.value});D(n,V)}else Object(M["f"])(C)(n.state,n.dispatch);else r.value&&(_(n),Object(M["f"])(C,{href:r.value,title:r.value})(n.state,n.dispatch))}else"insert"===r.command&&r.value&&n.dispatch(n.state.tr.insertText(r.value))}}catch(S){c.e(S)}finally{c.f()}n.focus(),i(),s()}};return Cr.on(za.RICH_TEXT_COMMAND,p),Object(y["onUnmounted"])((function(){Cr.off(za.RICH_TEXT_COMMAND,p)})),{editorViewRef:r}}});n("8569");const Vr=Gn()(Ir,[["render",Da],["__scopeId","data-v-481bb541"]]);var Sr=Vr,Br=Object(y["defineComponent"])({name:"editable-element-text",components:{ElementOutline:ul,ProsemirrorEditor:Sr},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.handleElementId,c=o.isScaling,a=$e(),r=a.addHistorySnapshot,i=Object(y["ref"])(),u=Object(y["computed"])((function(){return e.elementInfo.shadow})),d=ko(u),s=d.shadowStyle,f=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=Object(y["ref"])(-1);Object(y["watch"])(c,(function(){l.value===e.elementInfo.id&&(c.value||-1===b.value||(n.updateElement({id:e.elementInfo.id,props:{height:b.value}}),b.value=-1))}));var p=function(t){var o=t[0].contentRect;if(i.value){var l=o.height;e.elementInfo.height!==l&&(c.value?b.value=l:n.updateElement({id:e.elementInfo.id,props:{height:l}}))}},m=new ResizeObserver(p);Object(y["onMounted"])((function(){i.value&&m.observe(i.value)})),Object(y["onUnmounted"])((function(){i.value&&m.unobserve(i.value)}));var v=function(t){n.updateElement({id:e.elementInfo.id,props:{content:t}}),r()};return{elementRef:i,shadowStyle:s,updateContent:v,handleSelectElement:f}}});n("f208");const Lr=Gn()(Br,[["render",Ma],["__scopeId","data-v-d7761db4"]]);var Tr=Lr,Mr=["width","height"],_r={key:0},Dr=["transform"],zr=["d","fill","stroke","stroke-width","stroke-dasharray"],Ar=["innerHTML"];function Fr(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("GradientDefs"),r=Object(y["resolveComponent"])("ProsemirrorEditor"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle,color:e.text.defaultColor,fontFamily:e.text.defaultFontName}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)}),onDblclick:t[3]||(t[3]=function(t){return e.enterEditing()})},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},[e.elementInfo.gradient?(Object(y["openBlock"])(),Object(y["createElementBlock"])("defs",_r,[Object(y["createVNode"])(a,{id:"editabel-gradient-".concat(e.elementInfo.id),type:e.elementInfo.gradient.type,color1:e.elementInfo.gradient.color[0],color2:e.elementInfo.gradient.color[1],rotate:e.elementInfo.gradient.rotate},null,8,["id","type","color1","color2","rotate"])])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox[0],", ").concat(e.elementInfo.height/e.elementInfo.viewBox[1],") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(y["createElementVNode"])("path",{class:"shape-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,zr)],8,Dr)],8,Mr)),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["shape-text",[e.text.align,{editable:e.editable}]])},[e.editable?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,elementId:e.elementInfo.id,defaultColor:e.text.defaultColor,defaultFontName:e.text.defaultFontName,editable:!e.elementInfo.lock,autoFocus:!0,value:e.text.content,onUpdate:t[0]||(t[0]=function(t){return e.updateText(t)}),onMousedown:t[1]||(t[1]=Object(y["withModifiers"])((function(){}),["stop"]))},null,8,["elementId","defaultColor","defaultFontName","editable","value"])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:1,class:"show-text ProseMirror-static",innerHTML:e.text.content},null,8,Ar))],2)],36)),[[i,e.contextmenus]])],4)],6)}var Rr=Object(y["defineComponent"])({name:"editable-element-shape",components:{GradientDefs:Il,ProsemirrorEditor:Sr},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.handleElementId,c=$e(),a=c.addHistorySnapshot,r=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},i=Object(y["computed"])((function(){return e.elementInfo.outline})),u=Mo(i),d=u.outlineWidth,s=u.outlineStyle,f=u.outlineColor,b=Object(y["computed"])((function(){return e.elementInfo.shadow})),p=ko(b),m=p.shadowStyle,v=Object(y["computed"])((function(){return e.elementInfo.flipH})),O=Object(y["computed"])((function(){return e.elementInfo.flipV})),h=Eo(v,O),j=h.flipStyle,x=Object(y["ref"])(!1),C=function(){x.value=!0,t.setEditingShapeElementId(e.elementInfo.id)},k=function(){x.value=!1,t.setEditingShapeElementId("")};Object(y["watch"])(l,(function(){l.value!==e.elementInfo.id&&x.value&&k()}));var E=Object(y["computed"])((function(){var t={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"};return e.elementInfo.text?e.elementInfo.text:t})),w=function(t){var o=Object(L["a"])(Object(L["a"])({},E.value),{},{content:t});n.updateElement({id:e.elementInfo.id,props:{text:o}}),a()};return{shadowStyle:m,outlineWidth:d,outlineStyle:s,outlineColor:f,flipStyle:j,editable:x,text:E,handleSelectElement:r,updateText:w,enterEditing:C}}});n("a8ac");const Pr=Gn()(Rr,[["render",Fr],["__scopeId","data-v-bd9c8dc2"]]);var Hr=Pr,qr=["width","height"],Wr=["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"],Gr=["d"];function Ur(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("LinePointMarker"),r=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"})},[Object(y["createElementVNode"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""}),onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)})},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{overflow:"visible",width:e.svgWidth,height:e.svgHeight},[Object(y["createElementVNode"])("defs",null,[e.elementInfo.points[0]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,id:e.elementInfo.id,position:"start",type:e.elementInfo.points[0],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(y["createCommentVNode"])("",!0),e.elementInfo.points[1]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1,id:e.elementInfo.id,position:"end",type:e.elementInfo.points[1],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(y["createCommentVNode"])("",!0)]),Object(y["createElementVNode"])("path",{class:"line-point",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,Wr),Object(y["withDirectives"])(Object(y["createElementVNode"])("path",{class:"line-path",d:e.path,stroke:"transparent","stroke-width":"20",fill:"none"},null,8,Gr),[[r,e.contextmenus]])],8,qr))],36)],6)}var Xr=Object(y["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:Hl},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(y["computed"])((function(){return e.elementInfo.shadow})),o=ko(n),l=o.shadowStyle,c=Object(y["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),a=Object(y["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),r=Object(y["computed"])((function(){return"dashed"===e.elementInfo.style?"10 6":"0 0"})),i=Object(y["computed"])((function(){return Je(e.elementInfo)}));return{handleSelectElement:t,shadowStyle:l,svgWidth:c,svgHeight:a,lineDashArray:r,path:i}}});n("3dc0");const Zr=Gn()(Xr,[["render",Ur],["__scopeId","data-v-603a705d"]]);var Yr=Zr;function Jr(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ElementOutline"),r=Object(y["resolveComponent"])("Chart"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-chart",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({backgroundColor:e.elementInfo.fill}),onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)}),onDblclick:t[1]||(t[1]=function(t){return e.openDataEditor()})},[Object(y["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(y["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,type:e.elementInfo.chartType,data:e.elementInfo.data,options:e.elementInfo.options,themeColor:e.elementInfo.themeColor,gridColor:e.elementInfo.gridColor,legends:e.elementInfo.data.legends,legend:e.elementInfo.legend||""},null,8,["width","height","type","data","options","themeColor","gridColor","legends","legend"])],36)),[[i,e.contextmenus]])],4)],6)}var Qr=Object(y["defineComponent"])({name:"editable-element-chart",components:{ElementOutline:ul,Chart:Kl},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=function(){Cr.emit(za.OPEN_CHART_DATA_EDITOR)};return{handleSelectElement:t,openDataEditor:n}}});n("b05d");const Kr=Gn()(Qr,[["render",Jr],["__scopeId","data-v-c09631b6"]]);var $r=Kr,ei={class:"element-content"};function ti(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("EditableTable"),r=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-table",{lock:e.elementInfo.lock}]),ref:"elementRef",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ei,[Object(y["createVNode"])(a,{onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(){}),["stop"])),data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme,editable:e.editable,onChange:t[1]||(t[1]=function(t){return e.updateTableCells(t)}),onChangeColWidths:t[2]||(t[2]=function(t){return e.updateColWidths(t)}),onChangeSelectedCells:t[3]||(t[3]=function(t){return e.updateSelectedCells(t)})},null,8,["data","width","colWidths","outline","theme","editable"]),!e.editable||e.elementInfo.lock?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:Object(y["normalizeClass"])(["table-mask",{lock:e.elementInfo.lock}]),onDblclick:t[4]||(t[4]=function(t){return e.startEdit()}),onMousedown:t[5]||(t[5]=function(t){return e.handleSelectElement(t)})},[Object(y["createElementVNode"])("div",{class:"mask-tip",style:Object(y["normalizeStyle"])({transform:"scale(".concat(1/e.canvasScale,")")})},"双击编辑",4)],34)):Object(y["createCommentVNode"])("",!0)])),[[r,e.contextmenus]])],4)],6)}var ni={key:0,class:"handler"},oi=["onMousedown"],li=["width"],ci=["rowspan","colspan","data-cell-index","onMousedown","onMouseenter"],ai=["innerHTML"];function ri(e,t,n,o,l,c){var a,r,i,u,d,s=Object(y["resolveComponent"])("CustomTextarea"),f=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"editable-table",style:Object(y["normalizeStyle"])({width:e.totalWidth+"px"})},[e.editable?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ni,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.dragLinePosition,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"drag-line",key:n,style:Object(y["normalizeStyle"])({left:t+"px"}),onMousedown:function(t){return e.handleMousedownColHandler(t,n)}},null,44,oi)})),128))])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("table",{class:Object(y["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(y["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(y["createElementVNode"])("colgroup",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.colSizeList,(function(e,t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,li)})),128))]),Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tableCells,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("tr",{key:n},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t,(function(t,o){return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("td",{class:Object(y["normalizeClass"])(["cell",{selected:e.selectedCells.includes("".concat(n,"_").concat(o))&&e.selectedCells.length>1,active:e.activedCell==="".concat(n,"_").concat(o)}]),style:Object(y["normalizeStyle"])(Object(L["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(t.style))),key:t.id,rowspan:t.rowspan,colspan:t.colspan,"data-cell-index":"".concat(n,"_").concat(o),onMousedown:function(t){return e.handleCellMousedown(t,n,o)},onMouseenter:function(t){return e.handleCellMouseenter(n,o)}},[e.activedCell==="".concat(n,"_").concat(o)?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:0,class:Object(y["normalizeClass"])(["cell-text",{active:e.activedCell==="".concat(n,"_").concat(o)}]),contenteditable:"plaintext-only",value:t.text,onUpdateValue:function(t){return e.handleInput(t,n,o)},onInsertExcelData:function(t){return e.insertExcelData(t,n,o)}},null,8,["class","value","onUpdateValue","onInsertExcelData"])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:1,class:"cell-text",innerHTML:e.formatText(t.text)},null,8,ai))],46,ci)),[[y["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))],[f,function(t){return e.contextmenus(t)}]])})),128))])})),128))])],6)],4)}var ii=["contenteditable","innerHTML"];function ui(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"custom-textarea",ref:"textareaRef",contenteditable:e.contenteditable,onFocus:t[0]||(t[0]=function(){return e.handleFocus&&e.handleFocus.apply(e,arguments)}),onBlur:t[1]||(t[1]=function(){return e.handleBlur&&e.handleBlur.apply(e,arguments)}),onInput:t[2]||(t[2]=function(t){return e.handleInput(t)}),innerHTML:e.text},null,40,ii)}var di=Object(y["defineComponent"])({name:"custom-textarea",emits:["updateValue","insertExcelData"],props:{value:{type:String,default:""},contenteditable:{type:[Boolean,String],default:!1}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(),l=Object(y["ref"])(""),c=Object(y["ref"])(!1);Object(y["watch"])((function(){return e.value}),(function(){c.value||(l.value=e.value,o.value&&(o.value.innerHTML=e.value))}),{immediate:!0});var a=function(){if(o.value){var e=o.value.innerHTML;n("updateValue",e)}},r=function(){c.value=!0,o.value&&(o.value.onpaste=function(e){if(e.preventDefault(),e.clipboardData){var t=e.clipboardData.items[0];t&&"string"===t.kind&&"text/plain"===t.type&&t.getAsString((function(e){var t=Re(e);if("object"!==Object(Qe["a"])(t)){var l=Pe(e);if(l)return n("insertExcelData",l),void(o.value&&(o.value.innerHTML=l[0][0]));n("updateValue",e),document.execCommand("insertText",!1,e)}}))}})},i=function(){c.value=!1,o.value&&(o.value.onpaste=null)};return Object(y["onUnmounted"])((function(){o.value&&(o.value.onpaste=null)})),{textareaRef:o,handleFocus:r,handleInput:a,handleBlur:i,text:l}}});n("f33f");const si=Gn()(di,[["render",ui],["__scopeId","data-v-59f468e0"]]);var fi=si,bi=Object(y["defineComponent"])({name:"editable-table",emits:["change","changeColWidths","changeSelectedCells"],components:{CustomTextarea:fi},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,t){var n=t.emit,o=Object(g["c"])(ae()),l=o.canvasScale,c=Object(y["ref"])(!1),a=Object(y["ref"])([]),r=Object(y["ref"])([]),i=Object(y["computed"])({get:function(){return e.data},set:function(e){n("change",e)}}),u=Object(y["computed"])((function(){return e.theme})),d=sc(u),s=d.subThemeColor,f=Object(y["ref"])([]),b=Object(y["computed"])((function(){return f.value.reduce((function(e,t){return e+t}))}));Object(y["watch"])([function(){return e.colWidths},function(){return e.width}],(function(){f.value=e.colWidths.map((function(t){return t*e.width}))}),{immediate:!0});var p=function(){a.value=[],r.value=[]};Object(y["watch"])((function(){return e.editable}),(function(){e.editable||p()}));var m=Object(y["computed"])((function(){for(var e=[],t=1;t=d&&p<=f&&v>=s&&v<=b&&u.push("".concat(p,"_").concat(v));return u}));Object(y["watch"])(j,(function(e,t){Object(te["isEqual"])(e,t)||n("changeSelectedCells",j.value)}));var x=Object(y["computed"])((function(){return j.value.length>1?null:j.value[0]})),C=Object(y["computed"])((function(){if(!a.value.length)return null;var e=Object(He["a"])(a.value,2),t=e[0],n=e[1];if(!r.value.length)return{row:[t,t],col:[n,n]};var o=Object(He["a"])(r.value,2),l=o[0],c=o[1];if(t===l&&n===c)return{row:[t,t],col:[n,n]};var i=Math.min(t,l),u=Math.min(n,c),d=Math.max(t,l),s=Math.max(n,c);return{row:[i,d],col:[u,s]}})),k=function(){return c.value=!1},E=function(e,t,n){0===e.button&&(r.value=[],c.value=!0,a.value=[t,n])},w=function(e,t){c.value&&(r.value=[e,t])};Object(y["onMounted"])((function(){document.addEventListener("mouseup",k)})),Object(y["onUnmounted"])((function(){document.removeEventListener("mouseup",k)}));var N=function(e,t){return h.value.includes("".concat(e,"_").concat(t))},I=function(e){var t=i.value.length-1;a.value=[0,e],r.value=[t,e]},S=function(e){var t=i.value[e].length-1;a.value=[e,0],r.value=[e,t]},B=function(){var e=i.value.length-1,t=i.value[e].length-1;a.value=[0,0],r.value=[e,t]},T=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=i.value[e],o=[],l=0;l=0;u--)if(!N(u,r)){t[u][r].rowspan=t[u][r].rowspan-1;break}t.splice(e,1),i.value=t},M=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),o=[],l=0;l=0;u--)if(!N(r,u)){t[r][u].colspan=t[r][u].colspan-1;break}i.value=t.map((function(t){return t.splice(e,1),t})),f.value.splice(e,1),n("changeColWidths",f.value)},_=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=[],o=0;oi.value.length&&(a=t+l-i.value.length),o+c>i.value[0].length&&(r=o+c-i.value[0].length),(a||r)&&z(a,r),Object(y["nextTick"])((function(){for(var a=0;a1,n=e[0].length>1;return{canDeleteRow:t,canDeleteCol:n}},Z=function(e,t){var n=j.value.length>1,o=i.value[e][t],l=n,c=!n&&(o.rowspan>1||o.colspan>1);return{canMerge:l,canSplit:c}},Y=function(e){var t=e.dataset.cellIndex,n=+t.split("_")[0],o=+t.split("_")[1];j.value.includes("".concat(n,"_").concat(o))||(a.value=[n,o],r.value=[]);var l=Z(n,o),c=l.canMerge,i=l.canSplit,u=X(),d=u.canDeleteRow,s=u.canDeleteCol;return[{text:"插入列",children:[{text:"到左侧",handler:function(){return D(o)}},{text:"到右侧",handler:function(){return D(o+1)}}]},{text:"插入行",children:[{text:"到上方",handler:function(){return _(n)}},{text:"到下方",handler:function(){return _(n+1)}}]},{text:"删除列",disable:!s,handler:function(){return M(o)}},{text:"删除行",disable:!d,handler:function(){return T(n)}},{divider:!0},{text:"合并单元格",disable:!c,handler:A},{text:"取消合并单元格",disable:!i,handler:function(){return F(n,o)}},{divider:!0},{text:"选中当前列",handler:function(){return I(o)}},{text:"选中当前行",handler:function(){return S(n)}},{text:"选中全部单元格",handler:B}]};return{getTextStyle:ic,dragLinePosition:m,tableCells:i,colSizeList:f,totalWidth:b,hideCells:h,selectedCells:j,activedCell:x,selectedRange:C,handleCellMousedown:E,handleCellMouseenter:w,selectCol:I,selectRow:S,handleMousedownColHandler:R,contextmenus:Y,handleInput:W,insertExcelData:G,subThemeColor:s,formatText:uc}}});n("a215");const pi=Gn()(bi,[["render",ri],["__scopeId","data-v-c0c56b6e"]]);var mi=pi,vi=Object(y["defineComponent"])({name:"editable-element-table",components:{EditableTable:mi},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.canvasScale,c=o.handleElementId,a=o.isScaling,r=Object(y["ref"])(),i=$e(),u=i.addHistorySnapshot,d=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},s=Object(y["ref"])(!1);Object(y["watch"])(c,(function(){c.value!==e.elementInfo.id&&(s.value=!1)})),Object(y["watch"])(s,(function(){t.setDisableHotkeysState(s.value)}));var f=function(){e.elementInfo.lock||(s.value=!0)},b=Object(y["ref"])(-1);Object(y["watch"])(a,(function(){c.value===e.elementInfo.id&&(a.value&&(s.value=!1),a.value||-1===b.value||(n.updateElement({id:e.elementInfo.id,props:{height:b.value}}),b.value=-1))}));var p=function(t){var o=t[0].contentRect;if(r.value){var l=o.height;e.elementInfo.height!==l&&(a.value?b.value=l:n.updateElement({id:e.elementInfo.id,props:{height:l}}))}},m=new ResizeObserver(p);Object(y["onMounted"])((function(){r.value&&m.observe(r.value)})),Object(y["onUnmounted"])((function(){r.value&&m.unobserve(r.value)}));var v=function(t){n.updateElement({id:e.elementInfo.id,props:{data:t}}),u()},O=function(t){var o=t.reduce((function(e,t){return e+t})),l=t.map((function(e){return e/o}));n.updateElement({id:e.elementInfo.id,props:{width:o,colWidths:l}}),u()},h=function(e){Object(y["nextTick"])((function(){return t.setSelectedTableCells(e)}))};return{elementRef:r,canvasScale:l,handleSelectElement:d,updateTableCells:v,updateColWidths:O,editable:s,startEdit:f,updateSelectedCells:h}}});n("11f0");const Oi=Gn()(vi,[["render",ti],["__scopeId","data-v-426704b7"]]);var hi=Oi,ji=["width","height","stroke","stroke-width"],yi=["transform"],gi=["d"];function xi(e,t,n,o,l,c){var a=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-latex",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)}),onDblclick:t[1]||(t[1]=function(t){return e.openLatexEditor()})},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height,stroke:e.elementInfo.color,"stroke-width":e.elementInfo.strokeWidth,fill:"none","stroke-linecap":"round","stroke-linejoin":"round"},[Object(y["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox[0],", ").concat(e.elementInfo.height/e.elementInfo.viewBox[1],") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(y["createElementVNode"])("path",{d:e.elementInfo.path},null,8,gi)],8,yi)],8,ji))],32)),[[a,e.contextmenus]])],4)],6)}var Ci=Object(y["defineComponent"])({name:"editable-element-latex",props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=function(){Cr.emit(za.OPEN_LATEX_EDITOR)};return{handleSelectElement:t,openLatexEditor:n}}});n("1190");const ki=Gn()(Ci,[["render",xi],["__scopeId","data-v-3168526a"]]);var Ei=ki;function wi(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("VideoPlayer"),r=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-video",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t,!1)})},[Object(y["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,src:e.elementInfo.src,poster:e.elementInfo.poster,scale:e.canvasScale},null,8,["width","height","src","poster","scale"]),(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(["t","b","l","r"],(function(n){return Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["handler-border",n]),key:n,onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)})},null,34)})),64))],32)),[[r,e.contextmenus]])],4)],6)}var Ni=function(e){return Object(y["pushScopeId"])("data-v-e716fb74"),e=e(),Object(y["popScopeId"])(),e},Ii=["src","poster"],Vi={class:"bezel"},Si=Ni((function(){return Object(y["createElementVNode"])("div",{class:"controller-mask"},null,-1)})),Bi={class:"controller"},Li={class:"icons icons-left"},Ti={class:"icon-content"},Mi={class:"volume"},_i={class:"icon-content"},Di={class:"volume-bar",ref:"volumeBarRef"},zi=Ni((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),Ai=[zi],Fi={class:"time"},Ri={class:"ptime"},Pi=Object(y["createTextVNode"])(" / "),Hi={class:"dtime"},qi={class:"icons icons-right"},Wi={class:"speed"},Gi={class:"icon speed-icon"},Ui=["onClick"],Xi=Ni((function(){return Object(y["createElementVNode"])("span",{class:"icon-content"},"循环",-1)})),Zi=[Xi],Yi={class:"bar"},Ji=Ni((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),Qi=[Ji];function Ki(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPause"),r=Object(y["resolveComponent"])("IconPlayOne"),i=Object(y["resolveComponent"])("IconVolumeMute"),u=Object(y["resolveComponent"])("IconVolumeNotice"),d=Object(y["resolveComponent"])("IconVolumeSmall");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["video-player",{"hide-controller":e.hideController}]),style:Object(y["normalizeStyle"])({width:e.width*e.scale+"px",height:e.height*e.scale+"px",transform:"scale(".concat(1/e.scale,")")}),onMousemove:t[22]||(t[22]=function(t){return e.autoHideController()}),onClick:t[23]||(t[23]=function(t){return e.autoHideController()})},[Object(y["createElementVNode"])("div",{class:"video-wrap",onClick:t[8]||(t[8]=function(t){return e.toggle()})},[Object(y["createElementVNode"])("video",{class:"video",ref:"videoRef",src:e.src,poster:e.poster,"webkit-playsinline":"",playsinline:"",onDurationchange:t[0]||(t[0]=function(t){return e.handleDurationchange()}),onTimeupdate:t[1]||(t[1]=function(t){return e.handleTimeupdate()}),onEnded:t[2]||(t[2]=function(t){return e.handleEnded()}),onProgress:t[3]||(t[3]=function(t){return e.handleProgress()}),onPlay:t[4]||(t[4]=function(t){return e.autoHideController()}),onPause:t[5]||(t[5]=function(t){return e.autoHideController()}),onError:t[6]||(t[6]=function(t){return e.handleError()})},null,40,Ii),Object(y["createElementVNode"])("div",Vi,[Object(y["createElementVNode"])("span",{class:Object(y["normalizeClass"])(["bezel-icon",{"bezel-transition":e.bezelTransition}]),onAnimationend:t[7]||(t[7]=function(t){return e.bezelTransition=!1})},[e.paused?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0})):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1}))],34)])]),Si,Object(y["createElementVNode"])("div",Bi,[Object(y["createElementVNode"])("div",Li,[Object(y["createElementVNode"])("div",{class:"icon play-icon",onClick:t[9]||(t[9]=function(t){return e.toggle()})},[Object(y["createElementVNode"])("span",Ti,[e.paused?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0})):(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1}))])]),Object(y["createElementVNode"])("div",Mi,[Object(y["createElementVNode"])("div",{class:"icon volume-icon",onClick:t[10]||(t[10]=function(t){return e.toggleVolume()})},[Object(y["createElementVNode"])("span",_i,[0===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0})):1===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:2}))])]),Object(y["createElementVNode"])("div",{class:"volume-bar-wrap",onMousedown:t[11]||(t[11]=function(t){return e.handleMousedownVolumeBar(t)}),onTouchstart:t[12]||(t[12]=function(t){return e.handleMousedownVolumeBar(t)}),onClick:t[13]||(t[13]=function(t){return e.handleClickVolumeBar(t)})},[Object(y["createElementVNode"])("div",Di,[Object(y["createElementVNode"])("div",{class:"volume-bar-inner",style:Object(y["normalizeStyle"])({width:e.volumeBarWidth})},Ai,4)],512)],32)]),Object(y["createElementVNode"])("span",Fi,[Object(y["createElementVNode"])("span",Ri,Object(y["toDisplayString"])(e.ptime),1),Pi,Object(y["createElementVNode"])("span",Hi,Object(y["toDisplayString"])(e.dtime),1)])]),Object(y["createElementVNode"])("div",qi,[Object(y["createElementVNode"])("div",Wi,[Object(y["createElementVNode"])("div",Gi,[Object(y["createElementVNode"])("span",{class:"icon-content",onClick:t[14]||(t[14]=function(t){return e.speedMenuVisible=!e.speedMenuVisible})},"倍速"),e.speedMenuVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:"speed-menu",onMouseleave:t[15]||(t[15]=function(t){return e.speedMenuVisible=!1})},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.speedOptions,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["speed-menu-item",{active:t.value===e.playbackRate}]),key:t.label,onClick:function(n){return e.speed(t.value)}},Object(y["toDisplayString"])(t.label),11,Ui)})),128))],32)):Object(y["createCommentVNode"])("",!0)])]),Object(y["createElementVNode"])("div",{class:"loop",onClick:t[16]||(t[16]=function(t){return e.toggleLoop()})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["icon loop-icon",{active:e.loop}])},Zi,2)])]),Object(y["createElementVNode"])("div",{class:"bar-wrap",ref:"playBarWrap",onMousedown:t[17]||(t[17]=function(t){return e.handleMousedownPlayBar(t)}),onTouchstart:t[18]||(t[18]=function(t){return e.handleMousedownPlayBar(t)}),onMousemove:t[19]||(t[19]=function(t){return e.handleMousemovePlayBar(t)}),onMouseenter:t[20]||(t[20]=function(t){return e.playBarTimeVisible=!0}),onMouseleave:t[21]||(t[21]=function(t){return e.playBarTimeVisible=!1})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["bar-time",{hidden:!e.playBarTimeVisible}]),style:Object(y["normalizeStyle"])({left:e.playBarTimeLeft})},Object(y["toDisplayString"])(e.playBarTime),7),Object(y["createElementVNode"])("div",Yi,[Object(y["createElementVNode"])("div",{class:"loaded",style:Object(y["normalizeStyle"])({width:e.loadedBarWidth})},null,4),Object(y["createElementVNode"])("div",{class:"played",style:Object(y["normalizeStyle"])({width:e.playedBarWidth})},Qi,4)])],544)])],38)}var $i=function(e,t){Object(y["onMounted"])((function(){if(t.value){var n="normal";if(/m3u8(#|\?|$)/i.exec(e)?n="hls":/.flv(#|\?|$)/i.exec(e)&&(n="flv"),t.value&&"hls"===n&&(t.value.canPlayType("application/x-mpegURL")||t.value.canPlayType("application/vnd.apple.mpegURL"))&&(n="normal"),"hls"===n){var o=window.Hls;if(o&&o.isSupported()){var l=new o;l.loadSource(e),l.attachMedia(t.value)}}else if("flv"===n){var c=window.flvjs;if(c&&c.isSupported()){var a=c.createPlayer({type:"flv",url:e});a.attachMediaElement(t.value),a.load()}}}}))},eu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(0===e||isNaN(e))return"00:00";var t=function(e){return e<10?"0"+e:""+e},n=Math.floor(e/3600),o=Math.floor((e-3600*n)/60),l=Math.floor(e-3600*n-60*o);return(n>0?[n,o,l]:[o,l]).map(t).join(":")},tu=function(e){return e.getBoundingClientRect().left},nu=Object(y["defineComponent"])({name:"video-player",props:{width:{type:Number,required:!0},height:{type:Number,required:!0},src:{type:String,required:!0},poster:{type:String,default:""},scale:{type:Number,default:1}},setup:function(e){var t=Object(y["ref"])(),n=Object(y["ref"])(),o=Object(y["ref"])(),l=Object(y["ref"])(.5),c=Object(y["ref"])(!0),a=Object(y["ref"])(0),r=Object(y["ref"])(0),i=Object(y["ref"])(0),u=Object(y["ref"])(!1),d=Object(y["ref"])(!1),s=Object(y["ref"])(1),f=Object(y["ref"])(!1),b=Object(y["ref"])("00:00"),p=Object(y["ref"])("0"),m=Object(y["computed"])((function(){return eu(a.value)})),v=Object(y["computed"])((function(){return eu(r.value)})),O=Object(y["computed"])((function(){return a.value/r.value*100+"%"})),h=Object(y["computed"])((function(){return i.value/r.value*100+"%"})),j=Object(y["computed"])((function(){return 100*l.value+"%"})),g=Object(y["ref"])(!1),x=[{label:"2x",value:2},{label:"1.5x",value:1.5},{label:"1.25x",value:1.25},{label:"1x",value:1},{label:"0.75x",value:.75},{label:"0.5x",value:.5}],C=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,r.value),t.value.currentTime=e,a.value=e)},k=function(){t.value&&(c.value=!1,t.value.play(),d.value=!0)},E=function(){t.value&&(c.value=!0,t.value.pause(),d.value=!0)},w=function(){c.value?k():E()},N=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,1),t.value.volume=e,l.value=e,t.value.muted&&0!==e&&(t.value.muted=!1))},I=function(e){t.value&&(t.value.playbackRate=e),s.value=e},V=function(){var e;r.value=(null===(e=t.value)||void 0===e?void 0:e.duration)||0},S=function(){var e;a.value=(null===(e=t.value)||void 0===e?void 0:e.currentTime)||0},B=function(){u.value?(C(0),k()):E()},L=function(){var e;i.value=null!==(e=t.value)&&void 0!==e&&e.buffered.length?t.value.buffered.end(t.value.buffered.length-1):0},T=function(){return Se["a"].error("视频加载失败")},M=function(e){if(t.value&&n.value){var o="clientX"in e?e.clientX:e.changedTouches[0].clientX,l=(o-tu(n.value))/n.value.clientWidth;l=Math.max(l,0),l=Math.min(l,1);var c=l*r.value;t.value.currentTime=c,a.value=c}},_=function e(o){if(t.value&&n.value){var l="clientX"in o?o.clientX:o.changedTouches[0].clientX,c=(l-tu(n.value))/n.value.clientWidth;c=Math.max(c,0),c=Math.min(c,1);var i=c*r.value;t.value.currentTime=i,a.value=i,document.removeEventListener("mousemove",M),document.removeEventListener("touchmove",M),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)}},D=function(){document.addEventListener("mousemove",M),document.addEventListener("touchmove",M),document.addEventListener("mouseup",_),document.addEventListener("touchend",_)},z=function(e){if(o.value){var t="clientX"in e?e.clientX:e.changedTouches[0].clientX,n=(t-tu(o.value)-5.5)/35;N(n)}},A=function e(){document.removeEventListener("mousemove",z),document.removeEventListener("touchmove",z),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)},F=function(){document.addEventListener("mousemove",z),document.addEventListener("touchmove",z),document.addEventListener("mouseup",A),document.addEventListener("touchend",A)},R=function(e){if(o.value){var t=(e.clientX-tu(o.value)-5.5)/35;N(t)}},P=function(e){if(r.value&&n.value){var t=n.value.getBoundingClientRect().left,o=e.clientX-t;if(o<0||o>n.value.offsetWidth)return;var l=r.value*(o/n.value.offsetWidth);p.value="".concat(o-(l>=3600?25:20),"px"),b.value=eu(l),f.value=!0}},H=function(){t.value&&(t.value.muted?(t.value.muted=!1,N(.5)):(t.value.muted=!0,N(0)))},q=function(){u.value=!u.value},W=Object(y["ref"])(-1),G=Object(y["ref"])(!1),U=function(){G.value=!1,clearTimeout(W.value),W.value=setTimeout((function(){var e;null!==(e=t.value)&&void 0!==e&&e.played.length&&(G.value=!0)}),3e3)};return $i(e.src,t),{videoRef:t,playBarWrap:n,volumeBarRef:o,volume:l,loop:u,paused:c,ptime:m,dtime:v,playBarTime:b,playBarTimeVisible:f,playBarTimeLeft:p,playedBarWidth:O,loadedBarWidth:h,volumeBarWidth:j,hideController:G,bezelTransition:d,playbackRate:s,speedMenuVisible:g,speedOptions:x,seek:C,play:k,pause:E,toggle:w,setVolume:N,speed:I,handleDurationchange:V,handleTimeupdate:S,handleEnded:B,handleProgress:L,handleMousedownPlayBar:D,handleMousedownVolumeBar:F,handleClickVolumeBar:R,handleMousemovePlayBar:P,toggleVolume:H,toggleLoop:q,autoHideController:U,handleError:T}}});n("a7fe");const ou=Gn()(nu,[["render",Ki],["__scopeId","data-v-e716fb74"]]);var lu=ou,cu=Object(y["defineComponent"])({name:"editable-element-video",components:{VideoPlayer:lu},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo,n))};return{canvasScale:n,handleSelectElement:o}}});n("de30");const au=Gn()(cu,[["render",wi],["__scopeId","data-v-7f80f8ee"]]);var ru=au;function iu(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconVolumeNotice"),r=Object(y["resolveComponent"])("AudioPlayer"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-audio",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},[Object(y["createVNode"])(a,{class:"audio-icon",style:Object(y["normalizeStyle"])({fontSize:e.audioIconSize,color:e.elementInfo.color})},null,8,["style"]),e.handleElementId===e.elementInfo.id?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,class:"audio-player",style:Object(y["normalizeStyle"])(Object(L["a"])({},e.audioPlayerPosition)),src:e.elementInfo.src,loop:e.elementInfo.loop,scale:e.canvasScale,onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(){}),["stop"]))},null,8,["style","src","loop","scale"])):Object(y["createCommentVNode"])("",!0)],32)),[[i,e.contextmenus]])],4)],6)}var uu=function(e){return Object(y["pushScopeId"])("data-v-5cabbb47"),e=e(),Object(y["popScopeId"])(),e},du=["src","autoplay"],su={class:"controller"},fu={class:"icons"},bu={class:"icon-content"},pu={class:"volume"},mu={class:"icon-content"},vu={class:"volume-bar",ref:"volumeBarRef"},Ou=uu((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),hu=[Ou],ju={class:"time"},yu={class:"ptime"},gu=Object(y["createTextVNode"])(" / "),xu={class:"dtime"},Cu={class:"bar"},ku=uu((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),Eu=[ku];function wu(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPlayOne"),r=Object(y["resolveComponent"])("IconPause"),i=Object(y["resolveComponent"])("IconVolumeMute"),u=Object(y["resolveComponent"])("IconVolumeNotice"),d=Object(y["resolveComponent"])("IconVolumeSmall");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"audio-player",style:Object(y["normalizeStyle"])({transform:"scale(".concat(1/e.scale,")")})},[Object(y["createElementVNode"])("audio",{class:"audio",ref:"audioRef",src:e.src,autoplay:e.autoplay,onDurationchange:t[0]||(t[0]=function(t){return e.handleDurationchange()}),onTimeupdate:t[1]||(t[1]=function(t){return e.handleTimeupdate()}),onPlay:t[2]||(t[2]=function(t){return e.handlePlayed()}),onEnded:t[3]||(t[3]=function(t){return e.handleEnded()}),onProgress:t[4]||(t[4]=function(t){return e.handleProgress()}),onError:t[5]||(t[5]=function(t){return e.handleError()})},null,40,du),Object(y["createElementVNode"])("div",su,[Object(y["createElementVNode"])("div",fu,[Object(y["createElementVNode"])("div",{class:"icon play-icon",onClick:t[6]||(t[6]=function(t){return e.toggle()})},[Object(y["createElementVNode"])("span",bu,[e.paused?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0})):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1}))])]),Object(y["createElementVNode"])("div",pu,[Object(y["createElementVNode"])("div",{class:"icon volume-icon",onClick:t[7]||(t[7]=function(t){return e.toggleVolume()})},[Object(y["createElementVNode"])("span",mu,[0===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0})):1===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:2}))])]),Object(y["createElementVNode"])("div",{class:"volume-bar-wrap",onMousedown:t[8]||(t[8]=function(t){return e.handleMousedownVolumeBar(t)}),onTouchstart:t[9]||(t[9]=function(t){return e.handleMousedownVolumeBar(t)}),onClick:t[10]||(t[10]=function(t){return e.handleClickVolumeBar(t)})},[Object(y["createElementVNode"])("div",vu,[Object(y["createElementVNode"])("div",{class:"volume-bar-inner",style:Object(y["normalizeStyle"])({width:e.volumeBarWidth})},hu,4)],512)],32)])]),Object(y["createElementVNode"])("span",ju,[Object(y["createElementVNode"])("span",yu,Object(y["toDisplayString"])(e.ptime),1),gu,Object(y["createElementVNode"])("span",xu,Object(y["toDisplayString"])(e.dtime),1)]),Object(y["createElementVNode"])("div",{class:"bar-wrap",ref:"playBarWrap",onMousedown:t[11]||(t[11]=function(t){return e.handleMousedownPlayBar(t)}),onTouchstart:t[12]||(t[12]=function(t){return e.handleMousedownPlayBar(t)}),onMousemove:t[13]||(t[13]=function(t){return e.handleMousemovePlayBar(t)}),onMouseenter:t[14]||(t[14]=function(t){return e.playBarTimeVisible=!0}),onMouseleave:t[15]||(t[15]=function(t){return e.playBarTimeVisible=!1})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["bar-time",{hidden:!e.playBarTimeVisible}]),style:Object(y["normalizeStyle"])({left:e.playBarTimeLeft})},Object(y["toDisplayString"])(e.playBarTime),7),Object(y["createElementVNode"])("div",Cu,[Object(y["createElementVNode"])("div",{class:"loaded",style:Object(y["normalizeStyle"])({width:e.loadedBarWidth})},null,4),Object(y["createElementVNode"])("div",{class:"played",style:Object(y["normalizeStyle"])({width:e.playedBarWidth})},Eu,4)])],544)])],4)}var Nu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(0===e||isNaN(e))return"00:00";var t=function(e){return e<10?"0"+e:""+e},n=Math.floor(e/3600),o=Math.floor((e-3600*n)/60),l=Math.floor(e-3600*n-60*o);return(n>0?[n,o,l]:[o,l]).map(t).join(":")},Iu=function(e){return e.getBoundingClientRect().left},Vu=Object(y["defineComponent"])({name:"audio-player",props:{src:{type:String,required:!0},loop:{type:Boolean,required:!0},autoplay:{type:Boolean,default:!1},scale:{type:Number,default:1}},setup:function(e){var t=Object(y["ref"])(),n=Object(y["ref"])(),o=Object(y["ref"])(),l=Object(y["ref"])(.5),c=Object(y["ref"])(!0),a=Object(y["ref"])(0),r=Object(y["ref"])(0),i=Object(y["ref"])(0),u=Object(y["ref"])(!1),d=Object(y["ref"])("00:00"),s=Object(y["ref"])("0"),f=Object(y["computed"])((function(){return Nu(a.value)})),b=Object(y["computed"])((function(){return Nu(r.value)})),p=Object(y["computed"])((function(){return a.value/r.value*100+"%"})),m=Object(y["computed"])((function(){return i.value/r.value*100+"%"})),v=Object(y["computed"])((function(){return 100*l.value+"%"})),O=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,r.value),t.value.currentTime=e,a.value=e)},h=function(){t.value&&(c.value=!1,t.value.play())},j=function(){t.value&&(c.value=!0,t.value.pause())},g=function(){c.value?h():j()},x=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,1),t.value.volume=e,l.value=e,t.value.muted&&0!==e&&(t.value.muted=!1))},C=function(){var e;r.value=(null===(e=t.value)||void 0===e?void 0:e.duration)||0},k=function(){var e;a.value=(null===(e=t.value)||void 0===e?void 0:e.currentTime)||0},E=function(){c.value=!1},w=function(){e.loop?(O(0),h()):j()},N=function(){var e;i.value=null!==(e=t.value)&&void 0!==e&&e.buffered.length?t.value.buffered.end(t.value.buffered.length-1):0},I=function(){return Se["a"].error("视频加载失败")},V=function(e){if(t.value&&n.value){var o="clientX"in e?e.clientX:e.changedTouches[0].clientX,l=(o-Iu(n.value))/n.value.clientWidth;l=Math.max(l,0),l=Math.min(l,1);var c=l*r.value;t.value.currentTime=c,a.value=c}},S=function e(o){if(t.value&&n.value){var l="clientX"in o?o.clientX:o.changedTouches[0].clientX,c=(l-Iu(n.value))/n.value.clientWidth;c=Math.max(c,0),c=Math.min(c,1);var i=c*r.value;t.value.currentTime=i,a.value=i,document.removeEventListener("mousemove",V),document.removeEventListener("touchmove",V),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)}},B=function(){document.addEventListener("mousemove",V),document.addEventListener("touchmove",V),document.addEventListener("mouseup",S),document.addEventListener("touchend",S)},L=function(e){if(o.value){var t="clientX"in e?e.clientX:e.changedTouches[0].clientX,n=(t-Iu(o.value)-5.5)/35;x(n)}},T=function e(){document.removeEventListener("mousemove",L),document.removeEventListener("touchmove",L),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)},M=function(){document.addEventListener("mousemove",L),document.addEventListener("touchmove",L),document.addEventListener("mouseup",T),document.addEventListener("touchend",T)},_=function(e){if(o.value){var t=(e.clientX-Iu(o.value)-5.5)/35;x(t)}},D=function(e){if(r.value&&n.value){var t=n.value.getBoundingClientRect().left,o=e.clientX-t;if(o<0||o>n.value.offsetWidth)return;var l=r.value*(o/n.value.offsetWidth);s.value="".concat(o-(l>=3600?25:20),"px"),d.value=Nu(l),u.value=!0}},z=function(){t.value&&(t.value.muted?(t.value.muted=!1,x(.5)):(t.value.muted=!0,x(0)))};return{audioRef:t,playBarWrap:n,volumeBarRef:o,volume:l,paused:c,ptime:f,dtime:b,playBarTime:d,playBarTimeVisible:u,playBarTimeLeft:s,playedBarWidth:p,loadedBarWidth:m,volumeBarWidth:v,play:h,pause:j,toggle:g,setVolume:x,handleDurationchange:C,handleTimeupdate:k,handlePlayed:E,handleEnded:w,handleProgress:N,handleError:I,handleMousedownPlayBar:B,handleMousedownVolumeBar:M,handleClickVolumeBar:_,handleMousemovePlayBar:D,toggleVolume:z}}});n("195c");const Su=Gn()(Vu,[["render",wu],["__scopeId","data-v-5cabbb47"]]);var Bu=Su,Lu=Object(y["defineComponent"])({name:"editable-element-audio",components:{AudioPlayer:Bu},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=t.handleElementId,l=Object(g["c"])(ce()),c=l.viewportRatio,a=Object(y["computed"])((function(){return Math.min(e.elementInfo.width,e.elementInfo.height)+"px"})),r=Object(y["computed"])((function(){var t=nt,o=nt*c.value,l=280/n.value,a=50/n.value,r=e.elementInfo.width,i=e.elementInfo.height,u=e.elementInfo.left,d=e.elementInfo.top,s=0,f=i;return u+l>=t&&(s=r-l),d+i+a>=o&&(f=-a),{left:s+"px",top:f+"px"}})),i=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))};return{canvasScale:n,handleElementId:o,audioIconSize:a,audioPlayerPosition:r,handleSelectElement:i}}});n("2fee");const Tu=Gn()(Lu,[["render",iu],["__scopeId","data-v-66dd4448"]]);var Mu=Tu,_u=Object(y["defineComponent"])({name:"editable-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},isMultiSelect:{type:Boolean,required:!0},selectElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(y["computed"])((function(){var t,n=(t={},Object(fe["a"])(t,Ne.IMAGE,Sa),Object(fe["a"])(t,Ne.TEXT,Tr),Object(fe["a"])(t,Ne.SHAPE,Hr),Object(fe["a"])(t,Ne.LINE,Yr),Object(fe["a"])(t,Ne.CHART,$r),Object(fe["a"])(t,Ne.TABLE,hi),Object(fe["a"])(t,Ne.LATEX,Ei),Object(fe["a"])(t,Ne.VIDEO,ru),Object(fe["a"])(t,Ne.AUDIO,Mu),t);return n[e.elementInfo.type]||null})),n=mt(),o=n.orderElement,l=fa(),c=l.alignElementToCanvas,a=st(),r=a.combineElements,i=a.uncombineElements,u=dt(),d=u.deleteElement,s=ut(),f=s.lockElement,b=s.unlockElement,p=ft(),m=p.copyElement,v=p.pasteElement,O=p.cutElement,h=bt(),j=h.selectAllElement,g=function(){return e.elementInfo.lock?[{text:"解锁",handler:function(){return b(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 c(E.HORIZONTAL)},children:[{text:"水平垂直居中",handler:function(){return c(E.CENTER)}},{text:"水平居中",handler:function(){return c(E.HORIZONTAL)}},{text:"左对齐",handler:function(){return c(E.LEFT)}},{text:"右对齐",handler:function(){return c(E.RIGHT)}}]},{text:"垂直居中",handler:function(){return c(E.VERTICAL)},children:[{text:"水平垂直居中",handler:function(){return c(E.CENTER)}},{text:"垂直居中",handler:function(){return c(E.VERTICAL)}},{text:"顶部对齐",handler:function(){return c(E.TOP)}},{text:"底部对齐",handler:function(){return c(E.BOTTOM)}}]},{divider:!0},{text:"置于顶层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,k.TOP)},children:[{text:"置于顶层",handler:function(){return o(e.elementInfo,k.TOP)}},{text:"上移一层",handler:function(){return o(e.elementInfo,k.UP)}}]},{text:"置于底层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,k.BOTTOM)},children:[{text:"置于底层",handler:function(){return o(e.elementInfo,k.BOTTOM)}},{text:"下移一层",handler:function(){return o(e.elementInfo,k.DOWN)}}]},{divider:!0},{text:"设置链接",handler:e.openLinkDialog},{text:e.elementInfo.groupId?"取消组合":"组合",subText:"Ctrl + G",handler:e.elementInfo.groupId?i:r,hide:!e.isMultiSelect},{text:"全选",subText:"Ctrl + A",handler:j},{text:"锁定",subText:"Ctrl + L",handler:f},{text:"删除",subText:"Delete",handler:d}]};return{currentElementComponent:t,contextmenus:g}}});const Du=Gn()(_u,[["render",sa]]);var zu=Du;function Au(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])("mouse-selection quadrant-".concat(e.quadrant)),style:Object(y["normalizeStyle"])({top:e.top+"px",left:e.left+"px",width:e.width+"px",height:e.height+"px"})},null,6)}var Fu=Object(y["defineComponent"])({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("aa92");const Ru=Gn()(Fu,[["render",Au],["__scopeId","data-v-25d4b5f8"]]);var Pu=Ru;function Hu(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("GridLines");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"viewport-background",style:Object(y["normalizeStyle"])(e.backgroundStyle)},[e.showGridLines?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0})):Object(y["createCommentVNode"])("",!0)],4)}var qu={class:"grid-lines"},Wu=["d","stroke"];function Gu(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",qu,[Object(y["createElementVNode"])("path",{style:Object(y["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")}),d:e.path,fill:"none",stroke:e.gridColor,"stroke-width":"0.3","stroke-dasharray":"5"},null,12,Wu)])}var Uu=Object(y["defineComponent"])({name:"grid-lines",setup:function(){var e=Object(g["c"])(ae()),t=e.canvasScale,n=Object(g["c"])(ce()),o=n.currentSlide,l=n.viewportRatio,c=Object(y["computed"])((function(){var e;return null===(e=o.value)||void 0===e?void 0:e.background})),a=Object(y["computed"])((function(){var e,t=(null===(e=c.value)||void 0===e?void 0:e.color)||"#fff",n=["#000","#fff"];return ee.a.mostReadable(t,n,{includeFallbackColors:!0}).setAlpha(.5).toRgbString()})),r=50,i=function(){for(var e=nt,t=nt*l.value,n="",o=0;o<=Math.floor(t/r);o++)n+="M0 ".concat(o*r," L").concat(e," ").concat(o*r," ");for(var c=0;c<=Math.floor(e/r);c++)n+="M".concat(c*r," 0 L").concat(c*r," ").concat(t," ");return n};return{canvasScale:t,gridColor:a,width:nt,height:nt*l.value,path:i()}}});n("ffb8");const Xu=Gn()(Uu,[["render",Gu],["__scopeId","data-v-9b94cc34"]]);var Zu=Xu,Yu=Object(y["defineComponent"])({name:"viewport-background",components:{GridLines:Zu},setup:function(){var e=Object(g["c"])(ae()),t=e.showGridLines,n=Object(g["c"])(ce()),o=n.currentSlide,l=Object(y["computed"])((function(){var e;return null===(e=o.value)||void 0===e?void 0:e.background})),c=ho(l),a=c.backgroundStyle;return{showGridLines:t,backgroundStyle:a}}});n("06b6");const Ju=Gn()(Yu,[["render",Hu],["__scopeId","data-v-4d0018d8"]]);var Qu=Ju;function Ku(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"alignment-line",style:Object(y["normalizeStyle"])({left:e.left,top:e.top})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["line",e.type]),style:Object(y["normalizeStyle"])(e.sizeStyle)},null,6)],4)}var $u=Object(y["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=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.axis.x*n.value+"px"})),l=Object(y["computed"])((function(){return e.axis.y*n.value+"px"})),c=Object(y["computed"])((function(){return"vertical"===e.type?{height:e.length*n.value+"px"}:{width:e.length*n.value+"px"}}));return{left:o,top:l,sizeStyle:c}}});n("c790");const ed=Gn()($u,[["render",Ku],["__scopeId","data-v-62c9018e"]]);var td=ed,nd=["width","height"],od=["d"];function ld(e,t,n,o,l,c){var a,r;return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-create-selection",ref:"selectionRef",onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.createSelection(t)}),["stop"])),onContextmenu:t[1]||(t[1]=Object(y["withModifiers"])((function(){}),["stop","prevent"]))},[e.start&&e.end?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:Object(y["normalizeClass"])(["selection",null===(a=e.creatingElement)||void 0===a?void 0:a.type]),style:Object(y["normalizeStyle"])(e.position)},["line"===(null===(r=e.creatingElement)||void 0===r?void 0:r.type)&&e.lineData?(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{key:0,overflow:"visible",width:e.lineData.svgWidth,height:e.lineData.svgHeight},[Object(y["createElementVNode"])("path",{d:e.lineData.path,stroke:"#d14424",fill:"none","stroke-width":"2"},null,8,od)],8,nd)):Object(y["createCommentVNode"])("",!0)],6)):Object(y["createCommentVNode"])("",!0)],544)}var cd=Object(y["defineComponent"])({name:"element-create-selection",emits:["created"],setup:function(e,t){var n=t.emit,o=ae(),l=Object(g["c"])(o),c=l.creatingElement,a=Object(g["c"])(Oe()),r=a.ctrlOrShiftKeyActive,i=Object(y["ref"])(),u=Object(y["ref"])(),d=Object(y["ref"])(),s=Object(y["ref"])({x:0,y:0});Object(y["onMounted"])((function(){if(d.value){var e=d.value.getBoundingClientRect(),t=e.x,n=e.y;s.value={x:t,y:n}}}));var f=function(e){var t=!0,l=e.pageX,a=e.pageY;i.value=[l,a],document.onmousemove=function(e){if(c.value&&t){var n=e.pageX,o=e.pageY;if(r.value){var i=n-l,d=o-a,s=Math.abs(i),f=Math.abs(d);if("shape"===c.value.type){var b=d>0&&i<0||d<0&&i>0;s>f?o=b?a-i:a+i:n=b?l-d:l+d}else"line"===c.value.type&&(s>f?o=a:n=l)}u.value=[n,o]}},document.onmouseup=function(e){var r,d;if(document.onmousemove=null,document.onmouseup=null,2!==e.button){t=!1;var s=e.pageX,f=e.pageY,b=30;if("line"===(null===(r=c.value)||void 0===r?void 0:r.type)&&(Math.abs(s-l)>=b||Math.abs(f-a)>=b))n("created",{start:i.value,end:u.value});else if("line"!==(null===(d=c.value)||void 0===d?void 0:d.type)&&Math.abs(s-l)>=b&&Math.abs(f-a)>=b)n("created",{start:i.value,end:u.value});else{var p=200,m=Math.min(s,l),v=Math.min(f,a),O=Math.max(s,l),h=Math.max(f,a),j=O-m>=b?O-m:p,y=h-v>=b?h-v:p;n("created",{start:[m,v],end:[m+j,v+y]})}}else setTimeout((function(){return o.setCreatingElement(null)}),0)}},b=Object(y["computed"])((function(){if(!i.value||!u.value)return null;if(!c.value||"line"!==c.value.type)return null;var e=Object(He["a"])(i.value,2),t=e[0],n=e[1],o=Object(He["a"])(u.value,2),l=o[0],a=o[1],r=Math.min(t,l),d=Math.max(t,l),s=Math.min(n,a),f=Math.max(n,a),b=d-r>=24?d-r:24,p=f-s>=24?f-s:24,m=t===r?0:d-r,v=n===s?0:f-s,O=l===r?0:d-r,h=a===s?0:f-s,j="M".concat(m,", ").concat(v," L").concat(O,", ").concat(h);return{svgWidth:b,svgHeight:p,startX:m,startY:v,endX:O,endY:h,path:j}})),p=Object(y["computed"])((function(){if(!i.value||!u.value)return{};var e=Object(He["a"])(i.value,2),t=e[0],n=e[1],o=Object(He["a"])(u.value,2),l=o[0],c=o[1],a=Math.min(t,l),r=Math.max(t,l),d=Math.min(n,c),f=Math.max(n,c),b=r-a,p=f-d;return{left:a-s.value.x+"px",top:d-s.value.y+"px",width:b+"px",height:p+"px"}}));return{selectionRef:d,start:i,end:u,creatingElement:c,createSelection:f,lineData:b,position:p}}});n("80f7");const ad=Gn()(cd,[["render",ld],["__scopeId","data-v-15b60d90"]]);var rd=ad;function id(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"multi-select-operate",style:Object(y["normalizeStyle"])({left:e.range.minX*e.canvasScale+"px",top:e.range.minY*e.canvasScale+"px"})},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.disableResize?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],{key:0},Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:t.direction,type:t.direction,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleMultiElement(n,e.range,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))],4)}var ud=function(e,t){var n=Object(y["computed"])((function(){return[{direction:N.LEFT_TOP,style:{}},{direction:N.TOP,style:{left:e.value/2+"px"}},{direction:N.RIGHT_TOP,style:{left:e.value+"px"}},{direction:N.LEFT,style:{top:t.value/2+"px"}},{direction:N.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}},{direction:N.LEFT_BOTTOM,style:{top:t.value+"px"}},{direction:N.BOTTOM,style:{left:e.value/2+"px",top:t.value+"px"}},{direction:N.RIGHT_BOTTOM,style:{left:e.value+"px",top:t.value+"px"}}]})),o=Object(y["computed"])((function(){return[{direction:N.LEFT,style:{top:t.value/2+"px"}},{direction:N.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}}]})),l=Object(y["computed"])((function(){return[{type:w.T,style:{width:e.value+"px"}},{type:w.B,style:{top:t.value+"px",width:e.value+"px"}},{type:w.L,style:{height:t.value+"px"}},{type:w.R,style:{left:e.value+"px",height:t.value+"px"}}]}));return{resizeHandlers:n,textElementResizeHandlers:o,borderLines:l}};function dd(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["resize-handler",e.rotateClassName,e.type])},null,2)}var sd=Object(y["defineComponent"])({name:"resize-handler",props:{type:{type:String,default:""},rotate:{type:Number,default:0}},setup:function(e){var t=Object(y["computed"])((function(){var t="rotate-",n=e.rotate;return n>-22.5&&n<=22.5?t+0:n>22.5&&n<=67.5?t+45:n>67.5&&n<=112.5?t+90:n>112.5&&n<=157.5?t+135:n>157.5||n<=-157.5?t+0:n>-157.5&&n<=-112.5?t+45:n>-112.5&&n<=-67.5?t+90:n>-67.5&&n<=-22.5?t+135:t+0}));return{rotateClassName:t}}});n("7f52");const fd=Gn()(sd,[["render",dd],["__scopeId","data-v-c9559332"]]);var bd=fd;function pd(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["border-line",e.type,{wide:e.isWide}])},null,2)}var md=Object(y["defineComponent"])({name:"border-line",props:{type:{type:String,required:!0},isWide:{type:Boolean,default:!1}}});n("9d5f");const vd=Gn()(md,[["render",pd],["__scopeId","data-v-1430bedc"]]);var Od=vd,hd=Object(y["defineComponent"])({name:"multi-select-operate",components:{ResizeHandler:bd,BorderLine:Od},props:{elementList:{type:Array,required:!0},scaleMultiElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.canvasScale,l=Object(y["computed"])((function(){return e.elementList.filter((function(e){return n.value.includes(e.id)}))})),c=Object(y["ref"])({minX:0,maxX:0,minY:0,maxY:0}),a=Object(y["computed"])((function(){return(c.value.maxX-c.value.minX)*o.value})),r=Object(y["computed"])((function(){return(c.value.maxY-c.value.minY)*o.value})),i=ud(a,r),u=i.resizeHandlers,d=i.borderLines,s=function(){var e=Ue(l.value),t=e.minX,n=e.maxX,o=e.minY,a=e.maxY;c.value={minX:t,maxX:n,minY:o,maxY:a}};Object(y["watchEffect"])(s);var f=Object(y["computed"])((function(){return l.value.some((function(e){return!!("image"!==e.type&&"shape"!==e.type||e.rotate)}))}));return{range:c,canvasScale:o,borderLines:d,disableResize:f,resizeHandlers:u}}});n("008f");const jd=Gn()(hd,[["render",id],["__scopeId","data-v-55c8df22"]]);var yd=jd,gd={key:1,class:"animation-index"};function xd(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("LinkHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["operate",{"multi-select":e.isMultiSelect&&!e.isActive}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top*e.canvasScale+"px",left:e.elementInfo.left*e.canvasScale+"px",transform:"rotate(".concat(e.rotate,"deg)"),transformOrigin:"".concat(e.elementInfo.width*e.canvasScale/2,"px ").concat(e.height*e.canvasScale/2,"px")})},[e.isSelected?(Object(y["openBlock"])(),Object(y["createBlock"])(Object(y["resolveDynamicComponent"])(e.currentOperateComponent),{key:0,elementInfo:e.elementInfo,handlerVisible:!e.elementInfo.lock&&(e.isActiveGroupElement||!e.isMultiSelect),rotateElement:e.rotateElement,scaleElement:e.scaleElement,dragLineElement:e.dragLineElement},null,8,["elementInfo","handlerVisible","rotateElement","scaleElement","dragLineElement"])):Object(y["createCommentVNode"])("",!0),"elAnimation"===e.toolbarState&&-1!==e.elementIndexInAnimation?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",gd,Object(y["toDisplayString"])(e.elementIndexInAnimation+1),1)):Object(y["createCommentVNode"])("",!0),e.isActive&&e.elementInfo.link?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:2,elementInfo:e.elementInfo,link:e.elementInfo.link,openLinkDialog:e.openLinkDialog,onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(){}),["stop"]))},null,8,["elementInfo","link","openLinkDialog"])):Object(y["createCommentVNode"])("",!0)],6)}function Cd(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["image-element-operate",{cliping:e.isCliping}])},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)],2)}var kd={class:"rotate-handler"};function Ed(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",kd)}var wd={name:"rotate-handler"};n("8754");const Nd=Gn()(wd,[["render",Ed],["__scopeId","data-v-9a549510"]]);var Id=Nd,Vd=Object(y["defineComponent"])({name:"image-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=t.clipingImageElementId,l=Object(y["computed"])((function(){return o.value===e.elementInfo.id})),c=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),a=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),r=ud(c,a),i=r.resizeHandlers,u=r.borderLines;return{isCliping:l,scaleWidth:c,resizeHandlers:i,borderLines:u}}});n("5efd");const Sd=Gn()(Vd,[["render",Cd],["__scopeId","data-v-db6d5ba6"]]);var Bd=Sd,Ld={class:"text-element-operate"};function Td(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ld,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.textElementResizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)])}var Md=Object(y["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),l=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),c=ud(o,l),a=c.textElementResizeHandlers,r=c.borderLines;return{scaleWidth:o,textElementResizeHandlers:a,borderLines:r}}});const _d=Gn()(Md,[["render",Td]]);var Dd=_d,zd={class:"shape-element-operate"};function Ad(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",zd,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)])}var Fd=Object(y["defineComponent"])({name:"shape-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),l=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),c=ud(o,l),a=c.resizeHandlers,r=c.borderLines;return{scaleWidth:o,resizeHandlers:a,borderLines:r}}});const Rd=Gn()(Fd,[["render",Ad]]);var Pd=Rd,Hd={class:"line-element-operate"},qd=["width","height","stroke"],Wd={key:0},Gd=["x1","y1","x2","y2"],Ud=["x1","y1","x2","y2"],Xd=["x1","y1","x2","y2"],Zd=["x1","y1","x2","y2"];function Yd(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ResizeHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Hd,[e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-resize-handler",key:t.handler,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.dragLineElement(n,e.elementInfo,t.handler)}),["stop"])},null,8,["style","onMousedown"])})),128)),(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{width:e.svgWidth,height:e.svgHeight,stroke:e.elementInfo.color,overflow:"visible",style:Object(y["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")})},[e.elementInfo.curve?(Object(y["openBlock"])(),Object(y["createElementBlock"])("g",Wd,[Object(y["createElementVNode"])("line",{class:"anchor-line",x1:e.elementInfo.start[0],y1:e.elementInfo.start[1],x2:e.elementInfo.curve[0],y2:e.elementInfo.curve[1]},null,8,Gd),Object(y["createElementVNode"])("line",{class:"anchor-line",x1:e.elementInfo.end[0],y1:e.elementInfo.end[1],x2:e.elementInfo.curve[0],y2:e.elementInfo.curve[1]},null,8,Ud)])):Object(y["createCommentVNode"])("",!0),e.elementInfo.cubic?(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],{key:1},Object(y["renderList"])(e.elementInfo.cubic,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("g",{key:n},[0===n?(Object(y["openBlock"])(),Object(y["createElementBlock"])("line",{key:0,class:"anchor-line",x1:e.elementInfo.start[0],y1:e.elementInfo.start[1],x2:t[0],y2:t[1]},null,8,Xd)):Object(y["createCommentVNode"])("",!0),1===n?(Object(y["openBlock"])(),Object(y["createElementBlock"])("line",{key:1,class:"anchor-line",x1:e.elementInfo.end[0],y1:e.elementInfo.end[1],x2:t[0],y2:t[1]},null,8,Zd)):Object(y["createCommentVNode"])("",!0)])})),128)):Object(y["createCommentVNode"])("",!0)],12,qd))],64)):Object(y["createCommentVNode"])("",!0)])}var Jd=Object(y["defineComponent"])({name:"line-element-operate",inheritAttrs:!1,components:{ResizeHandler:bd},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},dragLineElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return Math.max(e.elementInfo.start[0],e.elementInfo.end[0])})),l=Object(y["computed"])((function(){return Math.max(e.elementInfo.start[1],e.elementInfo.end[1])})),c=Object(y["computed"])((function(){var t=[{handler:I.START,style:{left:e.elementInfo.start[0]*n.value+"px",top:e.elementInfo.start[1]*n.value+"px"}},{handler:I.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:I.C,style:{left:o[0]*n.value+"px",top:o[1]*n.value+"px"}})}else if(e.elementInfo.cubic){var l=Object(He["a"])(e.elementInfo.cubic,2),c=l[0],a=l[1];t.push({handler:I.C1,style:{left:c[0]*n.value+"px",top:c[1]*n.value+"px"}}),t.push({handler:I.C2,style:{left:a[0]*n.value+"px",top:a[1]*n.value+"px"}})}return t}));return{svgWidth:o,svgHeight:l,canvasScale:n,resizeHandlers:c}}});n("3c1d");const Qd=Gn()(Jd,[["render",Yd],["__scopeId","data-v-c0a272d2"]]);var Kd=Qd,$d={class:"table-element-operate"};function es(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$d,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.textElementResizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)])}var ts=Object(y["defineComponent"])({name:"table-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.outline.width||1})),l=Object(y["computed"])((function(){return(e.elementInfo.width+o.value)*n.value})),c=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),a=ud(l,c),r=a.textElementResizeHandlers,i=a.borderLines;return{scaleWidth:l,textElementResizeHandlers:r,borderLines:i}}});const ns=Gn()(ts,[["render",es]]);var os=ns,ls={class:"common-element-operate"};function cs(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ls,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),e.cannotRotate?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0,class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"]))],64)):Object(y["createCommentVNode"])("",!0)])}var as=Object(y["defineComponent"])({name:"common-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),l=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),c=ud(o,l),a=c.resizeHandlers,r=c.borderLines,i=Object(y["computed"])((function(){return["video","audio"].includes(e.elementInfo.type)}));return{scaleWidth:o,resizeHandlers:a,borderLines:r,cannotRotate:i}}});const rs=Gn()(as,[["render",cs]]);var is=rs,us=["href"],ds={key:1,class:"link"},ss={class:"btns"};function fs(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Divider");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"link-handler",style:Object(y["normalizeStyle"])({top:e.height*e.canvasScale+10+"px"})},["web"===e.link.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("a",{key:0,class:"link",href:e.link.target,target:"_blank"},Object(y["toDisplayString"])(e.link.target),9,us)):(Object(y["openBlock"])(),Object(y["createElementBlock"])("a",ds,"幻灯片页面 "+Object(y["toDisplayString"])(e.link.target),1)),Object(y["createElementVNode"])("div",ss,[Object(y["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.openLinkDialog()})},"更换"),Object(y["createVNode"])(a,{type:"vertical"}),Object(y["createElementVNode"])("div",{class:"btn",onClick:t[1]||(t[1]=function(t){return e.removeLink(e.elementInfo)})},"移除")])],4)}var bs=function(){var e=ce(),t=$e(),n=t.addHistorySnapshot,o=function(t,o){var l=/^(https?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$/;if("web"===o.type&&!l.test(o.target))return Se["a"].error("不是正确的网页链接地址"),!1;var c={link:o};return e.updateElement({id:t.id,props:c}),n(),!0},l=function(t){e.removeElementProps({id:t.id,propName:"link"}),n()};return{setLink:o,removeLink:l}},ps=Object(y["defineComponent"])({name:"link-handler",props:{elementInfo:{type:Object,required:!0},link:{type:Object,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=bs(),l=o.removeLink,c=Object(y["computed"])((function(){return"line"===e.elementInfo.type?0:e.elementInfo.height}));return{canvasScale:n,height:c,removeLink:l}}});n("c15d");const ms=Gn()(ps,[["render",fs],["__scopeId","data-v-2b77dbb0"]]);var vs=ms,Os=Object(y["defineComponent"])({name:"operate",components:{LinkHandler:vs},props:{elementInfo:{type:Object,required:!0},isSelected:{type:Boolean,required:!0},isActive:{type:Boolean,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0},dragLineElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=t.toolbarState,l=Object(g["c"])(ce()),c=l.currentSlide,a=Object(y["computed"])((function(){var t,n=(t={},Object(fe["a"])(t,Ne.IMAGE,Bd),Object(fe["a"])(t,Ne.TEXT,Dd),Object(fe["a"])(t,Ne.SHAPE,Pd),Object(fe["a"])(t,Ne.LINE,Kd),Object(fe["a"])(t,Ne.TABLE,os),Object(fe["a"])(t,Ne.CHART,is),Object(fe["a"])(t,Ne.LATEX,is),Object(fe["a"])(t,Ne.VIDEO,is),Object(fe["a"])(t,Ne.AUDIO,is),t);return n[e.elementInfo.type]||null})),r=Object(y["computed"])((function(){var t=c.value.animations||[];return t.findIndex((function(t){return t.elId===e.elementInfo.id}))})),i=Object(y["computed"])((function(){return"rotate"in e.elementInfo?e.elementInfo.rotate:0})),u=Object(y["computed"])((function(){return"height"in e.elementInfo?e.elementInfo.height:0}));return{currentOperateComponent:a,canvasScale:n,toolbarState:o,elementIndexInAnimation:r,rotate:i,height:u}}});n("1118");const hs=Gn()(Os,[["render",xd],["__scopeId","data-v-6abdbdd6"]]);var js=hs,ys=function(e){return Object(y["pushScopeId"])("data-v-3adaaa8e"),e=e(),Object(y["popScopeId"])(),e},gs={class:"link-dialog"},xs={class:"tabs"},Cs=["onClick"],ks={key:2,class:"preview"},Es=ys((function(){return Object(y["createElementVNode"])("div",null,"预览:",-1)})),ws={class:"btns"},Ns=Object(y["createTextVNode"])("取消"),Is=Object(y["createTextVNode"])("确认");function Vs(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Input"),r=Object(y["resolveComponent"])("SelectOption"),i=Object(y["resolveComponent"])("Select"),u=Object(y["resolveComponent"])("ThumbnailSlide"),d=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",gs,[Object(y["createElementVNode"])("div",xs,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tabs,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["tab",{active:e.type===t.key}]),key:t.key,onClick:function(n){return e.type=t.key}},Object(y["toDisplayString"])(t.label),11,Cs)})),128))]),"web"===e.type?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,class:"input",value:e.address,"onUpdate:value":t[0]||(t[0]=function(t){return e.address=t}),placeholder:"请输入网页链接地址"},null,8,["value"])):Object(y["createCommentVNode"])("",!0),"slide"===e.type?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:1,class:"input",value:e.slideId,"onUpdate:value":t[1]||(t[1]=function(t){return e.slideId=t})},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(e,t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e.id,value:e.id},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])("幻灯片 "+Object(y["toDisplayString"])(t+1),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])):Object(y["createCommentVNode"])("",!0),"slide"===e.type&&e.selectedSlide?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ks,[Es,Object(y["createVNode"])(u,{class:"thumbnail",slide:e.selectedSlide,size:490},null,8,["slide"])])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",ws,[Object(y["createVNode"])(d,{onClick:t[2]||(t[2]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(y["withCtx"])((function(){return[Ns]})),_:1}),Object(y["createVNode"])(d,{type:"primary",onClick:t[3]||(t[3]=function(t){return e.save()})},{default:Object(y["withCtx"])((function(){return[Is]})),_:1})])])}var Ss=Object(y["defineComponent"])({name:"link-dialog",emits:["close"],components:{ThumbnailSlide:Rc},setup:function(e,t){var n=t.emit,o=Object(g["c"])(ae()),l=o.handleElement,c=Object(g["c"])(ce()),a=c.slides,r=Object(y["ref"])("web"),i=Object(y["ref"])(""),u=Object(y["ref"])(""),d=Object(y["computed"])((function(){return u.value&&a.value.find((function(e){return e.id===u.value}))||null})),s=[{key:"web",label:"网页链接"},{key:"slide",label:"幻灯片页面"}],f=bs(),b=f.setLink;Object(y["onMounted"])((function(){var e;null!==(e=l.value)&&void 0!==e&&e.link&&("web"===l.value.link.type?i.value=l.value.link.target:"slide"===l.value.link.type&&(u.value=l.value.link.target),r.value=l.value.link.type)}));var p=function(){return n("close")},m=function(){var e={type:r.value,target:"web"===r.value?i.value:u.value};if(l.value){var t=b(l.value,e);t?p():i.value=""}};return{slides:a,tabs:s,type:r,address:i,slideId:u,selectedSlide:d,close:p,save:m}}});n("fe34");const Bs=Gn()(Ss,[["render",Vs],["__scopeId","data-v-3adaaa8e"]]);var Ls=Bs,Ts=Object(y["defineComponent"])({name:"editor-canvas",components:{EditableElement:zu,MouseSelection:Pu,ViewportBackground:Qu,AlignmentLine:td,ElementCreateSelection:rd,MultiSelectOperate:yd,Operate:js,LinkDialog:Ls},setup:function(){var e=ae(),t=Object(g["c"])(e),n=t.activeElementIdList,o=t.activeGroupElementId,l=t.handleElementId,c=t.editorAreaFocus,a=t.showGridLines,r=t.creatingElement,i=t.canvasScale,u=Object(g["c"])(ce()),d=u.currentSlide,s=Object(g["c"])(Oe()),f=s.ctrlKeyState,b=s.ctrlOrShiftKeyActive,p=Object(y["ref"])(),m=Object(y["ref"])([]),v=Object(y["ref"])(!1),O=function(){return v.value=!0};Object(y["watch"])(l,(function(){e.setActiveGroupElementId("")}));var h=Object(y["ref"])([]),j=function(){h.value=d.value?JSON.parse(JSON.stringify(d.value.elements)):[]};Object(y["watchEffect"])(j);var x=Object(y["ref"])(),C=Jc(x),k=C.viewportStyles;Kc(x);var E=Qc(h,p),w=E.mouseSelection,N=E.mouseSelectionVisible,I=E.mouseSelectionQuadrant,S=E.updateMouseSelection,B=ra(h,m),L=B.dragElement,T=ia(h),M=T.dragLineElement,_=aa(h,L),D=_.selectElement,z=ca(h,m),A=z.scaleElement,F=z.scaleMultiElement,R=ea(h,p),P=R.rotateElement,H=bt(),q=H.selectAllElement,W=dt(),G=W.deleteAllElements,U=ft(),X=U.pasteElement,Z=jt(),Y=Z.enterScreening,J=it(),Q=J.updateSlideIndex,K=function(t){e.setActiveElementIdList([]),b.value||S(t),c.value||e.setEditorareaFocus(!0),Yc()},$=function(){c.value&&e.setEditorareaFocus(!1)},ee=yt(),ne=ee.scaleCanvas,oe=Object(te["throttle"])(ne,100,{leading:!0,trailing:!1}),le=Object(te["throttle"])(Q,300,{leading:!0,trailing:!1}),re=function(e){e.preventDefault(),f.value?e.deltaY>0?oe("-"):e.deltaY<0&&oe("+"):e.deltaY>0?le(V.DOWN):e.deltaY<0&&le(V.UP)},ie=function(){e.setGridLinesState(!a.value)},ue=ua(p),de=ue.insertElementFromCreateSelection,se=function(){return[{text:"粘贴",subText:"Ctrl + V",handler:X},{text:"全选",subText:"Ctrl + A",handler:q},{text:"网格线",subText:a.value?"√":"",handler:ie},{text:"重置当前页",handler:G},{divider:!0},{text:"从当前页演示",subText:"Ctrl+F",handler:Y}]};return Object(y["provide"])(vo,i),{elementList:h,activeElementIdList:n,handleElementId:l,activeGroupElementId:o,canvasRef:x,viewportRef:p,viewportStyles:k,canvasScale:i,mouseSelection:w,mouseSelectionVisible:N,mouseSelectionQuadrant:I,creatingElement:r,alignmentLines:m,linkDialogVisible:v,openLinkDialog:O,handleClickBlankArea:K,removeEditorAreaFocus:$,insertElementFromCreateSelection:de,selectElement:D,rotateElement:P,scaleElement:A,dragLineElement:M,scaleMultiElement:F,handleMousewheelCanvas:re,contextmenus:se}}});n("c83b");const Ms=Gn()(Ts,[["render",Zc],["__scopeId","data-v-fe9bcf9c"]]);var _s=Ms,Ds={class:"canvas-tool"},zs={class:"left-handler"},As={class:"add-element-handler"},Fs={class:"right-handler"},Rs={class:"text"};function Ps(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconBack"),r=Object(y["resolveComponent"])("Tooltip"),i=Object(y["resolveComponent"])("IconNext"),u=Object(y["resolveComponent"])("IconFontSize"),d=Object(y["resolveComponent"])("IconPicture"),s=Object(y["resolveComponent"])("FileInput"),f=Object(y["resolveComponent"])("ShapePool"),b=Object(y["resolveComponent"])("IconGraphicDesign"),p=Object(y["resolveComponent"])("Popover"),m=Object(y["resolveComponent"])("LinePool"),v=Object(y["resolveComponent"])("IconConnection"),O=Object(y["resolveComponent"])("ChartPool"),h=Object(y["resolveComponent"])("IconChartProportion"),j=Object(y["resolveComponent"])("TableGenerator"),g=Object(y["resolveComponent"])("IconInsertTable"),x=Object(y["resolveComponent"])("IconFormula"),C=Object(y["resolveComponent"])("MediaInput"),k=Object(y["resolveComponent"])("IconVideoTwo"),E=Object(y["resolveComponent"])("IconMinus"),w=Object(y["resolveComponent"])("IconPlus"),N=Object(y["resolveComponent"])("IconFullScreen"),I=Object(y["resolveComponent"])("LaTeXEditor"),V=Object(y["resolveComponent"])("Modal");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ds,[Object(y["createElementVNode"])("div",zs,[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"撤销"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{class:Object(y["normalizeClass"])(["handler-item",{disable:!e.canUndo}]),onClick:t[0]||(t[0]=function(t){return e.undo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"重做"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{class:Object(y["normalizeClass"])(["handler-item",{disable:!e.canRedo}]),onClick:t[1]||(t[1]=function(t){return e.redo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"])]),Object(y["createElementVNode"])("div",As,[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入文字"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{class:"handler-item",onClick:t[2]||(t[2]=function(t){return e.drawText()})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(s,{onChange:t[3]||(t[3]=function(t){return e.insertImageElement(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图片"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(p,{trigger:"click",visible:e.shapePoolVisible,"onUpdate:visible":t[5]||(t[5]=function(t){return e.shapePoolVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{onSelect:t[4]||(t[4]=function(t){return e.drawShape(t)})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入形状"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.linePoolVisible,"onUpdate:visible":t[7]||(t[7]=function(t){return e.linePoolVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{onSelect:t[6]||(t[6]=function(t){return e.drawLine(t)})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入线条"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.chartPoolVisible,"onUpdate:visible":t[9]||(t[9]=function(t){return e.chartPoolVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{onSelect:t[8]||(t[8]=function(t){e.createChartElement(t),e.chartPoolVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图表"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(h,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.tableGeneratorVisible,"onUpdate:visible":t[12]||(t[12]=function(t){return e.tableGeneratorVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j,{onClose:t[10]||(t[10]=function(t){return e.tableGeneratorVisible=!1}),onInsert:t[11]||(t[11]=function(t){var n=t.row,o=t.col;e.createTableElement(n,o),e.tableGeneratorVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入表格"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入公式"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(x,{class:"handler-item",onClick:t[13]||(t[13]=function(t){return e.latexEditorVisible=!0})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.mediaInputVisible,"onUpdate:visible":t[17]||(t[17]=function(t){return e.mediaInputVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C,{onClose:t[14]||(t[14]=function(t){return e.mediaInputVisible=!1}),onInsertVideo:t[15]||(t[15]=function(t){e.createVideoElement(t),e.mediaInputVisible=!1}),onInsertAudio:t[16]||(t[16]=function(t){e.createAudioElement(t),e.mediaInputVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入音视频"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"])]),Object(y["createElementVNode"])("div",Fs,[Object(y["createVNode"])(E,{class:"handler-item viewport-size",onClick:t[18]||(t[18]=function(t){return e.scaleCanvas("-")})}),Object(y["createElementVNode"])("span",Rs,Object(y["toDisplayString"])(e.canvasScalePercentage),1),Object(y["createVNode"])(w,{class:"handler-item viewport-size",onClick:t[19]||(t[19]=function(t){return e.scaleCanvas("+")})}),Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"适配屏幕"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{class:"handler-item viewport-size-adaptation",onClick:t[20]||(t[20]=function(t){return e.setCanvasPercentage(90)})})]})),_:1},8,["mouseEnterDelay"])]),Object(y["createVNode"])(V,{visible:e.latexEditorVisible,"onUpdate:visible":t[23]||(t[23]=function(t){return e.latexEditorVisible=t}),footer:null,centered:"",width:880,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(I,{onClose:t[21]||(t[21]=function(t){return e.latexEditorVisible=!1}),onUpdate:t[22]||(t[22]=function(t){e.createLatexElement(t),e.latexEditorVisible=!1})})]})),_:1},8,["visible"])])}var Hs={class:"shape-pool"},qs={class:"category-name"},Ws={class:"shape-list"},Gs=["onClick"],Us={overflow:"visible",width:"18",height:"18"},Xs=["transform"],Zs=["d"];function Ys(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Hs,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.shapeList,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"category",key:t.type},[Object(y["createElementVNode"])("div",qs,Object(y["toDisplayString"])(t.type),1),Object(y["createElementVNode"])("div",Ws,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t.children,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"shape-item",key:n},[Object(y["createElementVNode"])("div",{class:"shape-content",onClick:function(n){return e.selectShape(t)}},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",Us,[Object(y["createElementVNode"])("g",{transform:"scale(".concat(18/t.viewBox[0],", ").concat(18/t.viewBox[1],") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(y["createElementVNode"])("path",{class:"shape-path","vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8",fill:"transparent",stroke:"#999","stroke-width":"2",d:t.path},null,8,Zs)],8,Xs)]))],8,Gs)])})),128))])])})),128))])}var Js=Object(y["defineComponent"])({name:"shape-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=lt,l=function(e){n("select",e)};return{shapeList:o,selectShape:l}}});n("a568");const Qs=Gn()(Js,[["render",Ys],["__scopeId","data-v-7fdb328c"]]);var Ks=Qs,$s={class:"line-pool"},ef={class:"category-name"},tf={class:"line-list"},nf=["onClick"],of={overflow:"visible",width:"20",height:"20"},lf=["d","stroke-dasharray","marker-start","marker-end"];function cf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("LinePointMarker");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$s,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.lineList,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"category",key:t.type},[Object(y["createElementVNode"])("div",ef,Object(y["toDisplayString"])(t.type),1),Object(y["createElementVNode"])("div",tf,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t.children,(function(t,o){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"line-item",key:o},[Object(y["createElementVNode"])("div",{class:"line-content",onClick:function(n){return e.selectLine(t)}},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",of,[Object(y["createElementVNode"])("defs",null,[t.points[0]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,class:"line-marker",id:"preset-line-".concat(n,"-").concat(o),position:"start",type:t.points[0],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(y["createCommentVNode"])("",!0),t.points[1]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1,class:"line-marker",id:"preset-line-".concat(n,"-").concat(o),position:"end",type:t.points[1],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(y["createCommentVNode"])("",!0)]),Object(y["createElementVNode"])("path",{class:"line-path",d:t.path,stroke:"currentColor",fill:"none","stroke-width":"2","stroke-dasharray":"solid"===t.style?"0, 0":"4, 1","marker-start":t.points[0]?"url(#".concat("preset-line-".concat(n,"-").concat(o),"-",t.points[0],"-start)"):"","marker-end":t.points[1]?"url(#".concat("preset-line-".concat(n,"-").concat(o),"-",t.points[1],"-end)"):""},null,8,lf)]))],8,nf)])})),128))])])})),128))])}var af=[{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},{path:"M 0 0 C 20 0 0 20 20 20",style:"solid",points:["","arrow"],isCubic:!0}]}],rf=Object(y["defineComponent"])({name:"line-pool",emits:["select"],components:{LinePointMarker:Hl},setup:function(e,t){var n=t.emit,o=af,l=function(e){n("select",e)};return{lineList:o,selectLine:l}}});n("fc12");const uf=Gn()(rf,[["render",cf],["__scopeId","data-v-7fa1d412"]]);var df=uf,sf={class:"chart-pool"},ff=["onClick"];function bf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconChartLine"),r=Object(y["resolveComponent"])("IconChartHistogram"),i=Object(y["resolveComponent"])("IconChartPie"),u=Object(y["resolveComponent"])("IconChartHistogramOne"),d=Object(y["resolveComponent"])("IconChartLineArea"),s=Object(y["resolveComponent"])("IconChartRing"),f=Object(y["resolveComponent"])("IconChartScatter");return Object(y["openBlock"])(),Object(y["createElementBlock"])("ul",sf,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.chartList,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("li",{class:"chart-item",key:n},[Object(y["createElementVNode"])("div",{class:"chart-content",onClick:function(n){return e.selectChart(t)}},["line"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,size:"24"})):"bar"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,size:"24"})):"pie"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:2,size:"24"})):"horizontalBar"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:3,size:"24"})):"area"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:4,size:"24"})):"ring"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:5,size:"24"})):"scatter"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(f,{key:6,size:"24"})):Object(y["createCommentVNode"])("",!0)],8,ff)])})),128))])}var pf=Object(y["defineComponent"])({name:"chart-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=["bar","horizontalBar","line","area","scatter","pie","ring"],l=function(e){n("select",e)};return{chartList:o,selectChart:l}}});n("d4d8");const mf=Gn()(pf,[["render",bf],["__scopeId","data-v-64ca421e"]]);var vf=mf,Of=function(e){return Object(y["pushScopeId"])("data-v-e325ce98"),e=e(),Object(y["popScopeId"])(),e},hf={class:"table-generator"},jf={class:"title"},yf={class:"lef"},gf=["onMouseenter"],xf={key:1,class:"custom"},Cf={class:"row"},kf=Of((function(){return Object(y["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"行数:",-1)})),Ef={class:"row"},wf=Of((function(){return Object(y["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"列数:",-1)})),Nf={class:"btns"},If=Object(y["createTextVNode"])("取消"),Vf=Object(y["createTextVNode"])("确认");function Sf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("InputNumber"),r=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",hf,[Object(y["createElementVNode"])("div",jf,[Object(y["createElementVNode"])("div",yf,"表格 "+Object(y["toDisplayString"])(e.endCell.length?"".concat(e.endCell[0]," x ").concat(e.endCell[1]):""),1),Object(y["createElementVNode"])("div",{class:"right",onClick:t[0]||(t[0]=function(t){return e.isCustom=!e.isCustom})},Object(y["toDisplayString"])(e.isCustom?"返回":"自定义"),1)]),e.isCustom?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",xf,[Object(y["createElementVNode"])("div",Cf,[kf,Object(y["createVNode"])(a,{min:1,max:20,value:e.customRow,"onUpdate:value":t[3]||(t[3]=function(t){return e.customRow=t}),style:{flex:"3"}},null,8,["value"])]),Object(y["createElementVNode"])("div",Ef,[wf,Object(y["createVNode"])(a,{min:1,max:20,value:e.customCol,"onUpdate:value":t[4]||(t[4]=function(t){return e.customCol=t}),style:{flex:"3"}},null,8,["value"])]),Object(y["createElementVNode"])("div",Nf,[Object(y["createVNode"])(r,{class:"btn",onClick:t[5]||(t[5]=function(t){return e.close()})},{default:Object(y["withCtx"])((function(){return[If]})),_:1}),Object(y["createVNode"])(r,{class:"btn",type:"primary",onClick:t[6]||(t[6]=function(t){return e.insertCustomTable()})},{default:Object(y["withCtx"])((function(){return[Vf]})),_:1})])])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("table",{key:0,onMouseleave:t[1]||(t[1]=function(t){return e.endCell=[]}),onClick:t[2]||(t[2]=function(t){return e.handleClickTable()})},[Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(10,(function(t){return Object(y["createElementVNode"])("tr",{key:t},[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(10,(function(n){return Object(y["createElementVNode"])("td",{onMouseenter:function(o){return e.endCell=[t,n]},key:n},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["cell",{active:e.endCell.length&&t<=e.endCell[0]&&n<=e.endCell[1]}])},null,2)],40,gf)})),64))])})),64))])],32))])}var Bf=Object(y["defineComponent"])({name:"table-generator",emits:["insert","close"],setup:function(e,t){var n=t.emit,o=Object(y["ref"])([]),l=Object(y["ref"])(3),c=Object(y["ref"])(3),a=Object(y["ref"])(!1),r=function(){if(o.value.length){var e=Object(He["a"])(o.value,2),t=e[0],l=e[1];n("insert",{row:t,col:l})}},i=function(){return l.value<1||l.value>20||c.value<1||c.value>20?Se["a"].warning("行数/列数必须在0~20之间!"):(n("insert",{row:l.value,col:c.value}),void(a.value=!1))},u=function(){n("close"),a.value=!1};return{endCell:o,customRow:l,customCol:c,handleClickTable:r,insertCustomTable:i,isCustom:a,close:u}}});n("5a68");const Lf=Gn()(Bf,[["render",Sf],["__scopeId","data-v-e325ce98"]]);var Tf=Lf,Mf={class:"media-input"},_f={class:"tabs"},Df=["onClick"],zf={class:"btns"},Af=Object(y["createTextVNode"])("取消"),Ff=Object(y["createTextVNode"])("确认"),Rf={class:"btns"},Pf=Object(y["createTextVNode"])("取消"),Hf=Object(y["createTextVNode"])("确认");function qf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Input"),r=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Mf,[Object(y["createElementVNode"])("div",_f,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tabs,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["tab",{active:e.type===t.key}]),key:t.key,onClick:function(n){return e.type=t.key}},Object(y["toDisplayString"])(t.label),11,Df)})),128))]),"video"===e.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createVNode"])(a,{value:e.videoSrc,"onUpdate:value":t[0]||(t[0]=function(t){return e.videoSrc=t}),placeholder:"请输入视频地址,e.g. https://xxx.mp4"},null,8,["value"]),Object(y["createElementVNode"])("div",zf,[Object(y["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(y["withCtx"])((function(){return[Af]})),_:1}),Object(y["createVNode"])(r,{type:"primary",onClick:t[2]||(t[2]=function(t){return e.insertVideo()})},{default:Object(y["withCtx"])((function(){return[Ff]})),_:1})])],64)):Object(y["createCommentVNode"])("",!0),"audio"===e.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:1},[Object(y["createVNode"])(a,{value:e.audioSrc,"onUpdate:value":t[3]||(t[3]=function(t){return e.audioSrc=t}),placeholder:"请输入音频地址,e.g. https://xxx.mp3"},null,8,["value"]),Object(y["createElementVNode"])("div",Rf,[Object(y["createVNode"])(r,{onClick:t[4]||(t[4]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(y["withCtx"])((function(){return[Pf]})),_:1}),Object(y["createVNode"])(r,{type:"primary",onClick:t[5]||(t[5]=function(t){return e.insertAudio()})},{default:Object(y["withCtx"])((function(){return[Hf]})),_:1})])],64)):Object(y["createCommentVNode"])("",!0)])}var Wf=Object(y["defineComponent"])({name:"media-input",emits:["insertVideo","insertAudio","close"],setup:function(e,t){var n=t.emit,o=Object(y["ref"])("video"),l=Object(y["ref"])("https://mazwai.com/videvo_files/video/free/2019-01/small_watermarked/181004_04_Dolphins-Whale_06_preview.webm"),c=Object(y["ref"])("https://freesound.org/data/previews/614/614107_11861866-lq.mp3"),a=[{key:"video",label:"视频"},{key:"audio",label:"音频"}],r=function(){if(!l.value)return Se["a"].error("请先输入正确的视频地址");n("insertVideo",l.value)},i=function(){if(!c.value)return Se["a"].error("请先输入正确的音频地址");n("insertAudio",c.value)},u=function(){return n("close")};return{type:o,videoSrc:l,audioSrc:c,tabs:a,insertVideo:r,insertAudio:i,close:u}}});n("81ab");const Gf=Gn()(Wf,[["render",qf],["__scopeId","data-v-ec37f828"]]);var Uf=Gf,Xf={class:"latex-editor"},Zf={class:"container"},Yf={class:"left"},Jf={class:"input-area"},Qf={class:"preview"},Kf={key:0,class:"placeholder"},$f={key:1,class:"preview-content"},eb={class:"right"},tb={class:"tabs"},nb=["onClick"],ob={class:"content"},lb={key:0,class:"symbol"},cb={class:"symbol-tabs"},ab=["onClick"],rb={class:"symbol-pool"},ib=["onClick"],ub={key:1,class:"formula"},db={class:"formula-title"},sb=["onClick"],fb={class:"footer"},bb=Object(y["createTextVNode"])("取消"),pb=Object(y["createTextVNode"])("确定");function mb(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("TextArea"),r=Object(y["resolveComponent"])("FormulaContent"),i=Object(y["resolveComponent"])("SymbolContent"),u=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Xf,[Object(y["createElementVNode"])("div",Zf,[Object(y["createElementVNode"])("div",Yf,[Object(y["createElementVNode"])("div",Jf,[Object(y["createVNode"])(a,{value:e.latex,"onUpdate:value":t[0]||(t[0]=function(t){return e.latex=t}),placeholder:"输入 LaTeX 公式",ref:"textAreaRef"},null,8,["value"])]),Object(y["createElementVNode"])("div",Qf,[e.latex?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$f,[Object(y["createVNode"])(r,{width:518,height:138,latex:e.latex},null,8,["latex"])])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Kf,"公式预览"))])]),Object(y["createElementVNode"])("div",eb,[Object(y["createElementVNode"])("div",tb,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tabs,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["tab",{active:t.value===e.toolbarState}]),key:t.value,onClick:function(n){return e.toolbarState=t.value}},Object(y["toDisplayString"])(t.label),11,nb)})),128))]),Object(y["createElementVNode"])("div",ob,["symbol"===e.toolbarState?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",lb,[Object(y["createElementVNode"])("div",cb,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.symbolList,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["symbol-tab",{active:e.selectedSymbolKey===t.type}]),key:t.type,onClick:function(n){return e.selectedSymbolKey=t.type}},Object(y["toDisplayString"])(t.label),11,ab)})),128))]),Object(y["createElementVNode"])("div",rb,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.symbolPool,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"symbol-item",key:t.latex,onClick:function(n){return e.insertSymbol(t.latex)}},[Object(y["createVNode"])(i,{latex:t.latex},null,8,["latex"])],8,ib)})),128))])])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ub,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.formulaList,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"formula-item",key:t.label},[Object(y["createElementVNode"])("div",db,Object(y["toDisplayString"])(t.label),1),Object(y["createElementVNode"])("div",{class:"formula-item-content",onClick:function(n){return e.latex=t.latex}},[Object(y["createVNode"])(r,{width:236,height:60,latex:t.latex},null,8,["latex"])],8,sb)])})),128))]))])])]),Object(y["createElementVNode"])("div",fb,[Object(y["createVNode"])(u,{class:"btn",onClick:t[1]||(t[1]=function(t){return e.close()})},{default:Object(y["withCtx"])((function(){return[bb]})),_:1}),Object(y["createVNode"])(u,{class:"btn",type:"primary",onClick:t[2]||(t[2]=function(t){return e.update()})},{default:Object(y["withCtx"])((function(){return[pb]})),_:1})])])}var vb=n("e5ca");vb["a"].SUB_SUP_SCALE=.5;var Ob=[{label:"高斯公式",latex:"\\int\\int\\int _ { \\Omega } \\left( \\frac { \\partial {P} } { \\partial {x} } + \\frac { \\partial {Q} } { \\partial {y} } + \\frac { \\partial {R} }{ \\partial {z} } \\right) \\mathrm { d } V = \\oint _ { \\partial \\Omega } ( P \\cos \\alpha + Q \\cos \\beta + R \\cos \\gamma ) \\mathrm{ d} S"},{label:"傅里叶级数",latex:"f(x) = \\frac {a_0} 2 + \\sum_{n = 1}^\\infty {({a_n}\\cos {nx} + {b_n}\\sin {nx})}"},{label:"泰勒展开式",latex:"e ^ { x } = 1 + \\frac { x } { 1 ! } + \\frac { x ^ { 2 } } { 2 ! } + \\frac { x ^ { 3 } } { 3 ! } + ... , \\quad - \\infty < x < \\infty"},{label:"定积分",latex:"\\lim_ { n \\rightarrow + \\infty } \\sum _ { i = 1 } ^ { n } f \\left[ a + \\frac { i } { n } ( b - a ) \\right] \\frac { b - a } { n } = \\int _ { a } ^ { b } f ( x ) dx"},{label:"三角恒等式1",latex:"\\sin \\alpha \\pm \\sin \\beta = 2 \\sin \\frac { 1 } { 2 } ( \\alpha \\pm \\beta ) \\cos \\frac { 1 } { 2 } ( \\alpha \\mp \\beta )"},{label:"三角恒等式2",latex:"\\cos \\alpha + \\cos \\beta = 2 \\cos \\frac { 1 } { 2 } ( \\alpha + \\beta ) \\cos \\frac { 1 } { 2 } ( \\alpha - \\beta )"},{label:"和的展开式",latex:"( 1 + x ) ^ { n } = 1 + \\frac { n x } { 1 ! } + \\frac { n ( n - 1 ) x ^ { 2 } } { 2 ! } + ..."},{label:"欧拉公式",latex:" e^{ix} = \\cos {x} + i\\sin {x}"},{label:"贝努利方程",latex:"\\frac {dy} {dx} + P(x)y = Q(x) y^n ({n} \\not= {0,1})"},{label:"全微分方程",latex:"du(x,y) = P(x,y)dx + Q(x,y)dy = 0"},{label:"非齐次方程",latex:"y = (\\int Q(x) e^{\\int {P(x)dx}}dx + C)e^{-\\int {P(x)dx}}"},{label:"柯西中值定理",latex:"\\frac{{f(b) - f(a)}}{{F(b) - F(a)}} = \\frac{{f'(\\xi )}}{{F'(\\xi )}}"},{label:"拉格朗日中值定理",latex:"f(b) - f(a) = f'(\\xi )(b - a)"},{label:"导数公式",latex:"(\\arcsin x)' = \\frac{1}{{\\sqrt {1 - x^2} }}"},{label:"三角函数积分",latex:"\\int {tgxdx = - \\ln \\left| {\\cos x} \\right| + C}"},{label:"二次曲面",latex:"\\frac{{{x^2}}}{{{a^2}}} + \\frac{{{y^2}}}{{{b^2}}} - \\frac{{{z^2}}}{{{c^2}}} = 1"},{label:"二阶微分",latex:"\\frac {{d^2}y} {dx^2} + P(x) \\frac {dy} {dx} + Q(x)y = f(x)"},{label:"方向导数",latex:"\\frac{{\\partial f}}{{\\partial l}} = \\frac{{\\partial f}}{{\\partial x}}\\cos \\phi + \\frac{{\\partial f}}{{\\partial y}}\\sin \\phi"}],hb=[{type:"operators",label:"数学",children:[{latex:"\\cdot"},{latex:"\\pm"},{latex:"\\mp"},{latex:"+"},{latex:"-"},{latex:"\\times"},{latex:"\\div"},{latex:"<"},{latex:">"},{latex:"="},{latex:"\\neq\\ne"},{latex:"\\leqq"},{latex:"\\geqq"},{latex:"\\leq"},{latex:"\\geq"},{latex:"\\propto"},{latex:"\\sim"},{latex:"\\equiv"},{latex:"\\dagger"},{latex:"\\ddagger"},{latex:"\\ell"},{latex:"\\#"},{latex:"\\$"},{latex:"\\&"},{latex:"\\%"},{latex:"\\langle\\rangle"},{latex:"()"},{latex:"[]"},{latex:"\\{\\}"},{latex:"||"},{latex:"\\|"},{latex:"\\exists"},{latex:"\\in"},{latex:"\\subset"},{latex:"\\supset"},{latex:"\\cup"},{latex:"\\cap"},{latex:"\\infty"},{latex:"\\partial"},{latex:"\\nabla"},{latex:"\\aleph"},{latex:"\\wp"},{latex:"\\therefore"},{latex:"\\mid"},{latex:"\\sum"},{latex:"\\prod"},{latex:"\\bigoplus"},{latex:"\\bigodot"},{latex:"\\int"},{latex:"\\oint"},{latex:"\\oplus"},{latex:"\\odot"},{latex:"\\perp"},{latex:"\\angle"},{latex:"\\triangle"},{latex:"\\Box"},{latex:"\\rightarrow"},{latex:"\\to"},{latex:"\\leftarrow"},{latex:"\\gets"},{latex:"\\circ"},{latex:"\\bigcirc"},{latex:"\\bullet"},{latex:"\\star"},{latex:"\\diamond"},{latex:"\\ast"},{latex:","},{latex:"."},{latex:";"},{latex:"!"}]},{type:"group",label:"组合",children:[{latex:"\\frac{a}{b}"},{latex:"\\frac{dx}{dx}"},{latex:"\\frac{\\partial a}{\\partial b}"},{latex:"\\sqrt{x}"},{latex:"\\sqrt[n]{x}"},{latex:"x^{n}"},{latex:"x_{n}"},{latex:"x_a^b"},{latex:"\\int_{a}^{b}"},{latex:"\\oint_a^b"},{latex:"\\lim_{a \\rightarrow b}"},{latex:"\\prod_a^b"},{latex:"\\sum_a^b"},{latex:"\\left(\\begin{array}a \\\\ b\\end{array}\\right)"},{latex:"\\begin{bmatrix}a & b \\\\ c & d \\end{bmatrix}"},{latex:"\\begin{cases}a & x = 0 \\\\ b & x > 0\\end{cases}"},{latex:"\\hat{a}"},{latex:"\\breve{a}"},{latex:"\\acute{a}"},{latex:"\\grave{a}"},{latex:"\\tilde{a}"},{latex:"\\bar{a}"},{latex:"\\vec{a}"},{latex:"\\underline{a}"},{latex:"\\overline{a}"},{latex:"\\widehat{ab}"},{latex:"\\overleftarrow{ab}"},{latex:"\\overrightarrow{ab}"}]},{type:"verbatim",label:"函数",children:[{latex:"\\log"},{latex:"\\ln"},{latex:"\\exp"},{latex:"\\mod"},{latex:"\\lim"},{latex:"\\sin"},{latex:"\\cos"},{latex:"\\tan"},{latex:"\\csc"},{latex:"\\sec"},{latex:"\\cot"},{latex:"\\sinh"},{latex:"\\cosh"},{latex:"\\tanh"},{latex:"\\csch"},{latex:"\\sech"},{latex:"\\coth"},{latex:"\\arcsin"},{latex:"\\arccos"},{latex:"\\arctan"},{latex:"\\arccsc"},{latex:"\\arcsec"},{latex:"\\arccot"}]},{type:"greek",label:"希腊字母",children:[{latex:"\\alpha"},{latex:"\\beta"},{latex:"\\gamma"},{latex:"\\delta"},{latex:"\\varepsilon"},{latex:"\\zeta"},{latex:"\\eta"},{latex:"\\vartheta"},{latex:"\\iota"},{latex:"\\kappa"},{latex:"\\lambda"},{latex:"\\mu"},{latex:"\\nu"},{latex:"\\xi"},{latex:"\\omicron"},{latex:"\\pi"},{latex:"\\rho"},{latex:"\\sigma"},{latex:"\\tau"},{latex:"\\upsilon"},{latex:"\\varphi"},{latex:"\\chi"},{latex:"\\psi"},{latex:"\\omega"},{latex:"\\epsilon"},{latex:"\\theta"},{latex:"\\phi"},{latex:"\\varsigma"},{latex:"\\Alpha"},{latex:"\\Beta"},{latex:"\\Gamma"},{latex:"\\Delta"},{latex:"\\Epsilon"},{latex:"\\Zeta"},{latex:"\\Eta"},{latex:"\\Theta"},{latex:"\\Iota"},{latex:"\\Kappa"},{latex:"\\Lambda"},{latex:"\\Mu"},{latex:"\\Nu"},{latex:"\\Xi"},{latex:"\\Omicron"},{latex:"\\Pi"},{latex:"\\Rho"},{latex:"\\Sigma"},{latex:"\\Tau"},{latex:"\\Upsilon"},{latex:"\\Phi"},{latex:"\\Chi"},{latex:"\\Psi"},{latex:"\\Omega"}]}],jb=["width","height"],yb=["transform"],gb=["d"];function xb(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{class:"formula-content",overflow:"visible",width:e.box.w+32,height:e.box.h+32,stroke:"#000","stroke-width":"1",fill:"none","stroke-linecap":"round","stroke-linejoin":"round"},[Object(y["createElementVNode"])("g",{transform:"scale(".concat(e.scale,", ").concat(e.scale,") translate(0,0) matrix(1,0,0,1,0,0)"),"transform-origin":"0 50%"},[Object(y["createElementVNode"])("path",{d:e.pathd},null,8,gb)],8,yb)],8,jb)}var Cb=Object(y["defineComponent"])({name:"formula-content",props:{latex:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0}},setup:function(e){var t=Object(y["ref"])({x:0,y:0,w:0,h:0}),n=Object(y["ref"])("");Object(y["watch"])((function(){return e.latex}),(function(){var o=new vb["b"](e.latex);n.value=o.pathd({}),t.value=o.box({})}),{immediate:!0});var o=Object(y["computed"])((function(){var n=t.value.w+32,o=t.value.h+32;return n>e.width||o>e.height?n/o>e.width/e.height?e.width/n:e.height/o:1}));return{box:t,pathd:n,scale:o}}});n("edc2");const kb=Gn()(Cb,[["render",xb],["__scopeId","data-v-cf0ca630"]]);var Eb=kb,wb=["innerHTML"];function Nb(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"symbol-content",innerHTML:e.svg},null,8,wb)}var Ib=Object(y["defineComponent"])({name:"symbol-content",props:{latex:{type:String,required:!0}},setup:function(e){var t=Object(y["computed"])((function(){var t=new vb["b"](e.latex);return t.svg({SCALE_X:10,SCALE_Y:10})}));return{svg:t}}});const Vb=Gn()(Ib,[["render",Nb]]);var Sb=Vb,Bb=[{label:"常用符号",value:"symbol"},{label:"预置公式",value:"formula"}],Lb=Object(y["defineComponent"])({name:"latex-editor",emits:["update","close"],components:{FormulaContent:Eb,SymbolContent:Sb},props:{value:{type:String,default:""}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(""),l=Object(y["ref"])("symbol"),c=Object(y["ref"])(),a=Object(y["ref"])(hb[0].type),r=Object(y["computed"])((function(){var e=hb.find((function(e){return e.type===a.value}));return(null===e||void 0===e?void 0:e.children)||[]}));Object(y["onMounted"])((function(){e.value&&(o.value=e.value)}));var i=function(){if(o.value){var e=new vb["b"](o.value),t=e.pathd({}),l=e.box({});n("update",{latex:o.value,path:t,w:l.w+32,h:l.h+32})}},u=function(){return n("close")},d=function(e){c.value&&(c.value.focus(),document.execCommand("insertText",!1,e))};return{tabs:Bb,latex:o,toolbarState:l,selectedSymbolKey:a,formulaList:Ob,symbolList:hb,symbolPool:r,textAreaRef:c,update:i,close:u,insertSymbol:d}}});n("b824");const Tb=Gn()(Lb,[["render",mb],["__scopeId","data-v-129e1afa"]]);var Mb=Tb,_b=Object(y["defineComponent"])({name:"canvas-tool",components:{ShapePool:Ks,LinePool:df,ChartPool:vf,TableGenerator:Tf,MediaInput:Uf,LaTeXEditor:Mb},setup:function(){var e=ae(),t=Object(g["c"])(e),n=t.canvasScale,o=Object(g["c"])(ve()),l=o.canUndo,c=o.canRedo,a=Object(y["computed"])((function(){return parseInt(100*n.value+"")+"%"})),r=yt(),i=r.scaleCanvas,u=r.setCanvasPercentage,d=$e(),s=d.redo,f=d.undo,b=at(),p=b.createImageElement,m=b.createChartElement,v=b.createTableElement,O=b.createLatexElement,h=b.createVideoElement,j=b.createAudioElement,x=function(e){var t=e[0];t&&tt(t).then((function(e){return p(e)}))},C=Object(y["ref"])(!1),k=Object(y["ref"])(!1),E=Object(y["ref"])(!1),w=Object(y["ref"])(!1),N=Object(y["ref"])(!1),I=Object(y["ref"])(!1),V=function(){e.setCreatingElement({type:"text"})},S=function(t){e.setCreatingElement({type:"shape",data:t}),C.value=!1},B=function(t){e.setCreatingElement({type:"line",data:t}),k.value=!1};return{scaleCanvas:i,setCanvasPercentage:u,canvasScalePercentage:a,canUndo:l,canRedo:c,redo:s,undo:f,insertImageElement:x,shapePoolVisible:C,linePoolVisible:k,chartPoolVisible:E,tableGeneratorVisible:w,mediaInputVisible:N,latexEditorVisible:I,drawText:V,drawShape:S,drawLine:B,createChartElement:m,createTableElement:v,createLatexElement:O,createVideoElement:h,createAudioElement:j}}});n("044f");const Db=Gn()(_b,[["render",Ps],["__scopeId","data-v-4ae7c9aa"]]);var zb=Db,Ab={class:"add-slide"},Fb=Object(y["createTextVNode"])("添加幻灯片"),Rb={class:"select-btn"},Pb=["onMousedown"];function Hb(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPlus"),r=Object(y["resolveComponent"])("LayoutPool"),i=Object(y["resolveComponent"])("IconDown"),u=Object(y["resolveComponent"])("Popover"),d=Object(y["resolveComponent"])("ThumbnailSlide"),s=Object(y["resolveComponent"])("Draggable"),f=Object(y["resolveDirective"])("contextmenu"),b=Object(y["resolveDirective"])("click-outside");return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"thumbnails",onMousedown:t[3]||(t[3]=function(){return e.setThumbnailsFocus(!0)})},[Object(y["createElementVNode"])("div",Ab,[Object(y["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.createSlide()})},[Object(y["createVNode"])(a,{class:"icon"}),Fb]),Object(y["createVNode"])(u,{trigger:"click",placement:"bottomLeft",visible:e.presetLayoutPopoverVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.presetLayoutPopoverVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onSelect:t[1]||(t[1]=function(t){e.createSlideByTemplate(t),e.presetLayoutPopoverVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Rb,[Object(y["createVNode"])(i)])]})),_:1},8,["visible"])]),Object(y["createVNode"])(s,{class:"thumbnail-list",modelValue:e.slides,animation:300,scroll:!0,scrollSensitivity:50,setData:null,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(y["withCtx"])((function(t){var n=t.element,o=t.index;return[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["thumbnail-item",{active:e.slideIndex===o,selected:e.selectedSlidesIndex.includes(o)}]),onMousedown:function(t){return e.handleClickSlideThumbnail(t,o)}},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["label",{"offset-left":o>=99}])},Object(y["toDisplayString"])(e.fillDigit(o+1,2)),3),Object(y["createVNode"])(d,{class:"thumbnail",slide:n,size:120,visible:oo.value?n.value=setTimeout((function(){o.value=o.value+20,e()}),600):o.value=9999};return Object(y["onMounted"])(l),Object(y["onUnmounted"])((function(){n.value&&clearTimeout(n.value)})),{slidesLoadLimit:o}},Wb=n("b76a"),Gb=n.n(Wb),Ub={class:"layout-pool"},Xb=["onClick"];function Zb(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ThumbnailSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ub,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.layouts,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"layout-item",key:t.id,onClick:function(n){return e.selectSlideTemplate(t)}},[Object(y["createVNode"])(a,{class:"thumbnail",slide:t,size:180},null,8,["slide"])],8,Xb)})),128))])}var Yb=Object(y["defineComponent"])({name:"layout-pool",emits:["select"],components:{ThumbnailSlide:Rc},setup:function(e,t){var n=t.emit,o=Object(g["c"])(ce()),l=o.layouts,c=function(e){n("select",e)};return{layouts:l,selectSlideTemplate:c}}});n("e7b8");const Jb=Gn()(Yb,[["render",Zb],["__scopeId","data-v-741b366e"]]);var Qb=Jb,Kb=Object(y["defineComponent"])({name:"thumbnails",components:{Draggable:Gb.a,ThumbnailSlide:Rc,LayoutPool:Qb},setup:function(){var e=ae(),t=ce(),n=Oe(),o=Object(g["c"])(e),l=o.selectedSlidesIndex,c=o.thumbnailsFocus,a=Object(g["c"])(t),r=a.slides,i=a.slideIndex,u=Object(g["c"])(n),d=u.ctrlKeyState,s=u.shiftKeyState,f=qb(),b=f.slidesLoadLimit,p=Object(y["computed"])((function(){return[].concat(Object(K["a"])(l.value),[i.value])})),m=Object(y["ref"])(!1),v=it(),O=v.copySlide,h=v.pasteSlide,j=v.createSlide,x=v.createSlideByTemplate,C=v.copyAndPasteSlide,k=v.deleteSlide,E=v.cutSlide,w=v.selectAllSlide,N=function(n){e.setActiveElementIdList([]),i.value!==n&&t.updateSlideIndex(n)},I=function(t,n){var o=p.value.length>1;if(!o||!p.value.includes(n)||0===t.button)if(d.value)if(i.value===n){if(!o)return;var l=p.value.filter((function(e){return e!==n}));e.updateSelectedSlidesIndex(l),N(p.value[0])}else if(p.value.includes(n)){var c=p.value.filter((function(e){return e!==n}));e.updateSelectedSlidesIndex(c)}else{var a=[].concat(Object(K["a"])(p.value),[n]);e.updateSelectedSlidesIndex(a),N(n)}else if(s.value){if(i.value===n&&!o)return;var r=Math.min.apply(Math,Object(K["a"])(p.value)),u=n;n1&&void 0!==arguments[1]?arguments[1]:0,c=o.value,a=s(),r=a.originClipRange,i=a.originWidth,f=a.originHeight,b=a.originLeft,p=a.originTop;if(n){var m,v=f/i,O=0,h=100;if(v>n){var j=(1-n/v)/2*100;m=[[O,j],[h,h-j]]}else{var y=(1-v/n)/2*100;m=[[y,O],[h-y,h]]}t.updateElement({id:l.value,props:{clip:Object(L["a"])(Object(L["a"])({},c.clip),{},{shape:e,range:m}),left:b+i*(m[0][0]/100),top:p+f*(m[0][1]/100),width:i*(m[1][0]-m[0][0])/100,height:f*(m[1][1]-m[0][1])/100}})}else t.updateElement({id:l.value,props:{clip:Object(L["a"])(Object(L["a"])({},c.clip),{},{shape:e,range:r})}});d(),u()},b=function(e){var n=e[0];n&&(tt(n).then((function(e){var n={src:e};t.updateElement({id:l.value,props:n})})),u())},p=function(){var e=o.value;if(e.clip){var n=s(),c=n.originWidth,a=n.originHeight,r=n.originLeft,i=n.originTop;t.updateElement({id:l.value,props:{left:r,top:i,width:c,height:a}})}t.removeElementProps({id:l.value,propName:["clip","outline","flip","shadow","filters"]}),u()},m=function(){var e=o.value,n=Object(L["a"])(Object(L["a"])({},a.value.background),{},{type:"image",image:e.src,imageSize:"cover"});t.updateSlide({background:n}),u()};return{clipPanelVisible:r,shapeClipPathOptions:Jm,ratioClipOptions:Qm,handleElement:o,clipImage:d,presetImageClip:f,replaceImage:b,resetImage:p,setBackgroundImage:m}}});n("56bc");const $m=Gn()(Km,[["render",Sm],["__scopeId","data-v-64e5a614"]]);var ev=$m,tv=function(e){return Object(y["pushScopeId"])("data-v-0e201fca"),e=e(),Object(y["popScopeId"])(),e},nv={class:"shape-style-panel"},ov={class:"row"},lv=Object(y["createTextVNode"])("纯色填充"),cv=Object(y["createTextVNode"])("渐变填充"),av=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)})),rv=Object(y["createTextVNode"])("线性渐变"),iv=Object(y["createTextVNode"])("径向渐变"),uv={class:"row"},dv=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1)})),sv={class:"row"},fv=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1)})),bv={key:0,class:"row"},pv=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1)}));function mv(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("SelectOption"),r=Object(y["resolveComponent"])("Select"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("Slider"),f=Object(y["resolveComponent"])("ElementFlip"),b=Object(y["resolveComponent"])("Divider"),p=Object(y["resolveComponent"])("IconFontSize"),m=Object(y["resolveComponent"])("SelectOptGroup"),v=Object(y["resolveComponent"])("IconAddText"),O=Object(y["resolveComponent"])("InputGroup"),h=Object(y["resolveComponent"])("IconText"),j=Object(y["resolveComponent"])("Button"),g=Object(y["resolveComponent"])("Tooltip"),x=Object(y["resolveComponent"])("ButtonGroup"),C=Object(y["resolveComponent"])("IconTextBold"),k=Object(y["resolveComponent"])("CheckboxButton"),E=Object(y["resolveComponent"])("IconTextItalic"),w=Object(y["resolveComponent"])("IconTextUnderline"),N=Object(y["resolveComponent"])("IconFormat"),I=Object(y["resolveComponent"])("CheckboxButtonGroup"),V=Object(y["resolveComponent"])("IconAlignTextLeft"),S=Object(y["resolveComponent"])("RadioButton"),B=Object(y["resolveComponent"])("IconAlignTextCenter"),L=Object(y["resolveComponent"])("IconAlignTextRight"),T=Object(y["resolveComponent"])("RadioGroup"),M=Object(y["resolveComponent"])("IconAlignTextTopOne"),_=Object(y["resolveComponent"])("IconAlignTextMiddleOne"),D=Object(y["resolveComponent"])("IconAlignTextBottomOne"),z=Object(y["resolveComponent"])("ElementOutline"),A=Object(y["resolveComponent"])("ElementShadow"),F=Object(y["resolveComponent"])("ElementOpacity");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",nv,[Object(y["createElementVNode"])("div",ov,[Object(y["createVNode"])(r,{style:{flex:"10"},value:e.fillType,onChange:t[0]||(t[0]=function(t){return e.updateFillType(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"fill"},{default:Object(y["withCtx"])((function(){return[lv]})),_:1}),Object(y["createVNode"])(a,{value:"gradient"},{default:Object(y["withCtx"])((function(){return[cv]})),_:1})]})),_:1},8,["value"]),av,"fill"===e.fillType?(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:0,trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.fill,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.fill,style:{flex:"10"}},null,8,["color"])]})),_:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,style:{flex:"10"},value:e.gradient.type,onChange:t[2]||(t[2]=function(t){return e.updateGradient({type:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"linear"},{default:Object(y["withCtx"])((function(){return[rv]})),_:1}),Object(y["createVNode"])(a,{value:"radial"},{default:Object(y["withCtx"])((function(){return[iv]})),_:1})]})),_:1},8,["value"]))]),"gradient"===e.fillType?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",uv,[dv,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.gradient.color[0],"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateGradient({color:[t,e.gradient.color[1]]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.gradient.color[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",sv,[fv,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.gradient.color[1],"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateGradient({color:[e.gradient.color[0],t]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.gradient.color[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.gradient.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",bv,[pv,Object(y["createVNode"])(s,{class:"slider",min:0,max:360,step:15,value:e.gradient.rotate,onChange:t[5]||(t[5]=function(t){return e.updateGradient({rotate:t})})},null,8,["value"])])):Object(y["createCommentVNode"])("",!0)],64)):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(f),Object(y["createVNode"])(b),e.showTextTools?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:1},[Object(y["createVNode"])(O,{compact:"",class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"3"},value:e.richTextAttrs.fontname,onChange:t[6]||(t[6]=function(t){return e.emitRichTextCommand("fontname",t)})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p)]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{label:"系统字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.availableFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",{style:Object(y["normalizeStyle"])({fontFamily:e.value})},Object(y["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(y["createVNode"])(m,{label:"在线字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.webFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(y["createVNode"])(r,{style:{flex:"2"},value:e.richTextAttrs.fontsize,onChange:t[7]||(t[7]=function(t){return e.emitRichTextCommand("fontsize",t)})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v)]})),default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.fontSizeOptions,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e,value:e},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])(Object(y["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(y["createVNode"])(x,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.richTextAttrs.color,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.emitRichTextCommand("color",t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j,{class:"text-color-btn",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(h),Object(y["createElementVNode"])("div",{class:"text-color-block",style:Object(y["normalizeStyle"])({backgroundColor:e.richTextAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(y["createVNode"])(I,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},checked:e.richTextAttrs.bold,onClick:t[9]||(t[9]=function(t){return e.emitRichTextCommand("bold")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},checked:e.richTextAttrs.em,onClick:t[10]||(t[10]=function(t){return e.emitRichTextCommand("em")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(E)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},checked:e.richTextAttrs.underline,onClick:t[11]||(t[11]=function(t){return e.emitRichTextCommand("underline")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(w)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"清除格式"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},onClick:t[12]||(t[12]=function(t){return e.emitRichTextCommand("clear")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(T,{class:"row","button-style":"solid",value:e.richTextAttrs.align,onChange:t[13]||(t[13]=function(t){return e.emitRichTextCommand("align",t.target.value)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"left",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(V)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"center",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(B)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"right",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(L)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(y["createVNode"])(T,{class:"row","button-style":"solid",value:e.textAlign,onChange:t[14]||(t[14]=function(t){return e.updateTextAlign(t.target.value)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顶对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"top",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(M)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"middle",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(_)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"底对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"bottom",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(D)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(y["createVNode"])(b)],64)):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(z),Object(y["createVNode"])(b),Object(y["createVNode"])(A),Object(y["createVNode"])(b),Object(y["createVNode"])(F)])}var vv=B,Ov=Object(y["defineComponent"])({name:"shape-style-panel",components:{ElementOpacity:Vp,ElementOutline:Jp,ElementShadow:bm,ElementFlip:zm,ColorButton:Xp},setup:function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.handleElement,l=n.handleElementId,c=n.editingShapeElementId,a=n.richTextAttrs,r=n.availableFonts,i=Object(y["computed"])((function(){return c.value===l.value})),u=Object(y["ref"])(),d=Object(y["ref"])(),s=Object(y["ref"])("fill"),f=Object(y["ref"])("middle");Object(y["watch"])(o,(function(){var e,t;o.value&&"shape"===o.value.type&&(u.value=o.value.fill||"#000",d.value=o.value.gradient||{type:"linear",rotate:0,color:[u.value,"#fff"]},s.value=o.value.gradient?"gradient":"fill",f.value=(null===(e=o.value)||void 0===e||null===(t=e.text)||void 0===t?void 0:t.align)||"middle")}),{deep:!0,immediate:!0});var b=$e(),p=b.addHistorySnapshot,m=function(e){t.updateElement({id:l.value,props:e}),p()},v=function(e){"fill"===e?(t.removeElementProps({id:l.value,propName:"gradient"}),p()):m({gradient:d.value})},O=function(e){if(d.value){var t=Object(L["a"])(Object(L["a"])({},d.value),e);m({gradient:t})}},h=function(e){m({fill:e})},j=function(e){var t=o.value,n={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"},l=t.text||n;m({text:Object(L["a"])(Object(L["a"])({},l),{},{align:e})})},x=["12px","14px","16px","18px","20px","22px","24px","28px","32px","36px","40px","44px","48px","54px","60px","66px","72px","76px","80px","88px","96px","104px","112px","120px"],C=function(e,t){Cr.emit(za.RICH_TEXT_COMMAND,{command:e,value:t})};return{fill:u,gradient:d,fillType:s,textAlign:f,richTextAttrs:a,availableFonts:r,fontSizeOptions:x,webFonts:vv,showTextTools:i,emitRichTextCommand:C,updateFillType:v,updateFill:h,updateGradient:O,updateTextAlign:j}}});n("7e0a");const hv=Gn()(Ov,[["render",mv],["__scopeId","data-v-0e201fca"]]);var jv=hv,yv=function(e){return Object(y["pushScopeId"])("data-v-cbc4d7fa"),e=e(),Object(y["popScopeId"])(),e},gv={class:"line-style-panel"},xv={class:"row"},Cv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"线条样式:",-1)})),kv=Object(y["createTextVNode"])("实线"),Ev=Object(y["createTextVNode"])("虚线"),wv={class:"row"},Nv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"线条颜色:",-1)})),Iv={class:"row"},Vv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"线条宽度:",-1)})),Sv={class:"row"},Bv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"起点样式:",-1)})),Lv=Object(y["createTextVNode"])("无"),Tv=Object(y["createTextVNode"])("箭头"),Mv=Object(y["createTextVNode"])("圆点"),_v={class:"row"},Dv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"终点样式:",-1)})),zv=Object(y["createTextVNode"])("无"),Av=Object(y["createTextVNode"])("箭头"),Fv=Object(y["createTextVNode"])("圆点");function Rv(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("SelectOption"),r=Object(y["resolveComponent"])("Select"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("InputNumber"),f=Object(y["resolveComponent"])("Divider"),b=Object(y["resolveComponent"])("ElementShadow");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",gv,[Object(y["createElementVNode"])("div",xv,[Cv,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.style,onChange:t[0]||(t[0]=function(t){return e.updateLine({style:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"solid"},{default:Object(y["withCtx"])((function(){return[kv]})),_:1}),Object(y["createVNode"])(a,{value:"dashed"},{default:Object(y["withCtx"])((function(){return[Ev]})),_:1})]})),_:1},8,["value"])]),Object(y["createElementVNode"])("div",wv,[Nv,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateLine({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",Iv,[Vv,Object(y["createVNode"])(s,{value:e.handleElement.width,onChange:t[2]||(t[2]=function(t){return e.updateLine({width:t})}),style:{flex:"3"}},null,8,["value"])]),Object(y["createElementVNode"])("div",Sv,[Bv,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[0],onChange:t[3]||(t[3]=function(t){return e.updateLine({points:[t,e.handleElement.points[1]]})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:""},{default:Object(y["withCtx"])((function(){return[Lv]})),_:1}),Object(y["createVNode"])(a,{value:"arrow"},{default:Object(y["withCtx"])((function(){return[Tv]})),_:1}),Object(y["createVNode"])(a,{value:"dot"},{default:Object(y["withCtx"])((function(){return[Mv]})),_:1})]})),_:1},8,["value"])]),Object(y["createElementVNode"])("div",_v,[Dv,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[1],onChange:t[4]||(t[4]=function(t){return e.updateLine({points:[e.handleElement.points[0],t]})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:""},{default:Object(y["withCtx"])((function(){return[zv]})),_:1}),Object(y["createVNode"])(a,{value:"arrow"},{default:Object(y["withCtx"])((function(){return[Av]})),_:1}),Object(y["createVNode"])(a,{value:"dot"},{default:Object(y["withCtx"])((function(){return[Fv]})),_:1})]})),_:1},8,["value"])]),Object(y["createVNode"])(f),Object(y["createVNode"])(b)])}var Pv=Object(y["defineComponent"])({name:"line-style-panel",components:{ElementShadow:bm,ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=$e(),l=o.addHistorySnapshot,c=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),l())};return{handleElement:n,updateLine:c}}});n("04e6");const Hv=Gn()(Pv,[["render",Rv],["__scopeId","data-v-cbc4d7fa"]]);var qv=Hv,Wv=function(e){return Object(y["pushScopeId"])("data-v-5a3169a0"),e=e(),Object(y["popScopeId"])(),e},Gv={class:"chart-style-panel"},Uv=Object(y["createTextVNode"])(" 编辑图表数据 "),Xv={class:"row"},Zv=Object(y["createTextVNode"])("面积图样式"),Yv=Object(y["createTextVNode"])("散点图样式"),Jv={class:"row"},Qv=Object(y["createTextVNode"])("使用平滑曲线"),Kv={key:1,class:"row"},$v=Object(y["createTextVNode"])("条形图样式"),eO=Object(y["createTextVNode"])("堆叠样式"),tO={key:2,class:"row"},nO=Object(y["createTextVNode"])("环形图样式"),oO={class:"row"},lO=Wv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"图例:",-1)})),cO=Object(y["createTextVNode"])("不显示"),aO=Object(y["createTextVNode"])("显示在上方"),rO=Object(y["createTextVNode"])("显示在下方"),iO={class:"row"},uO=Wv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"背景填充:",-1)})),dO={class:"row"},sO=Wv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"网格颜色:",-1)})),fO={style:{flex:"2"}},bO={class:"color-btn-wrap",style:{flex:"3"}},pO=["onClick"],mO={class:"preset-themes"},vO=["onClick","onMouseenter"],OO=Object(y["createTextVNode"])("推荐主题"),hO=Object(y["createTextVNode"])(" 添加主题色 ");function jO(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconEdit"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("Divider"),u=Object(y["resolveComponent"])("Checkbox"),d=Object(y["resolveComponent"])("SelectOption"),s=Object(y["resolveComponent"])("Select"),f=Object(y["resolveComponent"])("ColorPicker"),b=Object(y["resolveComponent"])("ColorButton"),p=Object(y["resolveComponent"])("Popover"),m=Object(y["resolveComponent"])("IconCloseSmall"),v=Object(y["resolveComponent"])("Tooltip"),O=Object(y["resolveComponent"])("IconPlus"),h=Object(y["resolveComponent"])("ButtonGroup"),j=Object(y["resolveComponent"])("ElementOutline"),g=Object(y["resolveComponent"])("ChartDataEditor"),x=Object(y["resolveComponent"])("Modal");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Gv,[Object(y["createVNode"])(r,{class:"full-width-btn",onClick:t[0]||(t[0]=function(t){return e.chartDataEditorVisible=!0})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{class:"btn-icon"}),Uv]})),_:1}),Object(y["createVNode"])(i),"line"===e.handleElement.chartType?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",Xv,[Object(y["createVNode"])(u,{onChange:t[1]||(t[1]=function(t){return e.updateOptions({showArea:t.target.checked})}),checked:e.showArea,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Zv]})),_:1},8,["checked"]),Object(y["createVNode"])(u,{onChange:t[2]||(t[2]=function(t){return e.updateOptions({showLine:!t.target.checked})}),checked:!e.showLine,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Yv]})),_:1},8,["checked"])]),Object(y["createElementVNode"])("div",Jv,[Object(y["createVNode"])(u,{onChange:t[3]||(t[3]=function(t){return e.updateOptions({lineSmooth:t.target.checked})}),checked:e.lineSmooth},{default:Object(y["withCtx"])((function(){return[Qv]})),_:1},8,["checked"])])],64)):Object(y["createCommentVNode"])("",!0),"bar"===e.handleElement.chartType?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Kv,[Object(y["createVNode"])(u,{onChange:t[4]||(t[4]=function(t){return e.updateOptions({horizontalBars:t.target.checked})}),checked:e.horizontalBars},{default:Object(y["withCtx"])((function(){return[$v]})),_:1},8,["checked"]),Object(y["createVNode"])(u,{onChange:t[5]||(t[5]=function(t){return e.updateOptions({stackBars:t.target.checked})}),checked:e.stackBars},{default:Object(y["withCtx"])((function(){return[eO]})),_:1},8,["checked"])])):Object(y["createCommentVNode"])("",!0),"pie"===e.handleElement.chartType?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",tO,[Object(y["createVNode"])(u,{onChange:t[6]||(t[6]=function(t){return e.updateOptions({donut:t.target.checked})}),checked:e.donut},{default:Object(y["withCtx"])((function(){return[nO]})),_:1},8,["checked"])])):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(i),Object(y["createElementVNode"])("div",oO,[lO,Object(y["createVNode"])(s,{style:{flex:"3"},value:e.legend,onChange:t[7]||(t[7]=function(t){return e.updateLegend(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{value:""},{default:Object(y["withCtx"])((function(){return[cO]})),_:1}),Object(y["createVNode"])(d,{value:"top"},{default:Object(y["withCtx"])((function(){return[aO]})),_:1}),Object(y["createVNode"])(d,{value:"bottom"},{default:Object(y["withCtx"])((function(){return[rO]})),_:1})]})),_:1},8,["value"])]),Object(y["createVNode"])(i),Object(y["createElementVNode"])("div",iO,[uO,Object(y["createVNode"])(p,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.fill,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{color:e.fill,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",dO,[sO,Object(y["createVNode"])(p,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.gridColor,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.updateGridColor(t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{color:e.gridColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createVNode"])(i),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.themeColor,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"row",key:n},[Object(y["createElementVNode"])("div",fO,Object(y["toDisplayString"])(0===n?"主题配色:":""),1),Object(y["createVNode"])(p,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:t,"onUpdate:modelValue":function(t){return e.updateTheme(t,n)}},null,8,["modelValue","onUpdate:modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",bO,[Object(y["createVNode"])(b,{color:t,style:{width:"100%"}},null,8,["color"]),Object(y["createVNode"])(v,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(y["withCtx"])((function(){return[0!==n?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:"delete-color-btn",onClick:Object(y["withModifiers"])((function(t){return e.deleteThemeColor(n)}),["stop"])},[Object(y["createVNode"])(m)],8,pO)):Object(y["createCommentVNode"])("",!0)]})),_:2},1032,["mouseEnterDelay"])])]})),_:2},1024)])})),128)),Object(y["createVNode"])(h,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{trigger:"click",visible:e.presetThemesVisible,"onUpdate:visible":t[11]||(t[11]=function(t){return e.presetThemesVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",mO,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.presetChartThemes,(function(n,o){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"preset-theme",key:o},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(n,(function(l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["preset-theme-color",{select:e.presetThemeColorHoverIndex[0]===o&&c<=e.presetThemeColorHoverIndex[1]}]),key:l,style:Object(y["normalizeStyle"])({backgroundColor:l}),onClick:function(t){return e.applyPresetTheme(n,c)},onMouseenter:function(t){return e.presetThemeColorHoverIndex=[o,c]},onMouseleave:t[10]||(t[10]=function(t){return e.presetThemeColorHoverIndex=[-1,-1]})},null,46,vO)})),128))])})),128))])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{class:"no-padding",style:{flex:"2"}},{default:Object(y["withCtx"])((function(){return[OO]})),_:1})]})),_:1},8,["visible"]),Object(y["createVNode"])(r,{class:"no-padding",disabled:e.themeColor.length>=10,style:{flex:"3"},onClick:t[12]||(t[12]=function(t){return e.addThemeColor()})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{class:"btn-icon"}),hO]})),_:1},8,["disabled"])]})),_:1}),Object(y["createVNode"])(i),Object(y["createVNode"])(j),Object(y["createVNode"])(x,{visible:e.chartDataEditorVisible,"onUpdate:visible":t[15]||(t[15]=function(t){return e.chartDataEditorVisible=t}),footer:null,centered:"",closable:!1,width:648,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{data:e.handleElement.data,onClose:t[13]||(t[13]=function(t){return e.chartDataEditorVisible=!1}),onSave:t[14]||(t[14]=function(t){return e.updateData(t)})},null,8,["data"])]})),_:1},8,["visible"])])}var yO={class:"chart-data-editor"},gO={class:"editor-content"},xO={class:"range-box"},CO=["id","onFocus","onPaste"],kO={class:"btns"},EO={class:"left"},wO=Object(y["createTextVNode"])("清空"),NO={class:"right"},IO=Object(y["createTextVNode"])("取消"),VO=Object(y["createTextVNode"])("确认");function SO(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",yO,[Object(y["createElementVNode"])("div",gO,[Object(y["createElementVNode"])("div",xO,[Object(y["createElementVNode"])("div",{class:"temp-range",style:Object(y["normalizeStyle"])({width:e.tempRangeSize.width+"px",height:e.tempRangeSize.height+"px"})},null,4),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.rangeLines,(function(e){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["range-line",e.type]),key:e.type,style:Object(y["normalizeStyle"])(e.style)},null,6)})),128)),Object(y["createElementVNode"])("div",{class:"resizable",style:Object(y["normalizeStyle"])(e.resizablePointStyle),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.changeSelectRange(t)}),["stop"]))},null,36)]),Object(y["createElementVNode"])("table",null,[Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(31,(function(t){return Object(y["createElementVNode"])("tr",{key:t},[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(7,(function(n){return Object(y["createElementVNode"])("td",{key:n,class:Object(y["normalizeClass"])({head:1===n&&t<=e.selectedRange[1]||1===t&&n<=e.selectedRange[0]})},[Object(y["createElementVNode"])("input",{class:Object(y["normalizeClass"])(["item",{selected:t<=e.selectedRange[1]&&n<=e.selectedRange[0]}]),id:"cell-".concat(t-1,"-").concat(n-1),autocomplete:"off",onFocus:function(o){return e.focusCell=[t-1,n-1]},onPaste:function(o){return e.handlePaste(o,t-1,n-1)}},null,42,CO)],2)})),64))])})),64))])])]),Object(y["createElementVNode"])("div",kO,[Object(y["createElementVNode"])("div",EO,[Object(y["createVNode"])(a,{class:"btn",onClick:t[1]||(t[1]=function(t){return e.clear()})},{default:Object(y["withCtx"])((function(){return[wO]})),_:1})]),Object(y["createElementVNode"])("div",NO,[Object(y["createVNode"])(a,{class:"btn",onClick:t[2]||(t[2]=function(t){return e.closeEditor()})},{default:Object(y["withCtx"])((function(){return[IO]})),_:1}),Object(y["createVNode"])(a,{type:"primary",class:"btn",onClick:t[3]||(t[3]=function(t){return e.getTableData()}),style:{"margin-left":"10px"}},{default:Object(y["withCtx"])((function(){return[VO]})),_:1})])])])}var BO=100,LO=32,TO=Object(y["defineComponent"])({name:"chart-data-editor",emits:["save","close"],props:{data:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])([0,0]),l=Object(y["ref"])({width:0,height:0}),c=Object(y["ref"])(null),a=Object(y["computed"])((function(){var e=o.value[0]*BO,t=o.value[1]*LO;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(y["computed"])((function(){var e=o.value[0]*BO,t=o.value[1]*LO;return{left:e+"px",top:t+"px"}})),i=function(){var t=[],n=e.data,l=n.labels,c=n.legends,a=n.series,r=l.length,i=a.length;t.push([""].concat(Object(K["a"])(c)));for(var u=0;u.5*BO&&(i+=BO-i%BO),u%LO>.5*LO&&(u+=LO-u%LO);var d=Math.round(u/LO),s=Math.round(i/BO);d<3&&(d=3),s<2&&(s=2),o.value=[s,d],l.value={width:0,height:0}}}};return{tempRangeSize:l,rangeLines:a,resizablePointStyle:r,selectedRange:o,focusCell:c,changeSelectRange:m,getTableData:s,closeEditor:p,clear:f,handlePaste:b}}});n("6856");const MO=Gn()(TO,[["render",SO],["__scopeId","data-v-9a62f784"]]);var _O=MO,DO=[["#d87c7c","#919e8b","#d7ab82","#6e7074","#61a0a8","#efa18d"],["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78"],["#516b91","#59c4e6","#edafda","#93b7e3","#a5e7f0","#cbb0e3"],["#893448","#d95850","#eb8146","#ffb248","#f2d643","#ebdba4"],["#4ea397","#22c3aa","#7bd9a5","#d0648a","#f58db2","#f2b3c9"],["#3fb1e3","#6be6c1","#626c91","#a0a7e6","#c4ebad","#96dee8"],["#fc97af","#87f7cf","#f7f494","#72ccff","#f7c5a0","#d4a4eb"],["#c1232b","#27727b","#fcce10","#e87c25","#b5c334","#fe8463"],["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3"],["#e01f54","#001852","#f5e8c8","#b8d2c7","#c6b38e","#a4d8c2"],["#c12e34","#e6b600","#0098d9","#2b821d","#005eaa","#339ca8"],["#8a7ca8","#e098c7","#8fd3e8","#71669e","#cc70af","#7cb4cc"]],zO=Object(y["defineComponent"])({name:"chart-style-panel",components:{ElementOutline:Jp,ChartDataEditor:_O,ColorButton:Xp},setup:function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.handleElement,l=n.handleElementId,c=Object(g["c"])(t),a=c.theme,r=Object(y["ref"])(!1),i=Object(y["ref"])(!1),u=Object(y["ref"])([-1,-1]),d=$e(),s=d.addHistorySnapshot,f=Object(y["ref"])(),b=Object(y["ref"])([]),p=Object(y["ref"])(""),m=Object(y["ref"])(""),v=Object(y["ref"])(!0),O=Object(y["ref"])(!0),h=Object(y["ref"])(!1),j=Object(y["ref"])(!1),x=Object(y["ref"])(!1),C=Object(y["ref"])(!1);Object(y["watch"])(o,(function(){if(o.value&&"chart"===o.value.type){if(f.value=o.value.fill||"#000",o.value.options){var e=o.value.options,t=e.lineSmooth,n=e.showLine,l=e.showArea,c=e.horizontalBars,a=e.donut,r=e.stackBars;void 0!==t&&(v.value=t),void 0!==n&&(O.value=n),void 0!==l&&(h.value=l),void 0!==c&&(j.value=c),void 0!==a&&(x.value=a),void 0!==r&&(C.value=r)}b.value=o.value.themeColor,p.value=o.value.gridColor||"rgba(0, 0, 0, 0.4)",m.value=o.value.legend||""}}),{deep:!0,immediate:!0});var k=function(e){t.updateElement({id:l.value,props:e}),s()},E=function(e){r.value=!1,k({data:e})},w=function(e){k({fill:e})},N=function(e){var t=o.value,n=Object(L["a"])(Object(L["a"])({},t.options),e);k({options:n})},I=function(e,t){var n={themeColor:b.value.map((function(n,o){return o===t?e:n}))};k(n)},V=function(){var e={themeColor:[].concat(Object(K["a"])(b.value),[a.value.themeColor])};k(e)},S=function(e,t){var n=e.slice(0,t+1);k({themeColor:n}),i.value=!1},B=function(e){var t={themeColor:b.value.filter((function(t,n){return n!==e}))};k(t)},T=function(e){k({gridColor:e})},M=function(e){k({legend:e})},_=function(){return r.value=!0};return Cr.on(za.OPEN_CHART_DATA_EDITOR,_),Object(y["onUnmounted"])((function(){Cr.off(za.OPEN_CHART_DATA_EDITOR,_)})),{chartDataEditorVisible:r,presetThemesVisible:i,presetThemeColorHoverIndex:u,handleElement:o,updateData:E,fill:f,updateFill:w,lineSmooth:v,showLine:O,showArea:h,horizontalBars:j,donut:x,stackBars:C,updateOptions:N,themeColor:b,gridColor:p,legend:m,updateTheme:I,addThemeColor:V,deleteThemeColor:B,updateGridColor:T,updateLegend:M,presetChartThemes:DO,applyPresetTheme:S}}});n("eb6a");const AO=Gn()(zO,[["render",jO],["__scopeId","data-v-5a3169a0"]]);var FO=AO,RO=function(e){return Object(y["pushScopeId"])("data-v-72e00692"),e=e(),Object(y["popScopeId"])(),e},PO={class:"table-style-panel"},HO={class:"row"},qO=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"行数:",-1)})),WO={class:"set-count",style:{flex:"3"}},GO={class:"count-text"},UO={class:"row"},XO=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"列数:",-1)})),ZO={class:"set-count",style:{flex:"3"}},YO={class:"count-text"},JO={class:"row theme-switch"},QO=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"启用主题表格:",-1)})),KO={class:"switch-wrapper",style:{flex:"3"}},$O={class:"row"},eh=Object(y["createTextVNode"])("标题行"),th=Object(y["createTextVNode"])("汇总行"),nh={class:"row"},oh=Object(y["createTextVNode"])("第一列"),lh=Object(y["createTextVNode"])("最后一列"),ch={class:"row"},ah=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"主题颜色:",-1)}));function rh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconFontSize"),r=Object(y["resolveComponent"])("SelectOption"),i=Object(y["resolveComponent"])("SelectOptGroup"),u=Object(y["resolveComponent"])("Select"),d=Object(y["resolveComponent"])("IconAddText"),s=Object(y["resolveComponent"])("InputGroup"),f=Object(y["resolveComponent"])("ColorPicker"),b=Object(y["resolveComponent"])("IconText"),p=Object(y["resolveComponent"])("Button"),m=Object(y["resolveComponent"])("Tooltip"),v=Object(y["resolveComponent"])("Popover"),O=Object(y["resolveComponent"])("IconFill"),h=Object(y["resolveComponent"])("ButtonGroup"),j=Object(y["resolveComponent"])("IconTextBold"),g=Object(y["resolveComponent"])("CheckboxButton"),x=Object(y["resolveComponent"])("IconTextItalic"),C=Object(y["resolveComponent"])("IconTextUnderline"),k=Object(y["resolveComponent"])("IconStrikethrough"),E=Object(y["resolveComponent"])("CheckboxButtonGroup"),w=Object(y["resolveComponent"])("IconAlignTextLeft"),N=Object(y["resolveComponent"])("RadioButton"),I=Object(y["resolveComponent"])("IconAlignTextCenter"),V=Object(y["resolveComponent"])("IconAlignTextRight"),S=Object(y["resolveComponent"])("RadioGroup"),B=Object(y["resolveComponent"])("Divider"),L=Object(y["resolveComponent"])("ElementOutline"),T=Object(y["resolveComponent"])("IconMinus"),M=Object(y["resolveComponent"])("IconPlus"),_=Object(y["resolveComponent"])("Switch"),D=Object(y["resolveComponent"])("Checkbox"),z=Object(y["resolveComponent"])("ColorButton");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",PO,[Object(y["createVNode"])(s,{compact:"",class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{style:{flex:"3"},value:e.textAttrs.fontname,onChange:t[0]||(t[0]=function(t){return e.updateTextAttrs({fontname:t})})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a)]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{label:"系统字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.availableFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",{style:Object(y["normalizeStyle"])({fontFamily:e.value})},Object(y["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(y["createVNode"])(i,{label:"在线字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.webFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(y["createVNode"])(u,{style:{flex:"2"},value:e.textAttrs.fontsize,onChange:t[1]||(t[1]=function(t){return e.updateTextAttrs({fontsize:t})})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d)]})),default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.fontSizeOptions,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e,value:e},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])(Object(y["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(y["createVNode"])(h,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.textAttrs.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateTextAttrs({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{class:"text-color-btn",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b),Object(y["createElementVNode"])("div",{class:"text-color-block",style:Object(y["normalizeStyle"])({backgroundColor:e.textAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(v,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.textAttrs.backcolor,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateTextAttrs({backcolor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"单元格填充"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{class:"text-color-btn",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O),Object(y["createElementVNode"])("div",{class:"text-color-block",style:Object(y["normalizeStyle"])({backgroundColor:e.textAttrs.backcolor})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(y["createVNode"])(E,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.bold,onClick:t[4]||(t[4]=function(t){return e.updateTextAttrs({bold:!e.textAttrs.bold})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.em,onClick:t[5]||(t[5]=function(t){return e.updateTextAttrs({em:!e.textAttrs.em})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(x)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.underline,onClick:t[6]||(t[6]=function(t){return e.updateTextAttrs({underline:!e.textAttrs.underline})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除线"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.strikethrough,onClick:t[7]||(t[7]=function(t){return e.updateTextAttrs({strikethrough:!e.textAttrs.strikethrough})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(S,{class:"row","button-style":"solid",value:e.textAttrs.align,onChange:t[8]||(t[8]=function(t){return e.updateTextAttrs({align:t.target.value})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{value:"left",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(w)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{value:"center",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(I)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{value:"right",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(V)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(y["createVNode"])(B),Object(y["createVNode"])(L,{fixed:!0}),Object(y["createVNode"])(B),Object(y["createElementVNode"])("div",HO,[qO,Object(y["createElementVNode"])("div",WO,[Object(y["createVNode"])(p,{class:"btn",disabled:e.rowCount<=1,onClick:t[9]||(t[9]=function(t){return e.setTableRow(e.rowCount-1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(T)]})),_:1},8,["disabled"]),Object(y["createElementVNode"])("div",GO,Object(y["toDisplayString"])(e.rowCount),1),Object(y["createVNode"])(p,{class:"btn",disabled:e.rowCount>=30,onClick:t[10]||(t[10]=function(t){return e.setTableRow(e.rowCount+1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(M)]})),_:1},8,["disabled"])])]),Object(y["createElementVNode"])("div",UO,[XO,Object(y["createElementVNode"])("div",ZO,[Object(y["createVNode"])(p,{class:"btn",disabled:e.colCount<=1,onClick:t[11]||(t[11]=function(t){return e.setTableCol(e.colCount-1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(T)]})),_:1},8,["disabled"]),Object(y["createElementVNode"])("div",YO,Object(y["toDisplayString"])(e.colCount),1),Object(y["createVNode"])(p,{class:"btn",disabled:e.colCount>=30,onClick:t[12]||(t[12]=function(t){return e.setTableCol(e.colCount+1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(M)]})),_:1},8,["disabled"])])]),Object(y["createVNode"])(B),Object(y["createElementVNode"])("div",JO,[QO,Object(y["createElementVNode"])("div",KO,[Object(y["createVNode"])(_,{checked:e.hasTheme,onChange:t[13]||(t[13]=function(t){return e.toggleTheme(t)})},null,8,["checked"])])]),e.hasTheme?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",$O,[Object(y["createVNode"])(D,{onChange:t[14]||(t[14]=function(t){return e.updateTheme({rowHeader:t.target.checked})}),checked:e.theme.rowHeader,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[eh]})),_:1},8,["checked"]),Object(y["createVNode"])(D,{onChange:t[15]||(t[15]=function(t){return e.updateTheme({rowFooter:t.target.checked})}),checked:e.theme.rowFooter,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[th]})),_:1},8,["checked"])]),Object(y["createElementVNode"])("div",nh,[Object(y["createVNode"])(D,{onChange:t[16]||(t[16]=function(t){return e.updateTheme({colHeader:t.target.checked})}),checked:e.theme.colHeader,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[oh]})),_:1},8,["checked"]),Object(y["createVNode"])(D,{onChange:t[17]||(t[17]=function(t){return e.updateTheme({colFooter:t.target.checked})}),checked:e.theme.colFooter,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[lh]})),_:1},8,["checked"])]),Object(y["createElementVNode"])("div",ch,[ah,Object(y["createVNode"])(v,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.theme.color,"onUpdate:modelValue":t[18]||(t[18]=function(t){return e.updateTheme({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(z,{color:e.theme.color,style:{flex:"3"}},null,8,["color"])]})),_:1})])],64)):Object(y["createCommentVNode"])("",!0)])}var ih=B,uh=Object(y["defineComponent"])({name:"table-style-panel",components:{ElementOutline:Jp,ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=t.handleElementId,l=t.selectedTableCells,c=t.availableFonts,a=Object(y["computed"])((function(){return e.theme.themeColor})),r=["12px","14px","16px","18px","20px","22px","24px","28px","32px"],i=Object(y["ref"])({bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}),u=Object(y["ref"])(),d=Object(y["ref"])(!1),s=Object(y["ref"])(0),f=Object(y["ref"])(0),b=Object(y["ref"])(0),p=Object(y["ref"])(0);Object(y["watch"])(n,(function(){n.value&&"table"===n.value.type&&(u.value=n.value.theme,d.value=!!u.value,s.value=n.value.data.length,f.value=n.value.data[0].length,b.value=n.value.data.length,p.value=n.value.data[0].length)}),{deep:!0,immediate:!0});var m=$e(),v=m.addHistorySnapshot,O=function(){if(n.value&&"table"===n.value.type){var e=0,t=0;if(l.value.length){var o=l.value[0];e=+o.split("_")[0],t=+o.split("_")[1]}var c=n.value.data[e][t].style;i.value=c?{bold:!!c.bold,em:!!c.em,underline:!!c.underline,strikethrough:!!c.strikethrough,color:c.color||"#000",backcolor:c.backcolor||"#000",fontsize:c.fontsize||"12px",fontname:c.fontname||"微软雅黑",align:c.align||"left"}:{bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}}};Object(y["onMounted"])((function(){l.value.length&&O()})),Object(y["watch"])(l,O);var h=function(t){e.updateElement({id:o.value,props:t}),v()},j=function(e){for(var t=n.value,o=JSON.parse(JSON.stringify(t.data)),c=0;co){var l=new Array(f.value).fill({id:je(),colspan:1,rowspan:1,text:""}),c=new Array(e-o).fill(l),a=JSON.parse(JSON.stringify(t.data));a.push.apply(a,Object(K["a"])(c)),h({data:a})}else{var r=t.data.slice(0,e);h({data:r})}},E=function(e){var t=n.value,o=t.data[0].length,l=t.data,c=t.colWidths.map((function(e){return e*t.width}));if(e>o){var a;l=l.map((function(t){var n=new Array(e-o).fill({id:je(),colspan:1,rowspan:1,text:""});return t.push.apply(t,Object(K["a"])(n)),t}));var r=new Array(e-o).fill(100);(a=c).push.apply(a,Object(K["a"])(r))}else l=l.map((function(t){return t.slice(0,e)})),c=c.slice(0,e);var i=c.reduce((function(e,t){return e+t})),u=c.map((function(e){return e/i})),d={width:i,data:l,colWidths:u};h(d)};return{handleElement:n,availableFonts:c,fontSizeOptions:r,textAttrs:i,updateTextAttrs:j,theme:u,rowCount:s,colCount:f,minRowCount:b,minColCount:p,hasTheme:d,toggleTheme:C,updateTheme:x,setTableRow:k,setTableCol:E,webFonts:ih}}});n("eacc");const dh=Gn()(uh,[["render",rh],["__scopeId","data-v-72e00692"]]);var sh=dh,fh=function(e){return Object(y["pushScopeId"])("data-v-69f903b1"),e=e(),Object(y["popScopeId"])(),e},bh={class:"latex-style-panel"},ph={class:"row"},mh=Object(y["createTextVNode"])("编辑 LaTeX"),vh={class:"row"},Oh=fh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"颜色:",-1)})),hh={class:"row"},jh=fh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"粗细:",-1)}));function yh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Button"),r=Object(y["resolveComponent"])("Divider"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("InputNumber"),f=Object(y["resolveComponent"])("LaTeXEditor"),b=Object(y["resolveComponent"])("Modal");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",bh,[Object(y["createElementVNode"])("div",ph,[Object(y["createVNode"])(a,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.latexEditorVisible=!0})},{default:Object(y["withCtx"])((function(){return[mh]})),_:1})]),Object(y["createVNode"])(r),Object(y["createElementVNode"])("div",vh,[Oh,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateLatex({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",hh,[jh,Object(y["createVNode"])(s,{min:1,max:3,value:e.handleElement.strokeWidth,onChange:t[2]||(t[2]=function(t){return e.updateLatex({strokeWidth:t})}),style:{flex:"3"}},null,8,["value"])]),Object(y["createVNode"])(b,{visible:e.latexEditorVisible,"onUpdate:visible":t[5]||(t[5]=function(t){return e.latexEditorVisible=t}),footer:null,centered:"",width:880,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{value:e.handleElement.latex,onClose:t[3]||(t[3]=function(t){return e.latexEditorVisible=!1}),onUpdate:t[4]||(t[4]=function(t){e.updateLatexData(t),e.latexEditorVisible=!1})},null,8,["value"])]})),_:1},8,["visible"])])}var gh=Object(y["defineComponent"])({name:"latex-style-panel",components:{ColorButton:Xp,LaTeXEditor:Mb},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=Object(y["ref"])(!1),l=$e(),c=l.addHistorySnapshot,a=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),c())},r=function(e){a({path:e.path,latex:e.latex,width:e.w,height:e.h,viewBox:[e.w,e.h]})},i=function(){return o.value=!0};return Cr.on(za.OPEN_LATEX_EDITOR,i),Object(y["onUnmounted"])((function(){Cr.off(za.OPEN_LATEX_EDITOR,i)})),{handleElement:n,latexEditorVisible:o,updateLatex:a,updateLatexData:r}}});n("e5a8");const xh=Gn()(gh,[["render",yh],["__scopeId","data-v-69f903b1"]]);var Ch=xh,kh=function(e){return Object(y["pushScopeId"])("data-v-61bcaa2a"),e=e(),Object(y["popScopeId"])(),e},Eh={class:"video-style-panel"},wh=kh((function(){return Object(y["createElementVNode"])("div",{class:"title"},"视频预览封面",-1)})),Nh={class:"background-image-wrapper"},Ih={class:"background-image"},Vh={class:"row"},Sh=Object(y["createTextVNode"])("重置封面");function Bh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPlus"),r=Object(y["resolveComponent"])("FileInput"),i=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Eh,[wh,Object(y["createElementVNode"])("div",Nh,[Object(y["createVNode"])(r,{onChange:t[0]||(t[0]=function(t){return e.setVideoPoster(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Ih,[Object(y["createElementVNode"])("div",{class:"content",style:Object(y["normalizeStyle"])({backgroundImage:"url(".concat(e.handleElement.poster,")")})},[Object(y["createVNode"])(a)],4)])]})),_:1})]),Object(y["createElementVNode"])("div",Vh,[Object(y["createVNode"])(i,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.updateVideo({poster:""})})},{default:Object(y["withCtx"])((function(){return[Sh]})),_:1})])])}var Lh=Object(y["defineComponent"])({name:"video-style-panel",setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=$e(),l=o.addHistorySnapshot,c=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),l())},a=function(e){var t=e[0];t&&tt(t).then((function(e){return c({poster:e})}))};return{handleElement:n,updateVideo:c,setVideoPoster:a}}});n("c43a");const Th=Gn()(Lh,[["render",Bh],["__scopeId","data-v-61bcaa2a"]]);var Mh=Th,_h=function(e){return Object(y["pushScopeId"])("data-v-80767a46"),e=e(),Object(y["popScopeId"])(),e},Dh={class:"audio-style-panel"},zh={class:"row"},Ah=_h((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"图标颜色:",-1)})),Fh={class:"row switch-row"},Rh=_h((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"自动播放:",-1)})),Ph={class:"switch-wrapper",style:{flex:"3"}},Hh={class:"row switch-row"},qh=_h((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"循环播放:",-1)})),Wh={class:"switch-wrapper",style:{flex:"3"}};function Gh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ColorPicker"),r=Object(y["resolveComponent"])("ColorButton"),i=Object(y["resolveComponent"])("Popover"),u=Object(y["resolveComponent"])("Switch");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Dh,[Object(y["createElementVNode"])("div",zh,[Ah,Object(y["createVNode"])(i,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.updateAudio({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",Fh,[Rh,Object(y["createElementVNode"])("div",Ph,[Object(y["createVNode"])(u,{checked:e.handleElement.autoplay,onChange:t[1]||(t[1]=function(t){return e.updateAudio({autoplay:t})})},null,8,["checked"])])]),Object(y["createElementVNode"])("div",Hh,[qh,Object(y["createElementVNode"])("div",Wh,[Object(y["createVNode"])(u,{checked:e.handleElement.loop,onChange:t[2]||(t[2]=function(t){return e.updateAudio({loop:t})})},null,8,["checked"])])])])}var Uh=Object(y["defineComponent"])({name:"audio-style-panel",components:{ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=$e(),l=o.addHistorySnapshot,c=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),l())};return{handleElement:n,updateAudio:c}}});n("d129");const Xh=Gn()(Uh,[["render",Gh],["__scopeId","data-v-80767a46"]]);var Zh=Xh,Yh=Object(y["defineComponent"])({name:"element-style-panel",setup:function(){var e=Object(g["c"])(ae()),t=e.handleElement,n=Object(y["computed"])((function(){var e;if(!t.value)return null;var n=(e={},Object(fe["a"])(e,Ne.TEXT,hm),Object(fe["a"])(e,Ne.IMAGE,ev),Object(fe["a"])(e,Ne.SHAPE,jv),Object(fe["a"])(e,Ne.LINE,qv),Object(fe["a"])(e,Ne.CHART,FO),Object(fe["a"])(e,Ne.TABLE,sh),Object(fe["a"])(e,Ne.LATEX,Ch),Object(fe["a"])(e,Ne.VIDEO,Mh),Object(fe["a"])(e,Ne.AUDIO,Zh),e);return n[t.value.type]||null}));return{handleElement:t,currentPanelComponent:n}}});const Jh=Gn()(Yh,[["render",ip]]);var Qh=Jh,Kh=function(e){return Object(y["pushScopeId"])("data-v-3476ee65"),e=e(),Object(y["popScopeId"])(),e},$h={class:"element-positopn-panel"},ej=Kh((function(){return Object(y["createElementVNode"])("div",{class:"title"},"层级:",-1)})),tj=Object(y["createTextVNode"])(" 置于顶层"),nj=Object(y["createTextVNode"])(" 置于底层"),oj=Object(y["createTextVNode"])(" 上移一层"),lj=Object(y["createTextVNode"])(" 下移一层"),cj=Kh((function(){return Object(y["createElementVNode"])("div",{class:"title"},"对齐:",-1)})),aj={class:"row"},rj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"3"}},"位置:",-1)})),ij=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)})),uj=Object(y["createStaticVNode"])('
X
Y
',1),dj={class:"row"},sj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"3"}},"大小:",-1)})),fj={key:1,style:{flex:"1"}},bj=Object(y["createStaticVNode"])('
',1),pj={class:"row"},mj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"3"}},"旋转:",-1)})),vj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)}));function Oj(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconSendToBack"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("IconBringToFrontOne"),u=Object(y["resolveComponent"])("ButtonGroup"),d=Object(y["resolveComponent"])("IconBringToFront"),s=Object(y["resolveComponent"])("IconSentToBack"),f=Object(y["resolveComponent"])("Divider"),b=Object(y["resolveComponent"])("IconAlignLeft"),p=Object(y["resolveComponent"])("Tooltip"),m=Object(y["resolveComponent"])("IconAlignVertically"),v=Object(y["resolveComponent"])("IconAlignRight"),O=Object(y["resolveComponent"])("IconAlignTop"),h=Object(y["resolveComponent"])("IconAlignHorizontally"),j=Object(y["resolveComponent"])("IconAlignBottom"),g=Object(y["resolveComponent"])("InputNumber"),x=Object(y["resolveComponent"])("IconLock"),C=Object(y["resolveComponent"])("IconUnlock"),k=Object(y["resolveComponent"])("IconRotate");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$h,[ej,Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.orderElement(e.handleElement,"top")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{class:"btn-icon"}),tj]})),_:1}),Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.orderElement(e.handleElement,"bottom")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{class:"btn-icon"}),nj]})),_:1})]})),_:1}),Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.orderElement(e.handleElement,"up")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{class:"btn-icon"}),oj]})),_:1}),Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.orderElement(e.handleElement,"down")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(s,{class:"btn-icon"}),lj]})),_:1})]})),_:1}),Object(y["createVNode"])(f),cj,Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElementToCanvas("left")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElementToCanvas("horizontal")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElementToCanvas("right")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.alignElementToCanvas("top")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.alignElementToCanvas("vertical")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(h)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.alignElementToCanvas("bottom")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(f),Object(y["createElementVNode"])("div",aj,[rj,Object(y["createVNode"])(g,{step:5,value:e.left,onChange:t[10]||(t[10]=function(t){return e.updateLeft(t)}),style:{flex:"4"}},null,8,["value"]),ij,Object(y["createVNode"])(g,{step:5,value:e.top,onChange:t[11]||(t[11]=function(t){return e.updateTop(t)}),style:{flex:"4"}},null,8,["value"])]),uj,"line"!==e.handleElement.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",dj,[sj,Object(y["createVNode"])(g,{min:e.minSize,max:1500,step:5,value:e.width,onChange:t[12]||(t[12]=function(t){return e.updateWidth(t)}),style:{flex:"4"}},null,8,["min","value"]),["image","shape","audio"].includes(e.handleElement.type)?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[e.fixedRatio?(Object(y["openBlock"])(),Object(y["createBlock"])(p,{key:0,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"解除宽高比锁定"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(x,{style:{flex:"1"},class:"icon-btn",onClick:t[13]||(t[13]=function(t){return e.updateFixedRatio(!1)})})]})),_:1},8,["mouseEnterDelay"])):(Object(y["openBlock"])(),Object(y["createBlock"])(p,{key:1,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"宽高比锁定"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C,{style:{flex:"1"},class:"icon-btn",onClick:t[14]||(t[14]=function(t){return e.updateFixedRatio(!0)})})]})),_:1},8,["mouseEnterDelay"]))],64)):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",fj)),Object(y["createVNode"])(g,{min:e.minSize,max:800,step:5,disabled:"text"===e.handleElement.type,value:e.height,onChange:t[15]||(t[15]=function(t){return e.updateHeight(t)}),style:{flex:"4"}},null,8,["min","disabled","value"])]),bj],64)):Object(y["createCommentVNode"])("",!0),["line","video","audio"].includes(e.handleElement.type)?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:1},[Object(y["createVNode"])(f),Object(y["createElementVNode"])("div",pj,[mj,Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"逆时针旋转"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{class:"icon-btn",onClick:t[16]||(t[16]=function(t){return e.updateRotate45("-")}),style:{flex:"2"}})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顺时针旋转"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{class:"icon-btn",onClick:t[17]||(t[17]=function(t){return e.updateRotate45("+")}),style:Object(y["normalizeStyle"])({flex:2,transform:"rotateY(180deg)"})},null,8,["style"])]})),_:1},8,["mouseEnterDelay"]),vj,Object(y["createVNode"])(g,{min:-180,max:180,step:5,value:e.rotate,onChange:t[18]||(t[18]=function(t){return e.updateRotate(t)}),style:{flex:"4"}},null,8,["value"])])],64))])}var hj=Object(y["defineComponent"])({name:"element-positopn-panel",setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=t.handleElementId,l=Object(y["ref"])(0),c=Object(y["ref"])(0),a=Object(y["ref"])(0),r=Object(y["ref"])(0),i=Object(y["ref"])(0),u=Object(y["ref"])(!1),d=Object(y["computed"])((function(){return n.value&&na[n.value.type]||20}));Object(y["watch"])(n,(function(){n.value&&(l.value=Object(te["round"])(n.value.left,1),c.value=Object(te["round"])(n.value.top,1),u.value="fixedRatio"in n.value&&!!n.value.fixedRatio,"line"!==n.value.type&&(a.value=Object(te["round"])(n.value.width,1),r.value=Object(te["round"])(n.value.height,1),i.value="rotate"in n.value&&void 0!==n.value.rotate?Object(te["round"])(n.value.rotate,1):0))}),{deep:!0,immediate:!0});var s=mt(),f=s.orderElement,b=fa(),p=b.alignElementToCanvas,m=$e(),v=m.addHistorySnapshot,O=function(t){var n={left:t};e.updateElement({id:o.value,props:n}),v()},h=function(t){var n={top:t};e.updateElement({id:o.value,props:n}),v()},j=function(t){var n={width:t};e.updateElement({id:o.value,props:n}),v()},x=function(t){var n={height:t};e.updateElement({id:o.value,props:n}),v()},C=function(t){var n={rotate:t};e.updateElement({id:o.value,props:n}),v()},k=function(t){var n={fixedRatio:t};e.updateElement({id:o.value,props:n}),v()},E=function(t){var n=45*Math.floor(i.value/45);"+"===t?n+=45:"-"===t&&(n-=45),n<-180&&(n=-180),n>180&&(n=180);var l={rotate:n};e.updateElement({id:o.value,props:l}),v()};return{handleElement:n,orderElement:f,alignElementToCanvas:p,left:l,top:c,width:a,height:r,rotate:i,fixedRatio:u,minSize:d,updateLeft:O,updateTop:h,updateWidth:j,updateHeight:x,updateRotate:C,updateFixedRatio:k,updateRotate45:E}}});n("f10d");const jj=Gn()(hj,[["render",Oj],["__scopeId","data-v-3476ee65"]]);var yj=jj,gj=function(e){return Object(y["pushScopeId"])("data-v-696c81e2"),e=e(),Object(y["popScopeId"])(),e},xj={class:"element-animation-panel"},Cj={key:0,class:"element-animation"},kj={class:"animation-pool"},Ej={class:"type-title"},wj={class:"pool-item-wrapper"},Nj=["onMouseenter","onClick"],Ij={key:0,class:"mask"},Vj=Object(y["createTextVNode"])(" 该元素暂不支持动画 "),Sj={key:1,class:"tip"},Bj=Object(y["createTextVNode"])(" 选中画布中的元素添加动画"),Lj={class:"index"},Tj={class:"text"},Mj={class:"handler"},_j={key:2,class:"configs"},Dj={class:"duration"},zj=gj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"4"}},"持续时间(毫秒):",-1)}));function Aj(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconEffects"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("Popover"),u=Object(y["resolveComponent"])("IconClick"),d=Object(y["resolveComponent"])("Divider"),s=Object(y["resolveComponent"])("IconPlayOne"),f=Object(y["resolveComponent"])("Tooltip"),b=Object(y["resolveComponent"])("IconCloseSmall"),p=Object(y["resolveComponent"])("Draggable"),m=Object(y["resolveComponent"])("InputNumber");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",xj,[e.handleElement?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Cj,[["chart","video"].includes(e.handleElement.type)?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,class:"element-animation-btn",disabled:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{style:{"margin-right":"5px"}}),Vj]})),_:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0,trigger:"click",visible:e.animationPoolVisible,"onUpdate:visible":t[1]||(t[1]=function(t){return e.animationPoolVisible=t}),onVisibleChange:t[2]||(t[2]=function(t){return e.handlePopoverVisibleChange(t)})},{content:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",kj,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.animations,(function(n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"pool-type",key:n.name},[Object(y["createElementVNode"])("div",Ej,Object(y["toDisplayString"])(n.name)+":",1),Object(y["createElementVNode"])("div",wj,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(n.children,(function(n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"pool-item",key:n.name,onMouseenter:function(t){return e.hoverPreviewAnimation=n.value},onMouseleave:t[0]||(t[0]=function(t){return e.hoverPreviewAnimation=""}),onClick:function(t){return e.addAnimation(n.value)}},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["animation-box",["animate__animated","animate__faster",e.hoverPreviewAnimation===n.value&&"animate__".concat(n.value)]])},Object(y["toDisplayString"])(n.name),3)],40,Nj)})),128))])])})),128)),e.popoverMaskHide?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ij))])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{class:"element-animation-btn"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{style:{"margin-right":"5px"}}),Object(y["createTextVNode"])(" "+Object(y["toDisplayString"])(e.handleElementAnimationName||"点击选择动画"),1)]})),_:1})]})),_:1},8,["visible"]))])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Sj,[Object(y["createVNode"])(u,{style:{"margin-right":"5px"}}),Bj])),Object(y["createVNode"])(d),Object(y["createVNode"])(p,{class:"animation-sequence",modelValue:e.animationSequence,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(y["withCtx"])((function(t){var n,o=t.element,l=t.index;return[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["sequence-item",{active:(null===(n=e.handleElement)||void 0===n?void 0:n.id)===o.elId}])},[Object(y["createElementVNode"])("div",Lj,Object(y["toDisplayString"])(l+1),1),Object(y["createElementVNode"])("div",Tj,"【"+Object(y["toDisplayString"])(o.elType)+"】"+Object(y["toDisplayString"])(o.animationType),1),Object(y["createElementVNode"])("div",Mj,[Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"预览"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(s,{class:"handler-btn",onClick:function(t){return e.runAnimation(o.elId,o.type,o.duration)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{class:"handler-btn",onClick:function(t){return e.deleteAnimation(o.elId)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"])])],2)]})),_:1},8,["modelValue","onEnd"]),e.handleElementAnimation?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",_j,[Object(y["createVNode"])(d),Object(y["createElementVNode"])("div",Dj,[zj,Object(y["createVNode"])(m,{min:100,max:5e3,step:100,value:e.handleElementAnimation.duration,onChange:t[3]||(t[3]=function(t){return e.updateElementAnimationDuration(t)}),style:{flex:"3"}},null,8,["value"])])])):Object(y["createCommentVNode"])("",!0)])}var Fj,Rj=[{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"}]}],Pj=1e3,Hj={},qj=Object(T["a"])(Rj);try{for(qj.s();!(Fj=qj.n()).done;){var Wj,Gj=Fj.value,Uj=Object(T["a"])(Gj.children);try{for(Uj.s();!(Wj=Uj.n()).done;){var Xj=Wj.value;Hj[Xj.value]=Xj.name}}catch(sN){Uj.e(sN)}finally{Uj.f()}}}catch(sN){qj.e(sN)}finally{qj.f()}var Zj=Object(y["defineComponent"])({name:"element-animation-panel",components:{Draggable:Gb.a},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=t.handleElementId,l=Object(g["c"])(e),c=l.currentSlide,a=l.currentSlideAnimations,r=Object(y["ref"])(""),i=Object(y["ref"])(!1),u=$e(),d=u.addHistorySnapshot,s=Rj,f=Object(y["computed"])((function(){if(!a.value)return[];var e,t=[],n=Object(T["a"])(a.value);try{var o=function(){var n=e.value,o=c.value.elements.find((function(e){return e.id===n.elId}));if(!o)return"continue";var l=ta[o.type],a=Hj[n.type];t.push(Object(L["a"])(Object(L["a"])({},n),{},{elType:l,animationType:a}))};for(n.s();!(e=n.n()).done;)o()}catch(sN){n.e(sN)}finally{n.f()}return t})),b=Object(y["computed"])((function(){var e=a.value||[],t=e.find((function(e){return e.elId===o.value}));return t||null})),p=Object(y["computed"])((function(){return b.value?Hj[b.value.type]:null})),m=function(t){var n=a.value.filter((function(e){return e.elId!==t}));e.updateSlide({animations:n}),d()},v=function(t){var n=t.newIndex,o=t.oldIndex;if(o!==n){var l=JSON.parse(JSON.stringify(a.value)),c=l[o];l.splice(o,1),l.splice(n,0,c),e.updateSlide({animations:l}),d()}},O=function(e,t,n){var o="animate__",l=document.querySelector("#editable-element-".concat(e," [class^=editable-element-]"));if(l){var c="".concat(o).concat(t);document.documentElement.style.setProperty("--animate-duration","".concat(n,"ms")),l.classList.add("".concat(o,"animated"),c);var a=function(){document.documentElement.style.removeProperty("--animate-duration"),l.classList.remove("".concat(o,"animated"),c)};l.addEventListener("animationend",a,{once:!0})}},h=function(t){if(a.value){var n=a.value.map((function(e){return e.elId===o.value?Object(L["a"])(Object(L["a"])({},e),{},{type:t}):e}));e.updateSlide({animations:n}),i.value=!1,d();var l=a.value.find((function(e){return e.elId===o.value})),c=(null===l||void 0===l?void 0:l.duration)||Pj;O(o.value,t,c)}},j=function(t){if(a.value&&!(t<100||t>5e3)){var n=a.value.map((function(e){return e.elId===o.value?Object(L["a"])(Object(L["a"])({},e),{},{duration:t}):e}));e.updateSlide({animations:n}),d()}},x=function(t){if(p.value)h(t);else{var n=a.value?JSON.parse(JSON.stringify(a.value)):[];n.push({elId:o.value,type:t,duration:Pj}),e.updateSlide({animations:n}),i.value=!1,d(),O(o.value,t,Pj)}},C=Object(y["ref"])(!1),k=function(e){e?setTimeout((function(){return C.value=!0}),500):C.value=!1};return{handleElement:n,animationPoolVisible:i,animations:s,animationSequence:f,hoverPreviewAnimation:r,handleElementAnimation:b,handleElementAnimationName:p,popoverMaskHide:C,addAnimation:x,deleteAnimation:m,handleDragEnd:v,runAnimation:O,updateElementAnimationDuration:j,handlePopoverVisibleChange:k}}});n("c390");const Yj=Gn()(Zj,[["render",Aj],["__scopeId","data-v-696c81e2"]]);var Jj=Yj,Qj=function(e){return Object(y["pushScopeId"])("data-v-0e2f846d"),e=e(),Object(y["popScopeId"])(),e},Kj={class:"slide-design-panel"},$j=Qj((function(){return Object(y["createElementVNode"])("div",{class:"title"},"背景填充",-1)})),ey={class:"row"},ty=Object(y["createTextVNode"])("纯色填充"),ny=Object(y["createTextVNode"])("图片填充"),oy=Object(y["createTextVNode"])("渐变填充"),ly=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)})),cy=Object(y["createTextVNode"])("缩放"),ay=Object(y["createTextVNode"])("拼贴"),ry=Object(y["createTextVNode"])("缩放铺满"),iy=Object(y["createTextVNode"])("线性渐变"),uy=Object(y["createTextVNode"])("径向渐变"),dy={key:0,class:"background-image-wrapper"},sy={class:"background-image"},fy={key:1,class:"background-gradient-wrapper"},by={class:"row"},py=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1)})),my={class:"row"},vy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1)})),Oy={key:0,class:"row"},hy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1)})),jy={class:"row"},yy=Object(y["createTextVNode"])("应用背景到全部"),gy={class:"row"},xy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"画布尺寸:",-1)})),Cy=Object(y["createTextVNode"])("宽屏 16 : 9"),ky=Object(y["createTextVNode"])("宽屏 16 :10"),Ey=Object(y["createTextVNode"])("标准 4 :3"),wy=Qj((function(){return Object(y["createElementVNode"])("div",{class:"title"},"全局主题",-1)})),Ny={class:"row"},Iy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"字体:",-1)})),Vy={class:"row"},Sy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"字体颜色:",-1)})),By={class:"row"},Ly=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"背景颜色:",-1)})),Ty={class:"row"},My=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"主题色:",-1)})),_y=Object(y["createTextVNode"])(" 预置主题 "),Dy={key:2,class:"theme-list"},zy=["onClick"],Ay={class:"theme-item-content"},Fy={class:"row"},Ry=Object(y["createTextVNode"])("应用主题到全部");function Py(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("SelectOption"),r=Object(y["resolveComponent"])("Select"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("IconPlus"),f=Object(y["resolveComponent"])("FileInput"),b=Object(y["resolveComponent"])("Slider"),p=Object(y["resolveComponent"])("Button"),m=Object(y["resolveComponent"])("Divider"),v=Object(y["resolveComponent"])("SelectOptGroup"),O=Object(y["resolveComponent"])("IconDown");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Kj,[$j,Object(y["createElementVNode"])("div",ey,[Object(y["createVNode"])(r,{style:{flex:"10"},value:e.background.type,onChange:t[0]||(t[0]=function(t){return e.updateBackgroundType(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"solid"},{default:Object(y["withCtx"])((function(){return[ty]})),_:1}),Object(y["createVNode"])(a,{value:"image"},{default:Object(y["withCtx"])((function(){return[ny]})),_:1}),Object(y["createVNode"])(a,{value:"gradient"},{default:Object(y["withCtx"])((function(){return[oy]})),_:1})]})),_:1},8,["value"]),ly,"solid"===e.background.type?(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:0,trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.background.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateBackground({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.background.color||"#fff",style:{flex:"10"}},null,8,["color"])]})),_:1})):"image"===e.background.type?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,style:{flex:"10"},value:e.background.imageSize||"cover",onChange:t[2]||(t[2]=function(t){return e.updateBackground({imageSize:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"contain"},{default:Object(y["withCtx"])((function(){return[cy]})),_:1}),Object(y["createVNode"])(a,{value:"repeat"},{default:Object(y["withCtx"])((function(){return[ay]})),_:1}),Object(y["createVNode"])(a,{value:"cover"},{default:Object(y["withCtx"])((function(){return[ry]})),_:1})]})),_:1},8,["value"])):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:2,style:{flex:"10"},value:e.background.gradientType,onChange:t[3]||(t[3]=function(t){return e.updateBackground({gradientType:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"linear"},{default:Object(y["withCtx"])((function(){return[iy]})),_:1}),Object(y["createVNode"])(a,{value:"radial"},{default:Object(y["withCtx"])((function(){return[uy]})),_:1})]})),_:1},8,["value"]))]),"image"===e.background.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",dy,[Object(y["createVNode"])(f,{onChange:t[4]||(t[4]=function(t){return e.uploadBackgroundImage(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",sy,[Object(y["createElementVNode"])("div",{class:"content",style:Object(y["normalizeStyle"])({backgroundImage:"url(".concat(e.background.image,")")})},[Object(y["createVNode"])(s)],4)])]})),_:1})])):Object(y["createCommentVNode"])("",!0),"gradient"===e.background.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",fy,[Object(y["createElementVNode"])("div",by,[py,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.background.gradientColor[0],"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.updateBackground({gradientColor:[t,e.background.gradientColor[1]]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.background.gradientColor[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",my,[vy,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.background.gradientColor[1],"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.updateBackground({gradientColor:[e.background.gradientColor[0],t]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.background.gradientColor[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.background.gradientType?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Oy,[hy,Object(y["createVNode"])(b,{class:"slider",min:0,max:360,step:15,value:e.background.gradientRotate,onChange:t[7]||(t[7]=function(t){return e.updateBackground({gradientRotate:t})})},null,8,["value"])])):Object(y["createCommentVNode"])("",!0)])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",jy,[Object(y["createVNode"])(p,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.applyBackgroundAllSlide()})},{default:Object(y["withCtx"])((function(){return[yy]})),_:1})]),Object(y["createVNode"])(m),Object(y["createElementVNode"])("div",gy,[xy,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.viewportRatio,onChange:t[9]||(t[9]=function(t){return e.updateViewportRatio(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:.5625},{default:Object(y["withCtx"])((function(){return[Cy]})),_:1},8,["value"]),Object(y["createVNode"])(a,{value:.625},{default:Object(y["withCtx"])((function(){return[ky]})),_:1},8,["value"]),Object(y["createVNode"])(a,{value:.75},{default:Object(y["withCtx"])((function(){return[Ey]})),_:1},8,["value"])]})),_:1},8,["value"])]),Object(y["createVNode"])(m),wy,Object(y["createElementVNode"])("div",Ny,[Iy,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.theme.fontName,onChange:t[10]||(t[10]=function(t){return e.updateTheme({fontName:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{label:"系统字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.availableFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",{style:Object(y["normalizeStyle"])({fontFamily:e.value})},Object(y["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(y["createVNode"])(v,{label:"在线字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.webFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"])]),Object(y["createElementVNode"])("div",Vy,[Sy,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.theme.fontColor,"onUpdate:modelValue":t[11]||(t[11]=function(t){return e.updateTheme({fontColor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.theme.fontColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",By,[Ly,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.theme.backgroundColor,"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.updateTheme({backgroundColor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.theme.backgroundColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",Ty,[My,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.theme.themeColor,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.updateTheme({themeColor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.theme.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["title dropdown",{active:e.showPresetThemes}]),onClick:t[14]||(t[14]=function(t){return e.togglePresetThemesVisible()}),style:{"margin-top":"20px"}},[_y,Object(y["createVNode"])(O,{class:"icon"})],2),e.showPresetThemes?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Dy,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.themes,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"theme-item",key:n,style:Object(y["normalizeStyle"])({backgroundColor:t.background}),onClick:function(n){return e.updateTheme({fontColor:t.text,backgroundColor:t.background,themeColor:t.color})}},[Object(y["createElementVNode"])("div",Ay,[Object(y["createElementVNode"])("div",{class:"text",style:Object(y["normalizeStyle"])({color:t.text})},"Aa",4),Object(y["createElementVNode"])("div",{class:"color-block",style:Object(y["normalizeStyle"])({backgroundColor:t.color})},null,4)])],12,zy)})),128))])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",Fy,[Object(y["createVNode"])(p,{style:{flex:"1"},onClick:t[15]||(t[15]=function(t){return e.applyThemeAllSlide()})},{default:Object(y["withCtx"])((function(){return[Ry]})),_:1})])])}var Hy=[{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"}],qy=Hy,Wy=B,Gy=Object(y["defineComponent"])({name:"slide-design-panel",components:{ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.availableFonts,o=Object(g["c"])(e),l=o.slides,c=o.currentSlide,a=o.viewportRatio,r=o.theme,i=Object(y["computed"])((function(){return c.value.background?c.value.background:{type:"solid",value:"#fff"}})),u=$e(),d=u.addHistorySnapshot,s=function(t){if("solid"===t){var n=Object(L["a"])(Object(L["a"])({},i.value),{},{type:"solid",color:i.value.color||"#fff"});e.updateSlide({background:n})}else if("image"===t){var o=Object(L["a"])(Object(L["a"])({},i.value),{},{type:"image",image:i.value.image||"",imageSize:i.value.imageSize||"cover"});e.updateSlide({background:o})}else{var l=Object(L["a"])(Object(L["a"])({},i.value),{},{type:"gradient",gradientType:i.value.gradientType||"linear",gradientColor:i.value.gradientColor||["#fff","#fff"],gradientRotate:i.value.gradientRotate||0});e.updateSlide({background:l})}d()},f=function(t){e.updateSlide({background:Object(L["a"])(Object(L["a"])({},i.value),t)}),d()},b=function(e){var t=e[0];t&&tt(t).then((function(e){return f({image:e})}))},p=function(){var t=l.value.map((function(e){return Object(L["a"])(Object(L["a"])({},e),{},{background:c.value.background})}));e.setSlides(t),d()},m=function(t){e.setTheme(t)},v=function(){var t,n=JSON.parse(JSON.stringify(l.value)),o=r.value,c=o.themeColor,a=o.backgroundColor,i=o.fontColor,u=o.fontName,s=Object(T["a"])(n);try{for(s.s();!(t=s.n()).done;){var f=t.value;f.background&&"image"===f.background.type||(f.background=Object(L["a"])(Object(L["a"])({},f.background),{},{type:"solid",color:a}));var b,p=f.elements,m=Object(T["a"])(p);try{for(m.s();!(b=m.n()).done;){var v=b.value;if("shape"===v.type)v.fill=c;else if("line"===v.type)v.color=c;else if("text"===v.type)v.defaultColor=i,v.defaultFontName=u,v.fill&&(v.fill=c);else if("table"===v.type){v.theme&&(v.theme.color=c);var O,h=Object(T["a"])(v.data);try{for(h.s();!(O=h.n()).done;){var j,y=O.value,g=Object(T["a"])(y);try{for(g.s();!(j=g.n()).done;){var x=j.value;x.style&&(x.style.color=i,x.style.fontname=u)}}catch(sN){g.e(sN)}finally{g.f()}}}catch(sN){h.e(sN)}finally{h.f()}}else"chart"===v.type?(v.themeColor=[c],v.gridColor=i):"latex"===v.type?v.color=i:"audio"===v.type&&(v.color=c)}}catch(sN){m.e(sN)}finally{m.f()}}}catch(sN){s.e(sN)}finally{s.f()}e.setSlides(n),d()},O=Object(y["ref"])(!0),h=function(){O.value=!O.value},j=function(t){e.setViewportRatio(t)};return{availableFonts:n,background:i,updateBackgroundType:s,updateBackground:f,uploadBackgroundImage:b,applyBackgroundAllSlide:p,themes:qy,theme:r,webFonts:Wy,updateTheme:m,applyThemeAllSlide:v,viewportRatio:a,updateViewportRatio:j,showPresetThemes:O,togglePresetThemesVisible:h}}});n("eb2c");const Uy=Gn()(Gy,[["render",Py],["__scopeId","data-v-0e2f846d"]]);var Xy=Uy,Zy={class:"slide-animation-panel"},Yy={class:"animation-pool"},Jy=["onClick"],Qy={class:"animation-text"},Ky=Object(y["createTextVNode"])("应用到全部");function $y(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Zy,[Object(y["createElementVNode"])("div",Yy,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.animations,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["animation-item",{active:e.currentTurningMode===t.value}]),key:t.label,onClick:function(n){return e.updateTurningMode(t.value)}},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["animation-block",t.value])},null,2),Object(y["createElementVNode"])("div",Qy,Object(y["toDisplayString"])(t.label),1)],10,Jy)})),128))]),Object(y["createVNode"])(a,{style:{width:"100%"},onClick:t[0]||(t[0]=function(t){return e.applyAllSlide()})},{default:Object(y["withCtx"])((function(){return[Ky]})),_:1})])}var eg=Object(y["defineComponent"])({name:"slide-animation-panel",setup:function(){var e=ce(),t=Object(g["c"])(e),n=t.slides,o=t.currentSlide,l=Object(y["computed"])((function(){return o.value.turningMode||"slideY"})),c=[{label:"无",value:"no"},{label:"淡入淡出",value:"fade"},{label:"左右推移",value:"slideX"},{label:"上下推移",value:"slideY"}],a=$e(),r=a.addHistorySnapshot,i=function(t){t!==l.value&&(e.updateSlide({turningMode:t}),r())},u=function(){var t=n.value.map((function(e){return Object(L["a"])(Object(L["a"])({},e),{},{turningMode:o.value.turningMode})}));e.setSlides(t),r()};return{currentTurningMode:l,animations:c,updateTurningMode:i,applyAllSlide:u}}});n("6e42");const tg=Gn()(eg,[["render",$y],["__scopeId","data-v-251ceb05"]]);var ng=tg,og={class:"multi-position-panel"},lg=Object(y["createTextVNode"])("水平均匀分布"),cg=Object(y["createTextVNode"])("垂直均匀分布"),ag=Object(y["createTextVNode"])("组合"),rg=Object(y["createTextVNode"])("取消组合");function ig(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconAlignLeft"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("Tooltip"),u=Object(y["resolveComponent"])("IconAlignHorizontally"),d=Object(y["resolveComponent"])("IconAlignRight"),s=Object(y["resolveComponent"])("ButtonGroup"),f=Object(y["resolveComponent"])("IconAlignTop"),b=Object(y["resolveComponent"])("IconAlignVertically"),p=Object(y["resolveComponent"])("IconAlignBottom"),m=Object(y["resolveComponent"])("Divider"),v=Object(y["resolveComponent"])("IconGroup"),O=Object(y["resolveComponent"])("IconUngroup");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",og,[Object(y["createVNode"])(s,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.alignElement("left")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.alignElement("horizontal")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.alignElement("right")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(s,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.alignElement("top")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElement("vertical")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElement("bottom")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),e.displayItemCount>2?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:0,class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.uniformHorizontalDisplay()})},{default:Object(y["withCtx"])((function(){return[lg]})),_:1}),Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.uniformVerticalDisplay()})},{default:Object(y["withCtx"])((function(){return[cg]})),_:1})]})),_:1})):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(m),Object(y["createVNode"])(s,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{disabled:!e.canCombine,onClick:t[8]||(t[8]=function(t){return e.combineElements()}),style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{style:{"margin-right":"3px"}}),ag]})),_:1},8,["disabled"]),Object(y["createVNode"])(r,{disabled:e.canCombine,onClick:t[9]||(t[9]=function(t){return e.uncombineElements()}),style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{style:{"margin-right":"3px"}}),rg]})),_:1},8,["disabled"])]})),_:1})])}var ug=function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeElementList,l=Object(g["c"])(e),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=function(t){var l,a=Ue(o.value),i=a.minX,u=a.maxX,d=a.minY,s=a.maxY,f=JSON.parse(JSON.stringify(c.value.elements)),b={},p=Object(T["a"])(o.value);try{var m=function(){var e=l.value;if(e.groupId&&!b[e.groupId]){var t=o.value.filter((function(t){return t.groupId===e.groupId}));b[e.groupId]=Ue(t)}};for(p.s();!(l=p.n()).done;)m()}catch(sN){p.e(sN)}finally{p.f()}if(t===E.LEFT)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.minX-i;e.left=e.left-o}else if("rotate"in e&&e.rotate){var l=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),c=l.offsetX;e.left=i-c}else e.left=i}));else if(t===E.RIGHT)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.maxX-u;e.left=e.left-o}else{var l="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;if("rotate"in e&&e.rotate){var c=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetX;e.left=u-l+a}else e.left=u-l}}));else if(t===E.TOP)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.minY-d;e.top=e.top-o}else if("rotate"in e&&e.rotate){var l=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),c=l.offsetY;e.top=d-c}else e.top=d}));else if(t===E.BOTTOM)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.maxY-s;e.top=e.top-o}else{var l="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;if("rotate"in e&&e.rotate){var c=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetY;e.top=s-l+a}else e.top=s-l}}));else if(t===E.HORIZONTAL){var v=(i+u)/2;f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=(t.maxX+t.minX)/2,l=o-v;e.left=e.left-l}else{var c="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;e.left=v-c/2}}))}else if(t===E.VERTICAL){var O=(d+s)/2;f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=(t.maxY+t.minY)/2,l=o-O;e.top=e.top-l}else{var c="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;e.top=O-c/2}}))}e.updateSlide({elements:f}),r()};return{alignActiveElement:i}},dg=(n("4e82"),function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeElementList,l=Object(g["c"])(e),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=Object(y["computed"])((function(){var e,t=0,n=[],l=Object(T["a"])(o.value);try{for(l.s();!(e=l.n()).done;){var c=e.value;c.groupId?n.includes(c.groupId)||(n.push(c.groupId),t+=1):t+=1}}catch(sN){l.e(sN)}finally{l.f()}return t})),u=function(){var t,l=Ue(o.value),a=l.minX,i=l.maxX,u=JSON.parse(JSON.stringify(o.value)),d=JSON.parse(JSON.stringify(c.value.elements)),s=[],f=[],b=Object(T["a"])(u);try{var p=function(){var e=t.value;if(e.groupId){var n=f.find((function(t){return t.groupId===e.groupId}));n?f=f.map((function(t){return t.groupId===e.groupId?Object(L["a"])(Object(L["a"])({},t),{},{els:[].concat(Object(K["a"])(t.els),[e])}):t})):f.push({groupId:e.groupId,els:[e]})}else{var o=Ge(e),l=o.minX,c=o.maxX;s.push({min:l,max:c,el:e})}};for(b.s();!(t=b.n()).done;)p()}catch(sN){b.e(sN)}finally{b.f()}var m,v=[],O=Object(T["a"])(f);try{for(O.s();!(m=O.n()).done;){var h=m.value,j=Ue(h.els),y=j.minX,g=j.maxX;v.push({min:y,max:g,els:h.els})}}catch(sN){O.e(sN)}finally{O.f()}var x=[].concat(s,v);x.sort((function(e,t){return e.min-t.min}));var C,k=0,E=Object(T["a"])(x);try{for(E.s();!(C=E.n()).done;){var w=C.value,N=w.max-w.min;k+=N}}catch(sN){E.e(sN)}finally{E.f()}var I=(i-a-k)/(x.length-1),V=[],S=x[0],B={min:S.min,max:S.max};if("el"in S)V.push({pos:S.min,el:S.el});else{var M,_=Object(T["a"])(S.els);try{for(_.s();!(M=_.n()).done;){var D=M.value,z=Ge(D),A=z.minX;V.push({pos:A,el:D})}}catch(sN){_.e(sN)}finally{_.f()}}for(var F=1;F","l","o","g","l","g","l","n","⨂","⨁","⨄","⨃","⨅","⨆","√","∛","∜","∝","∞","∟","∠","∡","∢","∧","∨","∩","∪","∫","∬","∭","∮","∯","∰","∱","∲","∳","∴","∵","∼","∽","∾","∿","≃","≄","≅","≆","≇","≈","≊","≋","≌","≍","≎","≏","≐","≑","≒","≓","≔","≕","≤","≥","≦","≧","≨","≩","≪","≫","≺","≻","≼","≽","≾","≿","⊀","⊁","⊂","⊃","⊄","⊅","⊆","⊇","⊈","⊉","⊊","⊋","⊏","⊐","⊑","⊒","⊓","⊔","⊢","⊣","⊤","⊥","⊦","⊧","⊨","⊩","⊪","⊫","⊬","⊭","⊮","⊯","⊲","⊳","⊴","⊵","⋀","⋁","⋂","⋃","⋉","⋊","⋋","⋌","⟨","⟩","⟪","⟫","⟮","⟯","⧼","⧽","⦰"]},{key:"arrow",label:"箭头",children:["←","↑","→","↓","↔","↕","↖","↗","↘","↙","↚","↛","↜","↝","↞","↟","↠","↡","↢","↣","↤","↥","↦","↧","↨","↫","↬","↭","↮","↯","↰","↱","↲","↳","↴","↵","↶","↷","↸","↹","↺","↻","↼","↽","↾","↿","⇀","⇁","⇂","⇃","⇄","⇅","⇆","⇇","⇈","⇉","⇊","⇋","⇌","⇍","⇎","⇏","⇐","⇑","⇒","⇓","⇔","⇕","⇖","⇗","⇘","⇙","⇚","⇛","⇜","⇝","⇞","⇟","⇠","⇡","⇢","⇣","⇤","⇥","⇦","⇧","⇨","⇩","⇪","⇫","⇬","⇭","⇮","⇯","⇰","⇱","⇲","⇳","⇴","⇵","⇶","⇷","⇸","⇹","⇺","⇻","⇼","⇽","⇾","⇿"]},{key:"graph",label:"图形",children:["▢","▣","▤","▥","▦","▧","▨","▩","▭","▮","▯","▰","▱","▲","▷","▼","◁","◈","◉","◍","◐","◑","◒","◓","◔","◕","◧","◨","◩","◪","◫","◬","◭","◮"]}],xg=gg,Cg=Object(y["defineComponent"])({name:"symbol-panel",setup:function(){var e=Object(y["ref"])(xg[0].key),t=Object(y["computed"])((function(){var t=xg.find((function(t){return t.key===e.value}));return(null===t||void 0===t?void 0:t.children)||[]})),n=function(e){Cr.emit(za.RICH_TEXT_COMMAND,{command:"insert",value:e})};return{symbolPoolList:xg,symbolPool:t,selectedSymbolKey:e,selectSymbol:n}}});n("56b6");const kg=Gn()(Cg,[["render",yg],["__scopeId","data-v-6b8c5938"]]);var Eg=kg,wg=Object(y["defineComponent"])({name:"toolbar",setup:function(){var e=ae(),t=Object(g["c"])(e),n=t.activeElementIdList,o=t.handleElement,l=t.toolbarState,c=Object(y["computed"])((function(){var e;return"text"===(null===(e=o.value)||void 0===e?void 0:e.type)?[{label:"样式",value:C.EL_STYLE},{label:"符号",value:C.SYMBOL},{label:"位置",value:C.EL_POSITION},{label:"动画",value:C.EL_ANIMATION}]:[{label:"样式",value:C.EL_STYLE},{label:"位置",value:C.EL_POSITION},{label:"动画",value:C.EL_ANIMATION}]})),a=[{label:"设计",value:C.SLIDE_DESIGN},{label:"切换",value:C.SLIDE_ANIMATION},{label:"动画",value:C.EL_ANIMATION}],r=[{label:"位置",value:C.MULTI_POSITION},{label:"样式",value:C.EL_STYLE}],i=function(t){e.setToolbarState(t)},u=Object(y["computed"])((function(){return n.value.length?n.value.length>1?r:c.value:a}));Object(y["watch"])(u,(function(){var t=u.value.map((function(e){return e.value}));t.includes(l.value)||e.setToolbarState(t[0])}));var d=Object(y["computed"])((function(){var e,t=(e={},Object(fe["a"])(e,C.EL_STYLE,Qh),Object(fe["a"])(e,C.EL_POSITION,yj),Object(fe["a"])(e,C.EL_ANIMATION,Jj),Object(fe["a"])(e,C.SLIDE_DESIGN,Xy),Object(fe["a"])(e,C.SLIDE_ANIMATION,ng),Object(fe["a"])(e,C.MULTI_POSITION,bg),Object(fe["a"])(e,C.SYMBOL,Eg),e);return t[l.value]||null}));return{toolbarState:l,currentTabs:u,setToolbarState:i,currentPanelComponent:d}}});n("3b1d");const Ng=Gn()(wg,[["render",cp],["__scopeId","data-v-84601b0a"]]);var Ig=Ng,Vg={class:"remark"},Sg=["value"];function Bg(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Vg,[Object(y["createElementVNode"])("div",{class:"resize-handler",onMousedown:t[0]||(t[0]=function(t){return e.resize(t)})},null,32),Object(y["createElementVNode"])("textarea",{value:e.remark,placeholder:"点击输入演讲者备注",onInput:t[1]||(t[1]=function(t){return e.handleInput(t)})},null,40,Sg)])}var Lg=Object(y["defineComponent"])({name:"remark",emits:["update:height"],props:{height:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=ce(),l=Object(g["c"])(o),c=l.currentSlide,a=Object(y["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.updateSlide({remark:t})},i=function(t){var o=!0,l=t.pageY,c=e.height;document.onmousemove=function(e){if(o){var t=e.pageY,a=t-l,r=-a+c;r<40&&(r=40),r>120&&(r=120),n("update:height",r)}},document.onmouseup=function(){o=!1,document.onmousemove=null,document.onmouseup=null}};return{remark:a,handleInput:r,resize:i}}});n("6339");const Tg=Gn()(Lg,[["render",Bg],["__scopeId","data-v-7ed67bb3"]]);var Mg=Tg,_g=Object(y["defineComponent"])({name:"editor",components:{EditorHeader:Uc,Canvas:_s,CanvasTool:zb,Thumbnails:ep,Toolbar:Ig,Remark:Mg},setup:function(){var e=Object(y["ref"])(40);return gt(),xt(),{remarkHeight:e}}});n("1fec");const Dg=Gn()(_g,[["render",Ee],["__scopeId","data-v-55178b6a"]]);var zg=Dg,Ag={class:"pptist-screen"};function Fg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BaseView"),r=Object(y["resolveComponent"])("PresenterView");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ag,["base"===e.viewMode?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,changeViewMode:e.changeViewMode},null,8,["changeViewMode"])):"presenter"===e.viewMode?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,changeViewMode:e.changeViewMode},null,8,["changeViewMode"])):Object(y["createCommentVNode"])("",!0)])}var Rg={class:"tools-left"},Pg={class:"content"};function Hg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ScreenSlideList"),r=Object(y["resolveComponent"])("SlideThumbnails"),i=Object(y["resolveComponent"])("WritingBoardTool"),u=Object(y["resolveComponent"])("IconLeftTwo"),d=Object(y["resolveComponent"])("IconRightTwo"),s=Object(y["resolveComponent"])("IconWrite"),f=Object(y["resolveComponent"])("Tooltip"),b=Object(y["resolveComponent"])("IconMagic"),p=Object(y["resolveComponent"])("IconListView"),m=Object(y["resolveComponent"])("IconOffScreenOne"),v=Object(y["resolveComponent"])("IconFullScreenOne"),O=Object(y["resolveComponent"])("IconPower"),h=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["base-view",{"laser-pen":e.laserPen}])},[Object(y["withDirectives"])(Object(y["createVNode"])(a,{slideWidth:e.slideWidth,slideHeight:e.slideHeight,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen,onMousewheel:t[0]||(t[0]=function(t){return e.mousewheelListener(t)}),onTouchstart:t[1]||(t[1]=function(t){return e.touchStartListener(t)}),onTouchend:t[2]||(t[2]=function(t){return e.touchEndListener(t)})},null,8,["slideWidth","slideHeight","animationIndex","turnSlideToId","manualExitFullscreen"]),[[h,e.contextmenus]]),e.slideThumbnailModelVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,turnSlideToIndex:e.turnSlideToIndex,onClose:t[3]||(t[3]=function(t){return e.slideThumbnailModelVisible=!1})},null,8,["turnSlideToIndex"])):Object(y["createCommentVNode"])("",!0),e.writingBoardToolVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:1,slideWidth:e.slideWidth,slideHeight:e.slideHeight,onClose:t[4]||(t[4]=function(t){return e.writingBoardToolVisible=!1})},null,8,["slideWidth","slideHeight"])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",Rg,[Object(y["createVNode"])(u,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[5]||(t[5]=function(t){return e.execPrev()})}),Object(y["createVNode"])(d,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[6]||(t[6]=function(t){return e.execNext()})})]),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["tools-right",{visible:e.rightToolsVisible}]),onMouseleave:t[14]||(t[14]=function(t){return e.rightToolsVisible=!1}),onMouseenter:t[15]||(t[15]=function(t){return e.rightToolsVisible=!0})},[Object(y["createElementVNode"])("div",Pg,[Object(y["createElementVNode"])("div",{class:"tool-btn page-number",onClick:t[7]||(t[7]=function(t){return e.slideThumbnailModelVisible=!0})},"幻灯片 "+Object(y["toDisplayString"])(e.slideIndex+1)+" / "+Object(y["toDisplayString"])(e.slides.length),1),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"画笔工具"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(s,{class:"tool-btn",onClick:t[8]||(t[8]=function(t){return e.writingBoardToolVisible=!0})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"激光笔"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{class:Object(y["normalizeClass"])(["tool-btn",{active:e.laserPen}]),onClick:t[9]||(t[9]=function(t){return e.laserPen=!e.laserPen})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"演讲者视图"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{class:"tool-btn",onClick:t[10]||(t[10]=function(t){return e.changeViewMode("presenter")})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:e.fullscreenState?"退出全屏":"进入全屏"},{default:Object(y["withCtx"])((function(){return[e.fullscreenState?(Object(y["openBlock"])(),Object(y["createBlock"])(m,{key:0,class:"tool-btn",onClick:t[11]||(t[11]=function(t){return e.manualExitFullscreen()})})):(Object(y["openBlock"])(),Object(y["createBlock"])(v,{key:1,class:"tool-btn",onClick:t[12]||(t[12]=function(t){return e.enterFullscreen()})}))]})),_:1},8,["mouseEnterDelay","title"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"结束放映"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{class:"tool-btn",onClick:t[13]||(t[13]=function(t){return e.exitScreening()})})]})),_:1},8,["mouseEnterDelay"])])],34)],2)}var qg=function(){var e=ce(),t=Object(g["c"])(e),n=t.slides,o=t.slideIndex,l=t.currentSlide,c=Object(y["computed"])((function(){return l.value.animations||[]})),a=Object(y["ref"])(0),r=function(){var e="animate__",t=c.value[a.value];a.value+=1;var n=document.querySelector("#screen-element-".concat(t.elId," [class^=base-element-]"));if(n){var o="".concat(e).concat(t.type);document.documentElement.style.setProperty("--animate-duration","".concat(t.duration,"ms")),n.classList.add("".concat(e,"animated"),o);var l=function(){document.documentElement.style.removeProperty("--animate-duration"),n.classList.remove("".concat(e,"animated"),o)};n.addEventListener("animationend",l,{once:!0})}},i=Object(y["ref"])(0),u=function(){i.value&&(clearInterval(i.value),i.value=0)};Object(y["onUnmounted"])(u);var d=Object(te["throttle"])((function(e){Se["a"].success(e)}),1e3,{leading:!0,trailing:!1}),s=function(){if(c.value.length&&a.value>0)a.value-=1;else if(o.value>0){e.updateSlideIndex(o.value-1);var t=c.value?c.value.length:0;a.value=t}else d("已经是第一页了")},f=function(){c.value.length&&a.value0&&f()}),500,{leading:!0,trailing:!1}),m=Object(y["ref"])(null),v=function(e){m.value={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY}},O=function(e){if(m.value){var t=Math.abs(m.value.x-e.changedTouches[0].pageX),n=e.changedTouches[0].pageY-m.value.y;Math.abs(n)>t&&Math.abs(n)>50&&(m.value=null,n>0?s():f())}},h=function(e){var t=e.key.toUpperCase();t===V.UP||t===V.LEFT?s():t!==V.DOWN&&t!==V.RIGHT&&t!==V.SPACE&&t!==V.ENTER||f()};Object(y["onMounted"])((function(){return document.addEventListener("keydown",h)})),Object(y["onUnmounted"])((function(){return document.removeEventListener("keydown",h)}));var j=function(){e.updateSlideIndex(o.value-1),a.value=0},x=function(){e.updateSlideIndex(o.value+1),a.value=0},C=function(t){e.updateSlideIndex(t),a.value=0},k=function(t){var o=n.value.findIndex((function(e){return e.id===t}));-1!==o&&(e.updateSlideIndex(o),a.value=0)};return{autoPlayTimer:i,autoPlay:b,closeAutoPlay:u,mousewheelListener:p,touchStartListener:v,touchEndListener:O,turnPrevSlide:j,turnNextSlide:x,turnSlideToIndex:C,turnSlideToId:k,execPrev:s,execNext:f,animationIndex:a}},Wg=function(e){var t=ce(),n=Object(g["c"])(t),o=n.viewportRatio,l=Object(y["ref"])(0),c=Object(y["ref"])(0),a=function(){var t,n,a=(null===e||void 0===e?void 0:e.value)||document.body,r=a.clientWidth,i=a.clientHeight;i/r===o.value?(t=r,n=i):i/r>o.value?(t=r,n=r*o.value):(t=i/o.value,n=i),l.value=t,c.value=n};return Object(y["onMounted"])((function(){a(),window.addEventListener("resize",a)})),Object(y["onUnmounted"])((function(){window.removeEventListener("resize",a)})),{slideWidth:l,slideHeight:c}},Gg=function(){var e=Object(y["ref"])(!0),t=Object(y["ref"])(!0),n=jt(),o=n.exitScreening,l=function(){e.value=ht(),!e.value&&t.value&&o(),t.value=!0};Object(y["onMounted"])((function(){e.value=ht(),window.addEventListener("resize",l)})),Object(y["onUnmounted"])((function(){return window.removeEventListener("resize",l)}));var c=function(){e.value&&(t.value=!1,Ot())};return{fullscreenState:e,manualExitFullscreen:c}},Ug={class:"screen-slide-list"};function Xg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ScreenSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ug,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["slide-item","turning-mode-".concat(t.turningMode||"slideY"),{current:n===e.slideIndex,before:ne.slideIndex,hide:(n===e.slideIndex-1||n===e.slideIndex+1)&&t.turningMode!==e.currentSlide.turningMode}]),key:t.id},[Math.abs(e.slideIndex-n)<2?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:"slide-content",style:Object(y["normalizeStyle"])({width:e.slideWidth+"px",height:e.slideHeight+"px"})},[Object(y["createVNode"])(a,{slide:t,scale:e.scale,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen},null,8,["slide","scale","animationIndex","turnSlideToId","manualExitFullscreen"])],4)):Object(y["createCommentVNode"])("",!0)],2)})),128))])}function Zg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ScreenElement");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"screen-slide",style:Object(y["normalizeStyle"])({width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")})},[Object(y["createElementVNode"])("div",{class:"background",style:Object(y["normalizeStyle"])(Object(L["a"])({},e.backgroundStyle))},null,4),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slide.elements,(function(t,n){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:t.id,elementInfo:t,elementIndex:n+1,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen},null,8,["elementInfo","elementIndex","animationIndex","turnSlideToId","manualExitFullscreen"])})),128))],4)}var Yg=["id","title"];function Jg(e,t,n,o,l,c){var a;return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["screen-element",{link:e.elementInfo.link}]),id:"screen-element-".concat(e.elementInfo.id),style:Object(y["normalizeStyle"])({zIndex:e.elementIndex,color:e.theme.fontColor,fontFamily:e.theme.fontName,visibility:e.needWaitAnimation?"hidden":"visible"}),title:(null===(a=e.elementInfo.link)||void 0===a?void 0:a.target)||"",onClick:t[0]||(t[0]=function(t){return e.openLink()})},[(Object(y["openBlock"])(),Object(y["createBlock"])(Object(y["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo},null,8,["elementInfo"]))],14,Yg)}function Qg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BaseChartElement");return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"screen-element-chart",elementInfo:e.elementInfo,needScaleSize:!1},null,8,["elementInfo"])}var Kg=Object(y["defineComponent"])({name:"screen-element-chart",components:{BaseChartElement:tc},props:{elementInfo:{type:Object,required:!0}}});const $g=Gn()(Kg,[["render",Qg]]);var ex=$g,tx={class:"element-content"};function nx(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("VideoPlayer");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"screen-element-video",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["createElementVNode"])("div",tx,[e.inCurrentSlide?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,width:e.elementInfo.width,height:e.elementInfo.height,src:e.elementInfo.src,poster:e.elementInfo.poster,scale:e.scale},null,8,["width","height","src","poster","scale"])):Object(y["createCommentVNode"])("",!0)])],4)],4)}var ox=Object(y["defineComponent"])({name:"screen-element-video",components:{VideoPlayer:lu},props:{elementInfo:{type:Object,required:!0}},setup:function(){var e=Object(g["c"])(ce()),t=e.currentSlide,n=Object(y["inject"])(vo)||Object(y["ref"])(1),o=Object(y["inject"])(Oo)||Object(y["ref"])(""),l=Object(y["computed"])((function(){return t.value.id===o.value}));return{scale:n,inCurrentSlide:l}}});n("0419");const lx=Gn()(ox,[["render",nx],["__scopeId","data-v-0ef8b6c0"]]);var cx=lx,ax={class:"element-content"};function rx(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconVolumeNotice"),r=Object(y["resolveComponent"])("AudioPlayer");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"screen-element-audio",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["createElementVNode"])("div",ax,[Object(y["createVNode"])(a,{class:"audio-icon",style:Object(y["normalizeStyle"])({fontSize:e.audioIconSize,color:e.elementInfo.color}),onClick:t[0]||(t[0]=function(t){return e.toggle()})},null,8,["style"]),e.inCurrentSlide?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,class:"audio-player",ref:"audioPlayerRef",style:Object(y["normalizeStyle"])(Object(L["a"])({},e.audioPlayerPosition)),src:e.elementInfo.src,loop:e.elementInfo.loop,autoplay:e.elementInfo.autoplay,scale:e.scale},null,8,["style","src","loop","autoplay","scale"])):Object(y["createCommentVNode"])("",!0)])],4)],4)}var ix=Object(y["defineComponent"])({name:"screen-element-audio",components:{AudioPlayer:Bu},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.viewportRatio,o=t.currentSlide,l=Object(y["inject"])(vo)||Object(y["ref"])(1),c=Object(y["inject"])(Oo)||Object(y["ref"])(""),a=Object(y["computed"])((function(){return o.value.id===c.value})),r=Object(y["computed"])((function(){return Math.min(e.elementInfo.width,e.elementInfo.height)+"px"})),i=Object(y["computed"])((function(){var t=nt,o=nt*n.value,c=280/l.value,a=50/l.value,r=e.elementInfo.width,i=e.elementInfo.height,u=e.elementInfo.left,d=e.elementInfo.top,s=0,f=i;return u+c>=t&&(s=r-c),d+i+a>=o&&(f=-a),{left:s+"px",top:f+"px"}})),u=Object(y["ref"])(),d=function(){u.value&&u.value.toggle()};return{scale:l,inCurrentSlide:a,audioIconSize:r,audioPlayerPosition:i,audioPlayerRef:u,toggle:d}}});n("a52e");const ux=Gn()(ix,[["render",rx],["__scopeId","data-v-1adba489"]]);var dx=ux,sx=Object(y["defineComponent"])({name:"screen-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},animationIndex:{type:Number,default:-1},turnSlideToId:{type:Function,required:!0},manualExitFullscreen:{type:Function,required:!0}},setup:function(e){var t=Object(y["computed"])((function(){var t,n=(t={},Object(fe["a"])(t,Ne.IMAGE,tl),Object(fe["a"])(t,Ne.TEXT,fl),Object(fe["a"])(t,Ne.SHAPE,Bl),Object(fe["a"])(t,Ne.LINE,Gl),Object(fe["a"])(t,Ne.CHART,ex),Object(fe["a"])(t,Ne.TABLE,Oc),Object(fe["a"])(t,Ne.LATEX,Ec),Object(fe["a"])(t,Ne.VIDEO,cx),Object(fe["a"])(t,Ne.AUDIO,dx),t);return n[e.elementInfo.type]||null})),n=Object(g["c"])(ce()),o=n.currentSlide,l=n.theme,c=Object(y["computed"])((function(){var t=o.value.animations||[],n=t.findIndex((function(t){return t.elId===e.elementInfo.id}));return-1!==n&&n>=e.animationIndex})),a=function(){var t=e.elementInfo.link;t&&("web"===t.type?(e.manualExitFullscreen(),window.open(t.target)):"slide"===t.type&&e.turnSlideToId(t.target))};return{currentElementComponent:t,needWaitAnimation:c,theme:l,openLink:a}}});n("70bc");const fx=Gn()(sx,[["render",Jg],["__scopeId","data-v-360fef5f"]]);var bx=fx,px=Object(y["defineComponent"])({name:"screen-slide",components:{ScreenElement:bx},props:{slide:{type:Object,required:!0},scale:{type:Number,required:!0},animationIndex:{type:Number,default:-1},turnSlideToId:{type:Function,required:!0},manualExitFullscreen:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.viewportRatio,o=Object(y["computed"])((function(){return e.slide.background})),l=ho(o),c=l.backgroundStyle,a=Object(y["computed"])((function(){return e.slide.id}));return Object(y["provide"])(Oo,a),{backgroundStyle:c,VIEWPORT_SIZE:nt,viewportRatio:n}}});n("ad1c");const mx=Gn()(px,[["render",Zg],["__scopeId","data-v-30708559"]]);var vx=mx,Ox=Object(y["defineComponent"])({name:"screen-slide-list",components:{ScreenSlide:vx},props:{slideWidth:{type:Number,required:!0},slideHeight:{type:Number,required:!0},animationIndex:{type:Number,default:-1},turnSlideToId:{type:Function,required:!0},manualExitFullscreen:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.slides,o=t.slideIndex,l=t.currentSlide,c=Object(y["computed"])((function(){return e.slideWidth/nt}));return Object(y["provide"])(vo,c),{slides:n,slideIndex:o,currentSlide:l,scale:c}}});n("cc60");const hx=Gn()(Ox,[["render",Xg],["__scopeId","data-v-056764ac"]]);var jx=hx,yx={class:"slide-thumbnails"},gx={class:"return-button"},xx={class:"slide-thumbnails-content"},Cx=["onClick"];function kx(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconArrowCircleLeft"),r=Object(y["resolveComponent"])("ThumbnailSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",yx,[Object(y["createElementVNode"])("div",gx,[Object(y["createVNode"])(a,{class:"icon",onClick:t[0]||(t[0]=function(t){return e.close()})})]),Object(y["createElementVNode"])("div",xx,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["thumbnail",{active:n===e.slideIndex}]),key:t.id,onClick:function(t){return e.turnSlide(n)}},[Object(y["createVNode"])(r,{slide:t,size:150,visible:n=o?a:c-i/o*c,-1===r?n:1*n/3+2*r/3},C=function(t,n){var o=(new Date).getTime();if("pen"===e.model){var c=g(t,n),i=o-a,u=x(c,i);h(t,n,u),r=u}else"mark"===e.model?h(t,n,zx):j(t,n);l={x:t,y:n},a=(new Date).getTime()},k=function(e){if(!o.value)return[0,0];var t=e instanceof MouseEvent?e:e.changedTouches[0],n=o.value.getBoundingClientRect(),l=t.pageX-n.x,c=t.pageY-n.y;return[l,c]},E=function(e){var t=k(e),n=Object(He["a"])(t,2),o=n[0],r=n[1],d=o/f.value,s=r/b.value;c=!0,l={x:d,y:s},a=(new Date).getTime(),e instanceof TouchEvent&&(i.value={x:o,y:r},u.value=!0)},w=function(e){var t=k(e),n=Object(He["a"])(t,2),o=n[0],l=n[1],a=o/f.value,r=l/b.value;i.value={x:o,y:l},c&&C(a,r)},N=function(){c&&(c=!1)},I=function(){t&&o.value&&t.clearRect(0,0,o.value.width,o.value.height)};return{mouse:i,mouseInCanvas:u,penSize:_x,rubberSize:Dx,markSize:zx,writingBoardRef:n,canvasRef:o,canvasWidth:d,canvasHeight:s,handleMousedown:E,handleMousemove:w,handleMouseup:N,clearCanvas:I}}});n("7307");const Fx=Gn()(Ax,[["render",Mx],["__scopeId","data-v-3dfd4579"]]);var Rx=Fx,Px=["#000000","#ffffff","#1e497b","#4e81bb","#e2534d","#9aba60","#8165a0","#47acc5","#f9974c","#ffff3a"],Hx=Object(y["defineComponent"])({name:"writing-board-tool",emits:["close"],components:{WritingBoard:Rx},props:{slideWidth:{type:Number,required:!0},slideHeight:{type:Number,required:!0},position:{type:Object,default:function(){return{right:"5px",bottom:"5px"}}}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(),l=Object(y["ref"])("#e2534d"),c=Object(y["ref"])("pen"),a=Object(y["ref"])(!1),r=function(e){c.value=e},i=function(){o.value.clearCanvas()},u=function(e){"eraser"===c.value&&(c.value="pen"),l.value=e},d=function(){n("close")};return{writingBoardRef:o,writingBoardColors:Px,writingBoardColor:l,writingBoardModel:c,blackboard:a,changeModel:r,clearCanvas:i,changeColor:u,closeWritingBoard:d}}});n("beeb");const qx=Gn()(Hx,[["render",Bx],["__scopeId","data-v-19b10edd"]]);var Wx=qx,Gx=Object(y["defineComponent"])({name:"screen",components:{ScreenSlideList:jx,SlideThumbnails:Nx,WritingBoardTool:Wx},props:{changeViewMode:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.slides,o=t.slideIndex,l=qg(),c=l.autoPlayTimer,a=l.autoPlay,r=l.closeAutoPlay,i=l.mousewheelListener,u=l.touchStartListener,d=l.touchEndListener,s=l.turnPrevSlide,f=l.turnNextSlide,b=l.turnSlideToIndex,p=l.turnSlideToId,m=l.execPrev,v=l.execNext,O=l.animationIndex,h=Wg(),j=h.slideWidth,x=h.slideHeight,C=jt(),k=C.exitScreening,E=Gg(),w=E.fullscreenState,N=E.manualExitFullscreen,I=Object(y["ref"])(!1),V=Object(y["ref"])(!1),S=Object(y["ref"])(!1),B=Object(y["ref"])(!1),L=function(){return[{text:"上一页",subText:"↑ ←",disable:o.value<=0,handler:function(){return s()}},{text:"下一页",subText:"↓ →",disable:o.value>=n.value.length-1,handler:function(){return f()}},{text:"第一页",disable:0===o.value,handler:function(){return b(0)}},{text:"最后一页",disable:o.value===n.value.length-1,handler:function(){return b(n.value.length-1)}},{divider:!0},{text:"显示工具栏",handler:function(){return I.value=!0}},{text:"查看所有幻灯片",handler:function(){return S.value=!0}},{text:"画笔工具",handler:function(){return V.value=!0}},{text:"演讲者视图",handler:function(){return e.changeViewMode("presenter")}},{divider:!0},{text:c.value?"取消自动放映":"自动放映",handler:c.value?r:a},{text:"结束放映",subText:"ESC",handler:k}]};return{slides:n,slideIndex:o,slideWidth:j,slideHeight:x,mousewheelListener:i,touchStartListener:u,touchEndListener:d,animationIndex:O,contextmenus:L,execPrev:m,execNext:v,turnSlideToIndex:b,turnSlideToId:p,slideThumbnailModelVisible:S,writingBoardToolVisible:V,rightToolsVisible:I,fullscreenState:w,exitScreening:k,enterFullscreen:vt,manualExitFullscreen:N,laserPen:B}}});n("03e7");const Ux=Gn()(Gx,[["render",Hg],["__scopeId","data-v-2ed6935e"]]);var Xx=Ux,Zx=function(e){return Object(y["pushScopeId"])("data-v-4887c6d4"),e=e(),Object(y["popScopeId"])(),e},Yx={class:"presenter-view"},Jx={class:"toolbar"},Qx=Zx((function(){return Object(y["createElementVNode"])("span",null,"普通视图",-1)})),Kx=Zx((function(){return Object(y["createElementVNode"])("span",null,"画笔",-1)})),$x=Zx((function(){return Object(y["createElementVNode"])("span",null,"激光笔",-1)})),eC=Zx((function(){return Object(y["createElementVNode"])("span",null,"结束放映",-1)})),tC={class:"content"},nC=["onClick"],oC={class:"remark"},lC={class:"header"},cC=Zx((function(){return Object(y["createElementVNode"])("span",null,"演讲者备注",-1)})),aC=["innerHTML"],rC={class:"remark-scale"};function iC(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconListView"),r=Object(y["resolveComponent"])("IconWrite"),i=Object(y["resolveComponent"])("IconMagic"),u=Object(y["resolveComponent"])("IconOffScreenOne"),d=Object(y["resolveComponent"])("Divider"),s=Object(y["resolveComponent"])("IconPower"),f=Object(y["resolveComponent"])("ScreenSlideList"),b=Object(y["resolveComponent"])("WritingBoardTool"),p=Object(y["resolveComponent"])("ThumbnailSlide"),m=Object(y["resolveComponent"])("IconMinus"),v=Object(y["resolveComponent"])("IconPlus"),O=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Yx,[Object(y["createElementVNode"])("div",Jx,[Object(y["createElementVNode"])("div",{class:"tool-btn",onClick:t[0]||(t[0]=function(t){return e.changeViewMode("base")})},[Object(y["createVNode"])(a,{class:"tool-icon"}),Qx]),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["tool-btn",{active:e.writingBoardToolVisible}]),onClick:t[1]||(t[1]=function(t){return e.writingBoardToolVisible=!e.writingBoardToolVisible})},[Object(y["createVNode"])(r,{class:"tool-icon"}),Kx],2),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["tool-btn",{active:e.laserPen}]),onClick:t[2]||(t[2]=function(t){return e.laserPen=!e.laserPen})},[Object(y["createVNode"])(i,{class:"tool-icon"}),$x],2),Object(y["createElementVNode"])("div",{class:"tool-btn",onClick:t[3]||(t[3]=function(){return e.fullscreenState?e.manualExitFullscreen():e.enterFullscreen()})},[e.fullscreenState?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:0,class:"tool-icon"})):(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:1,class:"tool-icon"})),Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.fullscreenState?"退出全屏":"全屏"),1)]),Object(y["createVNode"])(d,{class:"divider"}),Object(y["createElementVNode"])("div",{class:"tool-btn",onClick:t[4]||(t[4]=function(t){return e.exitScreening()})},[Object(y["createVNode"])(s,{class:"tool-icon"}),eC])]),Object(y["createElementVNode"])("div",tC,[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["slide-list-wrap",{"laser-pen":e.laserPen}]),ref:"slideListWrapRef"},[Object(y["withDirectives"])(Object(y["createVNode"])(f,{slideWidth:e.slideWidth,slideHeight:e.slideHeight,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen,onMousewheel:t[5]||(t[5]=function(t){return e.mousewheelListener(t)}),onTouchstart:t[6]||(t[6]=function(t){return e.touchStartListener(t)}),onTouchend:t[7]||(t[7]=function(t){return e.touchEndListener(t)})},null,8,["slideWidth","slideHeight","animationIndex","turnSlideToId","manualExitFullscreen"]),[[O,e.contextmenus]]),e.writingBoardToolVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(b,{key:0,slideWidth:e.slideWidth,slideHeight:e.slideHeight,position:{left:"75px",top:"5px"},onClose:t[8]||(t[8]=function(t){return e.writingBoardToolVisible=!1})},null,8,["slideWidth","slideHeight"])):Object(y["createCommentVNode"])("",!0)],2),Object(y["createElementVNode"])("div",{class:"thumbnails",ref:"thumbnailsRef",onMousewheel:t[9]||(t[9]=Object(y["withModifiers"])((function(t){return e.handleMousewheelThumbnails(t)}),["prevent"]))},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["thumbnail",{active:n===e.slideIndex}]),key:t.id,onClick:function(t){return e.turnSlideToIndex(n)}},[Object(y["createVNode"])(p,{slide:t,size:120/e.viewportRatio,visible:n40||(B.value=e)};Object(y["watch"])(o,(function(){Object(y["nextTick"])((function(){if(r.value){var e=r.value.querySelector(".thumbnail.active");if(e){var t=r.value.offsetWidth,n=e.offsetLeft;r.value.scrollTo({left:n-t/2,behavior:"smooth"})}}}))}));var _=function(){return[{text:"上一页",subText:"↑ ←",disable:o.value<=0,handler:function(){return p()}},{text:"下一页",subText:"↓ →",disable:o.value>=n.value.length-1,handler:function(){return m()}},{text:"第一页",disable:0===o.value,handler:function(){return v(0)}},{text:"最后一页",disable:o.value===n.value.length-1,handler:function(){return v(n.value.length-1)}},{divider:!0},{text:"画笔工具",handler:function(){return i.value=!0}},{text:"普通视图",handler:function(){return e.changeViewMode("base")}},{divider:!0},{text:"结束放映",subText:"ESC",handler:E}]};return{slides:n,slideIndex:o,viewportRatio:l,remarkFontSize:B,currentSlideRemark:L,setRemarkFontSize:M,slideListWrapRef:a,thumbnailsRef:r,slideWidth:x,slideHeight:C,animationIndex:h,turnSlideToId:O,mousewheelListener:s,touchStartListener:f,touchEndListener:b,turnSlideToIndex:v,contextmenus:_,slidesLoadLimit:N,handleMousewheelThumbnails:T,exitScreening:E,fullscreenState:V,enterFullscreen:vt,manualExitFullscreen:S,writingBoardToolVisible:i,laserPen:u}}});n("adc4");const dC=Gn()(uC,[["render",iC],["__scopeId","data-v-4887c6d4"]]);var sC=dC,fC=Object(y["defineComponent"])({name:"pptist-screen",components:{BaseView:Xx,PresenterView:sC},setup:function(){var e=Object(y["ref"])("base"),t=function(t){e.value=t},n=jt(),o=n.exitScreening,l=function(e){var t=e.key.toUpperCase();t===V.ESC&&o()};return Object(y["onMounted"])((function(){return document.addEventListener("keydown",l)})),Object(y["onUnmounted"])((function(){return document.removeEventListener("keydown",l)})),{viewMode:e,changeViewMode:t}}});n("953f");const bC=Gn()(fC,[["render",Fg],["__scopeId","data-v-18f794c8"]]);var pC=bC,mC={class:"mobile",ref:"mobileRef"},vC={class:"thumbnail-list"};function OC(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Alert"),r=Object(y["resolveComponent"])("ThumbnailSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",mC,[Object(y["createVNode"])(a,{class:"tip",message:"注意",description:"移动设备下仅支持预览,请在PC上进行编辑",type:"warning",closable:"","show-icon":""}),Object(y["createElementVNode"])("div",vC,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"thumbnail-item",key:t.id},[Object(y["createVNode"])(r,{slide:t,size:e.slideWidth,visible:nl?1:Math.round(100*r/l)/100,o.value.a!==t&&n("colorChange",{r:o.value.r,g:o.value.g,b:o.value.b,a:t})}},r=function e(){window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",e)},i=function(e){a(e),window.addEventListener("mousemove",a),window.addEventListener("mouseup",r)};return Object(y["onUnmounted"])(r),{alphaRef:c,gradientColor:l,handleMouseDown:i,color:o}}});n("f418");const cw=Gn()(lw,[["render",JE],["__scopeId","data-v-6f2cb744"]]);var aw=cw,rw=function(e){return Object(y["pushScopeId"])("data-v-1766620e"),e=e(),Object(y["popScopeId"])(),e},iw={class:"hue"},uw=rw((function(){return Object(y["createElementVNode"])("div",{class:"hue-picker"},null,-1)})),dw=[uw];function sw(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",iw,[Object(y["createElementVNode"])("div",{class:"hue-container",ref:"hueRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[Object(y["createElementVNode"])("div",{class:"hue-pointer",style:Object(y["normalizeStyle"])({left:e.pointerLeft})},dw,4)],544)])}var fw=Object(y["defineComponent"])({name:"hue",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(0),l=Object(y["ref"])(""),c=Object(y["computed"])((function(){var t=ee()(e.value).toHsl();return-1!==e.hue&&(t.h=e.hue),t})),a=Object(y["computed"])((function(){return 0===c.value.h&&"right"===l.value?"100%":100*c.value.h/360+"%"}));Object(y["watch"])((function(){return e.value}),(function(){var t=ee()(e.value).toHsl(),n=0===t.s?e.hue:t.h;0!==n&&n-o.value>0&&(l.value="right"),0!==n&&n-o.value<0&&(l.value="left"),o.value=n}));var r=Object(y["ref"])(),i=function(t){if(t.preventDefault(),r.value){var o,l,a=r.value.clientWidth,i=r.value.getBoundingClientRect().left+window.pageXOffset,u=t.pageX-i;u<0?o=0:u>a?o=360:(l=100*u/a,o=360*l/100),-1!==e.hue&&c.value.h===o||n("colorChange",{h:o,l:c.value.l,s:c.value.s,a:c.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(y["onUnmounted"])(u),{hueRef:r,handleMouseDown:d,pointerLeft:a}}});n("468f");const bw=Gn()(fw,[["render",sw],["__scopeId","data-v-1766620e"]]);var pw=bw,mw=function(e){return Object(y["pushScopeId"])("data-v-8982eb4a"),e=e(),Object(y["popScopeId"])(),e},vw=mw((function(){return Object(y["createElementVNode"])("div",{class:"saturation-white"},null,-1)})),Ow=mw((function(){return Object(y["createElementVNode"])("div",{class:"saturation-black"},null,-1)})),hw=mw((function(){return Object(y["createElementVNode"])("div",{class:"saturation-circle"},null,-1)})),jw=[hw];function yw(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"saturation",ref:"saturationRef",style:Object(y["normalizeStyle"])({background:e.bgColor}),onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[vw,Ow,Object(y["createElementVNode"])("div",{class:"saturation-pointer",style:Object(y["normalizeStyle"])({top:e.pointerTop,left:e.pointerLeft})},jw,4)],36)}var gw=Object(y["defineComponent"])({name:"saturation",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["computed"])((function(){var t=ee()(e.value).toHsv();return-1!==e.hue&&(t.h=e.hue),t})),l=Object(y["computed"])((function(){return"hsl(".concat(o.value.h,", 100%, 50%)")})),c=Object(y["computed"])((function(){return-100*o.value.v+1+100+"%"})),a=Object(y["computed"])((function(){return 100*o.value.s+"%"})),r=Object(te["throttle"])((function(e){n("colorChange",e)}),20,{leading:!0,trailing:!1}),i=Object(y["ref"])(),u=function(e){if(e.preventDefault(),i.value){var t=i.value.clientWidth,n=i.value.clientHeight,l=i.value.getBoundingClientRect().left+window.pageXOffset,c=i.value.getBoundingClientRect().top+window.pageYOffset,a=Object(te["clamp"])(e.pageX-l,0,t),u=Object(te["clamp"])(e.pageY-c,0,n),d=a/t,s=Object(te["clamp"])(-u/n+1,0,1);r({h:o.value.h,s:d,v:s,a:o.value.a})}},d=function e(){window.removeEventListener("mousemove",u),window.removeEventListener("mouseup",e)},s=function(e){u(e),window.addEventListener("mousemove",u),window.addEventListener("mouseup",d)};return Object(y["onUnmounted"])(d),{saturationRef:i,bgColor:l,handleMouseDown:s,pointerTop:c,pointerLeft:a}}});n("a46e");const xw=Gn()(gw,[["render",yw],["__scopeId","data-v-8982eb4a"]]);var Cw=xw,kw={class:"editable-input"},Ew=["value"];function ww(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",kw,[Object(y["createElementVNode"])("input",{class:"input-content",value:e.val,onInput:t[0]||(t[0]=function(t){return e.handleInput(t)})},null,40,Ew)])}var Nw=Object(y["defineComponent"])({name:"editable-input",emits:["colorChange"],props:{value:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["computed"])((function(){var t="";return t=e.value.a<1?ee()(e.value).toHex8String().toUpperCase():ee()(e.value).toHexString().toUpperCase(),t.replace("#","")})),l=function(e){var t=e.target.value;t.length>=6&&n("colorChange",ee()(t).toRgb())};return{val:o,handleInput:l}}});n("933d");const Iw=Gn()(Nw,[["render",ww],["__scopeId","data-v-20bfe6b0"]]);var Vw=Iw,Sw="RECENT_COLORS",Bw=[["#7f7f7f","#f2f2f2"],["#0d0d0d","#808080"],["#1c1a10","#ddd8c3"],["#0e243d","#c6d9f0"],["#233f5e","#dae5f0"],["#632623","#f2dbdb"],["#4d602c","#eaf1de"],["#3f3150","#e6e0ec"],["#1e5867","#d9eef3"],["#99490f","#fee9da"]],Lw=function(e,t,n){for(var o=ee()(e).toRgb(),l=ee()(t).toRgb(),c=(l.r-o.r)/n,a=(l.g-o.g)/n,r=(l.b-o.b)/n,i=[],u=0;ut&&(l.value=l.value.slice(0,t))}}),300,{trailing:!0});Object(y["onMounted"])((function(){var e=localStorage.getItem(Sw);e&&(l.value=JSON.parse(e))})),Object(y["watch"])(l,(function(){var e=JSON.stringify(l.value);localStorage.setItem(Sw,e)}));var f=function(e){"h"in e?(o.value=e.h,c.value=ee()(e).toRgb()):(o.value=ee()(e).toHsl().h,c.value=e),s()},b=function(){var e=document.querySelector(".canvas");if(e){var t=document.createElement("div");t.style.cssText="position: fixed; top: 0; left: 0; bottom: 0; right: 0; z-index: 9999; cursor: wait;",document.body.appendChild(t);var n=document.createElement("div");n.style.cssText="position: absolute; top: -100px; left: -100px; width: 16px; height: 16px; border: 1px solid #000; z-index: 999",t.appendChild(n);var l=e.getBoundingClientRect(),a=l.left,r=l.top,i=function(e){return(!e.tagName||"FOREIGNOBJECT"!==e.tagName.toUpperCase())&&(!e.classList||!e.classList.contains("operate"))};Object(nn["a"])(e,{filter:i,fontEmbedCSS:""}).then((function(e){e.style.cssText="position: absolute; top: ".concat(r,"px; left: ").concat(a,"px; cursor: crosshair;"),t.style.cursor="default",t.appendChild(e);var l=e.getContext("2d");if(l){var i="",u=function(e){var t=e.x,o=e.y,c=t-a,u=o-r,d=Object(He["a"])(l.getImageData(c,u,1,1).data,4),s=d[0],f=d[1],b=d[2],p=d[3];i="rgba(".concat(s,", ").concat(f,", ").concat(b,", ").concat((p/255).toFixed(2),")"),n.style.left=t+10+"px",n.style.top=o+10+"px",n.style.backgroundColor=i},d=function(){i="",n.style.left="-100px",n.style.top="-100px",n.style.backgroundColor=""},f=function n(l){if(i&&0===l.button){var a=ee()(i);o.value=a.toHsl().h,c.value=a.toRgb(),s()}document.body.removeChild(t),e.removeEventListener("mousemove",u),e.removeEventListener("mouseleave",d),window.removeEventListener("mousedown",n)};e.addEventListener("mousemove",u),e.addEventListener("mouseleave",d),window.addEventListener("mousedown",f)}})).catch((function(){Se["a"].error("取色吸管初始化失败"),document.body.removeChild(t)}))}};return{themeColors:a,standardColors:r,presetColors:i,color:c,hue:o,currentColor:u,changeColor:f,selectPresetColor:d,recentColors:l,pickColor:b}}});n("dc9e");const _w=Gn()(Mw,[["render",WE],["__scopeId","data-v-05b64c90"]]);var Dw=_w,zw={key:0,class:"fullscreen-spin"};function Aw(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Spin");return e.loading?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",zw,[Object(y["createVNode"])(a,{tip:e.tip,size:"large"},null,8,["tip"])])):Object(y["createCommentVNode"])("",!0)}var Fw=Object(y["defineComponent"])({name:"fullscreen-spin",props:{loading:{type:Boolean,default:!1},tip:{type:String,default:""}}});n("1756");const Rw=Gn()(Fw,[["render",Aw],["__scopeId","data-v-5e77feb8"]]);var Pw=Rw,Hw={install:function(e){e.component("FileInput",OE),e.component("CheckboxButton",gE),e.component("CheckboxButtonGroup",wE),e.component("ColorPicker",Dw),e.component("FullscreenSpin",Pw)}};function qw(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("MenuContent");return Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,[Object(y["createElementVNode"])("div",{class:"mask",onContextmenu:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.removeContextmenu()}),["prevent"])),onMousedown:t[1]||(t[1]=function(t){return e.removeContextmenu()})},null,32),Object(y["createElementVNode"])("div",{class:"contextmenu",style:Object(y["normalizeStyle"])({left:e.style.left+"px",top:e.style.top+"px"}),onContextmenu:t[2]||(t[2]=Object(y["withModifiers"])((function(){}),["prevent"]))},[Object(y["createVNode"])(a,{menus:e.menus,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])],36)],64)}var Ww={class:"menu-content"},Gw=["onClick"],Uw={class:"text"},Xw={key:0,class:"sub-text"};function Zw(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("menu-content",!0);return Object(y["openBlock"])(),Object(y["createElementBlock"])("ul",Ww,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.menus,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:t.text||n},[t.hide?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])("li",{key:0,class:Object(y["normalizeClass"])(["menu-item",{divider:t.divider,disable:t.disable}]),onClick:Object(y["withModifiers"])((function(n){return e.handleClickMenuItem(t)}),["stop"])},[t.divider?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:Object(y["normalizeClass"])(["menu-item-content",{"has-children":t.children,"has-handler":t.handler}])},[Object(y["createElementVNode"])("span",Uw,Object(y["toDisplayString"])(t.text),1),t.subText&&!t.children?(Object(y["openBlock"])(),Object(y["createElementBlock"])("span",Xw,Object(y["toDisplayString"])(t.subText),1)):Object(y["createCommentVNode"])("",!0),t.children&&t.children.length?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1,class:"sub-menu",menus:t.children,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])):Object(y["createCommentVNode"])("",!0)],2))],10,Gw))],64)})),128))])}var Yw=Object(y["defineComponent"])({name:"menu-content",props:{menus:{type:Array,required:!0},handleClickMenuItem:{type:Function,required:!0}}});n("0c74");const Jw=Gn()(Yw,[["render",Zw],["__scopeId","data-v-eb1555e8"]]);var Qw=Jw,Kw=Object(y["defineComponent"])({name:"contextmenu",components:{MenuContent:Qw},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(y["computed"])((function(){var t=170,n=30,o=11,l=5,c=e.axis,a=c.x,r=c.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*l,f=document.body.clientWidth,b=document.body.clientHeight;return{left:f<=a+d?a-d:a,top:b<=r+s?r-s:r}})),n=function(t){t.disable||t.children&&!t.handler||(t.handler&&t.handler(e.el),e.removeContextmenu())};return{style:t,handleClickMenuItem:n}}});n("b837");const $w=Gn()(Kw,[["render",qw]]);var eN=$w,tN="CTX_CONTEXTMENU_HANDLER",nN=function(e,t,n){t.stopPropagation(),t.preventDefault();var o=n.value(e);if(o){var l=null,c=function t(){l&&(document.body.removeChild(l),l=null),e.classList.remove("contextmenu-active"),document.body.removeEventListener("scroll",t),window.removeEventListener("resize",t)},a={axis:{x:t.x,y:t.y},el:e,menus:o,removeContextmenu:c};l=document.createElement("div");var r=Object(y["createVNode"])(eN,a,null);Object(y["render"])(r,l),document.body.appendChild(l),e.classList.add("contextmenu-active"),document.body.addEventListener("scroll",c),window.addEventListener("resize",c)}},oN={mounted:function(e,t){e[tN]=function(n){return nN(e,n,t)},e.addEventListener("contextmenu",e[tN])},unmounted:function(e){e&&e[tN]&&(e.removeEventListener("contextmenu",e[tN]),delete e[tN])}},lN=oN,cN="CTX_CLICK_OUTSIDE_HANDLER",aN=function(e,t,n){var o=n.value,l=t.composedPath(),c=l?l.indexOf(e)<0:!e.contains(t.target);c&&o(t)},rN={mounted:function(e,t){e[cN]=function(n){return aN(e,n,t)},setTimeout((function(){document.addEventListener("click",e[cN])}),0)},unmounted:function(e){e[cN]&&(document.removeEventListener("click",e[cN]),delete e[cN])}},iN=rN,uN={install:function(e){e.directive("contextmenu",lN),e.directive("click-outside",iN)}},dN=Object(y["createApp"])(CC);dN.component("InputNumber",j["a"]),dN.component("Divider",h["a"]),dN.component("Button",O["a"]),dN.component("ButtonGroup",O["a"].Group),dN.component("Tooltip",v["a"]),dN.component("Popover",m["a"]),dN.component("Slider",p["a"]),dN.component("Select",b["a"]),dN.component("SelectOption",b["a"].Option),dN.component("SelectOptGroup",b["a"].OptGroup),dN.component("Switch",f["a"]),dN.component("Radio",s["a"]),dN.component("RadioGroup",s["a"].Group),dN.component("RadioButton",s["a"].Button),dN.component("Input",d["a"]),dN.component("InputGroup",d["a"].Group),dN.component("TextArea",d["a"].TextArea),dN.component("Modal",u["a"]),dN.component("Dropdown",i["a"]),dN.component("Menu",r["a"]),dN.component("MenuItem",r["a"].Item),dN.component("Checkbox",a["a"]),dN.component("Drawer",c["a"]),dN.component("Spin",l["a"]),dN.component("Alert",o["a"]),dN.use(fE),dN.use(Hw),dN.use(uN),dN.use(Object(g["a"])()),dN.mount("#app")},d0e2:function(e,t,n){},d129:function(e,t,n){"use strict";n("1b9e")},d4d8:function(e,t,n){"use strict";n("41ca")},d65a:function(e,t,n){},d6d3:function(e,t,n){},d72c:function(e,t,n){},d783:function(e,t,n){},d7f8:function(e,t,n){},dab5:function(e,t,n){"use strict";n("6702")},dc5e:function(e,t,n){},dc9e:function(e,t,n){"use strict";n("090d")},ddc3:function(e,t,n){},de30:function(e,t,n){"use strict";n("ddc3")},de48:function(e,t,n){},de7e:function(e,t,n){"use strict";n("53cb")},de82:function(e,t,n){},e1f8:function(e,t,n){},e3df:function(e,t,n){"use strict";n("f0f3")},e4fe:function(e,t,n){},e5a8:function(e,t,n){"use strict";n("6532")},e5b9:function(e,t,n){},e6fd:function(e,t,n){},e7b8:function(e,t,n){"use strict";n("46ba")},e80d:function(e,t,n){},e98f:function(e,t,n){},e9e0:function(e,t,n){},eacc:function(e,t,n){"use strict";n("50c5")},eaff:function(e,t,n){},eb2c:function(e,t,n){"use strict";n("fa63")},eb6a:function(e,t,n){"use strict";n("6dfb")},ec9c:function(e,t,n){"use strict";n("b994")},edc2:function(e,t,n){"use strict";n("b0c3")},f0f3:function(e,t,n){},f10d:function(e,t,n){"use strict";n("4a74")},f208:function(e,t,n){"use strict";n("e6fd")},f33f:function(e,t,n){"use strict";n("a9ab")},f418:function(e,t,n){"use strict";n("0f92")},f50e:function(e,t,n){},f661:function(e,t,n){},fa63:function(e,t,n){},fb04:function(e,t,n){"use strict";n("d783")},fc12:function(e,t,n){"use strict";n("d72c")},fc7e:function(e,t,n){"use strict";n("9031")},fd3b:function(e,t,n){},fd5fa:function(e,t,n){},fe34:function(e,t,n){"use strict";n("078f")},ff8b:function(e,t,n){},ffb8:function(e,t,n){"use strict";n("3831")}}); +//# sourceMappingURL=app.47a45865.js.map \ No newline at end of file diff --git a/js/app.90f175cd.js.map b/js/app.47a45865.js.map similarity index 60% rename from js/app.90f175cd.js.map rename to js/app.47a45865.js.map index 64c3e231..6f5c6b91 100644 --- a/js/app.90f175cd.js.map +++ b/js/app.47a45865.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue?d655","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?7dd3","webpack:///./src/views/Screen/BaseView.vue?82f3","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue?f49b","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?93e0","webpack:///./src/views/Editor/CanvasTool/index.vue?3499","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?cee8","webpack:///./src/views/components/element/ElementOutline.vue?b100","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?06f4","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?ced2","webpack:///./src/components/Contextmenu/MenuContent.vue?f410","webpack:///./src/views/Editor/EditorHeader/index.vue?16bb","webpack:///./src/views/Editor/Canvas/Operate/index.vue?ad7d","webpack:///./src/views/components/element/LatexElement/index.vue?1604","webpack:///./src/views/components/element/TableElement/index.vue?47e0","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?e773","webpack:///./src/components/FullscreenSpin.vue?4232","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue?ac30","webpack:///./src/views/Editor/index.vue?b100","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?a42c","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?a647","webpack:///./src/views/Editor/Thumbnails/index.vue?4a6f","webpack:///./src/views/components/element/AudioElement/index.vue?d3bb","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?9eed","webpack:///./src/views/Editor/Toolbar/index.vue?b02b","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?6f92","webpack:///./src/views/components/element/LineElement/index.vue?bff4","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?ea96","webpack:///./src/components/ColorPicker/Hue.vue?3cb1","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue?2125","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?cde7","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?54ca","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?2e80","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?99ff","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?d62e","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?a7f1","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?f32f","webpack:///./src/views/Editor/Remark/index.vue?976f","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?7d86","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?3b58","webpack:///./src/components/CheckboxButtonGroup.vue?2eb8","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?24bf","webpack:///./src/views/Screen/ScreenElement.vue?cd60","webpack:///./src/components/WritingBoard.vue?e3e8","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?e4fa","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?19e8","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?177c","webpack:///./src/components/ColorPicker/Checkboard.vue?dbe5","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?c5a9","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?bcef","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue?e19a","webpack:///./src/components/CheckboxButton.vue?f525","webpack:///./src/views/components/element/ProsemirrorEditor.vue?a2a1","webpack:///./src/views/components/element/ChartElement/Chart.vue?e307","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?e809","webpack:///./src/views/components/element/TableElement/StaticTable.vue?0130","webpack:///./src/components/ColorPicker/EditableInput.vue?f472","webpack:///./src/views/Screen/index.vue?4fbc","webpack:///./src/views/components/element/ChartElement/Chart.vue?b455","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?ce7c","webpack:///./src/views/components/element/TableElement/EditableTable.vue?e1af","webpack:///./src/components/ColorPicker/Saturation.vue?6538","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue?fcfe","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?7239","webpack:///./src/views/components/ThumbnailSlide/index.vue?d419","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue?3ed9","webpack:///./src/views/components/element/ShapeElement/index.vue?f939","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?f8ce","webpack:///./src/views/Screen/ScreenSlide.vue?6e4b","webpack:///./src/views/Screen/PresenterView.vue?eb0c","webpack:///./src/views/components/element/ChartElement/index.vue?9df7","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?ba54","webpack:///./src/App.vue?2118","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue?0a08","webpack:///./src/components/LaTeXEditor/index.vue?f977","webpack:///./src/components/Contextmenu/index.vue?694c","webpack:///./src/components/FileInput.vue?18d0","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?b95d","webpack:///./src/views/Screen/WritingBoardTool.vue?572d","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?c7f5","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?b489","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue?18d8","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?3e23","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?966c","webpack:///./src/views/Editor/Canvas/index.vue?fd2a","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?db7c","webpack:///./src/views/Screen/ScreenSlideList.vue?7faf","webpack:///./src/App.vue?9e45","webpack:///./src/types/toolbar.ts","webpack:///./src/configs/font.ts","webpack:///./src/types/edit.ts","webpack:///./src/configs/hotkey.ts","webpack:///./src/utils/prosemirror/utils.ts","webpack:///./src/utils/font.ts","webpack:///./src/mocks/slides.ts","webpack:///./src/mocks/theme.ts","webpack:///./src/mocks/layout.ts","webpack:///./src/store/slides.ts","webpack:///./src/store/main.ts","webpack:///./src/utils/database.ts","webpack:///./src/store/snapshot.ts","webpack:///./src/store/keyboard.ts","webpack:///./src/store/screen.ts","webpack:///./src/utils/common.ts","webpack:///./src/views/Editor/index.vue?2c6d","webpack:///./src/types/slides.ts","webpack:///./src/utils/crypto.ts","webpack:///./src/utils/clipboard.ts","webpack:///./src/utils/element.ts","webpack:///./src/utils/textParser.ts","webpack:///./src/hooks/useHistorySnapshot.ts","webpack:///./src/utils/image.ts","webpack:///./src/configs/canvas.ts","webpack:///./src/configs/shapes.ts","webpack:///./src/configs/chartTypes.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?2557","webpack:///./src/utils/htmlParser/tags.ts","webpack:///./src/utils/htmlParser/lexer.ts","webpack:///./src/utils/htmlParser/parser.ts","webpack:///./src/utils/htmlParser/format.ts","webpack:///./src/utils/htmlParser/index.ts","webpack:///./src/utils/svgPathParser.ts","webpack:///./src/utils/svg2Base64.ts","webpack:///./src/hooks/useExport.ts","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?8860","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?b691","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue?47bd","webpack:///./src/views/components/ThumbnailSlide/index.vue?4c45","webpack:///./src/types/injectKey.ts","webpack:///./src/hooks/useSlideBackgroundStyle.ts","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?5010","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?4d4f","webpack:///./src/views/components/element/hooks/useElementShadow.ts","webpack:///./src/configs/imageClip.ts","webpack:///./src/views/components/element/hooks/useElementFlip.ts","webpack:///./src/views/components/element/ImageElement/useClipImage.ts","webpack:///./src/views/components/element/ImageElement/useFilter.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?d64e","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?dedf","webpack:///./src/views/components/element/hooks/useElementOutline.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?6e01","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?9a24","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?f9e6","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?f963","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?819e","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?a843","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?dbd8","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?345f","webpack:///./src/views/components/element/ElementOutline.vue?e632","webpack:///./src/views/components/element/ElementOutline.vue","webpack:///./src/views/components/element/ElementOutline.vue?e7ed","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?f2a6","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?d7ff","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?49a1","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?def0","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?5afd","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?89e3","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?8de0","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?ee66","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?d2cb","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?1976","webpack:///./src/views/components/element/ChartElement/Chart.vue?eb17","webpack:///./src/views/components/element/ChartElement/Chart.vue","webpack:///./src/views/components/element/ChartElement/Chart.vue?7db2","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?928d","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?9d51","webpack:///./src/views/components/element/TableElement/StaticTable.vue?622f","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/StaticTable.vue","webpack:///./src/views/components/element/TableElement/StaticTable.vue?ff6d","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?e6c9","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue?184e","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue?45c1","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue?f013","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue?c20a","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue?237b","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue?3937","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?ddb6","webpack:///./src/views/components/ThumbnailSlide/index.vue","webpack:///./src/views/components/ThumbnailSlide/index.vue?2e09","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue?6a30","webpack:///./src/views/Editor/EditorHeader/index.vue","webpack:///./src/views/Editor/EditorHeader/index.vue?f944","webpack:///./src/views/Editor/Canvas/index.vue?ce3f","webpack:///./src/utils/selection.ts","webpack:///./src/views/Editor/Canvas/hooks/useViewportSize.ts","webpack:///./src/views/Editor/Canvas/hooks/useMouseSelection.ts","webpack:///./src/views/Editor/Canvas/hooks/useDropImageOrText.ts","webpack:///./src/views/Editor/Canvas/hooks/useRotateElement.ts","webpack:///./src/configs/element.ts","webpack:///./src/views/Editor/Canvas/hooks/useScaleElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useSelectElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragLineElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useInsertFromCreateSelection.ts","webpack:///./src/views/Editor/Canvas/EditableElement.vue?e3b3","webpack:///./src/hooks/useAlignElementToCanvas.ts","webpack:///./src/views/components/element/ImageElement/index.vue?029e","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?52dc","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?2c28","webpack:///./src/views/components/element/ImageElement/index.vue","webpack:///./src/views/components/element/ImageElement/index.vue?ff2b","webpack:///./src/views/components/element/TextElement/index.vue?f72b","webpack:///./src/views/components/element/ProsemirrorEditor.vue?8ca4","webpack:///./src/utils/emitter.ts","webpack:///./src/utils/prosemirror/plugins/keymap.ts","webpack:///./src/utils/prosemirror/plugins/inputrules.ts","webpack:///./src/utils/prosemirror/plugins/index.ts","webpack:///./src/utils/prosemirror/schema/nodes.ts","webpack:///./src/utils/prosemirror/schema/marks.ts","webpack:///./src/utils/prosemirror/schema/index.ts","webpack:///./src/utils/prosemirror/index.ts","webpack:///./src/utils/prosemirror/commands/setTextAlign.ts","webpack:///./src/utils/prosemirror/commands/toggleList.ts","webpack:///./src/views/components/element/ProsemirrorEditor.vue","webpack:///./src/views/components/element/ProsemirrorEditor.vue?4854","webpack:///./src/views/components/element/TextElement/index.vue","webpack:///./src/views/components/element/TextElement/index.vue?6fb4","webpack:///./src/views/components/element/ShapeElement/index.vue?758a","webpack:///./src/views/components/element/ShapeElement/index.vue","webpack:///./src/views/components/element/ShapeElement/index.vue?6caf","webpack:///./src/views/components/element/LineElement/index.vue?59e9","webpack:///./src/views/components/element/LineElement/index.vue","webpack:///./src/views/components/element/LineElement/index.vue?4793","webpack:///./src/views/components/element/ChartElement/index.vue?4de5","webpack:///./src/views/components/element/ChartElement/index.vue","webpack:///./src/views/components/element/ChartElement/index.vue?2bdf","webpack:///./src/views/components/element/TableElement/index.vue?9a52","webpack:///./src/views/components/element/TableElement/EditableTable.vue?0dcd","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?d975","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?abdd","webpack:///./src/views/components/element/TableElement/EditableTable.vue","webpack:///./src/views/components/element/TableElement/EditableTable.vue?adf9","webpack:///./src/views/components/element/TableElement/index.vue","webpack:///./src/views/components/element/TableElement/index.vue?a4cf","webpack:///./src/views/components/element/LatexElement/index.vue?6cc0","webpack:///./src/views/components/element/LatexElement/index.vue","webpack:///./src/views/components/element/LatexElement/index.vue?faec","webpack:///./src/views/components/element/VideoElement/index.vue?52dc","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue?cfe6","webpack:///./src/views/components/element/VideoElement/VideoPlayer/useMSE.ts","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue?a136","webpack:///./src/views/components/element/VideoElement/index.vue","webpack:///./src/views/components/element/VideoElement/index.vue?9c8b","webpack:///./src/views/components/element/AudioElement/index.vue?b2aa","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue?ffda","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue?7c58","webpack:///./src/views/components/element/AudioElement/index.vue","webpack:///./src/views/components/element/AudioElement/index.vue?0032","webpack:///./src/views/Editor/Canvas/EditableElement.vue","webpack:///./src/views/Editor/Canvas/EditableElement.vue?e703","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?425f","webpack:///./src/views/Editor/Canvas/MouseSelection.vue","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?4329","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?825f","webpack:///./src/views/Editor/Canvas/GridLines.vue?480d","webpack:///./src/views/Editor/Canvas/GridLines.vue","webpack:///./src/views/Editor/Canvas/GridLines.vue?863a","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?db9c","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?bc40","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?af47","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?85fd","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?e33f","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?420f","webpack:///./src/views/Editor/Canvas/hooks/useCommonOperate.ts","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?478c","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?cd27","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?625e","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?640d","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?962f","webpack:///./src/views/Editor/Canvas/Operate/index.vue?9fcf","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?ca9d","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?7bca","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?8b12","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?1576","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?a2af","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?3000","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?c9be","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?ab3e","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?c26a","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?8922","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?1076","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?e0eb","webpack:///./src/views/Editor/Canvas/Operate/CommonElementOperate.vue?67e0","webpack:///./src/views/Editor/Canvas/Operate/CommonElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/CommonElementOperate.vue?b957","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?2f13","webpack:///./src/hooks/useLink.ts","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?53bc","webpack:///./src/views/Editor/Canvas/Operate/index.vue","webpack:///./src/views/Editor/Canvas/Operate/index.vue?ec8a","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?5b23","webpack:///./src/views/Editor/Canvas/LinkDialog.vue","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?19ad","webpack:///./src/views/Editor/Canvas/index.vue","webpack:///./src/views/Editor/Canvas/index.vue?5e25","webpack:///./src/views/Editor/CanvasTool/index.vue?ebd8","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?2929","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?258a","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?1f23","webpack:///./src/configs/lines.ts","webpack:///./src/views/Editor/CanvasTool/LinePool.vue","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?5b7d","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?3db6","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?2e9d","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?f19b","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?ddc5","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue?7d2c","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue?23a0","webpack:///./src/components/LaTeXEditor/index.vue?593a","webpack:///./src/components/LaTeXEditor/hfmath.ts","webpack:///./src/configs/latex.ts","webpack:///./src/components/LaTeXEditor/FormulaContent.vue?7e2b","webpack:///./src/components/LaTeXEditor/FormulaContent.vue","webpack:///./src/components/LaTeXEditor/FormulaContent.vue?ecb1","webpack:///./src/components/LaTeXEditor/SymbolContent.vue?673d","webpack:///./src/components/LaTeXEditor/SymbolContent.vue","webpack:///./src/components/LaTeXEditor/SymbolContent.vue?9c88","webpack:///./src/components/LaTeXEditor/index.vue","webpack:///./src/components/LaTeXEditor/index.vue?e61f","webpack:///./src/views/Editor/CanvasTool/index.vue","webpack:///./src/views/Editor/CanvasTool/index.vue?e1a6","webpack:///./src/views/Editor/Thumbnails/index.vue?fde6","webpack:///./src/hooks/useLoadSlides.ts","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?e54e","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?cca8","webpack:///./src/views/Editor/Thumbnails/index.vue","webpack:///./src/views/Editor/Thumbnails/index.vue?97d5","webpack:///./src/views/Editor/Toolbar/index.vue?8ca3","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?3646","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?2056","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?5a1a","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?8eaf","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?3bc0","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?0251","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?6f8d","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?78bd","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?d132","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?7b9e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?90a9","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?8a9b","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?ea9a","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?0828","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue?f6fa","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue?fefc","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?35b6","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?cdd8","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?6e51","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?7782","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?ebc3","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?88ee","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?7cbe","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?13cd","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?7d6e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?bca3","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?1838","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue?cdab","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue?73c6","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue?c59d","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue?27ee","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue?cc3e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue?82fb","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?ba7d","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?1004","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?9199","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?5759","webpack:///./src/configs/animation.ts","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?9f55","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?562d","webpack:///./src/configs/theme.ts","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?8ed6","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?a53d","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?09d8","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?b74c","webpack:///./src/hooks/useAlignActiveElement.ts","webpack:///./src/hooks/useUniformDisplayElement.ts","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?82ab","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?7eed","webpack:///./src/configs/symbol.ts","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?8779","webpack:///./src/views/Editor/Toolbar/index.vue","webpack:///./src/views/Editor/Toolbar/index.vue?3efa","webpack:///./src/views/Editor/Remark/index.vue?2a03","webpack:///./src/views/Editor/Remark/index.vue","webpack:///./src/views/Editor/Remark/index.vue?4c66","webpack:///./src/views/Editor/index.vue","webpack:///./src/views/Editor/index.vue?fb1c","webpack:///./src/views/Screen/index.vue?f3c3","webpack:///./src/views/Screen/BaseView.vue?7416","webpack:///./src/views/Screen/hooks/useExecPlay.ts","webpack:///./src/views/Screen/hooks/useSlideSize.ts","webpack:///./src/views/Screen/hooks/useFullscreen.ts","webpack:///./src/views/Screen/ScreenSlideList.vue?4dc3","webpack:///./src/views/Screen/ScreenSlide.vue?7220","webpack:///./src/views/Screen/ScreenElement.vue?643f","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?16d6","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?9bdc","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue?d32e","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue?1989","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue?ac4c","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue?bb8a","webpack:///./src/views/Screen/ScreenElement.vue","webpack:///./src/views/Screen/ScreenElement.vue?448e","webpack:///./src/views/Screen/ScreenSlide.vue","webpack:///./src/views/Screen/ScreenSlide.vue?4983","webpack:///./src/views/Screen/ScreenSlideList.vue","webpack:///./src/views/Screen/ScreenSlideList.vue?fd5d","webpack:///./src/views/Screen/SlideThumbnails.vue?6cb4","webpack:///./src/views/Screen/SlideThumbnails.vue","webpack:///./src/views/Screen/SlideThumbnails.vue?2aa3","webpack:///./src/views/Screen/WritingBoardTool.vue?59e6","webpack:///./src/components/WritingBoard.vue?5268","webpack:///./src/components/WritingBoard.vue","webpack:///./src/components/WritingBoard.vue?daf9","webpack:///./src/views/Screen/WritingBoardTool.vue","webpack:///./src/views/Screen/WritingBoardTool.vue?56cc","webpack:///./src/views/Screen/BaseView.vue","webpack:///./src/views/Screen/BaseView.vue?3e47","webpack:///./src/views/Screen/PresenterView.vue?ef5c","webpack:///./src/views/Screen/PresenterView.vue","webpack:///./src/views/Screen/PresenterView.vue?6e6b","webpack:///./src/views/Screen/index.vue","webpack:///./src/views/Screen/index.vue?d18a","webpack:///./src/views/Mobile.vue?a8ce","webpack:///./src/views/Mobile.vue","webpack:///./src/views/Mobile.vue?44c6","webpack:///./src/App.vue","webpack:///./src/App.vue?ae2f","webpack:///./src/plugins/icon.ts","webpack:///./src/components/FileInput.vue?352e","webpack:///./src/components/FileInput.vue","webpack:///./src/components/FileInput.vue?ae58","webpack:///./src/components/CheckboxButton.vue?57a3","webpack:///./src/components/CheckboxButton.vue","webpack:///./src/components/CheckboxButton.vue?b241","webpack:///./src/components/CheckboxButtonGroup.vue?37b7","webpack:///./src/components/CheckboxButtonGroup.vue","webpack:///./src/components/CheckboxButtonGroup.vue?da6b","webpack:///./src/components/ColorPicker/index.vue?4562","webpack:///./src/components/ColorPicker/Alpha.vue?6cbb","webpack:///./src/components/ColorPicker/Checkboard.vue?d198","webpack:///./src/components/ColorPicker/Checkboard.vue","webpack:///./src/components/ColorPicker/Checkboard.vue?fca6","webpack:///./src/components/ColorPicker/Alpha.vue","webpack:///./src/components/ColorPicker/Alpha.vue?f3a6","webpack:///./src/components/ColorPicker/Hue.vue?481f","webpack:///./src/components/ColorPicker/Hue.vue","webpack:///./src/components/ColorPicker/Hue.vue?01db","webpack:///./src/components/ColorPicker/Saturation.vue?1bc0","webpack:///./src/components/ColorPicker/Saturation.vue","webpack:///./src/components/ColorPicker/Saturation.vue?7588","webpack:///./src/components/ColorPicker/EditableInput.vue?5ef3","webpack:///./src/components/ColorPicker/EditableInput.vue","webpack:///./src/components/ColorPicker/EditableInput.vue?e9b2","webpack:///./src/components/ColorPicker/index.vue","webpack:///./src/components/ColorPicker/index.vue?260d","webpack:///./src/components/FullscreenSpin.vue?9baf","webpack:///./src/components/FullscreenSpin.vue","webpack:///./src/components/FullscreenSpin.vue?40fd","webpack:///./src/plugins/component.ts","webpack:///./src/components/Contextmenu/index.vue?a623","webpack:///./src/components/Contextmenu/MenuContent.vue?5a42","webpack:///./src/components/Contextmenu/MenuContent.vue","webpack:///./src/components/Contextmenu/MenuContent.vue?0215","webpack:///./src/components/Contextmenu/index.vue","webpack:///./src/components/Contextmenu/index.vue?0141","webpack:///./src/plugins/directive/contextmenu.ts","webpack:///./src/plugins/directive/clickOutside.ts","webpack:///./src/plugins/directive/index.ts","webpack:///./src/main.ts","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue?74eb","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?d28e","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue?3687","webpack:///./src/components/ColorPicker/index.vue?1648","webpack:///./src/views/components/element/VideoElement/index.vue?c05f","webpack:///./src/views/Screen/SlideThumbnails.vue?9202","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?32d2","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue?1f92","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?17f5","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?e445","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?d1ea","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?6098","webpack:///./src/views/Mobile.vue?4d0f","webpack:///./src/components/LaTeXEditor/FormulaContent.vue?b12e","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?c3d6","webpack:///./src/views/components/element/TextElement/index.vue?44d4","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?4190","webpack:///./src/components/ColorPicker/Alpha.vue?9bb4","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue?93e2","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?aa30","webpack:///./src/views/components/element/ImageElement/index.vue?9fed","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?729a","webpack:///./src/views/Editor/Canvas/GridLines.vue?f4b3"],"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","render","_ctx","_cache","$props","$setup","$data","$options","_component_Screen","_component_Editor","_component_Mobile","screening","isPC","ToolbarStates","ElementOrderCommands","ElementAlignCommands","OperateBorderLines","OperateResizeHandlers","OperateLineHandlers","KEYS","SYS_FONTS","label","WEB_FONTS","view","empty","state","selection","dispatch","addMark","editorView","mark","tr","from","to","$from","$to","pos","findNodesWithSameMark","doc","markType","ii","finder","type","firstMark","fromNode","toNode","node","nodeAt","marks","find","fromPos","toPos","jj","nodeSize","equalNodeType","nodeType","Array","isArray","indexOf","findParentNodeClosestToPos","$pos","predicate","depth","before","start","findParentNode","_ref","findParentNodeOfType","isActiveOfParentNodeType","schema","nodes","getMarkAttrs","lastChild","attr","attrs","markActive","isInSet","storedMarks","rangeHasMark","getAttrValueInSelection","keepChecking","nodesBetween","_defaultAttrs","color","backcolor","fontsize","fontname","align","defaultAttrs","isBold","isEm","isUnderline","isStrikethrough","isSuperscript","isSubscript","isCode","link","isBulletList","isOrderedList","isBlockquote","bold","em","underline","strikethrough","superscript","subscript","code","bulletList","orderedList","blockquote","defaultRichTextAttrs","isSupportFont","fontName","arial","toLowerCase","size","width","height","str","canvas","document","createElement","ctx","getContext","textAlign","fillStyle","textBaseline","getDotArray","_fontFamily","clearRect","font","fillText","imageData","getImageData","filter","item","join","id","elements","left","top","viewBox","path","fill","fixedRatio","opacity","rotate","flipV","lineHeight","content","defaultFontName","defaultColor","end","points","style","background","themeColor","fontColor","backgroundColor","wordSpace","outline","text","useSlidesStore","theme","slides","slideIndex","viewportRatio","getters","currentSlide","currentSlideAnimations","animations","els","elIds","map","el","animation","includes","elId","layouts","subColor","isDark","layoutsString","JSON","stringify","replaceAll","parse","actions","setTheme","themeProps","this","setViewportRatio","setSlides","addSlide","slide","addIndex","updateSlide","props","deleteSlide","slideId","slidesId","deleteSlidesIndex","index","findIndex","newIndex","Math","min","maxIndex","updateSlideIndex","addElement","element","currentSlideEls","newEls","updateElement","elIdList","removeElementProps","propName","propsNames","useMainStore","activeElementIdList","handleElementId","activeGroupElementId","canvasPercentage","canvasScale","thumbnailsFocus","editorAreaFocus","disableHotkeys","showGridLines","creatingElement","availableFonts","toolbarState","SLIDE_DESIGN","clipingImageElementId","richTextAttrs","selectedTableCells","isScaling","editingShapeElementId","selectedSlidesIndex","activeElementList","slidesStore","handleElement","setActiveElementIdList","setHandleElementId","setActiveGroupElementId","setCanvasPercentage","percentage","setCanvasScale","scale","setThumbnailsFocus","isFocus","setEditorareaFocus","setDisableHotkeysState","disable","setGridLinesState","show","setCreatingElement","setAvailableFonts","setToolbarState","setClipingImageElementId","setRichtextAttrs","setSelectedTableCells","cells","setScalingState","setEditingShapeElementId","ellId","updateSelectedSlidesIndex","version","stores","snapshots","table","snapshotDB","useSnapshotStore","snapshotCursor","snapshotLength","canUndo","canRedo","setSnapshotCursor","cursor","setSnapshotLength","initSnapshotDatabase","orderBy","toArray","lastSnapshot","clear","newFirstSnapshot","add","addSnapshot","keys","allKeys","needDeleteKeys","snapshot","snapshotLengthLimit","update","bulkDelete","unDo","mainStore","reDo","useKeyboardStore","ctrlKeyState","shiftKeyState","ctrlOrShiftKeyActive","setCtrlKeyState","active","setShiftKeyState","useScreenStore","setScreening","createRandomCode","len","charset","maxLen","ret","randomIndex","floor","random","digit","navigator","userAgent","match","_hoisted_1","class","_hoisted_2","_hoisted_3","_component_EditorHeader","_component_Thumbnails","_component_CanvasTool","_component_Canvas","_component_Remark","_component_Toolbar","remarkHeight","$event","ShapePathFormulasKeys","ElementTypes","HOTKEY_DOC","children","CRYPTO_KEY","msg","AES","encrypt","toString","ciphertext","bytes","decrypt","enc","Utf8","Promise","resolve","reject","fakeElement","clipboard","action","container","body","on","e","destroy","appendChild","click","removeChild","readClipboard","readText","then","clipboardData","pasteExcelClipboardString","lines","split","pop","colCount","getRectRotatedRange","radius","sqrt","pow","auxiliaryAngle","atan","PI","tlbraRadian","trblaRadian","middleLeft","middleTop","xAxis","cos","yAxis","sin","xRange","max","yRange","getRectRotatedOffset","originXRange","originYRange","rotatedXRange","rotatedYRange","offsetX","offsetY","getElementRange","minX","maxX","minY","maxY","getElementListRange","elementList","leftValues","topValues","rightValues","bottomValues","forEach","uniqAlignLines","uniqLines","line","_line","uniqLine","rangeMin","range","rangeMax","groupIdMap","elIdMap","groupId","rgba","setAlpha","toRgbString","broken","mid","curve","cubic","c1","c2","p1","p2","htmlText","replace","paragraphs","string","paragraph","snapshotStore","addHistorySnapshot","trailing","redo","leading","undo","getImageSize","src","img","onload","imgWidth","clientWidth","imgHeight","clientHeight","onerror","getImageDataURL","file","reader","FileReader","addEventListener","readAsDataURL","VIEWPORT_SIZE","SHAPE_PATH_FORMULAS","ROUND_RECT","CUT_RECT_DIAGONAL","CUT_RECT_SINGLE","CUT_RECT_SAMESIDE","ROUND_RECT_DIAGONAL","ROUND_RECT_SINGLE","ROUND_RECT_SAMESIDE","MESSAGE","arrowWidth","arrowheight","ROUND_MESSAGE","L","lineWidth","RING_RECT","PLUS","SHAPE_LIST","pathFormula","special","CHART_TYPES","bar","horizontalBar","area","scatter","pie","ring","useHistorySnapshot","setTimeout","createImageElement","createChartElement","newElement","chartType","gridColor","labels","legends","series","options","horizontalBars","showArea","showLine","donut","createTableElement","row","col","rowCells","colspan","rowspan","DEFAULT_CELL_WIDTH","DEFAULT_CELL_HEIGHT","colWidths","rowHeader","rowFooter","colHeader","colFooter","createTextElement","position","createShapeElement","createLineElement","isBroken","isCurve","isCubic","createLatexElement","w","h","latex","strokeWidth","createVideoElement","createAudioElement","loop","autoplay","useCreateElement","addElementsFromClipboard","currentSlideElementIdList","inCurrentSlide","values","addSlidesFromClipboard","newSlides","createTextElementFromClipboard","pasteTextClipboardData","onlySlide","onlyElements","_selectedSlidesIndex","selectedSlides","selectedSlidesId","usePasteTextClipboardData","resetSlides","emptySlide","command","UP","DOWN","copySlide","pasteSlide","catch","err","message","warning","createSlide","createSlideByTemplate","newSlide","copyAndPasteSlide","targetSlidesId","cutSlide","selectAllSlide","newSelectedSlidesIndex","lockElement","newElementList","lock","unlockElement","groupElementIdList","deleteElement","deleteAllElements","canCombine","firstGroupId","inSameGroup","every","combineElements","combineElementList","combineElementMaxLevel","_element","combineElementIdList","insertLevel","uncombineElements","hasElementInGroup","some","handleElementIdList","useDeleteElement","copyElement","cutElement","pasteElement","quickCopyElement","selectAllElement","unlockedElements","newActiveElementIdList","moveElement","step","move","LEFT","RIGHT","getCombineElementLevelRange","minLevel","maxLevel","moveUpElement","copyOfElementList","nextElement","movedElementList","nextCombineElementList","level","movedElement","moveDownElement","prevElement","prevCombineElementList","moveTopElement","moveBottomElement","unshift","orderElement","TOP","BOTTOM","enterFullscreen","docElm","documentElement","requestFullscreen","mozRequestFullScreen","webkitRequestFullScreen","exitFullscreen","mozCancelFullScreen","webkitCancelFullScreen","isFullscreen","mozFullScreen","webkitIsFullScreen","webkitFullScreen","screenStore","enterScreening","enterScreeningFromStart","exitScreening","scaleCanvas","keyboardStore","useSlideHandler","useCombineElement","useLockElement","useCopyAndPasteElement","useSelectAllElement","useMoveElement","useOrderElement","useScreening","useScaleCanvas","copy","cut","quickCopy","selectAll","combine","uncombine","remove","order","tabActiveElement","currentIndex","nextIndex","nextElementId","firstElement","keydownListener","ctrlKey","shiftKey","altKey","metaKey","ctrlOrMetaKeyActive","toUpperCase","F","preventDefault","C","X","D","Z","Y","A","G","B","DELETE","BACKSPACE","ENTER","MINUS","EQUAL","DIGIT_0","TAB","keyupListener","removeEventListener","pasteImageFile","imageFile","dataURL","pasteListener","clipboardDataItems","items","clipboardDataFirstItem","kind","getAsFile","getAsString","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","href","target","_hoisted_29","_component_IconFolderClose","_component_MenuItem","_component_Menu","_component_Dropdown","_component_IconEdit","_component_IconPpt","_component_IconHelpcenter","_component_Tooltip","_component_IconGithub","_component_HotkeyDoc","_component_Drawer","_component_ExportImgDialog","_component_Modal","_component_FullscreenSpin","trigger","overlay","default","onClick","exportJSON","_","exportPPTX","exportImgDialogVisible","toggleGridLines","goIssues","hotkeyDrawerVisible","mouseLeaveDelay","title","placement","visible","onClose","footer","centered","closable","destroyOnClose","loading","exporting","tip","childlessTags","closingTags","closingTagAncestorBreakers","li","dt","dd","tbody","thead","tfoot","td","voidTags","jumpPosition","movePositopn","findTextEnd","isEnd","textEnd","char","charAt","test","lexText","tokens","lexComment","contentEnd","commentEnd","lexTagName","isTagChar","tagName","quote","wordBegin","words","isQuoteEnd","isTagEnd","isWordEnd","isQuoteStart","word","isNotPair","secondWord","newWord","thirdWord","safeTagName","nextTag","tagState","lexTag","textStart","secondChar","tagStartClose","close","firstChar","tagEndClose","isComment","safeTag","lexer","root","stack","tagParents","parentTagName","rewindStack","newLength","token","tagToken","shouldRewind","isClosingTag","shouldRewindToAutoClose","previousIndex","attributes","tagEndToken","_token","elementNode","hasChildren","innerState","splitHead","sep","idx","unquote","car","formatAttributes","attribute","parts","trim","format","typeMap","1","2","4","8","16","32","64","128","256","512","pathData","commands","x","y","relative","x1","y1","x2","y2","lastPoint","cubicBezierPoints","px","py","cx","cy","rx","rX","ry","rY","xAxisRotation","xRot","largeArcFlag","lArcFlag","sweepFlag","cbPoint","characters","PREFIX","utf8Encode","utftext","charCodeAt","String","fromCharCode","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","isNaN","svg2Base64","XMLS","XMLSerializer","svg","serializeToString","exportImage","domRef","quality","ignoreWebfont","toImage","config","fontEmbedCSS","dataUrl","error","blob","Blob","formatColor","_color","alpha","getAlpha","toHexString","formatHTML","html","ast","slices","obj","baseStyleObj","lastSlice","breakLine","styleObj","styleAttr","styleArr","styleItem","_key","_value","fontSize","parseInt","highlight","strike","italic","fontFace","hyperlink","url","bullet","indent","formatPoints","point","undefined","moveTo","pptx","pptxSlide","image","transparency","gradientColor","color1","color2","mix","textProps","valign","margin","lineSpacingMultiple","charSpacing","shadow","blur","offset","v","angle","addText","flipH","filters","clip","shape","rounding","originW","originH","sizing","addImage","svgRef","querySelector","base64SVG","fillColor","dashType","addShape","beginArrowType","endArrowType","chartData","chartColors","analogous","supplement","legend","showLegend","legendPos","legendColor","legendFontSize","ChartType","barDir","lineSize","lineSmooth","doughnut","holeSize","addChart","hiddenCells","rowData","cell","tableData","subThemeColors","_row","cellOptions","colW","border","pt","addTable","writeFile","fileName","hotkeys","hotkey","setup","__exports__","ref","_component_ThumbnailSlide","_component_RadioButton","_component_RadioGroup","_component_Slider","_component_Switch","_component_Button","checked","expImage","_component_ThumbnailElement","transform","backgroundStyle","elementInfo","elementIndex","injectKeySlideScale","injectKeySlideId","imageSize","gradientRotate","gradientType","backgroundImage","backgroundRepeat","backgroundSize","zIndex","currentElementComponent","_component_ImageOutline","shadowStyle","flipStyle","clipPath","clipShape","draggable","imgPosition","alt","ClipPathTypes","ClipPaths","CLIPPATHS","rect","RECT","rect2","POLYGON","createPath","rect3","roundRect","ellipse","ELLIPSE","triangle","triangle2","triangle3","rhombus","hexagon","pentagon","parallelogram","parallelogram2","trapezoid","trapezoid2","widthScale","heightScale","_component_ImageRectOutline","_component_ImageEllipseOutline","_component_ImagePolygonOutline","overflow","stroke","outlineColor","outlineWidth","outlineStyle","Number","required","useElementOutline","Function","components","ImageRectOutline","ImageEllipseOutline","ImagePolygonOutline","useClipImage","ImageOutline","useElementShadow","useElementFlip","useFilter","_component_ElementOutline","textShadow","letterSpacing","fontFamily","innerHTML","ElementOutline","_component_GradientDefs","gradient","gradientTransform","GradientDefs","defaultText","_component_LinePointMarker","svgWidth","svgHeight","baseSize","lineDashArray","markerUnits","orient","markerWidth","markerHeight","refX","refY","pathMap","dot","arrow","rotateMap","LinePointMarker","abs","_component_Chart","needScaleSize","chartWidth","chartHeight","flexDirection","slideScale","themeColors","chart","chartRef","getDataAndOptions","propsOptopns","renderChart","updateChart","colors","updateTheme","setProperty","updateGridColor","Chart","Boolean","_component_StaticTable","totalWidth","subThemeColor","colSizeList","span","rowIndex","colIndex","borderStyle","borderColor","borderWidth","getTextStyle","formatText","hideCells","textDecoration","fontWeight","fontStyle","immediate","editable","reduce","a","b","useHideCells","useSubThemeColor","StaticTable","_component_IconPlayOne","poster","_component_IconVolumeNotice","audioIconSize","elementTypeMap","IMAGE","BaseImageElement","TEXT","BaseTextElement","SHAPE","BaseShapeElement","LINE","BaseLineElement","CHART","BaseChartElement","TABLE","BaseTableElement","LATEX","BaseLatexElement","VIDEO","BaseVideoElement","AUDIO","BaseAudioElement","ThumbnailElement","useSlideBackgroundStyle","ThumbnailSlide","emit","imageThumbnailsRef","useExport","HotkeyDoc","ExportImgDialog","open","_component_ElementCreateSelection","_component_AlignmentLine","_component_MultiSelectOperate","_component_Operate","_component_ViewportBackground","_component_MouseSelection","_component_EditableElement","_component_LinkDialog","_directive_contextmenu","_directive_click_outside","onMousewheel","handleMousewheelCanvas","onMousedown","handleClickBlankArea","onCreated","insertElementFromCreateSelection","viewportStyles","alignmentLines","axis","scaleMultiElement","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement","mouseSelectionVisible","mouseSelection","quadrant","mouseSelectionQuadrant","selectElement","linkDialogVisible","contextmenus","removeEditorAreaFocus","removeAllRanges","getSelection","canvasRef","viewportLeft","viewportTop","setViewportPosition","canvasWidth","canvasHeight","viewportActualWidth","viewportActualHeight","resizeObserver","ResizeObserver","observe","unobserve","viewportRef","updateMouseSelection","isMouseDown","viewportRect","getBoundingClientRect","minSelectionRange","startPageX","pageX","startPageY","pageY","onmousemove","currentPageX","currentPageY","offsetWidth","offsetHeight","onmouseup","inRangeElementList","mouseSelectionLeft","mouseSelectionTop","mouseSelectionWidth","mouseSelectionHeight","isInclude","inRangeElement","groupElementList","groupElement","inRangeElementIdList","elementRef","handleDrop","dataTransfer","dataTransferItem","ondragleave","ondrop","ondragenter","ondragover","getAngleFromCoordinate","radian","atan2","elOriginRotate","elLeft","elTop","elWidth","elHeight","centerX","centerY","mouseX","mouseY","sorptionRange","ELEMENT_TYPE_ZH","video","audio","MIN_SIZE","getRotateElementPoints","taRadian","raRadian","halfWidth","halfHeight","leftTopPoint","topPoint","rightTopPoint","rightPoint","rightBottomPoint","bottomPoint","leftBottomPoint","leftPoint","direction","oppositeMap","RIGHT_BOTTOM","LEFT_BOTTOM","LEFT_TOP","RIGHT_TOP","elOriginLeft","elOriginTop","elOriginWidth","elOriginHeight","elRotate","rotateRadian","aspectRatio","minSize","getSizeWithinRange","baseLeft","baseTop","horizontalLines","verticalLines","oppositePoint","edgeWidth","edgeHeight","right","bottom","topLine","bottomLine","leftLine","rightLine","edgeTopLine","edgeBottomLine","edgeHorizontalCenterLine","edgeLeftLine","edgeRightLine","edgeVerticalCenterLine","alignedAdsorption","currentX","currentY","_alignmentLines","isVerticalAdsorbed","isHorizontalAdsorbed","correctionVal","revisedX","revisedY","currentPoints","currentOppositePoint","currentBaseLeft","currentBaseTop","moveX","moveY","operateWidth","operateHeight","originElementList","currentMinX","currentMaxX","currentMinY","currentMaxY","currentOppositeWidth","currentOppositeHeight","originElement","originEl","startMove","newActiveIdList","groupMembersId","dragElement","originActiveElementList","isMisoperation","horizontalCenterLine","verticalCenterLine","targetMinX","targetMaxX","targetMinY","targetMaxY","targetLeft","targetTop","targetCenterX","targetCenterY","adsorptionPoints","startX","startY","endX","endY","midX","midY","c1X","c1Y","c2X","c2Y","START","adsorptionPoint","END","C1","C2","newEl","formatCreateSelection","selectionData","formatCreateSelectionForLine","_start","_end","alignElementToCanvas","viewportWidth","viewportHeight","CENTER","VERTICAL","HORIZONTAL","_component_ImageClipHandler","isCliping","clipData","onClip","handleClip","handleSelectElement","onDragstart","clipWrapperPositionStyle","bottomImgPositionStyle","topImgWrapperPositionStyle","topImgPositionStyle","moveClipRange","rotateClassName","scaleClipRange","emits","isSettingClipRange","currentRange","getClipDataTransformInfo","topImgWrapperPosition","bottomWidth","bottomHeight","initClipPosition","clipedEmitData","keyboardListener","updateRange","retPosition","bottomPosition","originPositopn","minWidth","minHeight","targetWidth","targetHeight","prefix","ImageClipHandler","stopPropagation","originClip","centerOffsetX","centerOffsetY","rotatedCenterX","rotatedCenterY","_props","_component_ProsemirrorEditor","elementId","onUpdate","updateContent","EmitterEvents","cmd","strong","list_item","childCount","rules","ordered_list","bullet_list","code_block","_orderedList","group","_bulletList","parseDOM","tag","getAttrs","dom","getAttribute","toDOM","excludes","forecolor","inline","inclusive","schemaNodes","schemaMarks","htmlString","parser","DOMParser","parseFromString","firstElementChild","fromSchema","plugins","emitter","mitt","alignment","listItem","tasks","allowedNodeTypes","Set","has","task","setNodeMarkup","alignmentCommand","setSelection","isList","listType","itemType","blockRange","parentList","validContent","autoFocus","editorViewRef","handleInput","handleFocus","handleBlur","handleClick","handleKeydown","textContent","hasFocus","replaceRangeWith","setProps","handleDOMEvents","focus","keydown","execCommand","payload","removeMark","insertText","RICH_TEXT_COMMAND","off","ProsemirrorEditor","canMove","realHeightCache","updateTextElementHeight","entries","contentRect","realHeight","onDblclick","enterEditing","updateText","exitEditing","_text","openDataEditor","OPEN_CHART_DATA_EDITOR","_component_EditableTable","onChange","updateTableCells","onChangeColWidths","widths","updateColWidths","onChangeSelectedCells","updateSelectedCells","startEdit","_component_CustomTextarea","dragLinePosition","handleMousedownColHandler","tableCells","selectedCells","activedCell","handleCellMousedown","onMouseenter","handleCellMouseenter","contenteditable","onUpdateValue","onInsertExcelData","insertExcelData","onFocus","onBlur","onInput","textareaRef","onpaste","excelData","CustomTextarea","isStartSelect","startCell","endCell","set","newData","removeSelectedCells","oldValue","selectedRange","handleMouseup","button","isHideCell","selectCol","maxRow","selectRow","maxCol","deleteRow","_tableCells","targetCells","hideCellsPos","deleteCol","insertRow","insertCol","fillTable","rowCount","defaultCell","newRows","mergeCells","splitCells","originWidth","round","clearSelectedCellText","tabActiveCell","getNextCell","nextRow","nextCol","nextCell","textRef","fillRowCount","fillColCount","getEffectiveTableCells","effectiveTableCells","_rowCells","checkCanDeleteRowOrCol","canDeleteRow","canDeleteCol","checkCanMergeOrSplit","isMultiSelected","targetCell","canMerge","canSplit","cellIndex","dataset","handler","divider","EditableTable","updateTableElementHeight","openLatexEditor","OPEN_LATEX_EDITOR","_component_VideoPlayer","_component_IconPause","_component_IconVolumeMute","_component_IconVolumeSmall","hideController","onMousemove","autoHideController","toggle","playsinline","onDurationchange","handleDurationchange","onTimeupdate","handleTimeupdate","onEnded","handleEnded","onProgress","handleProgress","onPlay","onPause","onError","handleError","bezelTransition","onAnimationend","paused","toggleVolume","volume","handleMousedownVolumeBar","onTouchstart","handleClickVolumeBar","volumeBarWidth","ptime","dtime","speedMenuVisible","onMouseleave","speedOptions","playbackRate","speed","toggleLoop","handleMousedownPlayBar","handleMousemovePlayBar","playBarTimeVisible","playBarTimeLeft","playBarTime","loadedBarWidth","playedBarWidth","videoRef","exec","canPlayType","Hls","isSupported","hls","loadSource","attachMedia","flvjs","flvPlayer","createPlayer","attachMediaElement","load","secondToTime","second","add0","num","hour","sec","getBoundingClientRectViewLeft","playBarWrap","volumeBarRef","currentTime","duration","loaded","seek","time","play","pause","setVolume","muted","rate","buffered","thumbMove","clientX","changedTouches","thumbUp","volumeMove","volumeUp","tx","autoHideControllerTimer","clearTimeout","played","useMSE","VideoPlayer","_component_AudioPlayer","audioPlayerPosition","handlePlayed","audioRef","AudioPlayer","audioWidth","audioHeight","ImageElement","TextElement","ShapeElement","LineElement","ChartElement","TableElement","LatexElement","VideoElement","AudioElement","useAlignElementToCanvas","subText","hide","validator","_component_GridLines","bgColor","colorList","mostReadable","includeFallbackColors","gridSize","getPath","GridLines","sizeStyle","createSelection","onContextmenu","lineData","selectionRef","absX","absY","isOpposite","endPageX","endPageY","defaultSize","_startX","_startY","_endX","_endY","_component_BorderLine","_component_ResizeHandler","borderLines","disableResize","resizeHandlers","textElementResizeHandlers","T","R","isWide","ResizeHandler","BorderLine","localActiveElementList","useCommonOperate","setRange","_component_LinkHandler","transformOrigin","currentOperateComponent","handlerVisible","elementIndexInAnimation","_component_RotateHandler","scaleWidth","inheritAttrs","RotateHandler","scaleHeight","handlers","ctrlHandler","ctrlHandler1","ctrlHandler2","cannotRotate","_component_Divider","removeLink","setLink","linkRegExp","useLink","LinkHandler","ImageElementOperate","TextElementOperate","ShapeElementOperate","LineElementOperate","TableElementOperate","CommonElementOperate","_component_Input","_component_SelectOption","_component_Select","tabs","tab","address","placeholder","selectedSlide","save","success","EditableElement","MouseSelection","ViewportBackground","AlignmentLine","ElementCreateSelection","MultiSelectOperate","Operate","LinkDialog","setLocalElementList","useViewportSize","useDropImageOrText","useMouseSelection","useDragElement","useDragLineElement","useSelectElement","useScaleElement","useRotateElement","throttleScaleCanvas","throttleUpdateSlideIndex","deltaY","useInsertFromCreateSelection","_component_IconBack","_component_IconNext","_component_IconFontSize","_component_IconPicture","_component_FileInput","_component_ShapePool","_component_IconGraphicDesign","_component_Popover","_component_LinePool","_component_IconConnection","_component_ChartPool","_component_IconChartProportion","_component_TableGenerator","_component_IconInsertTable","_component_IconFormula","_component_MediaInput","_component_IconVideoTwo","_component_IconMinus","_component_IconPlus","_component_IconFullScreen","_component_LaTeXEditor","mouseEnterDelay","drawText","files","insertImageElement","shapePoolVisible","onSelect","drawShape","linePoolVisible","drawLine","chartPoolVisible","tableGeneratorVisible","onInsert","latexEditorVisible","mediaInputVisible","onInsertVideo","onInsertAudio","canvasScalePercentage","shapeList","selectShape","lineList","selectLine","LINE_LIST","_component_IconChartLine","_component_IconChartHistogram","_component_IconChartPie","_component_IconChartHistogramOne","_component_IconChartLineArea","_component_IconChartRing","_component_IconChartScatter","chartList","selectChart","_component_InputNumber","isCustom","customRow","customCol","insertCustomTable","handleClickTable","videoSrc","insertVideo","audioSrc","insertAudio","_component_TextArea","_component_FormulaContent","_component_SymbolContent","symbolList","selectedSymbolKey","symbolPool","insertSymbol","formulaList","hfmath","SUB_SUP_SCALE","FORMULA_LIST","SYMBOL_LIST","box","pathd","eq","boxW","boxH","SCALE_X","SCALE_Y","FormulaContent","SymbolContent","textAreaRef","selectedSymbol","ShapePool","LinePool","ChartPool","TableGenerator","MediaInput","LaTeXEditor","_component_LayoutPool","_component_IconDown","_component_Draggable","presetLayoutPopoverVisible","modelValue","scroll","scrollSensitivity","setData","onEnd","handleDragEnd","itemKey","handleClickSlideThumbnail","fillDigit","slidesLoadLimit","contextmenusThumbnailItem","contextmenusThumbnails","timer","loadSlide","selectSlideTemplate","Draggable","LayoutPool","useLoadSlides","changSlideIndex","minIndex","eventData","oldIndex","_slides","_slide","currentTabs","currentPanelComponent","_component_SelectOptGroup","_component_IconAddText","_component_InputGroup","_component_ColorPicker","_component_IconText","_component_IconBackgroundColor","_component_IconFill","_component_ButtonGroup","_component_IconTextBold","_component_CheckboxButton","_component_IconTextItalic","_component_IconTextUnderline","_component_IconStrikethrough","_component_IconFormat","_component_CheckboxButtonGroup","_component_IconUpOne","_component_IconDownOne","_component_IconCode","_component_IconQuote","_component_IconLinkOne","_component_IconAlignTextLeft","_component_IconAlignTextCenter","_component_IconAlignTextRight","_component_IconList","_component_IconOrderedList","_component_IconRowHeight","_component_IconFullwidth","_component_ElementShadow","_component_ElementOpacity","presetStyles","emitBatchRichTextCommand","compact","emitRichTextCommand","suffixIcon","webFonts","fontSizeOptions","updateFill","linkPopoverVisible","disabled","updateLink","openLinkPopover","updateLineHeight","lineHeightOptions","updateWordSpace","wordSpaceOptions","updateOpacity","deep","_component_ColorButton","fixed","hasOutline","toggleOutline","updateOutline","_component_IconPlatte","ColorButton","outlineProps","_outline","hasShadow","toggleShadow","updateShadow","shadowProps","_shadow","ElementOpacity","ElementShadow","_component_ElementFlip","_component_IconTailoring","_component_ElementFilter","_component_IconTransform","_component_IconUndo","_component_IconTheme","clipImage","clipPanelVisible","shapeClipPathOptions","presetImageClip","ratioClipOptions","ratio","replaceImage","resetImage","setBackgroundImage","_component_IconFlipVertically","_component_IconFlipHorizontally","updateFlip","flipProps","hasFilters","toggleFilters","filterOptions","updateFilter","defaultFilters","unit","_handleElement","originFilters","ElementFlip","ElementFilter","getImageElementDataBeforeClip","imgLeft","imgTop","originClipRange","originHeight","originLeft","originTop","imageRatio","distance","_component_IconAlignTextTopOne","_component_IconAlignTextMiddleOne","_component_IconAlignTextBottomOne","fillType","updateFillType","updateGradient","showTextTools","updateTextAlign","gradientProps","_gradient","updateLine","_component_Checkbox","_component_IconCloseSmall","_component_ChartDataEditor","chartDataEditorVisible","updateOptions","stackBars","updateLegend","deleteThemeColor","presetThemesVisible","presetChartThemes","itemIndex","presetThemeColorHoverIndex","applyPresetTheme","addThemeColor","onSave","updateData","tempRangeSize","rangeLines","resizablePointStyle","changeSelectRange","autocomplete","focusCell","onPaste","handlePaste","closeEditor","getTableData","CELL_WIDTH","CELL_HEIGHT","initData","_data","inputRef","moveNextRow","labelsItem","labelInputRef","legendsItem","seriesItem","valueInputRef","ChartDataEditor","_lineSmooth","_showLine","_showArea","_horizontalBars","_donut","_stackBars","optionProps","newOptions","textAttrs","updateTextAttrs","setTableRow","setTableCol","hasTheme","toggleTheme","minRowCount","minColCount","updateTextAttrState","selectedCell","textAttrProp","themeProp","_theme","newTableCells","newColSizeList","updateLatex","updateLatexData","setVideoPoster","updateVideo","updateAudio","panelMap","TextStylePanel","ImageStylePanel","ShapeStylePanel","LineStylePanel","ChartStylePanel","TableStylePanel","LatexStylePanel","VideoStylePanel","AudioStylePanel","_component_IconSendToBack","_component_IconBringToFrontOne","_component_IconBringToFront","_component_IconSentToBack","_component_IconAlignLeft","_component_IconAlignVertically","_component_IconAlignRight","_component_IconAlignTop","_component_IconAlignHorizontally","_component_IconAlignBottom","_component_IconLock","_component_IconUnlock","_component_IconRotate","updateLeft","updateTop","updateWidth","updateFixedRatio","updateHeight","updateRotate45","flex","updateRotate","_rotate","_component_IconEffects","_component_IconClick","animationPoolVisible","onVisibleChange","handlePopoverVisibleChange","hoverPreviewAnimation","addAnimation","popoverMaskHide","handleElementAnimationName","animationSequence","elType","animationType","runAnimation","deleteAnimation","handleElementAnimation","updateElementAnimationDuration","ANIMATIONS","defaultDuration","animationTypes","elRef","animationName","classList","handleAnimationEnd","removeProperty","once","updateElementAnimation","animationItem","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","updateBackgroundType","updateBackground","uploadBackgroundImage","applyBackgroundAllSlide","updateViewportRatio","showPresetThemes","togglePresetThemesVisible","themes","applyThemeAllSlide","PRESET_THEMES","newBackground","currentTurningMode","updateTurningMode","applyAllSlide","turningMode","_component_IconGroup","_component_IconUngroup","alignElement","displayItemCount","uniformHorizontalDisplay","uniformVerticalDisplay","alignActiveElement","groupElementRangeMap","activeElement","groupElements","horizontalCenter","center","verticalCenter","count","groupIdList","copyOfActiveElementList","singleElemetList","groupList","groupEl","formatedGroupList","groupItem","list","sort","itemA","itemB","sortedElementData","firstItem","lastPos","lastWidth","currentPos","currentWidth","sortedItem","totalHeight","lastHeight","currentHeight","useAlignActiveElement","useUniformDisplayElement","symbolPoolList","selectSymbol","elementTabs","EL_STYLE","SYMBOL","EL_POSITION","EL_ANIMATION","slideTabs","SLIDE_ANIMATION","multiSelectTabs","MULTI_POSITION","currentTabsValue","ElementStylePanel","ElementPositionPanel","ElementAnimationPanel","SlideDesignPanel","SlideAnimationPanel","MultiPositionPanel","SymbolPanel","resize","remark","newHeight","EditorHeader","Canvas","CanvasTool","Thumbnails","Toolbar","Remark","useGlobalHotkey","usePasteEvent","_component_BaseView","_component_PresenterView","viewMode","changeViewMode","_component_ScreenSlideList","_component_SlideThumbnails","_component_WritingBoardTool","_component_IconLeftTwo","_component_IconRightTwo","_component_IconWrite","_component_IconMagic","_component_IconListView","_component_IconOffScreenOne","_component_IconFullScreenOne","_component_IconPower","laserPen","slideWidth","slideHeight","animationIndex","turnSlideToId","manualExitFullscreen","mousewheelListener","touchStartListener","onTouchend","touchEndListener","slideThumbnailModelVisible","turnSlideToIndex","writingBoardToolVisible","execPrev","execNext","rightToolsVisible","fullscreenState","autoPlayTimer","closeAutoPlay","clearInterval","throttleMassage","lastIndex","autoPlay","setInterval","touchInfo","SPACE","turnPrevSlide","turnNextSlide","wrapRef","setSlideContentSize","slideWrapRef","winWidth","winHeight","escExit","windowResizeListener","_component_ScreenSlide","_component_ScreenElement","visibility","needWaitAnimation","openLink","_component_BaseChartElement","audioPlayerRef","ScreenChartElement","ScreenVideoElement","ScreenAudioElement","ScreenElement","ScreenSlide","_component_IconArrowCircleLeft","turnSlide","_component_WritingBoard","_component_IconHighLight","_component_IconErase","_component_IconClear","_component_IconClose","writingBoardColor","blackboard","model","writingBoardModel","changeModel","clearCanvas","writingBoardColors","changeColor","closeWritingBoard","handleMousedown","handleMousemove","onMouseup","onTouchmove","mouseInCanvas","mouse","rubberSize","penSize","markSize","writingBoardRef","lastTime","lastLineWidth","updateCanvasSize","initCanvas","lineCap","lineJoin","updateCtx","globalCompositeOperation","globalAlpha","draw","posX","posY","lastPosX","lastPosY","strokeStyle","beginPath","lineTo","closePath","erase","sinRadius","cosRadius","rectPoint1","rectPoint2","rectPoint3","rectPoint4","arc","restore","getDistance","getLineWidth","maxV","minV","maxWidth","handleMove","Date","getTime","getMouseOffsetPosition","event","MouseEvent","canvasRect","TouchEvent","WritingBoard","ScreenSlideList","SlideThumbnails","WritingBoardTool","useExecPlay","useSlideSize","useFullscreen","handleMousewheelThumbnails","remarkFontSize","currentSlideRemark","setRemarkFontSize","slideListWrapRef","thumbnailsRef","scrollBy","activeThumbnailRef","offsetLeft","scrollTo","behavior","BaseView","PresenterView","ESC","_component_Alert","description","mobileRef","Editor","Screen","Mobile","onbeforeunload","icons","PlayOne","Lock","Unlock","Ppt","Format","Picture","FullScreen","List","OrderedList","Helpcenter","FlipVertically","FlipHorizontally","FontSize","Code","TextBold","TextItalic","TextUnderline","Strikethrough","Edit","Quote","BackgroundColor","Group","Ungroup","Back","Next","Fullwidth","AlignTop","AlignLeft","AlignRight","AlignBottom","AlignVertically","AlignHorizontally","BringToFront","SendToBack","AlignTextLeft","AlignTextRight","AlignTextCenter","RowHeight","Write","InsertTable","AddText","Fill","Tailoring","Effects","ColorFilter","Down","Plus","Minus","Connection","BringToFrontOne","SentToBack","Github","ChartProportion","ChartHistogram","ChartHistogramOne","ChartLineArea","ChartRing","ChartScatter","ChartLine","ChartPie","Text","Rotate","LeftTwo","RightTwo","Platte","UpOne","DownOne","Close","CloseSmall","Undo","Transform","Click","Theme","ArrowCircleLeft","GraphicDesign","Logout","Erase","Clear","FolderClose","AlignTextTopOne","AlignTextBottomOne","AlignTextMiddleOne","Pause","VolumeMute","VolumeNotice","VolumeSmall","VideoTwo","Formula","LinkOne","FullScreenOne","OffScreenOne","Power","ListView","Magic","HighLight","install","app","component","$slots","accept","handleChange","_component_Saturation","_component_Checkboard","_component_Hue","_component_Alpha","_component_EditableInput","hue","onColorChange","currentColor","pickColor","selectPresetColor","presetColors","standardColors","recentColors","handleMouseDown","bgStyle","checkboardCache","renderCheckboard","white","grey","fillRect","translate","toDataURL","getCheckboard","checkboard","Checkboard","rgbaStr","g","alphaRef","containerWidth","xOffset","pageXOffset","unbindEventListeners","pointerLeft","oldHue","pullDirection","hsla","toHsl","hueRef","percent","pointerTop","hsva","toHsv","emitChangeEvent","param","saturationRef","containerHeight","yOffset","pageYOffset","saturation","bright","val","_hex","toHex8String","toRgb","RECENT_COLORS","presetColorConfig","startColor","endColor","_startColor","_endColor","rStep","gStep","bStep","gradientColorArr","Alpha","Hue","Saturation","EditableInput","rgbaString","colorString","updateRecentColorsCache","maxLength","recentColorsCache","localStorage","getItem","setItem","targetRef","maskRef","cssText","colorBlockRef","contains","toFixed","handleMouseleave","tColor","_component_Spin","FileInput","CheckboxButton","CheckboxButtonGroup","ColorPicker","FullscreenSpin","_component_MenuContent","removeContextmenu","menus","handleClickMenuItem","_component_menu_content","menu","MenuContent","MENU_WIDTH","MENU_HEIGHT","DIVIDER_HEIGHT","PADDING","menuCount","dividerCount","menuWidth","menuHeight","screenWidth","screenHeight","CTX_CONTEXTMENU_HANDLER","binding","vm","Contextmenu","ContextmenuDirective","mounted","unmounted","CTX_CLICK_OUTSIDE_HANDLER","clickListener","composedPath","isClickOutside","ClickOutsideDirective","directive","App","Option","OptGroup","Button","TextArea","Item","use","mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAKfH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEV,EAAoBe,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,IAGzG5B,EAAoB6B,EAAI,GAExB,IAAIC,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,wDCvJT,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,2LCAA,W,oCCAA,W,sJCAA,W,kCCAA,W,kCCAA,W,oCCAA,W,oFCAA,W,kCCAA,W,oCCAA,W,6DCAA,W,sDCAA,W,6GCAA,W,qFCAA,W,wICAA,W,6NCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,sICAA,W,oCCAA,W,+JCAA,W,oCCAA,Y,oCCAA,W,2DCAA,W,6DCAA,W,oCCAA,W,2DCAA,W,6DCAA,W,yGCAA,W,oFCAA,W,yDCAA,W,oCCAA,W,+GCAA,W,6GCAA,W,yDCAA,W,6DCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,kCCAA,W,kCCAA,W,kCCAA,W,6JCAA,W,oCCAA,W,6DCAA,W,6DCAA,W,sFCAA,W,kCCAA,W,kCCAA,W,yDCAA,W,kCCAA,W,yDCAA,W,yDCAA,W,yDCAA,W,gFCAA,W,kCCAA,W,kCCAA,W,yDCAA,W,gFCAA,W,yDCAA,W,kCCAA,W,gFCAA,W,kCCAA,W,yDCAA,W,yDCAA,W,kCCAA,W,uGCAA,W,uGCAA,W,kCCAA,W,yDCAA,W,yDCAA,W,kCCAA,W,uGCAA,W,kCCAA,W,ugBCEM,SAAUyC,EAAOC,EAAUC,EAAYC,EAAYC,EAAYC,EAAWC,GAC9E,IAAMC,EAAoB,8BAAkB,UACtCC,EAAoB,8BAAkB,UACtCC,EAAoB,8BAAkB,UAE5C,OAAQR,EAAKS,WACR,yBAAc,yBAAaH,EAAmB,CAAEjB,IAAK,KACrDW,EAAKU,MACH,yBAAc,yBAAaH,EAAmB,CAAElB,IAAK,MACrD,yBAAc,yBAAamB,EAAmB,CAAEnB,IAAK,K,ICX5CsB,E,mDAAlB,SAAkBA,GAChB,qBACA,gCACA,wBACA,8BACA,gCACA,sCACA,qCAPF,CAAkBA,MAAa,KCAxB,ICGWC,EAOAC,EAUAC,EAOAC,EAWAC,ECtCAC,EFALC,EAAY,CACvB,CAAEC,MAAO,QAASpC,MAAO,SACzB,CAAEoC,MAAO,OAAQpC,MAAO,mBACxB,CAAEoC,MAAO,KAAMpC,MAAO,UACtB,CAAEoC,MAAO,KAAMpC,MAAO,UACtB,CAAEoC,MAAO,KAAMpC,MAAO,SACtB,CAAEoC,MAAO,MAAOpC,MAAO,WACvB,CAAEoC,MAAO,KAAMpC,MAAO,YACtB,CAAEoC,MAAO,KAAMpC,MAAO,eACtB,CAAEoC,MAAO,OAAQpC,MAAO,WACxB,CAAEoC,MAAO,OAAQpC,MAAO,WACxB,CA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S,CAAC,IAAK,KACfC,KAAM,yDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,yDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,+CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,yCAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uCAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6BAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,4CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,iDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,wDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,iEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,oHAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,0DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,sEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,kEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,+CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,oHAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,4DACNuU,YAAa5I,GAAsBuI,GAErC,CACEnU,QAAS,CAAC,IAAK,KACfC,KAAM,uEACNuU,YAAa5I,GAAsByI,WAErC,CACErU,QAAS,CAAC,IAAK,KACfC,KAAM,iEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,mHACNuU,YAAa5I,GAAsB0I,MAErC,CACEtU,QAAS,CAAC,IAAK,KACfC,KAAM,sHAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gEACNuU,YAAa5I,GAAsBmI,SAErC,CACE/T,QAAS,CAAC,IAAK,KACfC,KAAM,mIACNuU,YAAa5I,GAAsBsI,eAErC,CACElU,QAAS,CAAC,IAAK,KACfC,KAAM,qEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,2EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,2HAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,2DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,+JAKZ,CACEpG,KAAM,KACNkS,SAAU,CACR,CACE/L,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qGAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qGAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qOAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,sFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,8GAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,8GAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,8DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,4CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,iDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,kEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6FAER,CACED,QAAS,CAAC,I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","file":"js/app.90f175cd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseLatexElement.vue?vue&type=style&index=0&id=4118f3dd&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MultiSelectOperate.vue?vue&type=style&index=0&id=55c8df22&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseView.vue?vue&type=style&index=0&id=2ed6935e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenVideoElement.vue?vue&type=style&index=0&id=0ef8b6c0&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseShapeElement.vue?vue&type=style&index=0&id=2bad8b7f&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=4ae7c9aa&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LineStylePanel.vue?vue&type=style&index=0&id=cbc4d7fa&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementOutline.vue?vue&type=style&index=0&id=34c0a0a8&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ViewportBackground.vue?vue&type=style&index=0&id=4d0018d8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementFlip.vue?vue&type=style&index=0&id=7bd50f1a&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=5e62abba&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=6abdbdd6&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=3168526a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=426704b7&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./HotkeyDoc.vue?vue&type=style&index=0&id=b6d79f64&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FullscreenSpin.vue?vue&type=style&index=0&id=5e77feb8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AudioPlayer.vue?vue&type=style&index=0&id=5cabbb47&scoped=true&lang=scss\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementShadow.vue?vue&type=style&index=0&id=73616cd6&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ColorButton.vue?vue&type=style&index=0&id=dffe32bc&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=ec4c62e4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=66dd4448&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseImageElement.vue?vue&type=style&index=0&id=0b1f9460&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=84601b0a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LineElementOperate.vue?vue&type=style&index=0&id=c0a272d2&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=603a705d&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseTableElement.vue?vue&type=style&index=0&id=3bbcc75c&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseVideoElement.vue?vue&type=style&index=0&id=1c831c75&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TextStylePanel.vue?vue&type=style&index=0&id=f5f21464&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImagePolygonOutline.vue?vue&type=style&index=0&id=21ca95cc&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SymbolPanel.vue?vue&type=style&index=0&id=6b8c5938&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageStylePanel.vue?vue&type=style&index=0&id=64e5a614&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageElementOperate.vue?vue&type=style&index=0&id=db6d5ba6&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=7ed67bb3&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageClipHandler.vue?vue&type=style&index=0&id=e9da1d6a&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ChartDataEditor.vue?vue&type=style&index=0&id=9a62f784&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SlideAnimationPanel.vue?vue&type=style&index=0&id=251ceb05&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenElement.vue?vue&type=style&index=0&id=360fef5f&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./WritingBoard.vue?vue&type=style&index=0&id=3dfd4579&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseLineElement.vue?vue&type=style&index=0&id=4032440c&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageRectOutline.vue?vue&type=style&index=0&id=48a14431&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ShapeStylePanel.vue?vue&type=style&index=0&id=0e201fca&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ResizeHandler.vue?vue&type=style&index=0&id=c9559332&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementCreateSelection.vue?vue&type=style&index=0&id=15b60d90&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MediaInput.vue?vue&type=style&index=0&id=ec37f828&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CheckboxButton.vue?vue&type=style&index=0&id=4074d5c2&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ProsemirrorEditor.vue?vue&type=style&index=0&id=481bb541&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Chart.vue?vue&type=style&index=1&id=79ce410e&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./StaticTable.vue?vue&type=style&index=0&id=74b60291&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./EditableInput.vue?vue&type=style&index=0&id=20bfe6b0&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=18f794c8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Chart.vue?vue&type=style&index=0&id=79ce410e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BorderLine.vue?vue&type=style&index=0&id=1430bedc&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./EditableTable.vue?vue&type=style&index=0&id=c0c56b6e&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenAudioElement.vue?vue&type=style&index=0&id=1adba489&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ShapePool.vue?vue&type=style&index=0&id=7fdb328c&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=025539cf&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=e716fb74&scoped=true&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=bd9c8dc2&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MouseSelection.vue?vue&type=style&index=0&id=25d4b5f8&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenSlide.vue?vue&type=style&index=0&id=30708559&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./PresenterView.vue?vue&type=style&index=0&id=4887c6d4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=c09631b6&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageEllipseOutline.vue?vue&type=style&index=0&id=692bbda6&lang=scss&scoped=true\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./App.vue?vue&type=style&index=0&id=039e9a08&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ExportImgDialog.vue?vue&type=style&index=0&id=4aeb44b4&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=129e1afa&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=83da70aa&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FileInput.vue?vue&type=style&index=0&id=0a87e9c4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementOpacity.vue?vue&type=style&index=0&id=f62a02b6&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./WritingBoardTool.vue?vue&type=style&index=0&id=19b10edd&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LinkHandler.vue?vue&type=style&index=0&id=2b77dbb0&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementAnimationPanel.vue?vue&type=style&index=0&id=696c81e2&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./VideoStylePanel.vue?vue&type=style&index=0&id=61bcaa2a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseChartElement.vue?vue&type=style&index=0&id=60d9ae43&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AlignmentLine.vue?vue&type=style&index=0&id=62c9018e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=fe9bcf9c&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MultiPositionPanel.vue?vue&type=style&index=0&id=2e982d59&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenSlideList.vue?vue&type=style&index=0&id=056764ac&lang=scss&scoped=true\"","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Screen = _resolveComponent(\"Screen\")!\n const _component_Editor = _resolveComponent(\"Editor\")!\n const _component_Mobile = _resolveComponent(\"Mobile\")!\n\n return (_ctx.screening)\n ? (_openBlock(), _createBlock(_component_Screen, { key: 0 }))\n : (_ctx.isPC)\n ? (_openBlock(), _createBlock(_component_Editor, { key: 1 }))\n : (_openBlock(), _createBlock(_component_Mobile, { key: 2 }))\n}","export const enum ToolbarStates {\n SYMBOL = 'symbol',\n EL_ANIMATION = 'elAnimation',\n EL_STYLE = 'elStyle',\n EL_POSITION = 'elPosition',\n SLIDE_DESIGN = 'slideDesign',\n SLIDE_ANIMATION = 'slideAnimation',\n MULTI_POSITION = 'multiPosition',\n}","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]","import { ShapePoolItem } from '@/configs/shapes'\r\nimport { LinePoolItem } from '@/configs/lines'\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 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 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 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 const enum OperateLineHandlers {\r\n START = 'start',\r\n END = 'end',\r\n C = 'ctrl',\r\n C1 = 'ctrl1',\r\n C2 = 'ctrl2',\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 ESC = 'ESCAPE',\n}\n\nexport const HOTKEY_DOC = [\n {\n type: '通用',\n children: [\n { label: '剪切', value: 'Ctrl + X' },\n { label: '复制', value: 'Ctrl + C' },\n { label: '粘贴', value: 'Ctrl + V' },\n { label: '快速复制粘贴', value: 'Ctrl + D' },\n { label: '全选', value: 'Ctrl + A' },\n { label: '撤销', value: 'Ctrl + Z' },\n { label: '恢复', value: 'Ctrl + Y' },\n { label: '删除', value: 'Delete / Backspace' },\n { label: '多选', value: '按住 Ctrl 或 Shift' },\n ],\n },\n {\n type: '幻灯片放映',\n children: [\n { label: '开始放映幻灯片', value: 'Ctrl + F' },\n { label: '切换上一页', value: '↑ / ←' },\n { label: '切换下一页', value: '↓ / → / Enter / Space' },\n { label: '退出放映', value: 'ESC' },\n ],\n },\n {\n type: '幻灯片编辑',\n children: [\n { label: '新建幻灯片', value: 'Enter' },\n { label: '缩放画布', value: 'Ctrl + 鼠标滚动' },\n { label: '放大画布', value: 'Ctrl + =' },\n { label: '缩小画布', value: 'Ctrl + -' },\n { label: '缩放画布到合适大小', value: 'Ctrl + 0' },\n { label: '编辑上一页', value: '↑ / ← / 鼠标上滚' },\n { label: '编辑下一页', value: '↓ / → / 鼠标下滚' },\n ],\n },\n {\n type: '元素操作',\n children: [\n { label: '移动', value: '↑ / ← / ↓ / →' },\n { label: '锁定', value: 'Ctrl + L' },\n { label: '组合', value: 'Ctrl + G' },\n { label: '取消组合', value: 'Ctrl + Shift + G' },\n { label: '置顶层', value: 'Alt + F' },\n { label: '置底层', value: 'Alt + B' },\n { label: '锁定宽高比例', value: '按住 Ctrl 或 Shift' },\n { label: '创建水平 / 垂直线条', value: '按住 Ctrl 或 Shift' },\n { label: '切换焦点元素', value: 'Tab' },\n { label: '确认图片裁剪', value: 'Enter' },\n ],\n },\n {\n type: '表格编辑',\n children: [\n { label: '聚焦到下一个单元格', value: 'Tab' },\n { label: '在上方插入一行', value: 'Ctrl + ↑' },\n { label: '在下方插入一行', value: 'Ctrl + ↓' },\n { label: '在左侧插入一列', value: 'Ctrl + ←' },\n { label: '在右侧插入一列', value: 'Ctrl + →' },\n ],\n },\n {\n type: '图表数据编辑',\n children: [\n { label: '聚焦到下一行', value: 'Enter' },\n ],\n },\n {\n type: '文本编辑',\n children: [\n { label: '加粗', value: 'Ctrl + B' },\n { label: '斜体', value: 'Ctrl + I' },\n { label: '下划线', value: 'Ctrl + U' },\n { label: '删除线', value: 'Ctrl + D' },\n ],\n },\n]","import { Node, NodeType, ResolvedPos, Mark, MarkType } from 'prosemirror-model'\nimport { EditorState, Selection } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\nimport { selectAll } from 'prosemirror-commands'\n\nexport const autoSelectAll = (view: EditorView) => {\n const { empty } = view.state.selection\n if (empty) selectAll(view.state, view.dispatch)\n}\n\nexport const addMark = (editorView: EditorView, mark: Mark, selection?: { from: number; to: number; }) => {\n if (selection) {\n editorView.dispatch(editorView.state.tr.addMark(selection.from, selection.to, mark))\n }\n else {\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n}\n\nexport const findNodesWithSameMark = (doc: Node, from: number, to: number, markType: MarkType) => {\n let ii = from\n const finder = (mark: Mark) => mark.type === markType\n let firstMark = null\n let fromNode = null\n let toNode = null\n\n while (ii <= to) {\n const node = doc.nodeAt(ii)\n if (!node || !node.marks) return null\n\n const mark = node.marks.find(finder)\n if (!mark) return null\n\n if (firstMark && mark !== firstMark) return null\n\n fromNode = fromNode || node\n firstMark = firstMark || mark\n toNode = node\n ii++\n }\n\n let fromPos = from\n let toPos = to\n\n let jj = 0\n ii = from - 1\n while (ii > jj) {\n const node = doc.nodeAt(ii)\n const mark = node && node.marks.find(finder)\n if (!mark || mark !== firstMark) break\n fromPos = ii\n fromNode = node\n ii--\n }\n\n ii = to + 1\n jj = doc.nodeSize - 2\n while (ii < jj) {\n const node = doc.nodeAt(ii)\n const mark = node && node.marks.find(finder)\n if (!mark || mark !== firstMark) break\n toPos = ii\n toNode = node\n ii++\n }\n\n return {\n mark: firstMark,\n from: {\n node: fromNode,\n pos: fromPos,\n },\n to: {\n node: toNode,\n pos: toPos,\n },\n }\n}\n\nconst equalNodeType = (nodeType: NodeType, node: Node) => {\n return Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1 || node.type === nodeType\n}\n\nconst findParentNodeClosestToPos = ($pos: ResolvedPos, predicate: (node: Node) => boolean) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i)\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node,\n }\n }\n }\n}\n\nexport const findParentNode = (predicate: (node: Node) => boolean) => {\n return (_ref: Selection) => findParentNodeClosestToPos(_ref.$from, predicate)\n}\n\nexport const findParentNodeOfType = (nodeType: NodeType) => {\n return (selection: Selection) => {\n return findParentNode((node: Node) => {\n return equalNodeType(nodeType, node)\n })(selection)\n }\n}\n\nexport const isActiveOfParentNodeType = (nodeType: string, state: EditorState) => {\n const node = state.schema.nodes[nodeType]\n return !!findParentNodeOfType(node)(state.selection)\n}\n\nexport const getMarkAttrs = (view: EditorView) => {\n const { selection, doc } = view.state\n const { from } = selection\n\n let node = doc.nodeAt(from) || doc.nodeAt(from - 1)\n if (node?.lastChild) node = node.lastChild\n\n return node?.marks || []\n}\n\nexport const getAttrValue = (marks: Mark[], markType: string, attr: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType && mark.attrs[attr]) return mark.attrs[attr]\n }\n return null\n}\n\nexport const isActiveMark = (marks: Mark[], markType: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType) return true\n }\n return false\n}\n\nexport const markActive = (state: EditorState, type: MarkType) => {\n const { from, $from, to, empty } = state.selection\n if (empty) return type.isInSet(state.storedMarks || $from.marks())\n return state.doc.rangeHasMark(from, to, type)\n}\n\nexport const getAttrValueInSelection = (view: EditorView, attr: string) => {\n const { selection, doc } = view.state\n const { from, to } = selection\n\n let keepChecking = true\n let value = ''\n doc.nodesBetween(from, to, node => {\n if (keepChecking && node.attrs[attr]) {\n keepChecking = false\n value = node.attrs[attr]\n }\n return keepChecking\n })\n return value\n}\n\ninterface DefaultAttrs {\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: string;\n}\nconst _defaultAttrs: DefaultAttrs = {\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n align: 'left',\n}\nexport const getTextAttrs = (view: EditorView, defaultAttrs: DefaultAttrs = {}) => {\n defaultAttrs = { ..._defaultAttrs, ...defaultAttrs }\n\n const marks = getMarkAttrs(view)\n\n const isBold = isActiveMark(marks, 'strong')\n const isEm = isActiveMark(marks, 'em')\n const isUnderline = isActiveMark(marks, 'underline')\n const isStrikethrough = isActiveMark(marks, 'strikethrough')\n const isSuperscript = isActiveMark(marks, 'superscript')\n const isSubscript = isActiveMark(marks, 'subscript')\n const isCode = isActiveMark(marks, 'code')\n const color = getAttrValue(marks, 'forecolor', 'color') || defaultAttrs.color\n const backcolor = getAttrValue(marks, 'backcolor', 'backcolor') || defaultAttrs.backcolor\n const fontsize = getAttrValue(marks, 'fontsize', 'fontsize') || defaultAttrs.fontsize\n const fontname = getAttrValue(marks, 'fontname', 'fontname') || defaultAttrs.fontname\n const link = getAttrValue(marks, 'link', 'href') || ''\n const align = getAttrValueInSelection(view, 'align') || defaultAttrs.align\n const isBulletList = isActiveOfParentNodeType('bullet_list', view.state)\n const isOrderedList = isActiveOfParentNodeType('ordered_list', view.state)\n const isBlockquote = isActiveOfParentNodeType('blockquote', view.state)\n\n return {\n bold: isBold,\n em: isEm,\n underline: isUnderline,\n strikethrough: isStrikethrough,\n superscript: isSuperscript,\n subscript: isSubscript,\n code: isCode,\n color: color,\n backcolor: backcolor,\n fontsize: fontsize,\n fontname: fontname,\n link: link,\n align: align,\n bulletList: isBulletList,\n orderedList: isOrderedList,\n blockquote: isBlockquote,\n }\n}\n\nexport type TextAttrs = ReturnType\n\nexport const defaultRichTextAttrs: TextAttrs = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n superscript: false,\n subscript: false,\n code: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n link: '',\n align: 'left',\n bulletList: false,\n orderedList: false,\n blockquote: false,\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 { 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, 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, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '#5b9bd5',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'idn7Mx',\n left: 355,\n top: 65.25,\n width: 585,\n height: 188,\n lineHeight: 1.2,\n content: '

PPTIST

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

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

',\n rotate: 0,\n defaultFontName: 'Microsoft Yahei',\n defaultColor: '#333'\n },\n {\n type: 'line',\n id: 'FnpZs4',\n left: 361,\n top: 238,\n start: [0, 0],\n end: [549, 0],\n points: ['', ''],\n color: '#5b9bd5',\n style: 'solid',\n width: 2,\n },\n ],\n background: {\n type: 'solid',\n color: '#ffffff',\n },\n }\n]","import { SlideTheme } from '@/types/slides'\n\nexport const theme: SlideTheme = {\n themeColor: '#5b9bd5',\n fontColor: '#333',\n fontName: 'Microsoft Yahei',\n backgroundColor: '#fff',\n}","/* eslint-disable max-lines */\n\nimport { Slide } from '@/types/slides'\n\nexport const layouts: Slide[] = [\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: '4cbRxp',\n left: 0,\n top: 200,\n width: 546,\n height: 362.5,\n viewBox: [200, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n opacity: 0.7,\n rotate: 0\n },\n {\n type: 'shape',\n id: 'ookHrf',\n left: 0,\n top: 0,\n width: 300,\n height: 320,\n viewBox: [200, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'AkIh3E',\n left: 355,\n top: 95.11111111111111,\n width: 585,\n height: 116,\n lineHeight: 1.2,\n content: '

输入标题

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

请在此处输入副标题

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

在此处添加标题

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

在此处添加副标题

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

感谢观看

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

01

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

在此处输入标题

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

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

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

1

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

4

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

3

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

2

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

01

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

在此处添加标题

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

3.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

4.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

请在此处输入标题

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

请在此处输入内容1

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

请在此处输入内容2

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

请在此处输入内容3

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

请在此处输入内容4

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

1

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

在此输入内容

在此输入内容

在此输入内容

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

2

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

在此输入内容

在此输入内容

在此输入内容

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

3

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

在此输入内容

在此输入内容

在此输入内容

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

4

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

在此输入内容

在此输入内容

在此输入内容

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

5

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

在此输入内容

在此输入内容

在此输入内容

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

6

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

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n]","import { defineStore } from 'pinia'\nimport tinycolor from 'tinycolor2'\nimport { omit } from 'lodash'\nimport { Slide, SlideTheme, PPTElement } from '@/types/slides'\nimport { slides } from '@/mocks/slides'\nimport { theme } from '@/mocks/theme'\nimport { layouts } from '@/mocks/layout'\n\ninterface RemoveElementPropData {\n id: string;\n propName: string | string[];\n}\n\ninterface UpdateElementData {\n id: string | string[];\n props: Partial;\n}\n\nexport interface SlidesState {\n theme: SlideTheme;\n slides: Slide[];\n slideIndex: number;\n viewportRatio: number;\n}\n\nexport const useSlidesStore = defineStore('slides', {\n state: (): SlidesState => ({\n theme: theme, // 主题样式\n slides: slides, // 幻灯片页面数据\n slideIndex: 0, // 当前页面索引\n viewportRatio: 0.5625, // 可是区域比例,默认16:9\n }),\n\n getters: {\n currentSlide(state) {\n return state.slides[state.slideIndex]\n },\n \n currentSlideAnimations(state) {\n const currentSlide = state.slides[state.slideIndex]\n if (!currentSlide) return null\n const animations = currentSlide.animations\n if (!animations) return null\n \n const els = currentSlide.elements\n const elIds = els.map(el => el.id)\n return animations.filter(animation => elIds.includes(animation.elId))\n },\n \n layouts(state) {\n const {\n themeColor,\n fontColor,\n fontName,\n backgroundColor,\n } = state.theme\n \n const subColor = tinycolor(fontColor).isDark() ? 'rgba(230, 230, 230, 0.5)' : 'rgba(180, 180, 180, 0.5)'\n \n const layoutsString = JSON.stringify(layouts)\n .replaceAll('{{themeColor}}', themeColor)\n .replaceAll('{{fontColor}}', fontColor)\n .replaceAll('{{fontName}}', fontName)\n .replaceAll('{{backgroundColor}}', backgroundColor)\n .replaceAll('{{subColor}}', subColor)\n \n return JSON.parse(layoutsString)\n },\n },\n\n actions: {\n setTheme(themeProps: Partial) {\n this.theme = { ...this.theme, ...themeProps }\n },\n \n setViewportRatio(viewportRatio: number) {\n this.viewportRatio = viewportRatio\n },\n \n setSlides(slides: Slide[]) {\n this.slides = slides\n },\n \n addSlide(slide: Slide | Slide[]) {\n const slides = Array.isArray(slide) ? slide : [slide]\n const addIndex = this.slideIndex + 1\n this.slides.splice(addIndex, 0, ...slides)\n this.slideIndex = addIndex\n },\n \n updateSlide(props: Partial) {\n const slideIndex = this.slideIndex\n this.slides[slideIndex] = { ...this.slides[slideIndex], ...props }\n },\n \n deleteSlide(slideId: string | string[]) {\n const slidesId = Array.isArray(slideId) ? slideId : [slideId]\n \n const deleteSlidesIndex = []\n for (let i = 0; i < slidesId.length; i++) {\n const index = this.slides.findIndex(item => item.id === slidesId[i])\n deleteSlidesIndex.push(index)\n }\n let newIndex = Math.min(...deleteSlidesIndex)\n \n const maxIndex = this.slides.length - slidesId.length - 1\n if (newIndex > maxIndex) newIndex = maxIndex\n \n this.slideIndex = newIndex\n this.slides = this.slides.filter(item => !slidesId.includes(item.id))\n },\n \n updateSlideIndex(index: number) {\n this.slideIndex = index\n },\n \n addElement(element: PPTElement | PPTElement[]) {\n const elements = Array.isArray(element) ? element : [element]\n const currentSlideEls = this.slides[this.slideIndex].elements\n const newEls = [...currentSlideEls, ...elements]\n this.slides[this.slideIndex].elements = newEls\n },\n \n updateElement(data: UpdateElementData) {\n const { id, props } = data\n const elIdList = typeof id === 'string' ? [id] : id\n \n const slideIndex = this.slideIndex\n const slide = this.slides[slideIndex]\n const elements = slide.elements.map(el => {\n return elIdList.includes(el.id) ? { ...el, ...props } : el\n })\n this.slides[slideIndex].elements = (elements as PPTElement[])\n },\n \n removeElementProps(data: RemoveElementPropData) {\n const { id, propName } = data\n const propsNames = typeof propName === 'string' ? [propName] : propName\n \n const slideIndex = this.slideIndex\n const slide = this.slides[slideIndex]\n const elements = slide.elements.map(el => {\n return el.id === id ? omit(el, propsNames) : el\n })\n this.slides[slideIndex].elements = (elements as PPTElement[])\n },\n },\n})","import { defineStore } from 'pinia'\nimport { CreatingElement } from '@/types/edit'\nimport { ToolbarStates } from '@/types/toolbar'\nimport { SYS_FONTS } from '@/configs/font'\nimport { TextAttrs, defaultRichTextAttrs } from '@/utils/prosemirror/utils'\nimport { isSupportFont } from '@/utils/font'\n\nimport { useSlidesStore } from './slides'\n\nexport interface MainState {\n activeElementIdList: string[];\n handleElementId: string;\n activeGroupElementId: string;\n canvasPercentage: number;\n canvasScale: number;\n thumbnailsFocus: boolean;\n editorAreaFocus: boolean;\n disableHotkeys: boolean;\n showGridLines: boolean;\n creatingElement: CreatingElement | null;\n availableFonts: typeof SYS_FONTS;\n toolbarState: ToolbarStates;\n clipingImageElementId: string;\n isScaling: boolean;\n richTextAttrs: TextAttrs;\n selectedTableCells: string[];\n editingShapeElementId: string;\n selectedSlidesIndex: number[];\n}\n\nexport const useMainStore = defineStore('main', {\n state: (): MainState => ({\n activeElementIdList: [], // 被选中的元素ID集合,包含 handleElementId\n handleElementId: '', // 正在操作的元素ID\n activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID\n canvasPercentage: 90, // 画布可视区域百分比\n canvasScale: 1, // 画布缩放比例(基于宽度1000px)\n thumbnailsFocus: false, // 左侧导航缩略图区域聚焦\n editorAreaFocus: false, // 编辑区域聚焦\n disableHotkeys: false, // 禁用快捷键\n showGridLines: false, // 显示网格线\n creatingElement: null, // 正在插入的元素信息,需要通过绘制插入的元素(文字、形状、线条)\n availableFonts: SYS_FONTS, // 当前环境可用字体\n toolbarState: ToolbarStates.SLIDE_DESIGN, // 右侧工具栏状态\n clipingImageElementId: '', // 当前正在裁剪的图片ID \n richTextAttrs: defaultRichTextAttrs, // 富文本状态\n selectedTableCells: [], // 选中的表格单元格\n isScaling: false, // 正在进行元素缩放\n editingShapeElementId: '', // 当前正处在编辑文字状态的形状ID \n selectedSlidesIndex: [], // 当前被选中的页面索引集合\n }),\n\n getters: {\n activeElementList(state) {\n const slidesStore = useSlidesStore()\n const currentSlide = slidesStore.currentSlide\n if (!currentSlide || !currentSlide.elements) return []\n return currentSlide.elements.filter(element => state.activeElementIdList.includes(element.id))\n },\n \n handleElement(state) {\n const slidesStore = useSlidesStore()\n const currentSlide = slidesStore.currentSlide\n if (!currentSlide || !currentSlide.elements) return null\n return currentSlide.elements.find(element => state.handleElementId === element.id) || null\n },\n },\n\n actions: {\n setActiveElementIdList(activeElementIdList: string[]) {\n if (activeElementIdList.length === 1) this.handleElementId = activeElementIdList[0]\n else this.handleElementId = ''\n \n this.activeElementIdList = activeElementIdList\n },\n \n setHandleElementId(handleElementId: string) {\n this.handleElementId = handleElementId\n },\n \n setActiveGroupElementId(activeGroupElementId: string) {\n this.activeGroupElementId = activeGroupElementId\n },\n \n setCanvasPercentage(percentage: number) {\n this.canvasPercentage = percentage\n },\n \n setCanvasScale(scale: number) {\n this.canvasScale = scale\n },\n \n setThumbnailsFocus(isFocus: boolean) {\n this.thumbnailsFocus = isFocus\n },\n \n setEditorareaFocus(isFocus: boolean) {\n this.editorAreaFocus = isFocus\n },\n \n setDisableHotkeysState(disable: boolean) {\n this.disableHotkeys = disable\n },\n \n setGridLinesState(show: boolean) {\n this.showGridLines = show\n },\n \n setCreatingElement(element: CreatingElement | null) {\n this.creatingElement = element\n },\n \n setAvailableFonts() {\n this.availableFonts = SYS_FONTS.filter(font => isSupportFont(font.value))\n },\n \n setToolbarState(toolbarState: ToolbarStates) {\n this.toolbarState = toolbarState\n },\n \n setClipingImageElementId(elId: string) {\n this.clipingImageElementId = elId\n },\n \n setRichtextAttrs(attrs: TextAttrs) {\n this.richTextAttrs = attrs\n },\n \n setSelectedTableCells(cells: string[]) {\n this.selectedTableCells = cells\n },\n \n setScalingState(isScaling: boolean) {\n this.isScaling = isScaling\n },\n \n setEditingShapeElementId(ellId: string) {\n this.editingShapeElementId = ellId\n },\n \n updateSelectedSlidesIndex(selectedSlidesIndex: number[]) {\n this.selectedSlidesIndex = selectedSlidesIndex\n },\n },\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 { defineStore } from 'pinia'\nimport { IndexableTypeArray } from 'dexie'\nimport { snapshotDB, Snapshot } from '@/utils/database'\n\nimport { useSlidesStore } from './slides'\nimport { useMainStore } from './main'\n\nexport interface ScreenState {\n snapshotCursor: number;\n snapshotLength: number;\n}\n\nexport const useSnapshotStore = defineStore('snapshot', {\n state: (): ScreenState => ({\n snapshotCursor: -1, // 历史快照指针\n snapshotLength: 0, // 历史快照长度\n }),\n\n getters: {\n canUndo(state) {\n return state.snapshotCursor > 0\n },\n canRedo(state) {\n return state.snapshotCursor < state.snapshotLength - 1\n },\n },\n\n actions: {\n setSnapshotCursor(cursor: number) {\n this.snapshotCursor = cursor\n },\n setSnapshotLength(length: number) {\n this.snapshotLength = length\n },\n\n async initSnapshotDatabase() {\n const slidesStore = useSlidesStore()\n\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: slidesStore.slideIndex,\n slides: slidesStore.slides,\n }\n await snapshotDB.snapshots.add(newFirstSnapshot)\n this.setSnapshotCursor(0)\n this.setSnapshotLength(1)\n },\n \n async addSnapshot() {\n const slidesStore = useSlidesStore()\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 (this.snapshotCursor >= 0 && this.snapshotCursor < allKeys.length - 1) {\n needDeleteKeys = allKeys.slice(this.snapshotCursor + 1)\n }\n \n // 添加新快照\n const snapshot = {\n index: slidesStore.slideIndex,\n slides: slidesStore.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: slidesStore.slideIndex })\n }\n \n await snapshotDB.snapshots.bulkDelete(needDeleteKeys)\n \n this.setSnapshotCursor(snapshotLength - 1)\n this.setSnapshotLength(snapshotLength)\n },\n \n async unDo() {\n if (this.snapshotCursor <= 0) return\n\n const slidesStore = useSlidesStore()\n const mainStore = useMainStore()\n \n const snapshotCursor = this.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 slidesStore.setSlides(slides)\n slidesStore.updateSlideIndex(slideIndex)\n this.setSnapshotCursor(snapshotCursor)\n mainStore.setActiveElementIdList([])\n },\n \n async reDo() {\n if (this.snapshotCursor >= this.snapshotLength - 1) return\n\n const slidesStore = useSlidesStore()\n const mainStore = useMainStore()\n \n const snapshotCursor = this.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 slidesStore.setSlides(slides)\n slidesStore.updateSlideIndex(slideIndex)\n this.setSnapshotCursor(snapshotCursor)\n mainStore.setActiveElementIdList([])\n },\n },\n})","import { defineStore } from 'pinia'\n\nexport interface KeyboardState {\n ctrlKeyState: boolean;\n shiftKeyState: boolean;\n}\n\nexport const useKeyboardStore = defineStore('keyboard', {\n state: (): KeyboardState => ({\n ctrlKeyState: false, // ctrl键按下状态\n shiftKeyState: false, // shift键按下状态\n }),\n\n getters: {\n ctrlOrShiftKeyActive(state) {\n return state.ctrlKeyState || state.shiftKeyState\n },\n },\n\n actions: {\n setCtrlKeyState(active: boolean) {\n this.ctrlKeyState = active\n },\n setShiftKeyState(active: boolean) {\n this.shiftKeyState = active\n },\n },\n})","import { defineStore } from 'pinia'\n\nexport interface ScreenState {\n screening: boolean;\n}\n\nexport const useScreenStore = defineStore('screen', {\n state: (): ScreenState => ({\n screening: false, // 是否进入放映状态\n }),\n\n actions: {\n setScreening(screening: boolean) {\n this.screening = screening\n },\n },\n})","import { padStart } from 'lodash'\n\n/**\n * 生成随机码\n * @param len 随机码长度\n */\nexport const createRandomCode = (len = 8) => {\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}\n\n/**\n * 判断设备\n */\nexport const isPC = () => {\n return !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|Mobile|BlackBerry|Symbian|Windows Phone)/i)\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-55178b6a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"pptist-editor\" }\nconst _hoisted_2 = { class: \"layout-content\" }\nconst _hoisted_3 = { class: \"layout-content-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_EditorHeader = _resolveComponent(\"EditorHeader\")!\n const _component_Thumbnails = _resolveComponent(\"Thumbnails\")!\n const _component_CanvasTool = _resolveComponent(\"CanvasTool\")!\n const _component_Canvas = _resolveComponent(\"Canvas\")!\n const _component_Remark = _resolveComponent(\"Remark\")!\n const _component_Toolbar = _resolveComponent(\"Toolbar\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_EditorHeader, { class: \"layout-header\" }),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Thumbnails, { class: \"layout-content-left\" }),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_CanvasTool, { class: \"center-top\" }),\n _createVNode(_component_Canvas, {\n class: \"center-body\",\n style: _normalizeStyle({ height: `calc(100% - ${_ctx.remarkHeight + 40}px)` })\n }, null, 8, [\"style\"]),\n _createVNode(_component_Remark, {\n class: \"center-bottom\",\n height: _ctx.remarkHeight,\n \"onUpdate:height\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.remarkHeight) = $event)),\n style: _normalizeStyle({ height: `${_ctx.remarkHeight}px` })\n }, null, 8, [\"height\", \"style\"])\n ]),\n _createVNode(_component_Toolbar, { class: \"layout-content-right\" })\n ])\n ]))\n}","import { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\n\nexport const enum ShapePathFormulasKeys {\n ROUND_RECT = 'roundRect',\n ROUND_RECT_DIAGONAL = 'roundRectDiagonal',\n ROUND_RECT_SINGLE = 'roundRectSingle',\n ROUND_RECT_SAMESIDE = 'roundRectSameSide',\n CUT_RECT_DIAGONAL = 'cutRectDiagonal',\n CUT_RECT_SINGLE = 'cutRectSingle',\n CUT_RECT_SAMESIDE = 'cutRectSameSide',\n MESSAGE = 'message',\n ROUND_MESSAGE = 'roundMessage',\n L = 'L',\n RING_RECT = 'ringRect',\n PLUS = 'plus',\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 LATEX = 'latex',\n VIDEO = 'video',\n AUDIO = 'audio',\n}\n\n/**\n * 元素阴影\n * \n * h: 水平偏移量\n * \n * v: 垂直偏移量\n * \n * blur: 模糊程度\n * \n * color: 阴影颜色\n */\nexport interface PPTElementShadow {\n h: number;\n v: number;\n blur: number;\n color: string;\n}\n\n/**\n * 元素边框\n * \n * style?: 边框样式(实线或虚线)\n * \n * width?: 边框宽度\n * \n * color?: 边框颜色\n */\nexport interface PPTElementOutline {\n style?: 'dashed' | 'solid';\n width?: number;\n color?: string;\n}\n\n/**\n * 元素超链接\n * \n * type: 链接类型(网页、幻灯片页面)\n * \n * target: 目标地址(网页链接、幻灯片页面ID)\n */\nexport interface PPTElementLink {\n type: 'web' | 'slide';\n target: string;\n}\n\n\n/**\n * 元素通用属性\n * \n * id: 元素ID\n * \n * left: 元素水平方向位置(距离画布左侧)\n * \n * top: 元素垂直方向位置(距离画布顶部)\n * \n * lock?: 锁定元素\n * \n * groupId?: 组合ID(拥有相同组合ID的元素即为同一组合元素成员)\n * \n * width: 元素宽度\n * \n * height: 元素高度\n * \n * rotate: 旋转角度\n * \n * link?: 超链接\n */\ninterface PPTBaseElement {\n id: string;\n left: number;\n top: number;\n lock?: boolean;\n groupId?: string;\n width: number;\n height: number;\n rotate: number;\n link?: PPTElementLink;\n}\n\n\n/**\n * 文本元素\n * \n * type: 元素类型(text)\n * \n * content: 文本内容(HTML字符串)\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * outline?: 边框\n * \n * fill?: 填充色\n * \n * lineHeight?: 行高(倍),默认1.5\n * \n * wordSpace?: 字间距,默认0\n * \n * opacity?: 不透明度,默认1\n * \n * shadow?: 阴影\n */\nexport interface PPTTextElement extends PPTBaseElement {\n type: 'text';\n content: string;\n defaultFontName: string;\n defaultColor: string;\n outline?: PPTElementOutline;\n fill?: string;\n lineHeight?: number;\n wordSpace?: number;\n opacity?: number;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 图片翻转、形状翻转\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n */\nexport interface ImageOrShapeFlip {\n flipH?: boolean;\n flipV?: boolean;\n}\n\n/**\n * 图片滤镜\n * \n * https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter\n * \n * 'blur'?: 模糊,默认0(px)\n * \n * 'brightness'?: 亮度,默认100(%)\n * \n * 'contrast'?: 对比度,默认100(%)\n * \n * 'grayscale'?: 灰度,默认0(%)\n * \n * 'saturate'?: 饱和度,默认100(%)\n * \n * 'hue-rotate'?: 色相旋转,默认0(deg)\n * \n * 'opacity'?: 不透明度,默认100(%)\n */\nexport interface ImageElementFilters {\n 'blur'?: string;\n 'brightness'?: string;\n 'contrast'?: string;\n 'grayscale'?: string;\n 'saturate'?: string;\n 'hue-rotate'?: string;\n 'opacity'?: string;\n}\n\n/**\n * 图片裁剪\n * \n * range: 裁剪范围,例如:[[10, 10], [90, 90]] 表示裁取原图从左上角 10%, 10% 到 90%, 90% 的范围\n * \n * shape: 裁剪形状,见 configs/imageClip.ts CLIPPATHS \n */\nexport interface ImageElementClip {\n range: [[number, number], [number, number]];\n shape: string;\n}\n\n/**\n * 图片元素\n * \n * type: 元素类型(image)\n * \n * fixedRatio: 固定图片宽高比例\n * \n * src: 图片地址\n * \n * outline?: 边框\n * \n * filters?: 图片滤镜\n * \n * clip?: 裁剪信息\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n */\nexport interface PPTImageElement extends PPTBaseElement {\n type: 'image';\n fixedRatio: boolean;\n src: string;\n outline?: PPTElementOutline;\n filters?: ImageElementFilters;\n clip?: ImageElementClip;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 形状渐变\n * \n * type: 渐变类型(径向、线性)\n * \n * color: 渐变颜色\n * \n * rotate: 渐变角度(线性渐变)\n */\nexport interface ShapeGradient {\n type: 'linear' | 'radial';\n color: [string, string];\n rotate: number;\n}\n\n/**\n * 形状内文本\n * \n * content: 文本内容(HTML字符串)\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * align: 文本对齐方向(垂直方向)\n */\nexport interface ShapeText {\n content: string;\n defaultFontName: string;\n defaultColor: string;\n align: 'top' | 'middle' | 'bottom';\n}\n\n/**\n * 形状元素\n * \n * type: 元素类型(shape)\n * \n * viewBox: SVG的viewBox属性,例如 [1000, 1000] 表示 '0 0 1000 1000'\n * \n * path: 形状路径,SVG path 的 d 属性\n * \n * fixedRatio: 固定形状宽高比例\n * \n * fill: 填充,不存在渐变时生效\n * \n * gradient?: 渐变,该属性存在时将优先作为填充\n * \n * outline?: 边框\n * \n * opacity?: 不透明度\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n * \n * special?: 特殊形状(标记一些难以解析的形状,例如路径使用了 L Q C A 以外的类型,该类形状在导出后将变为图片的形式)\n * \n * text?: 形状内文本\n * \n * pathFormula?: 形状路径计算公式\n * 一般情况下,形状的大小变化时仅由宽高基于 viewBox 的缩放比例来调整形状,而 viewBox 本身和 path 不会变化,\n * 但也有一些形状希望能更精确的控制一些关键点的位置,此时就需要提供路径计算公式,通过在缩放时更新 viewBox 并重新计算 path 来重新绘制形状\n */\nexport interface PPTShapeElement extends PPTBaseElement {\n type: 'shape';\n viewBox: [number, number];\n path: string;\n fixedRatio: boolean;\n fill: string;\n gradient?: ShapeGradient;\n outline?: PPTElementOutline;\n opacity?: number;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n special?: boolean;\n text?: ShapeText;\n pathFormula?: ShapePathFormulasKeys;\n}\n\n\nexport type LinePoint = '' | 'arrow' | 'dot' \n\n/**\n * 线条元素\n * \n * type: 元素类型(line)\n * \n * start: 起点位置([x, y])\n * \n * end: 终点位置([x, y])\n * \n * style: 线条样式(实线、虚线)\n * \n * color: 线条颜色\n * \n * points: 端点样式([起点样式, 终点样式],可选:无、箭头、圆点)\n * \n * shadow?: 阴影\n * \n * broken?: 折线控制点位置([x, y])\n * \n * curve?: 二次曲线控制点位置([x, y])\n * \n * curve?: 三次曲线控制点位置([[x1, y1], [x2, y2]])\n */\nexport interface PPTLineElement extends Omit {\n type: 'line';\n start: [number, number];\n end: [number, number];\n style: 'solid' | 'dashed';\n color: string;\n points: [LinePoint, LinePoint];\n shadow?: PPTElementShadow;\n broken?: [number, number];\n curve?: [number, number];\n cubic?: [[number, number], [number, number]];\n}\n\n\nexport type PresetChartType = 'bar' | 'horizontalBar' | 'line' | 'area' | 'scatter' | 'pie' | 'ring'\nexport type ChartType = 'bar' | 'line' | 'pie'\nexport type ChartOptions = ILineChartOptions & IBarChartOptions & IPieChartOptions\nexport interface ChartData {\n labels: string[];\n legends: string[];\n series: number[][];\n}\n\n/**\n * 图表元素\n * \n * type: 元素类型(chart)\n * \n * fill?: 填充色\n * \n * chartType: 图表基础类型(bar/line/pie),所有图表类型都是由这三种基本类型衍生而来\n * \n * data: 图表数据\n * \n * options?: 图表配置项\n * \n * outline?: 边框\n * \n * themeColor: 主题色\n * \n * gridColor?: 网格&坐标颜色\n * \n * legend?: 图例/位置\n */\nexport interface PPTChartElement extends PPTBaseElement {\n type: 'chart';\n fill?: string;\n chartType: ChartType;\n data: ChartData;\n options?: ChartOptions;\n outline?: PPTElementOutline;\n themeColor: string[];\n gridColor?: string;\n legend?: '' | 'top' | 'bottom',\n}\n\n\n/**\n * 表格单元格样式\n * \n * bold?: 加粗\n * \n * em?: 斜体\n * \n * underline?: 下划线\n * \n * strikethrough?: 删除线\n * \n * color?: 字体颜色\n * \n * backcolor?: 填充色\n * \n * fontsize?: 字体大小\n * \n * fontname?: 字体\n * \n * align?: 对齐方式\n */\nexport interface TableCellStyle {\n bold?: boolean;\n em?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: 'left' | 'center' | 'right';\n}\n\n\n/**\n * 表格单元格\n * \n * id: 单元格ID\n * \n * colspan: 合并列数\n * \n * rowspan: 合并行数\n * \n * text: 文字内容\n * \n * style?: 单元格样式\n */\nexport interface TableCell {\n id: string;\n colspan: number;\n rowspan: number;\n text: string;\n style?: TableCellStyle;\n}\n\n/**\n * 表格主题\n * \n * color: 主题色\n * \n * rowHeader: 标题行\n * \n * rowFooter: 汇总行\n * \n * colHeader: 第一列\n * \n * colFooter: 最后一列\n */\nexport interface TableTheme {\n color: string;\n rowHeader: boolean;\n rowFooter: boolean;\n colHeader: boolean;\n colFooter: boolean;\n}\n\n/**\n * 表格元素\n * \n * type: 元素类型(table)\n * \n * outline: 边框\n * \n * theme?: 主题\n * \n * colWidths: 列宽数组,如[30, 50, 20]表示三列宽度分别为30%, 50%, 20%\n * \n * data: 表格数据\n */\nexport interface PPTTableElement extends PPTBaseElement {\n type: 'table';\n outline: PPTElementOutline;\n theme?: TableTheme;\n colWidths: number[];\n data: TableCell[][];\n}\n\n\n/**\n * LaTeX元素(公式)\n * \n * type: 元素类型(latex)\n * \n * latex: latex代码\n * \n * path: svg path\n * \n * color: 颜色\n * \n * strokeWidth: 路径宽度\n * \n * viewBox: SVG的viewBox属性\n * \n * fixedRatio: 固定形状宽高比例\n */\nexport interface PPTLatexElement extends PPTBaseElement {\n type: 'latex';\n latex: string;\n path: string;\n color: string;\n strokeWidth: number;\n viewBox: [number, number];\n fixedRatio: boolean;\n}\n\n/**\n * 视频元素\n * \n * type: 元素类型(video)\n * \n * src: 视频地址\n * \n * poster: 预览封面\n */\nexport interface PPTVideoElement extends PPTBaseElement {\n type: 'video';\n src: string;\n poster?: string;\n}\n\n/**\n * 音频元素\n * \n * type: 元素类型(audio)\n * \n * fixedRatio: 固定图标宽高比例\n * \n * color: 图标颜色\n * \n * loop: 循环播放\n * \n * autoplay: 自动播放\n * \n * src: 音频地址\n */\nexport interface PPTAudioElement extends PPTBaseElement {\n type: 'audio';\n fixedRatio: boolean;\n color: string,\n loop: boolean,\n autoplay: boolean,\n src: string;\n}\n\n\nexport type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement | PPTLatexElement | PPTVideoElement | PPTAudioElement\n\n\n/**\n * 元素动画\n * \n * elId: 元素ID\n * \n * type: 动画类型\n * \n * duration: 动画持续时间\n */\nexport interface PPTAnimation {\n elId: string;\n type: string;\n duration: number;\n}\n\n/**\n * 幻灯片背景\n * \n * type: 背景类型(纯色、图片、渐变)\n * \n * color?: 背景颜色(纯色)\n * \n * image?: 图片地址(图片)\n * \n * imageSize?: 图片填充方式\n * \n * gradientType?: 渐变类型(线性、径向)\n * \n * gradientColor?: 渐变颜色\n * \n * gradientRotate?: 渐变角度(线性)\n */\nexport interface SlideBackground {\n type: 'solid' | 'image' | 'gradient';\n color?: string;\n image?: string;\n imageSize?: 'cover' | 'contain' | 'repeat';\n gradientType?: 'linear' | 'radial';\n gradientColor?: [string, string];\n gradientRotate?: number;\n}\n\n\nexport type TurningMode = 'no' | 'fade' | 'slideX' | 'slideY'\n\n/**\n * 幻灯片页面\n * \n * id: 页面ID\n * \n * elements: 元素集合\n * \n * remark?: 备注\n * \n * background?: 页面背景\n * \n * animations?: 元素动画集合\n * \n * turningMode?: 翻页方式\n */\nexport interface Slide {\n id: string;\n elements: PPTElement[];\n remark?: string;\n background?: SlideBackground;\n animations?: PPTAnimation[];\n turningMode?: TurningMode;\n}\n\n/**\n * 幻灯片主题\n * \n * backgroundColor: 页面背景颜色\n * \n * themeColor: 主题色,用于默认创建的形状颜色等\n * \n * fontColor: 字体颜色\n * \n * fontName: 字体\n */\nexport interface SlideTheme {\n backgroundColor: string;\n themeColor: string;\n fontColor: string;\n fontName: string;\n}","import CryptoJS from 'crypto-js'\n\nconst CRYPTO_KEY = 'pptist'\n\n/**\n * 加密\n * @param msg 待加密字符串\n */\nexport const encrypt = (msg: string) => {\n return CryptoJS.AES.encrypt(msg, CRYPTO_KEY).toString()\n}\n\n/**\n * 解密\n * @param ciphertext 待解密字符串\n */\nexport const decrypt = (ciphertext: string) => {\n const bytes = CryptoJS.AES.decrypt(ciphertext, CRYPTO_KEY)\n return bytes.toString(CryptoJS.enc.Utf8)\n}","import Clipboard from 'clipboard'\nimport { decrypt } from '@/utils/crypto'\n\n/**\n * 复制文本到剪贴板\n * @param text 文本内容\n */\nexport const copyText = (text: string) => {\n return new Promise((resolve, reject) => {\n const fakeElement = document.createElement('button')\n const clipboard = new Clipboard(fakeElement, {\n text: () => text,\n action: () => 'copy',\n container: document.body,\n })\n clipboard.on('success', e => {\n clipboard.destroy()\n resolve(e)\n })\n clipboard.on('error', e => {\n clipboard.destroy()\n reject(e)\n })\n document.body.appendChild(fakeElement)\n fakeElement.click()\n document.body.removeChild(fakeElement)\n })\n}\n\n// 读取剪贴板\nexport const readClipboard = (): Promise => {\n return new Promise((resolve, reject) => {\n if (navigator.clipboard?.readText) {\n navigator.clipboard.readText().then(text => {\n if (!text) reject('剪贴板为空或者不包含文本')\n return resolve(text)\n })\n }\n else reject('浏览器不支持或禁止访问剪贴板,请使用快捷键 Ctrl + V')\n })\n}\n\n// 解析加密后的剪贴板内容\nexport const pasteCustomClipboardString = (text: string) => {\n let clipboardData\n try {\n clipboardData = JSON.parse(decrypt(text))\n }\n catch {\n clipboardData = text\n }\n\n return clipboardData\n}\n\n// 尝试解析剪贴板内容是否为Excel表格(或类似的)数据格式\nexport const pasteExcelClipboardString = (text: string): string[][] | null => {\n const lines: string[] = text.split('\\r\\n')\n\n if (lines[lines.length - 1] === '') lines.pop()\n\n let colCount = -1\n const data: string[][] = []\n for (const index in lines) {\n data[index] = lines[index].split('\\t')\n\n if (data[index].length === 1) return null\n if (colCount === -1) colCount = data[index].length\n else if (colCount !== data[index].length) return null\n }\n return data\n}","import tinycolor from 'tinycolor2'\r\nimport { PPTElement, PPTLineElement } from '@/types/slides'\r\nimport { createRandomCode } from '@/utils/common'\r\n\r\ninterface RotatedElementData {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n rotate: number;\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置范围\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedRange = (element: RotatedElementData) => {\r\n const { left, top, width, height, rotate = 0 } = element\r\n\r\n const radius = Math.sqrt( Math.pow(width, 2) + Math.pow(height, 2) ) / 2\r\n const auxiliaryAngle = Math.atan(height / width) * 180 / Math.PI\r\n\r\n const tlbraRadian = (180 - rotate - auxiliaryAngle) * Math.PI / 180\r\n const trblaRadian = (auxiliaryAngle - rotate) * Math.PI / 180\r\n\r\n const middleLeft = left + width / 2\r\n const middleTop = top + height / 2\r\n\r\n const xAxis = [\r\n middleLeft + radius * Math.cos(tlbraRadian),\r\n middleLeft + radius * Math.cos(trblaRadian),\r\n middleLeft - radius * Math.cos(tlbraRadian),\r\n middleLeft - radius * Math.cos(trblaRadian),\r\n ]\r\n const yAxis = [\r\n middleTop - radius * Math.sin(tlbraRadian),\r\n middleTop - radius * Math.sin(trblaRadian),\r\n middleTop + radius * Math.sin(tlbraRadian),\r\n middleTop + radius * Math.sin(trblaRadian),\r\n ]\r\n\r\n return {\r\n xRange: [Math.min(...xAxis), Math.max(...xAxis)],\r\n yRange: [Math.min(...yAxis), Math.max(...yAxis)],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置与旋转之前位置的偏离距离\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedOffset = (element: RotatedElementData) => {\r\n const { xRange: originXRange, yRange: originYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: 0,\r\n })\r\n const { xRange: rotatedXRange, yRange: rotatedYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n return {\r\n offsetX: rotatedXRange[0] - originXRange[0],\r\n offsetY: rotatedYRange[0] - originYRange[0],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的位置范围\r\n * @param element 元素信息\r\n */\r\nexport const getElementRange = (element: PPTElement) => {\r\n let minX, maxX, minY, maxY\r\n\r\n if (element.type === 'line') {\r\n minX = element.left\r\n maxX = element.left + Math.max(element.start[0], element.end[0])\r\n minY = element.top\r\n maxY = element.top + Math.max(element.start[1], element.end[1])\r\n }\r\n else if ('rotate' in element && element.rotate) {\r\n const { left, top, width, height, rotate } = element\r\n const { xRange, yRange } = getRectRotatedRange({ left, top, width, height, rotate })\r\n minX = xRange[0]\r\n maxX = xRange[1]\r\n minY = yRange[0]\r\n maxY = yRange[1]\r\n }\r\n else {\r\n minX = element.left\r\n maxX = element.left + element.width\r\n minY = element.top\r\n maxY = element.top + element.height\r\n }\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\n/**\r\n * 计算一组元素在画布中的位置范围\r\n * @param elementList 一组元素信息\r\n */\r\nexport const getElementListRange = (elementList: PPTElement[]) => {\r\n const leftValues: number[] = []\r\n const topValues: number[] = []\r\n const rightValues: number[] = []\r\n const bottomValues: number[] = []\r\n\r\n elementList.forEach(element => {\r\n const { minX, maxX, minY, maxY } = getElementRange(element)\r\n leftValues.push(minX)\r\n topValues.push(minY)\r\n rightValues.push(maxX)\r\n bottomValues.push(maxY)\r\n })\r\n\r\n const minX = Math.min(...leftValues)\r\n const maxX = Math.max(...rightValues)\r\n const minY = Math.min(...topValues)\r\n const maxY = Math.max(...bottomValues)\r\n\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\nexport interface AlignLine {\r\n value: number;\r\n range: [number, number];\r\n}\r\n\r\n/**\r\n * 将一组对齐吸附线进行去重:同位置的的多条对齐吸附线仅留下一条,取该位置所有对齐吸附线的最大值和最小值为新的范围\r\n * @param lines 一组对齐吸附线信息\r\n */\r\nexport const uniqAlignLines = (lines: AlignLine[]) => {\r\n const uniqLines: AlignLine[] = []\r\n lines.forEach(line => {\r\n const index = uniqLines.findIndex(_line => _line.value === line.value)\r\n if (index === -1) uniqLines.push(line)\r\n else {\r\n const uniqLine = uniqLines[index]\r\n const rangeMin = Math.min(uniqLine.range[0], line.range[0])\r\n const rangeMax = Math.max(uniqLine.range[1], line.range[1])\r\n const range: [number, number] = [rangeMin, rangeMax]\r\n const _line = { value: line.value, range }\r\n uniqLines[index] = _line\r\n }\r\n })\r\n return uniqLines\r\n}\r\n\r\n/**\r\n * 以元素列表为基础,为每一个元素生成新的ID,并关联到旧ID形成一个字典\r\n * 主要用于复制元素时,维持数据中各处元素ID原有的关系\r\n * 例如:原本两个组合的元素拥有相同的groupId,复制后依然会拥有另一个相同的groupId\r\n * @param elements 元素列表数据\r\n */\r\nexport const createElementIdMap = (elements: PPTElement[]) => {\r\n const groupIdMap = {}\r\n const elIdMap = {}\r\n for (const element of elements) {\r\n const groupId = element.groupId\r\n if (groupId && !groupIdMap[groupId]) {\r\n groupIdMap[groupId] = createRandomCode()\r\n }\r\n elIdMap[element.id] = createRandomCode()\r\n }\r\n return {\r\n groupIdMap,\r\n elIdMap,\r\n }\r\n}\r\n\r\n/**\r\n * 根据表格的主题色,获取对应用于配色的子颜色\r\n * @param themeColor 主题色\r\n */\r\nexport const getTableSubThemeColor = (themeColor: string) => {\r\n const rgba = tinycolor(themeColor)\r\n return [\r\n rgba.setAlpha(0.3).toRgbString(),\r\n rgba.setAlpha(0.1).toRgbString(),\r\n ]\r\n}\r\n\r\n/**\r\n * 获取线条元素路径字符串\r\n * @param element 线条元素\r\n */\r\nexport const getLineElementPath = (element: PPTLineElement) => {\r\n const start = element.start.join(',')\r\n const end = element.end.join(',')\r\n if (element.broken) {\r\n const mid = element.broken.join(',')\r\n return `M${start} L${mid} L${end}`\r\n }\r\n else if (element.curve) {\r\n const mid = element.curve.join(',')\r\n return `M${start} Q${mid} ${end}`\r\n }\r\n else if (element.cubic) {\r\n const [c1, c2] = element.cubic\r\n const p1 = c1.join(',')\r\n const p2 = c2.join(',')\r\n return `M${start} C${p1} ${p2} ${end}`\r\n }\r\n return `M${start} L${end}`\r\n}","/**\r\n * 将普通文本转为带段落信息的HTML字符串\r\n * @param text 文本\r\n */\r\nexport const parseText2Paragraphs = (text: string) => {\r\n const htmlText = text.replace(/[\\n\\r]+/g, '
')\r\n const paragraphs = htmlText.split('
')\r\n let string = ''\r\n for (const paragraph of paragraphs) {\r\n if (paragraph) string += `
${paragraph}
`\r\n }\r\n return string\r\n}","import { debounce, throttle} from 'lodash'\nimport { useSnapshotStore } from '@/store'\n\nexport default () => {\n const snapshotStore = useSnapshotStore()\n\n // 添加历史快照(历史记录)\n const addHistorySnapshot = debounce(function() {\n snapshotStore.addSnapshot()\n }, 300, { trailing: true })\n\n // 重做\n const redo = throttle(function() {\n snapshotStore.reDo()\n }, 100, { leading: true, trailing: false })\n\n // 撤销\n const undo = throttle(function() {\n snapshotStore.unDo()\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 { ShapePathFormulasKeys } from '@/types/slides'\n\nexport interface ShapePoolItem {\n viewBox: [number, number];\n path: string;\n special?: boolean;\n pathFormula?: ShapePathFormulasKeys;\n}\n\ninterface ShapeListItem {\n type: string;\n children: ShapePoolItem[];\n}\n\nexport const SHAPE_PATH_FORMULAS = {\n [ShapePathFormulasKeys.ROUND_RECT]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height - radius} Q ${width} ${height} ${width - radius} ${height} L ${radius} ${height} Q 0 ${height} 0 ${height - radius} L 0 ${radius} Q 0 0 ${radius} 0 Z`\n },\n [ShapePathFormulasKeys.CUT_RECT_DIAGONAL]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 5\n return `M 0 ${height - radius} L 0 0 L ${width - radius} 0 L ${width} ${radius} L ${width} ${height} L ${radius} ${height} Z`\n },\n [ShapePathFormulasKeys.CUT_RECT_SINGLE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 5\n return `M 0 ${height} L 0 0 L ${width - radius} 0 L ${width} ${radius} L ${width} ${height} Z`\n },\n [ShapePathFormulasKeys.CUT_RECT_SAMESIDE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 5\n return `M 0 ${radius} L ${radius} 0 L ${width - radius} 0 L ${width} ${radius} L ${width} ${height} L 0 ${height} Z`\n },\n [ShapePathFormulasKeys.ROUND_RECT_DIAGONAL]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M 0 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height} L ${radius} ${height} Q 0 ${height} 0 ${height - radius} L 0 0 Z`\n },\n [ShapePathFormulasKeys.ROUND_RECT_SINGLE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M 0 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height} L 0 ${height} L 0 0 Z`\n },\n [ShapePathFormulasKeys.ROUND_RECT_SAMESIDE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M 0 ${radius} Q 0 0 ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height} L 0 ${height} Z`\n },\n [ShapePathFormulasKeys.MESSAGE]: (width: number, height: number) => {\n const arrowWidth = width / 5\n const arrowheight = height / 5\n return `M 0 0 L ${width} 0 L ${width} ${height - arrowheight} L ${width / 2} ${height - arrowheight} L ${width / 2 - arrowWidth} ${height} L ${width / 2 - arrowWidth} ${height - arrowheight} L 0 ${height - arrowheight} Z`\n },\n [ShapePathFormulasKeys.ROUND_MESSAGE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n const arrowWidth = width / 5\n const arrowheight = height / 5\n return `M 0 ${radius} Q 0 0 ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height - radius - arrowheight} Q ${width} ${height - arrowheight} ${width - radius} ${height - arrowheight} L ${width / 2} ${height - arrowheight} L ${width / 2 - arrowWidth} ${height} L ${width / 2 - arrowWidth} ${height - arrowheight} L ${radius} ${height - arrowheight} Q 0 ${height - arrowheight} 0 ${height - radius - arrowheight} L 0 ${radius} Z`\n },\n [ShapePathFormulasKeys.L]: (width: number, height: number) => {\n const lineWidth = Math.min(width, height) / 4\n return `M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${height - lineWidth} L ${lineWidth} ${height - lineWidth} L ${lineWidth} 0 Z`\n },\n [ShapePathFormulasKeys.RING_RECT]: (width: number, height: number) => {\n const lineWidth = Math.min(width, height) / 4\n return `M 0 0 ${width} 0 ${width} ${height} L 0 ${height} L 0 0 Z M ${lineWidth} ${lineWidth} L ${lineWidth} ${height - lineWidth} L ${width - lineWidth} ${height - lineWidth} L ${width - lineWidth} ${lineWidth} Z`\n },\n [ShapePathFormulasKeys.PLUS]: (width: number, height: number) => {\n const lineWidth = Math.min(width, height) / 4\n return `M ${width / 2 - lineWidth / 2} 0 L ${width / 2 - lineWidth / 2} ${height / 2 - lineWidth / 2} L 0 ${height / 2 - lineWidth / 2} L 0 ${height / 2 + lineWidth / 2} L ${width / 2 - lineWidth / 2} ${height / 2 + lineWidth / 2} L ${width / 2 - lineWidth / 2} ${height} L ${width / 2 + lineWidth / 2} ${height} L ${width / 2 + lineWidth / 2} ${height / 2 + lineWidth / 2} L ${width} ${height / 2 + lineWidth / 2} L ${width} ${height / 2 - lineWidth / 2} L ${width / 2 + lineWidth / 2} ${height / 2 - lineWidth / 2} L ${width / 2 + lineWidth / 2} 0 Z`\n },\n}\n\nexport const SHAPE_LIST: ShapeListItem[] = [\n {\n type: '矩形',\n children: [\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 50 0 L 150 0 Q 200 0 200 50 L 200 150 Q 200 200 150 200 L 50 200 Q 0 200 0 150 L 0 50 Q 0 0 50 0 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 Z',\n pathFormula: ShapePathFormulasKeys.CUT_RECT_DIAGONAL,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 Z',\n pathFormula: ShapePathFormulasKeys.CUT_RECT_SINGLE,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 Z',\n pathFormula: ShapePathFormulasKeys.CUT_RECT_SAMESIDE,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 50 200 Q 0 200 0 150 L 0 0 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT_DIAGONAL,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 0 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT_SINGLE,\n },\n {\n viewBox: [200, 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 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT_SAMESIDE,\n },\n ]\n },\n\n {\n type: '常用形状',\n children: [\n {\n viewBox: [200, 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, 200],\n path: 'M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 40 20 A 100 100 0 1 0 200 100 L 100 100 L 40 20 Z'\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 160 20 A 100 100 0 1 0 200 100 L 100 100 L 160 20 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z'\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 0 200 L 200 200 L 100 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z'\n },\n {\n viewBox: [200, 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, 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, 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, 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, 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, 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, 200],\n path: 'M 50 0 A 25 50 0 1 0 50 200 L 150 200 A 25 50 0 1 0 150 0 L 50 0 Z'\n },\n {\n viewBox: [200, 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, 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, 200],\n path: 'M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z'\n },\n {\n viewBox: [200, 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, 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 pathFormula: ShapePathFormulasKeys.L\n },\n {\n viewBox: [200, 200],\n path: 'M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z',\n pathFormula: ShapePathFormulasKeys.RING_RECT,\n },\n {\n viewBox: [200, 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, 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 pathFormula: ShapePathFormulasKeys.PLUS,\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 Z',\n pathFormula: ShapePathFormulasKeys.MESSAGE,\n },\n {\n viewBox: [200, 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 pathFormula: ShapePathFormulasKeys.ROUND_MESSAGE,\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 Q 0 50 0 175 Q 100 225 200 175 Q 200 50 100 0 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 0 100 A 50 50 0 1 1 200 100 L 100 200 L 0 100 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 60 60 L 0 100 L 60 140 L 100 200 L 140 140 L 200 100 L 140 60 L 100 0 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 80 40 L 20 20 L 40 80 L 0 100 L 40 120 L 20 180 L 80 160 L 100 200 L 120 160 L 180 180 L 160 120 L 200 100 L 160 80 L 180 20 L 120 40 L 100 0 Z',\n },\n ],\n },\n \n {\n type: '箭头',\n children: [\n {\n viewBox: [200, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 200],\n path: 'M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z'\n },\n {\n viewBox: [200, 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, 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, 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, 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, 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, 1024],\n path: 'M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z',\n special: true,\n },\n ],\n },\n\n {\n type: '其他形状',\n children: [\n {\n viewBox: [1024, 1024],\n path: 'M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M997.8886764 504.17210418L537.2729208 43.89182982c-13.97838539-13.97838539-36.56745619-13.97838539-50.5458416 0L26.1113236 504.17210418c-13.41924998 13.41924998-21.02349164 31.64706454-21.02349163 50.65766867 0 39.47496036 32.09437288 71.56933323 71.56933324 71.56933323h48.53295408V954.83524937c0 19.79339373 15.99127289 35.78466661 35.78466663 35.78466662H440.43066677V740.12724968h125.24633315v250.49266631h297.34821416c19.79339373 0 35.78466661-15.99127289 35.78466663-35.78466662V626.39910608h48.53295408c19.01060414 0 37.23841869-7.49241457 50.65766869-21.02349163 27.84494371-27.95677079 27.84494371-73.24673948-0.11182708-101.20351027z',\n special: true,\n },\n ],\n },\n]","import { ChartType } from '@/types/slides'\n\ninterface ChartTypes {\n [propName: string]: ChartType;\n}\n\nexport const CHART_TYPES: ChartTypes = {\n bar: 'bar',\n horizontalBar: 'bar',\n line: 'line',\n area: 'line',\n scatter: 'line',\n pie: 'pie',\n ring: 'pie',\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { createRandomCode } from '@/utils/common'\nimport { getImageSize } from '@/utils/image'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { PPTLineElement, PPTElement, TableCell, TableCellStyle, PPTShapeElement, PPTChartElement, ChartOptions, PresetChartType } from '@/types/slides'\nimport { ShapePoolItem, SHAPE_PATH_FORMULAS } from '@/configs/shapes'\nimport { LinePoolItem } from '@/configs/lines'\nimport { CHART_TYPES } from '@/configs/chartTypes'\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 mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { creatingElement } = storeToRefs(mainStore)\n const { theme, viewportRatio } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 创建(插入)一个元素并将其设置为被选中元素\n const createElement = (element: PPTElement) => {\n slidesStore.addElement(element)\n mainStore.setActiveElementIdList([element.id])\n\n if (creatingElement.value) mainStore.setCreatingElement(null)\n\n setTimeout(() => {\n mainStore.setEditorareaFocus(true)\n }, 0)\n\n addHistorySnapshot()\n }\n\n /**\n * 创建图片元素\n * @param src 图片地址\n */\n const createImageElement = (src: string) => {\n getImageSize(src).then(({ width, height }) => {\n const scale = height / width\n \n if (scale < viewportRatio.value && width > VIEWPORT_SIZE) {\n width = VIEWPORT_SIZE\n height = width * scale\n }\n else if (height > VIEWPORT_SIZE * viewportRatio.value) {\n height = VIEWPORT_SIZE * viewportRatio.value\n width = height / scale\n }\n\n createElement({\n type: 'image',\n id: createRandomCode(),\n src,\n width,\n height,\n left: (VIEWPORT_SIZE - width) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - height) / 2,\n fixedRatio: true,\n rotate: 0,\n })\n })\n }\n \n /**\n * 创建图表元素\n * @param chartType 图表类型\n */\n const createChartElement = (type: PresetChartType) => {\n const newElement: PPTChartElement = {\n type: 'chart',\n id: createRandomCode(),\n chartType: CHART_TYPES[type],\n left: 300,\n top: 81.25,\n width: 400,\n height: 400,\n rotate: 0,\n themeColor: [theme.value.themeColor],\n gridColor: theme.value.fontColor,\n data: {\n labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],\n legends: ['系列1'],\n series: [\n [12, 19, 5, 2, 18],\n ],\n },\n }\n\n let options: ChartOptions = {}\n if (type === 'horizontalBar') options = { horizontalBars: true }\n else if (type === 'area') options = { showArea: true }\n else if (type === 'scatter') options = { showLine: false }\n else if (type === 'ring') options = { donut: true }\n\n createElement({\n ...newElement,\n options,\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: theme.value.fontName,\n color: theme.value.fontColor,\n }\n const data: TableCell[][] = []\n for (let i = 0; i < row; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < col; j++) {\n rowCells.push({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '', style })\n }\n data.push(rowCells)\n }\n\n const DEFAULT_CELL_WIDTH = 100\n const DEFAULT_CELL_HEIGHT = 36\n\n const colWidths: number[] = new Array(col).fill(1 / col)\n\n const width = col * DEFAULT_CELL_WIDTH\n const height = row * DEFAULT_CELL_HEIGHT\n\n createElement({\n type: 'table',\n id: createRandomCode(),\n width,\n height,\n colWidths,\n rotate: 0,\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: theme.value.themeColor,\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: theme.value.fontName,\n defaultColor: theme.value.fontColor,\n })\n }\n \n /**\n * 创建形状元素\n * @param position 位置大小信息\n * @param data 形状路径信息\n */\n const createShapeElement = (position: CommonElementPosition, data: ShapePoolItem) => {\n const { left, top, width, height } = position\n const newElement: PPTShapeElement = {\n type: 'shape',\n id: createRandomCode(),\n left, \n top, \n width, \n height,\n viewBox: data.viewBox,\n path: data.path,\n fill: theme.value.themeColor,\n fixedRatio: false,\n rotate: 0,\n }\n if (data.special) newElement.special = true\n if (data.pathFormula) {\n newElement.pathFormula = data.pathFormula\n newElement.viewBox = [width, height]\n newElement.path = SHAPE_PATH_FORMULAS[data.pathFormula](width, height)\n }\n createElement(newElement)\n }\n \n /**\n * 创建线条元素\n * @param position 位置大小信息\n * @param data 线条的路径和样式\n */\n const createLineElement = (position: LineElementPosition, data: LinePoolItem) => {\n const { left, top, start, end } = position\n\n const newElement: PPTLineElement = {\n type: 'line',\n id: createRandomCode(),\n left, \n top, \n start,\n end,\n points: data.points,\n color: theme.value.themeColor,\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 if (data.isCubic) newElement.cubic = [[(start[0] + end[0]) / 2, (start[1] + end[1]) / 2], [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]]\n createElement(newElement)\n }\n \n /**\n * 创建LaTeX元素\n * @param svg SVG代码\n */\n const createLatexElement = (data: { path: string; latex: string; w: number; h: number; }) => {\n createElement({\n type: 'latex',\n id: createRandomCode(),\n width: data.w,\n height: data.h,\n rotate: 0,\n left: (VIEWPORT_SIZE - data.w) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - data.h) / 2,\n path: data.path,\n latex: data.latex,\n color: theme.value.fontColor,\n strokeWidth: 2,\n viewBox: [data.w, data.h],\n fixedRatio: true,\n })\n }\n \n /**\n * 创建视频元素\n * @param src 视频地址\n */\n const createVideoElement = (src: string) => {\n createElement({\n type: 'video',\n id: createRandomCode(),\n width: 500,\n height: 300,\n rotate: 0,\n left: (VIEWPORT_SIZE - 500) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - 300) / 2,\n src,\n })\n }\n \n /**\n * 创建音频元素\n * @param src 音频地址\n */\n const createAudioElement = (src: string) => {\n createElement({\n type: 'audio',\n id: createRandomCode(),\n width: 50,\n height: 50,\n rotate: 0,\n left: (VIEWPORT_SIZE - 50) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - 50) / 2,\n loop: false,\n autoplay: false,\n fixedRatio: true,\n color: theme.value.themeColor,\n src,\n })\n }\n\n return {\n createImageElement,\n createChartElement,\n createTableElement,\n createTextElement,\n createShapeElement,\n createLineElement,\n createLatexElement,\n createVideoElement,\n createAudioElement,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useSlidesStore, useMainStore } from '@/store'\nimport { pasteCustomClipboardString } from '@/utils/clipboard'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { createElementIdMap } from '@/utils/element'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useCreateElement from '@/hooks/useCreateElement'\n\ninterface PasteTextClipboardDataOptions {\n onlySlide?: boolean;\n onlyElements?: boolean;\n}\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { currentSlide } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n const { createTextElement } = useCreateElement()\n\n /**\n * 粘贴元素(一组)\n * @param elements 元素列表数据\n */\n const addElementsFromClipboard = (elements: PPTElement[]) => {\n const { groupIdMap, elIdMap } = createElementIdMap(elements)\n const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id)\n \n for (const element of elements) {\n const inCurrentSlide = currentSlideElementIdList.includes(element.id)\n \n element.id = elIdMap[element.id]\n\n if (inCurrentSlide) {\n element.left = element.left + 10\n element.top = element.top + 10\n }\n\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n slidesStore.addElement(elements)\n mainStore.setActiveElementIdList(Object.values(elIdMap))\n addHistorySnapshot()\n }\n\n /**\n * 粘贴页面\n * @param slide 页面数据\n */\n const addSlidesFromClipboard = (slides: Slide[]) => {\n const newSlides = slides.map(slide => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n if (slide.animations) {\n for (const animation of slide.animations) {\n animation.elId = elIdMap[animation.elId]\n }\n }\n return {\n ...slide,\n id: createRandomCode(),\n }\n })\n slidesStore.addSlide(newSlides)\n addHistorySnapshot()\n }\n\n /**\n * 粘贴普通文本:创建为新的文本元素\n * @param text 文本\n */\n const createTextElementFromClipboard = (text: string) => {\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, text)\n }\n\n /**\n * 解析剪贴板内容,根据解析结果选择合适的粘贴方式\n * @param text 剪贴板内容\n * @param options 配置项:onlySlide -- 仅处理页面粘贴;onlyElements -- 仅处理元素粘贴;\n */\n const pasteTextClipboardData = (text: string, options?: PasteTextClipboardDataOptions) => {\n const onlySlide = options?.onlySlide || false\n const onlyElements = options?.onlyElements || false\n\n const clipboardData = pasteCustomClipboardString(text)\n\n // 元素或页面\n if (typeof clipboardData === 'object') {\n const { type, data } = clipboardData\n\n if (type === 'elements' && !onlySlide) addElementsFromClipboard(data)\n else if (type === 'slides' && !onlyElements) addSlidesFromClipboard(data)\n }\n\n // 普通文本\n else if (!onlyElements && !onlySlide) {\n const string = parseText2Paragraphs(clipboardData)\n createTextElementFromClipboard(string)\n }\n }\n\n return {\n addSlidesFromClipboard,\n pasteTextClipboardData,\n }\n}","import { computed } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { copyText, readClipboard } from '@/utils/clipboard'\nimport { encrypt } from '@/utils/crypto'\nimport { createElementIdMap } from '@/utils/element'\nimport { KEYS } from '@/configs/hotkey'\nimport { message } from 'ant-design-vue'\nimport usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { selectedSlidesIndex: _selectedSlidesIndex } = storeToRefs(mainStore)\n const { currentSlide, slides, theme, slideIndex } = storeToRefs(slidesStore)\n\n const selectedSlidesIndex = computed(() => [..._selectedSlidesIndex.value, slideIndex.value])\n const selectedSlides = computed(() => slides.value.filter((item, index) => selectedSlidesIndex.value.includes(index)))\n const selectedSlidesId = computed(() => selectedSlides.value.map(item => item.id))\n\n const { pasteTextClipboardData, addSlidesFromClipboard } = usePasteTextClipboardData()\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 重置幻灯片\n const resetSlides = () => {\n const emptySlide: Slide = {\n id: createRandomCode(),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n slidesStore.updateSlideIndex(0)\n mainStore.setActiveElementIdList([])\n slidesStore.setSlides([emptySlide])\n }\n\n /**\n * 移动页面焦点\n * @param command 移动页面焦点命令:上移、下移\n */\n const updateSlideIndex = (command: string) => {\n if (command === KEYS.UP && slideIndex.value > 0) {\n slidesStore.updateSlideIndex(slideIndex.value - 1)\n }\n else if (command === KEYS.DOWN && slideIndex.value < slides.value.length - 1) {\n slidesStore.updateSlideIndex(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 mainStore.setThumbnailsFocus(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: Slide = {\n id: createRandomCode(),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n mainStore.setActiveElementIdList([])\n slidesStore.addSlide(emptySlide)\n addHistorySnapshot()\n }\n\n // 根据模板创建新页面\n const createSlideByTemplate = (slide: Slide) => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n const newSlide = {\n ...slide,\n id: createRandomCode(),\n }\n mainStore.setActiveElementIdList([])\n slidesStore.addSlide(newSlide)\n addHistorySnapshot()\n }\n\n // 将当前页复制一份到下一页\n const copyAndPasteSlide = () => {\n const slide = JSON.parse(JSON.stringify(currentSlide.value))\n addSlidesFromClipboard([slide])\n }\n\n // 删除当前页,若将删除全部页面,则执行重置幻灯片操作\n const deleteSlide = (targetSlidesId = selectedSlidesId.value) => {\n if (slides.value.length === targetSlidesId.length) resetSlides()\n else slidesStore.deleteSlide(targetSlidesId)\n\n mainStore.updateSelectedSlidesIndex([])\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 mainStore.setActiveElementIdList([])\n mainStore.updateSelectedSlidesIndex(newSelectedSlidesIndex)\n }\n\n return {\n resetSlides,\n updateSlideIndex,\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\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 slidesStore.updateSlide({ elements: newElementList })\n mainStore.setActiveElementIdList([])\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 const groupElementIdList = []\n for (const element of newElementList) {\n if (element.groupId === handleElement.groupId) {\n element.lock = false\n groupElementIdList.push(element.id)\n }\n }\n slidesStore.updateSlide({ elements: newElementList })\n mainStore.setActiveElementIdList(groupElementIdList)\n }\n else {\n for (const element of newElementList) {\n if (element.id === handleElement.id) {\n element.lock = false\n break\n }\n }\n slidesStore.updateSlide({ elements: newElementList })\n mainStore.setActiveElementIdList([handleElement.id])\n }\n addHistorySnapshot()\n }\n\n return {\n lockElement,\n unlockElement,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeGroupElementId } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\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 mainStore.setActiveElementIdList([])\n slidesStore.updateSlide({ elements: newElementList })\n addHistorySnapshot()\n }\n\n // 删除内面内全部元素(无论是否选中)\n const deleteAllElements = () => {\n if (!currentSlide.value.elements.length) return\n mainStore.setActiveElementIdList([])\n slidesStore.updateSlide({ elements: [] })\n addHistorySnapshot()\n }\n\n return {\n deleteElement,\n deleteAllElements,\n }\n}","import { computed } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeElementList, handleElementId } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 判断当前选中的元素是否可以组合\n */\n const canCombine = computed(() => {\n if (activeElementList.value.length < 2) return false\n\n const firstGroupId = activeElementList.value[0].groupId\n if (!firstGroupId) return true\n\n const inSameGroup = activeElementList.value.every(el => (el.groupId && el.groupId) === firstGroupId)\n return !inSameGroup\n })\n\n /**\n * 组合当前选中的元素:给当前选中的元素赋予一个相同的分组ID\n */\n const combineElements = () => {\n if (!activeElementList.value.length) return\n\n // 生成一个新元素列表进行后续操作\n let newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n\n // 生成分组ID\n const groupId = createRandomCode()\n\n // 收集需要组合的元素列表,并赋上唯一分组ID\n const combineElementList: PPTElement[] = []\n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id)) {\n element.groupId = groupId\n combineElementList.push(element)\n }\n }\n\n // 确保该组合内所有元素成员的层级是连续的,具体操作方法为:\n // 先获取到该组合内最上层元素的层级,将本次需要组合的元素从新元素列表中移除,\n // 再根据最上层元素的层级位置,将上面收集到的需要组合的元素列表一起插入到新元素列表中合适的位置\n const combineElementMaxLevel = newElementList.findIndex(_element => _element.id === combineElementList[combineElementList.length - 1].id)\n const combineElementIdList = combineElementList.map(_element => _element.id)\n newElementList = newElementList.filter(_element => !combineElementIdList.includes(_element.id))\n\n const insertLevel = combineElementMaxLevel - combineElementList.length + 1\n newElementList.splice(insertLevel, 0, ...combineElementList)\n\n slidesStore.updateSlide({ 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 slidesStore.updateSlide({ elements: newElementList })\n\n // 取消组合后,需要重置激活元素状态\n // 默认重置为当前正在操作的元素,如果不存在则重置为空\n const handleElementIdList = handleElementId.value ? [handleElementId.value] : []\n mainStore.setActiveElementIdList(handleElementIdList)\n\n addHistorySnapshot()\n }\n\n return {\n canCombine,\n combineElements,\n uncombineElements,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\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 mainStore = useMainStore()\n const { activeElementIdList, activeElementList } = storeToRefs(mainStore)\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 mainStore.setEditorareaFocus(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 { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\n\r\nexport default () => {\r\n const mainStore = useMainStore()\r\n const { currentSlide } = storeToRefs(useSlidesStore())\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 mainStore.setActiveElementIdList(newActiveElementIdList)\r\n }\r\n\r\n return {\r\n selectAllElement,\r\n }\r\n}","import { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { PPTElement } from '@/types/slides'\r\nimport { KEYS } from '@/configs/hotkey'\r\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\r\n\r\nexport default () => {\r\n const slidesStore = useSlidesStore()\r\n const { activeElementIdList, activeGroupElementId } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(slidesStore)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 将元素向指定方向移动指定的距离\r\n * 组合元素成员中,存在被选中可独立操作的元素时,优先移动该元素。否则默认移动所有被选中的元素\r\n * @param command 移动方向\r\n * @param step 移动距离\r\n */\r\n const moveElement = (command: string, step = 1) => {\r\n let newElementList: PPTElement[] = []\r\n\r\n const move = (el: PPTElement) => {\r\n let { left, top } = el\r\n switch (command) {\r\n case KEYS.LEFT: \r\n left = left - step\r\n break\r\n case KEYS.RIGHT: \r\n left = left + step\r\n break\r\n case KEYS.UP: \r\n top = top - step\r\n break\r\n case KEYS.DOWN: \r\n top = top + step\r\n break\r\n default: break\r\n }\r\n return { ...el, left, top }\r\n }\r\n\r\n if (activeGroupElementId.value) {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeGroupElementId.value === el.id ? move(el) : el\r\n })\r\n }\r\n else {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeElementIdList.value.includes(el.id) ? move(el) : el\r\n })\r\n }\r\n\r\n slidesStore.updateSlide({ elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n moveElement,\r\n }\r\n}","import { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { ElementOrderCommands } from '@/types/edit'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n const { currentSlide } = storeToRefs(slidesStore)\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: ElementOrderCommands) => {\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 slidesStore.updateSlide({ 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 { useScreenStore, useSlidesStore } from '@/store'\nimport { enterFullscreen, exitFullscreen, isFullscreen } from '@/utils/fullscreen'\n\nexport default () => {\n const screenStore = useScreenStore()\n const slidesStore = useSlidesStore()\n\n // 进入放映状态(从当前页开始)\n const enterScreening = () => {\n enterFullscreen()\n screenStore.setScreening(true)\n }\n\n // 进入放映状态(从第一页开始)\n const enterScreeningFromStart = () => {\n slidesStore.updateSlideIndex(0)\n enterScreening()\n }\n\n // 退出放映状态\n const exitScreening = () => {\n screenStore.setScreening(false)\n if (isFullscreen()) exitFullscreen()\n }\n\n return {\n enterScreening,\n enterScreeningFromStart,\n exitScreening,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\n\nexport default () => {\n const mainStore = useMainStore()\n const { canvasPercentage } = storeToRefs(mainStore)\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 mainStore.setCanvasPercentage(percentage)\n }\n\n /**\n * 设置画笔百分比\n * @param percentage 百分比(小数形式,如0.8)\n */\n const setCanvasPercentage = (percentage: number) => {\n mainStore.setCanvasPercentage(percentage)\n }\n \n return {\n scaleCanvas,\n setCanvasPercentage,\n }\n}","import { onMounted, onUnmounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { ElementOrderCommands } from '@/types/edit'\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 mainStore = useMainStore()\n const keyboardStore = useKeyboardStore()\n const {\n activeElementIdList,\n disableHotkeys,\n handleElement,\n handleElementId,\n editorAreaFocus,\n thumbnailsFocus,\n } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(useSlidesStore())\n const { ctrlKeyState, shiftKeyState } = storeToRefs(keyboardStore)\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: ElementOrderCommands) => {\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 (!handleElementId.value) {\n const firstElement = currentSlide.value.elements[0]\n mainStore.setActiveElementIdList([firstElement.id])\n return\n }\n const currentIndex = currentSlide.value.elements.findIndex(el => el.id === handleElementId.value)\n const nextIndex = currentIndex >= currentSlide.value.elements.length - 1 ? 0 : currentIndex + 1\n const nextElementId = currentSlide.value.elements[nextIndex].id\n\n mainStore.setActiveElementIdList([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 && !ctrlKeyState.value) keyboardStore.setCtrlKeyState(true)\n if (shiftKey && !shiftKeyState.value) keyboardStore.setShiftKeyState(true)\n\n if (ctrlOrMetaKeyActive && key === KEYS.F) {\n e.preventDefault()\n enterScreening()\n keyboardStore.setCtrlKeyState(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 (ctrlKeyState.value) keyboardStore.setCtrlKeyState(false)\n if (shiftKeyState.value) keyboardStore.setShiftKeyState(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 { onMounted, onUnmounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport usePasteTextClipboardData from './usePasteTextClipboardData'\nimport useCreateElement from './useCreateElement'\n\nexport default () => {\n const { editorAreaFocus, thumbnailsFocus, disableHotkeys } = storeToRefs(useMainStore())\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}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e62abba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"editor-header\" }\nconst _hoisted_2 = { class: \"left\" }\nconst _hoisted_3 = { class: \"menu-item\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"文件\", -1))\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"导出 JSON\")\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"导出 PPTX\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"导出图片\")\nconst _hoisted_9 = { class: \"menu-item\" }\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"编辑\", -1))\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"撤销\")\nconst _hoisted_13 = /*#__PURE__*/_createTextVNode(\"重做\")\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\"添加页面\")\nconst _hoisted_15 = /*#__PURE__*/_createTextVNode(\"删除页面\")\nconst _hoisted_16 = /*#__PURE__*/_createTextVNode(\"重置幻灯片\")\nconst _hoisted_17 = { class: \"menu-item\" }\nconst _hoisted_18 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"演示\", -1))\nconst _hoisted_20 = /*#__PURE__*/_createTextVNode(\"从头开始\")\nconst _hoisted_21 = /*#__PURE__*/_createTextVNode(\"从当前页开始\")\nconst _hoisted_22 = { class: \"menu-item\" }\nconst _hoisted_23 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_24 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"帮助\", -1))\nconst _hoisted_25 = /*#__PURE__*/_createTextVNode(\"意见反馈\")\nconst _hoisted_26 = /*#__PURE__*/_createTextVNode(\"快捷键\")\nconst _hoisted_27 = { class: \"right\" }\nconst _hoisted_28 = {\n href: \"https://github.com/pipipi-pikachu/PPTist\",\n target: \"_blank\"\n}\nconst _hoisted_29 = { class: \"menu-item\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconFolderClose = _resolveComponent(\"IconFolderClose\")!\n const _component_MenuItem = _resolveComponent(\"MenuItem\")!\n const _component_Menu = _resolveComponent(\"Menu\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_IconEdit = _resolveComponent(\"IconEdit\")!\n const _component_IconPpt = _resolveComponent(\"IconPpt\")!\n const _component_IconHelpcenter = _resolveComponent(\"IconHelpcenter\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconGithub = _resolveComponent(\"IconGithub\")!\n const _component_HotkeyDoc = _resolveComponent(\"HotkeyDoc\")!\n const _component_Drawer = _resolveComponent(\"Drawer\")!\n const _component_ExportImgDialog = _resolveComponent(\"ExportImgDialog\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_FullscreenSpin = _resolveComponent(\"FullscreenSpin\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.exportJSON()))\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.exportPPTX()))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.exportImgDialogVisible = true))\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_IconFolderClose),\n _hoisted_4,\n _hoisted_5\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.undo()))\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.redo()))\n }, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.createSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.deleteSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.toggleGridLines()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.showGridLines ? '关闭网格线' : '打开网格线'), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.resetSlides()))\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_IconEdit),\n _hoisted_10,\n _hoisted_11\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.enterScreeningFromStart()))\n }, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.enterScreening()))\n }, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_17, [\n _createVNode(_component_IconPpt),\n _hoisted_18,\n _hoisted_19\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.goIssues()))\n }, {\n default: _withCtx(() => [\n _hoisted_25\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.hotkeyDrawerVisible = true))\n }, {\n default: _withCtx(() => [\n _hoisted_26\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_22, [\n _createVNode(_component_IconHelpcenter),\n _hoisted_23,\n _hoisted_24\n ])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_27, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n title: \"幻灯片放映\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"menu-item\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.enterScreening()))\n }, [\n _createVNode(_component_IconPpt, {\n size: \"18\",\n fill: \"#666\",\n style: {\"margin-top\":\"2px\"}\n })\n ])\n ]),\n _: 1\n }),\n _createElementVNode(\"a\", _hoisted_28, [\n _createElementVNode(\"div\", _hoisted_29, [\n _createVNode(_component_IconGithub, {\n size: \"18\",\n fill: \"#666\"\n })\n ])\n ])\n ]),\n _createVNode(_component_Drawer, {\n width: \"320\",\n placement: \"right\",\n visible: _ctx.hotkeyDrawerVisible,\n onClose: _cache[14] || (_cache[14] = ($event: any) => (_ctx.hotkeyDrawerVisible = false))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_HotkeyDoc)\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Modal, {\n visible: _ctx.exportImgDialogVisible,\n \"onUpdate:visible\": _cache[16] || (_cache[16] = ($event: any) => ((_ctx.exportImgDialogVisible) = $event)),\n footer: null,\n centered: \"\",\n closable: false,\n width: 680,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_ExportImgDialog, {\n onClose: _cache[15] || (_cache[15] = ($event: any) => (_ctx.exportImgDialogVisible = false))\n })\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_FullscreenSpin, {\n loading: _ctx.exporting,\n tip: \"正在导出...\"\n }, null, 8, [\"loading\"])\n ]))\n}","export const childlessTags = ['style', 'script', 'template']\n\nexport const closingTags = ['html', 'head', 'body', 'p', 'dt', 'dd', 'li', 'option', 'thead', 'th', 'tbody', 'tr', 'td', 'tfoot', 'colgroup']\n\nexport const closingTagAncestorBreakers = {\n li: ['ul', 'ol', 'menu'],\n dt: ['dl'],\n dd: ['dl'],\n tbody: ['table'],\n thead: ['table'],\n tfoot: ['table'],\n tr: ['table'],\n td: ['table'],\n}\n\nexport const voidTags = ['!doctype', 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']","import { startsWith, endsWith } from 'lodash'\nimport { Token } from './types'\nimport { childlessTags } from './tags'\n\ninterface State {\n str: string;\n position: number;\n tokens: Token[];\n}\n\nconst jumpPosition = (state: State, end: number) => {\n const len = end - state.position\n movePositopn(state, len)\n}\n\nconst movePositopn = (state: State, len: number) => {\n state.position = state.position + len\n}\n\nconst findTextEnd = (str: string, index: number) => {\n const isEnd = false\n while (!isEnd) {\n const textEnd = str.indexOf('<', index)\n if (textEnd === -1) {\n return textEnd\n }\n const char = str.charAt(textEnd + 1)\n if (char === '/' || char === '!' || /[A-Za-z0-9]/.test(char)) {\n return textEnd\n }\n index = textEnd + 1\n }\n return -1\n}\n\nconst lexText = (state: State) => {\n const { str } = state\n let textEnd = findTextEnd(str, state.position)\n if (textEnd === state.position) return\n if (textEnd === -1) {\n textEnd = str.length\n }\n\n const content = str.slice(state.position, textEnd)\n jumpPosition(state, textEnd)\n\n state.tokens.push({\n type: 'text', \n content, \n })\n}\n\nconst lexComment = (state: State) => {\n const { str } = state\n\n movePositopn(state, 4)\n let contentEnd = str.indexOf('-->', state.position)\n let commentEnd = contentEnd + 3\n if (contentEnd === -1) {\n contentEnd = commentEnd = str.length\n }\n\n const content = str.slice(state.position, contentEnd)\n jumpPosition(state, commentEnd)\n\n state.tokens.push({\n type: 'comment',\n content,\n })\n}\n\nconst lexTagName = (state: State) => {\n const { str } = state\n const len = str.length\n let start = state.position\n\n while (start < len) {\n const char = str.charAt(start)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (isTagChar) break\n start++\n }\n\n let end = start + 1\n while (end < len) {\n const char = str.charAt(end)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (!isTagChar) break\n end++\n }\n\n jumpPosition(state, end)\n const tagName = str.slice(start, end)\n state.tokens.push({\n type: 'tag',\n content: tagName\n })\n return tagName\n}\n\nconst lexTagAttributes = (state: State) => {\n const { str, tokens } = state\n let cursor = state.position\n let quote = null\n let wordBegin = cursor\n const words = []\n const len = str.length\n while (cursor < len) {\n const char = str.charAt(cursor)\n if (quote) {\n const isQuoteEnd = char === quote\n if (isQuoteEnd) quote = null\n cursor++\n continue\n }\n\n const isTagEnd = char === '/' || char === '>'\n if (isTagEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n break\n }\n\n const isWordEnd = /\\s/.test(char)\n if (isWordEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n wordBegin = cursor + 1\n cursor++\n continue\n }\n\n const isQuoteStart = char === '\\'' || char === '\"'\n if (isQuoteStart) {\n quote = char\n cursor++\n continue\n }\n\n cursor++\n }\n jumpPosition(state, cursor)\n\n const type = 'attribute'\n for (let i = 0; i < words.length; i++) {\n const word = words[i]\n\n const isNotPair = word.indexOf('=') === -1\n if (isNotPair) {\n const secondWord = words[i + 1]\n if (secondWord && startsWith(secondWord, '=')) {\n if (secondWord.length > 1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n const thirdWord = words[i + 2]\n i += 1\n if (thirdWord) {\n const newWord = word + '=' + thirdWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n }\n }\n if (endsWith(word, '=')) {\n const secondWord = words[i + 1]\n if (secondWord && secondWord.indexOf('=') === -1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n\n const newWord = word.slice(0, -1)\n tokens.push({ type, content: newWord })\n continue\n }\n\n tokens.push({ type, content: word })\n }\n}\n\nconst lexSkipTag = (tagName: string, state: State) => {\n const { str, tokens } = state\n const safeTagName = tagName.toLowerCase()\n const len = str.length\n let index = state.position\n \n while (index < len) {\n const nextTag = str.indexOf(' {\n const { str } = state\n const secondChar = str.charAt(state.position + 1)\n const tagStartClose = secondChar === '/'\n movePositopn(state, tagStartClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-start',\n close: tagStartClose,\n })\n\n const tagName = lexTagName(state)\n lexTagAttributes(state)\n\n const firstChar = str.charAt(state.position)\n const tagEndClose = firstChar === '/'\n movePositopn(state, tagEndClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-end',\n close: tagEndClose,\n })\n return tagName\n}\n\nconst lex = (state: State) => {\n const str = state.str\n const len = str.length\n\n while (state.position < len) {\n const start = state.position\n lexText(state)\n\n if (state.position === start) {\n const isComment = startsWith(str, '!--', start + 1)\n if (isComment) lexComment(state)\n else {\n const tagName = lexTag(state)\n const safeTag = tagName.toLowerCase()\n if (childlessTags.includes(safeTag)) lexSkipTag(tagName, state)\n }\n }\n }\n}\n\nexport const lexer = (str: string): Token[] => {\n const state = {\n str,\n position: 0,\n tokens: [],\n }\n lex(state)\n return state.tokens\n}","import { Token, HTMLNode, TagToken, NormalElement, TagEndToken, AttributeToken, TextToken } from './types'\nimport { closingTags, closingTagAncestorBreakers, voidTags } from './tags'\n\ninterface StackItem {\n tagName: string | null;\n children: HTMLNode[];\n}\n\ninterface State {\n stack: StackItem[];\n cursor: number;\n tokens: Token[];\n}\n\nexport const parser = (tokens: Token[]) => {\n const root: StackItem = { tagName: null, children: [] }\n const state: State = { tokens, cursor: 0, stack: [root] }\n parse(state)\n return root.children\n}\n\nexport const hasTerminalParent = (tagName: string, stack: StackItem[]) => {\n const tagParents = closingTagAncestorBreakers[tagName]\n if (tagParents) {\n let currentIndex = stack.length - 1\n while (currentIndex >= 0) {\n const parentTagName = stack[currentIndex].tagName\n if (parentTagName === tagName) break\n if (tagParents.includes(parentTagName)) return true\n currentIndex--\n }\n }\n return false\n}\n\nexport const rewindStack = (stack: StackItem[], newLength: number) => {\n stack.splice(newLength)\n}\n\nexport const parse = (state: State) => {\n const { stack, tokens } = state\n let { cursor } = state\n let nodes = stack[stack.length - 1].children\n const len = tokens.length\n \n while (cursor < len) {\n const token = tokens[cursor]\n if (token.type !== 'tag-start') {\n nodes.push(token as TextToken)\n cursor++\n continue\n }\n\n const tagToken = tokens[++cursor] as TagToken\n cursor++\n const tagName = tagToken.content.toLowerCase()\n if (token.close) {\n let index = stack.length\n let shouldRewind = false\n while (--index > -1) {\n if (stack[index].tagName === tagName) {\n shouldRewind = true\n break\n }\n }\n while (cursor < len) {\n if (tokens[cursor].type !== 'tag-end') break\n cursor++\n }\n if (shouldRewind) {\n rewindStack(stack, index)\n break\n } \n else continue\n }\n\n const isClosingTag = closingTags.includes(tagName)\n let shouldRewindToAutoClose = isClosingTag\n if (shouldRewindToAutoClose) {\n shouldRewindToAutoClose = !hasTerminalParent(tagName, stack)\n }\n\n if (shouldRewindToAutoClose) {\n let currentIndex = stack.length - 1\n while (currentIndex > 0) {\n if (tagName === stack[currentIndex].tagName) {\n rewindStack(stack, currentIndex)\n const previousIndex = currentIndex - 1\n nodes = stack[previousIndex].children\n break\n }\n currentIndex = currentIndex - 1\n }\n }\n\n const attributes = []\n let tagEndToken: TagEndToken | undefined\n while (cursor < len) {\n const _token = tokens[cursor]\n if (_token.type === 'tag-end') {\n tagEndToken = _token\n break\n }\n attributes.push((_token as AttributeToken).content)\n cursor++\n }\n\n if (!tagEndToken) break\n\n cursor++\n const children: HTMLNode[] = []\n const elementNode: NormalElement = {\n type: 'element',\n tagName: tagToken.content,\n attributes,\n children,\n }\n nodes.push(elementNode)\n\n const hasChildren = !(tagEndToken.close || voidTags.includes(tagName))\n if (hasChildren) {\n stack.push({tagName, children})\n const innerState = { tokens, cursor, stack }\n parse(innerState)\n cursor = innerState.cursor\n }\n }\n state.cursor = cursor\n}","import { HTMLNode, CommentOrTextAST, ElementAST, AST } from './types'\n\nexport const splitHead = (str: string, sep: string) => {\n const idx = str.indexOf(sep)\n if (idx === -1) return [str]\n return [str.slice(0, idx), str.slice(idx + sep.length)]\n}\n\nconst unquote = (str: string) => {\n const car = str.charAt(0)\n const end = str.length - 1\n const isQuoteStart = car === '\"' || car === \"'\"\n if (isQuoteStart && car === str.charAt(end)) {\n return str.slice(1, end)\n }\n return str\n}\n\nconst formatAttributes = (attributes: string[]) => {\n return attributes.map(attribute => {\n const parts = splitHead(attribute.trim(), '=')\n const key = parts[0]\n const value = typeof parts[1] === 'string' ? unquote(parts[1]) : null\n return { key, value }\n })\n}\n\nexport const format = (nodes: HTMLNode[]): AST[] => {\n return nodes.map(node => { \n if (node.type === 'element') {\n const children = format(node.children)\n const item: ElementAST = {\n type: 'element',\n tagName: node.tagName.toLowerCase(),\n attributes: formatAttributes(node.attributes),\n children,\n }\n return item\n }\n\n const item: CommentOrTextAST = {\n type: node.type,\n content: node.content,\n }\n return item\n })\n}","// 参考:https://github.com/andrejewski/himalaya 用TypeScript重写并简化部分功能\n\nimport { lexer } from './lexer'\nimport { parser } from './parser'\nimport { format } from './format'\nimport { toHTML } from './stringify'\nimport type { AST } from './types'\n\nexport const toAST = (str: string) => {\n const tokens = lexer(str)\n const nodes = parser(tokens)\n return format(nodes)\n}\n\nexport { toHTML, AST }","import { SVGPathData } from 'svg-pathdata'\nimport arcToBezier from 'svg-arc-to-cubic-bezier'\n\nconst typeMap = {\n 1: 'Z',\n 2: 'M',\n 4: 'H',\n 8: 'V',\n 16: 'L',\n 32: 'C',\n 64: 'S',\n 128: 'Q',\n 256: 'T',\n 512: 'A',\n}\n\n/**\n * 简单解析SVG路径\n * @param d SVG path d属性\n */\nexport const parseSvgPath = (d: string) => {\n const pathData = new SVGPathData(d)\n\n const ret = pathData.commands.map(item => {\n return { ...item, type: typeMap[item.type] }\n })\n return ret\n}\n\nexport type SvgPath = ReturnType\n\n/**\n * 解析SVG路径,并将圆弧(A)类型的路径转为三次贝塞尔(C)类型的路径\n * @param d SVG path d属性\n */\nexport const toPoints = (d: string) => {\n const pathData = new SVGPathData(d)\n \n const points = []\n for (const item of pathData.commands) {\n const type = typeMap[item.type]\n\n if (item.type === 2 || item.type === 16) {\n points.push({\n x: item.x,\n y: item.y,\n relative: item.relative,\n type,\n })\n }\n if (item.type === 32) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'cubic',\n x1: item.x1,\n y1: item.y1,\n x2: item.x2,\n y2: item.y2,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 128) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'quadratic',\n x1: item.x1,\n y1: item.y1,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 512) {\n const lastPoint = points[points.length - 1]\n if (!['M', 'L', 'Q', 'C'].includes(lastPoint.type)) continue\n\n const cubicBezierPoints = arcToBezier({\n px: lastPoint.x as number,\n py: lastPoint.y as number,\n cx: item.x,\n cy: item.y,\n rx: item.rX,\n ry: item.rY,\n xAxisRotation: item.xRot,\n largeArcFlag: item.lArcFlag,\n sweepFlag: item.sweepFlag,\n })\n for (const cbPoint of cubicBezierPoints) {\n points.push({\n x: cbPoint.x, \n y: cbPoint.y,\n curve: {\n type: 'cubic',\n x1: cbPoint.x1,\n y1: cbPoint.y1,\n x2: cbPoint.x2,\n y2: cbPoint.y2,\n },\n relative: false,\n type: 'C',\n })\n }\n }\n else if (item.type === 1) {\n points.push({ close: true, type })\n }\n else continue\n }\n return points\n}\n\nexport type SvgPoints = ReturnType","// svg转base64图片,参考:https://github.com/scriptex/svg64\n\nconst characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nconst PREFIX = 'data:image/svg+xml;base64,'\n\nconst utf8Encode = (string: string) => {\n string = string.replace(/\\r\\n/g, '\\n')\n let utftext = ''\n\n for (let n = 0; n < string.length; n++) {\n const c = string.charCodeAt(n)\n\n if (c < 128) {\n utftext += String.fromCharCode(c)\n }\n else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode((c >> 6) | 192)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n else {\n utftext += String.fromCharCode((c >> 12) | 224)\n utftext += String.fromCharCode(((c >> 6) & 63) | 128)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n }\n\n return utftext\n}\n\nconst encode = (input: string) => {\n let output = ''\n let chr1, chr2, chr3, enc1, enc2, enc3, enc4\n let i = 0\n input = utf8Encode(input)\n while (i < input.length) {\n chr1 = input.charCodeAt(i++)\n chr2 = input.charCodeAt(i++)\n chr3 = input.charCodeAt(i++)\n enc1 = chr1 >> 2\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)\n enc4 = chr3 & 63\n if (isNaN(chr2)) enc3 = enc4 = 64\n else if (isNaN(chr3)) enc4 = 64\n output = output + characters.charAt(enc1) + characters.charAt(enc2) + characters.charAt(enc3) + characters.charAt(enc4)\n }\n return output\n}\n\nexport const svg2Base64 = (element: Element) => {\n const XMLS = new XMLSerializer()\n const svg = XMLS.serializeToString(element)\n\n return PREFIX + encode(svg)\n}","import { ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { trim } from 'lodash'\nimport { saveAs } from 'file-saver'\nimport pptxgen from 'pptxgenjs'\nimport tinycolor from 'tinycolor2'\nimport { toPng, toJpeg } from 'html-to-image'\nimport { useSlidesStore } from '@/store'\nimport { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element'\nimport { AST, toAST } from '@/utils/htmlParser'\nimport { SvgPoints, toPoints } from '@/utils/svgPathParser'\nimport { svg2Base64 } from '@/utils/svg2Base64'\nimport { message } from 'ant-design-vue'\n\ninterface ExportImageConfig {\n quality: number;\n width: number;\n filter: (node: HTMLElement) => boolean;\n fontEmbedCSS?: string;\n}\n\nexport default () => {\n const { slides } = storeToRefs(useSlidesStore())\n\n const exporting = ref(false)\n\n // 导出图片\n const exportImage = (domRef: HTMLElement, format: string, quality: number, ignoreWebfont = true) => {\n exporting.value = true\n const toImage = format === 'png' ? toPng : toJpeg\n\n setTimeout(() => {\n if (!domRef) return\n\n const filter = (node: HTMLElement) => {\n if (node.tagName && node.tagName.toUpperCase() === 'FOREIGNOBJECT') return false\n return true\n }\n\n const config: ExportImageConfig = {\n quality,\n width: 1600,\n filter,\n }\n\n if (ignoreWebfont) config.fontEmbedCSS = ''\n\n toImage(domRef, config).then(dataUrl => {\n exporting.value = false\n saveAs(dataUrl, `pptist_slides.${format}`)\n }).catch(() => {\n exporting.value = false\n message.error('导出图片失败')\n })\n }, 200)\n }\n \n // 导出JSON文件\n const exportJSON = () => {\n const blob = new Blob([JSON.stringify(slides.value)], { type: '' })\n saveAs(blob, 'pptist_slides.json')\n }\n\n // 格式化颜色值为 透明度 + HexString,供pptxgenjs使用\n const formatColor = (_color: string) => {\n const c = tinycolor(_color)\n const alpha = c.getAlpha()\n const color = alpha === 0 ? '#ffffff' : c.setAlpha(1).toHexString()\n return {\n alpha,\n color,\n }\n }\n\n type FormatColor = ReturnType\n\n // 将HTML字符串格式化为pptxgenjs所需的格式\n // 核心思路:将HTML字符串按样式分片平铺,每个片段需要继承祖先元素的样式信息,遇到块级元素需要换行\n const formatHTML = (html: string) => {\n const ast = toAST(html)\n\n const slices: pptxgen.TextProps[] = []\n const parse = (obj: AST[], baseStyleObj = {}) => {\n for (const item of obj) {\n if ('tagName' in item && ['div', 'li', 'p'].includes(item.tagName) && slices.length) {\n const lastSlice = slices[slices.length - 1]\n if (!lastSlice.options) lastSlice.options = {}\n lastSlice.options.breakLine = true\n }\n\n const styleObj = { ...baseStyleObj }\n const styleAttr = 'attributes' in item ? item.attributes.find(attr => attr.key === 'style') : null\n if (styleAttr && styleAttr.value) {\n const styleArr = styleAttr.value.split(';')\n for (const styleItem of styleArr) {\n const [_key, _value] = styleItem.split(': ')\n const [key, value] = [trim(_key), trim(_value)]\n if (key && value) styleObj[key] = value\n }\n }\n\n if ('tagName' in item) {\n if (item.tagName === 'ul') styleObj['list-type'] = 'ul'\n if (item.tagName === 'ol') styleObj['list-type'] = 'ol'\n }\n\n if ('tagName' in item) {\n if (item.tagName === 'em') {\n styleObj['font-style'] = 'italic'\n }\n if (item.tagName === 'strong') {\n styleObj['font-weight'] = 'bold'\n }\n if (item.tagName === 'sup') {\n styleObj['vertical-align'] = 'super'\n }\n if (item.tagName === 'sub') {\n styleObj['vertical-align'] = 'sub'\n }\n if (item.tagName === 'a') {\n const attr = item.attributes.find(attr => attr.key === 'href')\n styleObj['href'] = attr?.value || ''\n }\n }\n\n if ('tagName' in item && item.tagName === 'br') {\n slices.push({ text: '', options: { breakLine: true } })\n }\n else if ('content' in item) {\n const text = item.content.replace(/ /g, ' ').replace(/>/g, '>').replace(/</g, '<').replace(/&/g, '&').replace(/\\n/g, '')\n const options: pptxgen.TextPropsOptions = {}\n\n if (styleObj['font-size']) {\n options.fontSize = parseInt(styleObj['font-size']) * 0.75\n }\n if (styleObj['color']) {\n options.color = formatColor(styleObj['color']).color\n }\n if (styleObj['background-color']) {\n options.highlight = formatColor(styleObj['background-color']).color\n }\n if (styleObj['text-decoration-line']) {\n if (styleObj['text-decoration-line'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration-line'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['text-decoration']) {\n if (styleObj['text-decoration'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['vertical-align']) {\n if (styleObj['vertical-align'] === 'super') options.superscript = true\n if (styleObj['vertical-align'] === 'sub') options.subscript = true\n }\n if (styleObj['text-align']) options.align = styleObj['text-align']\n if (styleObj['font-weight']) options.bold = styleObj['font-weight'] === 'bold'\n if (styleObj['font-style']) options.italic = styleObj['font-style'] === 'italic'\n if (styleObj['font-family']) options.fontFace = styleObj['font-family']\n if (styleObj['href']) options.hyperlink = { url: styleObj['href'] }\n\n slices.push({ text, options })\n }\n else if ('children' in item) parse(item.children, styleObj)\n\n if ('tagName' in item && item.tagName === 'li') {\n const slice = slices[slices.length - 1]\n if (!slice.options) slice.options = {}\n if (styleObj['list-type'] === 'ol') slice.options.bullet = { type: 'number', indent: 20 * 0.75 }\n if (styleObj['list-type'] === 'ul') slice.options.bullet = { indent: 20 * 0.75 }\n }\n }\n }\n parse(ast)\n return slices\n }\n\n type Points = Array<\n | { x: number; y: number; moveTo?: boolean }\n | { x: number; y: number; curve: { type: 'arc'; hR: number; wR: number; stAng: number; swAng: number } }\n | { x: number; y: number; curve: { type: 'quadratic'; x1: number; y1: number } }\n | { x: number; y: number; curve: { type: 'cubic'; x1: number; y1: number; x2: number; y2: number } }\n | { close: true }\n >\n\n // 将SVG路径信息格式化为pptxgenjs所需要的格式\n const formatPoints = (points: SvgPoints, scale = { x: 1, y: 1 }): Points => {\n return points.map(point => {\n if (point.close !== undefined) {\n return { close: true }\n }\n else if (point.type === 'M') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n moveTo: true,\n }\n }\n else if (point.curve) {\n if (point.curve.type === 'cubic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'cubic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n x2: (point.curve.x2 as number) / 100 * scale.x,\n y2: (point.curve.y2 as number) / 100 * scale.y,\n },\n }\n }\n else if (point.curve.type === 'quadratic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'quadratic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n },\n }\n }\n }\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n }\n })\n }\n\n // 导出PPTX文件\n const exportPPTX = () => {\n exporting.value = true\n const pptx = new pptxgen()\n\n for (const slide of slides.value) {\n const pptxSlide = pptx.addSlide()\n\n if (slide.background) {\n const background = slide.background\n if (background.type === 'image' && background.image) {\n pptxSlide.background = { data: background.image }\n }\n else if (background.type === 'solid' && background.color) {\n const c = formatColor(background.color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n else if (background.type === 'gradient' && background.gradientColor) {\n const [color1, color2] = background.gradientColor\n const color = tinycolor.mix(color1, color2).toHexString()\n const c = formatColor(color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n }\n\n if (!slide.elements) continue\n\n for (const el of slide.elements) {\n if (el.type === 'text') {\n const textProps = formatHTML(el.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: 'middle',\n margin: 10 * 0.75,\n lineSpacingMultiple: 1.5 / 1.2,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.wordSpace) options.charSpacing = el.wordSpace * 0.75\n if (el.lineHeight) options.lineSpacingMultiple = el.lineHeight / 1.2\n if (el.fill) {\n const c = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n options.fill = { color: c.color, transparency: (1 - c.alpha * opacity) * 100 }\n }\n if (el.defaultColor) options.color = formatColor(el.defaultColor).color\n if (el.defaultFontName) options.fontFace = el.defaultFontName\n if (el.shadow) {\n const c = formatColor(el.shadow.color)\n options.shadow = {\n type: 'outer',\n color: c.color.replace('#', ''),\n opacity: c.alpha,\n blur: el.shadow.blur * 0.75,\n offset: (el.shadow.h + el.shadow.v) / 2 * 0.75,\n angle: 45,\n }\n }\n if (el.opacity !== undefined) options.transparency = (1 - el.opacity) * 100\n\n pptxSlide.addText(textProps, options)\n }\n\n else if (el.type === 'image') {\n const options: pptxgen.ImageProps = {\n path: el.src,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.rotate) options.rotate = el.rotate\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n if (el.filters?.opacity) options.transparency = 100 - parseInt(el.filters?.opacity)\n if (el.clip) {\n if (el.clip.shape === 'ellipse') options.rounding = true\n\n const range = el.clip.range\n\n const originW = el.width / ((range[1][0] - range[0][0]) / 100)\n const originH = el.height / ((range[1][1] - range[0][1]) / 100)\n options.w = originW / 100\n options.h = originH / 100\n\n const x = range[0][0] / 100 * originW / 100\n const y = range[0][1] / 100 * originH / 100\n const w = (range[1][0] - range[0][0]) / 100 * originW / 100\n const h = (range[1][1] - range[0][1]) / 100 * originH / 100\n options.sizing = { type: 'crop', w, h, x, y }\n }\n\n pptxSlide.addImage(options)\n }\n\n else if (el.type === 'shape') {\n if (el.special) {\n const svgRef = document.querySelector(`.thumbnail-list .base-element-${el.id} svg`) as HTMLElement\n const base64SVG = svg2Base64(svgRef)\n\n const options: pptxgen.ImageProps = {\n data: base64SVG,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n\n pptxSlide.addImage(options)\n }\n else {\n const scale = {\n x: el.width / el.viewBox[0],\n y: el.height / el.viewBox[1],\n }\n const points = formatPoints(toPoints(el.path), scale)\n \n const fillColor = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n \n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fill: { color: fillColor.color, transparency: (1 - fillColor.alpha * opacity) * 100 },\n points,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.outline?.width) {\n const c = formatColor(el.outline?.color || '#000000')\n options.line = {\n color: c.color, \n transparency: (1 - c.alpha) * 100,\n width: el.outline.width * 0.75, \n dashType: el.outline.style === 'solid' ? 'solid' : 'dash',\n }\n }\n if (el.shadow) {\n const c = formatColor(el.shadow.color)\n options.shadow = {\n type: 'outer',\n color: c.color.replace('#', ''),\n opacity: c.alpha,\n blur: el.shadow.blur * 0.75,\n offset: (el.shadow.h + el.shadow.v) / 2 * 0.75,\n angle: 45,\n }\n }\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n if (el.text) {\n const textProps = formatHTML(el.text.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: el.text.align,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.text.defaultColor) options.color = formatColor(el.text.defaultColor).color\n if (el.text.defaultFontName) options.fontFace = el.text.defaultFontName\n\n pptxSlide.addText(textProps, options)\n }\n }\n\n else if (el.type === 'line') {\n const path = getLineElementPath(el)\n const points = formatPoints(toPoints(path))\n const { minX, maxX, minY, maxY } = getElementRange(el)\n const c = formatColor(el.color)\n\n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: (maxX - minX) / 100,\n h: (maxY - minY) / 100,\n line: {\n color: c.color, \n transparency: (1 - c.alpha) * 100,\n width: el.width * 0.75, \n dashType: el.style === 'solid' ? 'solid' : 'dash',\n beginArrowType: el.points[0] ? 'arrow' : 'none',\n endArrowType: el.points[1] ? 'arrow' : 'none',\n },\n points,\n }\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n\n else if (el.type === 'chart') {\n const chartData = []\n for (let i = 0; i < el.data.series.length; i++) {\n const item = el.data.series[i]\n chartData.push({\n name: `系列${i + 1}`,\n labels: el.data.labels,\n values: item,\n })\n }\n\n let chartColors: string[] = []\n if (el.themeColor.length === 10) chartColors = el.themeColor.map(color => formatColor(color).color)\n else if (el.themeColor.length === 1) chartColors = tinycolor(el.themeColor[0]).analogous(10).map(color => formatColor(color.toHexString()).color)\n else {\n const len = el.themeColor.length\n const supplement = tinycolor(el.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n chartColors = [...el.themeColor.slice(0, len - 1), ...supplement].map(color => formatColor(color).color)\n }\n \n const options: pptxgen.IChartOpts = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n chartColors: el.chartType === 'pie' ? chartColors : chartColors.slice(0, el.data.series.length),\n }\n\n if (el.fill) options.fill = formatColor(el.fill).color\n if (el.legend) {\n options.showLegend = true\n options.legendPos = el.legend === 'top' ? 't' : 'b'\n options.legendColor = formatColor(el.gridColor || '#000000').color\n options.legendFontSize = 14 * 0.75\n }\n\n let type = pptx.ChartType.bar\n if (el.chartType === 'bar') {\n type = pptx.ChartType.bar\n options.barDir = el.options?.horizontalBars ? 'bar' : 'col'\n }\n else if (el.chartType === 'line') {\n if (el.options?.showArea) type = pptx.ChartType.area\n else if (el.options?.showLine === false) {\n type = pptx.ChartType.scatter\n\n chartData.unshift({ name: 'X-Axis', values: Array(el.data.series[0].length).fill(0).map((v, i) => i) })\n options.lineSize = 0\n }\n else type = pptx.ChartType.line\n\n if (el.options?.lineSmooth) options.lineSmooth = true\n }\n else if (el.chartType === 'pie') {\n if (el.options?.donut) {\n type = pptx.ChartType.doughnut\n options.holeSize = 75\n }\n else type = pptx.ChartType.pie\n }\n \n pptxSlide.addChart(type, chartData, options)\n }\n\n else if (el.type === 'table') {\n const hiddenCells = []\n for (let i = 0; i < el.data.length; i++) {\n const rowData = el.data[i]\n\n for (let j = 0; j < rowData.length; j++) {\n const cell = rowData[j]\n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) hiddenCells.push(`${row}_${col}`)\n }\n }\n }\n }\n\n const tableData = []\n\n const theme = el.theme\n let themeColor: FormatColor | null = null\n let subThemeColors: FormatColor[] = []\n if (theme) {\n themeColor = formatColor(theme.color)\n subThemeColors = getTableSubThemeColor(theme.color).map(item => formatColor(item))\n }\n\n for (let i = 0; i < el.data.length; i++) {\n const row = el.data[i]\n const _row = []\n\n for (let j = 0; j < row.length; j++) {\n const cell = row[j]\n const cellOptions: pptxgen.TableCellProps = {\n colspan: cell.colspan,\n rowspan: cell.rowspan,\n bold: cell.style?.bold || false,\n italic: cell.style?.em || false,\n underline: { style: cell.style?.underline ? 'sng' : 'none' },\n align: cell.style?.align || 'left',\n valign: 'middle',\n fontFace: cell.style?.fontname || '微软雅黑',\n fontSize: (cell.style?.fontsize ? parseInt(cell.style?.fontsize) : 14) * 0.75,\n }\n if (theme && themeColor) {\n let c: FormatColor\n if (i % 2 === 0) c = subThemeColors[1]\n else c = subThemeColors[0]\n\n if (theme.rowHeader && i === 0) c = themeColor\n else if (theme.rowFooter && i === el.data.length - 1) c = themeColor\n else if (theme.colHeader && j === 0) c = themeColor\n else if (theme.colFooter && j === row.length - 1) c = themeColor\n\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.backcolor) {\n const c = formatColor(cell.style.backcolor)\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.color) cellOptions.color = formatColor(cell.style.color).color\n\n if (!hiddenCells.includes(`${i}_${j}`)) {\n _row.push({\n text: cell.text,\n options: cellOptions,\n })\n }\n }\n if (_row.length) tableData.push(_row)\n }\n\n const options: pptxgen.TableProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n colW: el.colWidths.map(item => el.width * item / 100),\n }\n if (el.theme) options.fill = { color: '#ffffff' }\n if (el.outline.width && el.outline.color) {\n options.border = {\n type: el.outline.style === 'solid' ? 'solid' : 'dash',\n pt: el.outline.width * 0.75,\n color: formatColor(el.outline.color).color,\n }\n }\n\n pptxSlide.addTable(tableData, options)\n }\n \n else if (el.type === 'latex') {\n const svgRef = document.querySelector(`.thumbnail-list .base-element-${el.id} svg`) as HTMLElement\n const base64SVG = svg2Base64(svgRef)\n\n const options: pptxgen.ImageProps = {\n data: base64SVG,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n\n pptxSlide.addImage(options)\n }\n }\n }\n pptx.writeFile({ fileName: `pptist.pptx` }).then(() => exporting.value = false).catch(() => {\n exporting.value = false\n message.error('导出失败')\n })\n }\n\n return {\n exporting,\n exportImage,\n exportJSON,\n exportPPTX,\n }\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b6d79f64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"hotkey-doc\" }\nconst _hoisted_2 = { class: \"title\" }\nconst _hoisted_3 = { class: \"label\" }\nconst _hoisted_4 = { class: \"value\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.hotkeys, (item) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: item.type\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(item.type), 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.children, (hotkey) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"hotkey-item\",\n key: hotkey.label\n }, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(hotkey.label), 1),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(hotkey.value), 1)\n ]))\n }), 128))\n ], 64))\n }), 128))\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { HOTKEY_DOC } from '@/configs/hotkey'\n\nexport default defineComponent({\n name: 'hotkey-doc',\n setup() {\n return {\n hotkeys: HOTKEY_DOC,\n }\n },\n})\n","import { render } from \"./HotkeyDoc.vue?vue&type=template&id=b6d79f64&scoped=true&ts=true\"\nimport script from \"./HotkeyDoc.vue?vue&type=script&lang=ts\"\nexport * from \"./HotkeyDoc.vue?vue&type=script&lang=ts\"\n\nimport \"./HotkeyDoc.vue?vue&type=style&index=0&id=b6d79f64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b6d79f64\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4aeb44b4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"export-img-dialog\" }\nconst _hoisted_2 = { class: \"thumbnails-view\" }\nconst _hoisted_3 = {\n class: \"thumbnails\",\n ref: \"imageThumbnailsRef\"\n}\nconst _hoisted_4 = { class: \"configs\" }\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"导出格式:\", -1))\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"JPEG\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"PNG\")\nconst _hoisted_9 = { class: \"row\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"图片质量:\", -1))\nconst _hoisted_11 = { class: \"row\" }\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"忽略在线字体:\", -1))\nconst _hoisted_13 = { class: \"config-item\" }\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"tip\" }, \" 提示:导出时默认会忽略在线字体,若您在幻灯片中使用了在线字体,且不希望导出图片中丢失相关样式,可以选择关闭【忽略在线字体】选项,但要注意,这将会导致导出用时大幅度增加。 \", -1))\nconst _hoisted_15 = { class: \"btns\" }\nconst _hoisted_16 = /*#__PURE__*/_createTextVNode(\"导出图片\")\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"关闭\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_FullscreenSpin = _resolveComponent(\"FullscreenSpin\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide) => {\n return (_openBlock(), _createBlock(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n key: slide.id,\n slide: slide,\n size: 1600\n }, null, 8, [\"slide\"]))\n }), 128))\n ], 512)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(_component_RadioGroup, {\n class: \"config-item\",\n value: _ctx.format,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.format) = $event))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, { value: \"jpeg\" }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_RadioButton, { value: \"png\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_Slider, {\n class: \"config-item\",\n min: 0,\n max: 1,\n step: 0.1,\n value: _ctx.quality,\n \"onUpdate:value\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.quality) = $event))\n }, null, 8, [\"step\", \"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_Switch, {\n checked: _ctx.ignoreWebfont,\n \"onUpdate:checked\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.ignoreWebfont) = $event))\n }, null, 8, [\"checked\"])\n ])\n ]),\n _hoisted_14,\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(_component_Button, {\n class: \"btn export\",\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.expImage()))\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"btn close\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.close()))\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n })\n ])\n ]),\n _createVNode(_component_FullscreenSpin, {\n loading: _ctx.exporting,\n tip: \"正在导出...\"\n }, null, 8, [\"loading\"])\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-025539cf\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 1,\n class: \"placeholder\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ThumbnailElement = _resolveComponent(\"ThumbnailElement\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"thumbnail-slide\",\n style: _normalizeStyle({\n width: _ctx.size + 'px',\n height: _ctx.size * _ctx.viewportRatio + 'px',\n })\n }, [\n (_ctx.visible)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"elements\",\n style: _normalizeStyle({\n width: _ctx.VIEWPORT_SIZE + 'px',\n height: _ctx.VIEWPORT_SIZE * _ctx.viewportRatio + 'px',\n transform: `scale(${_ctx.scale})`,\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"background\",\n style: _normalizeStyle(_ctx.backgroundStyle)\n }, null, 4),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slide.elements, (element, index) => {\n return (_openBlock(), _createBlock(_component_ThumbnailElement, {\n key: element.id,\n elementInfo: element,\n elementIndex: index + 1\n }, null, 8, [\"elementInfo\", \"elementIndex\"]))\n }), 128))\n ], 4))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_1, \"加载中 ...\"))\n ], 4))\n}","import { InjectionKey, Ref } from 'vue'\n\nexport type SlideScale = Ref\nexport type SlideId = Ref\n\nexport const injectKeySlideScale: InjectionKey = Symbol()\nexport const injectKeySlideId: InjectionKey = Symbol()","import { Ref, computed } from 'vue'\nimport { SlideBackground } from '@/types/slides'\n\n// 将页面背景数据转换为css样式\nexport default (background: Ref) => {\n const backgroundStyle = computed(() => {\n if (!background.value) return { backgroundColor: '#fff' }\n\n const {\n type,\n color,\n image,\n imageSize,\n gradientColor,\n gradientRotate,\n gradientType,\n } = background.value\n\n // 纯色背景\n if (type === 'solid') return { backgroundColor: color }\n\n // 背景图模式\n // 包括:背景图、背景大小,是否重复\n else if (type === 'image') {\n if (!image) return { backgroundColor: '#fff' }\n if (imageSize === 'repeat') {\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'repeat',\n backgroundSize: 'contain',\n }\n }\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: imageSize || 'cover',\n }\n }\n\n // 渐变色背景\n else if (type === 'gradient') {\n const rotate = gradientRotate || 0\n const color1 = gradientColor ? gradientColor[0] : '#fff'\n const color2 = gradientColor ? gradientColor[1] : '#fff'\n \n if (gradientType === 'radial') return { backgroundImage: `radial-gradient(${color1}, ${color2}` }\n return { backgroundImage: `linear-gradient(${rotate}deg, ${color1}, ${color2}` }\n }\n\n return { backgroundColor: '#fff' }\n })\n\n return {\n backgroundStyle,\n }\n}","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"base-element\", `base-element-${_ctx.elementInfo.id}`]),\n style: _normalizeStyle({\n zIndex: _ctx.elementIndex,\n })\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentElementComponent), {\n elementInfo: _ctx.elementInfo,\n target: \"thumbnail\"\n }, null, 8, [\"elementInfo\"]))\n ], 6))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0b1f9460\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ImageOutline = _resolveComponent(\"ImageOutline\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-image\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n })\n }, [\n _createVNode(_component_ImageOutline, { elementInfo: _ctx.elementInfo }, null, 8, [\"elementInfo\"]),\n _createElementVNode(\"div\", {\n class: \"image-content\",\n style: _normalizeStyle({ clipPath: _ctx.clipShape.style })\n }, [\n _createElementVNode(\"img\", {\n src: _ctx.elementInfo.src,\n draggable: false,\n style: _normalizeStyle({\n top: _ctx.imgPosition.top,\n left: _ctx.imgPosition.left,\n width: _ctx.imgPosition.width,\n height: _ctx.imgPosition.height,\n filter: _ctx.filter,\n }),\n alt: \"\"\n }, null, 12, _hoisted_1)\n ], 4)\n ], 4)\n ], 4)\n ], 4))\n}","import { computed, Ref } from 'vue'\nimport { PPTElementShadow } from '@/types/slides'\n\n// 计算元素的阴影样式\nexport default (shadow: Ref) => {\n const shadowStyle = computed(() => {\n if (shadow.value) {\n const { h, v, blur, color } = shadow.value\n return `${h}px ${v}px ${blur}px ${color}`\n }\n return ''\n })\n\n return {\n shadowStyle,\n }\n}","export const enum ClipPathTypes {\n RECT = 'rect',\n ELLIPSE = 'ellipse',\n POLYGON = 'polygon',\n}\n\nexport const enum ClipPaths {\n RECT = 'rect',\n ROUNDRECT = 'roundRect',\n ELLIPSE = 'ellipse',\n TRIANGLE = 'triangle',\n PENTAGON = 'pentagon',\n RHOMBUS = 'rhombus',\n STAR = 'star',\n}\n\nexport const CLIPPATHS = {\n rect: {\n name: '矩形',\n type: ClipPathTypes.RECT,\n radius: '0',\n style: '',\n },\n rect2: {\n name: '矩形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L 0 ${height} Z`\n },\n },\n rect3: {\n name: '矩形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.8} Z`\n },\n },\n roundRect: {\n name: '圆角矩形',\n type: ClipPathTypes.RECT,\n radius: '10%',\n style: 'inset(0 0 0 0 round 10% 10% 10% 10%)',\n },\n ellipse: {\n name: '圆形',\n type: ClipPathTypes.ELLIPSE,\n style: 'ellipse(50% 50% at 50% 50%)',\n },\n triangle: {\n name: '三角形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n triangle2: {\n name: '三角形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 100%, 0% 0%, 100% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} ${height} L 0 0 L ${width} 0 Z`\n },\n },\n triangle3: {\n name: '三角形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n rhombus: {\n name: '菱形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${height * 0.5} L ${width * 0.5} ${height} L 0 ${height * 0.5} Z`\n },\n },\n hexagon: {\n name: '六边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.2} 0 L ${width * 0.8} 0 L ${width} ${height * 0.5} L ${width * 0.8} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.5} Z`\n },\n },\n pentagon: {\n name: '五边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${0.38 * height} L ${0.82 * width} ${height} L ${0.18 * width} ${height} L 0 ${0.38 * height} Z`\n },\n },\n parallelogram: {\n name: '平行四边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} 0 L ${width} 0 L ${width * 0.7} ${height} L 0 ${height} Z`\n },\n },\n parallelogram2: {\n name: '平行四边形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} ${height} L ${width} ${height} L ${width * 0.7} 0 L 0 0 Z`\n },\n },\n trapezoid: {\n name: '梯形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.25} 0 L ${width * 0.75} 0 L ${width} ${height} L 0 ${height} Z`\n },\n },\n trapezoid2: {\n name: '梯形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width} 0 L ${width * 0.75} ${height} L ${width * 0.25} ${height} Z`\n },\n },\n}","import { computed, Ref } from 'vue'\n\n// 计算元素的翻转样式\nexport default (flipH: Ref, flipV: Ref) => {\n const flipStyle = computed(() => {\n let style = ''\n \n if (flipH.value && flipV.value) style = 'rotateX(180deg) rotateY(180deg)'\n else if (flipV.value) style = 'rotateX(180deg)'\n else if (flipH.value) style = 'rotateY(180deg)'\n\n return style\n })\n\n return {\n flipStyle,\n }\n}","import { computed, Ref } from 'vue'\nimport { CLIPPATHS, ClipPathTypes } from '@/configs/imageClip'\nimport { ImageElementClip } from '@/types/slides'\n\nexport default (clip: Ref) => {\n const clipShape = computed(() => {\n if (!clip.value) return CLIPPATHS.rect\n const shape = clip.value.shape || ClipPathTypes.RECT\n\n return CLIPPATHS[shape]\n })\n\n const imgPosition = computed(() => {\n if (!clip.value) {\n return {\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n }\n }\n\n const [start, end] = clip.value.range\n\n const widthScale = (end[0] - start[0]) / 100\n const heightScale = (end[1] - start[1]) / 100\n const left = start[0] / widthScale\n const top = start[1] / heightScale\n\n return {\n left: -left + '%',\n top: -top + '%',\n width: 100 / widthScale + '%',\n height: 100 / heightScale + '%',\n }\n })\n\n return {\n clipShape,\n imgPosition,\n }\n}","import { computed, Ref } from 'vue'\nimport { ImageElementFilters } from '@/types/slides'\n\nexport default (filters: Ref) => {\n const filter = computed(() => {\n if (!filters.value) return ''\n let filter = ''\n for (const key of Object.keys(filters.value)) {\n filter += `${key}(${filters.value[key]}) `\n }\n return filter\n })\n\n return {\n filter,\n }\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"image-outline\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ImageRectOutline = _resolveComponent(\"ImageRectOutline\")!\n const _component_ImageEllipseOutline = _resolveComponent(\"ImageEllipseOutline\")!\n const _component_ImagePolygonOutline = _resolveComponent(\"ImagePolygonOutline\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.clipShape.type === 'rect')\n ? (_openBlock(), _createBlock(_component_ImageRectOutline, {\n key: 0,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n radius: _ctx.clipShape.radius,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"radius\", \"outline\"]))\n : (_ctx.clipShape.type === 'ellipse')\n ? (_openBlock(), _createBlock(_component_ImageEllipseOutline, {\n key: 1,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]))\n : (_ctx.clipShape.type === 'polygon')\n ? (_openBlock(), _createBlock(_component_ImagePolygonOutline, {\n key: 2,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline,\n createPath: _ctx.clipShape.createPath\n }, null, 8, [\"width\", \"height\", \"outline\", \"createPath\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-48a14431\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"rx\", \"ry\", \"width\", \"height\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"image-rect-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"rect\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n fill: \"transparent\",\n rx: _ctx.radius,\n ry: _ctx.radius,\n width: _ctx.width,\n height: _ctx.height,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=48a14431&scoped=true&ts=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=48a14431&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-48a14431\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-692bbda6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"cx\", \"cy\", \"rx\", \"ry\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"image-ellipse-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"ellipse\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n fill: \"transparent\",\n cx: _ctx.width / 2,\n cy: _ctx.height / 2,\n rx: _ctx.width / 2,\n ry: _ctx.height / 2,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=692bbda6&scoped=true&ts=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=692bbda6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-692bbda6\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-21ca95cc\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"image-polygon-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"path\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n fill: \"transparent\",\n d: _ctx.createPath(_ctx.width, _ctx.height),\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=21ca95cc&scoped=true&ts=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=21ca95cc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-21ca95cc\"]])\n\nexport default __exports__","\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&ts=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\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=0b1f9460&scoped=true&ts=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=0b1f9460&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0b1f9460\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2ec235c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-text\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n backgroundColor: _ctx.elementInfo.fill,\n opacity: _ctx.elementInfo.opacity,\n textShadow: _ctx.shadowStyle,\n lineHeight: _ctx.elementInfo.lineHeight,\n letterSpacing: (_ctx.elementInfo.wordSpace || 0) + 'px',\n color: _ctx.elementInfo.defaultColor,\n fontFamily: _ctx.elementInfo.defaultFontName,\n })\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createElementVNode(\"div\", {\n class: \"text ProseMirror-static\",\n innerHTML: _ctx.elementInfo.content\n }, null, 8, _hoisted_1)\n ], 4)\n ], 4)\n ], 4))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-34c0a0a8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"element-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"path\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n fill: \"transparent\",\n d: `M0,0 L${_ctx.width},0 L${_ctx.width},${_ctx.height} L0,${_ctx.height} Z`,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=34c0a0a8&scoped=true&ts=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=34c0a0a8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-34c0a0a8\"]])\n\nexport default __exports__","\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&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2ec235c4\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2bad8b7f\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = [\"transform\"]\nconst _hoisted_4 = [\"d\", \"fill\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\nconst _hoisted_5 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GradientDefs = _resolveComponent(\"GradientDefs\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-shape\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n opacity: _ctx.elementInfo.opacity,\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n color: _ctx.text.defaultColor,\n fontFamily: _ctx.text.defaultFontName,\n })\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height\n }, [\n (_ctx.elementInfo.gradient)\n ? (_openBlock(), _createElementBlock(\"defs\", _hoisted_2, [\n _createVNode(_component_GradientDefs, {\n id: `base-gradient-${_ctx.elementInfo.id}`,\n type: _ctx.elementInfo.gradient.type,\n color1: _ctx.elementInfo.gradient.color[0],\n color2: _ctx.elementInfo.gradient.color[1],\n rotate: _ctx.elementInfo.gradient.rotate\n }, null, 8, [\"id\", \"type\", \"color1\", \"color2\", \"rotate\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n d: _ctx.elementInfo.path,\n fill: _ctx.elementInfo.gradient ? `url(#base-gradient-${_ctx.elementInfo.id})` : _ctx.elementInfo.fill,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 5' : '0 0'\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_3)\n ], 8, _hoisted_1)),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"shape-text\", _ctx.text.align])\n }, [\n _createElementVNode(\"div\", {\n class: \"ProseMirror-static\",\n innerHTML: _ctx.text.content\n }, null, 8, _hoisted_5)\n ], 2)\n ], 4)\n ], 4)\n ], 4))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"gradientTransform\"]\nconst _hoisted_2 = [\"stop-color\"]\nconst _hoisted_3 = [\"stop-color\"]\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = [\"stop-color\"]\nconst _hoisted_6 = [\"stop-color\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.type === 'linear')\n ? (_openBlock(), _createElementBlock(\"linearGradient\", {\n key: 0,\n id: _ctx.id,\n x1: \"0%\",\n y1: \"0%\",\n x2: \"100%\",\n y2: \"0%\",\n gradientTransform: `rotate(${_ctx.rotate},0.5,0.5)`\n }, [\n _createElementVNode(\"stop\", {\n offset: \"0%\",\n \"stop-color\": _ctx.color1\n }, null, 8, _hoisted_2),\n _createElementVNode(\"stop\", {\n offset: \"100%\",\n \"stop-color\": _ctx.color2\n }, null, 8, _hoisted_3)\n ], 8, _hoisted_1))\n : (_openBlock(), _createElementBlock(\"radialGradient\", {\n key: 1,\n id: _ctx.id\n }, [\n _createElementVNode(\"stop\", {\n offset: \"0%\",\n \"stop-color\": _ctx.color1\n }, null, 8, _hoisted_5),\n _createElementVNode(\"stop\", {\n offset: \"100%\",\n \"stop-color\": _ctx.color2\n }, null, 8, _hoisted_6)\n ], 8, _hoisted_4))\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&ts=true\"\nimport script from \"./GradientDefs.vue?vue&type=script&lang=ts\"\nexport * from \"./GradientDefs.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\n\nimport GradientDefs from './GradientDefs.vue'\n\nexport default defineComponent({\n name: 'base-element-shape',\n components: {\n GradientDefs,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n text,\n }\n },\n})\n","import { render } from \"./BaseShapeElement.vue?vue&type=template&id=2bad8b7f&scoped=true&ts=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=2bad8b7f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2bad8b7f\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4032440c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\", \"marker-start\", \"marker-end\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinePointMarker = _resolveComponent(\"LinePointMarker\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"editable-element-shape\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({ filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '' })\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.svgWidth,\n height: _ctx.svgHeight\n }, [\n _createElementVNode(\"defs\", null, [\n (_ctx.elementInfo.points[0])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 0,\n id: _ctx.elementInfo.id,\n position: \"start\",\n type: _ctx.elementInfo.points[0],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.elementInfo.points[1])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 1,\n id: _ctx.elementInfo.id,\n position: \"end\",\n type: _ctx.elementInfo.points[1],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"path\", {\n d: _ctx.path,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.width,\n \"stroke-dasharray\": _ctx.lineDashArray,\n fill: \"none\",\n \"stroke-linecap\": \"\",\n \"stroke-linejoin\": \"\",\n \"stroke-miterlimit\": \"\",\n \"marker-start\": _ctx.elementInfo.points[0] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[0]}-start)` : '',\n \"marker-end\": _ctx.elementInfo.points[1] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[1]}-end)` : ''\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n ], 4)\n ], 4))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"markerWidth\", \"markerHeight\", \"refX\", \"refY\"]\nconst _hoisted_2 = [\"d\", \"fill\", \"transform\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"marker\", {\n id: `${_ctx.id}-${_ctx.type}-${_ctx.position}`,\n markerUnits: \"userSpaceOnUse\",\n orient: \"auto\",\n markerWidth: _ctx.size * 3,\n markerHeight: _ctx.size * 3,\n refX: _ctx.size * 1.5,\n refY: _ctx.size * 1.5\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.path,\n fill: _ctx.color,\n transform: `scale(${_ctx.size * 0.3}, ${_ctx.size * 0.3}) rotate(${_ctx.rotate}, 5, 5)`\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\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&ts=true\"\nimport script from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\nexport * from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10, 5' : '0, 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./BaseLineElement.vue?vue&type=template&id=4032440c&scoped=true&ts=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=4032440c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4032440c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-chart\",\n style: _normalizeStyle({\r\n top: _ctx.elementInfo.top + 'px',\r\n left: _ctx.elementInfo.left + 'px',\r\n width: _ctx.elementInfo.width + 'px',\r\n height: _ctx.elementInfo.height + 'px',\r\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\r\n backgroundColor: _ctx.elementInfo.fill,\r\n })\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createVNode(_component_Chart, {\n class: _normalizeClass({ 'need-scale': _ctx.needScaleSize }),\n width: _ctx.chartWidth,\n height: _ctx.chartHeight,\n type: _ctx.elementInfo.chartType,\n data: _ctx.elementInfo.data,\n options: _ctx.elementInfo.options,\n themeColor: _ctx.elementInfo.themeColor,\n gridColor: _ctx.elementInfo.gridColor,\n legends: _ctx.elementInfo.data.legends,\n legend: _ctx.elementInfo.legend || ''\n }, null, 8, [\"class\", \"width\", \"height\", \"type\", \"data\", \"options\", \"themeColor\", \"gridColor\", \"legends\", \"legend\"])\n ], 4)\n ], 4)\n ], 4))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"chart\",\n style: _normalizeStyle({ flexDirection: _ctx.legend === 'top' ? 'column-reverse' : 'column' })\n }, [\n _createElementVNode(\"div\", {\n class: \"chart-content\",\n ref: \"chartRef\",\n style: _normalizeStyle({\n width: _ctx.width + 'px',\n height: _ctx.chartHeight + 'px',\n transform: `scale(${1 / _ctx.slideScale})`,\n })\n }, null, 4),\n (_ctx.legend)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"legends\",\n style: _normalizeStyle({ transform: `scale(${1 / _ctx.slideScale})` })\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.legends, (legend, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"legend\",\n key: index,\n style: _normalizeStyle({ color: _ctx.gridColor })\n }, [\n _createElementVNode(\"div\", {\n class: \"block\",\n style: _normalizeStyle({ backgroundColor: _ctx.themeColors[index] })\n }, null, 4),\n _createTextVNode(\" \" + _toDisplayString(legend), 1)\n ], 4))\n }), 128))\n ], 4))\n : _createCommentVNode(\"\", true)\n ], 4))\n}","\nimport { computed, defineComponent, inject, onMounted, PropType, ref, watch } from 'vue'\nimport { upperFirst } from 'lodash'\nimport tinycolor from 'tinycolor2'\nimport Chartist, {\n IChartistLineChart,\n IChartistBarChart,\n IChartistPieChart,\n} from 'chartist'\nimport { ChartData, ChartOptions, ChartType } from '@/types/slides'\nimport { injectKeySlideScale } from '@/types/injectKey'\n\nimport 'chartist/dist/scss/chartist.scss'\n\nexport default defineComponent({\n name: 'chart',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n type: {\n type: String as PropType,\n required: true,\n },\n data: {\n type: Object as PropType,\n required: true,\n },\n options: {\n type: Object as PropType,\n },\n themeColor: {\n type: Array as PropType,\n required: true,\n },\n legends: {\n type: Array as PropType,\n required: true,\n },\n gridColor: {\n type: String,\n },\n legend: {\n type: String as PropType<'' | 'top' | 'bottom'>,\n },\n },\n setup(props) {\n const chartRef = ref()\n const slideScale = inject(injectKeySlideScale) || ref(1)\n\n let chart: IChartistLineChart | IChartistBarChart | IChartistPieChart | undefined\n\n const chartHeight = computed(() => {\n if (props.legend) return props.height - 20\n return props.height\n })\n\n const getDataAndOptions = () => {\n const propsOptopns = props.options || {}\n const options = {\n ...propsOptopns,\n width: props.width * slideScale.value,\n height: chartHeight.value * slideScale.value,\n }\n const data = props.type === 'pie' ? { ...props.data, series: props.data.series[0] } : props.data\n return { data, options }\n }\n\n const renderChart = () => {\n if (!chartRef.value) return\n\n const type = upperFirst(props.type)\n const { data, options } = getDataAndOptions()\n chart = new Chartist[type](chartRef.value, data, options)\n }\n\n const updateChart = () => {\n if (!chart) {\n renderChart()\n return\n }\n const { data, options } = getDataAndOptions()\n chart.update(data, options)\n }\n\n watch([\n () => props.width,\n () => props.height,\n () => props.data,\n () => props.options,\n slideScale,\n ], updateChart)\n\n onMounted(renderChart)\n\n const themeColors = computed(() => {\n let colors: string[] = []\n if (props.themeColor.length >= 10) colors = props.themeColor\n else if (props.themeColor.length === 1) colors = tinycolor(props.themeColor[0]).analogous(10).map(color => color.toHexString())\n else {\n const len = props.themeColor.length\n const supplement = tinycolor(props.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n colors = [...props.themeColor.slice(0, len - 1), ...supplement]\n }\n return colors\n })\n\n // 更新主题配色:\n // 如果当前所设置的主题色数小于10,剩余部分获取最后一个主题色的相近颜色作为配色\n const updateTheme = () => {\n if (!chartRef.value) return\n\n for (let i = 0; i < 10; i++) {\n chartRef.value.style.setProperty(`--theme-color-${i + 1}`, themeColors.value[i])\n }\n }\n\n watch(themeColors, updateTheme)\n onMounted(updateTheme)\n\n // 更新网格颜色,包括坐标的文字部分\n const updateGridColor = () => {\n if (!chartRef.value) return\n if (props.gridColor) chartRef.value.style.setProperty(`--grid-color`, props.gridColor)\n }\n\n watch(() => props.gridColor, updateGridColor)\n onMounted(updateGridColor)\n\n return {\n chartHeight,\n themeColors,\n slideScale,\n chartRef,\n }\n },\n})\n","import { render } from \"./Chart.vue?vue&type=template&id=79ce410e&scoped=true&ts=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=79ce410e&lang=scss&scoped=true\"\nimport \"./Chart.vue?vue&type=style&index=1&id=79ce410e&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-79ce410e\"]])\n\nexport default __exports__","\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\nimport Chart from './Chart.vue'\r\n\r\nexport default defineComponent({\r\n name: 'base-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 needScaleSize: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n setup(props) {\r\n return {\r\n chartWidth: computed(() => props.needScaleSize ? props.elementInfo.width * 10 : props.elementInfo.width),\r\n chartHeight: computed(() => props.needScaleSize ? props.elementInfo.height * 10 : props.elementInfo.height),\r\n }\r\n },\r\n})\r\n","import { render } from \"./BaseChartElement.vue?vue&type=template&id=60d9ae43&scoped=true&ts=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=60d9ae43&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-60d9ae43\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3bbcc75c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_StaticTable = _resolveComponent(\"StaticTable\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-table\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_StaticTable, {\n data: _ctx.elementInfo.data,\n width: _ctx.elementInfo.width,\n colWidths: _ctx.elementInfo.colWidths,\n outline: _ctx.elementInfo.outline,\n theme: _ctx.elementInfo.theme\n }, null, 8, [\"data\", \"width\", \"colWidths\", \"outline\", \"theme\"])\n ])\n ], 4)\n ], 4))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, vShow as _vShow, normalizeStyle as _normalizeStyle, withDirectives as _withDirectives, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74b60291\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\"]\nconst _hoisted_2 = [\"rowspan\", \"colspan\"]\nconst _hoisted_3 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"static-table\",\n style: _normalizeStyle({ width: _ctx.totalWidth + 'px' })\n }, [\n _createElementVNode(\"table\", {\n class: _normalizeClass({\n 'theme': _ctx.theme,\n 'row-header': _ctx.theme?.rowHeader,\n 'row-footer': _ctx.theme?.rowFooter,\n 'col-header': _ctx.theme?.colHeader,\n 'col-footer': _ctx.theme?.colFooter,\n }),\n style: _normalizeStyle(`--themeColor: ${_ctx.theme?.color}; --subThemeColor1: ${_ctx.subThemeColor[0]}; --subThemeColor2: ${_ctx.subThemeColor[1]}`)\n }, [\n _createElementVNode(\"colgroup\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.colSizeList, (width, index) => {\n return (_openBlock(), _createElementBlock(\"col\", {\n span: \"1\",\n key: index,\n width: width\n }, null, 8, _hoisted_1))\n }), 128))\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.data, (rowCells, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"tr\", { key: rowIndex }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rowCells, (cell, colIndex) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"td\", {\n class: \"cell\",\n style: _normalizeStyle({\n borderStyle: _ctx.outline.style,\n borderColor: _ctx.outline.color,\n borderWidth: _ctx.outline.width + 'px',\n ..._ctx.getTextStyle(cell.style),\n }),\n key: cell.id,\n rowspan: cell.rowspan,\n colspan: cell.colspan\n }, [\n _createElementVNode(\"div\", {\n class: \"cell-text\",\n innerHTML: _ctx.formatText(cell.text)\n }, null, 8, _hoisted_3)\n ], 12, _hoisted_2)), [\n [_vShow, !_ctx.hideCells.includes(`${rowIndex}_${colIndex}`)]\n ])\n }), 128))\n ]))\n }), 128))\n ])\n ], 6)\n ], 4))\n}","import { TableCellStyle } from '@/types/slides'\n\n/**\n * 计算单元格文本样式\n * @param style 单元格文本样式原数据\n */\nexport const getTextStyle = (style?: TableCellStyle) => {\n if (!style) return {}\n const {\n bold,\n em,\n underline,\n strikethrough,\n color,\n backcolor,\n fontsize,\n fontname,\n align,\n } = style\n\n let textDecoration = `${underline ? 'underline' : ''} ${strikethrough ? 'line-through' : ''}`\n if (textDecoration === ' ') textDecoration = 'none'\n \n return {\n fontWeight: bold ? 'bold' : 'normal',\n fontStyle: em ? 'italic' : 'normal',\n textDecoration,\n color: color || '#000',\n backgroundColor: backcolor || '',\n fontSize: fontsize || '14px',\n fontFamily: fontname || '微软雅黑',\n textAlign: align || 'left',\n }\n}\n\nexport const formatText = (text: string) => {\n return text.replace(/\\n/g, '
').replace(/ /g, ' ')\n}","import { computed, Ref } from 'vue'\nimport { TableCell } from '@/types/slides'\n\n// 计算无效的单元格位置(被合并的单元格位置)集合\n\nexport default (cells: Ref) => {\n const hideCells = computed(() => {\n const hideCells = []\n \n for (let i = 0; i < cells.value.length; i++) {\n const rowCells = cells.value[i]\n\n for (let j = 0; j < rowCells.length; j++) {\n const cell = rowCells[j]\n \n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) {\n hideCells.push(`${row}_${col}`)\n }\n }\n }\n }\n }\n return hideCells\n })\n\n return {\n hideCells,\n }\n}","import { ref, Ref, watch } from 'vue'\nimport { TableTheme } from '@/types/slides'\nimport { getTableSubThemeColor } from '@/utils/element'\n\n// 通过表格的主题色计算辅助颜色\n\nexport default (theme: Ref) => {\n const subThemeColor = ref(['', ''])\n watch(() => theme.value, () => {\n if (theme.value) {\n subThemeColor.value = getTableSubThemeColor(theme.value.color)\n }\n }, { immediate: true })\n\n return {\n subThemeColor,\n }\n}","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nexport default defineComponent({\n name: 'static-table',\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props) {\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n return {\n colSizeList,\n totalWidth,\n hideCells,\n getTextStyle,\n formatText,\n subThemeColor,\n }\n },\n})\n","import { render } from \"./StaticTable.vue?vue&type=template&id=74b60291&scoped=true&ts=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=74b60291&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-74b60291\"]])\n\nexport default __exports__","\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=3bbcc75c&scoped=true&ts=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=3bbcc75c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3bbcc75c\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4118f3dd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\nconst _hoisted_2 = [\"width\", \"height\", \"stroke\", \"stroke-width\"]\nconst _hoisted_3 = [\"transform\"]\nconst _hoisted_4 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-latex\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.strokeWidth,\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }, [\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.elementInfo.path\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_3)\n ], 8, _hoisted_2))\n ])\n ], 4)\n ], 4))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTLatexElement } from '@/types/slides'\n\nexport default defineComponent({\n name: 'base-element-latex',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./BaseLatexElement.vue?vue&type=template&id=4118f3dd&scoped=true&ts=true\"\nimport script from \"./BaseLatexElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseLatexElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseLatexElement.vue?vue&type=style&index=0&id=4118f3dd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4118f3dd\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-video\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.elementInfo.poster})` })\n }, [\n _createVNode(_component_IconPlayOne, { class: \"icon\" })\n ], 4)\n ], 4)\n ], 4))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTVideoElement } from '@/types/slides'\n\nexport default defineComponent({\n name: 'base-element-video',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./BaseVideoElement.vue?vue&type=template&id=1c831c75&scoped=true&ts=true\"\nimport script from \"./BaseVideoElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseVideoElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseVideoElement.vue?vue&type=style&index=0&id=1c831c75&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1c831c75\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-513e91c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-audio\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_IconVolumeNotice, {\n class: \"audio-icon\",\n style: _normalizeStyle({\n fontSize: _ctx.audioIconSize,\n color: _ctx.elementInfo.color,\n })\n }, null, 8, [\"style\"])\n ])\n ], 4)\n ], 4))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTAudioElement } from '@/types/slides'\n\nexport default defineComponent({\n name: 'base-element-audio',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const audioIconSize = computed(() => {\n return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'\n })\n\n return {\n audioIconSize,\n }\n },\n})\n","import { render } from \"./BaseAudioElement.vue?vue&type=template&id=513e91c4&scoped=true&ts=true\"\nimport script from \"./BaseAudioElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseAudioElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseAudioElement.vue?vue&type=style&index=0&id=513e91c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-513e91c4\"]])\n\nexport default __exports__","\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'\nimport BaseLatexElement from '@/views/components/element/LatexElement/BaseLatexElement.vue'\nimport BaseVideoElement from '@/views/components/element/VideoElement/BaseVideoElement.vue'\nimport BaseAudioElement from '@/views/components/element/AudioElement/BaseAudioElement.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 [ElementTypes.LATEX]: BaseLatexElement,\n [ElementTypes.VIDEO]: BaseVideoElement,\n [ElementTypes.AUDIO]: BaseAudioElement,\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=36b099d8&ts=true\"\nimport script from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, PropType, defineComponent, provide } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { injectKeySlideScale } from '@/types/injectKey'\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 visible: {\n type: Boolean,\n default: true,\n },\n },\n setup(props) {\n const { viewportRatio } = storeToRefs(useSlidesStore())\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n const scale = computed(() => props.size / VIEWPORT_SIZE)\n provide(injectKeySlideScale, scale)\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=025539cf&scoped=true&ts=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=025539cf&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-025539cf\"]])\n\nexport default __exports__","\nimport { defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport useExport from '@/hooks/useExport'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'export-img-dialog',\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const { slides } = storeToRefs(useSlidesStore())\n\n const imageThumbnailsRef = ref()\n const format = ref<'jpeg' | 'png'>('jpeg')\n const quality = ref(1)\n const ignoreWebfont = ref(true)\n\n const close = () => emit('close')\n\n const { exportImage, exporting } = useExport()\n\n const expImage = () => {\n if (!imageThumbnailsRef.value) return\n exportImage(imageThumbnailsRef.value, format.value, quality.value, ignoreWebfont.value)\n }\n \n return {\n imageThumbnailsRef,\n slides,\n format,\n quality,\n ignoreWebfont,\n exporting,\n expImage,\n close,\n }\n },\n})\n","import { render } from \"./ExportImgDialog.vue?vue&type=template&id=4aeb44b4&scoped=true&ts=true\"\nimport script from \"./ExportImgDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./ExportImgDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./ExportImgDialog.vue?vue&type=style&index=0&id=4aeb44b4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4aeb44b4\"]])\n\nexport default __exports__","\nimport { defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useExport from '@/hooks/useExport'\n\nimport HotkeyDoc from './HotkeyDoc.vue'\nimport ExportImgDialog from './ExportImgDialog.vue'\n\nexport default defineComponent({\n name: 'editor-header',\n components: {\n HotkeyDoc,\n ExportImgDialog,\n },\n setup() {\n const mainStore = useMainStore()\n const { showGridLines } = storeToRefs(mainStore)\n\n const { enterScreening, enterScreeningFromStart } = useScreening()\n const { createSlide, deleteSlide, resetSlides } = useSlideHandler()\n const { redo, undo } = useHistorySnapshot()\n const { exporting, exportJSON, exportPPTX } = useExport()\n\n const toggleGridLines = () => {\n mainStore.setGridLinesState(!showGridLines.value)\n }\n\n const hotkeyDrawerVisible = ref(false)\n const exportImgDialogVisible = ref(false)\n\n const goIssues = () => {\n window.open('https://github.com/pipipi-pikachu/PPTist/issues')\n }\n\n return {\n redo,\n undo,\n showGridLines,\n hotkeyDrawerVisible,\n exportImgDialogVisible,\n exporting,\n enterScreening,\n enterScreeningFromStart,\n createSlide,\n deleteSlide,\n toggleGridLines,\n resetSlides,\n exportJSON,\n exportPPTX,\n goIssues,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5e62abba&scoped=true&ts=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=5e62abba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5e62abba\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-fe9bcf9c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"operates\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementCreateSelection = _resolveComponent(\"ElementCreateSelection\")!\n const _component_AlignmentLine = _resolveComponent(\"AlignmentLine\")!\n const _component_MultiSelectOperate = _resolveComponent(\"MultiSelectOperate\")!\n const _component_Operate = _resolveComponent(\"Operate\")!\n const _component_ViewportBackground = _resolveComponent(\"ViewportBackground\")!\n const _component_MouseSelection = _resolveComponent(\"MouseSelection\")!\n const _component_EditableElement = _resolveComponent(\"EditableElement\")!\n const _component_LinkDialog = _resolveComponent(\"LinkDialog\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"canvas\",\n ref: \"canvasRef\",\n onMousewheel: _cache[3] || (_cache[3] = $event => _ctx.handleMousewheelCanvas($event)),\n onMousedown: _cache[4] || (_cache[4] = $event => _ctx.handleClickBlankArea($event))\n }, [\n (_ctx.creatingElement)\n ? (_openBlock(), _createBlock(_component_ElementCreateSelection, {\n key: 0,\n onCreated: _cache[0] || (_cache[0] = data => _ctx.insertElementFromCreateSelection(data))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: \"viewport-wrapper\",\n style: _normalizeStyle({\n width: _ctx.viewportStyles.width * _ctx.canvasScale + 'px',\n height: _ctx.viewportStyles.height * _ctx.canvasScale + 'px',\n left: _ctx.viewportStyles.left + 'px',\n top: _ctx.viewportStyles.top + 'px',\n })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.alignmentLines, (line, index) => {\n return (_openBlock(), _createBlock(_component_AlignmentLine, {\n key: index,\n type: line.type,\n axis: line.axis,\n length: line.length\n }, null, 8, [\"type\", \"axis\", \"length\"]))\n }), 128)),\n (_ctx.activeElementIdList.length > 1)\n ? (_openBlock(), _createBlock(_component_MultiSelectOperate, {\n key: 0,\n elementList: _ctx.elementList,\n scaleMultiElement: _ctx.scaleMultiElement\n }, null, 8, [\"elementList\", \"scaleMultiElement\"]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.elementList, (element) => {\n return (_openBlock(), _createBlock(_component_Operate, {\n key: element.id,\n elementInfo: element,\n isSelected: _ctx.activeElementIdList.includes(element.id),\n isActive: _ctx.handleElementId === element.id,\n isActiveGroupElement: _ctx.activeGroupElementId === element.id,\n isMultiSelect: _ctx.activeElementIdList.length > 1,\n rotateElement: _ctx.rotateElement,\n scaleElement: _ctx.scaleElement,\n openLinkDialog: _ctx.openLinkDialog,\n dragLineElement: _ctx.dragLineElement\n }, null, 8, [\"elementInfo\", \"isSelected\", \"isActive\", \"isActiveGroupElement\", \"isMultiSelect\", \"rotateElement\", \"scaleElement\", \"openLinkDialog\", \"dragLineElement\"]))\n }), 128)),\n _createVNode(_component_ViewportBackground)\n ]),\n _createElementVNode(\"div\", {\n class: \"viewport\",\n ref: \"viewportRef\",\n style: _normalizeStyle({ transform: `scale(${_ctx.canvasScale})` })\n }, [\n (_ctx.mouseSelectionVisible)\n ? (_openBlock(), _createBlock(_component_MouseSelection, {\n key: 0,\n top: _ctx.mouseSelection.top,\n left: _ctx.mouseSelection.left,\n width: _ctx.mouseSelection.width,\n height: _ctx.mouseSelection.height,\n quadrant: _ctx.mouseSelectionQuadrant\n }, null, 8, [\"top\", \"left\", \"width\", \"height\", \"quadrant\"]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.elementList, (element, index) => {\n return (_openBlock(), _createBlock(_component_EditableElement, {\n key: element.id,\n elementInfo: element,\n elementIndex: index + 1,\n isMultiSelect: _ctx.activeElementIdList.length > 1,\n selectElement: _ctx.selectElement,\n openLinkDialog: _ctx.openLinkDialog\n }, null, 8, [\"elementInfo\", \"elementIndex\", \"isMultiSelect\", \"selectElement\", \"openLinkDialog\"]))\n }), 128))\n ], 4)\n ], 4),\n _createVNode(_component_Modal, {\n visible: _ctx.linkDialogVisible,\n \"onUpdate:visible\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.linkDialogVisible) = $event)),\n footer: null,\n centered: \"\",\n width: 540,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_LinkDialog, {\n onClose: _cache[1] || (_cache[1] = ($event: any) => (_ctx.linkDialogVisible = false))\n })\n ]),\n _: 1\n }, 8, [\"visible\"])\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus],\n [_directive_click_outside, _ctx.removeEditorAreaFocus]\n ])\n}","// 清除文字选区\nexport const removeAllRanges = () => {\n const selection = window.getSelection()\n selection && selection.removeAllRanges()\n}","import { ref, computed, onMounted, onUnmounted, Ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 mainStore = useMainStore()\n const { canvasPercentage } = storeToRefs(mainStore)\n const { viewportRatio } = storeToRefs(useSlidesStore())\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 mainStore.setCanvasScale(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 mainStore.setCanvasScale(viewportActualHeight / (VIEWPORT_SIZE * viewportRatio.value))\n viewportLeft.value = (canvasWidth - viewportActualHeight / viewportRatio.value) / 2\n viewportTop.value = (canvasHeight - viewportActualHeight) / 2\n }\n }\n\n // 可视区域缩放或比例变化时,更新可视区域的位置\n watch([canvasPercentage, viewportRatio], setViewportPosition)\n\n // 画布可视区域位置和大小的样式\n const viewportStyles = computed(() => ({\n width: VIEWPORT_SIZE,\n height: VIEWPORT_SIZE * viewportRatio.value,\n left: viewportLeft.value,\n top: viewportTop.value,\n }))\n\n // 监听画布尺寸发生变化时,更新可视区域的位置\n const resizeObserver = new ResizeObserver(setViewportPosition)\n\n onMounted(() => {\n if (canvasRef.value) resizeObserver.observe(canvasRef.value)\n })\n onUnmounted(() => {\n if (canvasRef.value) resizeObserver.unobserve(canvasRef.value)\n })\n\n return {\n viewportStyles,\n }\n}","import { Ref, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementRange } from '@/utils/element'\n\nexport default (elementList: Ref, viewportRef: Ref) => {\n const mainStore = useMainStore()\n const { canvasScale } = storeToRefs(mainStore)\n\n const mouseSelectionVisible = ref(false)\n const mouseSelectionQuadrant = ref(1)\n const mouseSelection = ref({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\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 mouseSelection.value = {\n top: top,\n left: left,\n width: 0,\n height: 0,\n }\n mouseSelectionVisible.value = false\n mouseSelectionQuadrant.value = 4\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 mouseSelection.value = {\n ...mouseSelection.value,\n width: width,\n height: height,\n }\n mouseSelectionVisible.value = true\n mouseSelectionQuadrant.value = quadrant\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 = mouseSelection.value.left\n const mouseSelectionTop = mouseSelection.value.top\n const mouseSelectionWidth = mouseSelection.value.width\n const mouseSelectionHeight = mouseSelection.value.height\n\n const { minX, maxX, minY, maxY } = getElementRange(element)\n\n // 计算元素是否处在框选范围内时,四个框选方向的计算方式有差异\n let isInclude = false\n if (mouseSelectionQuadrant.value === 4) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > mouseSelectionTop && \n maxY < mouseSelectionTop + mouseSelectionHeight\n }\n else if (mouseSelectionQuadrant.value === 1) {\n isInclude = minX > (mouseSelectionLeft - mouseSelectionWidth) && \n maxX < (mouseSelectionLeft - mouseSelectionWidth) + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (mouseSelectionQuadrant.value === 2) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (mouseSelectionQuadrant.value === 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 mainStore.setActiveElementIdList(inRangeElementIdList)\n\n mouseSelectionVisible.value = false\n }\n }\n\n return {\n mouseSelection,\n mouseSelectionVisible,\n mouseSelectionQuadrant,\n updateMouseSelection,\n }\n}","import { onMounted, onUnmounted, Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (elementRef: Ref) => {\n const { disableHotkeys } = storeToRefs(useMainStore())\n\n const { createImageElement, createTextElement } = useCreateElement()\n\n // 拖拽元素到画布中\n const handleDrop = (e: DragEvent) => {\n if (!e.dataTransfer || e.dataTransfer.items.length === 0) return\n const dataTransferItem = e.dataTransfer.items[0]\n\n // 检查事件对象中是否存在图片,存在则插入图片,否则继续检查是否存在文字,存在则插入文字\n if (dataTransferItem.kind === 'file' && dataTransferItem.type.indexOf('image') !== -1) {\n const imageFile = dataTransferItem.getAsFile()\n if (imageFile) {\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n }\n else if (dataTransferItem.kind === 'string' && dataTransferItem.type === 'text/plain') {\n dataTransferItem.getAsString(text => {\n if (disableHotkeys.value) return\n const string = parseText2Paragraphs(text)\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, string)\n })\n }\n }\n\n onMounted(() => {\n elementRef.value && elementRef.value.addEventListener('drop', handleDrop)\n\n document.ondragleave = e => e.preventDefault()\n document.ondrop = e => e.preventDefault()\n document.ondragenter = e => e.preventDefault()\n document.ondragover = e => e.preventDefault()\n })\n onUnmounted(() => {\n elementRef.value && elementRef.value.removeEventListener('drop', handleDrop)\n\n document.ondragleave = null\n document.ondrop = null\n document.ondragenter = null\n document.ondragover = null\n })\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement, PPTLineElement, PPTVideoElement, PPTAudioElement } 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 slidesStore = useSlidesStore()\n const { canvasScale } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 旋转元素\n const rotateElement = (element: Exclude) => {\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 slidesStore.updateSlide({ 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 video: '视频',\n audio: '音频',\n}\n\nexport const MIN_SIZE = {\n text: 20,\n image: 20,\n shape: 15,\n chart: 200,\n table: 20,\n video: 250,\n audio: 20,\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { PPTElement, PPTImageElement, PPTLineElement, PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandlers, AlignmentLineProps, MultiSelectRange } from '@/types/edit'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { MIN_SIZE } from '@/configs/element'\nimport { SHAPE_PATH_FORMULAS } from '@/configs/shapes'\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 mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeGroupElementId, canvasScale } = storeToRefs(mainStore)\n const { viewportRatio } = storeToRefs(slidesStore)\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 缩放元素\n const scaleElement = (e: MouseEvent, element: Exclude, command: OperateResizeHandlers) => {\n let isMouseDown = true\n mainStore.setScalingState(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 => {\n if (element.id !== el.id) return el\n if (el.type === 'shape' && 'pathFormula' in el && el.pathFormula) {\n return {\n ...el, left, top, width, height,\n viewBox: [width, height],\n path: SHAPE_PATH_FORMULAS[el.pathFormula](width, height),\n }\n }\n return { ...el, left, top, width, height }\n })\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 slidesStore.updateSlide({ elements: elementList.value })\n mainStore.setScalingState(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 slidesStore.updateSlide({ elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n scaleElement,\n scaleMultiElement,\n }\n}","import { Ref } from 'vue'\nimport { uniq } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useKeyboardStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\n\nexport default (\n elementList: Ref,\n moveElement: (e: MouseEvent, element: PPTElement) => void,\n) => {\n const mainStore = useMainStore()\n const { activeElementIdList, activeGroupElementId, handleElementId, editorAreaFocus } = storeToRefs(mainStore)\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n // 选中元素\n // startMove 表示是否需要再选中操作后进入到开始移动的状态\n const selectElement = (e: MouseEvent, element: PPTElement, startMove = true) => {\n if (!editorAreaFocus.value) mainStore.setEditorareaFocus(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 mainStore.setActiveElementIdList(uniq(newActiveIdList))\n mainStore.setHandleElementId(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 mainStore.setActiveElementIdList(newActiveIdList)\n }\n }\n\n // 如果目标元素已被选中,同时目标元素不是当前操作元素,则将其设置为当前操作元素\n else if (handleElementId.value !== element.id) {\n mainStore.setHandleElementId(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 mainStore.setActiveGroupElementId(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 mainStore.setActiveElementIdList(newActiveElementIdList)\n }\n\n return {\n selectElement,\n selectAllElement,\n }\n}\n","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 slidesStore = useSlidesStore()\n const { activeElementIdList, activeGroupElementId, canvasScale } = storeToRefs(useMainStore())\n const { viewportRatio } = storeToRefs(slidesStore)\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 slidesStore.updateSlide({ elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragElement,\n }\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement, PPTLineElement } from '@/types/slides'\nimport { 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 slidesStore = useSlidesStore()\n const { canvasScale } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 拖拽线条端点\n const dragLineElement = (e: MouseEvent, element: PPTLineElement, command: OperateLineHandlers) => {\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' || _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 const [c1, c2] = element.cubic || [[0, 0], [0, 0]]\n let c1X = element.left + c1[0]\n let c1Y = element.top + c1[1]\n let c2X = element.left + c2[0]\n let c2Y = element.top + c2[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 if (command === OperateLineHandlers.C) {\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 else if (command === OperateLineHandlers.C1) {\n c1X = c1X + moveX\n c1Y = c1Y + moveY\n\n if (Math.abs(c1X - startX) < sorptionRange) c1X = startX\n if (Math.abs(c1Y - startY) < sorptionRange) c1Y = startY\n if (Math.abs(c1X - endX) < sorptionRange) c1X = endX\n if (Math.abs(c1Y - endY) < sorptionRange) c1Y = endY\n }\n else if (command === OperateLineHandlers.C2) {\n c2X = c2X + moveX\n c2Y = c2Y + moveY\n\n if (Math.abs(c2X - startX) < sorptionRange) c2X = startX\n if (Math.abs(c2Y - startY) < sorptionRange) c2Y = startY\n if (Math.abs(c2X - endX) < sorptionRange) c2X = endX\n if (Math.abs(c2Y - endY) < sorptionRange) c2Y = endY\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.START || command === OperateLineHandlers.END) {\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 if (element.cubic) newEl.cubic = [[(start[0] + end[0]) / 2, (start[1] + end[1]) / 2], [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]]\n }\n else if (command === OperateLineHandlers.C) {\n if (element.broken) newEl.broken = [midX - minX, midY - minY]\n if (element.curve) newEl.curve = [midX - minX, midY - minY]\n }\n else {\n if (element.cubic) newEl.cubic = [[c1X - minX, c1Y - minY], [c2X - minX, c2Y - 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 slidesStore.updateSlide({ elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragLineElement,\n }\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { CreateElementSelectionData, CreatingLineElement, CreatingShapeElement } from '@/types/edit'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (viewportRef: Ref) => {\n const mainStore = useMainStore()\n const { canvasScale, creatingElement } = storeToRefs(mainStore)\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 mainStore.setCreatingElement(null)\n }\n\n return {\n insertElementFromCreateSelection,\n }\n}","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"editable-element\",\n ref: \"elementRef\",\n id: `editable-element-${_ctx.elementInfo.id}`,\n style: _normalizeStyle({\n zIndex: _ctx.elementIndex,\n })\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentElementComponent), {\n elementInfo: _ctx.elementInfo,\n selectElement: _ctx.selectElement,\n contextmenus: _ctx.contextmenus\n }, null, 8, [\"elementInfo\", \"selectElement\", \"contextmenus\"]))\n ], 12, _hoisted_1))\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { ElementAlignCommands } from '@/types/edit'\nimport { getElementListRange } from '@/utils/element'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useHistorySnapshot from './useHistorySnapshot'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeElementList } = storeToRefs(useMainStore())\n const { currentSlide, viewportRatio } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 将所有选中的元素对齐到画布\n * @param command 对齐方向\n */\n const alignElementToCanvas = (command: ElementAlignCommands) => {\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 slidesStore.updateSlide({ elements: newElementList })\n addHistorySnapshot()\n }\n\n return {\n alignElementToCanvas,\n }\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, createElementBlock as _createElementBlock, withDirectives as _withDirectives, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-288ee59d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ImageClipHandler = _resolveComponent(\"ImageClipHandler\")!\n const _component_ImageOutline = _resolveComponent(\"ImageOutline\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-image\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n (_ctx.isCliping)\n ? (_openBlock(), _createBlock(_component_ImageClipHandler, {\n key: 0,\n src: _ctx.elementInfo.src,\n clipData: _ctx.elementInfo.clip,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n top: _ctx.elementInfo.top,\n left: _ctx.elementInfo.left,\n rotate: _ctx.elementInfo.rotate,\n clipPath: _ctx.clipShape.style,\n onClip: _cache[0] || (_cache[0] = range => _ctx.handleClip(range))\n }, null, 8, [\"src\", \"clipData\", \"width\", \"height\", \"top\", \"left\", \"rotate\", \"clipPath\"]))\n : _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"element-content\",\n style: _normalizeStyle({\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n }),\n onMousedown: _cache[2] || (_cache[2] = $event => _ctx.handleSelectElement($event))\n }, [\n _createVNode(_component_ImageOutline, { elementInfo: _ctx.elementInfo }, null, 8, [\"elementInfo\"]),\n _createElementVNode(\"div\", {\n class: \"image-content\",\n style: _normalizeStyle({ clipPath: _ctx.clipShape.style })\n }, [\n _createElementVNode(\"img\", {\n src: _ctx.elementInfo.src,\n draggable: false,\n style: _normalizeStyle({\n top: _ctx.imgPosition.top,\n left: _ctx.imgPosition.left,\n width: _ctx.imgPosition.width,\n height: _ctx.imgPosition.height,\n filter: _ctx.filter,\n }),\n onDragstart: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"prevent\"])),\n alt: \"\"\n }, null, 44, _hoisted_1)\n ], 4)\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e9da1d6a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\"]\nconst _hoisted_2 = [\"src\"]\nconst _hoisted_3 = [\"onMousedown\"]\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"svg\", {\n width: \"16\",\n height: \"16\",\n fill: \"#fff\",\n stroke: \"#333\"\n}, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-width\": \"0.3\",\n \"shape-rendering\": \"crispEdges\",\n d: \"M 16 0 L 0 0 L 0 16 L 4 16 L 4 4 L 16 4 L 16 0 Z\"\n })\n], -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = [\"onMousedown\"]\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"svg\", {\n width: \"16\",\n height: \"16\",\n fill: \"#fff\",\n stroke: \"#333\"\n}, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-width\": \"0.3\",\n \"shape-rendering\": \"crispEdges\",\n d: \"M 16 0 L 0 0 L 0 4 L 16 4 Z\"\n })\n], -1))\nconst _hoisted_8 = [\n _hoisted_7\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"image-clip-handler\",\n style: _normalizeStyle(_ctx.clipWrapperPositionStyle)\n }, [\n _createElementVNode(\"img\", {\n class: \"bottom-img\",\n src: _ctx.src,\n draggable: false,\n alt: \"\",\n style: _normalizeStyle(_ctx.bottomImgPositionStyle)\n }, null, 12, _hoisted_1),\n _createElementVNode(\"div\", {\n class: \"top-image-content\",\n style: _normalizeStyle({\n ..._ctx.topImgWrapperPositionStyle,\n clipPath: _ctx.clipPath,\n })\n }, [\n _createElementVNode(\"img\", {\n class: \"top-img\",\n src: _ctx.src,\n draggable: false,\n alt: \"\",\n style: _normalizeStyle(_ctx.topImgPositionStyle)\n }, null, 12, _hoisted_2)\n ], 4),\n _createElementVNode(\"div\", {\n class: \"operate\",\n style: _normalizeStyle(_ctx.topImgWrapperPositionStyle),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers($event => _ctx.moveClipRange($event), [\"stop\"]))\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['left-top', 'right-top', 'left-bottom', 'right-bottom'], (point) => {\n return _createElementVNode(\"div\", {\n class: _normalizeClass(['clip-point', point, _ctx.rotateClassName]),\n key: point,\n onMousedown: _withModifiers($event => _ctx.scaleClipRange($event, point), [\"stop\"])\n }, _hoisted_5, 42, _hoisted_3)\n }), 64)),\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['top', 'bottom', 'left', 'right'], (point) => {\n return _createElementVNode(\"div\", {\n class: _normalizeClass(['clip-point', point, _ctx.rotateClassName]),\n key: point,\n onMousedown: _withModifiers($event => _ctx.scaleClipRange($event, point), [\"stop\"])\n }, _hoisted_8, 42, _hoisted_6)\n }), 64))\n ], 36)\n ], 4)), [\n [_directive_click_outside, _ctx.handleClip]\n ])\n}","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useKeyboardStore } from '@/store'\nimport { KEYS } from '@/configs/hotkey'\nimport { ImageClipData, ImageClipDataRange, ImageClipedEmitData, OperateResizeHandlers } from '@/types/edit'\n\nexport default defineComponent({\n name: 'image-clip-handler',\n emits: ['clip'],\n props: {\n src: {\n type: String,\n required: true,\n },\n clipData: {\n type: Object as PropType,\n },\n clipPath: {\n type: String,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n top: {\n type: Number,\n required: true,\n },\n left: {\n type: Number,\n required: true,\n },\n rotate: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const { canvasScale } = storeToRefs(useMainStore())\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const clipWrapperPositionStyle = ref({\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 = ref({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n })\n\n // 顶层图片容器位置大小样式(裁剪高亮区域)\n const topImgWrapperPositionStyle = computed(() => {\n const { top, left, width, height } = topImgWrapperPosition.value\n return {\n top: top + '%',\n left: left + '%',\n width: width + '%',\n height: height + '%',\n }\n })\n\n // 顶层图片位置大小样式(裁剪区域图片)\n const topImgPositionStyle = computed(() => {\n const bottomWidth = imgPosition.value.width\n const bottomHeight = imgPosition.value.height\n \n const { top, left, width, height } = topImgWrapperPosition.value\n \n return {\n left: -left * (100 / width) + '%',\n top: -top * (100 / height) + '%',\n width: bottomWidth / width * 100 + '%',\n height: bottomHeight / height * 100 + '%',\n }\n })\n\n // 初始化裁剪位置信息\n const initClipPosition = () => {\n const { left, top } = getClipDataTransformInfo()\n topImgWrapperPosition.value = {\n left: left,\n top: top,\n width: 100,\n height: 100,\n }\n \n clipWrapperPositionStyle.value = {\n top: -top + '%',\n left: -left + '%',\n }\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.value.left - left) / 100 * props.width,\n top: (topImgWrapperPosition.value.top - top) / 100 * props.height,\n width: (topImgWrapperPosition.value.width - 100) / 100 * props.width,\n height: (topImgWrapperPosition.value.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 = { ...topImgWrapperPosition.value }\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 (props.rotate > 45 && props.rotate < 135) {\n moveX = (currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = -(currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\n if ((props.rotate >= 135 && props.rotate <= 180) || (props.rotate >= -180 && props.rotate <= -135)) {\n moveX = -moveX\n moveY = -moveY\n }\n if (props.rotate > -135 && props.rotate < -45) {\n moveX = -(currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = (currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\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.value = {\n ...topImgWrapperPosition.value,\n left: targetLeft,\n top: targetTop,\n }\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: OperateResizeHandlers) => {\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 = { ...topImgWrapperPosition.value }\n\n const aspectRatio = topImgWrapperPosition.value.width / topImgWrapperPosition.value.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 (props.rotate > 45 && props.rotate < 135) {\n moveX = (currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = -(currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\n if ((props.rotate >= 135 && props.rotate <= 180) || (props.rotate >= -180 && props.rotate <= -135)) {\n moveX = -moveX\n moveY = -moveY\n }\n if (props.rotate > -135 && props.rotate < -45) {\n moveX = -(currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = (currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\n\n if (ctrlOrShiftKeyActive.value) {\n if (type === OperateResizeHandlers.RIGHT_BOTTOM || type === OperateResizeHandlers.LEFT_TOP) moveY = moveX / aspectRatio\n if (type === OperateResizeHandlers.LEFT_BOTTOM || type === OperateResizeHandlers.RIGHT_TOP) moveY = -moveX / aspectRatio\n }\n\n let targetLeft, targetTop, targetWidth, targetHeight\n\n if (type === OperateResizeHandlers.LEFT_TOP) {\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 === OperateResizeHandlers.RIGHT_TOP) {\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 === OperateResizeHandlers.LEFT_BOTTOM) {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else if (type === OperateResizeHandlers.RIGHT_BOTTOM) {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width + moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === OperateResizeHandlers.TOP) {\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top + moveY\n }\n else if (type === OperateResizeHandlers.BOTTOM) {\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === OperateResizeHandlers.LEFT) {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n targetHeight = originPositopn.height\n targetWidth = originPositopn.width + moveX\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n\n topImgWrapperPosition.value = {\n left: targetLeft,\n top: targetTop,\n width: targetWidth,\n height: targetHeight,\n }\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 const rotateClassName = computed(() => {\n const prefix = 'rotate-'\n const rotate = props.rotate\n if (rotate > -22.5 && rotate <= 22.5) return prefix + 0\n else if (rotate > 22.5 && rotate <= 67.5) return prefix + 45\n else if (rotate > 67.5 && rotate <= 112.5) return prefix + 90\n else if (rotate > 112.5 && rotate <= 157.5) return prefix + 135\n else if (rotate > 157.5 || rotate <= -157.5) return prefix + 0\n else if (rotate > -157.5 && rotate <= -112.5) return prefix + 45\n else if (rotate > -112.5 && rotate <= -67.5) return prefix + 90\n else if (rotate > -67.5 && rotate <= -22.5) return prefix + 135\n return prefix + 0\n })\n\n return {\n clipWrapperPositionStyle,\n bottomImgPositionStyle,\n topImgWrapperPositionStyle,\n topImgPositionStyle,\n rotateClassName,\n handleClip,\n moveClipRange,\n scaleClipRange,\n }\n },\n})\n","import { render } from \"./ImageClipHandler.vue?vue&type=template&id=e9da1d6a&scoped=true&ts=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=e9da1d6a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e9da1d6a\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { ImageElementClip, PPTImageElement } from '@/types/slides'\nimport { ImageClipedEmitData } from '@/types/edit'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useClipImage from './useClipImage'\nimport useFilter from './useFilter'\n\nimport ImageOutline from './ImageOutline/index.vue'\nimport ImageClipHandler from './ImageClipHandler.vue'\n\nexport default defineComponent({\n name: 'editable-element-image',\n components: {\n ImageOutline,\n ImageClipHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTImageElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { clipingImageElementId } = storeToRefs(mainStore)\n\n const isCliping = computed(() => clipingImageElementId.value === props.elementInfo.id)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const clip = computed(() => props.elementInfo.clip)\n const { clipShape, imgPosition } = useClipImage(clip)\n\n const filters = computed(() => props.elementInfo.filters)\n const { filter } = useFilter(filters)\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n props.selectElement(e, props.elementInfo)\n }\n\n const handleClip = (data: ImageClipedEmitData) => {\n mainStore.setClipingImageElementId('')\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 left = props.elementInfo.left + position.left\n const top = props.elementInfo.top + position.top\n const width = props.elementInfo.width + position.width\n const height = props.elementInfo.height + position.height\n\n let centerOffsetX = 0\n let centerOffsetY = 0\n\n if (props.elementInfo.rotate) {\n const centerX = (left + width / 2) - (props.elementInfo.left + props.elementInfo.width / 2)\n const centerY = -((top + height / 2) - (props.elementInfo.top + props.elementInfo.height / 2))\n\n const radian = -props.elementInfo.rotate * Math.PI / 180\n\n const rotatedCenterX = centerX * Math.cos(radian) - centerY * Math.sin(radian)\n const rotatedCenterY = centerX * Math.sin(radian) + centerY * Math.cos(radian)\n\n centerOffsetX = rotatedCenterX - centerX\n centerOffsetY = -(rotatedCenterY - centerY)\n }\n\n const _props = {\n clip: { ...originClip, range },\n left: left + centerOffsetX,\n top: top + centerOffsetY,\n width,\n height,\n }\n slidesStore.updateElement({ id: props.elementInfo.id, props: _props })\n \n addHistorySnapshot()\n }\n\n return {\n isCliping,\n handleClip,\n clipingImageElementId,\n shadowStyle,\n handleSelectElement,\n clipShape,\n imgPosition,\n filter,\n flipStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=288ee59d&scoped=true&ts=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=288ee59d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-288ee59d\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, withDirectives as _withDirectives, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d7761db4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"drag-handler top\" }, null, -1))\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"drag-handler bottom\" }, null, -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ProsemirrorEditor = _resolveComponent(\"ProsemirrorEditor\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-text\", { 'lock': _ctx.elementInfo.lock }]),\n ref: \"elementRef\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n backgroundColor: _ctx.elementInfo.fill,\n opacity: _ctx.elementInfo.opacity,\n textShadow: _ctx.shadowStyle,\n lineHeight: _ctx.elementInfo.lineHeight,\n letterSpacing: (_ctx.elementInfo.wordSpace || 0) + 'px',\n color: _ctx.elementInfo.defaultColor,\n fontFamily: _ctx.elementInfo.defaultFontName,\n }),\n onMousedown: _cache[2] || (_cache[2] = $event => _ctx.handleSelectElement($event))\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createVNode(_component_ProsemirrorEditor, {\n class: \"text\",\n elementId: _ctx.elementInfo.id,\n defaultColor: _ctx.elementInfo.defaultColor,\n defaultFontName: _ctx.elementInfo.defaultFontName,\n editable: !_ctx.elementInfo.lock,\n value: _ctx.elementInfo.content,\n onUpdate: _cache[0] || (_cache[0] = value => _ctx.updateContent(value)),\n onMousedown: _cache[1] || (_cache[1] = $event => _ctx.handleSelectElement($event, false))\n }, null, 8, [\"elementId\", \"defaultColor\", \"defaultFontName\", \"editable\", \"value\"]),\n _hoisted_1,\n _hoisted_2\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-481bb541\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"prosemirror-editor\",\n ref: \"editorViewRef\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, null, 512))\n}","import mitt, { Emitter } from 'mitt'\n\nexport const enum EmitterEvents {\n RICH_TEXT_COMMAND = 'RICH_TEXT_COMMAND',\n OPEN_CHART_DATA_EDITOR = 'OPEN_CHART_DATA_EDITOR',\n OPEN_LATEX_EDITOR = 'OPEN_LATEX_EDITOR',\n}\n\nexport interface RichTextCommand {\n command: string;\n value?: string;\n}\n\ntype Events = {\n [EmitterEvents.RICH_TEXT_COMMAND]: RichTextCommand | RichTextCommand[];\n [EmitterEvents.OPEN_CHART_DATA_EDITOR]: void;\n [EmitterEvents.OPEN_LATEX_EDITOR]: void;\n} \n\nconst emitter: Emitter = mitt()\n\nexport default emitter","import { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list'\nimport { Schema } from 'prosemirror-model'\nimport { undo, redo } from 'prosemirror-history'\nimport { undoInputRule } from 'prosemirror-inputrules'\nimport {\n toggleMark,\n selectParentNode,\n joinUp,\n joinDown,\n Command,\n} from 'prosemirror-commands'\n\nexport const buildKeymap = (schema: Schema) => {\n const keys = {}\n const bind = (key: string, cmd: Command) => keys[key] = cmd\n\n bind('Alt-ArrowUp', joinUp)\n bind('Alt-ArrowDown', joinDown)\n bind('Ctrl-z', undo)\n bind('Ctrl-y', redo)\n bind('Backspace', undoInputRule)\n bind('Escape', selectParentNode)\n bind('Ctrl-b', toggleMark(schema.marks.strong))\n bind('Ctrl-i', toggleMark(schema.marks.em))\n bind('Ctrl-u', toggleMark(schema.marks.underline))\n bind('Ctrl-d', toggleMark(schema.marks.strikethrough))\n\n bind('Enter', splitListItem(schema.nodes.list_item))\n bind('Mod-[', liftListItem(schema.nodes.list_item))\n bind('Mod-]', sinkListItem(schema.nodes.list_item))\n\n return keys\n}","import { NodeType, Schema } from 'prosemirror-model'\nimport {\n inputRules,\n wrappingInputRule,\n textblockTypeInputRule,\n smartQuotes,\n emDash,\n ellipsis,\n} from 'prosemirror-inputrules'\n\nconst blockQuoteRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*>\\s$/, nodeType)\n\nconst orderedListRule = (nodeType: NodeType) => (\n wrappingInputRule(\n /^(\\d+)\\.\\s$/, \n nodeType, \n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n )\n)\n\nconst bulletListRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)\n\nconst codeBlockRule = (nodeType: NodeType) => textblockTypeInputRule(/^```$/, nodeType)\n\nexport const buildInputRules = (schema: Schema) => {\n const rules = [\n ...smartQuotes,\n ellipsis,\n emDash,\n ]\n rules.push(blockQuoteRule(schema.nodes.blockquote))\n rules.push(orderedListRule(schema.nodes.ordered_list))\n rules.push(bulletListRule(schema.nodes.bullet_list))\n rules.push(codeBlockRule(schema.nodes.code_block))\n\n return inputRules({ rules })\n}","import { keymap } from 'prosemirror-keymap'\nimport { Schema } from 'prosemirror-model'\nimport { history } from 'prosemirror-history'\nimport { baseKeymap } from 'prosemirror-commands'\nimport { dropCursor } from 'prosemirror-dropcursor'\nimport { gapCursor } from 'prosemirror-gapcursor'\n\nimport { buildKeymap } from './keymap'\nimport { buildInputRules } from './inputrules'\n\nexport const buildPlugins = (schema: Schema) => {\n return [\n buildInputRules(schema),\n keymap(buildKeymap(schema)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n ]\n}","import { nodes } from 'prosemirror-schema-basic'\nimport { Node, NodeSpec } from 'prosemirror-model'\nimport { orderedList, bulletList, listItem } from 'prosemirror-schema-list'\n\nconst _orderedList: NodeSpec = {\n ...orderedList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _bulletList: NodeSpec = {\n ...bulletList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _listItem: NodeSpec = {\n ...listItem,\n content: 'paragraph block*',\n group: 'block',\n}\n\nconst paragraph: NodeSpec = {\n attrs: {\n align: {\n default: '',\n },\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: dom => {\n const { textAlign } = (dom as HTMLElement).style\n let align = (dom as HTMLElement).getAttribute('align') || textAlign || ''\n align = /(left|right|center|justify)/.test(align) ? align : ''\n \n return { align }\n }\n }\n ],\n toDOM: (node: Node) => {\n const { align } = node.attrs\n let style = ''\n if (align && align !== 'left') style += `text-align: ${align};`\n\n return ['p', { style }, 0]\n },\n}\n\nexport default {\n ...nodes,\n 'ordered_list': _orderedList,\n 'bullet_list': _bulletList,\n 'list_item': _listItem,\n paragraph,\n}\n","import { marks } from 'prosemirror-schema-basic'\nimport { MarkSpec } from 'prosemirror-model'\n\nconst subscript: MarkSpec = {\n excludes: 'subscript',\n parseDOM: [\n { tag: 'sub' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'sub' && null\n },\n ],\n toDOM: () => ['sub', 0],\n}\n\nconst superscript: MarkSpec = {\n excludes: 'superscript',\n parseDOM: [\n { tag: 'sup' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'super' && null\n },\n ],\n toDOM: () => ['sup', 0],\n}\n\nconst strikethrough: MarkSpec = {\n parseDOM: [\n { tag: 'strike' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'line-through' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'line-through' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration-line: line-through' }, 0],\n}\n\nconst underline: MarkSpec = {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'underline' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'underline' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration: underline' }, 0],\n}\n\nconst forecolor: MarkSpec = {\n attrs: {\n color: {},\n },\n inline: true,\n group: 'inline',\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 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\nconst link: MarkSpec = {\n attrs: {\n href: {},\n title: { default: null },\n target: { default: '_blank' },\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: dom => {\n const href = (dom as HTMLElement).getAttribute('href')\n const title = (dom as HTMLElement).getAttribute('title')\n return { href, title }\n }\n },\n ],\n toDOM: node => ['a', node.attrs, 0],\n}\n\nexport default {\n ...marks,\n subscript,\n superscript,\n strikethrough,\n underline,\n forecolor,\n backcolor,\n fontsize,\n fontname,\n link,\n}","import nodes from './nodes'\nimport marks from './marks'\n\nexport const schemaNodes = nodes\nexport const schemaMarks = marks\n","import { EditorState } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\nimport { Schema, DOMParser } from 'prosemirror-model'\n\nimport { buildPlugins } from './plugins/index'\nimport { schemaNodes, schemaMarks } from './schema/index'\n\nconst schema = new Schema({\n nodes: schemaNodes,\n marks: schemaMarks,\n})\n\nexport const createDocument = (content: string) => {\n const htmlString = `
${content}
`\n const parser = new window.DOMParser()\n const element = parser.parseFromString(htmlString, 'text/html').body.firstElementChild\n return DOMParser.fromSchema(schema).parse(element as Element)\n}\n\nexport const initProsemirrorEditor = (dom: Element, content: string, props = {}) => {\n return new EditorView(dom, {\n state: EditorState.create({\n doc: createDocument(content),\n plugins: buildPlugins(schema),\n }),\n ...props,\n })\n}","import { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\n\nexport const setTextAlign = (tr: Transaction, schema: Schema, alignment: string) => {\n const { selection, doc } = tr\n if (!selection || !doc) return tr\n\n const { from, to } = selection\n const { nodes } = schema\n\n const blockquote = nodes.blockquote\n const listItem = nodes.list_item\n const paragraph = nodes.paragraph\n\n interface Task {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }\n\n const tasks: Task[] = []\n alignment = alignment || ''\n\n const allowedNodeTypes = new Set([blockquote, listItem, paragraph])\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type\n const align = node.attrs.align || ''\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n })\n }\n return true\n })\n\n if (!tasks.length) return tr\n\n tasks.forEach(task => {\n const { node, pos, nodeType } = task\n let { attrs } = node\n if (alignment) attrs = { ...attrs, align: alignment }\n else attrs = { ...attrs, align: null }\n tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks)\n })\n\n return tr\n}\n\nexport const alignmentCommand = (view: EditorView, alignment: string) => {\n const { state } = view\n const { schema, selection } = state\n const tr = setTextAlign(\n state.tr.setSelection(selection),\n schema,\n alignment,\n )\n view.dispatch(tr)\n}","import { wrapInList, liftListItem } from 'prosemirror-schema-list'\nimport { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction, EditorState } from 'prosemirror-state'\nimport { findParentNode } from '../utils'\n\nconst isList = (node: Node, schema: Schema) => {\n return (\n node.type === schema.nodes.bullet_list ||\n node.type === schema.nodes.ordered_list\n )\n}\n\nexport const toggleList = (listType: NodeType, itemType: NodeType) => {\n return (state: EditorState, dispatch: (tr: Transaction) => void) => {\n const { schema, selection } = state\n const { $from, $to } = selection\n const range = $from.blockRange($to)\n\n if (!range) return false\n\n const parentList = findParentNode((node: Node) => isList(node, schema))(selection)\n\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (parentList.node.type === listType) {\n return liftListItem(itemType)(state, dispatch)\n }\n\n if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {\n const { tr } = state\n tr.setNodeMarkup(parentList.pos, listType)\n\n if (dispatch) dispatch(tr)\n\n return false\n }\n }\n\n return wrapInList(listType)(state, dispatch)\n }\n}\n","\nimport { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { debounce } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { EditorView } from 'prosemirror-view'\nimport { toggleMark, wrapIn, selectAll } from 'prosemirror-commands'\nimport { initProsemirrorEditor, createDocument } from '@/utils/prosemirror'\nimport { findNodesWithSameMark, getTextAttrs, autoSelectAll, addMark, markActive } from '@/utils/prosemirror/utils'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { alignmentCommand } from '@/utils/prosemirror/commands/setTextAlign'\nimport { toggleList } from '@/utils/prosemirror/commands/toggleList'\n\nexport default defineComponent({\n name: 'prosemirror-editor',\n emits: ['update', 'focus', 'blur'],\n props: {\n elementId: {\n type: String,\n required: true,\n },\n defaultColor: {\n type: String,\n required: true,\n },\n defaultFontName: {\n type: String,\n required: true,\n },\n editable: {\n type: Boolean,\n default: false,\n },\n value: {\n type: String,\n required: true,\n },\n autoFocus: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { emit }) {\n const mainStore = useMainStore()\n const { handleElementId } = storeToRefs(mainStore)\n\n const editorViewRef = ref()\n let editorView: EditorView\n\n // 富文本的各种交互事件监听:\n // 聚焦时取消全局快捷键事件\n // 输入文字时同步数据到vuex\n // 点击鼠标和键盘时同步富文本状态到工具栏\n const handleInput = debounce(function() {\n emit('update', editorView.dom.innerHTML)\n }, 300, { trailing: true })\n\n const handleFocus = () => {\n if (props.value === '请输入内容') {\n setTimeout(() => {\n selectAll(editorView.state, editorView.dispatch)\n }, 100)\n }\n mainStore.setDisableHotkeysState(true)\n emit('focus')\n }\n\n const handleBlur = () => {\n mainStore.setDisableHotkeysState(false)\n emit('blur')\n }\n\n const handleClick = debounce(function() {\n const attrs = getTextAttrs(editorView, {\n color: props.defaultColor,\n fontname: props.defaultFontName,\n })\n mainStore.setRichtextAttrs(attrs)\n }, 30, { trailing: true })\n\n const handleKeydown = () => {\n handleInput()\n handleClick()\n }\n\n // 将富文本内容同步到DOM\n const textContent = computed(() => props.value)\n watch(textContent, () => {\n if (!editorView) return\n if (editorView.hasFocus()) return\n\n const { doc, tr } = editorView.state\n editorView.dispatch(tr.replaceRangeWith(0, doc.content.size, createDocument(textContent.value)))\n })\n\n // 打开/关闭编辑器的编辑模式\n watch(() => props.editable, () => {\n editorView.setProps({ editable: () => props.editable })\n })\n\n // Prosemirror编辑器的初始化和卸载\n onMounted(() => {\n editorView = initProsemirrorEditor((editorViewRef.value as Element), textContent.value, {\n handleDOMEvents: {\n focus: handleFocus,\n blur: handleBlur,\n keydown: handleKeydown,\n click: handleClick,\n },\n editable: () => props.editable,\n })\n if (props.autoFocus) editorView.focus()\n })\n onUnmounted(() => {\n editorView && editorView.destroy()\n })\n \n // 执行富文本命令(可以是一个或多个)\n // 部分命令在执行前先判断当前选区是否为空,如果选区为空先进行全选操作\n const execCommand = (payload: RichTextCommand | RichTextCommand[]) => {\n if (handleElementId.value !== props.elementId) return\n\n const commands = ('command' in payload) ? [payload] : payload\n\n for (const item of commands) {\n if (item.command === 'fontname' && item.value) {\n const mark = editorView.state.schema.marks.fontname.create({ fontname: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'fontsize' && item.value) {\n const mark = editorView.state.schema.marks.fontsize.create({ fontsize: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'color' && item.value) {\n const mark = editorView.state.schema.marks.forecolor.create({ color: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'backcolor' && item.value) {\n const mark = editorView.state.schema.marks.backcolor.create({ backcolor: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'bold') {\n autoSelectAll(editorView)\n toggleMark(editorView.state.schema.marks.strong)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'em') {\n autoSelectAll(editorView)\n toggleMark(editorView.state.schema.marks.em)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'underline') {\n autoSelectAll(editorView)\n toggleMark(editorView.state.schema.marks.underline)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'strikethrough') {\n autoSelectAll(editorView)\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 autoSelectAll(editorView)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.removeMark($from.pos, $to.pos))\n }\n else if (item.command === 'link') {\n const markType = editorView.state.schema.marks.link\n const { from, to } = editorView.state.selection\n const result = findNodesWithSameMark(editorView.state.doc, from, to, markType)\n if (result) {\n if (item.value) {\n const mark = editorView.state.schema.marks.link.create({ href: item.value, title: item.value })\n addMark(editorView, mark, { from: result.from.pos, to: result.to.pos + 1 })\n }\n else editorView.dispatch(editorView.state.tr.removeMark(result.from.pos, result.to.pos + 1, markType))\n }\n else if (markActive(editorView.state, markType)) {\n if (item.value) {\n const mark = editorView.state.schema.marks.link.create({ href: item.value, title: item.value })\n addMark(editorView, mark)\n }\n else toggleMark(markType)(editorView.state, editorView.dispatch)\n }\n else if (item.value) {\n autoSelectAll(editorView)\n toggleMark(markType, { href: item.value, title: item.value })(editorView.state, editorView.dispatch)\n }\n }\n else if (item.command === 'insert' && item.value) {\n editorView.dispatch(editorView.state.tr.insertText(item.value))\n }\n }\n\n editorView.focus()\n handleInput()\n handleClick()\n }\n\n emitter.on(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n onUnmounted(() => {\n emitter.off(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n })\n\n return {\n editorViewRef,\n }\n },\n})\n","import { render } from \"./ProsemirrorEditor.vue?vue&type=template&id=481bb541&scoped=true&ts=true\"\nimport script from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ProsemirrorEditor.vue?vue&type=style&index=0&id=481bb541&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-481bb541\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-text',\n components: {\n ElementOutline,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTextElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElementId, isScaling } = storeToRefs(mainStore)\n \n const { addHistorySnapshot } = useHistorySnapshot()\n\n const elementRef = ref()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const handleSelectElement = (e: MouseEvent, canMove = true) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo, canMove)\n }\n\n // 监听文本元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTextElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { height: realHeight },\n })\n }\n else realHeightCache.value = realHeight\n }\n }\n const resizeObserver = new ResizeObserver(updateTextElementHeight)\n\n onMounted(() => {\n if (elementRef.value) resizeObserver.observe(elementRef.value)\n })\n onUnmounted(() => {\n if (elementRef.value) resizeObserver.unobserve(elementRef.value)\n })\n\n const updateContent = (content: string) => {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { content },\n })\n \n addHistorySnapshot()\n }\n\n return {\n elementRef,\n shadowStyle,\n updateContent,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=d7761db4&scoped=true&ts=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=d7761db4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d7761db4\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, withModifiers as _withModifiers, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bd9c8dc2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = [\"transform\"]\nconst _hoisted_4 = [\"d\", \"fill\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\nconst _hoisted_5 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GradientDefs = _resolveComponent(\"GradientDefs\")!\n const _component_ProsemirrorEditor = _resolveComponent(\"ProsemirrorEditor\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-shape\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n opacity: _ctx.elementInfo.opacity,\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n color: _ctx.text.defaultColor,\n fontFamily: _ctx.text.defaultFontName,\n }),\n onMousedown: _cache[2] || (_cache[2] = $event => _ctx.handleSelectElement($event)),\n onDblclick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.enterEditing()))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height\n }, [\n (_ctx.elementInfo.gradient)\n ? (_openBlock(), _createElementBlock(\"defs\", _hoisted_2, [\n _createVNode(_component_GradientDefs, {\n id: `editabel-gradient-${_ctx.elementInfo.id}`,\n type: _ctx.elementInfo.gradient.type,\n color1: _ctx.elementInfo.gradient.color[0],\n color2: _ctx.elementInfo.gradient.color[1],\n rotate: _ctx.elementInfo.gradient.rotate\n }, null, 8, [\"id\", \"type\", \"color1\", \"color2\", \"rotate\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n class: \"shape-path\",\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n d: _ctx.elementInfo.path,\n fill: _ctx.elementInfo.gradient ? `url(#editabel-gradient-${_ctx.elementInfo.id})` : _ctx.elementInfo.fill,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_3)\n ], 8, _hoisted_1)),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"shape-text\", [_ctx.text.align, { 'editable': _ctx.editable }]])\n }, [\n (_ctx.editable)\n ? (_openBlock(), _createBlock(_component_ProsemirrorEditor, {\n key: 0,\n elementId: _ctx.elementInfo.id,\n defaultColor: _ctx.text.defaultColor,\n defaultFontName: _ctx.text.defaultFontName,\n editable: !_ctx.elementInfo.lock,\n autoFocus: true,\n value: _ctx.text.content,\n onUpdate: _cache[0] || (_cache[0] = value => _ctx.updateText(value)),\n onMousedown: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"elementId\", \"defaultColor\", \"defaultFontName\", \"editable\", \"value\"]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"show-text ProseMirror-static\",\n innerHTML: _ctx.text.content\n }, null, 8, _hoisted_5))\n ], 2)\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport GradientDefs from './GradientDefs.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n GradientDefs,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElementId } = storeToRefs(mainStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const editable = ref(false)\n\n const enterEditing = () => {\n editable.value = true\n mainStore.setEditingShapeElementId(props.elementInfo.id)\n }\n\n const exitEditing = () => {\n editable.value = false\n mainStore.setEditingShapeElementId('')\n }\n \n watch(handleElementId, () => {\n if (handleElementId.value !== props.elementInfo.id) {\n if (editable.value) exitEditing()\n }\n })\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n const updateText = (content: string) => {\n const _text = { ...text.value, content }\n slidesStore.updateElement({\n id: props.elementInfo.id, \n props: { text: _text },\n })\n \n addHistorySnapshot()\n }\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n editable,\n text,\n handleSelectElement,\n updateText,\n enterEditing,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=bd9c8dc2&scoped=true&ts=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=bd9c8dc2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bd9c8dc2\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-603a705d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\", \"marker-start\", \"marker-end\"]\nconst _hoisted_3 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinePointMarker = _resolveComponent(\"LinePointMarker\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-shape\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({ filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '' }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.svgWidth,\n height: _ctx.svgHeight\n }, [\n _createElementVNode(\"defs\", null, [\n (_ctx.elementInfo.points[0])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 0,\n id: _ctx.elementInfo.id,\n position: \"start\",\n type: _ctx.elementInfo.points[0],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.elementInfo.points[1])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 1,\n id: _ctx.elementInfo.id,\n position: \"end\",\n type: _ctx.elementInfo.points[1],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"path\", {\n class: \"line-point\",\n d: _ctx.path,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.width,\n \"stroke-dasharray\": _ctx.lineDashArray,\n fill: \"none\",\n \"stroke-linecap\": \"\",\n \"stroke-linejoin\": \"\",\n \"stroke-miterlimit\": \"\",\n \"marker-start\": _ctx.elementInfo.points[0] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[0]}-start)` : '',\n \"marker-end\": _ctx.elementInfo.points[1] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[1]}-end)` : ''\n }, null, 8, _hoisted_2),\n _withDirectives(_createElementVNode(\"path\", {\n class: \"line-path\",\n d: _ctx.path,\n stroke: \"transparent\",\n \"stroke-width\": \"20\",\n fill: \"none\"\n }, null, 8, _hoisted_3), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 8, _hoisted_1))\n ], 36)\n ], 6))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10 6' : '0 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n handleSelectElement,\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=603a705d&scoped=true&ts=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=603a705d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-603a705d\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, withDirectives as _withDirectives, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_Chart = _resolveComponent(\"Chart\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-chart\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\r\n top: _ctx.elementInfo.top + 'px',\r\n left: _ctx.elementInfo.left + 'px',\r\n width: _ctx.elementInfo.width + 'px',\r\n height: _ctx.elementInfo.height + 'px',\r\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\r\n backgroundColor: _ctx.elementInfo.fill,\r\n }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event)),\n onDblclick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.openDataEditor()))\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createVNode(_component_Chart, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n type: _ctx.elementInfo.chartType,\n data: _ctx.elementInfo.data,\n options: _ctx.elementInfo.options,\n themeColor: _ctx.elementInfo.themeColor,\n gridColor: _ctx.elementInfo.gridColor,\n legends: _ctx.elementInfo.data.legends,\n legend: _ctx.elementInfo.legend || ''\n }, null, 8, [\"width\", \"height\", \"type\", \"data\", \"options\", \"themeColor\", \"gridColor\", \"legends\", \"legend\"])\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","\r\nimport { defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\r\nimport emitter, { EmitterEvents } from '@/utils/emitter'\r\n\r\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\r\nimport Chart from './Chart.vue'\r\n\r\nexport default defineComponent({\r\n name: 'editable-element-chart',\r\n components: {\r\n ElementOutline,\r\n Chart,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n selectElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTChartElement, canMove?: boolean) => void>,\r\n required: true,\r\n },\r\n contextmenus: {\r\n type: Function as PropType<() => ContextmenuItem[]>,\r\n },\r\n },\r\n setup(props) {\r\n const handleSelectElement = (e: MouseEvent) => {\r\n if (props.elementInfo.lock) return\r\n e.stopPropagation()\r\n\r\n props.selectElement(e, props.elementInfo)\r\n }\r\n\r\n const openDataEditor = () => {\r\n emitter.emit(EmitterEvents.OPEN_CHART_DATA_EDITOR)\r\n }\r\n\r\n return {\r\n handleSelectElement,\r\n openDataEditor,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=c09631b6&scoped=true&ts=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=c09631b6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c09631b6\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, withModifiers as _withModifiers, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-426704b7\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_EditableTable = _resolveComponent(\"EditableTable\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-table\", { 'lock': _ctx.elementInfo.lock }]),\n ref: \"elementRef\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_EditableTable, {\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"])),\n data: _ctx.elementInfo.data,\n width: _ctx.elementInfo.width,\n colWidths: _ctx.elementInfo.colWidths,\n outline: _ctx.elementInfo.outline,\n theme: _ctx.elementInfo.theme,\n editable: _ctx.editable,\n onChange: _cache[1] || (_cache[1] = data => _ctx.updateTableCells(data)),\n onChangeColWidths: _cache[2] || (_cache[2] = widths => _ctx.updateColWidths(widths)),\n onChangeSelectedCells: _cache[3] || (_cache[3] = cells => _ctx.updateSelectedCells(cells))\n }, null, 8, [\"data\", \"width\", \"colWidths\", \"outline\", \"theme\", \"editable\"]),\n (!_ctx.editable || _ctx.elementInfo.lock)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"table-mask\", { 'lock': _ctx.elementInfo.lock }]),\n onDblclick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.startEdit())),\n onMousedown: _cache[5] || (_cache[5] = $event => _ctx.handleSelectElement($event))\n }, [\n _createElementVNode(\"div\", {\n class: \"mask-tip\",\n style: _normalizeStyle({ transform: `scale(${ 1 / _ctx.canvasScale })` })\n }, \"双击编辑\", 4)\n ], 34))\n : _createCommentVNode(\"\", true)\n ])), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createBlock as _createBlock, vShow as _vShow, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-c0c56b6e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"handler\"\n}\nconst _hoisted_2 = [\"onMousedown\"]\nconst _hoisted_3 = [\"width\"]\nconst _hoisted_4 = [\"rowspan\", \"colspan\", \"data-cell-index\", \"onMousedown\", \"onMouseenter\"]\nconst _hoisted_5 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CustomTextarea = _resolveComponent(\"CustomTextarea\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"editable-table\",\n style: _normalizeStyle({ width: _ctx.totalWidth + 'px' })\n }, [\n (_ctx.editable)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.dragLinePosition, (pos, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"drag-line\",\n key: index,\n style: _normalizeStyle({ left: pos + 'px' }),\n onMousedown: $event => _ctx.handleMousedownColHandler($event, index)\n }, null, 44, _hoisted_2))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"table\", {\n class: _normalizeClass({\n 'theme': _ctx.theme,\n 'row-header': _ctx.theme?.rowHeader,\n 'row-footer': _ctx.theme?.rowFooter,\n 'col-header': _ctx.theme?.colHeader,\n 'col-footer': _ctx.theme?.colFooter,\n }),\n style: _normalizeStyle(`--themeColor: ${_ctx.theme?.color}; --subThemeColor1: ${_ctx.subThemeColor[0]}; --subThemeColor2: ${_ctx.subThemeColor[1]}`)\n }, [\n _createElementVNode(\"colgroup\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.colSizeList, (width, index) => {\n return (_openBlock(), _createElementBlock(\"col\", {\n span: \"1\",\n key: index,\n width: width\n }, null, 8, _hoisted_3))\n }), 128))\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tableCells, (rowCells, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"tr\", { key: rowIndex }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rowCells, (cell, colIndex) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"td\", {\n class: _normalizeClass([\"cell\", {\n 'selected': _ctx.selectedCells.includes(`${rowIndex}_${colIndex}`) && _ctx.selectedCells.length > 1,\n 'active': _ctx.activedCell === `${rowIndex}_${colIndex}`,\n }]),\n style: _normalizeStyle({\n borderStyle: _ctx.outline.style,\n borderColor: _ctx.outline.color,\n borderWidth: _ctx.outline.width + 'px',\n ..._ctx.getTextStyle(cell.style),\n }),\n key: cell.id,\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n \"data-cell-index\": `${rowIndex}_${colIndex}`,\n onMousedown: $event => _ctx.handleCellMousedown($event, rowIndex, colIndex),\n onMouseenter: ($event: any) => (_ctx.handleCellMouseenter(rowIndex, colIndex))\n }, [\n (_ctx.activedCell === `${rowIndex}_${colIndex}`)\n ? (_openBlock(), _createBlock(_component_CustomTextarea, {\n key: 0,\n class: _normalizeClass([\"cell-text\", { 'active': _ctx.activedCell === `${rowIndex}_${colIndex}` }]),\n contenteditable: \"plaintext-only\",\n value: cell.text,\n onUpdateValue: value => _ctx.handleInput(value, rowIndex, colIndex),\n onInsertExcelData: value => _ctx.insertExcelData(value, rowIndex, colIndex)\n }, null, 8, [\"class\", \"value\", \"onUpdateValue\", \"onInsertExcelData\"]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"cell-text\",\n innerHTML: _ctx.formatText(cell.text)\n }, null, 8, _hoisted_5))\n ], 46, _hoisted_4)), [\n [_vShow, !_ctx.hideCells.includes(`${rowIndex}_${colIndex}`)],\n [_directive_contextmenu, el => _ctx.contextmenus(el)]\n ])\n }), 128))\n ]))\n }), 128))\n ])\n ], 6)\n ], 4))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-59f468e0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"contenteditable\", \"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"custom-textarea\",\n ref: \"textareaRef\",\n contenteditable: _ctx.contenteditable,\n onFocus: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.handleFocus && _ctx.handleFocus(...args))),\n onBlur: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.handleBlur && _ctx.handleBlur(...args))),\n onInput: _cache[2] || (_cache[2] = $event => _ctx.handleInput($event)),\n innerHTML: _ctx.text\n }, null, 40, _hoisted_1))\n}","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { pasteCustomClipboardString, pasteExcelClipboardString } from '@/utils/clipboard'\n\nexport default defineComponent({\n name: 'custom-textarea',\n emits: ['updateValue', 'insertExcelData'],\n props: {\n value: {\n type: String,\n default: '',\n },\n contenteditable: {\n type: [Boolean, String],\n default: false,\n },\n },\n setup(props, { emit }) {\n const textareaRef = ref()\n const text = ref('')\n const isFocus = ref(false)\n\n // 自定义v-modal,同步数据\n // 当文本框聚焦时,不执行数据同步\n watch(() => props.value, () => {\n if (isFocus.value) return\n text.value = props.value\n if (textareaRef.value) textareaRef.value.innerHTML = props.value\n }, { immediate: true })\n\n const handleInput = () => {\n if (!textareaRef.value) return\n const text = textareaRef.value.innerHTML\n emit('updateValue', text)\n }\n\n // 聚焦时更新焦点标记,并监听粘贴事件\n const handleFocus = () => {\n isFocus.value = true\n\n if (!textareaRef.value) return\n textareaRef.value.onpaste = (e: ClipboardEvent) => {\n e.preventDefault()\n if (!e.clipboardData) return\n\n const clipboardDataFirstItem = e.clipboardData.items[0]\n\n if (clipboardDataFirstItem && clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => {\n const clipboardData = pasteCustomClipboardString(text)\n if (typeof clipboardData === 'object') return\n \n const excelData = pasteExcelClipboardString(text)\n if (excelData) {\n emit('insertExcelData', excelData)\n if (textareaRef.value) textareaRef.value.innerHTML = excelData[0][0]\n return\n }\n\n emit('updateValue', text)\n document.execCommand('insertText', false, text)\n })\n }\n }\n }\n\n // 失焦时更新焦点标记,清除粘贴事件监听\n const handleBlur = () => {\n isFocus.value = false\n if (textareaRef.value) textareaRef.value.onpaste = null\n }\n\n // 清除粘贴事件监听\n onUnmounted(() => {\n if (textareaRef.value) textareaRef.value.onpaste = null\n })\n\n return {\n textareaRef,\n handleFocus,\n handleInput,\n handleBlur,\n text,\n }\n },\n})\n","import { render } from \"./CustomTextarea.vue?vue&type=template&id=59f468e0&scoped=true&ts=true\"\nimport script from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\nexport * from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\n\nimport \"./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-59f468e0\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { debounce, isEqual } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { KEYS } from '@/configs/hotkey'\nimport { createRandomCode } from '@/utils/common'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nimport CustomTextarea from './CustomTextarea.vue'\n\nexport default defineComponent({\n name: 'editable-table',\n emits: ['change', 'changeColWidths', 'changeSelectedCells'],\n components: {\n CustomTextarea,\n },\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { emit }) {\n const { canvasScale } = storeToRefs(useMainStore())\n \n const isStartSelect = ref(false)\n const startCell = ref([])\n const endCell = ref([])\n\n const tableCells = computed({\n get() {\n return props.data\n },\n set(newData) {\n emit('change', newData)\n },\n })\n\n // 主题辅助色\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n // 计算表格每一列的列宽和总宽度\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n \n // 清除全部单元格的选中状态\n // 表格处于不可编辑状态时也需要清除\n const removeSelectedCells = () => {\n startCell.value = []\n endCell.value = []\n }\n\n watch(() => props.editable, () => {\n if (!props.editable) removeSelectedCells()\n })\n\n // 用于拖拽列宽的操作节点位置\n const dragLinePosition = computed(() => {\n const dragLinePosition: number[] = []\n for (let i = 1; i < colSizeList.value.length + 1; i++) {\n const pos = colSizeList.value.slice(0, i).reduce((a, b) => (a + b))\n dragLinePosition.push(pos)\n }\n return dragLinePosition\n })\n\n // 无效的单元格位置(被合并的单元格位置)集合\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n // 当前选中的单元格集合\n const selectedCells = computed(() => {\n if (!startCell.value.length) return []\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return [`${startX}_${startY}`]\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return [`${startX}_${startY}`]\n\n const selectedCells = []\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n for (let j = 0; j < rowCells.length; j++) {\n if (i >= minX && i <= maxX && j >= minY && j <= maxY) selectedCells.push(`${i}_${j}`)\n }\n }\n return selectedCells\n })\n\n watch(selectedCells, (value, oldValue) => {\n if (isEqual(value, oldValue)) return\n emit('changeSelectedCells', selectedCells.value)\n })\n\n // 当前激活的单元格:当且仅当只有一个选中单元格时,该单元格为激活的单元格\n const activedCell = computed(() => {\n if (selectedCells.value.length > 1) return null\n return selectedCells.value[0]\n })\n\n // 当前选中的单元格位置范围\n const selectedRange = computed(() => {\n if (!startCell.value.length) return null\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return { row: [startX, startX], col: [startY, startY] }\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return { row: [startX, startX], col: [startY, startY] }\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n return {\n row: [minX, maxX],\n col: [minY, maxY],\n }\n })\n\n // 设置选中单元格状态(鼠标点击或拖选)\n const handleMouseup = () => isStartSelect.value = false\n\n const handleCellMousedown = (e: MouseEvent, rowIndex: number, colIndex: number) => {\n if (e.button === 0) {\n endCell.value = []\n isStartSelect.value = true\n startCell.value = [rowIndex, colIndex]\n }\n }\n\n const handleCellMouseenter = (rowIndex: number, colIndex: number) => {\n if (!isStartSelect.value) return\n endCell.value = [rowIndex, colIndex]\n }\n\n onMounted(() => {\n document.addEventListener('mouseup', handleMouseup)\n })\n onUnmounted(() => {\n document.removeEventListener('mouseup', handleMouseup)\n })\n\n // 判断某位置是否为无效单元格(被合并掉的位置)\n const isHideCell = (rowIndex: number, colIndex: number) => hideCells.value.includes(`${rowIndex}_${colIndex}`)\n\n // 选中指定的列\n const selectCol = (index: number) => {\n const maxRow = tableCells.value.length - 1\n startCell.value = [0, index]\n endCell.value = [maxRow, index]\n }\n\n // 选中指定的行\n const selectRow = (index: number) => {\n const maxCol = tableCells.value[index].length - 1\n startCell.value = [index, 0]\n endCell.value = [index, maxCol]\n }\n\n // 选中全部单元格\n const selectAll = () => {\n const maxRow = tableCells.value.length - 1\n const maxCol = tableCells.value[maxRow].length - 1\n startCell.value = [0, 0]\n endCell.value = [maxRow, maxCol]\n }\n\n // 删除一行\n const deleteRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const targetCells = tableCells.value[rowIndex]\n const hideCellsPos = []\n for (let i = 0; i < targetCells.length; i++) {\n if (isHideCell(rowIndex, i)) hideCellsPos.push(i)\n }\n \n for (const pos of hideCellsPos) {\n for (let i = rowIndex; i >= 0; i--) {\n if (!isHideCell(i, pos)) {\n _tableCells[i][pos].rowspan = _tableCells[i][pos].rowspan - 1\n break\n }\n }\n }\n\n _tableCells.splice(rowIndex, 1)\n tableCells.value = _tableCells\n }\n\n // 删除一列\n const deleteCol = (colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const hideCellsPos = []\n for (let i = 0; i < tableCells.value.length; i++) {\n if (isHideCell(i, colIndex)) hideCellsPos.push(i)\n }\n\n for (const pos of hideCellsPos) {\n for (let i = colIndex; i >= 0; i--) {\n if (!isHideCell(pos, i)) {\n _tableCells[pos][i].colspan = _tableCells[pos][i].colspan - 1\n break\n }\n }\n }\n\n tableCells.value = _tableCells.map(item => {\n item.splice(colIndex, 1)\n return item\n })\n colSizeList.value.splice(colIndex, 1)\n emit('changeColWidths', colSizeList.value)\n }\n \n // 插入一行\n const insertRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const rowCells: TableCell[] = []\n for (let i = 0; i < _tableCells[0].length; i++) {\n rowCells.push({\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n })\n }\n\n _tableCells.splice(rowIndex, 0, rowCells)\n tableCells.value = _tableCells\n }\n\n // 插入一列\n const insertCol = (colIndex: number) => {\n tableCells.value = tableCells.value.map(item => {\n const cell = {\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n }\n item.splice(colIndex, 0, cell)\n return item\n })\n colSizeList.value.splice(colIndex, 0, 100)\n emit('changeColWidths', colSizeList.value)\n }\n\n // 填充指定的行/列数\n const fillTable = (rowCount: number, colCount: number) => {\n let _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n const defaultCell = { colspan: 1, rowspan: 1, text: '' }\n \n if (rowCount) {\n const newRows = []\n for (let i = 0; i < rowCount; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < _tableCells[0].length; j++) {\n rowCells.push({\n ...defaultCell,\n id: createRandomCode(),\n })\n }\n newRows.push(rowCells)\n }\n _tableCells = [..._tableCells, ...newRows]\n }\n if (colCount) {\n _tableCells = _tableCells.map(item => {\n const cells: TableCell[] = []\n for (let i = 0; i < colCount; i++) {\n const cell = {\n ...defaultCell,\n id: createRandomCode(),\n }\n cells.push(cell)\n }\n return [...item, ...cells]\n })\n colSizeList.value = [...colSizeList.value, ...new Array(colCount).fill(100)]\n emit('changeColWidths', colSizeList.value)\n }\n\n tableCells.value = _tableCells\n }\n \n // 合并单元格\n const mergeCells = () => {\n const [startX, startY] = startCell.value\n const [endX, endY] = endCell.value\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n \n _tableCells[minX][minY].rowspan = maxX - minX + 1\n _tableCells[minX][minY].colspan = maxY - minY + 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 拆分单元格\n const splitCells = (rowIndex: number, colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n _tableCells[rowIndex][colIndex].rowspan = 1\n _tableCells[rowIndex][colIndex].colspan = 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 鼠标拖拽调整列宽\n const handleMousedownColHandler = (e: MouseEvent, colIndex: number) => {\n removeSelectedCells()\n let isMouseDown = true\n\n const originWidth = colSizeList.value[colIndex]\n const startPageX = e.pageX\n\n const minWidth = 50\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n const moveX = (e.pageX - startPageX) / canvasScale.value\n const width = originWidth + moveX < minWidth ? minWidth : Math.round(originWidth + moveX)\n\n colSizeList.value[colIndex] = width\n }\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n emit('changeColWidths', colSizeList.value)\n }\n }\n\n // 清空选中单元格内的文字\n const clearSelectedCellText = () => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n for (let i = 0; i < _tableCells.length; i++) {\n for (let j = 0; j < _tableCells[i].length; j++) {\n if (selectedCells.value.includes(`${i}_${j}`)) {\n _tableCells[i][j].text = ''\n }\n }\n }\n tableCells.value = _tableCells\n }\n\n // 将焦点移动到下一个单元格\n // 当前行右边有单元格时,焦点右移\n // 当前行右边无单元格(已处在行末),且存在下一行时,焦点移动至下一行行首\n // 当前行右边无单元格(已处在行末),且不存在下一行(已处在最后一行)时,新建一行并将焦点移动至下一行行首\n const tabActiveCell = () => {\n const getNextCell = (i: number, j: number): [number, number] | null => {\n if (!tableCells.value[i]) return null\n if (!tableCells.value[i][j]) return getNextCell(i + 1, 0)\n if (isHideCell(i, j)) return getNextCell(i, j + 1)\n return [i, j]\n }\n\n endCell.value = []\n\n const nextRow = startCell.value[0]\n const nextCol = startCell.value[1] + 1\n\n const nextCell = getNextCell(nextRow, nextCol)\n if (!nextCell) {\n insertRow(nextRow + 1)\n startCell.value = [nextRow + 1, 0]\n }\n else startCell.value = nextCell\n\n // 移动焦点后自动聚焦文本\n nextTick(() => {\n const textRef = document.querySelector('.cell-text.active') as HTMLInputElement\n if (textRef) textRef.focus()\n })\n }\n\n // 表格快捷键监听\n const keydownListener = (e: KeyboardEvent) => {\n if (!props.editable || !selectedCells.value.length) return\n\n const key = e.key.toUpperCase()\n if (selectedCells.value.length < 2) {\n if (key === KEYS.TAB) {\n e.preventDefault()\n tabActiveCell()\n }\n if (e.ctrlKey && key === KEYS.UP) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex)\n }\n if (e.ctrlKey && key === KEYS.DOWN) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex + 1)\n }\n if (e.ctrlKey && key === KEYS.LEFT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex)\n }\n if (e.ctrlKey && key === KEYS.RIGHT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex + 1)\n }\n }\n else if (key === KEYS.DELETE) {\n clearSelectedCellText()\n }\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n })\n\n // 单元格文字输入时更新表格数据\n const handleInput = debounce(function(value, rowIndex, colIndex) {\n tableCells.value[rowIndex][colIndex].text = value\n emit('change', tableCells.value)\n }, 300, { trailing: true })\n\n // 插入来自Excel的数据,表格的行/列数不够时自动补足\n const insertExcelData = (data: string[][], rowIndex: number, colIndex: number) => {\n const maxRow = data.length\n const maxCol = data[0].length\n\n let fillRowCount = 0\n let fillColCount = 0\n if (rowIndex + maxRow > tableCells.value.length) fillRowCount = rowIndex + maxRow - tableCells.value.length\n if (colIndex + maxCol > tableCells.value[0].length) fillColCount = colIndex + maxCol - tableCells.value[0].length\n if (fillRowCount || fillColCount) fillTable(fillRowCount, fillColCount)\n\n nextTick(() => {\n for (let i = 0; i < maxRow; i++) {\n for (let j = 0; j < maxCol; j++) {\n if (tableCells.value[rowIndex + i][colIndex + j]) {\n tableCells.value[rowIndex + i][colIndex + j].text = data[i][j]\n }\n }\n }\n emit('change', tableCells.value)\n })\n }\n\n // 获取有效的单元格(排除掉被合并的单元格)\n const getEffectiveTableCells = () => {\n const effectiveTableCells = []\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n const _rowCells = []\n for (let j = 0; j < rowCells.length; j++) {\n if (!isHideCell(i, j)) _rowCells.push(rowCells[j])\n }\n if (_rowCells.length) effectiveTableCells.push(_rowCells)\n }\n\n return effectiveTableCells\n }\n\n // 检查是否可以删除行和列:有效的行/列数大于1\n const checkCanDeleteRowOrCol = () => {\n const effectiveTableCells = getEffectiveTableCells()\n const canDeleteRow = effectiveTableCells.length > 1\n const canDeleteCol = effectiveTableCells[0].length > 1\n\n return { canDeleteRow, canDeleteCol }\n }\n\n // 检查是否可以合并或拆分\n // 必须多选才可以合并\n // 必须单选且所选单元格为合并单元格才可以拆分\n const checkCanMergeOrSplit = (rowIndex: number, colIndex: number) => {\n const isMultiSelected = selectedCells.value.length > 1\n const targetCell = tableCells.value[rowIndex][colIndex]\n\n const canMerge = isMultiSelected\n const canSplit = !isMultiSelected && (targetCell.rowspan > 1 || targetCell.colspan > 1)\n\n return { canMerge, canSplit }\n }\n\n const contextmenus = (el: HTMLElement): ContextmenuItem[] => {\n const cellIndex = el.dataset.cellIndex as string\n const rowIndex = +cellIndex.split('_')[0]\n const colIndex = +cellIndex.split('_')[1]\n\n if (!selectedCells.value.includes(`${rowIndex}_${colIndex}`)) {\n startCell.value = [rowIndex, colIndex]\n endCell.value = []\n }\n\n const { canMerge, canSplit } = checkCanMergeOrSplit(rowIndex, colIndex)\n const { canDeleteRow, canDeleteCol } = checkCanDeleteRowOrCol()\n\n return [\n {\n text: '插入列',\n children: [\n { text: '到左侧', handler: () => insertCol(colIndex) },\n { text: '到右侧', handler: () => insertCol(colIndex + 1) },\n ],\n },\n {\n text: '插入行',\n children: [\n { text: '到上方', handler: () => insertRow(rowIndex) },\n { text: '到下方', handler: () => insertRow(rowIndex + 1) },\n ],\n },\n {\n text: '删除列',\n disable: !canDeleteCol,\n handler: () => deleteCol(colIndex),\n },\n {\n text: '删除行',\n disable: !canDeleteRow,\n handler: () => deleteRow(rowIndex),\n },\n { divider: true },\n {\n text: '合并单元格',\n disable: !canMerge,\n handler: mergeCells,\n },\n {\n text: '取消合并单元格',\n disable: !canSplit,\n handler: () => splitCells(rowIndex, colIndex),\n },\n { divider: true },\n {\n text: '选中当前列',\n handler: () => selectCol(colIndex),\n },\n {\n text: '选中当前行',\n handler: () => selectRow(rowIndex),\n },\n {\n text: '选中全部单元格',\n handler: selectAll,\n },\n ]\n }\n\n return {\n getTextStyle,\n dragLinePosition,\n tableCells,\n colSizeList,\n totalWidth,\n hideCells,\n selectedCells,\n activedCell,\n selectedRange,\n handleCellMousedown,\n handleCellMouseenter,\n selectCol,\n selectRow,\n handleMousedownColHandler,\n contextmenus,\n handleInput,\n insertExcelData,\n subThemeColor,\n formatText,\n }\n },\n})\n","import { render } from \"./EditableTable.vue?vue&type=template&id=c0c56b6e&scoped=true&ts=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=c0c56b6e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c0c56b6e\"]])\n\nexport default __exports__","\nimport { defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTableElement, TableCell } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport EditableTable from './EditableTable.vue'\n\nexport default defineComponent({\n name: 'editable-element-table',\n components: {\n EditableTable,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { canvasScale, handleElementId, isScaling } = storeToRefs(mainStore)\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 mainStore.setDisableHotkeysState(editable.value)\n })\n\n const startEdit = () => {\n if (!props.elementInfo.lock) editable.value = true\n }\n\n // 监听表格元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (isScaling.value) editable.value = false\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTableElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n slidesStore.updateElement({\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 slidesStore.updateElement({\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 slidesStore.updateElement({\n id: props.elementInfo.id, \n props: { width, colWidths },\n })\n addHistorySnapshot()\n }\n\n // 更新表格当前选中的单元格\n const updateSelectedCells = (cells: string[]) => {\n nextTick(() => mainStore.setSelectedTableCells(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=426704b7&scoped=true&ts=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=426704b7&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-426704b7\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3168526a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\", \"stroke\", \"stroke-width\"]\nconst _hoisted_2 = [\"transform\"]\nconst _hoisted_3 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-latex\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event)),\n onDblclick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.openLatexEditor()))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.strokeWidth,\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }, [\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.elementInfo.path\n }, null, 8, _hoisted_3)\n ], 8, _hoisted_2)\n ], 8, _hoisted_1))\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTLatexElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\n\nexport default defineComponent({\n name: 'editable-element-latex',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLatexElement, 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 openLatexEditor = () => {\n emitter.emit(EmitterEvents.OPEN_LATEX_EDITOR)\n }\n\n return {\n handleSelectElement,\n openLatexEditor,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=3168526a&scoped=true&ts=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=3168526a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3168526a\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_VideoPlayer = _resolveComponent(\"VideoPlayer\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-video\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n onMousedown: _cache[1] || (_cache[1] = $event => _ctx.handleSelectElement($event, false))\n }, [\n _createVNode(_component_VideoPlayer, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n src: _ctx.elementInfo.src,\n poster: _ctx.elementInfo.poster,\n scale: _ctx.canvasScale\n }, null, 8, [\"width\", \"height\", \"src\", \"poster\", \"scale\"]),\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['t', 'b', 'l', 'r'], (item) => {\n return _createElementVNode(\"div\", {\n class: _normalizeClass(['handler-border', item]),\n key: item,\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event))\n }, null, 34)\n }), 64))\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e716fb74\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\", \"poster\"]\nconst _hoisted_2 = { class: \"bezel\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"controller-mask\" }, null, -1))\nconst _hoisted_4 = { class: \"controller\" }\nconst _hoisted_5 = { class: \"icons icons-left\" }\nconst _hoisted_6 = { class: \"icon-content\" }\nconst _hoisted_7 = { class: \"volume\" }\nconst _hoisted_8 = { class: \"icon-content\" }\nconst _hoisted_9 = {\n class: \"volume-bar\",\n ref: \"volumeBarRef\"\n}\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"time\" }\nconst _hoisted_13 = { class: \"ptime\" }\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\" / \")\nconst _hoisted_15 = { class: \"dtime\" }\nconst _hoisted_16 = { class: \"icons icons-right\" }\nconst _hoisted_17 = { class: \"speed\" }\nconst _hoisted_18 = { class: \"icon speed-icon\" }\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"icon-content\" }, \"循环\", -1))\nconst _hoisted_21 = [\n _hoisted_20\n]\nconst _hoisted_22 = { class: \"bar\" }\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_24 = [\n _hoisted_23\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPause = _resolveComponent(\"IconPause\")!\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n const _component_IconVolumeMute = _resolveComponent(\"IconVolumeMute\")!\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_IconVolumeSmall = _resolveComponent(\"IconVolumeSmall\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"video-player\", { 'hide-controller': _ctx.hideController }]),\n style: _normalizeStyle({\n width: _ctx.width * _ctx.scale + 'px',\n height: _ctx.height * _ctx.scale + 'px',\n transform: `scale(${1 / _ctx.scale})`,\n }),\n onMousemove: _cache[22] || (_cache[22] = ($event: any) => (_ctx.autoHideController())),\n onClick: _cache[23] || (_cache[23] = ($event: any) => (_ctx.autoHideController()))\n }, [\n _createElementVNode(\"div\", {\n class: \"video-wrap\",\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.toggle()))\n }, [\n _createElementVNode(\"video\", {\n class: \"video\",\n ref: \"videoRef\",\n src: _ctx.src,\n poster: _ctx.poster,\n \"webkit-playsinline\": \"\",\n playsinline: \"\",\n onDurationchange: _cache[0] || (_cache[0] = ($event: any) => (_ctx.handleDurationchange())),\n onTimeupdate: _cache[1] || (_cache[1] = ($event: any) => (_ctx.handleTimeupdate())),\n onEnded: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleEnded())),\n onProgress: _cache[3] || (_cache[3] = ($event: any) => (_ctx.handleProgress())),\n onPlay: _cache[4] || (_cache[4] = ($event: any) => (_ctx.autoHideController())),\n onPause: _cache[5] || (_cache[5] = ($event: any) => (_ctx.autoHideController())),\n onError: _cache[6] || (_cache[6] = ($event: any) => (_ctx.handleError()))\n }, null, 40, _hoisted_1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"bezel-icon\", { 'bezel-transition': _ctx.bezelTransition }]),\n onAnimationend: _cache[7] || (_cache[7] = ($event: any) => (_ctx.bezelTransition = false))\n }, [\n (_ctx.paused)\n ? (_openBlock(), _createBlock(_component_IconPause, { key: 0 }))\n : (_openBlock(), _createBlock(_component_IconPlayOne, { key: 1 }))\n ], 34)\n ])\n ]),\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", {\n class: \"icon play-icon\",\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.toggle()))\n }, [\n _createElementVNode(\"span\", _hoisted_6, [\n (_ctx.paused)\n ? (_openBlock(), _createBlock(_component_IconPlayOne, { key: 0 }))\n : (_openBlock(), _createBlock(_component_IconPause, { key: 1 }))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", {\n class: \"icon volume-icon\",\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.toggleVolume()))\n }, [\n _createElementVNode(\"span\", _hoisted_8, [\n (_ctx.volume === 0)\n ? (_openBlock(), _createBlock(_component_IconVolumeMute, { key: 0 }))\n : (_ctx.volume === 1)\n ? (_openBlock(), _createBlock(_component_IconVolumeNotice, { key: 1 }))\n : (_openBlock(), _createBlock(_component_IconVolumeSmall, { key: 2 }))\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"volume-bar-wrap\",\n onMousedown: _cache[11] || (_cache[11] = $event => _ctx.handleMousedownVolumeBar($event)),\n onTouchstart: _cache[12] || (_cache[12] = $event => _ctx.handleMousedownVolumeBar($event)),\n onClick: _cache[13] || (_cache[13] = $event => _ctx.handleClickVolumeBar($event))\n }, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", {\n class: \"volume-bar-inner\",\n style: _normalizeStyle({ width: _ctx.volumeBarWidth })\n }, _hoisted_11, 4)\n ], 512)\n ], 32)\n ]),\n _createElementVNode(\"span\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.ptime), 1),\n _hoisted_14,\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.dtime), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"div\", _hoisted_17, [\n _createElementVNode(\"div\", _hoisted_18, [\n _createElementVNode(\"span\", {\n class: \"icon-content\",\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.speedMenuVisible = !_ctx.speedMenuVisible))\n }, \"倍速\"),\n (_ctx.speedMenuVisible)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"speed-menu\",\n onMouseleave: _cache[15] || (_cache[15] = ($event: any) => (_ctx.speedMenuVisible = false))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.speedOptions, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"speed-menu-item\", { 'active': item.value === _ctx.playbackRate }]),\n key: item.label,\n onClick: ($event: any) => (_ctx.speed(item.value))\n }, _toDisplayString(item.label), 11, _hoisted_19))\n }), 128))\n ], 32))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"loop\",\n onClick: _cache[16] || (_cache[16] = ($event: any) => (_ctx.toggleLoop()))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"icon loop-icon\", { 'active': _ctx.loop }])\n }, _hoisted_21, 2)\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"bar-wrap\",\n ref: \"playBarWrap\",\n onMousedown: _cache[17] || (_cache[17] = $event => _ctx.handleMousedownPlayBar($event)),\n onTouchstart: _cache[18] || (_cache[18] = $event => _ctx.handleMousedownPlayBar($event)),\n onMousemove: _cache[19] || (_cache[19] = $event => _ctx.handleMousemovePlayBar($event)),\n onMouseenter: _cache[20] || (_cache[20] = ($event: any) => (_ctx.playBarTimeVisible = true)),\n onMouseleave: _cache[21] || (_cache[21] = ($event: any) => (_ctx.playBarTimeVisible = false))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"bar-time\", { 'hidden': !_ctx.playBarTimeVisible }]),\n style: _normalizeStyle({ left: _ctx.playBarTimeLeft })\n }, _toDisplayString(_ctx.playBarTime), 7),\n _createElementVNode(\"div\", _hoisted_22, [\n _createElementVNode(\"div\", {\n class: \"loaded\",\n style: _normalizeStyle({ width: _ctx.loadedBarWidth })\n }, null, 4),\n _createElementVNode(\"div\", {\n class: \"played\",\n style: _normalizeStyle({ width: _ctx.playedBarWidth })\n }, _hoisted_24, 4)\n ])\n ], 544)\n ])\n ], 38))\n}","/* eslint-disable */\n\nimport { onMounted, Ref } from 'vue'\n\nexport default (\n src: string,\n videoRef: Ref,\n) => {\n onMounted(() => {\n if (!videoRef.value) return\n\n let type = 'normal'\n if (/m3u8(#|\\?|$)/i.exec(src)) type = 'hls'\n else if (/.flv(#|\\?|$)/i.exec(src)) type = 'flv'\n\n if (videoRef.value && type === 'hls' && (videoRef.value.canPlayType('application/x-mpegURL') || videoRef.value.canPlayType('application/vnd.apple.mpegURL'))) {\n type = 'normal'\n }\n\n if (type === 'hls') {\n const Hls = (window as any).Hls\n \n if (Hls && Hls.isSupported()) {\n const hls = new Hls()\n hls.loadSource(src)\n hls.attachMedia(videoRef.value)\n }\n }\n else if (type === 'flv') {\n const flvjs = (window as any).flvjs\n if (flvjs && flvjs.isSupported()) {\n const flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: src,\n })\n flvPlayer.attachMediaElement(videoRef.value)\n flvPlayer.load()\n }\n }\n })\n}","\nimport { computed, defineComponent, ref } from 'vue'\nimport useMSE from './useMSE'\nimport { message } from 'ant-design-vue'\n\nconst secondToTime = (second = 0) => {\n if (second === 0 || isNaN(second)) return '00:00'\n\n const add0 = (num: number) => (num < 10 ? '0' + num : '' + num)\n const hour = Math.floor(second / 3600)\n const min = Math.floor((second - hour * 3600) / 60)\n const sec = Math.floor(second - hour * 3600 - min * 60)\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':')\n}\n\nconst getBoundingClientRectViewLeft = (element: HTMLElement) => {\n return element.getBoundingClientRect().left\n}\n\nexport default defineComponent({\n name: 'video-player',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n src: {\n type: String,\n required: true,\n },\n poster: {\n type: String,\n default: '',\n },\n scale: {\n type: Number,\n default: 1,\n },\n },\n setup(props) {\n const videoRef = ref()\n const playBarWrap = ref()\n const volumeBarRef = ref()\n\n const volume = ref(0.5)\n const paused = ref(true)\n const currentTime = ref(0)\n const duration = ref(0)\n const loaded = ref(0)\n const loop = ref(false)\n const bezelTransition = ref(false)\n const playbackRate = ref(1)\n\n const playBarTimeVisible = ref(false)\n const playBarTime = ref('00:00')\n const playBarTimeLeft = ref('0')\n\n const ptime = computed(() => secondToTime(currentTime.value))\n const dtime = computed(() => secondToTime(duration.value))\n const playedBarWidth = computed(() => currentTime.value / duration.value * 100 + '%')\n const loadedBarWidth = computed(() => loaded.value / duration.value * 100 + '%')\n const volumeBarWidth = computed(() => volume.value * 100 + '%')\n\n const speedMenuVisible = ref(false)\n const speedOptions = [\n { label: '2x', value: 2 },\n { label: '1.5x', value: 1.5 },\n { label: '1.25x', value: 1.25 },\n { label: '1x', value: 1 },\n { label: '0.75x', value: 0.75 },\n { label: '0.5x', value: 0.5 },\n ]\n\n const seek = (time: number) => {\n if (!videoRef.value) return\n\n time = Math.max(time, 0)\n time = Math.min(time, duration.value)\n\n videoRef.value.currentTime = time\n currentTime.value = time\n }\n\n const play = () => {\n if (!videoRef.value) return\n\n paused.value = false\n videoRef.value.play()\n bezelTransition.value = true\n }\n\n const pause = () => {\n if (!videoRef.value) return\n\n paused.value = true\n videoRef.value.pause()\n bezelTransition.value = true\n }\n\n const toggle = () => {\n if (paused.value) play() \n else pause()\n }\n\n const setVolume = (percentage: number) => {\n if (!videoRef.value) return\n\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n\n videoRef.value.volume = percentage\n volume.value = percentage\n if (videoRef.value.muted && percentage !== 0) videoRef.value.muted = false\n }\n\n const speed = (rate: number) => {\n if (videoRef.value) videoRef.value.playbackRate = rate\n playbackRate.value = rate\n }\n\n const handleDurationchange = () => {\n duration.value = videoRef.value?.duration || 0\n }\n\n const handleTimeupdate = () => {\n currentTime.value = videoRef.value?.currentTime || 0\n }\n\n const handleEnded = () => {\n if (!loop.value) pause()\n else {\n seek(0)\n play()\n }\n }\n\n const handleProgress = () => {\n loaded.value = videoRef.value?.buffered.length ? videoRef.value.buffered.end(videoRef.value.buffered.length - 1) : 0\n }\n\n const handleError = () => message.error('视频加载失败')\n\n const thumbMove = (e: MouseEvent | TouchEvent) => {\n if (!videoRef.value || !playBarWrap.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n videoRef.value.currentTime = time\n currentTime.value = time\n }\n\n const thumbUp = (e: MouseEvent | TouchEvent) => {\n if (!videoRef.value || !playBarWrap.value) return\n\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n videoRef.value.currentTime = time\n currentTime.value = time\n\n document.removeEventListener('mousemove', thumbMove)\n document.removeEventListener('touchmove', thumbMove)\n document.removeEventListener('mouseup', thumbUp)\n document.removeEventListener('touchend', thumbUp)\n }\n\n const handleMousedownPlayBar = () => {\n document.addEventListener('mousemove', thumbMove)\n document.addEventListener('touchmove', thumbMove)\n document.addEventListener('mouseup', thumbUp)\n document.addEventListener('touchend', thumbUp)\n }\n\n const volumeMove = (e: MouseEvent | TouchEvent) => {\n if (!volumeBarRef.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n const percentage = (clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const volumeUp = () => {\n document.removeEventListener('mousemove', volumeMove)\n document.removeEventListener('touchmove', volumeMove)\n document.removeEventListener('mouseup', volumeUp)\n document.removeEventListener('touchend', volumeUp)\n }\n\n const handleMousedownVolumeBar = () => {\n document.addEventListener('mousemove', volumeMove)\n document.addEventListener('touchmove', volumeMove)\n document.addEventListener('mouseup', volumeUp)\n document.addEventListener('touchend', volumeUp)\n }\n\n const handleClickVolumeBar = (e: MouseEvent) => {\n if (!volumeBarRef.value) return\n const percentage = (e.clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const handleMousemovePlayBar = (e: MouseEvent) => {\n if (duration.value && playBarWrap.value) {\n const px = playBarWrap.value.getBoundingClientRect().left\n const tx = e.clientX - px\n if (tx < 0 || tx > playBarWrap.value.offsetWidth) return\n\n const time = duration.value * (tx / playBarWrap.value.offsetWidth)\n playBarTimeLeft.value = `${tx - (time >= 3600 ? 25 : 20)}px`\n playBarTime.value = secondToTime(time)\n playBarTimeVisible.value = true\n }\n }\n\n const toggleVolume = () => {\n if (!videoRef.value) return\n\n if (videoRef.value.muted) {\n videoRef.value.muted = false\n setVolume(0.5)\n }\n else {\n videoRef.value.muted = true\n setVolume(0)\n }\n }\n\n const toggleLoop = () => {\n loop.value = !loop.value\n }\n\n const autoHideControllerTimer = ref(-1)\n const hideController = ref(false)\n const autoHideController = () => {\n hideController.value = false\n clearTimeout(autoHideControllerTimer.value)\n autoHideControllerTimer.value = setTimeout(() => {\n if (videoRef.value?.played.length) hideController.value = true\n }, 3000)\n }\n \n useMSE(props.src, videoRef)\n\n return {\n videoRef,\n playBarWrap,\n volumeBarRef,\n volume,\n loop,\n paused,\n ptime,\n dtime,\n playBarTime,\n playBarTimeVisible,\n playBarTimeLeft,\n playedBarWidth,\n loadedBarWidth,\n volumeBarWidth,\n hideController,\n bezelTransition,\n playbackRate,\n speedMenuVisible,\n speedOptions,\n seek,\n play,\n pause,\n toggle,\n setVolume,\n speed,\n handleDurationchange,\n handleTimeupdate,\n handleEnded,\n handleProgress,\n handleMousedownPlayBar,\n handleMousedownVolumeBar,\n handleClickVolumeBar,\n handleMousemovePlayBar,\n toggleVolume,\n toggleLoop,\n autoHideController,\n handleError,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=e716fb74&scoped=true&ts=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=e716fb74&scoped=true&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e716fb74\"]])\n\nexport default __exports__","\nimport { defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTVideoElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\n\nimport VideoPlayer from './VideoPlayer/index.vue'\n\nexport default defineComponent({\n name: 'editable-element-video',\n components: {\n VideoPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTVideoElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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 return {\n canvasScale,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=7f80f8ee&scoped=true&ts=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=7f80f8ee&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7f80f8ee\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createVNode as _createVNode, withModifiers as _withModifiers, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, createElementBlock as _createElementBlock, withDirectives as _withDirectives, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_AudioPlayer = _resolveComponent(\"AudioPlayer\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-audio\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n onMousedown: _cache[1] || (_cache[1] = $event => _ctx.handleSelectElement($event))\n }, [\n _createVNode(_component_IconVolumeNotice, {\n class: \"audio-icon\",\n style: _normalizeStyle({\n fontSize: _ctx.audioIconSize,\n color: _ctx.elementInfo.color,\n })\n }, null, 8, [\"style\"]),\n (_ctx.handleElementId === _ctx.elementInfo.id)\n ? (_openBlock(), _createBlock(_component_AudioPlayer, {\n key: 0,\n class: \"audio-player\",\n style: _normalizeStyle({ ..._ctx.audioPlayerPosition }),\n src: _ctx.elementInfo.src,\n loop: _ctx.elementInfo.loop,\n scale: _ctx.canvasScale,\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"style\", \"src\", \"loop\", \"scale\"]))\n : _createCommentVNode(\"\", true)\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5cabbb47\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\", \"autoplay\"]\nconst _hoisted_2 = { class: \"controller\" }\nconst _hoisted_3 = { class: \"icons\" }\nconst _hoisted_4 = { class: \"icon-content\" }\nconst _hoisted_5 = { class: \"volume\" }\nconst _hoisted_6 = { class: \"icon-content\" }\nconst _hoisted_7 = {\n class: \"volume-bar\",\n ref: \"volumeBarRef\"\n}\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = { class: \"time\" }\nconst _hoisted_11 = { class: \"ptime\" }\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\" / \")\nconst _hoisted_13 = { class: \"dtime\" }\nconst _hoisted_14 = { class: \"bar\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_16 = [\n _hoisted_15\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n const _component_IconPause = _resolveComponent(\"IconPause\")!\n const _component_IconVolumeMute = _resolveComponent(\"IconVolumeMute\")!\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_IconVolumeSmall = _resolveComponent(\"IconVolumeSmall\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"audio-player\",\n style: _normalizeStyle({ transform: `scale(${1 / _ctx.scale})` })\n }, [\n _createElementVNode(\"audio\", {\n class: \"audio\",\n ref: \"audioRef\",\n src: _ctx.src,\n autoplay: _ctx.autoplay,\n onDurationchange: _cache[0] || (_cache[0] = ($event: any) => (_ctx.handleDurationchange())),\n onTimeupdate: _cache[1] || (_cache[1] = ($event: any) => (_ctx.handleTimeupdate())),\n onPlay: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handlePlayed())),\n onEnded: _cache[3] || (_cache[3] = ($event: any) => (_ctx.handleEnded())),\n onProgress: _cache[4] || (_cache[4] = ($event: any) => (_ctx.handleProgress())),\n onError: _cache[5] || (_cache[5] = ($event: any) => (_ctx.handleError()))\n }, null, 40, _hoisted_1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"icon play-icon\",\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.toggle()))\n }, [\n _createElementVNode(\"span\", _hoisted_4, [\n (_ctx.paused)\n ? (_openBlock(), _createBlock(_component_IconPlayOne, { key: 0 }))\n : (_openBlock(), _createBlock(_component_IconPause, { key: 1 }))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", {\n class: \"icon volume-icon\",\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.toggleVolume()))\n }, [\n _createElementVNode(\"span\", _hoisted_6, [\n (_ctx.volume === 0)\n ? (_openBlock(), _createBlock(_component_IconVolumeMute, { key: 0 }))\n : (_ctx.volume === 1)\n ? (_openBlock(), _createBlock(_component_IconVolumeNotice, { key: 1 }))\n : (_openBlock(), _createBlock(_component_IconVolumeSmall, { key: 2 }))\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"volume-bar-wrap\",\n onMousedown: _cache[8] || (_cache[8] = $event => _ctx.handleMousedownVolumeBar($event)),\n onTouchstart: _cache[9] || (_cache[9] = $event => _ctx.handleMousedownVolumeBar($event)),\n onClick: _cache[10] || (_cache[10] = $event => _ctx.handleClickVolumeBar($event))\n }, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", {\n class: \"volume-bar-inner\",\n style: _normalizeStyle({ width: _ctx.volumeBarWidth })\n }, _hoisted_9, 4)\n ], 512)\n ], 32)\n ])\n ]),\n _createElementVNode(\"span\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.ptime), 1),\n _hoisted_12,\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.dtime), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"bar-wrap\",\n ref: \"playBarWrap\",\n onMousedown: _cache[11] || (_cache[11] = $event => _ctx.handleMousedownPlayBar($event)),\n onTouchstart: _cache[12] || (_cache[12] = $event => _ctx.handleMousedownPlayBar($event)),\n onMousemove: _cache[13] || (_cache[13] = $event => _ctx.handleMousemovePlayBar($event)),\n onMouseenter: _cache[14] || (_cache[14] = ($event: any) => (_ctx.playBarTimeVisible = true)),\n onMouseleave: _cache[15] || (_cache[15] = ($event: any) => (_ctx.playBarTimeVisible = false))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"bar-time\", { 'hidden': !_ctx.playBarTimeVisible }]),\n style: _normalizeStyle({ left: _ctx.playBarTimeLeft })\n }, _toDisplayString(_ctx.playBarTime), 7),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", {\n class: \"loaded\",\n style: _normalizeStyle({ width: _ctx.loadedBarWidth })\n }, null, 4),\n _createElementVNode(\"div\", {\n class: \"played\",\n style: _normalizeStyle({ width: _ctx.playedBarWidth })\n }, _hoisted_16, 4)\n ])\n ], 544)\n ])\n ], 4))\n}","\nimport { computed, defineComponent, ref } from 'vue'\nimport { message } from 'ant-design-vue'\n\nconst secondToTime = (second = 0) => {\n if (second === 0 || isNaN(second)) return '00:00'\n\n const add0 = (num: number) => (num < 10 ? '0' + num : '' + num)\n const hour = Math.floor(second / 3600)\n const min = Math.floor((second - hour * 3600) / 60)\n const sec = Math.floor(second - hour * 3600 - min * 60)\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':')\n}\n\nconst getBoundingClientRectViewLeft = (element: HTMLElement) => {\n return element.getBoundingClientRect().left\n}\n\nexport default defineComponent({\n name: 'audio-player',\n props: {\n src: {\n type: String,\n required: true,\n },\n loop: {\n type: Boolean,\n required: true,\n },\n autoplay: {\n type: Boolean,\n default: false,\n },\n scale: {\n type: Number,\n default: 1,\n },\n },\n setup(props) {\n const audioRef = ref()\n const playBarWrap = ref()\n const volumeBarRef = ref()\n\n const volume = ref(0.5)\n const paused = ref(true)\n const currentTime = ref(0)\n const duration = ref(0)\n const loaded = ref(0)\n\n const playBarTimeVisible = ref(false)\n const playBarTime = ref('00:00')\n const playBarTimeLeft = ref('0')\n\n const ptime = computed(() => secondToTime(currentTime.value))\n const dtime = computed(() => secondToTime(duration.value))\n const playedBarWidth = computed(() => currentTime.value / duration.value * 100 + '%')\n const loadedBarWidth = computed(() => loaded.value / duration.value * 100 + '%')\n const volumeBarWidth = computed(() => volume.value * 100 + '%')\n\n const seek = (time: number) => {\n if (!audioRef.value) return\n\n time = Math.max(time, 0)\n time = Math.min(time, duration.value)\n\n audioRef.value.currentTime = time\n currentTime.value = time\n }\n\n const play = () => {\n if (!audioRef.value) return\n\n paused.value = false\n audioRef.value.play()\n }\n\n const pause = () => {\n if (!audioRef.value) return\n\n paused.value = true\n audioRef.value.pause()\n }\n\n const toggle = () => {\n if (paused.value) play() \n else pause()\n }\n\n const setVolume = (percentage: number) => {\n if (!audioRef.value) return\n\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n\n audioRef.value.volume = percentage\n volume.value = percentage\n if (audioRef.value.muted && percentage !== 0) audioRef.value.muted = false\n }\n\n const handleDurationchange = () => {\n duration.value = audioRef.value?.duration || 0\n }\n\n const handleTimeupdate = () => {\n currentTime.value = audioRef.value?.currentTime || 0\n }\n\n const handlePlayed = () => {\n paused.value = false\n }\n\n const handleEnded = () => {\n if (!props.loop) pause()\n else {\n seek(0)\n play()\n }\n }\n\n const handleProgress = () => {\n loaded.value = audioRef.value?.buffered.length ? audioRef.value.buffered.end(audioRef.value.buffered.length - 1) : 0\n }\n\n const handleError = () => message.error('视频加载失败')\n\n const thumbMove = (e: MouseEvent | TouchEvent) => {\n if (!audioRef.value || !playBarWrap.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n audioRef.value.currentTime = time\n currentTime.value = time\n }\n\n const thumbUp = (e: MouseEvent | TouchEvent) => {\n if (!audioRef.value || !playBarWrap.value) return\n\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n audioRef.value.currentTime = time\n currentTime.value = time\n\n document.removeEventListener('mousemove', thumbMove)\n document.removeEventListener('touchmove', thumbMove)\n document.removeEventListener('mouseup', thumbUp)\n document.removeEventListener('touchend', thumbUp)\n }\n\n const handleMousedownPlayBar = () => {\n document.addEventListener('mousemove', thumbMove)\n document.addEventListener('touchmove', thumbMove)\n document.addEventListener('mouseup', thumbUp)\n document.addEventListener('touchend', thumbUp)\n }\n\n const volumeMove = (e: MouseEvent | TouchEvent) => {\n if (!volumeBarRef.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n const percentage = (clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const volumeUp = () => {\n document.removeEventListener('mousemove', volumeMove)\n document.removeEventListener('touchmove', volumeMove)\n document.removeEventListener('mouseup', volumeUp)\n document.removeEventListener('touchend', volumeUp)\n }\n\n const handleMousedownVolumeBar = () => {\n document.addEventListener('mousemove', volumeMove)\n document.addEventListener('touchmove', volumeMove)\n document.addEventListener('mouseup', volumeUp)\n document.addEventListener('touchend', volumeUp)\n }\n\n const handleClickVolumeBar = (e: MouseEvent) => {\n if (!volumeBarRef.value) return\n const percentage = (e.clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const handleMousemovePlayBar = (e: MouseEvent) => {\n if (duration.value && playBarWrap.value) {\n const px = playBarWrap.value.getBoundingClientRect().left\n const tx = e.clientX - px\n if (tx < 0 || tx > playBarWrap.value.offsetWidth) return\n\n const time = duration.value * (tx / playBarWrap.value.offsetWidth)\n playBarTimeLeft.value = `${tx - (time >= 3600 ? 25 : 20)}px`\n playBarTime.value = secondToTime(time)\n playBarTimeVisible.value = true\n }\n }\n\n const toggleVolume = () => {\n if (!audioRef.value) return\n\n if (audioRef.value.muted) {\n audioRef.value.muted = false\n setVolume(0.5)\n }\n else {\n audioRef.value.muted = true\n setVolume(0)\n }\n }\n\n return {\n audioRef,\n playBarWrap,\n volumeBarRef,\n volume,\n paused,\n ptime,\n dtime,\n playBarTime,\n playBarTimeVisible,\n playBarTimeLeft,\n playedBarWidth,\n loadedBarWidth,\n volumeBarWidth,\n play,\n pause,\n toggle,\n setVolume,\n handleDurationchange,\n handleTimeupdate,\n handlePlayed,\n handleEnded,\n handleProgress,\n handleError,\n handleMousedownPlayBar,\n handleMousedownVolumeBar,\n handleClickVolumeBar,\n handleMousemovePlayBar,\n toggleVolume,\n }\n },\n})\n","import { render } from \"./AudioPlayer.vue?vue&type=template&id=5cabbb47&scoped=true&ts=true\"\nimport script from \"./AudioPlayer.vue?vue&type=script&lang=ts\"\nexport * from \"./AudioPlayer.vue?vue&type=script&lang=ts\"\n\nimport \"./AudioPlayer.vue?vue&type=style&index=0&id=5cabbb47&scoped=true&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5cabbb47\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTAudioElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nimport AudioPlayer from './AudioPlayer.vue'\n\nexport default defineComponent({\n name: 'editable-element-audio',\n components: {\n AudioPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTAudioElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const { canvasScale, handleElementId } = storeToRefs(useMainStore())\n const { viewportRatio } = storeToRefs(useSlidesStore())\n\n const audioIconSize = computed(() => {\n return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'\n })\n const audioPlayerPosition = computed(() => {\n const canvasWidth = VIEWPORT_SIZE\n const canvasHeight = VIEWPORT_SIZE * viewportRatio.value\n\n const audioWidth = 280 / canvasScale.value\n const audioHeight = 50 / canvasScale.value\n\n const elWidth = props.elementInfo.width\n const elHeight = props.elementInfo.height\n const elLeft = props.elementInfo.left\n const elTop = props.elementInfo.top\n\n let left = 0\n let top = elHeight\n \n if (elLeft + audioWidth >= canvasWidth) left = elWidth - audioWidth\n if (elTop + elHeight + audioHeight >= canvasHeight) top = -audioHeight\n\n return {\n left: left + 'px',\n top: top + 'px',\n }\n })\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 return {\n canvasScale,\n handleElementId,\n audioIconSize,\n audioPlayerPosition,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=66dd4448&scoped=true&ts=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=66dd4448&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-66dd4448\"]])\n\nexport default __exports__","\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'\nimport LatexElement from '@/views/components/element/LatexElement/index.vue'\nimport VideoElement from '@/views/components/element/VideoElement/index.vue'\nimport AudioElement from '@/views/components/element/AudioElement/index.vue'\n\nexport default defineComponent({\n name: 'editable-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTElement, canMove?: boolean) => void>,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: ImageElement,\n [ElementTypes.TEXT]: TextElement,\n [ElementTypes.SHAPE]: ShapeElement,\n [ElementTypes.LINE]: LineElement,\n [ElementTypes.CHART]: ChartElement,\n [ElementTypes.TABLE]: TableElement,\n [ElementTypes.LATEX]: LatexElement,\n [ElementTypes.VIDEO]: VideoElement,\n [ElementTypes.AUDIO]: AudioElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const { orderElement } = useOrderElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { combineElements, uncombineElements } = useCombineElement()\n const { deleteElement } = useDeleteElement()\n const { lockElement, unlockElement } = useLockElement()\n const { copyElement, pasteElement, cutElement } = useCopyAndPasteElement()\n const { selectAllElement } = useSelectAllElement()\n\n const contextmenus = (): ContextmenuItem[] => {\n if (props.elementInfo.lock) {\n return [{\n text: '解锁', \n handler: () => unlockElement(props.elementInfo),\n }]\n }\n\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutElement,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copyElement,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteElement,\n },\n { divider: true },\n {\n text: '水平居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER), },\n { text: '水平居中', handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL) },\n { text: '左对齐', handler: () => alignElementToCanvas(ElementAlignCommands.LEFT) },\n { text: '右对齐', handler: () => alignElementToCanvas(ElementAlignCommands.RIGHT) },\n ],\n },\n {\n text: '垂直居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER) },\n { text: '垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL) },\n { text: '顶部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.TOP) },\n { text: '底部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.BOTTOM) },\n ],\n },\n { divider: true },\n {\n text: '置于顶层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP),\n children: [\n { text: '置于顶层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP) },\n { text: '上移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.UP) },\n ],\n },\n {\n text: '置于底层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM),\n children: [\n { text: '置于底层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM) },\n { text: '下移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.DOWN) },\n ],\n },\n { divider: true },\n {\n text: '设置链接',\n handler: props.openLinkDialog,\n },\n {\n text: props.elementInfo.groupId ? '取消组合' : '组合',\n subText: 'Ctrl + G',\n handler: props.elementInfo.groupId ? uncombineElements : combineElements,\n hide: !props.isMultiSelect,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllElement,\n },\n {\n text: '锁定',\n subText: 'Ctrl + L',\n handler: lockElement,\n },\n {\n text: '删除',\n subText: 'Delete',\n handler: deleteElement,\n },\n ]\n }\n\n return {\n currentElementComponent,\n contextmenus,\n }\n },\n})\n","import { render } from \"./EditableElement.vue?vue&type=template&id=19fcaa81&ts=true\"\nimport script from \"./EditableElement.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableElement.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(`mouse-selection quadrant-${_ctx.quadrant}`),\n style: _normalizeStyle({\n top: _ctx.top + 'px',\n left: _ctx.left + 'px',\n width: _ctx.width + 'px',\n height: _ctx.height + 'px',\n })\n }, null, 6))\n}","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\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=25d4b5f8&scoped=true&ts=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=25d4b5f8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-25d4b5f8\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GridLines = _resolveComponent(\"GridLines\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"viewport-background\",\n style: _normalizeStyle(_ctx.backgroundStyle)\n }, [\n (_ctx.showGridLines)\n ? (_openBlock(), _createBlock(_component_GridLines, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ], 4))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9b94cc34\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"grid-lines\" }\nconst _hoisted_2 = [\"d\", \"stroke\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [\n _createElementVNode(\"path\", {\n style: _normalizeStyle({\n transform: `scale(${_ctx.canvasScale})`,\n }),\n d: _ctx.path,\n fill: \"none\",\n stroke: _ctx.gridColor,\n \"stroke-width\": \"0.3\",\n \"stroke-dasharray\": \"5\"\n }, null, 12, _hoisted_2)\n ]))\n}","\nimport { defineComponent, computed } from 'vue'\nimport tinycolor from 'tinycolor2'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 { canvasScale } = storeToRefs(useMainStore())\n const { currentSlide, viewportRatio } = storeToRefs(useSlidesStore())\n\n const background = computed(() => currentSlide.value?.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=9b94cc34&scoped=true&ts=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=9b94cc34&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9b94cc34\"]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 { showGridLines } = storeToRefs(useMainStore())\n const { currentSlide } = storeToRefs(useSlidesStore())\n const background = computed(() => currentSlide.value?.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=4d0018d8&scoped=true&ts=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=4d0018d8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4d0018d8\"]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"alignment-line\",\n style: _normalizeStyle({ left: _ctx.left, top: _ctx.top })\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass(['line', _ctx.type]),\n style: _normalizeStyle(_ctx.sizeStyle)\n }, null, 6)\n ], 4))\n}","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } 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 { canvasScale } = storeToRefs(useMainStore())\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=62c9018e&scoped=true&ts=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=62c9018e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62c9018e\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-15b60d90\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"element-create-selection\",\n ref: \"selectionRef\",\n onMousedown: _cache[0] || (_cache[0] = _withModifiers($event => _ctx.createSelection($event), [\"stop\"])),\n onContextmenu: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\",\"prevent\"]))\n }, [\n (_ctx.start && _ctx.end)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass(['selection', _ctx.creatingElement?.type]),\n style: _normalizeStyle(_ctx.position)\n }, [\n (_ctx.creatingElement?.type === 'line' && _ctx.lineData)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n overflow: \"visible\",\n width: _ctx.lineData.svgWidth,\n height: _ctx.lineData.svgHeight\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.lineData.path,\n stroke: \"#d14424\",\n fill: \"none\",\n \"stroke-width\": \"2\"\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ], 6))\n : _createCommentVNode(\"\", true)\n ], 544))\n}","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useKeyboardStore } from '@/store'\n\nexport default defineComponent({\n name: 'element-create-selection',\n emits: ['created'],\n setup(props, { emit }) {\n const mainStore = useMainStore()\n const { creatingElement } = storeToRefs(mainStore)\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const start = ref<[number, number]>()\n const end = ref<[number, number]>()\n\n const selectionRef = ref()\n const offset = ref({\n x: 0,\n y: 0,\n })\n onMounted(() => {\n if (!selectionRef.value) return\n const { x, y } = selectionRef.value.getBoundingClientRect()\n offset.value = { x, 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\n if (e.button === 2) {\n setTimeout(() => mainStore.setCreatingElement(null), 0)\n return\n }\n\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.value.x + 'px',\n top: minY - offset.value.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=15b60d90&scoped=true&ts=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=15b60d90&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-15b60d90\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"multi-select-operate\",\n style: _normalizeStyle({\n left: _ctx.range.minX * _ctx.canvasScale + 'px',\n top: _ctx.range.minY * _ctx.canvasScale + 'px',\n })\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (!_ctx.disableResize)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n key: point.direction,\n type: point.direction,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers(($event: any) => (_ctx.scaleMultiElement($event, _ctx.range, point.direction)), [\"stop\"])\n }, null, 8, [\"type\", \"style\", \"onMousedown\"]))\n }), 128))\n : _createCommentVNode(\"\", true)\n ], 4))\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}","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(['resize-handler', _ctx.rotateClassName, _ctx.type])\n }, null, 2))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { OperateResizeHandlers } from '@/types/edit'\n\nexport default defineComponent({\n name: 'resize-handler',\n props: {\n type: {\n type: String as PropType,\n default: '',\n },\n rotate: {\n type: Number,\n default: 0,\n },\n },\n setup(props) {\n const rotateClassName = computed(() => {\n const prefix = 'rotate-'\n const rotate = props.rotate\n if (rotate > -22.5 && rotate <= 22.5) return prefix + 0\n else if (rotate > 22.5 && rotate <= 67.5) return prefix + 45\n else if (rotate > 67.5 && rotate <= 112.5) return prefix + 90\n else if (rotate > 112.5 && rotate <= 157.5) return prefix + 135\n else if (rotate > 157.5 || rotate <= -157.5) return prefix + 0\n else if (rotate > -157.5 && rotate <= -112.5) return prefix + 45\n else if (rotate > -112.5 && rotate <= -67.5) return prefix + 90\n else if (rotate > -67.5 && rotate <= -22.5) return prefix + 135\n return prefix + 0\n })\n\n return {\n rotateClassName,\n }\n },\n})\n","import { render } from \"./ResizeHandler.vue?vue&type=template&id=c9559332&scoped=true&ts=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=c9559332&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c9559332\"]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(['border-line', _ctx.type, { 'wide': _ctx.isWide }])\n }, null, 2))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { OperateBorderLines } from '@/types/edit'\n\nexport default defineComponent({\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=1430bedc&scoped=true&ts=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=1430bedc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1430bedc\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, ref, PropType, watchEffect } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementListRange } from '@/utils/element'\nimport { OperateResizeHandlers, 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: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { activeElementIdList, canvasScale } = storeToRefs(useMainStore())\n\n const localActiveElementList = computed(() => props.elementList.filter(el => activeElementIdList.value.includes(el.id)))\n\n const range = ref({\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0,\n })\n\n // 根据多选元素整体在画布中的范围,计算边框线和缩放点的位置信息\n const width = computed(() => (range.value.maxX - range.value.minX) * canvasScale.value)\n const height = computed(() => (range.value.maxY - range.value.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.value = { minX, maxX, minY, 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 range,\n canvasScale,\n borderLines,\n disableResize,\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./MultiSelectOperate.vue?vue&type=template&id=55c8df22&scoped=true&ts=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=55c8df22&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-55c8df22\"]])\n\nexport default __exports__","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withModifiers as _withModifiers, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6abdbdd6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 1,\n class: \"animation-index\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinkHandler = _resolveComponent(\"LinkHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"operate\", { 'multi-select': _ctx.isMultiSelect && !_ctx.isActive }]),\n style: _normalizeStyle({\r\n top: _ctx.elementInfo.top * _ctx.canvasScale + 'px',\r\n left: _ctx.elementInfo.left * _ctx.canvasScale + 'px',\r\n transform: `rotate(${_ctx.rotate}deg)`,\r\n transformOrigin: `${_ctx.elementInfo.width * _ctx.canvasScale / 2}px ${_ctx.height * _ctx.canvasScale / 2}px`,\r\n })\n }, [\n (_ctx.isSelected)\n ? (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentOperateComponent), {\n key: 0,\n elementInfo: _ctx.elementInfo,\n handlerVisible: !_ctx.elementInfo.lock && (_ctx.isActiveGroupElement || !_ctx.isMultiSelect),\n rotateElement: _ctx.rotateElement,\n scaleElement: _ctx.scaleElement,\n dragLineElement: _ctx.dragLineElement\n }, null, 8, [\"elementInfo\", \"handlerVisible\", \"rotateElement\", \"scaleElement\", \"dragLineElement\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.toolbarState === 'elAnimation' && _ctx.elementIndexInAnimation !== -1)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _toDisplayString(_ctx.elementIndexInAnimation + 1), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.isActive && _ctx.elementInfo.link)\n ? (_openBlock(), _createBlock(_component_LinkHandler, {\n key: 2,\n elementInfo: _ctx.elementInfo,\n link: _ctx.elementInfo.link,\n openLinkDialog: _ctx.openLinkDialog,\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"elementInfo\", \"link\", \"openLinkDialog\"]))\n : _createCommentVNode(\"\", true)\n ], 6))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"image-element-operate\", { 'cliping': _ctx.isCliping }])\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9a549510\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"rotate-handler\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1))\n}","\nexport default {\n name: 'rotate-handler',\n}\n","import { render } from \"./RotateHandler.vue?vue&type=template&id=9a549510&scoped=true&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9a549510\"]])\n\nexport default __exports__","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useMainStore } from '@/store'\r\nimport { PPTImageElement } from '@/types/slides'\r\nimport { OperateResizeHandlers } 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 handlerVisible: {\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: OperateResizeHandlers) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const { canvasScale, clipingImageElementId } = storeToRefs(useMainStore())\r\n\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=db6d5ba6&scoped=true&ts=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=db6d5ba6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-db6d5ba6\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.textElementResizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useMainStore } from '@/store'\r\nimport { PPTTextElement } from '@/types/slides'\r\nimport { OperateResizeHandlers } 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 handlerVisible: {\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: OperateResizeHandlers) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const { canvasScale } = storeToRefs(useMainStore())\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=115c48f0&ts=true\"\nimport script from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"shape-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandlers } 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 handlerVisible: {\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: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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=08e569b7&ts=true\"\nimport script from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, createBlock as _createBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-c0a272d2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"line-element-operate\" }\nconst _hoisted_2 = [\"width\", \"height\", \"stroke\"]\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = [\"x1\", \"y1\", \"x2\", \"y2\"]\nconst _hoisted_5 = [\"x1\", \"y1\", \"x2\", \"y2\"]\nconst _hoisted_6 = [\"x1\", \"y1\", \"x2\", \"y2\"]\nconst _hoisted_7 = [\"x1\", \"y1\", \"x2\", \"y2\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.handler,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.dragLineElement($event, _ctx.elementInfo, point.handler), [\"stop\"])\n }, null, 8, [\"style\", \"onMousedown\"]))\n }), 128)),\n (_openBlock(), _createElementBlock(\"svg\", {\n width: _ctx.svgWidth,\n height: _ctx.svgHeight,\n stroke: _ctx.elementInfo.color,\n overflow: \"visible\",\n style: _normalizeStyle({ transform: `scale(${_ctx.canvasScale})` })\n }, [\n (_ctx.elementInfo.curve)\n ? (_openBlock(), _createElementBlock(\"g\", _hoisted_3, [\n _createElementVNode(\"line\", {\n class: \"anchor-line\",\n x1: _ctx.elementInfo.start[0],\n y1: _ctx.elementInfo.start[1],\n x2: _ctx.elementInfo.curve[0],\n y2: _ctx.elementInfo.curve[1]\n }, null, 8, _hoisted_4),\n _createElementVNode(\"line\", {\n class: \"anchor-line\",\n x1: _ctx.elementInfo.end[0],\n y1: _ctx.elementInfo.end[1],\n x2: _ctx.elementInfo.curve[0],\n y2: _ctx.elementInfo.curve[1]\n }, null, 8, _hoisted_5)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.elementInfo.cubic)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 1 }, _renderList(_ctx.elementInfo.cubic, (item, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n (index === 0)\n ? (_openBlock(), _createElementBlock(\"line\", {\n key: 0,\n class: \"anchor-line\",\n x1: _ctx.elementInfo.start[0],\n y1: _ctx.elementInfo.start[1],\n x2: item[0],\n y2: item[1]\n }, null, 8, _hoisted_6))\n : _createCommentVNode(\"\", true),\n (index === 1)\n ? (_openBlock(), _createElementBlock(\"line\", {\n key: 1,\n class: \"anchor-line\",\n x1: _ctx.elementInfo.end[0],\n y1: _ctx.elementInfo.end[1],\n x2: item[0],\n y2: item[1]\n }, null, 8, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_2))\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTLineElement } from '@/types/slides'\nimport { OperateLineHandlers } from '@/types/edit'\n\nimport ResizeHandler from './ResizeHandler.vue'\n\nexport default defineComponent({\n name: 'line-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n handlerVisible: {\n type: Boolean,\n required: true,\n },\n dragLineElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, command: OperateLineHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\n\n const svgWidth = computed(() => Math.max(props.elementInfo.start[0], props.elementInfo.end[0]))\n const svgHeight = computed(() => Math.max(props.elementInfo.start[1], props.elementInfo.end[1]))\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 ctrlHandler = (props.elementInfo.curve || props.elementInfo.broken) as [number, number]\n\n handlers.push({\n handler: OperateLineHandlers.C,\n style: {\n left: ctrlHandler[0] * canvasScale.value + 'px',\n top: ctrlHandler[1] * canvasScale.value + 'px',\n }\n })\n }\n else if (props.elementInfo.cubic) {\n const [ctrlHandler1, ctrlHandler2] = props.elementInfo.cubic\n handlers.push({\n handler: OperateLineHandlers.C1,\n style: {\n left: ctrlHandler1[0] * canvasScale.value + 'px',\n top: ctrlHandler1[1] * canvasScale.value + 'px',\n }\n })\n handlers.push({\n handler: OperateLineHandlers.C2,\n style: {\n left: ctrlHandler2[0] * canvasScale.value + 'px',\n top: ctrlHandler2[1] * canvasScale.value + 'px',\n }\n })\n }\n\n return handlers\n })\n\n return {\n svgWidth,\n svgHeight,\n canvasScale,\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./LineElementOperate.vue?vue&type=template&id=c0a272d2&scoped=true&ts=true\"\nimport script from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\n\nimport \"./LineElementOperate.vue?vue&type=style&index=0&id=c0a272d2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c0a272d2\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"table-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.textElementResizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTTableElement } from '@/types/slides'\nimport { OperateResizeHandlers } 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: 'table-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 handlerVisible: {\n type: Boolean,\n required: true,\n },\n rotateElement: {\n type: Function as PropType<(element: PPTTableElement) => void>,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, command: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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=45c5e7da&ts=true\"\nimport script from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"common-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n (!_ctx.cannotRotate)\n ? (_openBlock(), _createBlock(_component_RotateHandler, {\n key: 0,\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTShapeElement, PPTVideoElement, PPTLatexElement, PPTAudioElement } from '@/types/slides'\nimport { OperateResizeHandlers } 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\ntype PPTElement = PPTShapeElement | PPTVideoElement | PPTLatexElement | PPTAudioElement\n\nexport default defineComponent({\n name: 'common-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 handlerVisible: {\n type: Boolean,\n required: true,\n },\n rotateElement: {\n type: Function as PropType<(element: PPTElement) => void>,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTElement, command: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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 const cannotRotate = computed(() => ['video', 'audio'].includes(props.elementInfo.type))\n\n return {\n scaleWidth,\n resizeHandlers,\n borderLines,\n cannotRotate,\n }\n },\n})\n","import { render } from \"./CommonElementOperate.vue?vue&type=template&id=474b1c2e&ts=true\"\nimport script from \"./CommonElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./CommonElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2b77dbb0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"href\"]\nconst _hoisted_2 = {\n key: 1,\n class: \"link\"\n}\nconst _hoisted_3 = { class: \"btns\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Divider = _resolveComponent(\"Divider\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"link-handler\",\n style: _normalizeStyle({ top: _ctx.height * _ctx.canvasScale + 10 + 'px' })\n }, [\n (_ctx.link.type === 'web')\n ? (_openBlock(), _createElementBlock(\"a\", {\n key: 0,\n class: \"link\",\n href: _ctx.link.target,\n target: \"_blank\"\n }, _toDisplayString(_ctx.link.target), 9, _hoisted_1))\n : (_openBlock(), _createElementBlock(\"a\", _hoisted_2, \"幻灯片页面 \" + _toDisplayString(_ctx.link.target), 1)),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.openLinkDialog()))\n }, \"更换\"),\n _createVNode(_component_Divider, { type: \"vertical\" }),\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.removeLink(_ctx.elementInfo)))\n }, \"移除\")\n ])\n ], 4))\n}","import { useSlidesStore } from '@/store'\nimport { PPTElement, PPTElementLink } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const setLink = (handleElement: PPTElement, link: PPTElementLink) => {\n const linkRegExp = /^(https?):\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+([\\w\\-.,@?^=%&:\\/~+#]*[\\w\\-@?^=%&\\/~+#])?$/\n if (link.type === 'web' && !linkRegExp.test(link.target)) {\n message.error('不是正确的网页链接地址')\n return false\n }\n const props = { link }\n slidesStore.updateElement({ id: handleElement.id, props })\n addHistorySnapshot()\n\n return true\n }\n\n const removeLink = (handleElement: PPTElement) => {\n slidesStore.removeElementProps({ id: handleElement.id, propName: 'link' })\n addHistorySnapshot()\n }\n\n return {\n setLink,\n removeLink,\n }\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElement, PPTElementLink } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nexport default defineComponent({\n name: 'link-handler',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n link: {\n type: Object as PropType,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\n\n const { removeLink } = useLink()\n\n const height = computed(() => props.elementInfo.type === 'line' ? 0 : props.elementInfo.height)\n\n return {\n canvasScale,\n height,\n removeLink,\n }\n },\n})\n","import { render } from \"./LinkHandler.vue?vue&type=template&id=2b77dbb0&scoped=true&ts=true\"\nimport script from \"./LinkHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkHandler.vue?vue&type=style&index=0&id=2b77dbb0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2b77dbb0\"]])\n\nexport default __exports__","\r\nimport { defineComponent, PropType, computed } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { ElementTypes, PPTElement, PPTLineElement, PPTVideoElement, PPTAudioElement } from '@/types/slides'\r\nimport { OperateLineHandlers, OperateResizeHandlers } 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 TableElementOperate from './TableElementOperate.vue'\r\nimport CommonElementOperate from './CommonElementOperate.vue'\r\nimport LinkHandler from './LinkHandler.vue'\r\n\r\nexport default defineComponent({\r\n name: 'operate',\r\n components: {\r\n LinkHandler,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isSelected: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActive: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: Exclude) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: Exclude, command: OperateResizeHandlers) => void>,\r\n required: true,\r\n },\r\n dragLineElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, command: OperateLineHandlers) => void>,\r\n required: true,\r\n },\r\n openLinkDialog: {\r\n type: Function as PropType<() => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const { canvasScale, toolbarState } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(useSlidesStore())\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.TABLE]: TableElementOperate,\r\n [ElementTypes.CHART]: CommonElementOperate,\r\n [ElementTypes.LATEX]: CommonElementOperate,\r\n [ElementTypes.VIDEO]: CommonElementOperate,\r\n [ElementTypes.AUDIO]: CommonElementOperate,\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 const rotate = computed(() => 'rotate' in props.elementInfo ? props.elementInfo.rotate : 0)\r\n const height = computed(() => 'height' in props.elementInfo ? props.elementInfo.height : 0)\r\n\r\n return {\r\n currentOperateComponent,\r\n canvasScale,\r\n toolbarState,\r\n elementIndexInAnimation,\r\n rotate,\r\n height,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=6abdbdd6&scoped=true&ts=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=6abdbdd6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6abdbdd6\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3adaaa8e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"link-dialog\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = {\n key: 2,\n class: \"preview\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", null, \"预览:\", -1))\nconst _hoisted_6 = { class: \"btns\" }\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Input = _resolveComponent(\"Input\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': _ctx.type === tab.key }]),\n key: tab.key,\n onClick: ($event: any) => (_ctx.type = tab.key)\n }, _toDisplayString(tab.label), 11, _hoisted_3))\n }), 128))\n ]),\n (_ctx.type === 'web')\n ? (_openBlock(), _createBlock(_component_Input, {\n key: 0,\n class: \"input\",\n value: _ctx.address,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.address) = $event)),\n placeholder: \"请输入网页链接地址\"\n }, null, 8, [\"value\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.type === 'slide')\n ? (_openBlock(), _createBlock(_component_Select, {\n key: 1,\n class: \"input\",\n value: _ctx.slideId,\n \"onUpdate:value\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.slideId) = $event))\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: slide.id,\n value: slide.id\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"幻灯片 \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.type === 'slide' && _ctx.selectedSlide)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _hoisted_5,\n _createVNode(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n slide: _ctx.selectedSlide,\n size: 490\n }, null, 8, [\"slide\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Button, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.close())),\n style: {\"margin-right\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.save()))\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ])\n ]))\n}","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElementLink } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\ntype TypeKey = 'web' | 'slide'\ninterface TabItem {\n key: TypeKey;\n label: string;\n}\n\nexport default defineComponent({\n name: 'link-dialog',\n emits: ['close'],\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const { handleElement } = storeToRefs(useMainStore())\n const { slides } = storeToRefs(useSlidesStore())\n\n const type = ref('web')\n const address = ref('')\n const slideId = ref('')\n\n const selectedSlide = computed(() => {\n if (!slideId.value) return null\n\n return slides.value.find(item => item.id === slideId.value) || null\n })\n\n const tabs: TabItem[] = [\n { key: 'web', label: '网页链接' },\n { key: 'slide', label: '幻灯片页面' },\n ]\n\n const { setLink } = useLink()\n\n onMounted(() => {\n if (handleElement.value?.link) {\n if (handleElement.value.link.type === 'web') address.value = handleElement.value.link.target\n else if (handleElement.value.link.type === 'slide') slideId.value = handleElement.value.link.target\n\n type.value = handleElement.value.link.type\n }\n })\n\n const close = () => emit('close')\n\n const save = () => {\n const link: PPTElementLink = {\n type: type.value,\n target: type.value === 'web' ? address.value : slideId.value,\n }\n if (handleElement.value) {\n const success = setLink(handleElement.value, link)\n if (success) close()\n else address.value = ''\n }\n }\n\n return {\n slides,\n tabs,\n type,\n address,\n slideId,\n selectedSlide,\n close,\n save,\n }\n },\n})\n","import { render } from \"./LinkDialog.vue?vue&type=template&id=3adaaa8e&scoped=true&ts=true\"\nimport script from \"./LinkDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkDialog.vue?vue&type=style&index=0&id=3adaaa8e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3adaaa8e\"]])\n\nexport default __exports__","\nimport { defineComponent, provide, ref, watch, watchEffect } from 'vue'\nimport { throttle } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { PPTElement } from '@/types/slides'\nimport { AlignmentLineProps } from '@/types/edit'\nimport { injectKeySlideScale } from '@/types/injectKey'\nimport { removeAllRanges } from '@/utils/selection'\nimport { KEYS } from '@/configs/hotkey'\n\nimport useViewportSize from './hooks/useViewportSize'\nimport useMouseSelection from './hooks/useMouseSelection'\nimport useDropImageOrText from './hooks/useDropImageOrText'\nimport useRotateElement from './hooks/useRotateElement'\nimport useScaleElement from './hooks/useScaleElement'\nimport useSelectElement from './hooks/useSelectElement'\nimport useDragElement from './hooks/useDragElement'\nimport useDragLineElement from './hooks/useDragLineElement'\nimport useInsertFromCreateSelection from './hooks/useInsertFromCreateSelection'\n\nimport useDeleteElement from '@/hooks/useDeleteElement'\nimport useCopyAndPasteElement from '@/hooks/useCopyAndPasteElement'\nimport useSelectAllElement from '@/hooks/useSelectAllElement'\nimport useScaleCanvas from '@/hooks/useScaleCanvas'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\n\nimport EditableElement from './EditableElement.vue'\nimport MouseSelection from './MouseSelection.vue'\nimport ViewportBackground from './ViewportBackground.vue'\nimport AlignmentLine from './AlignmentLine.vue'\nimport ElementCreateSelection from './ElementCreateSelection.vue'\nimport MultiSelectOperate from './Operate/MultiSelectOperate.vue'\nimport Operate from './Operate/index.vue'\nimport LinkDialog from './LinkDialog.vue'\n\nexport default defineComponent({\n name: 'editor-canvas',\n components: {\n EditableElement,\n MouseSelection,\n ViewportBackground,\n AlignmentLine,\n ElementCreateSelection,\n MultiSelectOperate,\n Operate,\n LinkDialog,\n },\n setup() {\n const mainStore = useMainStore()\n const {\n activeElementIdList,\n activeGroupElementId,\n handleElementId,\n editorAreaFocus,\n showGridLines,\n creatingElement,\n canvasScale,\n } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(useSlidesStore())\n const { ctrlKeyState, ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const viewportRef = ref()\n const alignmentLines = ref([])\n\n const linkDialogVisible = ref(false)\n const openLinkDialog = () => linkDialogVisible.value = true\n\n watch(handleElementId, () => {\n mainStore.setActiveGroupElementId('')\n })\n\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 { viewportStyles } = useViewportSize(canvasRef)\n\n useDropImageOrText(canvasRef)\n\n const { mouseSelection, mouseSelectionVisible, mouseSelectionQuadrant, 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 mainStore.setActiveElementIdList([])\n if (!ctrlOrShiftKeyActive.value) updateMouseSelection(e)\n if (!editorAreaFocus.value) mainStore.setEditorareaFocus(true)\n removeAllRanges()\n }\n\n // 移除画布编辑区域焦点\n const removeEditorAreaFocus = () => {\n if (editorAreaFocus.value) mainStore.setEditorareaFocus(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 toggleGridLines = () => {\n mainStore.setGridLinesState(!showGridLines.value)\n }\n\n // 在鼠标绘制的范围插入元素\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(injectKeySlideScale, canvasScale)\n\n return {\n elementList,\n activeElementIdList,\n handleElementId,\n activeGroupElementId,\n canvasRef,\n viewportRef,\n viewportStyles,\n canvasScale,\n mouseSelection,\n mouseSelectionVisible,\n mouseSelectionQuadrant,\n creatingElement,\n alignmentLines,\n linkDialogVisible,\n openLinkDialog,\n handleClickBlankArea,\n removeEditorAreaFocus,\n insertElementFromCreateSelection,\n selectElement,\n rotateElement,\n scaleElement,\n dragLineElement,\n scaleMultiElement,\n handleMousewheelCanvas,\n contextmenus,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=fe9bcf9c&scoped=true&ts=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=fe9bcf9c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-fe9bcf9c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4ae7c9aa\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"canvas-tool\" }\nconst _hoisted_2 = { class: \"left-handler\" }\nconst _hoisted_3 = { class: \"add-element-handler\" }\nconst _hoisted_4 = { class: \"right-handler\" }\nconst _hoisted_5 = { class: \"text\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconBack = _resolveComponent(\"IconBack\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconNext = _resolveComponent(\"IconNext\")!\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_IconPicture = _resolveComponent(\"IconPicture\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_ShapePool = _resolveComponent(\"ShapePool\")!\n const _component_IconGraphicDesign = _resolveComponent(\"IconGraphicDesign\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_LinePool = _resolveComponent(\"LinePool\")!\n const _component_IconConnection = _resolveComponent(\"IconConnection\")!\n const _component_ChartPool = _resolveComponent(\"ChartPool\")!\n const _component_IconChartProportion = _resolveComponent(\"IconChartProportion\")!\n const _component_TableGenerator = _resolveComponent(\"TableGenerator\")!\n const _component_IconInsertTable = _resolveComponent(\"IconInsertTable\")!\n const _component_IconFormula = _resolveComponent(\"IconFormula\")!\n const _component_MediaInput = _resolveComponent(\"MediaInput\")!\n const _component_IconVideoTwo = _resolveComponent(\"IconVideoTwo\")!\n const _component_IconMinus = _resolveComponent(\"IconMinus\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_IconFullScreen = _resolveComponent(\"IconFullScreen\")!\n const _component_LaTeXEditor = _resolveComponent(\"LaTeXEditor\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"撤销\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBack, {\n class: _normalizeClass([\"handler-item\", { 'disable': !_ctx.canUndo }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.undo()))\n }, null, 8, [\"class\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"重做\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconNext, {\n class: _normalizeClass([\"handler-item\", { 'disable': !_ctx.canRedo }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.redo()))\n }, null, 8, [\"class\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入文字\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFontSize, {\n class: \"handler-item\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.drawText()))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_FileInput, {\n onChange: _cache[3] || (_cache[3] = files => _ctx.insertImageElement(files))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入图片\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPicture, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.shapePoolVisible,\n \"onUpdate:visible\": _cache[5] || (_cache[5] = ($event: any) => ((_ctx.shapePoolVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ShapePool, {\n onSelect: _cache[4] || (_cache[4] = shape => _ctx.drawShape(shape))\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入形状\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconGraphicDesign, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.linePoolVisible,\n \"onUpdate:visible\": _cache[7] || (_cache[7] = ($event: any) => ((_ctx.linePoolVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_LinePool, {\n onSelect: _cache[6] || (_cache[6] = line => _ctx.drawLine(line))\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入线条\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconConnection, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.chartPoolVisible,\n \"onUpdate:visible\": _cache[9] || (_cache[9] = ($event: any) => ((_ctx.chartPoolVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ChartPool, {\n onSelect: _cache[8] || (_cache[8] = chart => { _ctx.createChartElement(chart); _ctx.chartPoolVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入图表\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconChartProportion, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.tableGeneratorVisible,\n \"onUpdate:visible\": _cache[12] || (_cache[12] = ($event: any) => ((_ctx.tableGeneratorVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_TableGenerator, {\n onClose: _cache[10] || (_cache[10] = ($event: any) => (_ctx.tableGeneratorVisible = false)),\n onInsert: _cache[11] || (_cache[11] = ({ row, col }) => { _ctx.createTableElement(row, col); _ctx.tableGeneratorVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入表格\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconInsertTable, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入公式\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFormula, {\n class: \"handler-item\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.latexEditorVisible = true))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.mediaInputVisible,\n \"onUpdate:visible\": _cache[17] || (_cache[17] = ($event: any) => ((_ctx.mediaInputVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_MediaInput, {\n onClose: _cache[14] || (_cache[14] = ($event: any) => (_ctx.mediaInputVisible = false)),\n onInsertVideo: _cache[15] || (_cache[15] = src => { _ctx.createVideoElement(src); _ctx.mediaInputVisible = false }),\n onInsertAudio: _cache[16] || (_cache[16] = src => { _ctx.createAudioElement(src); _ctx.mediaInputVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入音视频\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconVideoTwo, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_IconMinus, {\n class: \"handler-item viewport-size\",\n onClick: _cache[18] || (_cache[18] = ($event: any) => (_ctx.scaleCanvas('-')))\n }),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.canvasScalePercentage), 1),\n _createVNode(_component_IconPlus, {\n class: \"handler-item viewport-size\",\n onClick: _cache[19] || (_cache[19] = ($event: any) => (_ctx.scaleCanvas('+')))\n }),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"适配屏幕\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFullScreen, {\n class: \"handler-item viewport-size-adaptation\",\n onClick: _cache[20] || (_cache[20] = ($event: any) => (_ctx.setCanvasPercentage(90)))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _createVNode(_component_Modal, {\n visible: _ctx.latexEditorVisible,\n \"onUpdate:visible\": _cache[23] || (_cache[23] = ($event: any) => ((_ctx.latexEditorVisible) = $event)),\n footer: null,\n centered: \"\",\n width: 880,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_LaTeXEditor, {\n onClose: _cache[21] || (_cache[21] = ($event: any) => (_ctx.latexEditorVisible = false)),\n onUpdate: _cache[22] || (_cache[22] = data => { _ctx.createLatexElement(data); _ctx.latexEditorVisible = false })\n })\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7fdb328c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"shape-pool\" }\nconst _hoisted_2 = { class: \"category-name\" }\nconst _hoisted_3 = { class: \"shape-list\" }\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = {\n overflow: \"visible\",\n width: \"18\",\n height: \"18\"\n}\nconst _hoisted_6 = [\"transform\"]\nconst _hoisted_7 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.shapeList, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"category\",\n key: item.type\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(item.type), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.children, (shape, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"shape-item\",\n key: index\n }, [\n _createElementVNode(\"div\", {\n class: \"shape-content\",\n onClick: ($event: any) => (_ctx.selectShape(shape))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, [\n _createElementVNode(\"g\", {\n transform: `scale(${18 / shape.viewBox[0]}, ${18 / shape.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n class: \"shape-path\",\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n fill: \"transparent\",\n stroke: \"#999\",\n \"stroke-width\": \"2\",\n d: shape.path\n }, null, 8, _hoisted_7)\n ], 8, _hoisted_6)\n ]))\n ], 8, _hoisted_4)\n ]))\n }), 128))\n ])\n ]))\n }), 128))\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { SHAPE_LIST, ShapePoolItem } from '@/configs/shapes'\n\nexport default defineComponent({\n name: 'shape-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const shapeList = SHAPE_LIST\n\n const selectShape = (shape: ShapePoolItem) => {\n emit('select', shape)\n }\n\n return {\n shapeList,\n selectShape,\n }\n },\n})\n","import { render } from \"./ShapePool.vue?vue&type=template&id=7fdb328c&scoped=true&ts=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=7fdb328c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7fdb328c\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7fa1d412\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"line-pool\" }\nconst _hoisted_2 = { class: \"category-name\" }\nconst _hoisted_3 = { class: \"line-list\" }\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = {\n overflow: \"visible\",\n width: \"20\",\n height: \"20\"\n}\nconst _hoisted_6 = [\"d\", \"stroke-dasharray\", \"marker-start\", \"marker-end\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinePointMarker = _resolveComponent(\"LinePointMarker\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.lineList, (item, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"category\",\n key: item.type\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(item.type), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.children, (line, j) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"line-item\",\n key: j\n }, [\n _createElementVNode(\"div\", {\n class: \"line-content\",\n onClick: ($event: any) => (_ctx.selectLine(line))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, [\n _createElementVNode(\"defs\", null, [\n (line.points[0])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 0,\n class: \"line-marker\",\n id: `preset-line-${i}-${j}`,\n position: \"start\",\n type: line.points[0],\n color: \"currentColor\",\n baseSize: 2\n }, null, 8, [\"id\", \"type\"]))\n : _createCommentVNode(\"\", true),\n (line.points[1])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 1,\n class: \"line-marker\",\n id: `preset-line-${i}-${j}`,\n position: \"end\",\n type: line.points[1],\n color: \"currentColor\",\n baseSize: 2\n }, null, 8, [\"id\", \"type\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"path\", {\n class: \"line-path\",\n d: line.path,\n stroke: \"currentColor\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-dasharray\": line.style === 'solid' ? '0, 0' : '4, 1',\n \"marker-start\": line.points[0] ? `url(#${`preset-line-${i}-${j}`}-${line.points[0]}-start)` : '',\n \"marker-end\": line.points[1] ? `url(#${`preset-line-${i}-${j}`}-${line.points[1]}-end)` : ''\n }, null, 8, _hoisted_6)\n ]))\n ], 8, _hoisted_4)\n ]))\n }), 128))\n ])\n ]))\n }), 128))\n ]))\n}","import { LinePoint } from '@/types/slides'\n\n\nexport interface LinePoolItem {\n path: string;\n style: 'solid' | 'dashed';\n points: [LinePoint, LinePoint];\n isBroken?: boolean;\n isCurve?: boolean;\n isCubic?: boolean;\n}\n\ninterface PresetLine {\n type: string;\n children: LinePoolItem[];\n}\n\nexport const LINE_LIST: PresetLine[] = [\n {\n type: '直线',\n children: [\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'dot'] },\n ],\n },\n {\n type: '折线、曲线',\n children: [\n { path: 'M 0 0 L 0 20 L 20 20', style: 'solid', points: ['', 'arrow'], isBroken: true },\n { path: 'M 0 0 Q 0 20 20 20', style: 'solid', points: ['', 'arrow'], isCurve: true },\n { path: 'M 0 0 C 20 0 0 20 20 20', style: 'solid', points: ['', 'arrow'], isCubic: true },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { LINE_LIST, LinePoolItem } from '@/configs/lines'\n\nimport LinePointMarker from '@/views/components/element/LineElement/LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'line-pool',\n emits: ['select'],\n components: {\n LinePointMarker,\n },\n setup(props, { emit }) {\n const lineList = LINE_LIST\n\n const selectLine = (line: LinePoolItem) => {\n emit('select', line)\n }\n\n return {\n lineList,\n selectLine,\n }\n },\n})\n","import { render } from \"./LinePool.vue?vue&type=template&id=7fa1d412&scoped=true&ts=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=7fa1d412&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7fa1d412\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64ca421e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-pool\" }\nconst _hoisted_2 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconChartLine = _resolveComponent(\"IconChartLine\")!\n const _component_IconChartHistogram = _resolveComponent(\"IconChartHistogram\")!\n const _component_IconChartPie = _resolveComponent(\"IconChartPie\")!\n const _component_IconChartHistogramOne = _resolveComponent(\"IconChartHistogramOne\")!\n const _component_IconChartLineArea = _resolveComponent(\"IconChartLineArea\")!\n const _component_IconChartRing = _resolveComponent(\"IconChartRing\")!\n const _component_IconChartScatter = _resolveComponent(\"IconChartScatter\")!\n\n return (_openBlock(), _createElementBlock(\"ul\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.chartList, (chart, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: \"chart-item\",\n key: index\n }, [\n _createElementVNode(\"div\", {\n class: \"chart-content\",\n onClick: ($event: any) => (_ctx.selectChart(chart))\n }, [\n (chart === 'line')\n ? (_openBlock(), _createBlock(_component_IconChartLine, {\n key: 0,\n size: \"24\"\n }))\n : (chart === 'bar')\n ? (_openBlock(), _createBlock(_component_IconChartHistogram, {\n key: 1,\n size: \"24\"\n }))\n : (chart === 'pie')\n ? (_openBlock(), _createBlock(_component_IconChartPie, {\n key: 2,\n size: \"24\"\n }))\n : (chart === 'horizontalBar')\n ? (_openBlock(), _createBlock(_component_IconChartHistogramOne, {\n key: 3,\n size: \"24\"\n }))\n : (chart === 'area')\n ? (_openBlock(), _createBlock(_component_IconChartLineArea, {\n key: 4,\n size: \"24\"\n }))\n : (chart === 'ring')\n ? (_openBlock(), _createBlock(_component_IconChartRing, {\n key: 5,\n size: \"24\"\n }))\n : (chart === 'scatter')\n ? (_openBlock(), _createBlock(_component_IconChartScatter, {\n key: 6,\n size: \"24\"\n }))\n : _createCommentVNode(\"\", true)\n ], 8, _hoisted_2)\n ]))\n }), 128))\n ]))\n}","\nimport { PresetChartType } from '@/types/slides'\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'chart-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const chartList: PresetChartType[] = ['bar', 'horizontalBar', 'line', 'area', 'scatter', 'pie', 'ring']\n\n const selectChart = (chart: PresetChartType) => {\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=64ca421e&scoped=true&ts=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=64ca421e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-64ca421e\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e325ce98\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-generator\" }\nconst _hoisted_2 = { class: \"title\" }\nconst _hoisted_3 = { class: \"lef\" }\nconst _hoisted_4 = [\"onMouseenter\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"custom\"\n}\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"label\",\n style: {\"flex\":\"1\"}\n}, \"行数:\", -1))\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"label\",\n style: {\"flex\":\"1\"}\n}, \"列数:\", -1))\nconst _hoisted_10 = { class: \"btns\" }\nconst _hoisted_11 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, \"表格 \" + _toDisplayString(_ctx.endCell.length ? `${_ctx.endCell[0]} x ${_ctx.endCell[1]}` : ''), 1),\n _createElementVNode(\"div\", {\n class: \"right\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.isCustom = !_ctx.isCustom))\n }, _toDisplayString(_ctx.isCustom ? '返回' : '自定义'), 1)\n ]),\n (!_ctx.isCustom)\n ? (_openBlock(), _createElementBlock(\"table\", {\n key: 0,\n onMouseleave: _cache[1] || (_cache[1] = ($event: any) => (_ctx.endCell = [])),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleClickTable()))\n }, [\n _createElementVNode(\"tbody\", null, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(10, (row) => {\n return _createElementVNode(\"tr\", { key: row }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(10, (col) => {\n return _createElementVNode(\"td\", {\n onMouseenter: ($event: any) => (_ctx.endCell = [row, col]),\n key: col\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"cell\", { 'active': _ctx.endCell.length && row <= _ctx.endCell[0] && col <= _ctx.endCell[1] }])\n }, null, 2)\n ], 40, _hoisted_4)\n }), 64))\n ])\n }), 64))\n ])\n ], 32))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createVNode(_component_InputNumber, {\n min: 1,\n max: 20,\n value: _ctx.customRow,\n \"onUpdate:value\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.customRow) = $event)),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_InputNumber, {\n min: 1,\n max: 20,\n value: _ctx.customCol,\n \"onUpdate:value\": _cache[4] || (_cache[4] = ($event: any) => ((_ctx.customCol) = $event)),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.close()))\n }, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"btn\",\n type: \"primary\",\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.insertCustomTable()))\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n })\n ])\n ]))\n ]))\n}","\nimport { defineComponent, ref } from 'vue'\n\nimport { message } from 'ant-design-vue'\n\nexport default defineComponent({\n name: 'table-generator',\n emits: ['insert', 'close'],\n setup(props, { emit }) {\n const endCell = ref([])\n const customRow = ref(3)\n const customCol = ref(3)\n const isCustom = ref(false)\n\n const handleClickTable = () => {\n if (!endCell.value.length) return\n const [row, col] = endCell.value\n emit('insert', { row, col })\n }\n\n const insertCustomTable = () => {\n if (customRow.value < 1 || customRow.value > 20) return message.warning('行数/列数必须在0~20之间!')\n if (customCol.value < 1 || customCol.value > 20) return message.warning('行数/列数必须在0~20之间!')\n emit('insert', { row: customRow.value, col: customCol.value })\n isCustom.value = false\n }\n\n const close = () => {\n emit('close')\n isCustom.value = false\n }\n\n return {\n endCell,\n customRow,\n customCol,\n handleClickTable,\n insertCustomTable,\n isCustom,\n close,\n }\n },\n})\n","import { render } from \"./TableGenerator.vue?vue&type=template&id=e325ce98&scoped=true&ts=true\"\nimport script from \"./TableGenerator.vue?vue&type=script&lang=ts\"\nexport * from \"./TableGenerator.vue?vue&type=script&lang=ts\"\n\nimport \"./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e325ce98\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-ec37f828\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"media-input\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"btns\" }\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"确认\")\nconst _hoisted_7 = { class: \"btns\" }\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Input = _resolveComponent(\"Input\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': _ctx.type === tab.key }]),\n key: tab.key,\n onClick: ($event: any) => (_ctx.type = tab.key)\n }, _toDisplayString(tab.label), 11, _hoisted_3))\n }), 128))\n ]),\n (_ctx.type === 'video')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_Input, {\n value: _ctx.videoSrc,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.videoSrc) = $event)),\n placeholder: \"请输入视频地址,e.g. https://xxx.mp4\"\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Button, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.close())),\n style: {\"margin-right\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.insertVideo()))\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true),\n (_ctx.type === 'audio')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_Input, {\n value: _ctx.audioSrc,\n \"onUpdate:value\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.audioSrc) = $event)),\n placeholder: \"请输入音频地址,e.g. https://xxx.mp3\"\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_Button, {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.close())),\n style: {\"margin-right\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.insertAudio()))\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, ref } from 'vue'\nimport { message } from 'ant-design-vue'\n\ntype TypeKey = 'video' | 'audio'\ninterface TabItem {\n key: TypeKey;\n label: string;\n}\n\nexport default defineComponent({\n name: 'media-input',\n emits: ['insertVideo', 'insertAudio', 'close'],\n setup(props, { emit }) {\n const type = ref('video')\n\n const videoSrc = ref('https://mazwai.com/videvo_files/video/free/2019-01/small_watermarked/181004_04_Dolphins-Whale_06_preview.webm')\n const audioSrc = ref('https://freesound.org/data/previews/614/614107_11861866-lq.mp3')\n\n const tabs: TabItem[] = [\n { key: 'video', label: '视频' },\n { key: 'audio', label: '音频' },\n ]\n\n const insertVideo = () => {\n if (!videoSrc.value) return message.error('请先输入正确的视频地址')\n emit('insertVideo', videoSrc.value)\n }\n\n const insertAudio = () => {\n if (!audioSrc.value) return message.error('请先输入正确的音频地址')\n emit('insertAudio', audioSrc.value)\n }\n\n const close = () => emit('close')\n\n return {\n type,\n videoSrc,\n audioSrc,\n tabs,\n insertVideo,\n insertAudio,\n close,\n }\n },\n})\n","import { render } from \"./MediaInput.vue?vue&type=template&id=ec37f828&scoped=true&ts=true\"\nimport script from \"./MediaInput.vue?vue&type=script&lang=ts\"\nexport * from \"./MediaInput.vue?vue&type=script&lang=ts\"\n\nimport \"./MediaInput.vue?vue&type=style&index=0&id=ec37f828&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ec37f828\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-129e1afa\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"latex-editor\" }\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"left\" }\nconst _hoisted_4 = { class: \"input-area\" }\nconst _hoisted_5 = { class: \"preview\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"placeholder\"\n}\nconst _hoisted_7 = {\n key: 1,\n class: \"preview-content\"\n}\nconst _hoisted_8 = { class: \"right\" }\nconst _hoisted_9 = { class: \"tabs\" }\nconst _hoisted_10 = [\"onClick\"]\nconst _hoisted_11 = { class: \"content\" }\nconst _hoisted_12 = {\n key: 0,\n class: \"symbol\"\n}\nconst _hoisted_13 = { class: \"symbol-tabs\" }\nconst _hoisted_14 = [\"onClick\"]\nconst _hoisted_15 = { class: \"symbol-pool\" }\nconst _hoisted_16 = [\"onClick\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"formula\"\n}\nconst _hoisted_18 = { class: \"formula-title\" }\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = { class: \"footer\" }\nconst _hoisted_21 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_22 = /*#__PURE__*/_createTextVNode(\"确定\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextArea = _resolveComponent(\"TextArea\")!\n const _component_FormulaContent = _resolveComponent(\"FormulaContent\")!\n const _component_SymbolContent = _resolveComponent(\"SymbolContent\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_TextArea, {\n value: _ctx.latex,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.latex) = $event)),\n placeholder: \"输入 LaTeX 公式\",\n ref: \"textAreaRef\"\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_ctx.latex)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, \"公式预览\"))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(_component_FormulaContent, {\n width: 518,\n height: 138,\n latex: _ctx.latex\n }, null, 8, [\"latex\"])\n ]))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': tab.value === _ctx.toolbarState }]),\n key: tab.value,\n onClick: ($event: any) => (_ctx.toolbarState = tab.value)\n }, _toDisplayString(tab.label), 11, _hoisted_10))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n (_ctx.toolbarState === 'symbol')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolList, (group) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"symbol-tab\", { 'active': _ctx.selectedSymbolKey === group.type }]),\n key: group.type,\n onClick: ($event: any) => (_ctx.selectedSymbolKey = group.type)\n }, _toDisplayString(group.label), 11, _hoisted_14))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolPool, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"symbol-item\",\n key: item.latex,\n onClick: ($event: any) => (_ctx.insertSymbol(item.latex))\n }, [\n _createVNode(_component_SymbolContent, {\n latex: item.latex\n }, null, 8, [\"latex\"])\n ], 8, _hoisted_16))\n }), 128))\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.formulaList, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"formula-item\",\n key: item.label\n }, [\n _createElementVNode(\"div\", _hoisted_18, _toDisplayString(item.label), 1),\n _createElementVNode(\"div\", {\n class: \"formula-item-content\",\n onClick: ($event: any) => (_ctx.latex =item.latex)\n }, [\n _createVNode(_component_FormulaContent, {\n width: 236,\n height: 60,\n latex: item.latex\n }, null, 8, [\"latex\"])\n ], 8, _hoisted_19)\n ]))\n }), 128))\n ]))\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_20, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.close()))\n }, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"btn\",\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.update()))\n }, {\n default: _withCtx(() => [\n _hoisted_22\n ]),\n _: 1\n })\n ])\n ]))\n}","import { hfmath, CONFIG as hfmathConfig } from 'hfmath'\n\nhfmathConfig.SUB_SUP_SCALE = 0.5\n\nexport { hfmath }","export const FORMULA_LIST = [\n {\n label: '高斯公式',\n latex: `\\\\int\\\\int\\\\int _ { \\\\Omega } \\\\left( \\\\frac { \\\\partial {P} } { \\\\partial {x} } + \\\\frac { \\\\partial {Q} } { \\\\partial {y} } + \\\\frac { \\\\partial {R} }{ \\\\partial {z} } \\\\right) \\\\mathrm { d } V = \\\\oint _ { \\\\partial \\\\Omega } ( P \\\\cos \\\\alpha + Q \\\\cos \\\\beta + R \\\\cos \\\\gamma ) \\\\mathrm{ d} S`\n },\n {\n label: '傅里叶级数',\n latex: `f(x) = \\\\frac {a_0} 2 + \\\\sum_{n = 1}^\\\\infty {({a_n}\\\\cos {nx} + {b_n}\\\\sin {nx})}`,\n },\n {\n label: '泰勒展开式',\n latex: `e ^ { x } = 1 + \\\\frac { x } { 1 ! } + \\\\frac { x ^ { 2 } } { 2 ! } + \\\\frac { x ^ { 3 } } { 3 ! } + ... , \\\\quad - \\\\infty < x < \\\\infty`,\n },\n {\n label: '定积分',\n latex: `\\\\lim_ { n \\\\rightarrow + \\\\infty } \\\\sum _ { i = 1 } ^ { n } f \\\\left[ a + \\\\frac { i } { n } ( b - a ) \\\\right] \\\\frac { b - a } { n } = \\\\int _ { a } ^ { b } f ( x ) dx`,\n },\n {\n label: '三角恒等式1',\n latex: `\\\\sin \\\\alpha \\\\pm \\\\sin \\\\beta = 2 \\\\sin \\\\frac { 1 } { 2 } ( \\\\alpha \\\\pm \\\\beta ) \\\\cos \\\\frac { 1 } { 2 } ( \\\\alpha \\\\mp \\\\beta )`,\n },\n {\n label: '三角恒等式2',\n latex: `\\\\cos \\\\alpha + \\\\cos \\\\beta = 2 \\\\cos \\\\frac { 1 } { 2 } ( \\\\alpha + \\\\beta ) \\\\cos \\\\frac { 1 } { 2 } ( \\\\alpha - \\\\beta )`,\n },\n {\n label: '和的展开式',\n latex: `( 1 + x ) ^ { n } = 1 + \\\\frac { n x } { 1 ! } + \\\\frac { n ( n - 1 ) x ^ { 2 } } { 2 ! } + ...`,\n },\n {\n label: '欧拉公式',\n latex: ` e^{ix} = \\\\cos {x} + i\\\\sin {x}`,\n },\n {\n label: '贝努利方程',\n latex: `\\\\frac {dy} {dx} + P(x)y = Q(x) y^n ({n} \\\\not= {0,1})`,\n },\n {\n label: '全微分方程',\n latex: `du(x,y) = P(x,y)dx + Q(x,y)dy = 0`,\n },\n {\n label: '非齐次方程',\n latex: `y = (\\\\int Q(x) e^{\\\\int {P(x)dx}}dx + C)e^{-\\\\int {P(x)dx}}`,\n },\n {\n label: '柯西中值定理',\n latex: `\\\\frac{{f(b) - f(a)}}{{F(b) - F(a)}} = \\\\frac{{f'(\\\\xi )}}{{F'(\\\\xi )}}`,\n },\n {\n label: '拉格朗日中值定理',\n latex: `f(b) - f(a) = f'(\\\\xi )(b - a)`,\n },\n {\n label: '导数公式',\n latex: `(\\\\arcsin x)' = \\\\frac{1}{{\\\\sqrt {1 - x^2} }}`,\n },\n {\n label: '三角函数积分',\n latex: `\\\\int {tgxdx = - \\\\ln \\\\left| {\\\\cos x} \\\\right| + C}`,\n },\n {\n label: '二次曲面',\n latex: `\\\\frac{{{x^2}}}{{{a^2}}} + \\\\frac{{{y^2}}}{{{b^2}}} - \\\\frac{{{z^2}}}{{{c^2}}} = 1`,\n },\n {\n label: '二阶微分',\n latex: `\\\\frac {{d^2}y} {dx^2} + P(x) \\\\frac {dy} {dx} + Q(x)y = f(x)`,\n },\n {\n label: '方向导数',\n latex: `\\\\frac{{\\\\partial f}}{{\\\\partial l}} = \\\\frac{{\\\\partial f}}{{\\\\partial x}}\\\\cos \\\\phi + \\\\frac{{\\\\partial f}}{{\\\\partial y}}\\\\sin \\\\phi`,\n },\n]\n\nexport const SYMBOL_LIST = [\n {\n type: 'operators',\n label: '数学',\n children: [\n { latex: '\\\\cdot' },\n { latex: '\\\\pm' },\n { latex: '\\\\mp' },\n { latex: '+' },\n { latex: '-' },\n { latex: '\\\\times' },\n { latex: '\\\\div' },\n { latex: '<' },\n { latex: '>' },\n { latex: '=' },\n { latex: '\\\\neq\\\\ne' },\n { latex: '\\\\leqq' },\n { latex: '\\\\geqq' },\n { latex: '\\\\leq' },\n { latex: '\\\\geq' },\n { latex: '\\\\propto' },\n { latex: '\\\\sim' },\n { latex: '\\\\equiv' },\n { latex: '\\\\dagger' },\n { latex: '\\\\ddagger' },\n { latex: '\\\\ell' },\n { latex: '\\\\#' },\n { latex: '\\\\$' },\n { latex: '\\\\&' },\n { latex: '\\\\%' },\n { latex: '\\\\langle\\\\rangle' },\n { latex: '()' },\n { latex: '[]' },\n { latex: '\\\\{\\\\}' },\n { latex: '||' },\n { latex: '\\\\|' },\n { latex: '\\\\exists' },\n { latex: '\\\\in' },\n { latex: '\\\\subset' },\n { latex: '\\\\supset' },\n { latex: '\\\\cup' },\n { latex: '\\\\cap' },\n { latex: '\\\\infty' },\n { latex: '\\\\partial' },\n { latex: '\\\\nabla' },\n { latex: '\\\\aleph' },\n { latex: '\\\\wp' },\n { latex: '\\\\therefore' },\n { latex: '\\\\mid' },\n { latex: '\\\\sum' },\n { latex: '\\\\prod' },\n { latex: '\\\\bigoplus' },\n { latex: '\\\\bigodot' },\n { latex: '\\\\int' },\n { latex: '\\\\oint' },\n { latex: '\\\\oplus' },\n { latex: '\\\\odot' },\n { latex: '\\\\perp' },\n { latex: '\\\\angle' },\n { latex: '\\\\triangle' },\n { latex: '\\\\Box' },\n { latex: '\\\\rightarrow' },\n { latex: '\\\\to' },\n { latex: '\\\\leftarrow' },\n { latex: '\\\\gets' },\n { latex: '\\\\circ' },\n { latex: '\\\\bigcirc' },\n { latex: '\\\\bullet' },\n { latex: '\\\\star' },\n { latex: '\\\\diamond' },\n { latex: '\\\\ast' },\n { latex: ',' },\n { latex: '.' },\n { latex: ';' },\n { latex: '!' },\n ],\n },\n {\n type: 'group',\n label: '组合',\n children: [\n { latex: '\\\\frac{a}{b}' },\n { latex: '\\\\frac{dx}{dx}' },\n { latex: '\\\\frac{\\\\partial a}{\\\\partial b}' },\n { latex: '\\\\sqrt{x}' },\n { latex: '\\\\sqrt[n]{x}' },\n { latex: 'x^{n}' },\n { latex: 'x_{n}' },\n { latex: 'x_a^b' },\n { latex: '\\\\int_{a}^{b}' },\n { latex: '\\\\oint_a^b' },\n { latex: '\\\\lim_{a \\\\rightarrow b}' },\n { latex: '\\\\prod_a^b' },\n { latex: '\\\\sum_a^b' },\n { latex: '\\\\left(\\\\begin{array}a \\\\\\\\ b\\\\end{array}\\\\right)' },\n { latex: '\\\\begin{bmatrix}a & b \\\\\\\\ c & d \\\\end{bmatrix}' },\n { latex: '\\\\begin{cases}a & x = 0 \\\\\\\\ b & x > 0\\\\end{cases}' },\n { latex: '\\\\hat{a}' },\n { latex: '\\\\breve{a}' },\n { latex: '\\\\acute{a}' },\n { latex: '\\\\grave{a}' },\n { latex: '\\\\tilde{a}' },\n { latex: '\\\\bar{a}' },\n { latex: '\\\\vec{a}' },\n { latex: '\\\\underline{a}' },\n { latex: '\\\\overline{a}' },\n { latex: '\\\\widehat{ab}' },\n { latex: '\\\\overleftarrow{ab}' },\n { latex: '\\\\overrightarrow{ab}' },\n ],\n },\n {\n type: 'verbatim',\n label: '函数',\n children: [\n { latex: '\\\\log' },\n { latex: '\\\\ln' },\n { latex: '\\\\exp' },\n { latex: '\\\\mod' },\n { latex: '\\\\lim' },\n { latex: '\\\\sin' },\n { latex: '\\\\cos' },\n { latex: '\\\\tan' },\n { latex: '\\\\csc' },\n { latex: '\\\\sec' },\n { latex: '\\\\cot' },\n { latex: '\\\\sinh' },\n { latex: '\\\\cosh' },\n { latex: '\\\\tanh' },\n { latex: '\\\\csch' },\n { latex: '\\\\sech' },\n { latex: '\\\\coth' },\n { latex: '\\\\arcsin' },\n { latex: '\\\\arccos' },\n { latex: '\\\\arctan' },\n { latex: '\\\\arccsc' },\n { latex: '\\\\arcsec' },\n { latex: '\\\\arccot' },\n ],\n },\n {\n type: 'greek',\n label: '希腊字母',\n children: [\n { latex: '\\\\alpha' },\n { latex: '\\\\beta' },\n { latex: '\\\\gamma' },\n { latex: '\\\\delta' },\n { latex: '\\\\varepsilon' },\n { latex: '\\\\zeta' },\n { latex: '\\\\eta' },\n { latex: '\\\\vartheta' },\n { latex: '\\\\iota' },\n { latex: '\\\\kappa' },\n { latex: '\\\\lambda' },\n { latex: '\\\\mu' },\n { latex: '\\\\nu' },\n { latex: '\\\\xi' },\n { latex: '\\\\omicron' },\n { latex: '\\\\pi' },\n { latex: '\\\\rho' },\n { latex: '\\\\sigma' },\n { latex: '\\\\tau' },\n { latex: '\\\\upsilon' },\n { latex: '\\\\varphi' },\n { latex: '\\\\chi' },\n { latex: '\\\\psi' },\n { latex: '\\\\omega' },\n { latex: '\\\\epsilon' },\n { latex: '\\\\theta' },\n { latex: '\\\\phi' },\n { latex: '\\\\varsigma' },\n { latex: '\\\\Alpha' },\n { latex: '\\\\Beta' },\n { latex: '\\\\Gamma' },\n { latex: '\\\\Delta' },\n { latex: '\\\\Epsilon' },\n { latex: '\\\\Zeta' },\n { latex: '\\\\Eta' },\n { latex: '\\\\Theta' },\n { latex: '\\\\Iota' },\n { latex: '\\\\Kappa' },\n { latex: '\\\\Lambda' },\n { latex: '\\\\Mu' },\n { latex: '\\\\Nu' },\n { latex: '\\\\Xi' },\n { latex: '\\\\Omicron' },\n { latex: '\\\\Pi' },\n { latex: '\\\\Rho' },\n { latex: '\\\\Sigma' },\n { latex: '\\\\Tau' },\n { latex: '\\\\Upsilon' },\n { latex: '\\\\Phi' },\n { latex: '\\\\Chi' },\n { latex: '\\\\Psi' },\n { latex: '\\\\Omega' },\n ],\n },\n]","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-cf0ca630\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"transform\"]\nconst _hoisted_3 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n class: \"formula-content\",\n overflow: \"visible\",\n width: _ctx.box.w + 32,\n height: _ctx.box.h + 32,\n stroke: \"#000\",\n \"stroke-width\": \"1\",\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }, [\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.scale}, ${_ctx.scale}) translate(0,0) matrix(1,0,0,1,0,0)`,\n \"transform-origin\": \"0 50%\"\n }, [\n _createElementVNode(\"path\", { d: _ctx.pathd }, null, 8, _hoisted_3)\n ], 8, _hoisted_2)\n ], 8, _hoisted_1))\n}","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { hfmath } from './hfmath'\n\nexport default defineComponent({\n name: 'formula-content',\n props: {\n latex: {\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 },\n setup(props) {\n const box = ref({ x: 0, y: 0, w: 0, h: 0 })\n const pathd = ref('')\n\n watch(() => props.latex, () => {\n const eq = new hfmath(props.latex)\n pathd.value = eq.pathd({})\n box.value = eq.box({})\n }, { immediate: true })\n\n const scale = computed(() => {\n const boxW = box.value.w + 32\n const boxH = box.value.h + 32\n\n if (boxW > props.width || boxH > props.height) {\n if (boxW / boxH > props.width / props.height) return props.width / boxW\n return props.height / boxH\n }\n return 1\n })\n\n return {\n box,\n pathd,\n scale,\n }\n },\n})\n","import { render } from \"./FormulaContent.vue?vue&type=template&id=cf0ca630&scoped=true&ts=true\"\nimport script from \"./FormulaContent.vue?vue&type=script&lang=ts\"\nexport * from \"./FormulaContent.vue?vue&type=script&lang=ts\"\n\nimport \"./FormulaContent.vue?vue&type=style&index=0&id=cf0ca630&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-cf0ca630\"]])\n\nexport default __exports__","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"symbol-content\",\n innerHTML: _ctx.svg\n }, null, 8, _hoisted_1))\n}","\nimport { computed, defineComponent } from 'vue'\nimport { hfmath } from './hfmath'\n\nexport default defineComponent({\n name: 'symbol-content',\n props: {\n latex: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const svg = computed(() => {\n const eq = new hfmath(props.latex)\n return eq.svg({\n SCALE_X: 10,\n SCALE_Y: 10,\n })\n })\n\n return {\n svg,\n }\n },\n})\n","import { render } from \"./SymbolContent.vue?vue&type=template&id=3a83adf0&ts=true\"\nimport script from \"./SymbolContent.vue?vue&type=script&lang=ts\"\nexport * from \"./SymbolContent.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { hfmath } from './hfmath'\nimport { FORMULA_LIST, SYMBOL_LIST } from '@/configs/latex'\n\nimport FormulaContent from './FormulaContent.vue'\nimport SymbolContent from './SymbolContent.vue'\n\nconst tabs = [\n { label: '常用符号', value: 'symbol' },\n { label: '预置公式', value: 'formula' },\n]\n\nexport default defineComponent({\n name: 'latex-editor',\n emits: ['update', 'close'],\n components: {\n FormulaContent,\n SymbolContent,\n },\n props: {\n value: {\n type: String,\n default: '',\n },\n },\n setup(props, { emit }) {\n const latex = ref('')\n const toolbarState = ref('symbol')\n const textAreaRef = ref()\n\n const selectedSymbolKey = ref(SYMBOL_LIST[0].type)\n const symbolPool = computed(() => {\n const selectedSymbol = SYMBOL_LIST.find(item => item.type === selectedSymbolKey.value)\n return selectedSymbol?.children || []\n })\n\n onMounted(() => {\n if (props.value) latex.value = props.value\n })\n\n const update = () => {\n if (!latex.value) return\n\n const eq = new hfmath(latex.value)\n const pathd = eq.pathd({})\n const box = eq.box({})\n \n emit('update', {\n latex: latex.value,\n path: pathd,\n w: box.w + 32,\n h: box.h + 32,\n })\n }\n\n const close = () => emit('close')\n\n const insertSymbol = (latex: string) => {\n if (!textAreaRef.value) return\n textAreaRef.value.focus()\n document.execCommand('insertText', false, latex)\n }\n\n return {\n tabs,\n latex,\n toolbarState,\n selectedSymbolKey,\n formulaList: FORMULA_LIST,\n symbolList: SYMBOL_LIST,\n symbolPool,\n textAreaRef,\n update,\n close,\n insertSymbol,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=129e1afa&scoped=true&ts=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=129e1afa&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-129e1afa\"]])\n\nexport default __exports__","\nimport { defineComponent, computed, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSnapshotStore } 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'\nimport MediaInput from './MediaInput.vue'\nimport LaTeXEditor from '@/components/LaTeXEditor/index.vue'\n\nexport default defineComponent({\n name: 'canvas-tool',\n components: {\n ShapePool,\n LinePool,\n ChartPool,\n TableGenerator,\n MediaInput,\n LaTeXEditor,\n },\n setup() {\n const mainStore = useMainStore()\n const { canvasScale } = storeToRefs(mainStore)\n const { canUndo, canRedo } = storeToRefs(useSnapshotStore())\n\n const canvasScalePercentage = computed(() => parseInt(canvasScale.value * 100 + '') + '%')\n\n const { scaleCanvas, setCanvasPercentage } = useScaleCanvas()\n const { redo, undo } = useHistorySnapshot()\n\n const {\n createImageElement,\n createChartElement,\n createTableElement,\n createLatexElement,\n createVideoElement,\n createAudioElement,\n } = 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 const mediaInputVisible = ref(false)\n const latexEditorVisible = ref(false)\n\n // 绘制文字范围\n const drawText = () => {\n mainStore.setCreatingElement({\n type: 'text',\n })\n }\n\n // 绘制形状范围\n const drawShape = (shape: ShapePoolItem) => {\n mainStore.setCreatingElement({\n type: 'shape',\n data: shape,\n })\n shapePoolVisible.value = false\n }\n\n // 绘制线条路径\n const drawLine = (line: LinePoolItem) => {\n mainStore.setCreatingElement({\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 mediaInputVisible,\n latexEditorVisible,\n drawText,\n drawShape,\n drawLine,\n createChartElement,\n createTableElement,\n createLatexElement,\n createVideoElement,\n createAudioElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=4ae7c9aa&scoped=true&ts=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=4ae7c9aa&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4ae7c9aa\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-ec4c62e4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"add-slide\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\"添加幻灯片\")\nconst _hoisted_3 = { class: \"select-btn\" }\nconst _hoisted_4 = [\"onMousedown\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_LayoutPool = _resolveComponent(\"LayoutPool\")!\n const _component_IconDown = _resolveComponent(\"IconDown\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_Draggable = _resolveComponent(\"Draggable\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"thumbnails\",\n onMousedown: _cache[3] || (_cache[3] = () => _ctx.setThumbnailsFocus(true))\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.createSlide()))\n }, [\n _createVNode(_component_IconPlus, { class: \"icon\" }),\n _hoisted_2\n ]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n placement: \"bottomLeft\",\n visible: _ctx.presetLayoutPopoverVisible,\n \"onUpdate:visible\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.presetLayoutPopoverVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_LayoutPool, {\n onSelect: _cache[1] || (_cache[1] = slide => { _ctx.createSlideByTemplate(slide); _ctx.presetLayoutPopoverVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_IconDown)\n ])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _createVNode(_component_Draggable, {\n class: \"thumbnail-list\",\n modelValue: _ctx.slides,\n animation: 300,\n scroll: true,\n scrollSensitivity: 50,\n setData: null,\n onEnd: _ctx.handleDragEnd,\n itemKey: \"id\"\n }, {\n item: _withCtx(({ element, index }) => [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"thumbnail-item\", {\n 'active': _ctx.slideIndex === index,\n 'selected': _ctx.selectedSlidesIndex.includes(index),\n }]),\n onMousedown: $event => _ctx.handleClickSlideThumbnail($event, index)\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"label\", { 'offset-left': index >= 99 }])\n }, _toDisplayString(_ctx.fillDigit(index + 1, 2)), 3),\n _createVNode(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n slide: element,\n size: 120,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"visible\"])\n ], 42, _hoisted_4)), [\n [_directive_contextmenu, _ctx.contextmenusThumbnailItem]\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onEnd\"])\n ], 32)), [\n [_directive_click_outside, () => _ctx.setThumbnailsFocus(false)],\n [_directive_contextmenu, _ctx.contextmenusThumbnails]\n ])\n}","import { ref, onMounted, onUnmounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\n\nexport default () => {\n const { slides } = storeToRefs(useSlidesStore())\n\n const timer = ref(null)\n const slidesLoadLimit = ref(50)\n\n const loadSlide = () => {\n if (slides.value.length > slidesLoadLimit.value) {\n timer.value = setTimeout(() => {\n slidesLoadLimit.value = slidesLoadLimit.value + 20\n loadSlide()\n }, 600)\n }\n else slidesLoadLimit.value = 9999\n }\n\n onMounted(loadSlide)\n\n onUnmounted(() => {\n if (timer.value) clearTimeout(timer.value)\n })\n\n return {\n slidesLoadLimit,\n }\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-741b366e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"layout-pool\" }\nconst _hoisted_2 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.layouts, (slide) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"layout-item\",\n key: slide.id,\n onClick: ($event: any) => (_ctx.selectSlideTemplate(slide))\n }, [\n _createVNode(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n slide: slide,\n size: 180\n }, null, 8, [\"slide\"])\n ], 8, _hoisted_2))\n }), 128))\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'layout-pool',\n emits: ['select'],\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const { layouts } = storeToRefs(useSlidesStore())\n\n const selectSlideTemplate = (slide: Slide) => {\n emit('select', slide)\n }\n\n return {\n layouts,\n selectSlideTemplate,\n }\n },\n})\n","import { render } from \"./LayoutPool.vue?vue&type=template&id=741b366e&scoped=true&ts=true\"\nimport script from \"./LayoutPool.vue?vue&type=script&lang=ts\"\nexport * from \"./LayoutPool.vue?vue&type=script&lang=ts\"\n\nimport \"./LayoutPool.vue?vue&type=style&index=0&id=741b366e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-741b366e\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { fillDigit } from '@/utils/common'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useScreening from '@/hooks/useScreening'\nimport useLoadSlides from '@/hooks/useLoadSlides'\n\nimport Draggable from 'vuedraggable'\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\nimport LayoutPool from './LayoutPool.vue'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n Draggable,\n ThumbnailSlide,\n LayoutPool,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const keyboardStore = useKeyboardStore()\n const { selectedSlidesIndex: _selectedSlidesIndex, thumbnailsFocus } = storeToRefs(mainStore)\n const { slides, slideIndex } = storeToRefs(slidesStore)\n const { ctrlKeyState, shiftKeyState } = storeToRefs(keyboardStore)\n\n const { slidesLoadLimit } = useLoadSlides()\n\n const selectedSlidesIndex = computed(() => [..._selectedSlidesIndex.value, slideIndex.value])\n\n const presetLayoutPopoverVisible = ref(false)\n\n const {\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n } = useSlideHandler()\n\n // 切换页面\n const changSlideIndex = (index: number) => {\n mainStore.setActiveElementIdList([])\n\n if (slideIndex.value === index) return\n slidesStore.updateSlideIndex(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 mainStore.updateSelectedSlidesIndex(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 mainStore.updateSelectedSlidesIndex(newSelectedSlidesIndex)\n }\n else {\n const newSelectedSlidesIndex = [...selectedSlidesIndex.value, index]\n mainStore.updateSelectedSlidesIndex(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 mainStore.updateSelectedSlidesIndex(newSelectedSlidesIndex)\n changSlideIndex(index)\n }\n // 正常切换页面\n else {\n mainStore.updateSelectedSlidesIndex([])\n changSlideIndex(index)\n }\n }\n\n // 设置缩略图工具栏聚焦状态(只有聚焦状态下,该部分的快捷键才能生效)\n const setThumbnailsFocus = (focus: boolean) => {\n if (thumbnailsFocus.value === focus) return\n mainStore.setThumbnailsFocus(focus)\n\n if (!focus) mainStore.updateSelectedSlidesIndex([])\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 slidesStore.setSlides(_slides)\n slidesStore.updateSlideIndex(newIndex)\n }\n\n const { enterScreening } = useScreening()\n\n const contextmenusThumbnails = (): ContextmenuItem[] => {\n return [\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '开始演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n const contextmenusThumbnailItem = (): ContextmenuItem[] => {\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutSlide,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copySlide,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n { divider: true },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '复制页面',\n subText: 'Ctrl + D',\n handler: copyAndPasteSlide,\n },\n {\n text: '删除页面',\n subText: 'Delete',\n handler: () => deleteSlide(),\n },\n { divider: true },\n {\n text: '从当前页演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n return {\n slides,\n slideIndex,\n selectedSlidesIndex,\n presetLayoutPopoverVisible,\n slidesLoadLimit,\n createSlide,\n createSlideByTemplate,\n setThumbnailsFocus,\n handleClickSlideThumbnail,\n contextmenusThumbnails,\n contextmenusThumbnailItem,\n fillDigit,\n handleDragEnd,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=ec4c62e4&scoped=true&ts=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=ec4c62e4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ec4c62e4\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-84601b0a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"toolbar\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.currentTabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': tab.value === _ctx.toolbarState }]),\n key: tab.value,\n onClick: ($event: any) => (_ctx.setToolbarState(tab.value))\n }, _toDisplayString(tab.label), 11, _hoisted_3))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentPanelComponent)))\n ])\n ]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"element-style-panel\" }\nconst _hoisted_2 = { key: 0 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_ctx.currentPanelComponent)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \" 请先选中要编辑的元素 \"))\n : _createCommentVNode(\"\", true),\n (_ctx.handleElement)\n ? (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentPanelComponent), { key: 1 }))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f5f21464\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"text-style-panel\" }\nconst _hoisted_2 = { class: \"preset-style\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"link-popover\" }\nconst _hoisted_5 = { class: \"btns\" }\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"移除\")\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"确认\")\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"行间距:\", -1))\nconst _hoisted_10 = { class: \"row\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"字间距:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_IconAddText = _resolveComponent(\"IconAddText\")!\n const _component_InputGroup = _resolveComponent(\"InputGroup\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_IconText = _resolveComponent(\"IconText\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconBackgroundColor = _resolveComponent(\"IconBackgroundColor\")!\n const _component_IconFill = _resolveComponent(\"IconFill\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconTextBold = _resolveComponent(\"IconTextBold\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconTextItalic = _resolveComponent(\"IconTextItalic\")!\n const _component_IconTextUnderline = _resolveComponent(\"IconTextUnderline\")!\n const _component_IconStrikethrough = _resolveComponent(\"IconStrikethrough\")!\n const _component_IconFormat = _resolveComponent(\"IconFormat\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n const _component_IconUpOne = _resolveComponent(\"IconUpOne\")!\n const _component_IconDownOne = _resolveComponent(\"IconDownOne\")!\n const _component_IconCode = _resolveComponent(\"IconCode\")!\n const _component_IconQuote = _resolveComponent(\"IconQuote\")!\n const _component_Input = _resolveComponent(\"Input\")!\n const _component_IconLinkOne = _resolveComponent(\"IconLinkOne\")!\n const _component_IconAlignTextLeft = _resolveComponent(\"IconAlignTextLeft\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_IconAlignTextCenter = _resolveComponent(\"IconAlignTextCenter\")!\n const _component_IconAlignTextRight = _resolveComponent(\"IconAlignTextRight\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_IconList = _resolveComponent(\"IconList\")!\n const _component_IconOrderedList = _resolveComponent(\"IconOrderedList\")!\n const _component_IconRowHeight = _resolveComponent(\"IconRowHeight\")!\n const _component_IconFullwidth = _resolveComponent(\"IconFullwidth\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n const _component_ElementOpacity = _resolveComponent(\"ElementOpacity\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.presetStyles, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"preset-style-item\",\n key: item.label,\n style: _normalizeStyle(item.style),\n onClick: ($event: any) => (_ctx.emitBatchRichTextCommand(item.cmd))\n }, _toDisplayString(item.label), 13, _hoisted_3))\n }), 128))\n ]),\n _createVNode(_component_Divider),\n _createVNode(_component_InputGroup, {\n compact: \"\",\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.richTextAttrs.fontname,\n onChange: _cache[0] || (_cache[0] = value => _ctx.emitRichTextCommand('fontname', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFontSize)\n ]),\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Select, {\n style: {\"flex\":\"2\"},\n value: _ctx.richTextAttrs.fontsize,\n onChange: _cache[1] || (_cache[1] = value => _ctx.emitRichTextCommand('fontsize', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconAddText)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fontSizeOptions, (fontsize) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: fontsize,\n value: fontsize\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(fontsize), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.richTextAttrs.color,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = value => _ctx.emitRichTextCommand('color', value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字颜色\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconText),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.richTextAttrs.color })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.richTextAttrs.backcolor,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = value => _ctx.emitRichTextCommand('backcolor', value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字高亮\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBackgroundColor),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.richTextAttrs.backcolor })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.fill,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = value => _ctx.updateFill(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文本框填充\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFill),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.fill })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"加粗\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.bold,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.emitRichTextCommand('bold')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextBold)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"斜体\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.em,\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.emitRichTextCommand('em')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextItalic)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下划线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.underline,\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.emitRichTextCommand('underline')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextUnderline)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.strikethrough,\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.emitRichTextCommand('strikethrough')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconStrikethrough)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"清除格式\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.emitRichTextCommand('clear')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFormat)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"上标\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.superscript,\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.emitRichTextCommand('superscript')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUpOne)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下标\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.subscript,\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.emitRichTextCommand('subscript')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconDownOne)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"行内代码\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.code,\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.emitRichTextCommand('code')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconCode)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"引用\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.blockquote,\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.emitRichTextCommand('blockquote')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconQuote)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"超链接\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, {\n placement: \"bottomRight\",\n trigger: \"click\",\n visible: _ctx.linkPopoverVisible,\n \"onUpdate:visible\": _cache[18] || (_cache[18] = ($event: any) => ((_ctx.linkPopoverVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Input, {\n value: _ctx.link,\n \"onUpdate:value\": _cache[14] || (_cache[14] = ($event: any) => ((_ctx.link) = $event)),\n placeholder: \"请输入超链接\"\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_Button, {\n size: \"small\",\n disabled: !_ctx.richTextAttrs.link,\n onClick: _cache[15] || (_cache[15] = ($event: any) => (_ctx.updateLink())),\n style: {\"margin-right\":\"5px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createVNode(_component_Button, {\n size: \"small\",\n type: \"primary\",\n onClick: _cache[16] || (_cache[16] = ($event: any) => (_ctx.updateLink(_ctx.link)))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n })\n ])\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: !!_ctx.richTextAttrs.link,\n onClick: _cache[17] || (_cache[17] = ($event: any) => (_ctx.openLinkPopover()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconLinkOne)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.richTextAttrs.align,\n onChange: _cache[19] || (_cache[19] = e => _ctx.emitRichTextCommand('align', e.target.value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"left\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"center\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextCenter)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"right\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"项目符号\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.bulletList,\n onClick: _cache[20] || (_cache[20] = ($event: any) => (_ctx.emitRichTextCommand('bulletList')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconList)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"编号\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.orderedList,\n onClick: _cache[21] || (_cache[21] = ($event: any) => (_ctx.emitRichTextCommand('orderedList')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconOrderedList)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.lineHeight,\n onChange: _cache[22] || (_cache[22] = value => _ctx.updateLineHeight(value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconRowHeight)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.lineHeightOptions, (item) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: item,\n value: item\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(item) + \"倍\", 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.wordSpace,\n onChange: _cache[23] || (_cache[23] = value => _ctx.updateWordSpace(value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFullwidth)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.wordSpaceOptions, (item) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: item,\n value: item\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(item) + \"px\", 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOpacity)\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f62a02b6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-opacity\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"不透明度:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Slider = _resolveComponent(\"Slider\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 1,\n step: 0.1,\n value: _ctx.opacity,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateOpacity(value))\n }, null, 8, [\"step\", \"value\"])\n ])\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-opacity',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const opacity = ref(1)\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 if (!handleElement.value) return\n const props = { opacity: value }\n slidesStore.updateElement({ 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=f62a02b6&scoped=true&ts=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=f62a02b6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f62a02b6\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35c4c4a3\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-outline\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"row\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用边框:\", -1))\nconst _hoisted_4 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"边框样式:\", -1))\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"实线边框\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"虚线边框\")\nconst _hoisted_9 = { class: \"row\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"边框颜色:\", -1))\nconst _hoisted_11 = { class: \"row\" }\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"边框粗细:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_ctx.fixed)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasOutline,\n onChange: _cache[0] || (_cache[0] = checked => _ctx.toggleOutline(checked))\n }, null, 8, [\"checked\"])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.hasOutline)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.outline.style,\n onChange: _cache[1] || (_cache[1] = value => _ctx.updateOutline({ style: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"solid\" }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dashed\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.outline.color,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = value => _ctx.updateOutline({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.outline.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createVNode(_component_InputNumber, {\n value: _ctx.outline.width,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateOutline({ width: value })),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlatte = _resolveComponent(\"IconPlatte\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createBlock(_component_Button, { class: \"color-btn\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.color })\n }, null, 4),\n _createVNode(_component_IconPlatte, { class: \"color-btn-icon\" })\n ]),\n _: 1\n }))\n}","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\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=dffe32bc&scoped=true&ts=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=dffe32bc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-dffe32bc\"]])\n\nexport default __exports__","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { 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 slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\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 if (!handleElement.value) return\n const props = { outline: { ...outline.value, ...outlineProps } }\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const toggleOutline = (checked: boolean) => {\n if (!handleElement.value) return\n if (checked) {\n const _outline: PPTElementOutline = { width: 2, color: '#000', style: 'solid' }\n slidesStore.updateElement({ id: handleElement.value.id, props: { outline: _outline } })\n }\n else {\n slidesStore.removeElementProps({ 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=35c4c4a3&scoped=true&ts=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=35c4c4a3&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-35c4c4a3\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-73616cd6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-shadow\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用阴影:\", -1))\nconst _hoisted_4 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"水平阴影:\", -1))\nconst _hoisted_7 = { class: \"row\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"垂直阴影:\", -1))\nconst _hoisted_9 = { class: \"row\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"模糊距离:\", -1))\nconst _hoisted_11 = { class: \"row\" }\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"阴影颜色:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasShadow,\n onChange: _cache[0] || (_cache[0] = checked => _ctx.toggleShadow(checked))\n }, null, 8, [\"checked\"])\n ])\n ]),\n (_ctx.hasShadow && _ctx.shadow)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 10,\n step: 1,\n value: _ctx.shadow.h,\n onChange: _cache[1] || (_cache[1] = value => _ctx.updateShadow({ h: value }))\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 10,\n step: 1,\n value: _ctx.shadow.v,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateShadow({ v: value }))\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 1,\n max: 20,\n step: 1,\n value: _ctx.shadow.blur,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateShadow({ blur: value }))\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.shadow.color,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = value => _ctx.updateShadow({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.shadow.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { 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 slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\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 if (!handleElement.value || !shadow.value) return\n const _shadow = { ...shadow.value, ...shadowProps }\n slidesStore.updateElement({ id: handleElement.value.id, props: { shadow: _shadow } })\n addHistorySnapshot()\n }\n\n const toggleShadow = (checked: boolean) => {\n if (!handleElement.value) return\n if (checked) {\n const _shadow: PPTElementShadow = { h: 1, v: 1, blur: 2, color: '#000' }\n slidesStore.updateElement({ id: handleElement.value.id, props: { shadow: _shadow } })\n }\n else {\n slidesStore.removeElementProps({ 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=73616cd6&scoped=true&ts=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=73616cd6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-73616cd6\"]])\n\nexport default __exports__","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport { message } from 'ant-design-vue'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\n\nconst presetStyles = [\n {\n label: '大标题',\n style: {\n fontSize: '26px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '48px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '小标题',\n style: {\n fontSize: '22px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '36px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '正文',\n style: {\n fontSize: '20px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '20px' },\n ],\n },\n {\n label: '正文[小]',\n style: {\n fontSize: '18px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '18px' },\n ],\n },\n {\n label: '注释 1',\n style: {\n fontSize: '16px',\n fontStyle: 'italic',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'em' },\n ],\n },\n {\n label: '注释 2',\n style: {\n fontSize: '16px',\n textDecoration: 'underline',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'underline' },\n ],\n },\n]\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'text-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId, richTextAttrs, availableFonts } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\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 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 updateLineHeight = (value: number) => {\n updateElement({ lineHeight: value })\n }\n\n // 设置字间距\n const updateWordSpace = (value: number) => {\n updateElement({ wordSpace: value })\n }\n\n // 设置文本框填充\n const updateFill = (value: string) => {\n updateElement({ fill: value })\n }\n\n // 发射富文本设置命令\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n // 发射富文本设置命令(批量)\n const emitBatchRichTextCommand = (payload: RichTextCommand[]) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, payload)\n }\n\n // 设置富文本超链接\n const link = ref('')\n const linkPopoverVisible = ref(false)\n\n watch(richTextAttrs, () => linkPopoverVisible.value = false)\n\n const openLinkPopover = () => {\n link.value = richTextAttrs.value.link\n linkPopoverVisible.value = true\n }\n const updateLink = (link: string) => {\n if (link) {\n const linkRegExp = /^(https?):\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+([\\w\\-.,@?^=%&:\\/~+#]*[\\w\\-@?^=%&\\/~+#])?$/\n if (!linkRegExp.test(link)) return message.error('不是正确的网页链接地址')\n }\n emitRichTextCommand('link', link)\n linkPopoverVisible.value = false\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 link,\n linkPopoverVisible,\n openLinkPopover,\n updateLink,\n }\n },\n})\n","import { render } from \"./TextStylePanel.vue?vue&type=template&id=f5f21464&scoped=true&ts=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=f5f21464&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f5f21464\"]])\n\nexport default __exports__","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64e5a614\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"image-style-panel\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\" 裁剪图片\")\nconst _hoisted_3 = { class: \"clip\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"按形状:\", -1))\nconst _hoisted_5 = { class: \"shape-clip\" }\nconst _hoisted_6 = [\"onClick\"]\nconst _hoisted_7 = {\n key: 0,\n class: \"title\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\" 替换图片\")\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\" 重置样式\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\" 设为背景\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementFlip = _resolveComponent(\"ElementFlip\")!\n const _component_IconTailoring = _resolveComponent(\"IconTailoring\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconDown = _resolveComponent(\"IconDown\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ElementFilter = _resolveComponent(\"ElementFilter\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n const _component_IconTransform = _resolveComponent(\"IconTransform\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_IconUndo = _resolveComponent(\"IconUndo\")!\n const _component_IconTheme = _resolveComponent(\"IconTheme\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"origin-image\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.handleElement.src})` })\n }, null, 4),\n _createVNode(_component_ElementFlip),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"5\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.clipImage()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTailoring, { class: \"btn-icon\" }),\n _hoisted_2\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.clipPanelVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.clipPanelVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.shapeClipPathOptions, (item, key) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"shape-clip-item\",\n key: key,\n onClick: ($event: any) => (_ctx.presetImageClip(key))\n }, [\n _createElementVNode(\"div\", {\n class: \"shape\",\n style: _normalizeStyle({ clipPath: item.style })\n }, null, 4)\n ], 8, _hoisted_6))\n }), 128))\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.ratioClipOptions, (type) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: type.label\n }, [\n (type.label)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"按\" + _toDisplayString(type.label) + \":\", 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(type.children, (item) => {\n return (_openBlock(), _createBlock(_component_Button, {\n style: {\"flex\":\"1\"},\n key: item.key,\n onClick: ($event: any) => (_ctx.presetImageClip('rect', item.ratio))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(item.key), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n }), 128))\n ]),\n _: 2\n }, 1024)\n ], 64))\n }), 128))\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"no-padding\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconDown)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementFilter),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow),\n _createVNode(_component_Divider),\n _createVNode(_component_FileInput, {\n onChange: _cache[2] || (_cache[2] = files => _ctx.replaceImage(files))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, { class: \"full-width-btn\" }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTransform, { class: \"btn-icon\" }),\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"full-width-btn\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.resetImage()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUndo, { class: \"btn-icon\" }),\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"full-width-btn\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.setBackgroundImage()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTheme, { class: \"btn-icon\" }),\n _hoisted_10\n ]),\n _: 1\n })\n ]))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7bd50f1a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-flip\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\" 垂直翻转\")\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\" 水平翻转\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconFlipVertically = _resolveComponent(\"IconFlipVertically\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconFlipHorizontally = _resolveComponent(\"IconFlipHorizontally\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.flipV,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.updateFlip({ flipV: !_ctx.flipV })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFlipVertically),\n _hoisted_2\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.flipH,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.updateFlip({ flipH: !_ctx.flipH })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFlipHorizontally),\n _hoisted_3\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n })\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { ImageOrShapeFlip } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-flip',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const flipH = ref(false)\n const flipV = ref(false)\n\n watch(handleElement, () => {\n if (handleElement.value && (handleElement.value.type === 'image' || handleElement.value.type === 'shape')) {\n flipH.value = !!handleElement.value.flipH\n flipV.value = !!handleElement.value.flipV\n }\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateFlip = (flipProps: ImageOrShapeFlip) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ 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=7bd50f1a&scoped=true&ts=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=7bd50f1a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7bd50f1a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95955a74\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-filter\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用滤镜:\", -1))\nconst _hoisted_4 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = {\n key: 0,\n class: \"filter\"\n}\nconst _hoisted_6 = { class: \"name\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasFilters,\n onChange: _cache[0] || (_cache[0] = checked => _ctx.toggleFilters(checked))\n }, null, 8, [\"checked\"])\n ])\n ]),\n (_ctx.hasFilters)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.filterOptions, (filter) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"filter-item\",\n key: filter.key\n }, [\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(filter.label), 1),\n _createVNode(_component_Slider, {\n class: \"filter-slider\",\n max: filter.max,\n min: 0,\n step: filter.step,\n value: filter.value,\n onChange: value => _ctx.updateFilter(filter, value)\n }, null, 8, [\"max\", \"step\", \"value\", \"onChange\"])\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTImageElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\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\nexport default defineComponent({\n name: 'element-filter',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(useMainStore())\n\n const filterOptions = ref(JSON.parse(JSON.stringify(defaultFilters)))\n const hasFilters = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\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 hasFilters.value = true\n }\n else {\n filterOptions.value = JSON.parse(JSON.stringify(defaultFilters))\n hasFilters.value = false\n }\n }, { deep: true, immediate: true })\n\n // 设置滤镜\n const updateFilter = (filter: FilterOption, value: number) => {\n const _handleElement = handleElement.value as PPTImageElement\n \n const originFilters = _handleElement.filters || {}\n const filters = { ...originFilters, [filter.key]: `${value}${filter.unit}` }\n slidesStore.updateElement({ id: handleElementId.value, props: { filters } })\n addHistorySnapshot()\n }\n\n const toggleFilters = (checked: boolean) => {\n if (!handleElement.value) return\n if (checked) {\n slidesStore.updateElement({ id: handleElement.value.id, props: { filters: {} } })\n }\n else {\n slidesStore.removeElementProps({ id: handleElement.value.id, propName: 'filters' })\n }\n addHistorySnapshot()\n }\n\n return {\n filterOptions,\n hasFilters,\n toggleFilters,\n updateFilter,\n }\n },\n})\n","import { render } from \"./ElementFilter.vue?vue&type=template&id=95955a74&scoped=true&ts=true\"\nimport script from \"./ElementFilter.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementFilter.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementFilter.vue?vue&type=style&index=0&id=95955a74&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-95955a74\"]])\n\nexport default __exports__","\nimport { defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTImageElement, SlideBackground } 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'\nimport ElementFilter from '../common/ElementFilter.vue'\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 ElementFilter,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\n\n const clipPanelVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 打开自由裁剪\n const clipImage = () => {\n mainStore.setClipingImageElementId(handleElementId.value)\n clipPanelVisible.value = false\n }\n\n // 获取原始图片的位置大小\n const getImageElementDataBeforeClip = () => {\n const _handleElement = handleElement.value as PPTImageElement\n\n // 图片当前的位置大小和裁剪范围\n const imgWidth = _handleElement.width\n const imgHeight = _handleElement.height\n const imgLeft = _handleElement.left\n const imgTop = _handleElement.top\n const originClipRange: [[number, number], [number, number]] = _handleElement.clip ? _handleElement.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 _handleElement = handleElement.value as PPTImageElement\n\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: [[number, number], [number, number]]\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 slidesStore.updateElement({\n id: handleElementId.value,\n props: {\n clip: { ..._handleElement.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 slidesStore.updateElement({\n id: handleElementId.value,\n props: {\n clip: { ..._handleElement.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 slidesStore.updateElement({ id: handleElementId.value, props })\n })\n addHistorySnapshot()\n }\n\n // 重置图片:清除全部样式\n const resetImage = () => {\n const _handleElement = handleElement.value as PPTImageElement\n\n if (_handleElement.clip) {\n const {\n originWidth,\n originHeight,\n originLeft,\n originTop,\n } = getImageElementDataBeforeClip()\n\n slidesStore.updateElement({\n id: handleElementId.value,\n props: {\n left: originLeft,\n top: originTop,\n width: originWidth,\n height: originHeight,\n },\n })\n }\n\n slidesStore.removeElementProps({\n id: handleElementId.value,\n propName: ['clip', 'outline', 'flip', 'shadow', 'filters'],\n })\n addHistorySnapshot()\n }\n\n // 将图片设置为背景\n const setBackgroundImage = () => {\n const _handleElement = handleElement.value as PPTImageElement\n\n const background: SlideBackground = {\n ...currentSlide.value.background,\n type: 'image',\n image: _handleElement.src,\n imageSize: 'cover',\n }\n slidesStore.updateSlide({ background })\n addHistorySnapshot()\n }\n\n return {\n clipPanelVisible,\n shapeClipPathOptions,\n ratioClipOptions,\n handleElement,\n clipImage,\n presetImageClip,\n replaceImage,\n resetImage,\n setBackgroundImage,\n }\n },\n})\n","import { render } from \"./ImageStylePanel.vue?vue&type=template&id=64e5a614&scoped=true&ts=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=64e5a614&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-64e5a614\"]])\n\nexport default __exports__","import { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, Fragment as _Fragment, renderList as _renderList, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0e201fca\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"shape-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\"纯色填充\")\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"渐变填充\")\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"线性渐变\")\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"径向渐变\")\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"起点颜色:\", -1))\nconst _hoisted_10 = { class: \"row\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"终点颜色:\", -1))\nconst _hoisted_12 = {\n key: 0,\n class: \"row\"\n}\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"渐变角度:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_ElementFlip = _resolveComponent(\"ElementFlip\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_IconAddText = _resolveComponent(\"IconAddText\")!\n const _component_InputGroup = _resolveComponent(\"InputGroup\")!\n const _component_IconText = _resolveComponent(\"IconText\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconTextBold = _resolveComponent(\"IconTextBold\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconTextItalic = _resolveComponent(\"IconTextItalic\")!\n const _component_IconTextUnderline = _resolveComponent(\"IconTextUnderline\")!\n const _component_IconFormat = _resolveComponent(\"IconFormat\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n const _component_IconAlignTextLeft = _resolveComponent(\"IconAlignTextLeft\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_IconAlignTextCenter = _resolveComponent(\"IconAlignTextCenter\")!\n const _component_IconAlignTextRight = _resolveComponent(\"IconAlignTextRight\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_IconAlignTextTopOne = _resolveComponent(\"IconAlignTextTopOne\")!\n const _component_IconAlignTextMiddleOne = _resolveComponent(\"IconAlignTextMiddleOne\")!\n const _component_IconAlignTextBottomOne = _resolveComponent(\"IconAlignTextBottomOne\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n const _component_ElementOpacity = _resolveComponent(\"ElementOpacity\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Select, {\n style: {\"flex\":\"10\"},\n value: _ctx.fillType,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateFillType(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"fill\" }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"gradient\" }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _hoisted_5,\n (_ctx.fillType === 'fill')\n ? (_openBlock(), _createBlock(_component_Popover, {\n key: 0,\n trigger: \"click\"\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.fill,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = value => _ctx.updateFill(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.fill,\n style: {\"flex\":\"10\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(_component_Select, {\n key: 1,\n style: {\"flex\":\"10\"},\n value: _ctx.gradient.type,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateGradient({ type: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"linear\" }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"radial\" }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]))\n ]),\n (_ctx.fillType === 'gradient')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.gradient.color[0],\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = value => _ctx.updateGradient({ color: [value, _ctx.gradient.color[1]] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.gradient.color[0],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.gradient.color[1],\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = value => _ctx.updateGradient({ color: [_ctx.gradient.color[0], value] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.gradient.color[1],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n (_ctx.gradient.type === 'linear')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _hoisted_13,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 360,\n step: 15,\n value: _ctx.gradient.rotate,\n onChange: _cache[5] || (_cache[5] = value => _ctx.updateGradient({ rotate: value }))\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ElementFlip),\n _createVNode(_component_Divider),\n (_ctx.showTextTools)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_InputGroup, {\n compact: \"\",\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.richTextAttrs.fontname,\n onChange: _cache[6] || (_cache[6] = value => _ctx.emitRichTextCommand('fontname', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFontSize)\n ]),\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Select, {\n style: {\"flex\":\"2\"},\n value: _ctx.richTextAttrs.fontsize,\n onChange: _cache[7] || (_cache[7] = value => _ctx.emitRichTextCommand('fontsize', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconAddText)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fontSizeOptions, (fontsize) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: fontsize,\n value: fontsize\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(fontsize), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.richTextAttrs.color,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = value => _ctx.emitRichTextCommand('color', value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字颜色\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconText),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.richTextAttrs.color })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"加粗\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.bold,\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.emitRichTextCommand('bold')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextBold)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"斜体\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.em,\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.emitRichTextCommand('em')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextItalic)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下划线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.underline,\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.emitRichTextCommand('underline')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextUnderline)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"清除格式\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.emitRichTextCommand('clear')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFormat)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.richTextAttrs.align,\n onChange: _cache[13] || (_cache[13] = e => _ctx.emitRichTextCommand('align', e.target.value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"left\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"center\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextCenter)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"right\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.textAlign,\n onChange: _cache[14] || (_cache[14] = e => _ctx.updateTextAlign(e.target.value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"顶对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"top\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextTopOne)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"middle\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextMiddleOne)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"底对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"bottom\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextBottomOne)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Divider)\n ], 64))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOpacity)\n ]))\n}","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTShapeElement, ShapeGradient, ShapeText } from '@/types/slides'\nimport { WEB_FONTS } from '@/configs/font'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ElementFlip from '../common/ElementFlip.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'shape-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n ElementFlip,\n ColorButton,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId, editingShapeElementId, richTextAttrs, availableFonts } = storeToRefs(mainStore)\n\n const showTextTools = computed(() => editingShapeElementId.value === handleElementId.value)\n\n const fill = ref()\n const gradient = ref()\n const fillType = ref('fill')\n const textAlign = ref('middle')\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'shape') return\n\n fill.value = handleElement.value.fill || '#000'\n gradient.value = handleElement.value.gradient || { type: 'linear', rotate: 0, color: [fill.value, '#fff'] }\n fillType.value = handleElement.value.gradient ? 'gradient' : 'fill'\n textAlign.value = handleElement.value?.text?.align || 'middle'\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置填充类型:渐变、纯色\n const updateFillType = (type: 'gradient' | 'fill') => {\n if (type === 'fill') {\n slidesStore.removeElementProps({ id: handleElementId.value, propName: 'gradient' })\n addHistorySnapshot()\n }\n else updateElement({ gradient: gradient.value })\n }\n\n // 设置渐变填充\n const updateGradient = (gradientProps: Partial) => {\n if (!gradient.value) return\n const _gradient: ShapeGradient = { ...gradient.value, ...gradientProps }\n updateElement({ gradient: _gradient })\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n updateElement({ fill: value })\n }\n\n const updateTextAlign = (align: 'top' | 'middle' | 'bottom') => {\n const _handleElement = handleElement.value as PPTShapeElement\n \n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n const _text = _handleElement.text || defaultText\n updateElement({ text: { ..._text, align } })\n }\n\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n '36px', '40px', '44px', '48px', '54px', '60px', '66px', '72px', '76px',\n '80px', '88px', '96px', '104px', '112px', '120px',\n ]\n\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n return {\n fill,\n gradient,\n fillType,\n textAlign,\n richTextAttrs,\n availableFonts,\n fontSizeOptions,\n webFonts,\n showTextTools,\n emitRichTextCommand,\n updateFillType,\n updateFill,\n updateGradient,\n updateTextAlign,\n }\n },\n})\n","import { render } from \"./ShapeStylePanel.vue?vue&type=template&id=0e201fca&scoped=true&ts=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=0e201fca&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0e201fca\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-cbc4d7fa\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"line-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"线条样式:\", -1))\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"实线\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"虚线\")\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"线条颜色:\", -1))\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"线条宽度:\", -1))\nconst _hoisted_10 = { class: \"row\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"起点样式:\", -1))\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"无\")\nconst _hoisted_13 = /*#__PURE__*/_createTextVNode(\"箭头\")\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\"圆点\")\nconst _hoisted_15 = { class: \"row\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"终点样式:\", -1))\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"无\")\nconst _hoisted_18 = /*#__PURE__*/_createTextVNode(\"箭头\")\nconst _hoisted_19 = /*#__PURE__*/_createTextVNode(\"圆点\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.handleElement.style,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateLine({ style: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"solid\" }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dashed\" }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.handleElement.color,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = value => _ctx.updateLine({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.handleElement.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_InputNumber, {\n value: _ctx.handleElement.width,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateLine({ width: value })),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.handleElement.points[0],\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateLine({ points: [value, _ctx.handleElement.points[1]] }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"\" }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"arrow\" }, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dot\" }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _hoisted_16,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.handleElement.points[1],\n onChange: _cache[4] || (_cache[4] = value => _ctx.updateLine({ points: [_ctx.handleElement.points[0], value] }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"\" }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"arrow\" }, {\n default: _withCtx(() => [\n _hoisted_18\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dot\" }, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow)\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateLine = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ 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=cbc4d7fa&scoped=true&ts=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=cbc4d7fa&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-cbc4d7fa\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, toDisplayString as _toDisplayString, withModifiers as _withModifiers, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a3169a0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-style-panel\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\" 编辑图表数据 \")\nconst _hoisted_3 = { class: \"row\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"面积图样式\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"散点图样式\")\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"使用平滑曲线\")\nconst _hoisted_8 = {\n key: 1,\n class: \"row\"\n}\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"条形图样式\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\"堆叠样式\")\nconst _hoisted_11 = {\n key: 2,\n class: \"row\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"环形图样式\")\nconst _hoisted_13 = { class: \"row\" }\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"图例:\", -1))\nconst _hoisted_15 = /*#__PURE__*/_createTextVNode(\"不显示\")\nconst _hoisted_16 = /*#__PURE__*/_createTextVNode(\"显示在上方\")\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"显示在下方\")\nconst _hoisted_18 = { class: \"row\" }\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"背景填充:\", -1))\nconst _hoisted_20 = { class: \"row\" }\nconst _hoisted_21 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"网格颜色:\", -1))\nconst _hoisted_22 = { style: {\"flex\":\"2\"} }\nconst _hoisted_23 = {\n class: \"color-btn-wrap\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_24 = [\"onClick\"]\nconst _hoisted_25 = { class: \"preset-themes\" }\nconst _hoisted_26 = [\"onClick\", \"onMouseenter\"]\nconst _hoisted_27 = /*#__PURE__*/_createTextVNode(\"推荐主题\")\nconst _hoisted_28 = /*#__PURE__*/_createTextVNode(\" 添加主题色 \")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconEdit = _resolveComponent(\"IconEdit\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_Checkbox = _resolveComponent(\"Checkbox\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconCloseSmall = _resolveComponent(\"IconCloseSmall\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ChartDataEditor = _resolveComponent(\"ChartDataEditor\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Button, {\n class: \"full-width-btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.chartDataEditorVisible = true))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconEdit, { class: \"btn-icon\" }),\n _hoisted_2\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n (_ctx.handleElement.chartType === 'line')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[1] || (_cache[1] = e => _ctx.updateOptions({ showArea: e.target.checked })),\n checked: _ctx.showArea,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[2] || (_cache[2] = e => _ctx.updateOptions({ showLine: !e.target.checked })),\n checked: !_ctx.showLine,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[3] || (_cache[3] = e => _ctx.updateOptions({ lineSmooth: e.target.checked })),\n checked: _ctx.lineSmooth\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"checked\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true),\n (_ctx.handleElement.chartType === 'bar')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[4] || (_cache[4] = e => _ctx.updateOptions({ horizontalBars: e.target.checked })),\n checked: _ctx.horizontalBars\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[5] || (_cache[5] = e => _ctx.updateOptions({ stackBars: e.target.checked })),\n checked: _ctx.stackBars\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.handleElement.chartType === 'pie')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[6] || (_cache[6] = e => _ctx.updateOptions({ donut: e.target.checked })),\n checked: _ctx.donut\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_13, [\n _hoisted_14,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.legend,\n onChange: _cache[7] || (_cache[7] = value => _ctx.updateLegend(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"\" }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"top\" }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"bottom\" }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_18, [\n _hoisted_19,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.fill,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = value => _ctx.updateFill(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.fill,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_20, [\n _hoisted_21,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.gridColor,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = value => _ctx.updateGridColor(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.gridColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_Divider),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.themeColor, (color, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"row\",\n key: index\n }, [\n _createElementVNode(\"div\", _hoisted_22, _toDisplayString(index === 0 ? '主题配色:' : ''), 1),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: color,\n \"onUpdate:modelValue\": value => _ctx.updateTheme(value, index)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\"])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_23, [\n _createVNode(_component_ColorButton, {\n color: color,\n style: {\"width\":\"100%\"}\n }, null, 8, [\"color\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除\"\n }, {\n default: _withCtx(() => [\n (index !== 0)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"delete-color-btn\",\n onClick: _withModifiers(($event: any) => (_ctx.deleteThemeColor(index)), [\"stop\"])\n }, [\n _createVNode(_component_IconCloseSmall)\n ], 8, _hoisted_24))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1032, [\"mouseEnterDelay\"])\n ])\n ]),\n _: 2\n }, 1024)\n ]))\n }), 128)),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.presetThemesVisible,\n \"onUpdate:visible\": _cache[11] || (_cache[11] = ($event: any) => ((_ctx.presetThemesVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_25, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.presetChartThemes, (item, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"preset-theme\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item, (color, itemIndex) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"preset-theme-color\", { 'select': _ctx.presetThemeColorHoverIndex[0] === index && itemIndex <= _ctx.presetThemeColorHoverIndex[1] }]),\n key: color,\n style: _normalizeStyle({ backgroundColor: color }),\n onClick: ($event: any) => (_ctx.applyPresetTheme(item, itemIndex)),\n onMouseenter: ($event: any) => (_ctx.presetThemeColorHoverIndex = [index, itemIndex]),\n onMouseleave: _cache[10] || (_cache[10] = ($event: any) => (_ctx.presetThemeColorHoverIndex = [-1, -1]))\n }, null, 46, _hoisted_26))\n }), 128))\n ]))\n }), 128))\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"no-padding\",\n style: {\"flex\":\"2\"}\n }, {\n default: _withCtx(() => [\n _hoisted_27\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Button, {\n class: \"no-padding\",\n disabled: _ctx.themeColor.length >= 10,\n style: {\"flex\":\"3\"},\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.addThemeColor()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlus, { class: \"btn-icon\" }),\n _hoisted_28\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Modal, {\n visible: _ctx.chartDataEditorVisible,\n \"onUpdate:visible\": _cache[15] || (_cache[15] = ($event: any) => ((_ctx.chartDataEditorVisible) = $event)),\n footer: null,\n centered: \"\",\n closable: false,\n width: 648,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_ChartDataEditor, {\n data: _ctx.handleElement.data,\n onClose: _cache[13] || (_cache[13] = ($event: any) => (_ctx.chartDataEditorVisible = false)),\n onSave: _cache[14] || (_cache[14] = value => _ctx.updateData(value))\n }, null, 8, [\"data\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, withModifiers as _withModifiers, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9a62f784\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-data-editor\" }\nconst _hoisted_2 = { class: \"editor-content\" }\nconst _hoisted_3 = { class: \"range-box\" }\nconst _hoisted_4 = [\"id\", \"onFocus\", \"onPaste\"]\nconst _hoisted_5 = { class: \"btns\" }\nconst _hoisted_6 = { class: \"left\" }\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"清空\")\nconst _hoisted_8 = { class: \"right\" }\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"temp-range\",\n style: _normalizeStyle({\n width: _ctx.tempRangeSize.width + 'px',\n height: _ctx.tempRangeSize.height + 'px',\n })\n }, null, 4),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.rangeLines, (line) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(['range-line', line.type]),\n key: line.type,\n style: _normalizeStyle(line.style)\n }, null, 6))\n }), 128)),\n _createElementVNode(\"div\", {\n class: \"resizable\",\n style: _normalizeStyle(_ctx.resizablePointStyle),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.changeSelectRange($event)), [\"stop\"]))\n }, null, 36)\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"tbody\", null, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(31, (rowIndex) => {\n return _createElementVNode(\"tr\", { key: rowIndex }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(7, (colIndex) => {\n return _createElementVNode(\"td\", {\n key: colIndex,\n class: _normalizeClass({ 'head': (colIndex === 1 && rowIndex <= _ctx.selectedRange[1]) || (rowIndex === 1 && colIndex <= _ctx.selectedRange[0]) })\n }, [\n _createElementVNode(\"input\", {\n class: _normalizeClass(['item', { 'selected': rowIndex <= _ctx.selectedRange[1] && colIndex <= _ctx.selectedRange[0] }]),\n id: `cell-${rowIndex - 1}-${colIndex - 1}`,\n autocomplete: \"off\",\n onFocus: ($event: any) => (_ctx.focusCell = [rowIndex - 1, colIndex - 1]),\n onPaste: $event => _ctx.handlePaste($event, rowIndex - 1, colIndex - 1)\n }, null, 42, _hoisted_4)\n ], 2)\n }), 64))\n ])\n }), 64))\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.clear()))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.closeEditor()))\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n class: \"btn\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.getTableData())),\n style: {\"margin-left\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n })\n ])\n ])\n ]))\n}","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref } from 'vue'\nimport { ChartData } from '@/types/slides'\nimport { KEYS } from '@/configs/hotkey'\nimport { pasteCustomClipboardString, pasteExcelClipboardString } from '@/utils/clipboard'\n\nconst CELL_WIDTH = 100\nconst CELL_HEIGHT = 32\n\nexport default defineComponent({\n name: 'chart-data-editor',\n emits: ['save', 'close'],\n props: {\n data: {\n type: Object as PropType,\n required: true,\n }\n },\n setup(props, { emit }) {\n const selectedRange = ref([0, 0])\n const tempRangeSize = ref({ width: 0, height: 0 })\n const focusCell = ref<[number, number] | null>(null)\n\n // 当前选区的边框线条位置\n const rangeLines = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return [\n { type: 't', style: {width: width + 'px'} },\n { type: 'b', style: {top: height + 'px', width: width + 'px'} },\n { type: 'l', style: {height: height + 'px'} },\n { type: 'r', style: {left: width + 'px', height: height + 'px'} },\n ]\n })\n\n // 当前选区的缩放点位置\n const resizablePointStyle = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return { left: width + 'px', top: height + 'px' }\n })\n\n // 初始化图表数据:将数据格式化并填充到DOM\n const initData = () => {\n const _data: string[][] = []\n\n const { labels, legends, series } = props.data\n const rowCount = labels.length\n const colCount = series.length\n\n _data.push(['', ...legends])\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row = [labels[rowIndex]]\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n row.push(series[colIndex][rowIndex] + '')\n }\n _data.push(row)\n }\n\n for (let rowIndex = 0; rowIndex < rowCount + 1; rowIndex++) {\n for (let colIndex = 0; colIndex < colCount + 1; colIndex++) {\n const inputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = _data[rowIndex][colIndex] + ''\n }\n }\n\n selectedRange.value = [colCount + 1, rowCount + 1]\n }\n\n onMounted(initData)\n\n // 快捷键监听:回车移动焦点到下一行\n const moveNextRow = () => {\n if (!focusCell.value) return\n\n const [rowIndex, colIndex] = focusCell.value\n const inputRef = document.querySelector(`#cell-${rowIndex + 1}-${colIndex}`) as HTMLInputElement\n inputRef && inputRef.focus()\n }\n\n const keyboardListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ENTER) moveNextRow()\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keyboardListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keyboardListener)\n })\n\n // 获取当前图表DOM中的数据,整理格式化后传递出去\n const getTableData = () => {\n const [col, row] = selectedRange.value\n\n const labels: string[] = []\n const legends: string[] = []\n const series: number[][] = []\n\n // 第一行为系列名,第一列为项目名,实际数据从第二行第二列开始\n for (let rowIndex = 1; rowIndex < row; rowIndex++) {\n let labelsItem = `类别${rowIndex}`\n const labelInputRef = document.querySelector(`#cell-${rowIndex}-0`) as HTMLInputElement\n if (labelInputRef && labelInputRef.value) labelsItem = labelInputRef.value\n labels.push(labelsItem)\n }\n for (let colIndex = 1; colIndex < col; colIndex++) {\n let legendsItem = `系列${colIndex}`\n const labelInputRef = document.querySelector(`#cell-0-${colIndex}`) as HTMLInputElement\n if (labelInputRef && labelInputRef.value) legendsItem = labelInputRef.value\n legends.push(legendsItem)\n }\n\n for (let colIndex = 1; colIndex < col; colIndex++) {\n const seriesItem = []\n for (let rowIndex = 1; rowIndex < row; rowIndex++) {\n const valueInputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n let value = 0\n if (valueInputRef && valueInputRef.value && !!(+valueInputRef.value)) {\n value = +valueInputRef.value\n }\n seriesItem.push(value)\n }\n series.push(seriesItem)\n }\n\n emit('save', { labels, legends, series })\n }\n\n // 清空表格数据\n const clear = () => {\n for (let rowIndex = 1; rowIndex < 31; rowIndex++) {\n for (let colIndex = 1; colIndex < 7; colIndex++) {\n const inputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = ''\n }\n }\n }\n\n // 自定义粘贴事件(尝试读取剪贴板中的表格数据)\n const handlePaste = (e: ClipboardEvent, rowIndex: number, colIndex: number) => {\n e.preventDefault()\n\n if (!e.clipboardData) return\n\n const clipboardDataFirstItem = e.clipboardData.items[0]\n\n if (clipboardDataFirstItem && clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => {\n const clipboardData = pasteCustomClipboardString(text)\n if (typeof clipboardData === 'object') return\n \n const excelData = pasteExcelClipboardString(text)\n if (excelData) {\n const maxRow = rowIndex + excelData.length\n const maxCol = colIndex + excelData[0].length\n for (let i = rowIndex; i < maxRow; i++) {\n for (let j = colIndex; j < maxCol; j++) {\n const inputRef = document.querySelector(`#cell-${i}-${j}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = excelData[i - rowIndex][j - colIndex]\n }\n }\n }\n })\n }\n }\n\n // 关闭图表数据编辑器\n const closeEditor = () => emit('close')\n\n // 鼠标拖拽修改选中的数据范围\n const changeSelectRange = (e: MouseEvent) => {\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const originWidth = selectedRange.value[0] * CELL_WIDTH\n const originHeight = selectedRange.value[1] * CELL_HEIGHT\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = currentPageX - startPageX\n const y = currentPageY - startPageY\n\n const width = originWidth + x\n const height = originHeight + y\n\n tempRangeSize.value = { width, height }\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n const endPageX = e.pageX\n const endPageY = e.pageY\n\n if (startPageX === endPageX && startPageY === endPageY) return\n\n // 拖拽结束时,范围超过格子一半自动扩大到下一格(如拖动到一格半多的位置,会自动扩展到两格,横竖都同理)\n let width = tempRangeSize.value.width\n let height = tempRangeSize.value.height\n if (width % CELL_WIDTH > CELL_WIDTH * 0.5) width = width + (CELL_WIDTH - width % CELL_WIDTH)\n if (height % CELL_HEIGHT > CELL_HEIGHT * 0.5) height = height + (CELL_HEIGHT - height % CELL_HEIGHT)\n\n let row = Math.round(height / CELL_HEIGHT)\n let col = Math.round(width / CELL_WIDTH)\n\n if (row < 3) row = 3\n if (col < 2) col = 2\n\n selectedRange.value = [col, row]\n tempRangeSize.value = { width: 0, height: 0 }\n }\n }\n\n return {\n tempRangeSize,\n rangeLines,\n resizablePointStyle,\n selectedRange,\n focusCell,\n changeSelectRange,\n getTableData,\n closeEditor,\n clear,\n handlePaste,\n }\n },\n})\n","import { render } from \"./ChartDataEditor.vue?vue&type=template&id=9a62f784&scoped=true&ts=true\"\nimport script from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ChartDataEditor.vue?vue&type=style&index=0&id=9a62f784&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9a62f784\"]])\n\nexport default __exports__","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { ChartData, ChartOptions, PPTChartElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '../../common/ElementOutline.vue'\nimport ColorButton from '../../common/ColorButton.vue'\nimport ChartDataEditor from './ChartDataEditor.vue'\n\nconst presetChartThemes = [\n ['#d87c7c', '#919e8b', '#d7ab82', '#6e7074', '#61a0a8', '#efa18d'],\n ['#dd6b66', '#759aa0', '#e69d87', '#8dc1a9', '#ea7e53', '#eedd78'],\n ['#516b91', '#59c4e6', '#edafda', '#93b7e3', '#a5e7f0', '#cbb0e3'],\n ['#893448', '#d95850', '#eb8146', '#ffb248', '#f2d643', '#ebdba4'],\n ['#4ea397', '#22c3aa', '#7bd9a5', '#d0648a', '#f58db2', '#f2b3c9'],\n ['#3fb1e3', '#6be6c1', '#626c91', '#a0a7e6', '#c4ebad', '#96dee8'],\n ['#fc97af', '#87f7cf', '#f7f494', '#72ccff', '#f7c5a0', '#d4a4eb'],\n ['#c1232b', '#27727b', '#fcce10', '#e87c25', '#b5c334', '#fe8463'],\n ['#2ec7c9', '#b6a2de', '#5ab1ef', '#ffb980', '#d87a80', '#8d98b3'],\n ['#e01f54', '#001852', '#f5e8c8', '#b8d2c7', '#c6b38e', '#a4d8c2'],\n ['#c12e34', '#e6b600', '#0098d9', '#2b821d', '#005eaa', '#339ca8'],\n ['#8a7ca8', '#e098c7', '#8fd3e8', '#71669e', '#cc70af', '#7cb4cc'],\n]\n\nexport default defineComponent({\n name: 'chart-style-panel',\n components: {\n ElementOutline,\n ChartDataEditor,\n ColorButton,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(mainStore)\n const { theme } = storeToRefs(slidesStore)\n\n const chartDataEditorVisible = ref(false)\n const presetThemesVisible = ref(false)\n const presetThemeColorHoverIndex = ref<[number, number]>([-1, -1])\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const fill = ref()\n\n const themeColor = ref([])\n const gridColor = ref('')\n const legend = ref('')\n\n const lineSmooth = ref(true)\n const showLine = ref(true)\n const showArea = ref(false)\n const horizontalBars = ref(false)\n const donut = ref(false)\n const stackBars = 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 stackBars: _stackBars,\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 if (_stackBars !== undefined) stackBars.value = _stackBars\n }\n\n themeColor.value = handleElement.value.themeColor\n gridColor.value = handleElement.value.gridColor || 'rgba(0, 0, 0, 0.4)'\n legend.value = handleElement.value.legend || ''\n }, { deep: true, immediate: true })\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置图表数据\n const updateData = (data: ChartData) => {\n chartDataEditorVisible.value = false\n updateElement({ data })\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n updateElement({ fill: value })\n }\n\n // 设置其他选项:柱状图转条形图、折线图转面积图、折线图转散点图、饼图转环形图、折线图开关平滑曲线\n const updateOptions = (optionProps: ChartOptions) => {\n const _handleElement = handleElement.value as PPTChartElement\n\n const newOptions = { ..._handleElement.options, ...optionProps }\n updateElement({ options: newOptions })\n }\n\n // 设置主题色\n const updateTheme = (color: string, index: number) => {\n const props = {\n themeColor: themeColor.value.map((c, i) => i === index ? color : c),\n }\n updateElement(props)\n }\n\n // 添加主题色\n const addThemeColor = () => {\n const props = {\n themeColor: [...themeColor.value, theme.value.themeColor],\n }\n updateElement(props)\n }\n\n // 使用预置主题配色\n const applyPresetTheme = (colors: string[], index: number) => {\n const themeColor = colors.slice(0, index + 1)\n updateElement({ themeColor })\n presetThemesVisible.value = false\n }\n\n // 删除主题色\n const deleteThemeColor = (index: number) => {\n const props = {\n themeColor: themeColor.value.filter((c, i) => i !== index),\n }\n updateElement(props)\n }\n\n // 设置网格颜色\n const updateGridColor = (gridColor: string) => {\n updateElement({ gridColor })\n }\n\n // 设置图例位置/不显示\n const updateLegend = (legend: '' | 'top' | 'bottom') => {\n updateElement({ legend })\n }\n\n const openDataEditor = () => chartDataEditorVisible.value = true\n\n emitter.on(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n onUnmounted(() => {\n emitter.off(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n })\n\n return {\n chartDataEditorVisible,\n presetThemesVisible,\n presetThemeColorHoverIndex,\n handleElement,\n updateData,\n fill,\n updateFill,\n lineSmooth,\n showLine,\n showArea,\n horizontalBars,\n donut,\n stackBars,\n updateOptions,\n themeColor,\n gridColor,\n legend,\n updateTheme,\n addThemeColor,\n deleteThemeColor,\n updateGridColor,\n updateLegend,\n presetChartThemes,\n applyPresetTheme,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5a3169a0&scoped=true&ts=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=5a3169a0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5a3169a0\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, withCtx as _withCtx, createBlock as _createBlock, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72e00692\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"行数:\", -1))\nconst _hoisted_4 = {\n class: \"set-count\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = { class: \"count-text\" }\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"列数:\", -1))\nconst _hoisted_8 = {\n class: \"set-count\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_9 = { class: \"count-text\" }\nconst _hoisted_10 = { class: \"row theme-switch\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用主题表格:\", -1))\nconst _hoisted_12 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_13 = { class: \"row\" }\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\"标题行\")\nconst _hoisted_15 = /*#__PURE__*/_createTextVNode(\"汇总行\")\nconst _hoisted_16 = { class: \"row\" }\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"第一列\")\nconst _hoisted_18 = /*#__PURE__*/_createTextVNode(\"最后一列\")\nconst _hoisted_19 = { class: \"row\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"主题颜色:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_IconAddText = _resolveComponent(\"IconAddText\")!\n const _component_InputGroup = _resolveComponent(\"InputGroup\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_IconText = _resolveComponent(\"IconText\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconFill = _resolveComponent(\"IconFill\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconTextBold = _resolveComponent(\"IconTextBold\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconTextItalic = _resolveComponent(\"IconTextItalic\")!\n const _component_IconTextUnderline = _resolveComponent(\"IconTextUnderline\")!\n const _component_IconStrikethrough = _resolveComponent(\"IconStrikethrough\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n const _component_IconAlignTextLeft = _resolveComponent(\"IconAlignTextLeft\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_IconAlignTextCenter = _resolveComponent(\"IconAlignTextCenter\")!\n const _component_IconAlignTextRight = _resolveComponent(\"IconAlignTextRight\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_IconMinus = _resolveComponent(\"IconMinus\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Checkbox = _resolveComponent(\"Checkbox\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_InputGroup, {\n compact: \"\",\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.textAttrs.fontname,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateTextAttrs({ fontname: value }))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFontSize)\n ]),\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Select, {\n style: {\"flex\":\"2\"},\n value: _ctx.textAttrs.fontsize,\n onChange: _cache[1] || (_cache[1] = value => _ctx.updateTextAttrs({ fontsize: value }))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconAddText)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fontSizeOptions, (fontsize) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: fontsize,\n value: fontsize\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(fontsize), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.textAttrs.color,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = value => _ctx.updateTextAttrs({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字颜色\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconText),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.textAttrs.color })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.textAttrs.backcolor,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = value => _ctx.updateTextAttrs({ backcolor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"单元格填充\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFill),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.textAttrs.backcolor })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"加粗\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.bold,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.updateTextAttrs({ bold: !_ctx.textAttrs.bold })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextBold)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"斜体\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.em,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.updateTextAttrs({ em: !_ctx.textAttrs.em })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextItalic)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下划线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.underline,\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.updateTextAttrs({ underline: !_ctx.textAttrs.underline })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextUnderline)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.strikethrough,\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.updateTextAttrs({ strikethrough: !_ctx.textAttrs.strikethrough })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconStrikethrough)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.textAttrs.align,\n onChange: _cache[8] || (_cache[8] = e => _ctx.updateTextAttrs({ align: e.target.value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"left\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"center\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextCenter)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"right\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline, { fixed: true }),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.rowCount <= 1,\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.setTableRow(_ctx.rowCount - 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconMinus)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.rowCount), 1),\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.rowCount >= 30,\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.setTableRow(_ctx.rowCount + 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlus)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.colCount <= 1,\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.setTableCol(_ctx.colCount - 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconMinus)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.colCount), 1),\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.colCount >= 30,\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.setTableCol(_ctx.colCount + 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlus)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ])\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasTheme,\n onChange: _cache[13] || (_cache[13] = checked => _ctx.toggleTheme(checked))\n }, null, 8, [\"checked\"])\n ])\n ]),\n (_ctx.hasTheme)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[14] || (_cache[14] = e => _ctx.updateTheme({ rowHeader: e.target.checked })),\n checked: _ctx.theme.rowHeader,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[15] || (_cache[15] = e => _ctx.updateTheme({ rowFooter: e.target.checked })),\n checked: _ctx.theme.rowFooter,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[16] || (_cache[16] = e => _ctx.updateTheme({ colHeader: e.target.checked })),\n checked: _ctx.theme.colHeader,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[17] || (_cache[17] = e => _ctx.updateTheme({ colFooter: e.target.checked })),\n checked: _ctx.theme.colFooter,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_18\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _hoisted_20,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.color,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = value => _ctx.updateTheme({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTableElement, TableCell, TableCellStyle, TableTheme } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport 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 slidesStore = useSlidesStore()\n const { handleElement, handleElementId, selectedTableCells: selectedCells, availableFonts } = storeToRefs(useMainStore())\n const themeColor = computed(() => slidesStore.theme.themeColor)\n \n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n ]\n\n const textAttrs = ref({\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n })\n\n const theme = ref()\n const hasTheme = ref(false)\n const rowCount = ref(0)\n const colCount = ref(0)\n const minRowCount = ref(0)\n const minColCount = ref(0)\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n \n theme.value = handleElement.value.theme\n hasTheme.value = !!theme.value\n\n rowCount.value = handleElement.value.data.length\n colCount.value = handleElement.value.data[0].length\n\n minRowCount.value = handleElement.value.data.length\n minColCount.value = handleElement.value.data[0].length\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 更新当前选中单元格的文本样式状态\n const updateTextAttrState = () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n\n let rowIndex = 0\n let colIndex = 0\n if (selectedCells.value.length) {\n const selectedCell = selectedCells.value[0]\n rowIndex = +selectedCell.split('_')[0]\n colIndex = +selectedCell.split('_')[1]\n }\n const style = handleElement.value.data[rowIndex][colIndex].style\n\n if (!style) {\n textAttrs.value = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n }\n }\n else {\n textAttrs.value = {\n bold: !!style.bold,\n em: !!style.em,\n underline: !!style.underline,\n strikethrough: !!style.strikethrough,\n color: style.color || '#000',\n backcolor: style.backcolor || '#000',\n fontsize: style.fontsize || '12px',\n fontname: style.fontname || '微软雅黑',\n align: style.align || 'left',\n }\n }\n }\n\n onMounted(() => {\n if (selectedCells.value.length) updateTextAttrState()\n })\n\n watch(selectedCells, updateTextAttrState)\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置单元格内容文本样式\n const updateTextAttrs = (textAttrProp: Partial) => {\n const _handleElement = handleElement.value as PPTTableElement\n\n const data: TableCell[][] = JSON.parse(JSON.stringify(_handleElement.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 updateElement({ data })\n updateTextAttrState()\n }\n\n // 更新表格主题:主题色、标题行、汇总行、第一列、最后一列\n const updateTheme = (themeProp: Partial) => {\n if (!theme.value) return\n const _theme = { ...theme.value, ...themeProp }\n updateElement({ theme: _theme })\n }\n\n // 开启/关闭表格主题\n const toggleTheme = (checked: boolean) => {\n if (checked) {\n const props = {\n theme: {\n color: themeColor.value,\n rowHeader: true,\n rowFooter: false,\n colHeader: false,\n colFooter: false,\n }\n }\n updateElement(props)\n }\n else {\n slidesStore.removeElementProps({ id: handleElementId.value, propName: 'theme' })\n addHistorySnapshot()\n }\n }\n\n // 设置表格行数\n const setTableRow = (value: number) => {\n const _handleElement = handleElement.value as PPTTableElement\n const rowCount = _handleElement.data.length\n\n if (value > rowCount) {\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.data))\n tableCells.push(...newTableCells)\n \n updateElement({ data: tableCells })\n }\n else {\n const tableCells: TableCell[][] = _handleElement.data.slice(0, value)\n updateElement({ data: tableCells })\n }\n }\n\n // 设置表格列数\n const setTableCol = (value: number) => {\n const _handleElement = handleElement.value as PPTTableElement\n const colCount = _handleElement.data[0].length\n\n let tableCells = _handleElement.data\n let colSizeList = _handleElement.colWidths.map(item => item * _handleElement.width)\n\n if (value > colCount) {\n tableCells = tableCells.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 newColSizeList: number[] = new Array(value - colCount).fill(100)\n colSizeList.push(...newColSizeList)\n }\n else {\n tableCells = tableCells.map(item => item.slice(0, value))\n colSizeList = colSizeList.slice(0, value)\n }\n\n const width = colSizeList.reduce((a, b) => a + b)\n const colWidths = colSizeList.map(item => item / width)\n\n const props = {\n width,\n data: tableCells,\n colWidths,\n }\n updateElement(props)\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=72e00692&scoped=true&ts=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=72e00692&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-72e00692\"]])\n\nexport default __exports__","import { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69f903b1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"latex-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\"编辑 LaTeX\")\nconst _hoisted_4 = { class: \"row\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"颜色:\", -1))\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"粗细:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_LaTeXEditor = _resolveComponent(\"LaTeXEditor\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.latexEditorVisible = true))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.handleElement.color,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = value => _ctx.updateLatex({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.handleElement.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createVNode(_component_InputNumber, {\n min: 1,\n max: 3,\n value: _ctx.handleElement.strokeWidth,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateLatex({ strokeWidth: value })),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createVNode(_component_Modal, {\n visible: _ctx.latexEditorVisible,\n \"onUpdate:visible\": _cache[5] || (_cache[5] = ($event: any) => ((_ctx.latexEditorVisible) = $event)),\n footer: null,\n centered: \"\",\n width: 880,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_LaTeXEditor, {\n value: _ctx.handleElement.latex,\n onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.latexEditorVisible = false)),\n onUpdate: _cache[4] || (_cache[4] = data => { _ctx.updateLatexData(data); _ctx.latexEditorVisible = false })\n }, null, 8, [\"value\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]))\n}","\nimport { defineComponent, onUnmounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTLatexElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from '../common/ColorButton.vue'\nimport LaTeXEditor from '@/components/LaTeXEditor/index.vue'\n\nexport default defineComponent({\n name: 'latex-style-panel',\n components: {\n ColorButton,\n LaTeXEditor,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const latexEditorVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateLatex = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const updateLatexData = (data: { path: string; latex: string; w: number; h: number; }) => {\n updateLatex({\n path: data.path,\n latex: data.latex,\n width: data.w,\n height: data.h,\n viewBox: [data.w, data.h],\n })\n }\n\n const openLatexEditor = () => latexEditorVisible.value = true\n\n emitter.on(EmitterEvents.OPEN_LATEX_EDITOR, openLatexEditor)\n onUnmounted(() => {\n emitter.off(EmitterEvents.OPEN_LATEX_EDITOR, openLatexEditor)\n })\n\n return {\n handleElement,\n latexEditorVisible,\n updateLatex,\n updateLatexData,\n }\n }\n})\n","import { render } from \"./LatexStylePanel.vue?vue&type=template&id=69f903b1&scoped=true&ts=true\"\nimport script from \"./LatexStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./LatexStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./LatexStylePanel.vue?vue&type=style&index=0&id=69f903b1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-69f903b1\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-61bcaa2a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"video-style-panel\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"视频预览封面\", -1))\nconst _hoisted_3 = { class: \"background-image-wrapper\" }\nconst _hoisted_4 = { class: \"background-image\" }\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"重置封面\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_FileInput, {\n onChange: _cache[0] || (_cache[0] = files => _ctx.setVideoPoster(files))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: \"content\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.handleElement.poster})` })\n }, [\n _createVNode(_component_IconPlus)\n ], 4)\n ])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.updateVideo({ poster: '' })))\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n })\n ])\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTVideoElement } from '@/types/slides'\nimport { getImageDataURL } from '@/utils/image'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'video-style-panel',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateVideo = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置视频预览封面\n const setVideoPoster = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => updateVideo({ poster: dataURL }))\n }\n\n return {\n handleElement,\n updateVideo,\n setVideoPoster,\n }\n }\n})\n","import { render } from \"./VideoStylePanel.vue?vue&type=template&id=61bcaa2a&scoped=true&ts=true\"\nimport script from \"./VideoStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./VideoStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./VideoStylePanel.vue?vue&type=style&index=0&id=61bcaa2a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-61bcaa2a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-80767a46\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"audio-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"图标颜色:\", -1))\nconst _hoisted_4 = { class: \"row switch-row\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"自动播放:\", -1))\nconst _hoisted_6 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_7 = { class: \"row switch-row\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"循环播放:\", -1))\nconst _hoisted_9 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_Switch = _resolveComponent(\"Switch\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.handleElement.color,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = value => _ctx.updateAudio({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.handleElement.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Switch, {\n checked: _ctx.handleElement.autoplay,\n onChange: _cache[1] || (_cache[1] = checked => _ctx.updateAudio({ autoplay: checked }))\n }, null, 8, [\"checked\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_Switch, {\n checked: _ctx.handleElement.loop,\n onChange: _cache[2] || (_cache[2] = checked => _ctx.updateAudio({ loop: checked }))\n }, null, 8, [\"checked\"])\n ])\n ])\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTAudioElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from '../common/ColorButton.vue'\n\nexport default defineComponent({\n name: 'audio-style-panel',\n components: {\n ColorButton,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateAudio = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n updateAudio,\n }\n }\n})\n","import { render } from \"./AudioStylePanel.vue?vue&type=template&id=80767a46&scoped=true&ts=true\"\nimport script from \"./AudioStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./AudioStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./AudioStylePanel.vue?vue&type=style&index=0&id=80767a46&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-80767a46\"]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { ElementTypes } 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'\nimport LatexStylePanel from './LatexStylePanel.vue'\nimport VideoStylePanel from './VideoStylePanel.vue'\nimport AudioStylePanel from './AudioStylePanel.vue'\n\nexport default defineComponent({\n name: 'element-style-panel',\n setup() {\n const { handleElement } = storeToRefs(useMainStore())\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 [ElementTypes.LATEX]: LatexStylePanel,\n [ElementTypes.VIDEO]: VideoStylePanel,\n [ElementTypes.AUDIO]: AudioStylePanel,\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=705f1755&ts=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createStaticVNode as _createStaticVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3476ee65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-positopn-panel\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"层级:\", -1))\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\" 置于顶层\")\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\" 置于底层\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\" 上移一层\")\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\" 下移一层\")\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"对齐:\", -1))\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"3\"} }, \"位置:\", -1))\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\nconst _hoisted_11 = /*#__PURE__*/_createStaticVNode(\"
X
Y
\", 1)\nconst _hoisted_12 = { class: \"row\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"3\"} }, \"大小:\", -1))\nconst _hoisted_14 = {\n key: 1,\n style: {\"flex\":\"1\"}\n}\nconst _hoisted_15 = /*#__PURE__*/_createStaticVNode(\"
\", 1)\nconst _hoisted_16 = { class: \"row\" }\nconst _hoisted_17 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"3\"} }, \"旋转:\", -1))\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconSendToBack = _resolveComponent(\"IconSendToBack\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_IconBringToFrontOne = _resolveComponent(\"IconBringToFrontOne\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconBringToFront = _resolveComponent(\"IconBringToFront\")!\n const _component_IconSentToBack = _resolveComponent(\"IconSentToBack\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconAlignLeft = _resolveComponent(\"IconAlignLeft\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconAlignVertically = _resolveComponent(\"IconAlignVertically\")!\n const _component_IconAlignRight = _resolveComponent(\"IconAlignRight\")!\n const _component_IconAlignTop = _resolveComponent(\"IconAlignTop\")!\n const _component_IconAlignHorizontally = _resolveComponent(\"IconAlignHorizontally\")!\n const _component_IconAlignBottom = _resolveComponent(\"IconAlignBottom\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_IconLock = _resolveComponent(\"IconLock\")!\n const _component_IconUnlock = _resolveComponent(\"IconUnlock\")!\n const _component_IconRotate = _resolveComponent(\"IconRotate\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'top')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconSendToBack, { class: \"btn-icon\" }),\n _hoisted_3\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'bottom')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBringToFrontOne, { class: \"btn-icon\" }),\n _hoisted_4\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'up')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBringToFront, { class: \"btn-icon\" }),\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'down')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconSentToBack, { class: \"btn-icon\" }),\n _hoisted_6\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _hoisted_7,\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.alignElementToCanvas('left')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"水平居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.alignElementToCanvas('horizontal')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignVertically)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.alignElementToCanvas('right')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"上对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.alignElementToCanvas('top')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTop)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"垂直居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.alignElementToCanvas('vertical')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignHorizontally)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.alignElementToCanvas('bottom')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignBottom)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_InputNumber, {\n step: 5,\n value: _ctx.left,\n onChange: _cache[10] || (_cache[10] = value => _ctx.updateLeft(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"value\"]),\n _hoisted_10,\n _createVNode(_component_InputNumber, {\n step: 5,\n value: _ctx.top,\n onChange: _cache[11] || (_cache[11] = value => _ctx.updateTop(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"value\"])\n ]),\n _hoisted_11,\n (_ctx.handleElement.type !== 'line')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createVNode(_component_InputNumber, {\n min: _ctx.minSize,\n max: 1500,\n step: 5,\n value: _ctx.width,\n onChange: _cache[12] || (_cache[12] = value => _ctx.updateWidth(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"min\", \"value\"]),\n (['image', 'shape', 'audio'].includes(_ctx.handleElement.type))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_ctx.fixedRatio)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"解除宽高比锁定\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconLock, {\n style: {\"flex\":\"1\"},\n class: \"icon-btn\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.updateFixedRatio(false)))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]))\n : (_openBlock(), _createBlock(_component_Tooltip, {\n key: 1,\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"宽高比锁定\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUnlock, {\n style: {\"flex\":\"1\"},\n class: \"icon-btn\",\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.updateFixedRatio(true)))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]))\n ], 64))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_14)),\n _createVNode(_component_InputNumber, {\n min: _ctx.minSize,\n max: 800,\n step: 5,\n disabled: _ctx.handleElement.type === 'text',\n value: _ctx.height,\n onChange: _cache[15] || (_cache[15] = value => _ctx.updateHeight(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"min\", \"disabled\", \"value\"])\n ]),\n _hoisted_15\n ], 64))\n : _createCommentVNode(\"\", true),\n (!['line', 'video', 'audio'].includes(_ctx.handleElement.type))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_16, [\n _hoisted_17,\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"逆时针旋转\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconRotate, {\n class: \"icon-btn\",\n onClick: _cache[16] || (_cache[16] = ($event: any) => (_ctx.updateRotate45('-'))),\n style: {\"flex\":\"2\"}\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"顺时针旋转\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconRotate, {\n class: \"icon-btn\",\n onClick: _cache[17] || (_cache[17] = ($event: any) => (_ctx.updateRotate45('+'))),\n style: _normalizeStyle({\n flex: 2,\n transform: 'rotateY(180deg)',\n })\n }, null, 8, [\"style\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _hoisted_18,\n _createVNode(_component_InputNumber, {\n min: -180,\n max: 180,\n step: 5,\n value: _ctx.rotate,\n onChange: _cache[18] || (_cache[18] = value => _ctx.updateRotate(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"value\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { round } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\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 slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(useMainStore())\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 slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n const updateTop = (value: number) => {\n const props = { top: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置元素宽度、高度、旋转角度\n const updateWidth = (value: number) => {\n const props = { width: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n const updateHeight = (value: number) => {\n const props = { height: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n const updateRotate = (value: number) => {\n const props = { rotate: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 固定元素的宽高比\n const updateFixedRatio = (value: boolean) => {\n const props = { fixedRatio: value }\n slidesStore.updateElement({ id: handleElementId.value, 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 slidesStore.updateElement({ id: handleElementId.value, 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=3476ee65&scoped=true&ts=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=3476ee65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3476ee65\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-696c81e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-animation-panel\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"element-animation\"\n}\nconst _hoisted_3 = { class: \"animation-pool\" }\nconst _hoisted_4 = { class: \"type-title\" }\nconst _hoisted_5 = { class: \"pool-item-wrapper\" }\nconst _hoisted_6 = [\"onMouseenter\", \"onClick\"]\nconst _hoisted_7 = {\n key: 0,\n class: \"mask\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\" 该元素暂不支持动画 \")\nconst _hoisted_9 = {\n key: 1,\n class: \"tip\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\" 选中画布中的元素添加动画\")\nconst _hoisted_11 = { class: \"index\" }\nconst _hoisted_12 = { class: \"text\" }\nconst _hoisted_13 = { class: \"handler\" }\nconst _hoisted_14 = {\n key: 2,\n class: \"configs\"\n}\nconst _hoisted_15 = { class: \"duration\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"4\"} }, \"持续时间(毫秒):\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconEffects = _resolveComponent(\"IconEffects\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconClick = _resolveComponent(\"IconClick\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconCloseSmall = _resolveComponent(\"IconCloseSmall\")!\n const _component_Draggable = _resolveComponent(\"Draggable\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.handleElement)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (!['chart', 'video'].includes(_ctx.handleElement.type))\n ? (_openBlock(), _createBlock(_component_Popover, {\n key: 0,\n trigger: \"click\",\n visible: _ctx.animationPoolVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.animationPoolVisible) = $event)),\n onVisibleChange: _cache[2] || (_cache[2] = visible => _ctx.handlePopoverVisibleChange(visible))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.animations, (type) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"pool-type\",\n key: type.name\n }, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(type.name) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(type.children, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"pool-item\",\n key: item.name,\n onMouseenter: ($event: any) => (_ctx.hoverPreviewAnimation = item.value),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (_ctx.hoverPreviewAnimation = '')),\n onClick: ($event: any) => (_ctx.addAnimation(item.value))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"animation-box\", [\n 'animate__animated',\n 'animate__faster',\n _ctx.hoverPreviewAnimation === item.value && `animate__${item.value}`,\n ]])\n }, _toDisplayString(item.name), 3)\n ], 40, _hoisted_6))\n }), 128))\n ])\n ]))\n }), 128)),\n (!_ctx.popoverMaskHide)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Button, { class: \"element-animation-btn\" }, {\n default: _withCtx(() => [\n _createVNode(_component_IconEffects, { style: {\"margin-right\":\"5px\"} }),\n _createTextVNode(\" \" + _toDisplayString(_ctx.handleElementAnimationName || '点击选择动画'), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"visible\"]))\n : (_openBlock(), _createBlock(_component_Button, {\n key: 1,\n class: \"element-animation-btn\",\n disabled: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconEffects, { style: {\"margin-right\":\"5px\"} }),\n _hoisted_8\n ]),\n _: 1\n }))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createVNode(_component_IconClick, { style: {\"margin-right\":\"5px\"} }),\n _hoisted_10\n ])),\n _createVNode(_component_Divider),\n _createVNode(_component_Draggable, {\n class: \"animation-sequence\",\n modelValue: _ctx.animationSequence,\n animation: 300,\n scroll: true,\n scrollSensitivity: 50,\n onEnd: _ctx.handleDragEnd,\n itemKey: \"id\"\n }, {\n item: _withCtx(({ element, index }) => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"sequence-item\", { 'active': _ctx.handleElement?.id === element.elId }])\n }, [\n _createElementVNode(\"div\", _hoisted_11, _toDisplayString(index + 1), 1),\n _createElementVNode(\"div\", _hoisted_12, \"【\" + _toDisplayString(element.elType) + \"】\" + _toDisplayString(element.animationType), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"预览\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlayOne, {\n class: \"handler-btn\",\n onClick: ($event: any) => (_ctx.runAnimation(element.elId, element.type, element.duration))\n }, null, 8, [\"onClick\"])\n ]),\n _: 2\n }, 1032, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconCloseSmall, {\n class: \"handler-btn\",\n onClick: ($event: any) => (_ctx.deleteAnimation(element.elId))\n }, null, 8, [\"onClick\"])\n ]),\n _: 2\n }, 1032, [\"mouseEnterDelay\"])\n ])\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onEnd\"]),\n (_ctx.handleElementAnimation)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_15, [\n _hoisted_16,\n _createVNode(_component_InputNumber, {\n min: 100,\n max: 5000,\n step: 100,\n value: _ctx.handleElementAnimation.duration,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateElementAnimationDuration(value)),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\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 { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTAnimation } from '@/types/slides'\nimport { ANIMATIONS } from '@/configs/animation'\nimport { ELEMENT_TYPE_ZH } from '@/configs/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport Draggable from 'vuedraggable'\n\nconst defaultDuration = 1000\n\nconst animationTypes: { [key: string]: string } = {}\nfor (const type of ANIMATIONS) {\n for (const animation of type.children) {\n animationTypes[animation.value] = animation.name\n }\n}\n\nexport default defineComponent({\n name: 'element-animation-panel',\n components: {\n Draggable,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(useMainStore())\n const { currentSlide, currentSlideAnimations } = storeToRefs(slidesStore)\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 const animations = currentSlideAnimations.value || []\n const animation = animations.find(item => item.elId === handleElementId.value)\n return animation || null\n })\n\n // 当前选中元素的入场动画名称\n const handleElementAnimationName = computed(() => {\n if (!handleElementAnimation.value) return null\n return animationTypes[handleElementAnimation.value.type]\n })\n\n // 删除元素入场动画\n const deleteAnimation = (elId: string) => {\n const animations = (currentSlideAnimations.value as PPTAnimation[]).filter(item => item.elId !== elId)\n slidesStore.updateSlide({ 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 slidesStore.updateSlide({ animations })\n addHistorySnapshot()\n }\n\n // 执行入场动画预览\n const runAnimation = (elId: string, animationType: string, duration: number) => {\n const prefix = 'animate__'\n const elRef = document.querySelector(`#editable-element-${elId} [class^=editable-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animationType}`\n document.documentElement.style.setProperty('--animate-duration', `${duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 修改元素入场动画,并执行一次预览\n const updateElementAnimation = (type: string) => {\n if (!currentSlideAnimations.value) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElementId.value) return { ...item, type }\n return item\n })\n slidesStore.updateSlide({ animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n const animationItem = currentSlideAnimations.value.find(item => item.elId === handleElementId.value)\n const duration = animationItem?.duration || defaultDuration\n\n runAnimation(handleElementId.value, type, duration)\n }\n\n // 修改元素入场动画持续时间\n const updateElementAnimationDuration = (duration: number) => {\n if (!currentSlideAnimations.value) return\n if (duration < 100 || duration > 5000) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElementId.value) return { ...item, duration }\n return item\n })\n slidesStore.updateSlide({ animations })\n addHistorySnapshot()\n }\n\n // 添加元素入场动画,并执行一次预览\n const addAnimation = (type: string) => {\n if (handleElementAnimationName.value) {\n updateElementAnimation(type)\n return\n }\n const animations: PPTAnimation[] = currentSlideAnimations.value ? JSON.parse(JSON.stringify(currentSlideAnimations.value)) : []\n animations.push({\n elId: handleElementId.value,\n type,\n duration: defaultDuration,\n })\n slidesStore.updateSlide({ animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n runAnimation(handleElementId.value, type, defaultDuration)\n }\n\n // 动画选择面板打开500ms后再移除遮罩层,否则打开面板后迅速滑入鼠标预览会导致抖动\n const popoverMaskHide = ref(false)\n const handlePopoverVisibleChange = (visible: boolean) => {\n if (visible) {\n setTimeout(() => popoverMaskHide.value = true, 500)\n }\n else popoverMaskHide.value = false\n }\n\n return {\n handleElement,\n animationPoolVisible,\n animations,\n animationSequence,\n hoverPreviewAnimation,\n handleElementAnimation,\n handleElementAnimationName,\n popoverMaskHide,\n addAnimation,\n deleteAnimation,\n handleDragEnd,\n runAnimation,\n updateElementAnimationDuration,\n handlePopoverVisibleChange,\n }\n },\n})\n","import { render } from \"./ElementAnimationPanel.vue?vue&type=template&id=696c81e2&scoped=true&ts=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=696c81e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-696c81e2\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0e2f846d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"slide-design-panel\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"背景填充\", -1))\nconst _hoisted_3 = { class: \"row\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"纯色填充\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"图片填充\")\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"渐变填充\")\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"缩放\")\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"拼贴\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\"缩放铺满\")\nconst _hoisted_11 = /*#__PURE__*/_createTextVNode(\"线性渐变\")\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"径向渐变\")\nconst _hoisted_13 = {\n key: 0,\n class: \"background-image-wrapper\"\n}\nconst _hoisted_14 = { class: \"background-image\" }\nconst _hoisted_15 = {\n key: 1,\n class: \"background-gradient-wrapper\"\n}\nconst _hoisted_16 = { class: \"row\" }\nconst _hoisted_17 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"起点颜色:\", -1))\nconst _hoisted_18 = { class: \"row\" }\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"终点颜色:\", -1))\nconst _hoisted_20 = {\n key: 0,\n class: \"row\"\n}\nconst _hoisted_21 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"渐变角度:\", -1))\nconst _hoisted_22 = { class: \"row\" }\nconst _hoisted_23 = /*#__PURE__*/_createTextVNode(\"应用背景到全部\")\nconst _hoisted_24 = { class: \"row\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"画布尺寸:\", -1))\nconst _hoisted_26 = /*#__PURE__*/_createTextVNode(\"宽屏 16 : 9\")\nconst _hoisted_27 = /*#__PURE__*/_createTextVNode(\"宽屏 16 :10\")\nconst _hoisted_28 = /*#__PURE__*/_createTextVNode(\"标准 4 :3\")\nconst _hoisted_29 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"全局主题\", -1))\nconst _hoisted_30 = { class: \"row\" }\nconst _hoisted_31 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"字体:\", -1))\nconst _hoisted_32 = { class: \"row\" }\nconst _hoisted_33 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"字体颜色:\", -1))\nconst _hoisted_34 = { class: \"row\" }\nconst _hoisted_35 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"背景颜色:\", -1))\nconst _hoisted_36 = { class: \"row\" }\nconst _hoisted_37 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"主题色:\", -1))\nconst _hoisted_38 = /*#__PURE__*/_createTextVNode(\" 预置主题 \")\nconst _hoisted_39 = {\n key: 2,\n class: \"theme-list\"\n}\nconst _hoisted_40 = [\"onClick\"]\nconst _hoisted_41 = { class: \"theme-item-content\" }\nconst _hoisted_42 = { class: \"row\" }\nconst _hoisted_43 = /*#__PURE__*/_createTextVNode(\"应用主题到全部\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_IconDown = _resolveComponent(\"IconDown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Select, {\n style: {\"flex\":\"10\"},\n value: _ctx.background.type,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateBackgroundType(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"solid\" }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"image\" }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"gradient\" }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _hoisted_7,\n (_ctx.background.type === 'solid')\n ? (_openBlock(), _createBlock(_component_Popover, {\n key: 0,\n trigger: \"click\"\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.background.color,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = color => _ctx.updateBackground({ color }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.background.color || '#fff',\n style: {\"flex\":\"10\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n }))\n : (_ctx.background.type === 'image')\n ? (_openBlock(), _createBlock(_component_Select, {\n key: 1,\n style: {\"flex\":\"10\"},\n value: _ctx.background.imageSize || 'cover',\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateBackground({ imageSize: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"contain\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"repeat\" }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"cover\" }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]))\n : (_openBlock(), _createBlock(_component_Select, {\n key: 2,\n style: {\"flex\":\"10\"},\n value: _ctx.background.gradientType,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateBackground({ gradientType: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"linear\" }, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"radial\" }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]))\n ]),\n (_ctx.background.type === 'image')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createVNode(_component_FileInput, {\n onChange: _cache[4] || (_cache[4] = files => _ctx.uploadBackgroundImage(files))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", {\n class: \"content\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.background.image})` })\n }, [\n _createVNode(_component_IconPlus)\n ], 4)\n ])\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.background.type === 'gradient')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", _hoisted_16, [\n _hoisted_17,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.background.gradientColor[0],\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = value => _ctx.updateBackground({ gradientColor: [value, _ctx.background.gradientColor[1]] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.background.gradientColor[0],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_18, [\n _hoisted_19,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.background.gradientColor[1],\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = value => _ctx.updateBackground({ gradientColor: [_ctx.background.gradientColor[0], value] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.background.gradientColor[1],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n (_ctx.background.gradientType === 'linear')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _hoisted_21,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 360,\n step: 15,\n value: _ctx.background.gradientRotate,\n onChange: _cache[7] || (_cache[7] = value => _ctx.updateBackground({ gradientRotate: value }))\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_22, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.applyBackgroundAllSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_23\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_24, [\n _hoisted_25,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.viewportRatio,\n onChange: _cache[9] || (_cache[9] = value => _ctx.updateViewportRatio(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: 0.5625 }, {\n default: _withCtx(() => [\n _hoisted_26\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_SelectOption, { value: 0.625 }, {\n default: _withCtx(() => [\n _hoisted_27\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_SelectOption, { value: 0.75 }, {\n default: _withCtx(() => [\n _hoisted_28\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _hoisted_29,\n _createElementVNode(\"div\", _hoisted_30, [\n _hoisted_31,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.theme.fontName,\n onChange: _cache[10] || (_cache[10] = value => _ctx.updateTheme({ fontName: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_32, [\n _hoisted_33,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.fontColor,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = value => _ctx.updateTheme({ fontColor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.fontColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _hoisted_35,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.backgroundColor,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = value => _ctx.updateTheme({ backgroundColor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.backgroundColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_36, [\n _hoisted_37,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.themeColor,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = value => _ctx.updateTheme({ themeColor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.themeColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"title dropdown\", { 'active': _ctx.showPresetThemes }]),\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.togglePresetThemesVisible())),\n style: {\"margin-top\":\"20px\"}\n }, [\n _hoisted_38,\n _createVNode(_component_IconDown, { class: \"icon\" })\n ], 2),\n (_ctx.showPresetThemes)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.themes, (item, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"theme-item\",\n key: index,\n style: _normalizeStyle({ backgroundColor: item.background }),\n onClick: ($event: any) => (_ctx.updateTheme({\n fontColor: item.text,\n backgroundColor: item.background,\n themeColor: item.color,\n }))\n }, [\n _createElementVNode(\"div\", _hoisted_41, [\n _createElementVNode(\"div\", {\n class: \"text\",\n style: _normalizeStyle({ color: item.text })\n }, \"Aa\", 4),\n _createElementVNode(\"div\", {\n class: \"color-block\",\n style: _normalizeStyle({ backgroundColor: item.color })\n }, null, 4)\n ])\n ], 12, _hoisted_40))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_42, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[15] || (_cache[15] = ($event: any) => (_ctx.applyThemeAllSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_43\n ]),\n _: 1\n })\n ])\n ]))\n}","export const PRESET_THEMES = [\r\n { color: '#d14424', background: '#ffffff', text: '#333' },\r\n { color: '#42464b', background: '#ffffff', text: '#333' },\r\n { color: '#5d82ba', background: '#ffffff', text: '#333' },\r\n { color: '#005a6f', background: '#ffffff', text: '#333' },\r\n { color: '#d0614c', background: '#dfb044', text: '#333' },\r\n { color: '#86a1ad', background: '#dfdbd4', text: '#333' },\r\n { color: '#697586', background: '#d5c4a4', text: '#333' },\r\n { color: '#333333', background: '#7acfa6', text: '#333' },\r\n { color: '#42464b', background: '#415065', text: '#fff' },\r\n { color: '#0c5999', background: '#35a2cd', text: '#fff' },\r\n { color: '#c49a41', background: '#8c4357', text: '#fff' },\r\n { color: '#dfaa00', background: '#2e4e7d', text: '#fff' },\r\n { color: '#d1ad88', background: '#f99070', text: '#fff' },\r\n { color: '#464d52', background: '#657984', text: '#fff' },\r\n { color: '#ffcfb6', background: '#1e4c6f', text: '#fff' },\r\n { color: '#c3a043', background: '#43292a', text: '#fff' },\r\n { color: '#464d52', background: '#60546f', text: '#fff' },\r\n { color: '#df9636', background: '#5b89a0', text: '#fff' },\r\n { color: '#b898a4', background: '#93716b', text: '#fff' },\r\n { color: '#c47a11', background: '#187db1', text: '#fff' },\r\n { color: '#333333', background: '#759564', text: '#fff' },\r\n { color: '#355b5e', background: '#424b50', text: '#fff' },\r\n { color: '#d29090', background: '#942a32', text: '#fff' },\r\n { color: '#00cfdf', background: '#3b434d', text: '#fff' },\r\n { color: '#424246', background: '#c70042', text: '#fff' },\r\n { color: '#2e4155', background: '#b35d44', text: '#fff' },\r\n { color: '#11bfce', background: '#8f98aa', text: '#fff' },\r\n { color: '#333333', background: '#549688', text: '#fff' },\r\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { Slide, SlideBackground, SlideTheme } from '@/types/slides'\nimport { PRESET_THEMES } from '@/configs/theme'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './common/ColorButton.vue'\nimport { getImageDataURL } from '@/utils/image'\n\nconst themes = PRESET_THEMES\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'slide-design-panel',\n components: {\n ColorButton,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { availableFonts } = storeToRefs(useMainStore())\n const { slides, currentSlide, viewportRatio, theme } = storeToRefs(slidesStore)\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 slidesStore.updateSlide({ 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 slidesStore.updateSlide({ 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 slidesStore.updateSlide({ background: newBackground })\n }\n addHistorySnapshot()\n }\n\n // 设置背景图片\n const updateBackground = (props: Partial) => {\n slidesStore.updateSlide({ 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 slidesStore.setSlides(newSlides)\n addHistorySnapshot()\n }\n\n // 设置主题\n const updateTheme = (themeProps: Partial) => {\n slidesStore.setTheme(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 else if (el.type === 'latex') el.color = fontColor\n else if (el.type === 'audio') el.color = themeColor\n }\n }\n slidesStore.setSlides(newSlides)\n addHistorySnapshot()\n }\n\n // 是否显示预设主题\n const showPresetThemes = ref(true)\n const togglePresetThemesVisible = () => {\n showPresetThemes.value = !showPresetThemes.value\n }\n\n // 设置画布尺寸(宽高比例)\n const updateViewportRatio = (value: number) => {\n slidesStore.setViewportRatio(value)\n }\n\n return {\n availableFonts,\n background,\n updateBackgroundType,\n updateBackground,\n uploadBackgroundImage,\n applyBackgroundAllSlide,\n themes,\n theme,\n webFonts,\n updateTheme,\n applyThemeAllSlide,\n viewportRatio,\n updateViewportRatio,\n showPresetThemes,\n togglePresetThemesVisible,\n }\n },\n})\n","import { render } from \"./SlideDesignPanel.vue?vue&type=template&id=0e2f846d&scoped=true&ts=true\"\nimport script from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideDesignPanel.vue?vue&type=style&index=0&id=0e2f846d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0e2f846d\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-251ceb05\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"slide-animation-panel\" }\nconst _hoisted_2 = { class: \"animation-pool\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"animation-text\" }\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"应用到全部\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.animations, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"animation-item\", { 'active': _ctx.currentTurningMode === item.value }]),\n key: item.label,\n onClick: ($event: any) => (_ctx.updateTurningMode(item.value))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass(['animation-block', item.value])\n }, null, 2),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(item.label), 1)\n ], 10, _hoisted_3))\n }), 128))\n ]),\n _createVNode(_component_Button, {\n style: {\"width\":\"100%\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.applyAllSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n })\n ]))\n}","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { TurningMode } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface Animations {\n label: string;\n value: TurningMode;\n}\n\nexport default defineComponent({\n name: 'slide-animation-panel',\n setup() {\n const slidesStore = useSlidesStore()\n const { slides, currentSlide } = storeToRefs(slidesStore)\n\n const currentTurningMode = computed(() => currentSlide.value.turningMode || 'slideY')\n\n const animations: 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: TurningMode) => {\n if (mode === currentTurningMode.value) return\n slidesStore.updateSlide({ 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 slidesStore.setSlides(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=251ceb05&scoped=true&ts=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=251ceb05&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-251ceb05\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e982d59\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"multi-position-panel\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\"水平均匀分布\")\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\"垂直均匀分布\")\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"组合\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"取消组合\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconAlignLeft = _resolveComponent(\"IconAlignLeft\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconAlignHorizontally = _resolveComponent(\"IconAlignHorizontally\")!\n const _component_IconAlignRight = _resolveComponent(\"IconAlignRight\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconAlignTop = _resolveComponent(\"IconAlignTop\")!\n const _component_IconAlignVertically = _resolveComponent(\"IconAlignVertically\")!\n const _component_IconAlignBottom = _resolveComponent(\"IconAlignBottom\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconGroup = _resolveComponent(\"IconGroup\")!\n const _component_IconUngroup = _resolveComponent(\"IconUngroup\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.alignElement('left')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"水平居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.alignElement('horizontal')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignHorizontally)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.alignElement('right')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"上对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.alignElement('top')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTop)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"垂直居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.alignElement('vertical')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignVertically)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.alignElement('bottom')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignBottom)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n (_ctx.displayItemCount > 2)\n ? (_openBlock(), _createBlock(_component_ButtonGroup, {\n key: 0,\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.uniformHorizontalDisplay()))\n }, {\n default: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.uniformVerticalDisplay()))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Divider),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n disabled: !_ctx.canCombine,\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.combineElements())),\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconGroup, { style: {\"margin-right\":\"3px\"} }),\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createVNode(_component_Button, {\n disabled: _ctx.canCombine,\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.uncombineElements())),\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUngroup, { style: {\"margin-right\":\"3px\"} }),\n _hoisted_5\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]),\n _: 1\n })\n ]))\n}","import { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { PPTElement } from '@/types/slides'\r\nimport { ElementAlignCommands } from '@/types/edit'\r\nimport { getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\nexport default () => {\r\n const slidesStore = useSlidesStore()\r\n const { activeElementIdList, activeElementList } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(slidesStore)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 对齐选中的元素\r\n * @param command 对齐方向\r\n */\r\n const alignActiveElement = (command: ElementAlignCommands) => {\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 slidesStore.updateSlide({ 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 { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { PPTElement } from '@/types/slides'\r\nimport { getElementRange, getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\ninterface ElementItem {\r\n min: number;\r\n max: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface GroupItem {\r\n groupId: string;\r\n els: PPTElement[];\r\n}\r\n\r\ninterface GroupElementsItem {\r\n min: number;\r\n max: number;\r\n els: PPTElement[];\r\n}\r\n\r\ntype Item = ElementItem | GroupElementsItem\r\n\r\ninterface ElementWithPos {\r\n pos: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface LastPos {\r\n min: number;\r\n max: number;\r\n}\r\n\r\nexport default () => {\r\n const slidesStore = useSlidesStore()\r\n const { activeElementIdList, activeElementList } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(slidesStore)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n const displayItemCount = computed(() => {\r\n let count = 0\r\n const groupIdList: string[] = []\r\n for (const el of activeElementList.value) {\r\n if (!el.groupId) count += 1\r\n else if (!groupIdList.includes(el.groupId)) {\r\n groupIdList.push(el.groupId)\r\n count += 1\r\n }\r\n }\r\n return count\r\n })\r\n // 水平均匀排列\r\n const uniformHorizontalDisplay = () => {\r\n const { minX, maxX } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n // 分别获取普通元素和组合元素集合,并记录下每一项的范围\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minX, maxX } = getElementRange(el)\r\n singleElemetList.push({ min: minX, max: maxX, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minX, maxX } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minX, max: maxX, els: groupItem.els })\r\n }\r\n\r\n // 将普通元素和组合元素集合组合在一起,然后将每一项按位置(从左到右)排序\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n // 计算元素均匀分布所需要的间隔:\r\n // (所选元素整体范围 - 所有所选元素宽度和) / (所选元素数 - 1)\r\n let totalWidth = 0\r\n for (const item of list) {\r\n const width = item.max - item.min\r\n totalWidth += width\r\n }\r\n const span = ((maxX - minX) - totalWidth) / (list.length - 1)\r\n\r\n // 按位置顺序依次计算每一个元素的目标位置\r\n // 第一项中的元素即为起点,无需计算\r\n // 从第二项开始,每一项的位置应该为:上一项位置 + 上一项宽度 + 间隔\r\n // 注意此处计算的位置(pos)并非元素最终的left值,而是目标位置范围最小值(元素旋转后的left值 ≠ 范围最小值)\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minX: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastWidth = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastWidth + span\r\n const currentWidth = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentWidth }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minX } = getElementRange(el)\r\n const offset = minX - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n // 根据目标位置计算元素最终目标left值\r\n // 对于旋转后的元素,需要计算旋转前后left的偏移来做校正\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = sortedItem.pos - offsetX\r\n }\r\n else element.left = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n slidesStore.updateSlide({ elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n // 垂直均匀排列(逻辑类似水平均匀排列方法)\r\n const uniformVerticalDisplay = () => {\r\n const { minY, maxY } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minY, maxY } = getElementRange(el)\r\n singleElemetList.push({ min: minY, max: maxY, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minY, maxY } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minY, max: maxY, els: groupItem.els })\r\n }\r\n\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n let totalHeight = 0\r\n for (const item of list) {\r\n const height = item.max - item.min\r\n totalHeight += height\r\n }\r\n const span = ((maxY - minY) - totalHeight) / (list.length - 1)\r\n\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minY: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastHeight = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastHeight + span\r\n const currentHeight = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentHeight }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minY } = getElementRange(el)\r\n const offset = minY - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = sortedItem.pos - offsetY\r\n }\r\n else element.top = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n slidesStore.updateSlide({ elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n displayItemCount,\r\n uniformHorizontalDisplay,\r\n uniformVerticalDisplay,\r\n }\r\n}","\nimport { defineComponent } from 'vue'\nimport { ElementAlignCommands } from '@/types/edit'\nimport useCombineElement from '@/hooks/useCombineElement'\nimport useAlignActiveElement from '@/hooks/useAlignActiveElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useUniformDisplayElement from '@/hooks/useUniformDisplayElement'\n\nexport default defineComponent({\n name: 'multi-position-panel',\n setup() {\n const { canCombine, combineElements, uncombineElements } = useCombineElement()\n const { alignActiveElement } = useAlignActiveElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { displayItemCount, uniformHorizontalDisplay, uniformVerticalDisplay } = useUniformDisplayElement()\n\n // 多选元素对齐,需要先判断当前所选中的元素状态:\n // 如果所选元素为一组组合元素,则将它对齐到画布;\n // 如果所选元素不是组合元素或不止一组元素(即当前为可组合状态),则将这多个(多组)元素相互对齐。\n const alignElement = (command: ElementAlignCommands) => {\n if (canCombine.value) alignActiveElement(command)\n else alignElementToCanvas(command)\n }\n\n return {\n canCombine,\n displayItemCount,\n combineElements,\n uncombineElements,\n uniformHorizontalDisplay,\n uniformVerticalDisplay,\n alignElement,\n }\n },\n})\n","import { render } from \"./MultiPositionPanel.vue?vue&type=template&id=2e982d59&scoped=true&ts=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=2e982d59&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2e982d59\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8c5938\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"symbol-panel\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"pool\" }\nconst _hoisted_5 = [\"onClick\"]\nconst _hoisted_6 = { class: \"symbol\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolPoolList, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': _ctx.selectedSymbolKey === item.key }]),\n key: item.key,\n onClick: ($event: any) => (_ctx.selectedSymbolKey = item.key)\n }, _toDisplayString(item.label), 11, _hoisted_3))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolPool, (item, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"symbol-item\",\n key: index,\n onClick: ($event: any) => (_ctx.selectSymbol(item))\n }, [\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(item), 1)\n ], 8, _hoisted_5))\n }), 128))\n ])\n ]))\n}","export const SYMBOL_LIST = [\n {\n key: 'letter',\n label: '字母',\n children: [\n 'α', 'β', 'γ', 'δ', 'ϵ', 'ε', 'ζ', 'η', 'θ', 'ϑ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'π', 'ϖ', 'ρ', 'ϱ', 'σ', 'ς', 'τ', 'υ', 'ϕ', 'φ', 'χ', 'ψ', 'ω', \n 'Γ', 'Δ', 'Θ', 'Λ', 'Ξ', 'Π', 'Σ', 'Υ', 'Φ', 'Ψ', 'Ω',\n '𝐀', '𝐁', '𝐂', '𝐃', '𝐄', '𝐅', '𝐆', '𝐇', '𝐈', '𝐉', '𝐊', '𝐋', '𝐌', '𝐍', '𝐎', '𝐏', '𝐐', '𝐑', '𝐒', '𝐓', '𝐔', '𝐕', '𝐖', '𝐗', '𝐘', '𝐙',\n '𝐚', '𝐛', '𝐜', '𝐝', '𝐞', '𝐟', '𝐠', '𝐡', '𝐢', '𝐣', '𝐤', '𝐥', '𝐦', '𝐧', '𝐨', '𝐩', '𝐪', '𝐫', '𝐬', '𝐭', '𝐮', '𝐯', '𝐰', '𝐱', '𝐲', '𝐳',\n '𝓐', '𝓑', '𝓒', '𝓓', '𝓔', '𝓕', '𝓖', '𝓗', '𝓘', '𝓙', '𝓚', '𝓛', '𝓜', '𝓝', '𝓞', '𝓟', '𝓠', '𝓡', '𝓢', '𝓣', '𝓤', '𝓥', '𝓦', '𝓧', '𝓨', '𝓩',\n '𝓪', '𝓫', '𝓬', '𝓭', '𝓮', '𝓯', '𝓰', '𝓱', '𝓲', '𝓳', '𝓴', '𝓵', '𝓶', '𝓷', '𝓸', '𝓹', '𝓺', '𝓻', '𝓼', '𝓽', '𝓾', '𝓿', '𝔀', '𝔁', '𝔂', '𝔃',\n ],\n },\n {\n key: 'number',\n label: '序号',\n children: [\n '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬', '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳',\n '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀', '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇',\n 'º', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹', '₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉',\n 'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', 'Ⅹ', 'Ⅺ', 'Ⅻ', 'Ⅼ', 'Ⅽ', 'Ⅾ', 'Ⅿ',\n 'ⅰ', 'ⅱ', 'ⅲ', 'ⅳ', 'ⅴ', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', 'ⅹ', 'ⅺ', 'ⅻ', 'ⅼ', 'ⅽ', 'ⅾ', 'ⅿ', 'ↀ', 'ↁ', 'ↂ',\n '㊀', '㊁', '㊂', '㊃', '㊄', '㊅', '㊆', '㊇', '㊈', '㊉', '㈠', '㈡', '㈢', '㈣', '㈤', '㈥', '㈦', '㈧', '㈨', '㈩',\n '𝟘', '𝟙', '𝟚', '𝟛', '𝟜', '𝟝', '𝟞', '𝟟', '𝟠', '𝟡',\n ],\n },\n {\n key: 'math',\n label: '数学',\n children: [\n '+', '-', '×', '÷', '=', '~', '¬', '±', '%', '°', 'ǃ', '‰', '‱', '½', '⅓', '⅔', '¼', '¾',\n '<', '>', 'l', 'o', 'g', 'l', 'g', 'l', 'n', '⨂', '⨁', '⨄', '⨃', '⨅', '⨆', '√', '∛', '∜', '∝', '∞',\n '∟', '∠', '∡', '∢', '∧', '∨', '∩', '∪', '∫', '∬', '∭', '∮', '∯', '∰', '∱', '∲', '∳',\n '∴', '∵', '∼', '∽', '∾', '∿', '≃', '≄', '≅', '≆', '≇', '≈', '≊', '≋', '≌', '≍', '≎', '≏', '≐', '≑', '≒', '≓', '≔', '≕',\n '≤', '≥', '≦', '≧', '≨', '≩', '≪', '≫', '≺', '≻', '≼', '≽', '≾', '≿', '⊀', '⊁', '⊂', '⊃', '⊄', '⊅', '⊆', '⊇', '⊈', '⊉', '⊊', '⊋', '⊏', '⊐', '⊑', '⊒',\n '⊓', '⊔', '⊢', '⊣', '⊤', '⊥', '⊦', '⊧', '⊨', '⊩', '⊪', '⊫', '⊬', '⊭', '⊮', '⊯', '⊲', '⊳', '⊴', '⊵', '⋀', '⋁', '⋂', '⋃', '⋉', '⋊',\n '⋋', '⋌', '⟨', '⟩', '⟪', '⟫', '⟮', '⟯', '⧼', '⧽', '⦰',\n ],\n },\n {\n key: 'arrow',\n label: '箭头',\n children: [\n '←', '↑', '→', '↓', '↔', '↕', '↖', '↗', '↘', '↙', '↚', '↛', '↜', '↝', '↞', '↟', '↠', '↡', '↢', '↣', '↤', '↥', '↦', '↧', '↨',\n '↫', '↬', '↭', '↮', '↯', '↰', '↱', '↲', '↳', '↴', '↵', '↶', '↷', '↸', '↹', '↺', '↻', '↼', '↽', '↾', '↿', '⇀', '⇁', '⇂', '⇃',\n '⇄', '⇅', '⇆', '⇇', '⇈', '⇉', '⇊', '⇋', '⇌', '⇍', '⇎', '⇏', '⇐', '⇑', '⇒', '⇓', '⇔', '⇕', '⇖', '⇗', '⇘', '⇙', '⇚', '⇛',\n '⇜', '⇝', '⇞', '⇟', '⇠', '⇡', '⇢', '⇣', '⇤', '⇥', '⇦', '⇧', '⇨', '⇩', '⇪', '⇫', '⇬', '⇭', '⇮', '⇯', '⇰', '⇱', '⇲', '⇳', '⇴', '⇵',\n '⇶', '⇷', '⇸', '⇹', '⇺', '⇻', '⇼', '⇽', '⇾', '⇿',\n ],\n },\n {\n key: 'graph',\n label: '图形',\n children: [\n '▢', '▣', '▤', '▥', '▦', '▧', '▨', '▩', '▭', '▮', '▯', '▰', '▱', '▲', '▷', '▼', '◁',\n '◈', '◉', '◍', '◐', '◑', '◒', '◓', '◔', '◕', '◧', '◨', '◩', '◪', '◫', '◬', '◭', '◮',\n ],\n },\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { SYMBOL_LIST } from '@/configs/symbol'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\n\nconst symbolPoolList = SYMBOL_LIST\n\nexport default defineComponent({\n name: 'symbol-panel',\n setup() {\n const selectedSymbolKey = ref(symbolPoolList[0].key)\n const symbolPool = computed(() => {\n const selectedSymbol = symbolPoolList.find(item => item.key === selectedSymbolKey.value)\n return selectedSymbol?.children || []\n })\n\n const selectSymbol = (item: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command: 'insert', value: item })\n }\n\n return {\n symbolPoolList,\n symbolPool,\n selectedSymbolKey,\n selectSymbol,\n }\n },\n})\n","import { render } from \"./SymbolPanel.vue?vue&type=template&id=6b8c5938&scoped=true&ts=true\"\nimport script from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SymbolPanel.vue?vue&type=style&index=0&id=6b8c5938&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6b8c5938\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { ToolbarStates } from '@/types/toolbar'\n\nimport ElementStylePanel from './ElementStylePanel/index.vue'\nimport ElementPositionPanel from './ElementPositionPanel.vue'\nimport ElementAnimationPanel from './ElementAnimationPanel.vue'\nimport SlideDesignPanel from './SlideDesignPanel.vue'\nimport SlideAnimationPanel from './SlideAnimationPanel.vue'\nimport MultiPositionPanel from './MultiPositionPanel.vue'\nimport SymbolPanel from './SymbolPanel.vue'\n\ninterface ElementTabs {\n label: string;\n value: ToolbarStates;\n}\n\nexport default defineComponent({\n name: 'toolbar',\n setup() {\n const mainStore = useMainStore()\n const { activeElementIdList, handleElement, toolbarState } = storeToRefs(mainStore)\n\n const elementTabs = computed(() => {\n if (handleElement.value?.type === 'text') {\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '符号', value: ToolbarStates.SYMBOL },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n }\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n })\n const slideTabs = [\n { label: '设计', value: ToolbarStates.SLIDE_DESIGN },\n { label: '切换', value: ToolbarStates.SLIDE_ANIMATION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n const multiSelectTabs = [\n { label: '位置', value: ToolbarStates.MULTI_POSITION },\n { label: '样式', value: ToolbarStates.EL_STYLE },\n ]\n\n const setToolbarState = (value: ToolbarStates) => {\n mainStore.setToolbarState(value)\n }\n\n const currentTabs = computed(() => {\n if (!activeElementIdList.value.length) return slideTabs\n else if (activeElementIdList.value.length > 1) return multiSelectTabs\n return elementTabs.value\n })\n\n watch(currentTabs, () => {\n const currentTabsValue: ToolbarStates[] = currentTabs.value.map(tab => tab.value)\n if (!currentTabsValue.includes(toolbarState.value)) {\n mainStore.setToolbarState(currentTabsValue[0])\n }\n })\n\n const currentPanelComponent = computed(() => {\n const panelMap = {\n [ToolbarStates.EL_STYLE]: ElementStylePanel,\n [ToolbarStates.EL_POSITION]: ElementPositionPanel,\n [ToolbarStates.EL_ANIMATION]: ElementAnimationPanel,\n [ToolbarStates.SLIDE_DESIGN]: SlideDesignPanel,\n [ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,\n [ToolbarStates.MULTI_POSITION]: MultiPositionPanel,\n [ToolbarStates.SYMBOL]: SymbolPanel,\n }\n return panelMap[toolbarState.value] || null\n })\n\n return {\n toolbarState,\n currentTabs,\n setToolbarState,\n currentPanelComponent,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=84601b0a&scoped=true&ts=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=84601b0a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-84601b0a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7ed67bb3\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"remark\" }\nconst _hoisted_2 = [\"value\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"resize-handler\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.resize($event))\n }, null, 32),\n _createElementVNode(\"textarea\", {\n value: _ctx.remark,\n placeholder: \"点击输入演讲者备注\",\n onInput: _cache[1] || (_cache[1] = $event => _ctx.handleInput($event))\n }, null, 40, _hoisted_2)\n ]))\n}","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\n\nexport default defineComponent({\n name: 'remark',\n emits: ['update:height'],\n props: {\n height: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const slidesStore = useSlidesStore()\n const { currentSlide } = storeToRefs(slidesStore)\n \n const remark = computed(() => currentSlide.value?.remark || '')\n\n const handleInput = (e: Event) => {\n const value = (e.target as HTMLTextAreaElement).value\n slidesStore.updateSlide({ 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=7ed67bb3&scoped=true&ts=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=7ed67bb3&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7ed67bb3\"]])\n\nexport default __exports__","\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&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-55178b6a\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-18f794c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"pptist-screen\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BaseView = _resolveComponent(\"BaseView\")!\n const _component_PresenterView = _resolveComponent(\"PresenterView\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.viewMode === 'base')\n ? (_openBlock(), _createBlock(_component_BaseView, {\n key: 0,\n changeViewMode: _ctx.changeViewMode\n }, null, 8, [\"changeViewMode\"]))\n : (_ctx.viewMode === 'presenter')\n ? (_openBlock(), _createBlock(_component_PresenterView, {\n key: 1,\n changeViewMode: _ctx.changeViewMode\n }, null, 8, [\"changeViewMode\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, createVNode as _createVNode, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2ed6935e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"tools-left\" }\nconst _hoisted_2 = { class: \"content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ScreenSlideList = _resolveComponent(\"ScreenSlideList\")!\n const _component_SlideThumbnails = _resolveComponent(\"SlideThumbnails\")!\n const _component_WritingBoardTool = _resolveComponent(\"WritingBoardTool\")!\n const _component_IconLeftTwo = _resolveComponent(\"IconLeftTwo\")!\n const _component_IconRightTwo = _resolveComponent(\"IconRightTwo\")!\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconMagic = _resolveComponent(\"IconMagic\")!\n const _component_IconListView = _resolveComponent(\"IconListView\")!\n const _component_IconOffScreenOne = _resolveComponent(\"IconOffScreenOne\")!\n const _component_IconFullScreenOne = _resolveComponent(\"IconFullScreenOne\")!\n const _component_IconPower = _resolveComponent(\"IconPower\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"base-view\", { 'laser-pen': _ctx.laserPen }])\n }, [\n _withDirectives(_createVNode(_component_ScreenSlideList, {\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen,\n onMousewheel: _cache[0] || (_cache[0] = $event => _ctx.mousewheelListener($event)),\n onTouchstart: _cache[1] || (_cache[1] = $event => _ctx.touchStartListener($event)),\n onTouchend: _cache[2] || (_cache[2] = $event => _ctx.touchEndListener($event))\n }, null, 8, [\"slideWidth\", \"slideHeight\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"]), [\n [_directive_contextmenu, _ctx.contextmenus]\n ]),\n (_ctx.slideThumbnailModelVisible)\n ? (_openBlock(), _createBlock(_component_SlideThumbnails, {\n key: 0,\n turnSlideToIndex: _ctx.turnSlideToIndex,\n onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.slideThumbnailModelVisible = false))\n }, null, 8, [\"turnSlideToIndex\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.writingBoardToolVisible)\n ? (_openBlock(), _createBlock(_component_WritingBoardTool, {\n key: 1,\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n onClose: _cache[4] || (_cache[4] = ($event: any) => (_ctx.writingBoardToolVisible = false))\n }, null, 8, [\"slideWidth\", \"slideHeight\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_IconLeftTwo, {\n class: \"tool-btn\",\n theme: \"two-tone\",\n fill: ['#111', '#fff'],\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.execPrev()))\n }),\n _createVNode(_component_IconRightTwo, {\n class: \"tool-btn\",\n theme: \"two-tone\",\n fill: ['#111', '#fff'],\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.execNext()))\n })\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"tools-right\", { 'visible': _ctx.rightToolsVisible }]),\n onMouseleave: _cache[14] || (_cache[14] = ($event: any) => (_ctx.rightToolsVisible = false)),\n onMouseenter: _cache[15] || (_cache[15] = ($event: any) => (_ctx.rightToolsVisible = true))\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: \"tool-btn page-number\",\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.slideThumbnailModelVisible = true))\n }, \"幻灯片 \" + _toDisplayString(_ctx.slideIndex + 1) + \" / \" + _toDisplayString(_ctx.slides.length), 1),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"画笔工具\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconWrite, {\n class: \"tool-btn\",\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.writingBoardToolVisible = true))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"激光笔\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconMagic, {\n class: _normalizeClass([\"tool-btn\", { 'active': _ctx.laserPen }]),\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.laserPen = !_ctx.laserPen))\n }, null, 8, [\"class\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"演讲者视图\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconListView, {\n class: \"tool-btn\",\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.changeViewMode('presenter')))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: _ctx.fullscreenState ? '退出全屏' : '进入全屏'\n }, {\n default: _withCtx(() => [\n (_ctx.fullscreenState)\n ? (_openBlock(), _createBlock(_component_IconOffScreenOne, {\n key: 0,\n class: \"tool-btn\",\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.manualExitFullscreen()))\n }))\n : (_openBlock(), _createBlock(_component_IconFullScreenOne, {\n key: 1,\n class: \"tool-btn\",\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.enterFullscreen()))\n }))\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\", \"title\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"结束放映\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPower, {\n class: \"tool-btn\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.exitScreening()))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ])\n ], 34)\n ], 2))\n}","import { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { throttle } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { KEYS } from '@/configs/hotkey'\n\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n const { slides, slideIndex, currentSlide } = storeToRefs(slidesStore)\n\n // 当前页的元素动画列表和当前执行到的位置\n const animations = computed(() => currentSlide.value.animations || [])\n const animationIndex = ref(0)\n\n // 执行元素的入场动画\n const runAnimation = () => {\n const prefix = 'animate__'\n const animation = animations.value[animationIndex.value]\n animationIndex.value += 1\n\n const elRef = document.querySelector(`#screen-element-${animation.elId} [class^=base-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animation.type}`\n document.documentElement.style.setProperty('--animate-duration', `${animation.duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 关闭自动播放\n const autoPlayTimer = ref(0)\n const closeAutoPlay = () => {\n if (autoPlayTimer.value) {\n clearInterval(autoPlayTimer.value)\n autoPlayTimer.value = 0\n }\n }\n onUnmounted(closeAutoPlay)\n\n const throttleMassage = throttle(function(msg) {\n message.success(msg)\n }, 1000, { leading: true, trailing: false })\n\n // 向上/向下播放\n // 遇到元素动画时,优先执行动画播放,无动画则执行翻页\n // 向上播放遇到动画时,仅撤销到动画执行前的状态,不需要反向播放动画\n const execPrev = () => {\n if (animations.value.length && animationIndex.value > 0) {\n animationIndex.value -= 1\n }\n else if (slideIndex.value > 0) {\n slidesStore.updateSlideIndex(slideIndex.value - 1)\n const lastIndex = animations.value ? animations.value.length : 0\n animationIndex.value = lastIndex\n }\n else {\n throttleMassage('已经是第一页了')\n }\n }\n const execNext = () => {\n if (animations.value.length && animationIndex.value < animations.value.length) {\n runAnimation()\n }\n else if (slideIndex.value < slides.value.length - 1) {\n slidesStore.updateSlideIndex(slideIndex.value + 1)\n animationIndex.value = 0\n }\n else {\n throttleMassage('已经是最后一页了')\n closeAutoPlay()\n }\n }\n\n // 自动播放\n const autoPlay = () => {\n closeAutoPlay()\n message.success('开始自动放映')\n autoPlayTimer.value = setInterval(execNext, 2500)\n }\n\n // 鼠标滚动翻页\n const mousewheelListener = throttle(function(e: WheelEvent) {\n if (e.deltaY < 0) execPrev()\n else if (e.deltaY > 0) execNext()\n }, 500, { leading: true, trailing: false })\n\n // 触摸屏上下滑动翻页\n const touchInfo = ref<{ x: number; y: number; } | null>(null)\n\n const touchStartListener = (e: TouchEvent) => {\n touchInfo.value = {\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n }\n }\n const touchEndListener = (e: TouchEvent) => {\n if (!touchInfo.value) return\n\n const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].pageX)\n const offsetY = e.changedTouches[0].pageY - touchInfo.value.y\n\n if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) {\n touchInfo.value = null\n\n if (offsetY > 0) execPrev()\n else execNext()\n }\n }\n\n // 快捷键翻页\n const keydownListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n\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(() => document.addEventListener('keydown', keydownListener))\n onUnmounted(() => document.removeEventListener('keydown', keydownListener))\n\n // 切换到上一张/上一张幻灯片(无视元素的入场动画)\n const turnPrevSlide = () => {\n slidesStore.updateSlideIndex(slideIndex.value - 1)\n animationIndex.value = 0\n }\n const turnNextSlide = () => {\n slidesStore.updateSlideIndex(slideIndex.value + 1)\n animationIndex.value = 0\n }\n\n // 切换幻灯片到指定的页面\n const turnSlideToIndex = (index: number) => {\n slidesStore.updateSlideIndex(index)\n animationIndex.value = 0\n }\n const turnSlideToId = (id: string) => {\n const index = slides.value.findIndex(slide => slide.id === id)\n if (index !== -1) {\n slidesStore.updateSlideIndex(index)\n animationIndex.value = 0\n }\n }\n\n return {\n autoPlayTimer,\n autoPlay,\n closeAutoPlay,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnPrevSlide,\n turnNextSlide,\n turnSlideToIndex,\n turnSlideToId,\n execPrev,\n execNext,\n animationIndex,\n }\n}","import { onMounted, onUnmounted, Ref, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\n\nexport default (wrapRef?: Ref) => {\n const slidesStore = useSlidesStore()\n const { viewportRatio } = storeToRefs(slidesStore)\n\n const slideWidth = ref(0)\n const slideHeight = ref(0)\n\n // 计算和更新幻灯片内容的尺寸(按比例自适应屏幕)\n const setSlideContentSize = () => {\n const slideWrapRef = wrapRef?.value || document.body\n const winWidth = slideWrapRef.clientWidth\n const winHeight = slideWrapRef.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 onMounted(() => {\n setSlideContentSize()\n window.addEventListener('resize', setSlideContentSize)\n })\n onUnmounted(() => {\n window.removeEventListener('resize', setSlideContentSize)\n })\n\n return {\n slideWidth,\n slideHeight,\n }\n}","import { onMounted, onUnmounted, ref } from 'vue'\nimport { isFullscreen, exitFullscreen } from '@/utils/fullscreen'\nimport useScreening from '@/hooks/useScreening'\n\nexport default () => {\n const fullscreenState = ref(true)\n const escExit = ref(true)\n\n const { exitScreening } = useScreening()\n\n const windowResizeListener = () => {\n fullscreenState.value = isFullscreen()\n if (!fullscreenState.value && escExit.value) exitScreening()\n\n escExit.value = true\n }\n\n onMounted(() => {\n fullscreenState.value = isFullscreen()\n window.addEventListener('resize', windowResizeListener)\n })\n onUnmounted(() => window.removeEventListener('resize', windowResizeListener))\n\n const manualExitFullscreen = () => {\n if (!fullscreenState.value) return\n escExit.value = false\n exitFullscreen()\n }\n\n return {\n fullscreenState,\n manualExitFullscreen,\n }\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-056764ac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"screen-slide-list\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ScreenSlide = _resolveComponent(\"ScreenSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\n 'slide-item', \n `turning-mode-${slide.turningMode || 'slideY'}`,\n {\n 'current': index === _ctx.slideIndex,\n 'before': index < _ctx.slideIndex,\n 'after': index > _ctx.slideIndex,\n 'hide': (index === _ctx.slideIndex - 1 || index === _ctx.slideIndex + 1) && slide.turningMode !== _ctx.currentSlide.turningMode,\n }\n ]),\n key: slide.id\n }, [\n (Math.abs(_ctx.slideIndex - index) < 2)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"slide-content\",\n style: _normalizeStyle({\n width: _ctx.slideWidth + 'px',\n height: _ctx.slideHeight + 'px',\n })\n }, [\n _createVNode(_component_ScreenSlide, {\n slide: slide,\n scale: _ctx.scale,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen\n }, null, 8, [\"slide\", \"scale\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"])\n ], 4))\n : _createCommentVNode(\"\", true)\n ], 2))\n }), 128))\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ScreenElement = _resolveComponent(\"ScreenElement\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"screen-slide\",\n style: _normalizeStyle({\n width: _ctx.VIEWPORT_SIZE + 'px',\n height: _ctx.VIEWPORT_SIZE * _ctx.viewportRatio + 'px',\n transform: `scale(${_ctx.scale})`,\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"background\",\n style: _normalizeStyle({ ..._ctx.backgroundStyle })\n }, null, 4),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slide.elements, (element, index) => {\n return (_openBlock(), _createBlock(_component_ScreenElement, {\n key: element.id,\n elementInfo: element,\n elementIndex: index + 1,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen\n }, null, 8, [\"elementInfo\", \"elementIndex\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"]))\n }), 128))\n ], 4))\n}","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-360fef5f\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"id\", \"title\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"screen-element\", { 'link': _ctx.elementInfo.link }]),\n id: `screen-element-${_ctx.elementInfo.id}`,\n style: _normalizeStyle({\n zIndex: _ctx.elementIndex,\n color: _ctx.theme.fontColor,\n fontFamily: _ctx.theme.fontName,\n visibility: _ctx.needWaitAnimation ? 'hidden' : 'visible',\n }),\n title: _ctx.elementInfo.link?.target || '',\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.openLink()))\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentElementComponent), { elementInfo: _ctx.elementInfo }, null, 8, [\"elementInfo\"]))\n ], 14, _hoisted_1))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BaseChartElement = _resolveComponent(\"BaseChartElement\")!\n\n return (_openBlock(), _createBlock(_component_BaseChartElement, {\n class: \"screen-element-chart\",\n elementInfo: _ctx.elementInfo,\n needScaleSize: false\n }, null, 8, [\"elementInfo\"]))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTChartElement } from '@/types/slides'\n\nimport BaseChartElement from './BaseChartElement.vue'\n\nexport default defineComponent({\n name: 'screen-element-chart',\n components: {\n BaseChartElement,\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=645e6419&ts=true\"\nimport script from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0ef8b6c0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_VideoPlayer = _resolveComponent(\"VideoPlayer\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"screen-element-video\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.inCurrentSlide)\n ? (_openBlock(), _createBlock(_component_VideoPlayer, {\n key: 0,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n src: _ctx.elementInfo.src,\n poster: _ctx.elementInfo.poster,\n scale: _ctx.scale\n }, null, 8, [\"width\", \"height\", \"src\", \"poster\", \"scale\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 4)\n ], 4))\n}","\nimport { computed, defineComponent, inject, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { PPTVideoElement } from '@/types/slides'\nimport { injectKeySlideId, injectKeySlideScale } from '@/types/injectKey'\n\nimport VideoPlayer from './VideoPlayer/index.vue'\n\nexport default defineComponent({\n name: 'screen-element-video',\n components: {\n VideoPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup() {\n const { currentSlide } = storeToRefs(useSlidesStore())\n\n const scale = inject(injectKeySlideScale) || ref(1)\n const slideId = inject(injectKeySlideId) || ref('')\n\n const inCurrentSlide = computed(() => currentSlide.value.id === slideId.value)\n\n return {\n scale,\n inCurrentSlide,\n }\n },\n})\n","import { render } from \"./ScreenVideoElement.vue?vue&type=template&id=0ef8b6c0&scoped=true&ts=true\"\nimport script from \"./ScreenVideoElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenVideoElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenVideoElement.vue?vue&type=style&index=0&id=0ef8b6c0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0ef8b6c0\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1adba489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_AudioPlayer = _resolveComponent(\"AudioPlayer\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"screen-element-audio\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_IconVolumeNotice, {\n class: \"audio-icon\",\n style: _normalizeStyle({\n fontSize: _ctx.audioIconSize,\n color: _ctx.elementInfo.color,\n }),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.toggle()))\n }, null, 8, [\"style\"]),\n (_ctx.inCurrentSlide)\n ? (_openBlock(), _createBlock(_component_AudioPlayer, {\n key: 0,\n class: \"audio-player\",\n ref: \"audioPlayerRef\",\n style: _normalizeStyle({ ..._ctx.audioPlayerPosition }),\n src: _ctx.elementInfo.src,\n loop: _ctx.elementInfo.loop,\n autoplay: _ctx.elementInfo.autoplay,\n scale: _ctx.scale\n }, null, 8, [\"style\", \"src\", \"loop\", \"autoplay\", \"scale\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 4)\n ], 4))\n}","\nimport { computed, defineComponent, inject, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { PPTAudioElement } from '@/types/slides'\nimport { injectKeySlideId, injectKeySlideScale } from '@/types/injectKey'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nimport AudioPlayer from './AudioPlayer.vue'\n\nexport default defineComponent({\n name: 'screen-element-audio',\n components: {\n AudioPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const { viewportRatio, currentSlide } = storeToRefs(useSlidesStore())\n\n const scale = inject(injectKeySlideScale) || ref(1)\n const slideId = inject(injectKeySlideId) || ref('')\n\n const inCurrentSlide = computed(() => currentSlide.value.id === slideId.value)\n\n const audioIconSize = computed(() => {\n return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'\n })\n const audioPlayerPosition = computed(() => {\n const canvasWidth = VIEWPORT_SIZE\n const canvasHeight = VIEWPORT_SIZE * viewportRatio.value\n\n const audioWidth = 280 / scale.value\n const audioHeight = 50 / scale.value\n\n const elWidth = props.elementInfo.width\n const elHeight = props.elementInfo.height\n const elLeft = props.elementInfo.left\n const elTop = props.elementInfo.top\n\n let left = 0\n let top = elHeight\n \n if (elLeft + audioWidth >= canvasWidth) left = elWidth - audioWidth\n if (elTop + elHeight + audioHeight >= canvasHeight) top = -audioHeight\n\n return {\n left: left + 'px',\n top: top + 'px',\n }\n })\n\n const audioPlayerRef = ref()\n const toggle = () => {\n if (!audioPlayerRef.value) return\n audioPlayerRef.value.toggle()\n }\n\n return {\n scale,\n inCurrentSlide,\n audioIconSize,\n audioPlayerPosition,\n audioPlayerRef,\n toggle,\n }\n },\n})\n","import { render } from \"./ScreenAudioElement.vue?vue&type=template&id=1adba489&scoped=true&ts=true\"\nimport script from \"./ScreenAudioElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenAudioElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenAudioElement.vue?vue&type=style&index=0&id=1adba489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1adba489\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\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 ScreenChartElement from '@/views/components/element/ChartElement/ScreenChartElement.vue'\nimport BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue'\nimport BaseLatexElement from '@/views/components/element/LatexElement/BaseLatexElement.vue'\nimport ScreenVideoElement from '@/views/components/element/VideoElement/ScreenVideoElement.vue'\nimport ScreenAudioElement from '@/views/components/element/AudioElement/ScreenAudioElement.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 turnSlideToId: {\n type: Function as PropType<(id: string) => void>,\n required: true,\n },\n manualExitFullscreen: {\n type: Function as PropType<() => void>,\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]: ScreenChartElement,\n [ElementTypes.TABLE]: BaseTableElement,\n [ElementTypes.LATEX]: BaseLatexElement,\n [ElementTypes.VIDEO]: ScreenVideoElement,\n [ElementTypes.AUDIO]: ScreenAudioElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const { currentSlide, theme } = storeToRefs(useSlidesStore())\n\n // 判断元素是否需要等待执行入场动画:等待执行的元素需要先隐藏\n const needWaitAnimation = computed(() => {\n const animations = currentSlide.value.animations || []\n const elementIndexInAnimation = animations.findIndex(animation => animation.elId === props.elementInfo.id)\n if (elementIndexInAnimation !== -1 && elementIndexInAnimation >= props.animationIndex) return true\n return false \n })\n\n // 打开元素绑定的超链接\n const openLink = () => {\n const link = props.elementInfo.link\n if (!link) return\n\n if (link.type === 'web') {\n props.manualExitFullscreen()\n window.open(link.target)\n }\n else if (link.type === 'slide') {\n props.turnSlideToId(link.target)\n }\n }\n\n return {\n currentElementComponent,\n needWaitAnimation,\n theme,\n openLink,\n }\n },\n})\n","import { render } from \"./ScreenElement.vue?vue&type=template&id=360fef5f&scoped=true&ts=true\"\nimport script from \"./ScreenElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenElement.vue?vue&type=style&index=0&id=360fef5f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-360fef5f\"]])\n\nexport default __exports__","\nimport { computed, PropType, defineComponent, provide } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { injectKeySlideId } from '@/types/injectKey'\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 turnSlideToId: {\n type: Function as PropType<(id: string) => void>,\n required: true,\n },\n manualExitFullscreen: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const { viewportRatio } = storeToRefs(useSlidesStore())\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n const slideId = computed(() => props.slide.id)\n provide(injectKeySlideId, slideId)\n\n return {\n backgroundStyle,\n VIEWPORT_SIZE,\n viewportRatio,\n }\n },\n})\n","import { render } from \"./ScreenSlide.vue?vue&type=template&id=30708559&scoped=true&ts=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=30708559&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-30708559\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType, provide } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { injectKeySlideScale } from '@/types/injectKey'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nimport ScreenSlide from './ScreenSlide.vue'\n\nexport default defineComponent({\n name: 'screen-slide-list',\n components: {\n ScreenSlide,\n },\n props: {\n slideWidth: {\n type: Number,\n required: true,\n },\n slideHeight: {\n type: Number,\n required: true,\n },\n animationIndex: {\n type: Number,\n default: -1,\n },\n turnSlideToId: {\n type: Function as PropType<(id: string) => void>,\n required: true,\n },\n manualExitFullscreen: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const { slides, slideIndex, currentSlide } = storeToRefs(useSlidesStore())\n\n const scale = computed(() => props.slideWidth / VIEWPORT_SIZE)\n provide(injectKeySlideScale, scale)\n\n return {\n slides,\n slideIndex,\n currentSlide,\n scale,\n }\n },\n})\n","import { render } from \"./ScreenSlideList.vue?vue&type=template&id=056764ac&scoped=true&ts=true\"\nimport script from \"./ScreenSlideList.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenSlideList.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenSlideList.vue?vue&type=style&index=0&id=056764ac&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-056764ac\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-11e5b856\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"slide-thumbnails\" }\nconst _hoisted_2 = { class: \"return-button\" }\nconst _hoisted_3 = { class: \"slide-thumbnails-content\" }\nconst _hoisted_4 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconArrowCircleLeft = _resolveComponent(\"IconArrowCircleLeft\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_IconArrowCircleLeft, {\n class: \"icon\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.close()))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"thumbnail\", { 'active': index === _ctx.slideIndex }]),\n key: slide.id,\n onClick: ($event: any) => (_ctx.turnSlide(index))\n }, [\n _createVNode(_component_ThumbnailSlide, {\n slide: slide,\n size: 150,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"visible\"])\n ], 10, _hoisted_4))\n }), 128))\n ])\n ]))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport useLoadSlides from '@/hooks/useLoadSlides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'slide-thumbnails',\n emits: ['close'],\n components: {\n ThumbnailSlide,\n },\n props: {\n turnSlideToIndex: {\n type: Function as PropType<(index: number) => void>,\n required: true,\n },\n },\n setup(props, { emit }) {\n const { slides, slideIndex } = storeToRefs(useSlidesStore())\n\n const { slidesLoadLimit } = useLoadSlides()\n\n const close = () => emit('close')\n\n const turnSlide = (index: number) => {\n props.turnSlideToIndex(index)\n close()\n }\n\n return {\n slides,\n slideIndex,\n slidesLoadLimit,\n turnSlide,\n close,\n }\n },\n})\n","import { render } from \"./SlideThumbnails.vue?vue&type=template&id=11e5b856&scoped=true&ts=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=11e5b856&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-11e5b856\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-19b10edd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"writing-board-tool\" }\nconst _hoisted_2 = { class: \"colors\" }\nconst _hoisted_3 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_WritingBoard = _resolveComponent(\"WritingBoard\")!\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconHighLight = _resolveComponent(\"IconHighLight\")!\n const _component_IconErase = _resolveComponent(\"IconErase\")!\n const _component_IconClear = _resolveComponent(\"IconClear\")!\n const _component_IconFill = _resolveComponent(\"IconFill\")!\n const _component_IconClose = _resolveComponent(\"IconClose\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"writing-board-wrap\",\n style: _normalizeStyle({\n width: _ctx.slideWidth + 'px',\n height: _ctx.slideHeight + 'px',\n })\n }, [\n _createVNode(_component_WritingBoard, {\n ref: \"writingBoardRef\",\n color: _ctx.writingBoardColor,\n blackboard: _ctx.blackboard,\n model: _ctx.writingBoardModel\n }, null, 8, [\"color\", \"blackboard\", \"model\"])\n ], 4),\n _createElementVNode(\"div\", {\n class: \"tools\",\n style: _normalizeStyle(_ctx.position)\n }, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"画笔\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.writingBoardModel === 'pen' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.changeModel('pen')))\n }, [\n _createVNode(_component_IconWrite, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"荧光笔\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.writingBoardModel === 'mark' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.changeModel('mark')))\n }, [\n _createVNode(_component_IconHighLight, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"橡皮擦\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.writingBoardModel === 'eraser' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.changeModel('eraser')))\n }, [\n _createVNode(_component_IconErase, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"清除墨迹\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.clearCanvas()))\n }, [\n _createVNode(_component_IconClear, { class: \"icon\" })\n ])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"黑板\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.blackboard }]),\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.blackboard = !_ctx.blackboard))\n }, [\n _createVNode(_component_IconFill, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.writingBoardColors, (color) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"color\", { 'active': color === _ctx.writingBoardColor }]),\n key: color,\n style: _normalizeStyle({ backgroundColor: color }),\n onClick: ($event: any) => (_ctx.changeColor(color))\n }, null, 14, _hoisted_3))\n }), 128))\n ]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"关闭画笔\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.closeWritingBoard()))\n }, [\n _createVNode(_component_IconClose, { class: \"icon\" })\n ])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ], 4)\n ]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3dfd4579\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"writing-board\",\n ref: \"writingBoardRef\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"blackboard\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_IconHighLight = _resolveComponent(\"IconHighLight\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.blackboard)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"canvas\", {\n class: \"canvas\",\n ref: \"canvasRef\",\n style: _normalizeStyle({\n width: _ctx.canvasWidth + 'px',\n height: _ctx.canvasHeight + 'px',\n }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMousedown($event)),\n onMousemove: _cache[1] || (_cache[1] = $event => _ctx.handleMousemove($event)),\n onMouseup: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleMouseup())),\n onTouchstart: _cache[3] || (_cache[3] = $event => _ctx.handleMousedown($event)),\n onTouchmove: _cache[4] || (_cache[4] = $event => _ctx.handleMousemove($event)),\n onTouchend: _cache[5] || (_cache[5] = ($event: any) => {_ctx.handleMouseup(); _ctx.mouseInCanvas = false}),\n onMouseleave: _cache[6] || (_cache[6] = ($event: any) => {_ctx.handleMouseup(); _ctx.mouseInCanvas = false}),\n onMouseenter: _cache[7] || (_cache[7] = ($event: any) => (_ctx.mouseInCanvas = true))\n }, null, 36),\n (_ctx.mouseInCanvas)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n (_ctx.model === 'eraser')\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"eraser\",\n style: _normalizeStyle({\n left: _ctx.mouse.x - _ctx.rubberSize / 2 + 'px',\n top: _ctx.mouse.y - _ctx.rubberSize / 2 + 'px',\n width: _ctx.rubberSize + 'px',\n height: _ctx.rubberSize + 'px',\n })\n }, null, 4))\n : _createCommentVNode(\"\", true),\n (_ctx.model === 'pen')\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"pen\",\n style: _normalizeStyle({\n left: _ctx.mouse.x - _ctx.penSize / 2 + 'px',\n top: _ctx.mouse.y - 36 + _ctx.penSize / 2 + 'px',\n color: _ctx.color,\n })\n }, [\n (_ctx.model === 'pen')\n ? (_openBlock(), _createBlock(_component_IconWrite, {\n key: 0,\n class: \"icon\",\n size: \"36\"\n }))\n : _createCommentVNode(\"\", true)\n ], 4))\n : _createCommentVNode(\"\", true),\n (_ctx.model === 'mark')\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"pen\",\n style: _normalizeStyle({\n left: _ctx.mouse.x - _ctx.markSize / 2 + 'px',\n top: _ctx.mouse.y + 'px',\n color: _ctx.color,\n })\n }, [\n (_ctx.model === 'mark')\n ? (_openBlock(), _createBlock(_component_IconHighLight, {\n key: 0,\n class: \"icon\",\n size: \"36\"\n }))\n : _createCommentVNode(\"\", true)\n ], 4))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 512))\n}","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\n\nconst penSize = 6\nconst rubberSize = 80\nconst markSize = 25\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' | 'mark'>,\n default: 'pen',\n },\n blackboard: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n let ctx: CanvasRenderingContext2D | null = null\n const writingBoardRef = ref()\n const canvasRef = ref()\n\n let lastPos = {\n x: 0,\n y: 0,\n }\n let isMouseDown = false\n let lastTime = 0\n let lastLineWidth = -1\n\n // 鼠标位置坐标:用于画笔或橡皮位置跟随\n const mouse = ref({\n x: 0,\n y: 0,\n })\n \n // 鼠标是否处在画布范围内:处在范围内才会显示画笔或橡皮\n const mouseInCanvas = ref(false)\n\n // 监听更新canvas尺寸\n const canvasWidth = ref(0)\n const canvasHeight = ref(0)\n\n const widthScale = computed(() => canvasRef.value ? canvasWidth.value / canvasRef.value.width : 1)\n const heightScale = computed(() => canvasRef.value ? canvasHeight.value / canvasRef.value.height : 1)\n\n const updateCanvasSize = () => {\n if (!writingBoardRef.value) return\n canvasWidth.value = writingBoardRef.value.clientWidth\n canvasHeight.value = writingBoardRef.value.clientHeight\n }\n const resizeObserver = new ResizeObserver(updateCanvasSize)\n onMounted(() => {\n if (writingBoardRef.value) resizeObserver.observe(writingBoardRef.value)\n })\n onUnmounted(() => {\n if (writingBoardRef.value) resizeObserver.unobserve(writingBoardRef.value)\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 ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n }\n onMounted(initCanvas)\n\n // 切换画笔模式时,更新 canvas ctx 配置\n const updateCtx = () => {\n if (!ctx) return\n if (props.model === 'mark') {\n ctx.globalCompositeOperation = 'xor'\n ctx.globalAlpha = 0.5\n }\n else if (props.model === 'pen') {\n ctx.globalCompositeOperation = 'source-over'\n ctx.globalAlpha = 1\n }\n }\n watch(() => props.model, updateCtx)\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 if (props.model === 'mark') draw(x, y, markSize)\n else erase(x, y)\n\n lastPos = { x, y }\n lastTime = new Date().getTime()\n }\n\n // 获取鼠标在canvas中的相对位置\n const getMouseOffsetPosition = (e: MouseEvent | TouchEvent) => {\n if (!canvasRef.value) return [0, 0]\n const event = e instanceof MouseEvent ? e : e.changedTouches[0]\n const canvasRect = canvasRef.value.getBoundingClientRect()\n const x = event.pageX - canvasRect.x\n const y = event.pageY - canvasRect.y\n return [x, y]\n }\n\n // 处理鼠标(触摸)事件\n // 准备开始绘制/擦除墨迹(落笔)\n const handleMousedown = (e: MouseEvent | TouchEvent) => {\n const [mouseX, mouseY] = getMouseOffsetPosition(e)\n const x = mouseX / widthScale.value\n const y = mouseY / heightScale.value\n\n isMouseDown = true\n lastPos = { x, y }\n lastTime = new Date().getTime()\n\n if (e instanceof TouchEvent) {\n mouse.value = { x: mouseX, y: mouseY }\n mouseInCanvas.value = true\n }\n }\n\n // 开始绘制/擦除墨迹(移动)\n const handleMousemove = (e: MouseEvent | TouchEvent) => {\n const [mouseX, mouseY] = getMouseOffsetPosition(e)\n const x = mouseX / widthScale.value\n const y = mouseY / heightScale.value\n\n mouse.value = { x: mouseX, y: mouseY }\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 markSize,\n writingBoardRef,\n canvasRef,\n canvasWidth,\n canvasHeight,\n handleMousedown,\n handleMousemove,\n handleMouseup,\n clearCanvas,\n }\n },\n})\n","import { render } from \"./WritingBoard.vue?vue&type=template&id=3dfd4579&scoped=true&ts=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=3dfd4579&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3dfd4579\"]])\n\nexport default __exports__","\nimport { defineComponent, PropType, ref } from 'vue'\nimport WritingBoard from '@/components/WritingBoard.vue'\n\nconst writingBoardColors = ['#000000', '#ffffff', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c', '#ffff3a']\n\ninterface Position {\n left?: number | string;\n right?: number | string;\n top?: number | string;\n bottom?: number | string;\n}\n\ntype WritingBoardModel = 'pen' | 'mark' | 'eraser'\n\nexport default defineComponent({\n name: 'writing-board-tool',\n emits: ['close'],\n components: {\n WritingBoard,\n },\n props: {\n slideWidth: {\n type: Number,\n required: true,\n },\n slideHeight: {\n type: Number,\n required: true,\n },\n position: {\n type: Object as PropType,\n default: () => ({\n right: '5px',\n bottom: '5px',\n })\n },\n },\n setup(props, { emit }) {\n const writingBoardRef = ref()\n const writingBoardColor = ref('#e2534d')\n const writingBoardModel = ref('pen')\n const blackboard = ref(false)\n\n const changeModel = (model: WritingBoardModel) => {\n writingBoardModel.value = model\n }\n\n // 清除画布上的墨迹\n const clearCanvas = () => {\n writingBoardRef.value.clearCanvas()\n }\n\n // 修改画笔颜色,如果当前处于橡皮状态则先切换到画笔状态\n const changeColor = (color: string) => {\n if (writingBoardModel.value === 'eraser') writingBoardModel.value = 'pen'\n writingBoardColor.value = color\n }\n \n // 关闭写字板\n const closeWritingBoard = () => {\n emit('close')\n }\n\n return {\n writingBoardRef,\n writingBoardColors,\n writingBoardColor,\n writingBoardModel,\n blackboard,\n changeModel,\n clearCanvas,\n changeColor,\n closeWritingBoard,\n }\n },\n})\n","import { render } from \"./WritingBoardTool.vue?vue&type=template&id=19b10edd&scoped=true&ts=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=19b10edd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-19b10edd\"]])\n\nexport default __exports__","\nimport { defineComponent, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { enterFullscreen } from '@/utils/fullscreen'\nimport useScreening from '@/hooks/useScreening'\nimport useExecPlay from './hooks/useExecPlay'\nimport useSlideSize from './hooks/useSlideSize'\nimport useFullscreen from './hooks/useFullscreen'\n\nimport ScreenSlideList from './ScreenSlideList.vue'\nimport SlideThumbnails from './SlideThumbnails.vue'\nimport WritingBoardTool from './WritingBoardTool.vue'\n\nexport default defineComponent({\n name: 'screen',\n components: {\n ScreenSlideList,\n SlideThumbnails,\n WritingBoardTool,\n },\n props: {\n changeViewMode: {\n type: Function as PropType<(mode: 'base' | 'presenter') => void>,\n required: true,\n },\n },\n setup(props) {\n const { slides, slideIndex } = storeToRefs(useSlidesStore())\n\n const {\n autoPlayTimer,\n autoPlay,\n closeAutoPlay,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnPrevSlide,\n turnNextSlide,\n turnSlideToIndex,\n turnSlideToId,\n execPrev,\n execNext,\n animationIndex,\n } = useExecPlay()\n\n const { slideWidth, slideHeight } = useSlideSize()\n const { exitScreening } = useScreening()\n const { fullscreenState, manualExitFullscreen } = useFullscreen()\n\n const rightToolsVisible = ref(false)\n const writingBoardToolVisible = ref(false)\n const slideThumbnailModelVisible = ref(false)\n const laserPen = ref(false)\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 handler: () => rightToolsVisible.value = true,\n },\n {\n text: '查看所有幻灯片',\n handler: () => slideThumbnailModelVisible.value = true,\n },\n {\n text: '画笔工具',\n handler: () => writingBoardToolVisible.value = true,\n },\n {\n text: '演讲者视图',\n handler: () => props.changeViewMode('presenter'),\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 return {\n slides,\n slideIndex,\n slideWidth,\n slideHeight,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n animationIndex,\n contextmenus,\n execPrev,\n execNext,\n turnSlideToIndex,\n turnSlideToId,\n slideThumbnailModelVisible,\n writingBoardToolVisible,\n rightToolsVisible,\n fullscreenState,\n exitScreening,\n enterFullscreen,\n manualExitFullscreen,\n laserPen,\n }\n },\n})\n","import { render } from \"./BaseView.vue?vue&type=template&id=2ed6935e&scoped=true&ts=true\"\nimport script from \"./BaseView.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseView.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseView.vue?vue&type=style&index=0&id=2ed6935e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2ed6935e\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveDirective as _resolveDirective, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4887c6d4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"presenter-view\" }\nconst _hoisted_2 = { class: \"toolbar\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"普通视图\", -1))\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"画笔\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"激光笔\", -1))\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"结束放映\", -1))\nconst _hoisted_7 = { class: \"content\" }\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { class: \"remark\" }\nconst _hoisted_10 = { class: \"header\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"演讲者备注\", -1))\nconst _hoisted_12 = [\"innerHTML\"]\nconst _hoisted_13 = { class: \"remark-scale\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconListView = _resolveComponent(\"IconListView\")!\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_IconMagic = _resolveComponent(\"IconMagic\")!\n const _component_IconOffScreenOne = _resolveComponent(\"IconOffScreenOne\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconPower = _resolveComponent(\"IconPower\")!\n const _component_ScreenSlideList = _resolveComponent(\"ScreenSlideList\")!\n const _component_WritingBoardTool = _resolveComponent(\"WritingBoardTool\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_IconMinus = _resolveComponent(\"IconMinus\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: \"tool-btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.changeViewMode('base')))\n }, [\n _createVNode(_component_IconListView, { class: \"tool-icon\" }),\n _hoisted_3\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"tool-btn\", { 'active': _ctx.writingBoardToolVisible }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.writingBoardToolVisible = !_ctx.writingBoardToolVisible))\n }, [\n _createVNode(_component_IconWrite, { class: \"tool-icon\" }),\n _hoisted_4\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"tool-btn\", { 'active': _ctx.laserPen }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.laserPen = !_ctx.laserPen))\n }, [\n _createVNode(_component_IconMagic, { class: \"tool-icon\" }),\n _hoisted_5\n ], 2),\n _createElementVNode(\"div\", {\n class: \"tool-btn\",\n onClick: _cache[3] || (_cache[3] = () => _ctx.fullscreenState ? _ctx.manualExitFullscreen() : _ctx.enterFullscreen())\n }, [\n (_ctx.fullscreenState)\n ? (_openBlock(), _createBlock(_component_IconOffScreenOne, {\n key: 0,\n class: \"tool-icon\"\n }))\n : (_openBlock(), _createBlock(_component_IconOffScreenOne, {\n key: 1,\n class: \"tool-icon\"\n })),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.fullscreenState ? '退出全屏' : '全屏'), 1)\n ]),\n _createVNode(_component_Divider, { class: \"divider\" }),\n _createElementVNode(\"div\", {\n class: \"tool-btn\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.exitScreening()))\n }, [\n _createVNode(_component_IconPower, { class: \"tool-icon\" }),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"slide-list-wrap\", { 'laser-pen': _ctx.laserPen }]),\n ref: \"slideListWrapRef\"\n }, [\n _withDirectives(_createVNode(_component_ScreenSlideList, {\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen,\n onMousewheel: _cache[5] || (_cache[5] = $event => _ctx.mousewheelListener($event)),\n onTouchstart: _cache[6] || (_cache[6] = $event => _ctx.touchStartListener($event)),\n onTouchend: _cache[7] || (_cache[7] = $event => _ctx.touchEndListener($event))\n }, null, 8, [\"slideWidth\", \"slideHeight\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"]), [\n [_directive_contextmenu, _ctx.contextmenus]\n ]),\n (_ctx.writingBoardToolVisible)\n ? (_openBlock(), _createBlock(_component_WritingBoardTool, {\n key: 0,\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n position: {\n left: '75px',\n top: '5px',\n },\n onClose: _cache[8] || (_cache[8] = ($event: any) => (_ctx.writingBoardToolVisible = false))\n }, null, 8, [\"slideWidth\", \"slideHeight\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: \"thumbnails\",\n ref: \"thumbnailsRef\",\n onMousewheel: _cache[9] || (_cache[9] = _withModifiers($event => _ctx.handleMousewheelThumbnails($event), [\"prevent\"]))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"thumbnail\", { 'active': index === _ctx.slideIndex }]),\n key: slide.id,\n onClick: ($event: any) => (_ctx.turnSlideToIndex(index))\n }, [\n _createVNode(_component_ThumbnailSlide, {\n slide: slide,\n size: 120 / _ctx.viewportRatio,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"size\", \"visible\"])\n ], 10, _hoisted_8))\n }), 128))\n ], 544)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"span\", null, \"P \" + _toDisplayString(_ctx.slideIndex + 1) + \" / \" + _toDisplayString(_ctx.slides.length), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"remark-content\",\n style: _normalizeStyle({ fontSize: _ctx.remarkFontSize + 'px' }),\n innerHTML: _ctx.currentSlideRemark\n }, null, 12, _hoisted_12),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", {\n class: _normalizeClass(['scale-btn', { 'disable': _ctx.remarkFontSize === 12 }]),\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.setRemarkFontSize(_ctx.remarkFontSize - 2)))\n }, [\n _createVNode(_component_IconMinus)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass(['scale-btn', { 'disable': _ctx.remarkFontSize === 40 }]),\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.setRemarkFontSize(_ctx.remarkFontSize + 2)))\n }, [\n _createVNode(_component_IconPlus)\n ], 2)\n ])\n ])\n ]))\n}","\nimport { computed, defineComponent, nextTick, ref, watch, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { enterFullscreen } from '@/utils/fullscreen'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useScreening from '@/hooks/useScreening'\nimport useLoadSlides from '@/hooks/useLoadSlides'\nimport useExecPlay from './hooks/useExecPlay'\nimport useSlideSize from './hooks/useSlideSize'\nimport useFullscreen from './hooks/useFullscreen'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\nimport ScreenSlideList from './ScreenSlideList.vue'\nimport WritingBoardTool from './WritingBoardTool.vue'\n\nexport default defineComponent({\n name: 'presenter-view',\n components: {\n ScreenSlideList,\n ThumbnailSlide,\n WritingBoardTool,\n },\n props: {\n changeViewMode: {\n type: Function as PropType<(mode: 'base' | 'presenter') => void>,\n required: true,\n },\n },\n setup(props) {\n const { slides, slideIndex, viewportRatio, currentSlide } = storeToRefs(useSlidesStore())\n\n const slideListWrapRef = ref()\n const thumbnailsRef = ref()\n const writingBoardToolVisible = ref(false)\n const laserPen = ref(false)\n\n const {\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnPrevSlide,\n turnNextSlide,\n turnSlideToIndex,\n turnSlideToId,\n animationIndex,\n } = useExecPlay()\n\n const { slideWidth, slideHeight } = useSlideSize(slideListWrapRef)\n const { exitScreening } = useScreening()\n const { slidesLoadLimit } = useLoadSlides()\n const { fullscreenState, manualExitFullscreen } = useFullscreen()\n\n const remarkFontSize = ref(16)\n const currentSlideRemark = computed(() => {\n return parseText2Paragraphs(currentSlide.value.remark || '无备注')\n })\n\n const handleMousewheelThumbnails = (e: WheelEvent) => {\n if (!thumbnailsRef.value) return\n thumbnailsRef.value.scrollBy(e.deltaY, 0)\n }\n\n const setRemarkFontSize = (fontSize: number) => {\n if (fontSize < 12 || fontSize > 40) return\n remarkFontSize.value = fontSize\n }\n\n watch(slideIndex, () => {\n nextTick(() => {\n if (!thumbnailsRef.value) return\n\n const activeThumbnailRef: HTMLElement | null = thumbnailsRef.value.querySelector('.thumbnail.active')\n if (!activeThumbnailRef) return\n\n const width = thumbnailsRef.value.offsetWidth\n const offsetLeft = activeThumbnailRef.offsetLeft\n thumbnailsRef.value.scrollTo({ left: offsetLeft - width / 2, behavior: 'smooth' })\n })\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 handler: () => writingBoardToolVisible.value = true,\n },\n {\n text: '普通视图',\n handler: () => props.changeViewMode('base'),\n },\n { divider: true },\n {\n text: '结束放映',\n subText: 'ESC',\n handler: exitScreening,\n },\n ]\n }\n\n return {\n slides,\n slideIndex,\n viewportRatio,\n remarkFontSize,\n currentSlideRemark,\n setRemarkFontSize,\n slideListWrapRef,\n thumbnailsRef,\n slideWidth,\n slideHeight,\n animationIndex,\n turnSlideToId,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnSlideToIndex,\n contextmenus,\n slidesLoadLimit,\n handleMousewheelThumbnails,\n exitScreening,\n fullscreenState,\n enterFullscreen,\n manualExitFullscreen,\n writingBoardToolVisible,\n laserPen,\n }\n },\n})\n","import { render } from \"./PresenterView.vue?vue&type=template&id=4887c6d4&scoped=true&ts=true\"\nimport script from \"./PresenterView.vue?vue&type=script&lang=ts\"\nexport * from \"./PresenterView.vue?vue&type=script&lang=ts\"\n\nimport \"./PresenterView.vue?vue&type=style&index=0&id=4887c6d4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4887c6d4\"]])\n\nexport default __exports__","\nimport { defineComponent, onMounted, onUnmounted, ref } from 'vue'\nimport { KEYS } from '@/configs/hotkey'\nimport useScreening from '@/hooks/useScreening'\n\nimport BaseView from './BaseView.vue'\nimport PresenterView from './PresenterView.vue'\n\nexport default defineComponent({\n name: 'pptist-screen',\n components: {\n BaseView,\n PresenterView,\n },\n setup() {\n const viewMode = ref<'base' | 'presenter'>('base')\n\n const changeViewMode = (mode: 'base' | 'presenter') => {\n viewMode.value = mode\n }\n\n const { exitScreening } = useScreening()\n\n // 快捷键退出放映\n const keydownListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ESC) exitScreening()\n }\n\n onMounted(() => document.addEventListener('keydown', keydownListener))\n onUnmounted(() => document.removeEventListener('keydown', keydownListener))\n\n return {\n viewMode,\n changeViewMode,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=18f794c8&scoped=true&ts=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=18f794c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-18f794c8\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72b587f9\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"mobile\",\n ref: \"mobileRef\"\n}\nconst _hoisted_2 = { class: \"thumbnail-list\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Alert = _resolveComponent(\"Alert\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Alert, {\n class: \"tip\",\n message: \"注意\",\n description: \"移动设备下仅支持预览,请在PC上进行编辑\",\n type: \"warning\",\n closable: \"\",\n \"show-icon\": \"\"\n }),\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"thumbnail-item\",\n key: slide.id\n }, [\n _createVNode(_component_ThumbnailSlide, {\n slide: slide,\n size: _ctx.slideWidth,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"size\", \"visible\"])\n ]))\n }), 128))\n ])\n ], 512))\n}","\nimport { defineComponent, onMounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport useScreening from '@/hooks/useScreening'\nimport useLoadSlides from '@/hooks/useLoadSlides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n ThumbnailSlide,\n },\n setup() {\n const { slides } = storeToRefs(useSlidesStore())\n\n const { slidesLoadLimit } = useLoadSlides()\n const { enterScreening } = useScreening()\n\n const mobileRef = ref()\n const slideWidth = ref(0)\n\n onMounted(() => {\n if (!mobileRef.value) return\n slideWidth.value = mobileRef.value.clientWidth - 10\n })\n\n return {\n slides,\n slidesLoadLimit,\n mobileRef,\n slideWidth,\n enterScreening,\n }\n },\n})\n","import { render } from \"./Mobile.vue?vue&type=template&id=72b587f9&scoped=true&ts=true\"\nimport script from \"./Mobile.vue?vue&type=script&lang=ts\"\nexport * from \"./Mobile.vue?vue&type=script&lang=ts\"\n\nimport \"./Mobile.vue?vue&type=style&index=0&id=72b587f9&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-72b587f9\"]])\n\nexport default __exports__","\nimport { defineComponent, onMounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useScreenStore, useMainStore, useSnapshotStore } from '@/store'\nimport { isPC } from './utils/common'\n\nimport Editor from './views/Editor/index.vue'\nimport Screen from './views/Screen/index.vue'\nimport Mobile from './views/Mobile.vue'\n\nexport default defineComponent({\n name: 'app',\n components: {\n Editor,\n Screen,\n Mobile,\n },\n setup() {\n const mainStore = useMainStore()\n const snapshotStore = useSnapshotStore()\n const { screening } = storeToRefs(useScreenStore())\n\n if (process.env.NODE_ENV === 'production') {\n window.onbeforeunload = () => false\n }\n\n onMounted(() => {\n snapshotStore.initSnapshotDatabase()\n mainStore.setAvailableFonts()\n })\n\n return {\n screening,\n isPC: isPC(),\n }\n },\n})\n","import { render } from \"./App.vue?vue&type=template&id=039e9a08&ts=true\"\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=039e9a08&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// 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 ChartLineArea,\n ChartRing,\n ChartScatter,\n ChartLine,\n ChartPie,\n Text,\n Rotate,\n LeftTwo,\n RightTwo,\n Platte,\n UpOne,\n DownOne,\n Close,\n CloseSmall,\n Undo,\n Transform,\n Click,\n Theme,\n ArrowCircleLeft,\n GraphicDesign,\n Logout,\n Erase,\n Clear,\n FolderClose,\n AlignTextTopOne,\n AlignTextBottomOne,\n AlignTextMiddleOne,\n Pause,\n VolumeMute,\n VolumeNotice,\n VolumeSmall,\n VideoTwo,\n Formula,\n LinkOne,\n FullScreenOne,\n OffScreenOne,\n Power,\n ListView,\n Magic,\n HighLight,\n} from '@icon-park/vue-next'\n\nconst icons = {\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 ChartLineArea,\n ChartRing,\n ChartScatter,\n ChartLine,\n ChartPie,\n Text,\n Rotate,\n LeftTwo,\n RightTwo,\n Platte,\n UpOne,\n DownOne,\n Close,\n CloseSmall,\n Undo,\n Transform,\n Click,\n Theme,\n ArrowCircleLeft,\n GraphicDesign,\n Logout,\n Erase,\n Clear,\n FolderClose,\n AlignTextTopOne,\n AlignTextBottomOne,\n AlignTextMiddleOne,\n Pause,\n VolumeMute,\n VolumeNotice,\n VolumeSmall,\n VideoTwo,\n Formula,\n LinkOne,\n FullScreenOne,\n OffScreenOne,\n Power,\n ListView,\n Magic,\n HighLight,\n}\n\nexport default {\n install(app: App) {\n for (const key of Object.keys(icons)) {\n app.component(`Icon${key}`, icons[key])\n }\n }\n}","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0a87e9c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"accept\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"file-input\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.handleClick()))\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true),\n _createElementVNode(\"input\", {\n class: \"input\",\n type: \"file\",\n name: \"upload\",\n ref: \"inputRef\",\n accept: _ctx.accept,\n onChange: _cache[0] || (_cache[0] = $event => _ctx.handleChange($event))\n }, null, 40, _hoisted_1)\n ]))\n}","\nimport { defineComponent, ref } from 'vue'\n\nexport default defineComponent({\n name: 'file-input',\n emits: ['change'],\n props: {\n accept: {\n type: String,\n default: 'image/*',\n },\n },\n setup(props, { emit }) {\n const inputRef = ref()\n\n const handleClick = () => {\n if (!inputRef.value) return\n inputRef.value.value = ''\n inputRef.value.click()\n }\n const handleChange = (e: Event) => {\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=0a87e9c4&scoped=true&ts=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=0a87e9c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0a87e9c4\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"button\", {\n class: _normalizeClass([\"checkbox-button\", { 'checked': _ctx.checked }])\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ], 2))\n}","\r\nimport { defineComponent } from 'vue'\r\n\r\nexport default defineComponent({\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=4074d5c2&scoped=true&ts=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=4074d5c2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4074d5c2\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7dafd0a9\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"checkbox-button-group\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ]))\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&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7dafd0a9\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-05b64c90\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"color-picker\" }\nconst _hoisted_2 = { class: \"picker-saturation-wrap\" }\nconst _hoisted_3 = { class: \"picker-controls\" }\nconst _hoisted_4 = { class: \"picker-color-wrap\" }\nconst _hoisted_5 = { class: \"picker-sliders\" }\nconst _hoisted_6 = { class: \"picker-hue-wrap\" }\nconst _hoisted_7 = { class: \"picker-alpha-wrap\" }\nconst _hoisted_8 = { class: \"picker-field\" }\nconst _hoisted_9 = { class: \"picker-presets\" }\nconst _hoisted_10 = [\"onClick\"]\nconst _hoisted_11 = { class: \"picker-gradient-presets\" }\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = { class: \"picker-presets\" }\nconst _hoisted_14 = [\"onClick\"]\nconst _hoisted_15 = {\n key: 0,\n class: \"recent-colors-title\"\n}\nconst _hoisted_16 = { class: \"recent-colors\" }\nconst _hoisted_17 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Saturation = _resolveComponent(\"Saturation\")!\n const _component_Checkboard = _resolveComponent(\"Checkboard\")!\n const _component_Hue = _resolveComponent(\"Hue\")!\n const _component_Alpha = _resolveComponent(\"Alpha\")!\n const _component_EditableInput = _resolveComponent(\"EditableInput\")!\n const _component_IconPlatte = _resolveComponent(\"IconPlatte\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Saturation, {\n value: _ctx.color,\n hue: _ctx.hue,\n onColorChange: _cache[0] || (_cache[0] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\", \"hue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: \"picker-current-color\",\n style: _normalizeStyle({ background: _ctx.currentColor })\n }, null, 4),\n _createVNode(_component_Checkboard)\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Hue, {\n value: _ctx.color,\n hue: _ctx.hue,\n onColorChange: _cache[1] || (_cache[1] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\", \"hue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_Alpha, {\n value: _ctx.color,\n onColorChange: _cache[2] || (_cache[2] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\"])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_EditableInput, {\n class: \"input\",\n value: _ctx.color,\n onColorChange: _cache[3] || (_cache[3] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", {\n class: \"straw\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.pickColor()))\n }, [\n _createVNode(_component_IconPlatte)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.themeColors, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"picker-presets-color\",\n key: c,\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_10))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.presetColors, (col, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"picker-gradient-col\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(col, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"picker-gradient-color\",\n key: c,\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_12))\n }), 128))\n ]))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.standardColors, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: c,\n class: \"picker-presets-color\",\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_14))\n }), 128))\n ]),\n (_ctx.recentColors.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, \"最近使用:\"))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_16, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.recentColors, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: c,\n class: \"picker-presets-color\",\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_17))\n }), 128))\n ])\n ]))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6f2cb744\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alpha\" }\nconst _hoisted_2 = { class: \"alpha-checkboard-wrap\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"alpha-picker\" }, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Checkboard = _resolveComponent(\"Checkboard\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Checkboard)\n ]),\n _createElementVNode(\"div\", {\n class: \"alpha-gradient\",\n style: _normalizeStyle({ background: _ctx.gradientColor })\n }, null, 4),\n _createElementVNode(\"div\", {\n class: \"alpha-container\",\n ref: \"alphaRef\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMouseDown($event))\n }, [\n _createElementVNode(\"div\", {\n class: \"alpha-pointer\",\n style: _normalizeStyle({ left: _ctx.color.a * 100 + '%' })\n }, _hoisted_4, 4)\n ], 544)\n ]))\n}","import { normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"checkerboard\",\n style: _normalizeStyle(_ctx.bgStyle)\n }, null, 4))\n}","\nimport { computed, defineComponent } from 'vue'\n\nconst checkboardCache = {}\n\nconst renderCheckboard = (white: string, grey: string, size: number) => {\n const canvas = document.createElement('canvas')\n canvas.width = canvas.height = size * 2\n const ctx = canvas.getContext('2d')\n \n if (!ctx) return null\n\n ctx.fillStyle = white\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.fillStyle = grey\n ctx.fillRect(0, 0, size, size)\n ctx.translate(size, size)\n ctx.fillRect(0, 0, size, size)\n return canvas.toDataURL()\n}\n\nconst getCheckboard = (white: string, grey: string, size: number) => {\n const key = white + ',' + grey + ',' + size\n if (checkboardCache[key]) return checkboardCache[key]\n \n const checkboard = renderCheckboard(white, grey, size)\n checkboardCache[key] = checkboard\n return checkboard\n}\n\nexport default defineComponent({\n name: 'checkboard',\n emits: ['colorChange'],\n props: {\n size: {\n type: Number,\n default: 8,\n },\n white: {\n type: String,\n default: '#fff',\n },\n grey: {\n type: String,\n default: '#e6e6e6',\n },\n },\n setup(props) {\n const bgStyle = computed(() => {\n const checkboard = getCheckboard(props.white, props.grey, props.size)\n return { backgroundImage: `url(${checkboard})` }\n })\n\n return {\n bgStyle,\n }\n },\n})\n","import { render } from \"./Checkboard.vue?vue&type=template&id=0a544b87&scoped=true&ts=true\"\nimport script from \"./Checkboard.vue?vue&type=script&lang=ts\"\nexport * from \"./Checkboard.vue?vue&type=script&lang=ts\"\n\nimport \"./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0a544b87\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\n\nimport Checkboard from './Checkboard.vue'\nimport { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'alpha',\n components: {\n Checkboard,\n },\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => props.value)\n \n const gradientColor = computed(() => {\n const rgbaStr = [color.value.r, color.value.g, color.value.b].join(',')\n return `linear-gradient(to right, rgba(${rgbaStr}, 0) 0%, rgba(${rgbaStr}, 1) 100%)`\n })\n\n const alphaRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!alphaRef.value) return\n const containerWidth = alphaRef.value.clientWidth\n const xOffset = alphaRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let a\n\n if (left < 0) a = 0\n else if (left > containerWidth) a = 1\n else a = Math.round(left * 100 / containerWidth) / 100\n\n if (color.value.a !== a) {\n emit('colorChange', {\n r: color.value.r,\n g: color.value.g,\n b: color.value.b,\n a: a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n alphaRef,\n gradientColor,\n handleMouseDown,\n color,\n }\n },\n})\n","import { render } from \"./Alpha.vue?vue&type=template&id=6f2cb744&scoped=true&ts=true\"\nimport script from \"./Alpha.vue?vue&type=script&lang=ts\"\nexport * from \"./Alpha.vue?vue&type=script&lang=ts\"\n\nimport \"./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6f2cb744\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1766620e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"hue\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"hue-picker\" }, null, -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"hue-container\",\n ref: \"hueRef\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMouseDown($event))\n }, [\n _createElementVNode(\"div\", {\n class: \"hue-pointer\",\n style: _normalizeStyle({ left: _ctx.pointerLeft })\n }, _hoisted_3, 4)\n ], 544)\n ]))\n}","\nimport { computed, defineComponent, onUnmounted, PropType, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'hue',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const oldHue = ref(0)\n const pullDirection = ref('')\n \n const color = computed(() => {\n const hsla = tinycolor(props.value).toHsl()\n if (props.hue !== -1) hsla.h = props.hue\n return hsla\n })\n\n const pointerLeft = computed(() => {\n if (color.value.h === 0 && pullDirection.value === 'right') return '100%'\n return color.value.h * 100 / 360 + '%'\n })\n\n watch(() => props.value, () => {\n const hsla = tinycolor(props.value).toHsl()\n const h = hsla.s === 0 ? props.hue : hsla.h\n if (h !== 0 && h - oldHue.value > 0) pullDirection.value = 'right'\n if (h !== 0 && h - oldHue.value < 0) pullDirection.value = 'left'\n oldHue.value = h\n })\n\n const hueRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!hueRef.value) return\n\n const containerWidth = hueRef.value.clientWidth\n const xOffset = hueRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let h, percent\n \n if (left < 0) h = 0\n else if (left > containerWidth) h = 360\n else {\n percent = left * 100 / containerWidth\n h = 360 * percent / 100\n }\n if (props.hue === -1 || color.value.h !== h) {\n emit('colorChange', {\n h,\n l: color.value.l,\n s: color.value.s,\n a: color.value.a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n hueRef,\n handleMouseDown,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Hue.vue?vue&type=template&id=1766620e&scoped=true&ts=true\"\nimport script from \"./Hue.vue?vue&type=script&lang=ts\"\nexport * from \"./Hue.vue?vue&type=script&lang=ts\"\n\nimport \"./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1766620e\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8982eb4a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"saturation-white\" }, null, -1))\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"saturation-black\" }, null, -1))\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"saturation-circle\" }, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"saturation\",\n ref: \"saturationRef\",\n style: _normalizeStyle({ background: _ctx.bgColor }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMouseDown($event))\n }, [\n _hoisted_1,\n _hoisted_2,\n _createElementVNode(\"div\", {\n class: \"saturation-pointer\",\n style: _normalizeStyle({\n top: _ctx.pointerTop,\n left: _ctx.pointerLeft,\n })\n }, _hoisted_4, 4)\n ], 36))\n}","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { throttle, clamp } from 'lodash'\n\nexport default defineComponent({\n name: 'saturation',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => {\n const hsva = tinycolor(props.value).toHsv()\n if (props.hue !== -1) hsva.h = props.hue\n return hsva\n })\n\n const bgColor = computed(() => `hsl(${color.value.h}, 100%, 50%)`)\n const pointerTop = computed(() => (-(color.value.v * 100) + 1) + 100 + '%')\n const pointerLeft = computed(() => color.value.s * 100 + '%')\n\n const emitChangeEvent = throttle(function(param) {\n emit('colorChange', param)\n }, 20, { leading: true, trailing: false })\n\n const saturationRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!saturationRef.value) return\n \n const containerWidth = saturationRef.value.clientWidth\n const containerHeight = saturationRef.value.clientHeight\n const xOffset = saturationRef.value.getBoundingClientRect().left + window.pageXOffset\n const yOffset = saturationRef.value.getBoundingClientRect().top + window.pageYOffset\n const left = clamp(e.pageX - xOffset, 0, containerWidth)\n const top = clamp(e.pageY - yOffset, 0, containerHeight)\n const saturation = left / containerWidth\n const bright = clamp(-(top / containerHeight) + 1, 0, 1)\n\n emitChangeEvent({\n h: color.value.h,\n s: saturation,\n v: bright,\n a: color.value.a,\n })\n }\n\n \n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n saturationRef,\n bgColor,\n handleMouseDown,\n pointerTop,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Saturation.vue?vue&type=template&id=8982eb4a&scoped=true&ts=true\"\nimport script from \"./Saturation.vue?vue&type=script&lang=ts\"\nexport * from \"./Saturation.vue?vue&type=script&lang=ts\"\n\nimport \"./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8982eb4a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20bfe6b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"editable-input\" }\nconst _hoisted_2 = [\"value\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"input-content\",\n value: _ctx.val,\n onInput: _cache[0] || (_cache[0] = $event => _ctx.handleInput($event))\n }, null, 40, _hoisted_2)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'editable-input',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const val = computed(() => {\n let _hex = ''\n if (props.value.a < 1) _hex = tinycolor(props.value).toHex8String().toUpperCase()\n else _hex = tinycolor(props.value).toHexString().toUpperCase()\n return _hex.replace('#', '')\n })\n\n const handleInput = (e: Event) => {\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=20bfe6b0&scoped=true&ts=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=20bfe6b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-20bfe6b0\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { debounce } from 'lodash'\nimport { toCanvas } from 'html-to-image'\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\nimport { message } from 'ant-design-vue'\n\nconst RECENT_COLORS = 'RECENT_COLORS'\n\nconst presetColorConfig = [\n ['#7f7f7f', '#f2f2f2'],\n ['#0d0d0d', '#808080'],\n ['#1c1a10', '#ddd8c3'],\n ['#0e243d', '#c6d9f0'],\n ['#233f5e', '#dae5f0'],\n ['#632623', '#f2dbdb'],\n ['#4d602c', '#eaf1de'],\n ['#3f3150', '#e6e0ec'],\n ['#1e5867', '#d9eef3'],\n ['#99490f', '#fee9da'],\n]\n\nconst gradient = (startColor: string, endColor: string, step: number) => {\n const _startColor = tinycolor(startColor).toRgb()\n const _endColor = tinycolor(endColor).toRgb()\n\n const rStep = (_endColor.r - _startColor.r) / step\n const gStep = (_endColor.g - _startColor.g) / step\n const bStep = (_endColor.b - _startColor.b) / step\n const gradientColorArr = []\n\n for (let i = 0; i < step; i++) {\n const gradientColor = tinycolor({\n r: _startColor.r + rStep * i,\n g: _startColor.g + gStep * i,\n b: _startColor.b + bStep * i,\n }).toRgbString()\n gradientColorArr.push(gradientColor)\n }\n return gradientColorArr\n}\n\nconst getPresetColors = () => {\n const presetColors = []\n for (const color of presetColorConfig) {\n presetColors.push(gradient(color[1], color[0], 5))\n }\n return presetColors\n}\n\nexport default defineComponent({\n name: 'color-picker',\n components: {\n Alpha,\n Checkboard,\n Hue,\n Saturation,\n EditableInput,\n },\n emits: ['update:modelValue'],\n props: {\n modelValue: {\n type: String,\n default: '#e86b99',\n },\n },\n setup(props, { emit }) {\n const hue = ref(-1)\n const recentColors = ref([])\n\n const color = computed({\n get() {\n return tinycolor(props.modelValue).toRgb()\n },\n set(rgba: ColorFormats.RGBA) {\n const rgbaString = `rgba(${[rgba.r, rgba.g, rgba.b, rgba.a].join(',')})`\n emit('update:modelValue', rgbaString)\n },\n })\n\n const themeColors = ['#000000', '#ffffff', '#eeece1', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c']\n const standardColors = ['#c21401', '#ff1e02', '#ffc12a', '#ffff3a', '#90cf5b', '#00af57', '#00afee', '#0071be', '#00215f', '#72349d']\n const presetColors = getPresetColors()\n\n const currentColor = computed(() => {\n return `rgba(${[color.value.r, color.value.g, color.value.b, color.value.a].join(',')})`\n })\n\n const selectPresetColor = (colorString: string) => {\n hue.value = tinycolor(colorString).toHsl().h\n emit('update:modelValue', colorString)\n }\n\n // 每次选择非预设颜色时,需要将该颜色加入到最近使用列表中\n const updateRecentColorsCache = debounce(function() {\n const _color = tinycolor(color.value).toRgbString()\n if (!recentColors.value.includes(_color)) {\n recentColors.value = [_color, ...recentColors.value]\n\n const maxLength = 10\n if (recentColors.value.length > maxLength) {\n recentColors.value = recentColors.value.slice(0, maxLength)\n }\n }\n }, 300, { trailing: true })\n\n onMounted(() => {\n const recentColorsCache = localStorage.getItem(RECENT_COLORS)\n if (recentColorsCache) recentColors.value = JSON.parse(recentColorsCache)\n })\n\n watch(recentColors, () => {\n const recentColorsCache = JSON.stringify(recentColors.value)\n localStorage.setItem(RECENT_COLORS, recentColorsCache)\n })\n\n const changeColor = (value: ColorFormats.RGBA | ColorFormats.HSLA | ColorFormats.HSVA) => {\n if ('h' in value) {\n hue.value = value.h\n color.value = tinycolor(value).toRgb()\n }\n else {\n hue.value = tinycolor(value).toHsl().h\n color.value = value\n }\n\n updateRecentColorsCache()\n }\n\n const pickColor = () => {\n const targetRef: HTMLElement | null = document.querySelector('.canvas')\n if (!targetRef) return\n\n const maskRef = document.createElement('div')\n maskRef.style.cssText = 'position: fixed; top: 0; left: 0; bottom: 0; right: 0; z-index: 9999; cursor: wait;'\n document.body.appendChild(maskRef)\n\n const colorBlockRef = document.createElement('div')\n colorBlockRef.style.cssText = 'position: absolute; top: -100px; left: -100px; width: 16px; height: 16px; border: 1px solid #000; z-index: 999'\n maskRef.appendChild(colorBlockRef)\n\n const { left, top } = targetRef.getBoundingClientRect()\n\n const filter = (node: HTMLElement) => {\n if (node.tagName && node.tagName.toUpperCase() === 'FOREIGNOBJECT') return false\n if (node.classList && node.classList.contains('operate')) return false\n return true\n }\n\n toCanvas(targetRef, { filter, fontEmbedCSS: '' }).then(canvasRef => {\n canvasRef.style.cssText = `position: absolute; top: ${top}px; left: ${left}px; cursor: crosshair;`\n maskRef.style.cursor = 'default'\n maskRef.appendChild(canvasRef)\n\n const ctx = canvasRef.getContext('2d')\n if (!ctx) return\n\n let currentColor = ''\n const handleMousemove = (e: MouseEvent) => {\n const x = e.x\n const y = e.y\n\n const mouseX = x - left\n const mouseY = y - top\n\n const [r, g, b, a] = ctx.getImageData(mouseX, mouseY, 1, 1).data\n currentColor = `rgba(${r}, ${g}, ${b}, ${(a / 255).toFixed(2)})`\n\n colorBlockRef.style.left = x + 10 + 'px'\n colorBlockRef.style.top = y + 10 + 'px'\n colorBlockRef.style.backgroundColor = currentColor\n }\n const handleMouseleave = () => {\n currentColor = ''\n colorBlockRef.style.left = '-100px'\n colorBlockRef.style.top = '-100px'\n colorBlockRef.style.backgroundColor = ''\n }\n const handleMousedown = (e: MouseEvent) => {\n if (currentColor && e.button === 0) {\n const tColor = tinycolor(currentColor)\n hue.value = tColor.toHsl().h\n color.value = tColor.toRgb()\n\n updateRecentColorsCache()\n }\n document.body.removeChild(maskRef)\n \n canvasRef.removeEventListener('mousemove', handleMousemove)\n canvasRef.removeEventListener('mouseleave', handleMouseleave)\n window.removeEventListener('mousedown', handleMousedown)\n }\n\n canvasRef.addEventListener('mousemove', handleMousemove)\n canvasRef.addEventListener('mouseleave', handleMouseleave)\n window.addEventListener('mousedown', handleMousedown)\n }).catch(() => {\n message.error('取色吸管初始化失败')\n document.body.removeChild(maskRef)\n })\n }\n\n return {\n themeColors,\n standardColors,\n presetColors,\n color,\n hue,\n currentColor,\n changeColor,\n selectPresetColor,\n recentColors,\n pickColor,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=05b64c90&scoped=true&ts=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=05b64c90&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-05b64c90\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e77feb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"fullscreen-spin\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Spin = _resolveComponent(\"Spin\")!\n\n return (_ctx.loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Spin, {\n tip: _ctx.tip,\n size: \"large\"\n }, null, 8, [\"tip\"])\n ]))\n : _createCommentVNode(\"\", true)\n}","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'fullscreen-spin',\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n tip: {\n type: String,\n default: '',\n },\n },\n})\n","import { render } from \"./FullscreenSpin.vue?vue&type=template&id=5e77feb8&scoped=true&ts=true\"\nimport script from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\nexport * from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\n\nimport \"./FullscreenSpin.vue?vue&type=style&index=0&id=5e77feb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5e77feb8\"]])\n\nexport default __exports__","import { App } from 'vue'\n\nimport FileInput from '@/components/FileInput.vue'\nimport CheckboxButton from '@/components/CheckboxButton.vue'\nimport CheckboxButtonGroup from '@/components/CheckboxButtonGroup.vue'\nimport ColorPicker from '@/components/ColorPicker/index.vue'\nimport FullscreenSpin from '@/components/FullscreenSpin.vue'\n\nexport default {\n install(app: App) {\n app.component('FileInput', FileInput)\n app.component('CheckboxButton', CheckboxButton)\n app.component('CheckboxButtonGroup', CheckboxButtonGroup)\n app.component('ColorPicker', ColorPicker)\n app.component('FullscreenSpin', FullscreenSpin)\n }\n}\n","import { withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_MenuContent = _resolveComponent(\"MenuContent\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: \"mask\",\n onContextmenu: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.removeContextmenu()), [\"prevent\"])),\n onMousedown: _cache[1] || (_cache[1] = ($event: any) => (_ctx.removeContextmenu()))\n }, null, 32),\n _createElementVNode(\"div\", {\n class: \"contextmenu\",\n style: _normalizeStyle({\n left: _ctx.style.left + 'px',\n top: _ctx.style.top + 'px',\n }),\n onContextmenu: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"prevent\"]))\n }, [\n _createVNode(_component_MenuContent, {\n menus: _ctx.menus,\n handleClickMenuItem: _ctx.handleClickMenuItem\n }, null, 8, [\"menus\", \"handleClickMenuItem\"])\n ], 36)\n ], 64))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, normalizeClass as _normalizeClass, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eb1555e8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"menu-content\" }\nconst _hoisted_2 = [\"onClick\"]\nconst _hoisted_3 = { class: \"text\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"sub-text\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_menu_content = _resolveComponent(\"menu-content\", true)!\n\n return (_openBlock(), _createElementBlock(\"ul\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.menus, (menu, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: menu.text || index\n }, [\n (!menu.hide)\n ? (_openBlock(), _createElementBlock(\"li\", {\n key: 0,\n class: _normalizeClass([\"menu-item\", {'divider': menu.divider, 'disable': menu.disable}]),\n onClick: _withModifiers(($event: any) => (_ctx.handleClickMenuItem(menu)), [\"stop\"])\n }, [\n (!menu.divider)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"menu-item-content\", {\n 'has-children': menu.children,\n 'has-handler': menu.handler,\n }])\n }, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(menu.text), 1),\n (menu.subText && !menu.children)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(menu.subText), 1))\n : _createCommentVNode(\"\", true),\n (menu.children && menu.children.length)\n ? (_openBlock(), _createBlock(_component_menu_content, {\n key: 1,\n class: \"sub-menu\",\n menus: menu.children,\n handleClickMenuItem: _ctx.handleClickMenuItem\n }, null, 8, [\"menus\", \"handleClickMenuItem\"]))\n : _createCommentVNode(\"\", true)\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_2))\n : _createCommentVNode(\"\", true)\n ], 64))\n }), 128))\n ]))\n}","\nimport { PropType, defineComponent } from 'vue'\nimport { ContextmenuItem } from './types'\n\nexport default defineComponent({\n name: 'menu-content',\n props: {\n menus: {\n type: Array as PropType,\n required: true,\n },\n handleClickMenuItem: {\n type: Function,\n required: true,\n },\n },\n})\n","import { render } from \"./MenuContent.vue?vue&type=template&id=eb1555e8&scoped=true&ts=true\"\nimport script from \"./MenuContent.vue?vue&type=script&lang=ts\"\nexport * from \"./MenuContent.vue?vue&type=script&lang=ts\"\n\nimport \"./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-eb1555e8\"]])\n\nexport default __exports__","\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&ts=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=83da70aa&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { Directive, createVNode, render, DirectiveBinding } from 'vue'\nimport ContextmenuComponent from '@/components/Contextmenu/index.vue'\n\nconst CTX_CONTEXTMENU_HANDLER = 'CTX_CONTEXTMENU_HANDLER'\n\nconst contextmenuListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n event.stopPropagation()\n event.preventDefault()\n\n const menus = binding.value(el)\n if (!menus) return\n\n let container: HTMLDivElement | null = null\n\n // 移除右键菜单并取消相关的事件监听\n const removeContextmenu = () => {\n if (container) {\n document.body.removeChild(container)\n container = null\n }\n el.classList.remove('contextmenu-active')\n document.body.removeEventListener('scroll', removeContextmenu) \n window.removeEventListener('resize', removeContextmenu)\n }\n\n // 创建自定义菜单\n const options = {\n axis: { x: event.x, y: event.y },\n el,\n menus,\n removeContextmenu,\n }\n container = document.createElement('div')\n const vm = createVNode(ContextmenuComponent, options, null)\n render(vm, container)\n document.body.appendChild(container)\n\n // 为目标节点添加菜单激活状态的className\n el.classList.add('contextmenu-active')\n\n // 页面变化时移除菜单\n document.body.addEventListener('scroll', removeContextmenu)\n window.addEventListener('resize', removeContextmenu)\n}\n\nconst ContextmenuDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CONTEXTMENU_HANDLER] = (event: MouseEvent) => contextmenuListener(el, event, binding)\n el.addEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n },\n\n unmounted(el: HTMLElement) {\n if (el && el[CTX_CONTEXTMENU_HANDLER]) {\n el.removeEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n delete el[CTX_CONTEXTMENU_HANDLER]\n }\n },\n}\n\nexport default ContextmenuDirective","import { Directive, DirectiveBinding } from 'vue'\n\nconst CTX_CLICK_OUTSIDE_HANDLER = 'CTX_CLICK_OUTSIDE_HANDLER'\n\nconst clickListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n const handler = binding.value\n\n const path = event.composedPath()\n const isClickOutside = path ? path.indexOf(el) < 0 : !el.contains(event.target as HTMLElement)\n\n if (!isClickOutside) return\n handler(event)\n}\n\nconst ClickOutsideDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CLICK_OUTSIDE_HANDLER] = (event: MouseEvent) => clickListener(el, event, binding)\n setTimeout(() => {\n document.addEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n }, 0)\n },\n \n unmounted(el: HTMLElement) {\n if (el[CTX_CLICK_OUTSIDE_HANDLER]) {\n document.removeEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n delete el[CTX_CLICK_OUTSIDE_HANDLER]\n }\n },\n}\n\nexport default ClickOutsideDirective","import { App } from 'vue'\n\nimport Contextmenu from './contextmenu'\nimport ClickOutside from './clickOutside'\n\nexport default {\n install(app: App) {\n app.directive('contextmenu', Contextmenu)\n app.directive('click-outside', ClickOutside)\n }\n}\n","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\n\nimport '@icon-park/vue-next/styles/index.css'\nimport 'prosemirror-view/style/prosemirror.css'\nimport 'animate.css'\n\nimport '@/assets/styles/prosemirror.scss'\nimport '@/assets/styles/global.scss'\nimport '@/assets/styles/antd.scss'\nimport '@/assets/styles/font.scss'\n\nimport Icon from '@/plugins/icon'\nimport Component from '@/plugins/component'\nimport Directive from '@/plugins/directive'\n\nimport {\n InputNumber,\n Divider,\n Button,\n Tooltip,\n Popover,\n Slider,\n Select,\n Switch,\n Radio,\n Input,\n Modal,\n Dropdown,\n Menu,\n Checkbox,\n Drawer,\n Spin,\n Alert,\n} from 'ant-design-vue'\n\nconst app = createApp(App)\n\napp.component('InputNumber', InputNumber)\napp.component('Divider', Divider)\napp.component('Button', Button)\napp.component('ButtonGroup', Button.Group)\napp.component('Tooltip', Tooltip)\napp.component('Popover', Popover)\napp.component('Slider', Slider)\napp.component('Select', Select)\napp.component('SelectOption', Select.Option)\napp.component('SelectOptGroup', Select.OptGroup)\napp.component('Switch', Switch)\napp.component('Radio', Radio)\napp.component('RadioGroup', Radio.Group)\napp.component('RadioButton', Radio.Button)\napp.component('Input', Input)\napp.component('InputGroup', Input.Group)\napp.component('TextArea', Input.TextArea)\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)\napp.component('Alert', Alert)\n\napp.use(Icon)\napp.use(Component)\napp.use(Directive)\n\napp.use(createPinia())\napp.mount('#app')\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AudioStylePanel.vue?vue&type=style&index=0&id=80767a46&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ChartPool.vue?vue&type=style&index=0&id=64ca421e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseAudioElement.vue?vue&type=style&index=0&id=513e91c4&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=05b64c90&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=7f80f8ee&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SlideThumbnails.vue?vue&type=style&index=0&id=11e5b856&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementOutline.vue?vue&type=style&index=0&id=35c4c4a3&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LatexStylePanel.vue?vue&type=style&index=0&id=69f903b1&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LayoutPool.vue?vue&type=style&index=0&id=741b366e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TableStylePanel.vue?vue&type=style&index=0&id=72e00692&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SlideDesignPanel.vue?vue&type=style&index=0&id=0e2f846d&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=5a3169a0&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Mobile.vue?vue&type=style&index=0&id=72b587f9&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FormulaContent.vue?vue&type=style&index=0&id=cf0ca630&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementPositionPanel.vue?vue&type=style&index=0&id=3476ee65&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=d7761db4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementFilter.vue?vue&type=style&index=0&id=95955a74&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LinePool.vue?vue&type=style&index=0&id=7fa1d412&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=288ee59d&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LinkDialog.vue?vue&type=style&index=0&id=3adaaa8e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./GridLines.vue?vue&type=style&index=0&id=9b94cc34&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue?d655","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?7dd3","webpack:///./src/views/Screen/BaseView.vue?82f3","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue?f49b","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?93e0","webpack:///./src/views/Editor/CanvasTool/index.vue?3499","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?cee8","webpack:///./src/views/components/element/ElementOutline.vue?b100","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?06f4","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?ced2","webpack:///./src/components/Contextmenu/MenuContent.vue?f410","webpack:///./src/views/Editor/EditorHeader/index.vue?16bb","webpack:///./src/views/Editor/Canvas/Operate/index.vue?ad7d","webpack:///./src/views/components/element/LatexElement/index.vue?1604","webpack:///./src/views/components/element/TableElement/index.vue?47e0","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?e773","webpack:///./src/components/FullscreenSpin.vue?4232","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue?ac30","webpack:///./src/views/Editor/index.vue?b100","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?a42c","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?a647","webpack:///./src/views/Editor/Thumbnails/index.vue?4a6f","webpack:///./src/views/components/element/AudioElement/index.vue?d3bb","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?9eed","webpack:///./src/views/Editor/Toolbar/index.vue?b02b","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?6f92","webpack:///./src/views/components/element/LineElement/index.vue?bff4","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?ea96","webpack:///./src/components/ColorPicker/Hue.vue?3cb1","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue?2125","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?cde7","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?54ca","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?2e80","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?99ff","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?d62e","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?a7f1","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?f32f","webpack:///./src/views/Editor/Remark/index.vue?976f","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?7d86","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?3b58","webpack:///./src/components/CheckboxButtonGroup.vue?2eb8","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?24bf","webpack:///./src/views/Screen/ScreenElement.vue?cd60","webpack:///./src/components/WritingBoard.vue?e3e8","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?e4fa","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?19e8","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?177c","webpack:///./src/components/ColorPicker/Checkboard.vue?dbe5","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?c5a9","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?bcef","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue?e19a","webpack:///./src/components/CheckboxButton.vue?f525","webpack:///./src/views/components/element/ProsemirrorEditor.vue?a2a1","webpack:///./src/views/components/element/ChartElement/Chart.vue?e307","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?e809","webpack:///./src/views/components/element/TableElement/StaticTable.vue?0130","webpack:///./src/components/ColorPicker/EditableInput.vue?f472","webpack:///./src/views/Screen/index.vue?4fbc","webpack:///./src/views/components/element/ChartElement/Chart.vue?b455","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?ce7c","webpack:///./src/views/components/element/TableElement/EditableTable.vue?e1af","webpack:///./src/components/ColorPicker/Saturation.vue?6538","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue?fcfe","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?7239","webpack:///./src/views/components/ThumbnailSlide/index.vue?d419","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue?3ed9","webpack:///./src/views/components/element/ShapeElement/index.vue?f939","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?f8ce","webpack:///./src/views/Screen/ScreenSlide.vue?6e4b","webpack:///./src/views/Screen/PresenterView.vue?eb0c","webpack:///./src/views/components/element/ChartElement/index.vue?9df7","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?ba54","webpack:///./src/App.vue?2118","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue?0a08","webpack:///./src/components/LaTeXEditor/index.vue?f977","webpack:///./src/components/Contextmenu/index.vue?694c","webpack:///./src/components/FileInput.vue?18d0","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?b95d","webpack:///./src/views/Screen/WritingBoardTool.vue?572d","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?c7f5","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?b489","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue?18d8","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?3e23","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?966c","webpack:///./src/views/Editor/Canvas/index.vue?fd2a","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?db7c","webpack:///./src/views/Screen/ScreenSlideList.vue?7faf","webpack:///./src/App.vue?9e45","webpack:///./src/types/toolbar.ts","webpack:///./src/configs/font.ts","webpack:///./src/types/edit.ts","webpack:///./src/configs/hotkey.ts","webpack:///./src/utils/prosemirror/utils.ts","webpack:///./src/utils/font.ts","webpack:///./src/mocks/slides.ts","webpack:///./src/mocks/theme.ts","webpack:///./src/mocks/layout.ts","webpack:///./src/store/slides.ts","webpack:///./src/store/main.ts","webpack:///./src/utils/database.ts","webpack:///./src/store/snapshot.ts","webpack:///./src/store/keyboard.ts","webpack:///./src/store/screen.ts","webpack:///./src/utils/common.ts","webpack:///./src/views/Editor/index.vue?2c6d","webpack:///./src/types/slides.ts","webpack:///./src/utils/crypto.ts","webpack:///./src/utils/clipboard.ts","webpack:///./src/utils/element.ts","webpack:///./src/utils/textParser.ts","webpack:///./src/hooks/useHistorySnapshot.ts","webpack:///./src/utils/image.ts","webpack:///./src/configs/canvas.ts","webpack:///./src/configs/shapes.ts","webpack:///./src/configs/chartTypes.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?2557","webpack:///./src/utils/htmlParser/tags.ts","webpack:///./src/utils/htmlParser/lexer.ts","webpack:///./src/utils/htmlParser/parser.ts","webpack:///./src/utils/htmlParser/format.ts","webpack:///./src/utils/htmlParser/index.ts","webpack:///./src/utils/svgPathParser.ts","webpack:///./src/utils/svg2Base64.ts","webpack:///./src/hooks/useExport.ts","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?8860","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue","webpack:///./src/views/Editor/EditorHeader/HotkeyDoc.vue?b691","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue?47bd","webpack:///./src/views/components/ThumbnailSlide/index.vue?4c45","webpack:///./src/types/injectKey.ts","webpack:///./src/hooks/useSlideBackgroundStyle.ts","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?5010","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?4d4f","webpack:///./src/views/components/element/hooks/useElementShadow.ts","webpack:///./src/configs/imageClip.ts","webpack:///./src/views/components/element/hooks/useElementFlip.ts","webpack:///./src/views/components/element/ImageElement/useClipImage.ts","webpack:///./src/views/components/element/ImageElement/useFilter.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?d64e","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?dedf","webpack:///./src/views/components/element/hooks/useElementOutline.ts","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageRectOutline.vue?6e01","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?9a24","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImageEllipseOutline.vue?f9e6","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?f963","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/ImagePolygonOutline.vue?819e","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue","webpack:///./src/views/components/element/ImageElement/ImageOutline/index.vue?a843","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue","webpack:///./src/views/components/element/ImageElement/BaseImageElement.vue?dbd8","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?345f","webpack:///./src/views/components/element/ElementOutline.vue?e632","webpack:///./src/views/components/element/ElementOutline.vue","webpack:///./src/views/components/element/ElementOutline.vue?e7ed","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue","webpack:///./src/views/components/element/TextElement/BaseTextElement.vue?f2a6","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?d7ff","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?49a1","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue","webpack:///./src/views/components/element/ShapeElement/GradientDefs.vue?def0","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue","webpack:///./src/views/components/element/ShapeElement/BaseShapeElement.vue?5afd","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?89e3","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?8de0","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue","webpack:///./src/views/components/element/LineElement/LinePointMarker.vue?ee66","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue","webpack:///./src/views/components/element/LineElement/BaseLineElement.vue?d2cb","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?1976","webpack:///./src/views/components/element/ChartElement/Chart.vue?eb17","webpack:///./src/views/components/element/ChartElement/Chart.vue","webpack:///./src/views/components/element/ChartElement/Chart.vue?7db2","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue","webpack:///./src/views/components/element/ChartElement/BaseChartElement.vue?928d","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?9d51","webpack:///./src/views/components/element/TableElement/StaticTable.vue?622f","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/StaticTable.vue","webpack:///./src/views/components/element/TableElement/StaticTable.vue?ff6d","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue","webpack:///./src/views/components/element/TableElement/BaseTableElement.vue?e6c9","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue?184e","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue","webpack:///./src/views/components/element/LatexElement/BaseLatexElement.vue?45c1","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue?f013","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue","webpack:///./src/views/components/element/VideoElement/BaseVideoElement.vue?c20a","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue?237b","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue?3937","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue","webpack:///./src/views/components/ThumbnailSlide/ThumbnailElement.vue?ddb6","webpack:///./src/views/components/ThumbnailSlide/index.vue","webpack:///./src/views/components/ThumbnailSlide/index.vue?2e09","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue","webpack:///./src/views/Editor/EditorHeader/ExportImgDialog.vue?6a30","webpack:///./src/views/Editor/EditorHeader/index.vue","webpack:///./src/views/Editor/EditorHeader/index.vue?f944","webpack:///./src/views/Editor/Canvas/index.vue?ce3f","webpack:///./src/utils/selection.ts","webpack:///./src/views/Editor/Canvas/hooks/useViewportSize.ts","webpack:///./src/views/Editor/Canvas/hooks/useMouseSelection.ts","webpack:///./src/views/Editor/Canvas/hooks/useDropImageOrText.ts","webpack:///./src/views/Editor/Canvas/hooks/useRotateElement.ts","webpack:///./src/configs/element.ts","webpack:///./src/views/Editor/Canvas/hooks/useScaleElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useSelectElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useDragLineElement.ts","webpack:///./src/views/Editor/Canvas/hooks/useInsertFromCreateSelection.ts","webpack:///./src/views/Editor/Canvas/EditableElement.vue?e3b3","webpack:///./src/hooks/useAlignElementToCanvas.ts","webpack:///./src/views/components/element/ImageElement/index.vue?029e","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?52dc","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue","webpack:///./src/views/components/element/ImageElement/ImageClipHandler.vue?2c28","webpack:///./src/views/components/element/ImageElement/index.vue","webpack:///./src/views/components/element/ImageElement/index.vue?ff2b","webpack:///./src/views/components/element/TextElement/index.vue?f72b","webpack:///./src/views/components/element/ProsemirrorEditor.vue?8ca4","webpack:///./src/utils/emitter.ts","webpack:///./src/utils/prosemirror/plugins/keymap.ts","webpack:///./src/utils/prosemirror/plugins/inputrules.ts","webpack:///./src/utils/prosemirror/plugins/index.ts","webpack:///./src/utils/prosemirror/schema/nodes.ts","webpack:///./src/utils/prosemirror/schema/marks.ts","webpack:///./src/utils/prosemirror/schema/index.ts","webpack:///./src/utils/prosemirror/index.ts","webpack:///./src/utils/prosemirror/commands/setTextAlign.ts","webpack:///./src/utils/prosemirror/commands/toggleList.ts","webpack:///./src/views/components/element/ProsemirrorEditor.vue","webpack:///./src/views/components/element/ProsemirrorEditor.vue?4854","webpack:///./src/views/components/element/TextElement/index.vue","webpack:///./src/views/components/element/TextElement/index.vue?6fb4","webpack:///./src/views/components/element/ShapeElement/index.vue?758a","webpack:///./src/views/components/element/ShapeElement/index.vue","webpack:///./src/views/components/element/ShapeElement/index.vue?6caf","webpack:///./src/views/components/element/LineElement/index.vue?59e9","webpack:///./src/views/components/element/LineElement/index.vue","webpack:///./src/views/components/element/LineElement/index.vue?4793","webpack:///./src/views/components/element/ChartElement/index.vue?4de5","webpack:///./src/views/components/element/ChartElement/index.vue","webpack:///./src/views/components/element/ChartElement/index.vue?2bdf","webpack:///./src/views/components/element/TableElement/index.vue?9a52","webpack:///./src/views/components/element/TableElement/EditableTable.vue?0dcd","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?d975","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?abdd","webpack:///./src/views/components/element/TableElement/EditableTable.vue","webpack:///./src/views/components/element/TableElement/EditableTable.vue?adf9","webpack:///./src/views/components/element/TableElement/index.vue","webpack:///./src/views/components/element/TableElement/index.vue?a4cf","webpack:///./src/views/components/element/LatexElement/index.vue?6cc0","webpack:///./src/views/components/element/LatexElement/index.vue","webpack:///./src/views/components/element/LatexElement/index.vue?faec","webpack:///./src/views/components/element/VideoElement/index.vue?52dc","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue?cfe6","webpack:///./src/views/components/element/VideoElement/VideoPlayer/useMSE.ts","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue","webpack:///./src/views/components/element/VideoElement/VideoPlayer/index.vue?a136","webpack:///./src/views/components/element/VideoElement/index.vue","webpack:///./src/views/components/element/VideoElement/index.vue?9c8b","webpack:///./src/views/components/element/AudioElement/index.vue?b2aa","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue?ffda","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue","webpack:///./src/views/components/element/AudioElement/AudioPlayer.vue?7c58","webpack:///./src/views/components/element/AudioElement/index.vue","webpack:///./src/views/components/element/AudioElement/index.vue?0032","webpack:///./src/views/Editor/Canvas/EditableElement.vue","webpack:///./src/views/Editor/Canvas/EditableElement.vue?e703","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?425f","webpack:///./src/views/Editor/Canvas/MouseSelection.vue","webpack:///./src/views/Editor/Canvas/MouseSelection.vue?4329","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?825f","webpack:///./src/views/Editor/Canvas/GridLines.vue?480d","webpack:///./src/views/Editor/Canvas/GridLines.vue","webpack:///./src/views/Editor/Canvas/GridLines.vue?863a","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue","webpack:///./src/views/Editor/Canvas/ViewportBackground.vue?db9c","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?bc40","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue","webpack:///./src/views/Editor/Canvas/AlignmentLine.vue?af47","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?85fd","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue","webpack:///./src/views/Editor/Canvas/ElementCreateSelection.vue?e33f","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?420f","webpack:///./src/views/Editor/Canvas/hooks/useCommonOperate.ts","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?478c","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/ResizeHandler.vue?cd27","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?625e","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue","webpack:///./src/views/Editor/Canvas/Operate/BorderLine.vue?640d","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/MultiSelectOperate.vue?962f","webpack:///./src/views/Editor/Canvas/Operate/index.vue?9fcf","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?ca9d","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?7bca","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/RotateHandler.vue?8b12","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ImageElementOperate.vue?1576","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?a2af","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TextElementOperate.vue?3000","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?c9be","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/ShapeElementOperate.vue?ab3e","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?c26a","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/LineElementOperate.vue?8922","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?1076","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/TableElementOperate.vue?e0eb","webpack:///./src/views/Editor/Canvas/Operate/CommonElementOperate.vue?67e0","webpack:///./src/views/Editor/Canvas/Operate/CommonElementOperate.vue","webpack:///./src/views/Editor/Canvas/Operate/CommonElementOperate.vue?b957","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?2f13","webpack:///./src/hooks/useLink.ts","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue","webpack:///./src/views/Editor/Canvas/Operate/LinkHandler.vue?53bc","webpack:///./src/views/Editor/Canvas/Operate/index.vue","webpack:///./src/views/Editor/Canvas/Operate/index.vue?ec8a","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?5b23","webpack:///./src/views/Editor/Canvas/LinkDialog.vue","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?19ad","webpack:///./src/views/Editor/Canvas/index.vue","webpack:///./src/views/Editor/Canvas/index.vue?5e25","webpack:///./src/views/Editor/CanvasTool/index.vue?ebd8","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?2929","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue","webpack:///./src/views/Editor/CanvasTool/ShapePool.vue?258a","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?1f23","webpack:///./src/configs/lines.ts","webpack:///./src/views/Editor/CanvasTool/LinePool.vue","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?5b7d","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?3db6","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?2e9d","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?f19b","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue","webpack:///./src/views/Editor/CanvasTool/TableGenerator.vue?ddc5","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue?7d2c","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue","webpack:///./src/views/Editor/CanvasTool/MediaInput.vue?23a0","webpack:///./src/components/LaTeXEditor/index.vue?593a","webpack:///./src/components/LaTeXEditor/hfmath.ts","webpack:///./src/configs/latex.ts","webpack:///./src/components/LaTeXEditor/FormulaContent.vue?7e2b","webpack:///./src/components/LaTeXEditor/FormulaContent.vue","webpack:///./src/components/LaTeXEditor/FormulaContent.vue?ecb1","webpack:///./src/components/LaTeXEditor/SymbolContent.vue?673d","webpack:///./src/components/LaTeXEditor/SymbolContent.vue","webpack:///./src/components/LaTeXEditor/SymbolContent.vue?9c88","webpack:///./src/components/LaTeXEditor/index.vue","webpack:///./src/components/LaTeXEditor/index.vue?e61f","webpack:///./src/views/Editor/CanvasTool/index.vue","webpack:///./src/views/Editor/CanvasTool/index.vue?e1a6","webpack:///./src/views/Editor/Thumbnails/index.vue?fde6","webpack:///./src/hooks/useLoadSlides.ts","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?e54e","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?cca8","webpack:///./src/views/Editor/Thumbnails/index.vue","webpack:///./src/views/Editor/Thumbnails/index.vue?97d5","webpack:///./src/views/Editor/Toolbar/index.vue?8ca3","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?3646","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?2056","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?5a1a","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOpacity.vue?8eaf","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?3bc0","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?0251","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue","webpack:///./src/views/Editor/Toolbar/common/ColorButton.vue?6f8d","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?78bd","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?d132","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue","webpack:///./src/views/Editor/Toolbar/common/ElementShadow.vue?7b9e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TextStylePanel.vue?90a9","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?8a9b","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?ea9a","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFlip.vue?0828","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue?f6fa","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue?fefc","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue?35b6","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?cdd8","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ShapeStylePanel.vue?6e51","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?7782","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LineStylePanel.vue?ebc3","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?88ee","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?7cbe","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/ChartDataEditor.vue?13cd","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?7d6e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?bca3","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?1838","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue?cdab","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue?73c6","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue?c59d","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/VideoStylePanel.vue?27ee","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue?cc3e","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue?82fb","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/index.vue?ba7d","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?1004","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?9199","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?5759","webpack:///./src/configs/animation.ts","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue","webpack:///./src/views/Editor/Toolbar/ElementAnimationPanel.vue?9f55","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?562d","webpack:///./src/configs/theme.ts","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?8ed6","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?a53d","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue","webpack:///./src/views/Editor/Toolbar/SlideAnimationPanel.vue?09d8","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?b74c","webpack:///./src/hooks/useAlignActiveElement.ts","webpack:///./src/hooks/useUniformDisplayElement.ts","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue","webpack:///./src/views/Editor/Toolbar/MultiPositionPanel.vue?82ab","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?7eed","webpack:///./src/configs/symbol.ts","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue","webpack:///./src/views/Editor/Toolbar/SymbolPanel.vue?8779","webpack:///./src/views/Editor/Toolbar/index.vue","webpack:///./src/views/Editor/Toolbar/index.vue?3efa","webpack:///./src/views/Editor/Remark/index.vue?2a03","webpack:///./src/views/Editor/Remark/index.vue","webpack:///./src/views/Editor/Remark/index.vue?4c66","webpack:///./src/views/Editor/index.vue","webpack:///./src/views/Editor/index.vue?fb1c","webpack:///./src/views/Screen/index.vue?f3c3","webpack:///./src/views/Screen/BaseView.vue?7416","webpack:///./src/views/Screen/hooks/useExecPlay.ts","webpack:///./src/views/Screen/hooks/useSlideSize.ts","webpack:///./src/views/Screen/hooks/useFullscreen.ts","webpack:///./src/views/Screen/ScreenSlideList.vue?4dc3","webpack:///./src/views/Screen/ScreenSlide.vue?7220","webpack:///./src/views/Screen/ScreenElement.vue?643f","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?16d6","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue","webpack:///./src/views/components/element/ChartElement/ScreenChartElement.vue?9bdc","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue?d32e","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue","webpack:///./src/views/components/element/VideoElement/ScreenVideoElement.vue?1989","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue?ac4c","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue","webpack:///./src/views/components/element/AudioElement/ScreenAudioElement.vue?bb8a","webpack:///./src/views/Screen/ScreenElement.vue","webpack:///./src/views/Screen/ScreenElement.vue?448e","webpack:///./src/views/Screen/ScreenSlide.vue","webpack:///./src/views/Screen/ScreenSlide.vue?4983","webpack:///./src/views/Screen/ScreenSlideList.vue","webpack:///./src/views/Screen/ScreenSlideList.vue?fd5d","webpack:///./src/views/Screen/SlideThumbnails.vue?6cb4","webpack:///./src/views/Screen/SlideThumbnails.vue","webpack:///./src/views/Screen/SlideThumbnails.vue?2aa3","webpack:///./src/views/Screen/WritingBoardTool.vue?59e6","webpack:///./src/components/WritingBoard.vue?5268","webpack:///./src/components/WritingBoard.vue","webpack:///./src/components/WritingBoard.vue?daf9","webpack:///./src/views/Screen/WritingBoardTool.vue","webpack:///./src/views/Screen/WritingBoardTool.vue?56cc","webpack:///./src/views/Screen/BaseView.vue","webpack:///./src/views/Screen/BaseView.vue?3e47","webpack:///./src/views/Screen/PresenterView.vue?ef5c","webpack:///./src/views/Screen/PresenterView.vue","webpack:///./src/views/Screen/PresenterView.vue?6e6b","webpack:///./src/views/Screen/index.vue","webpack:///./src/views/Screen/index.vue?d18a","webpack:///./src/views/Mobile.vue?a8ce","webpack:///./src/views/Mobile.vue","webpack:///./src/views/Mobile.vue?44c6","webpack:///./src/App.vue","webpack:///./src/App.vue?ae2f","webpack:///./src/plugins/icon.ts","webpack:///./src/components/FileInput.vue?352e","webpack:///./src/components/FileInput.vue","webpack:///./src/components/FileInput.vue?ae58","webpack:///./src/components/CheckboxButton.vue?57a3","webpack:///./src/components/CheckboxButton.vue","webpack:///./src/components/CheckboxButton.vue?b241","webpack:///./src/components/CheckboxButtonGroup.vue?37b7","webpack:///./src/components/CheckboxButtonGroup.vue","webpack:///./src/components/CheckboxButtonGroup.vue?da6b","webpack:///./src/components/ColorPicker/index.vue?4562","webpack:///./src/components/ColorPicker/Alpha.vue?6cbb","webpack:///./src/components/ColorPicker/Checkboard.vue?d198","webpack:///./src/components/ColorPicker/Checkboard.vue","webpack:///./src/components/ColorPicker/Checkboard.vue?fca6","webpack:///./src/components/ColorPicker/Alpha.vue","webpack:///./src/components/ColorPicker/Alpha.vue?f3a6","webpack:///./src/components/ColorPicker/Hue.vue?481f","webpack:///./src/components/ColorPicker/Hue.vue","webpack:///./src/components/ColorPicker/Hue.vue?01db","webpack:///./src/components/ColorPicker/Saturation.vue?1bc0","webpack:///./src/components/ColorPicker/Saturation.vue","webpack:///./src/components/ColorPicker/Saturation.vue?7588","webpack:///./src/components/ColorPicker/EditableInput.vue?5ef3","webpack:///./src/components/ColorPicker/EditableInput.vue","webpack:///./src/components/ColorPicker/EditableInput.vue?e9b2","webpack:///./src/components/ColorPicker/index.vue","webpack:///./src/components/ColorPicker/index.vue?260d","webpack:///./src/components/FullscreenSpin.vue?9baf","webpack:///./src/components/FullscreenSpin.vue","webpack:///./src/components/FullscreenSpin.vue?40fd","webpack:///./src/plugins/component.ts","webpack:///./src/components/Contextmenu/index.vue?a623","webpack:///./src/components/Contextmenu/MenuContent.vue?5a42","webpack:///./src/components/Contextmenu/MenuContent.vue","webpack:///./src/components/Contextmenu/MenuContent.vue?0215","webpack:///./src/components/Contextmenu/index.vue","webpack:///./src/components/Contextmenu/index.vue?0141","webpack:///./src/plugins/directive/contextmenu.ts","webpack:///./src/plugins/directive/clickOutside.ts","webpack:///./src/plugins/directive/index.ts","webpack:///./src/main.ts","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/AudioStylePanel.vue?74eb","webpack:///./src/views/Editor/CanvasTool/ChartPool.vue?d28e","webpack:///./src/views/components/element/AudioElement/BaseAudioElement.vue?3687","webpack:///./src/components/ColorPicker/index.vue?1648","webpack:///./src/views/components/element/VideoElement/index.vue?c05f","webpack:///./src/views/Screen/SlideThumbnails.vue?9202","webpack:///./src/views/Editor/Toolbar/common/ElementOutline.vue?32d2","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/LatexStylePanel.vue?1f92","webpack:///./src/views/Editor/Thumbnails/LayoutPool.vue?17f5","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/TableStylePanel.vue?e445","webpack:///./src/views/Editor/Toolbar/SlideDesignPanel.vue?d1ea","webpack:///./src/views/Editor/Toolbar/ElementStylePanel/ChartStylePanel/index.vue?6098","webpack:///./src/views/Mobile.vue?4d0f","webpack:///./src/components/LaTeXEditor/FormulaContent.vue?b12e","webpack:///./src/views/Editor/Toolbar/ElementPositionPanel.vue?c3d6","webpack:///./src/views/components/element/TextElement/index.vue?44d4","webpack:///./src/views/components/element/TableElement/CustomTextarea.vue?4190","webpack:///./src/components/ColorPicker/Alpha.vue?9bb4","webpack:///./src/views/Editor/Toolbar/common/ElementFilter.vue?93e2","webpack:///./src/views/Editor/CanvasTool/LinePool.vue?aa30","webpack:///./src/views/components/element/ImageElement/index.vue?9fed","webpack:///./src/views/Editor/Canvas/LinkDialog.vue?729a","webpack:///./src/views/Editor/Canvas/GridLines.vue?f4b3"],"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","render","_ctx","_cache","$props","$setup","$data","$options","_component_Screen","_component_Editor","_component_Mobile","screening","isPC","ToolbarStates","ElementOrderCommands","ElementAlignCommands","OperateBorderLines","OperateResizeHandlers","OperateLineHandlers","KEYS","SYS_FONTS","label","WEB_FONTS","view","empty","state","selection","dispatch","addMark","editorView","mark","tr","from","to","$from","$to","pos","findNodesWithSameMark","doc","markType","ii","finder","type","firstMark","fromNode","toNode","node","nodeAt","marks","find","fromPos","toPos","jj","nodeSize","equalNodeType","nodeType","Array","isArray","indexOf","findParentNodeClosestToPos","$pos","predicate","depth","before","start","findParentNode","_ref","findParentNodeOfType","isActiveOfParentNodeType","schema","nodes","getMarkAttrs","lastChild","attr","attrs","markActive","isInSet","storedMarks","rangeHasMark","getAttrValueInSelection","keepChecking","nodesBetween","_defaultAttrs","color","backcolor","fontsize","fontname","align","defaultAttrs","isBold","isEm","isUnderline","isStrikethrough","isSuperscript","isSubscript","isCode","link","isBulletList","isOrderedList","isBlockquote","bold","em","underline","strikethrough","superscript","subscript","code","bulletList","orderedList","blockquote","defaultRichTextAttrs","isSupportFont","fontName","arial","toLowerCase","size","width","height","str","canvas","document","createElement","ctx","getContext","textAlign","fillStyle","textBaseline","getDotArray","_fontFamily","clearRect","font","fillText","imageData","getImageData","filter","item","join","id","elements","left","top","viewBox","path","fill","fixedRatio","opacity","rotate","flipV","lineHeight","content","defaultFontName","defaultColor","end","points","style","background","themeColor","fontColor","backgroundColor","wordSpace","outline","text","useSlidesStore","theme","slides","slideIndex","viewportRatio","getters","currentSlide","currentSlideAnimations","animations","els","elIds","map","el","animation","includes","elId","layouts","subColor","isDark","layoutsString","JSON","stringify","replaceAll","parse","actions","setTheme","themeProps","this","setViewportRatio","setSlides","addSlide","slide","addIndex","updateSlide","props","deleteSlide","slideId","slidesId","deleteSlidesIndex","index","findIndex","newIndex","Math","min","maxIndex","updateSlideIndex","addElement","element","currentSlideEls","newEls","updateElement","elIdList","removeElementProps","propName","propsNames","useMainStore","activeElementIdList","handleElementId","activeGroupElementId","canvasPercentage","canvasScale","thumbnailsFocus","editorAreaFocus","disableHotkeys","showGridLines","creatingElement","availableFonts","toolbarState","SLIDE_DESIGN","clipingImageElementId","richTextAttrs","selectedTableCells","isScaling","editingShapeElementId","selectedSlidesIndex","activeElementList","slidesStore","handleElement","setActiveElementIdList","setHandleElementId","setActiveGroupElementId","setCanvasPercentage","percentage","setCanvasScale","scale","setThumbnailsFocus","isFocus","setEditorareaFocus","setDisableHotkeysState","disable","setGridLinesState","show","setCreatingElement","setAvailableFonts","setToolbarState","setClipingImageElementId","setRichtextAttrs","setSelectedTableCells","cells","setScalingState","setEditingShapeElementId","ellId","updateSelectedSlidesIndex","version","stores","snapshots","table","snapshotDB","useSnapshotStore","snapshotCursor","snapshotLength","canUndo","canRedo","setSnapshotCursor","cursor","setSnapshotLength","initSnapshotDatabase","orderBy","toArray","lastSnapshot","clear","newFirstSnapshot","add","addSnapshot","keys","allKeys","needDeleteKeys","snapshot","snapshotLengthLimit","update","bulkDelete","unDo","mainStore","reDo","useKeyboardStore","ctrlKeyState","shiftKeyState","ctrlOrShiftKeyActive","setCtrlKeyState","active","setShiftKeyState","useScreenStore","setScreening","createRandomCode","len","charset","maxLen","ret","randomIndex","floor","random","digit","navigator","userAgent","match","_hoisted_1","class","_hoisted_2","_hoisted_3","_component_EditorHeader","_component_Thumbnails","_component_CanvasTool","_component_Canvas","_component_Remark","_component_Toolbar","remarkHeight","$event","ShapePathFormulasKeys","ElementTypes","HOTKEY_DOC","children","CRYPTO_KEY","msg","AES","encrypt","toString","ciphertext","bytes","decrypt","enc","Utf8","Promise","resolve","reject","fakeElement","clipboard","action","container","body","on","e","destroy","appendChild","click","removeChild","readClipboard","readText","then","clipboardData","pasteExcelClipboardString","lines","split","pop","colCount","getRectRotatedRange","radius","sqrt","pow","auxiliaryAngle","atan","PI","tlbraRadian","trblaRadian","middleLeft","middleTop","xAxis","cos","yAxis","sin","xRange","max","yRange","getRectRotatedOffset","originXRange","originYRange","rotatedXRange","rotatedYRange","offsetX","offsetY","getElementRange","minX","maxX","minY","maxY","getElementListRange","elementList","leftValues","topValues","rightValues","bottomValues","forEach","uniqAlignLines","uniqLines","line","_line","uniqLine","rangeMin","range","rangeMax","groupIdMap","elIdMap","groupId","rgba","setAlpha","toRgbString","broken","mid","curve","cubic","c1","c2","p1","p2","htmlText","replace","paragraphs","string","paragraph","snapshotStore","addHistorySnapshot","trailing","redo","leading","undo","getImageSize","src","img","onload","imgWidth","clientWidth","imgHeight","clientHeight","onerror","getImageDataURL","file","reader","FileReader","addEventListener","readAsDataURL","VIEWPORT_SIZE","SHAPE_PATH_FORMULAS","ROUND_RECT","CUT_RECT_DIAGONAL","CUT_RECT_SINGLE","CUT_RECT_SAMESIDE","ROUND_RECT_DIAGONAL","ROUND_RECT_SINGLE","ROUND_RECT_SAMESIDE","MESSAGE","arrowWidth","arrowheight","ROUND_MESSAGE","L","lineWidth","RING_RECT","PLUS","SHAPE_LIST","pathFormula","special","CHART_TYPES","bar","horizontalBar","area","scatter","pie","ring","useHistorySnapshot","setTimeout","createImageElement","createChartElement","newElement","chartType","gridColor","labels","legends","series","options","horizontalBars","showArea","showLine","donut","createTableElement","row","col","rowCells","colspan","rowspan","DEFAULT_CELL_WIDTH","DEFAULT_CELL_HEIGHT","colWidths","rowHeader","rowFooter","colHeader","colFooter","createTextElement","position","createShapeElement","createLineElement","isBroken","isCurve","isCubic","createLatexElement","w","h","latex","strokeWidth","createVideoElement","createAudioElement","loop","autoplay","useCreateElement","addElementsFromClipboard","currentSlideElementIdList","inCurrentSlide","values","addSlidesFromClipboard","newSlides","createTextElementFromClipboard","pasteTextClipboardData","onlySlide","onlyElements","_selectedSlidesIndex","selectedSlides","selectedSlidesId","usePasteTextClipboardData","resetSlides","emptySlide","command","UP","DOWN","copySlide","pasteSlide","catch","err","message","warning","createSlide","createSlideByTemplate","newSlide","copyAndPasteSlide","targetSlidesId","cutSlide","selectAllSlide","newSelectedSlidesIndex","lockElement","newElementList","lock","unlockElement","groupElementIdList","deleteElement","deleteAllElements","canCombine","firstGroupId","inSameGroup","every","combineElements","combineElementList","combineElementMaxLevel","_element","combineElementIdList","insertLevel","uncombineElements","hasElementInGroup","some","handleElementIdList","useDeleteElement","copyElement","cutElement","pasteElement","quickCopyElement","selectAllElement","unlockedElements","newActiveElementIdList","moveElement","step","move","LEFT","RIGHT","getCombineElementLevelRange","minLevel","maxLevel","moveUpElement","copyOfElementList","nextElement","movedElementList","nextCombineElementList","level","movedElement","moveDownElement","prevElement","prevCombineElementList","moveTopElement","moveBottomElement","unshift","orderElement","TOP","BOTTOM","enterFullscreen","docElm","documentElement","requestFullscreen","mozRequestFullScreen","webkitRequestFullScreen","exitFullscreen","mozCancelFullScreen","webkitCancelFullScreen","isFullscreen","mozFullScreen","webkitIsFullScreen","webkitFullScreen","screenStore","enterScreening","enterScreeningFromStart","exitScreening","scaleCanvas","keyboardStore","useSlideHandler","useCombineElement","useLockElement","useCopyAndPasteElement","useSelectAllElement","useMoveElement","useOrderElement","useScreening","useScaleCanvas","copy","cut","quickCopy","selectAll","combine","uncombine","remove","order","tabActiveElement","currentIndex","nextIndex","nextElementId","firstElement","keydownListener","ctrlKey","shiftKey","altKey","metaKey","ctrlOrMetaKeyActive","toUpperCase","F","preventDefault","C","X","D","Z","Y","A","G","B","DELETE","BACKSPACE","ENTER","MINUS","EQUAL","DIGIT_0","TAB","keyupListener","removeEventListener","pasteImageFile","imageFile","dataURL","pasteListener","clipboardDataItems","items","clipboardDataFirstItem","kind","getAsFile","getAsString","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","href","target","_hoisted_29","_component_IconFolderClose","_component_MenuItem","_component_Menu","_component_Dropdown","_component_IconEdit","_component_IconPpt","_component_IconHelpcenter","_component_Tooltip","_component_IconGithub","_component_HotkeyDoc","_component_Drawer","_component_ExportImgDialog","_component_Modal","_component_FullscreenSpin","trigger","overlay","default","onClick","exportJSON","_","exportPPTX","exportImgDialogVisible","toggleGridLines","goIssues","hotkeyDrawerVisible","mouseLeaveDelay","title","placement","visible","onClose","footer","centered","closable","destroyOnClose","loading","exporting","tip","childlessTags","closingTags","closingTagAncestorBreakers","li","dt","dd","tbody","thead","tfoot","td","voidTags","jumpPosition","movePositopn","findTextEnd","isEnd","textEnd","char","charAt","test","lexText","tokens","lexComment","contentEnd","commentEnd","lexTagName","isTagChar","tagName","quote","wordBegin","words","isQuoteEnd","isTagEnd","isWordEnd","isQuoteStart","word","isNotPair","secondWord","newWord","thirdWord","safeTagName","nextTag","tagState","lexTag","textStart","secondChar","tagStartClose","close","firstChar","tagEndClose","isComment","safeTag","lexer","root","stack","tagParents","parentTagName","rewindStack","newLength","token","tagToken","shouldRewind","isClosingTag","shouldRewindToAutoClose","previousIndex","attributes","tagEndToken","_token","elementNode","hasChildren","innerState","splitHead","sep","idx","unquote","car","formatAttributes","attribute","parts","trim","format","typeMap","1","2","4","8","16","32","64","128","256","512","pathData","commands","x","y","relative","x1","y1","x2","y2","lastPoint","cubicBezierPoints","px","py","cx","cy","rx","rX","ry","rY","xAxisRotation","xRot","largeArcFlag","lArcFlag","sweepFlag","cbPoint","characters","PREFIX","utf8Encode","utftext","charCodeAt","String","fromCharCode","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","isNaN","svg2Base64","XMLS","XMLSerializer","svg","serializeToString","exportImage","domRef","quality","ignoreWebfont","toImage","config","fontEmbedCSS","dataUrl","error","blob","Blob","formatColor","_color","alpha","getAlpha","toHexString","formatHTML","html","ast","slices","obj","baseStyleObj","lastSlice","breakLine","styleObj","styleAttr","styleArr","styleItem","_key","_value","fontSize","parseInt","highlight","strike","italic","fontFace","hyperlink","url","bullet","indent","formatPoints","point","undefined","moveTo","getShadowOption","shadow","blur","offset","v","angle","getOutlineOption","transparency","dashType","pptx","pptxSlide","image","gradientColor","color1","color2","mix","textProps","valign","margin","lineSpacingMultiple","charSpacing","addText","flipH","filters","clip","shape","rounding","originW","originH","sizing","addImage","svgRef","querySelector","base64SVG","fillColor","addShape","beginArrowType","endArrowType","chartData","chartColors","analogous","supplement","legend","showLegend","legendPos","legendColor","legendFontSize","ChartType","barDir","lineSize","lineSmooth","doughnut","holeSize","addChart","hiddenCells","rowData","cell","tableData","subThemeColors","_row","cellOptions","colW","border","pt","addTable","writeFile","fileName","hotkeys","hotkey","setup","__exports__","ref","_component_ThumbnailSlide","_component_RadioButton","_component_RadioGroup","_component_Slider","_component_Switch","_component_Button","checked","expImage","_component_ThumbnailElement","transform","backgroundStyle","elementInfo","elementIndex","injectKeySlideScale","injectKeySlideId","imageSize","gradientRotate","gradientType","backgroundImage","backgroundRepeat","backgroundSize","zIndex","currentElementComponent","_component_ImageOutline","shadowStyle","flipStyle","clipPath","clipShape","draggable","imgPosition","alt","ClipPathTypes","ClipPaths","CLIPPATHS","rect","RECT","rect2","POLYGON","createPath","rect3","roundRect","ellipse","ELLIPSE","triangle","triangle2","triangle3","rhombus","hexagon","pentagon","parallelogram","parallelogram2","trapezoid","trapezoid2","widthScale","heightScale","_component_ImageRectOutline","_component_ImageEllipseOutline","_component_ImagePolygonOutline","overflow","stroke","outlineColor","outlineWidth","outlineStyle","Number","required","useElementOutline","Function","components","ImageRectOutline","ImageEllipseOutline","ImagePolygonOutline","useClipImage","ImageOutline","useElementShadow","useElementFlip","useFilter","_component_ElementOutline","textShadow","letterSpacing","fontFamily","innerHTML","ElementOutline","_component_GradientDefs","gradient","gradientTransform","GradientDefs","defaultText","_component_LinePointMarker","svgWidth","svgHeight","baseSize","lineDashArray","markerUnits","orient","markerWidth","markerHeight","refX","refY","pathMap","dot","arrow","rotateMap","LinePointMarker","abs","_component_Chart","needScaleSize","chartWidth","chartHeight","flexDirection","slideScale","themeColors","chart","chartRef","getDataAndOptions","propsOptopns","renderChart","updateChart","colors","updateTheme","setProperty","updateGridColor","Chart","Boolean","_component_StaticTable","totalWidth","subThemeColor","colSizeList","span","rowIndex","colIndex","borderStyle","borderColor","borderWidth","getTextStyle","formatText","hideCells","textDecoration","fontWeight","fontStyle","immediate","editable","reduce","a","b","useHideCells","useSubThemeColor","StaticTable","_component_IconPlayOne","poster","_component_IconVolumeNotice","audioIconSize","elementTypeMap","IMAGE","BaseImageElement","TEXT","BaseTextElement","SHAPE","BaseShapeElement","LINE","BaseLineElement","CHART","BaseChartElement","TABLE","BaseTableElement","LATEX","BaseLatexElement","VIDEO","BaseVideoElement","AUDIO","BaseAudioElement","ThumbnailElement","useSlideBackgroundStyle","ThumbnailSlide","emit","imageThumbnailsRef","useExport","HotkeyDoc","ExportImgDialog","open","_component_ElementCreateSelection","_component_AlignmentLine","_component_MultiSelectOperate","_component_Operate","_component_ViewportBackground","_component_MouseSelection","_component_EditableElement","_component_LinkDialog","_directive_contextmenu","_directive_click_outside","onMousewheel","handleMousewheelCanvas","onMousedown","handleClickBlankArea","onCreated","insertElementFromCreateSelection","viewportStyles","alignmentLines","axis","scaleMultiElement","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement","mouseSelectionVisible","mouseSelection","quadrant","mouseSelectionQuadrant","selectElement","linkDialogVisible","contextmenus","removeEditorAreaFocus","removeAllRanges","getSelection","canvasRef","viewportLeft","viewportTop","setViewportPosition","canvasWidth","canvasHeight","viewportActualWidth","viewportActualHeight","resizeObserver","ResizeObserver","observe","unobserve","viewportRef","updateMouseSelection","isMouseDown","viewportRect","getBoundingClientRect","minSelectionRange","startPageX","pageX","startPageY","pageY","onmousemove","currentPageX","currentPageY","offsetWidth","offsetHeight","onmouseup","inRangeElementList","mouseSelectionLeft","mouseSelectionTop","mouseSelectionWidth","mouseSelectionHeight","isInclude","inRangeElement","groupElementList","groupElement","inRangeElementIdList","elementRef","handleDrop","dataTransfer","dataTransferItem","ondragleave","ondrop","ondragenter","ondragover","getAngleFromCoordinate","radian","atan2","elOriginRotate","elLeft","elTop","elWidth","elHeight","centerX","centerY","mouseX","mouseY","sorptionRange","ELEMENT_TYPE_ZH","video","audio","MIN_SIZE","getRotateElementPoints","taRadian","raRadian","halfWidth","halfHeight","leftTopPoint","topPoint","rightTopPoint","rightPoint","rightBottomPoint","bottomPoint","leftBottomPoint","leftPoint","direction","oppositeMap","RIGHT_BOTTOM","LEFT_BOTTOM","LEFT_TOP","RIGHT_TOP","elOriginLeft","elOriginTop","elOriginWidth","elOriginHeight","elRotate","rotateRadian","aspectRatio","minSize","getSizeWithinRange","baseLeft","baseTop","horizontalLines","verticalLines","oppositePoint","edgeWidth","edgeHeight","right","bottom","topLine","bottomLine","leftLine","rightLine","edgeTopLine","edgeBottomLine","edgeHorizontalCenterLine","edgeLeftLine","edgeRightLine","edgeVerticalCenterLine","alignedAdsorption","currentX","currentY","_alignmentLines","isVerticalAdsorbed","isHorizontalAdsorbed","correctionVal","revisedX","revisedY","currentPoints","currentOppositePoint","currentBaseLeft","currentBaseTop","moveX","moveY","operateWidth","operateHeight","originElementList","currentMinX","currentMaxX","currentMinY","currentMaxY","currentOppositeWidth","currentOppositeHeight","originElement","originEl","startMove","newActiveIdList","groupMembersId","dragElement","originActiveElementList","isMisoperation","horizontalCenterLine","verticalCenterLine","targetMinX","targetMaxX","targetMinY","targetMaxY","targetLeft","targetTop","targetCenterX","targetCenterY","adsorptionPoints","startX","startY","endX","endY","midX","midY","c1X","c1Y","c2X","c2Y","START","adsorptionPoint","END","C1","C2","newEl","formatCreateSelection","selectionData","formatCreateSelectionForLine","_start","_end","alignElementToCanvas","viewportWidth","viewportHeight","CENTER","VERTICAL","HORIZONTAL","_component_ImageClipHandler","isCliping","clipData","onClip","handleClip","handleSelectElement","onDragstart","clipWrapperPositionStyle","bottomImgPositionStyle","topImgWrapperPositionStyle","topImgPositionStyle","moveClipRange","rotateClassName","scaleClipRange","emits","isSettingClipRange","currentRange","getClipDataTransformInfo","topImgWrapperPosition","bottomWidth","bottomHeight","initClipPosition","clipedEmitData","keyboardListener","updateRange","retPosition","bottomPosition","originPositopn","minWidth","minHeight","targetWidth","targetHeight","prefix","ImageClipHandler","stopPropagation","originClip","centerOffsetX","centerOffsetY","rotatedCenterX","rotatedCenterY","_props","_component_ProsemirrorEditor","elementId","onUpdate","updateContent","EmitterEvents","cmd","strong","list_item","childCount","rules","ordered_list","bullet_list","code_block","_orderedList","group","_bulletList","parseDOM","tag","getAttrs","dom","getAttribute","toDOM","excludes","forecolor","inline","inclusive","schemaNodes","schemaMarks","htmlString","parser","DOMParser","parseFromString","firstElementChild","fromSchema","plugins","emitter","mitt","alignment","listItem","tasks","allowedNodeTypes","Set","has","task","setNodeMarkup","alignmentCommand","setSelection","isList","listType","itemType","blockRange","parentList","validContent","autoFocus","editorViewRef","handleInput","handleFocus","handleBlur","handleClick","handleKeydown","textContent","hasFocus","replaceRangeWith","setProps","handleDOMEvents","focus","keydown","execCommand","payload","removeMark","insertText","RICH_TEXT_COMMAND","off","ProsemirrorEditor","canMove","realHeightCache","updateTextElementHeight","entries","contentRect","realHeight","onDblclick","enterEditing","updateText","exitEditing","_text","openDataEditor","OPEN_CHART_DATA_EDITOR","_component_EditableTable","onChange","updateTableCells","onChangeColWidths","widths","updateColWidths","onChangeSelectedCells","updateSelectedCells","startEdit","_component_CustomTextarea","dragLinePosition","handleMousedownColHandler","tableCells","selectedCells","activedCell","handleCellMousedown","onMouseenter","handleCellMouseenter","contenteditable","onUpdateValue","onInsertExcelData","insertExcelData","onFocus","onBlur","onInput","textareaRef","onpaste","excelData","CustomTextarea","isStartSelect","startCell","endCell","set","newData","removeSelectedCells","oldValue","selectedRange","handleMouseup","button","isHideCell","selectCol","maxRow","selectRow","maxCol","deleteRow","_tableCells","targetCells","hideCellsPos","deleteCol","insertRow","insertCol","fillTable","rowCount","defaultCell","newRows","mergeCells","splitCells","originWidth","round","clearSelectedCellText","tabActiveCell","getNextCell","nextRow","nextCol","nextCell","textRef","fillRowCount","fillColCount","getEffectiveTableCells","effectiveTableCells","_rowCells","checkCanDeleteRowOrCol","canDeleteRow","canDeleteCol","checkCanMergeOrSplit","isMultiSelected","targetCell","canMerge","canSplit","cellIndex","dataset","handler","divider","EditableTable","updateTableElementHeight","openLatexEditor","OPEN_LATEX_EDITOR","_component_VideoPlayer","_component_IconPause","_component_IconVolumeMute","_component_IconVolumeSmall","hideController","onMousemove","autoHideController","toggle","playsinline","onDurationchange","handleDurationchange","onTimeupdate","handleTimeupdate","onEnded","handleEnded","onProgress","handleProgress","onPlay","onPause","onError","handleError","bezelTransition","onAnimationend","paused","toggleVolume","volume","handleMousedownVolumeBar","onTouchstart","handleClickVolumeBar","volumeBarWidth","ptime","dtime","speedMenuVisible","onMouseleave","speedOptions","playbackRate","speed","toggleLoop","handleMousedownPlayBar","handleMousemovePlayBar","playBarTimeVisible","playBarTimeLeft","playBarTime","loadedBarWidth","playedBarWidth","videoRef","exec","canPlayType","Hls","isSupported","hls","loadSource","attachMedia","flvjs","flvPlayer","createPlayer","attachMediaElement","load","secondToTime","second","add0","num","hour","sec","getBoundingClientRectViewLeft","playBarWrap","volumeBarRef","currentTime","duration","loaded","seek","time","play","pause","setVolume","muted","rate","buffered","thumbMove","clientX","changedTouches","thumbUp","volumeMove","volumeUp","tx","autoHideControllerTimer","clearTimeout","played","useMSE","VideoPlayer","_component_AudioPlayer","audioPlayerPosition","handlePlayed","audioRef","AudioPlayer","audioWidth","audioHeight","ImageElement","TextElement","ShapeElement","LineElement","ChartElement","TableElement","LatexElement","VideoElement","AudioElement","useAlignElementToCanvas","subText","hide","validator","_component_GridLines","bgColor","colorList","mostReadable","includeFallbackColors","gridSize","getPath","GridLines","sizeStyle","createSelection","onContextmenu","lineData","selectionRef","absX","absY","isOpposite","endPageX","endPageY","defaultSize","_startX","_startY","_endX","_endY","_component_BorderLine","_component_ResizeHandler","borderLines","disableResize","resizeHandlers","textElementResizeHandlers","T","R","isWide","ResizeHandler","BorderLine","localActiveElementList","useCommonOperate","setRange","_component_LinkHandler","transformOrigin","currentOperateComponent","handlerVisible","elementIndexInAnimation","_component_RotateHandler","scaleWidth","inheritAttrs","RotateHandler","scaleHeight","handlers","ctrlHandler","ctrlHandler1","ctrlHandler2","cannotRotate","_component_Divider","removeLink","setLink","linkRegExp","useLink","LinkHandler","ImageElementOperate","TextElementOperate","ShapeElementOperate","LineElementOperate","TableElementOperate","CommonElementOperate","_component_Input","_component_SelectOption","_component_Select","tabs","tab","address","placeholder","selectedSlide","save","success","EditableElement","MouseSelection","ViewportBackground","AlignmentLine","ElementCreateSelection","MultiSelectOperate","Operate","LinkDialog","setLocalElementList","useViewportSize","useDropImageOrText","useMouseSelection","useDragElement","useDragLineElement","useSelectElement","useScaleElement","useRotateElement","throttleScaleCanvas","throttleUpdateSlideIndex","deltaY","useInsertFromCreateSelection","_component_IconBack","_component_IconNext","_component_IconFontSize","_component_IconPicture","_component_FileInput","_component_ShapePool","_component_IconGraphicDesign","_component_Popover","_component_LinePool","_component_IconConnection","_component_ChartPool","_component_IconChartProportion","_component_TableGenerator","_component_IconInsertTable","_component_IconFormula","_component_MediaInput","_component_IconVideoTwo","_component_IconMinus","_component_IconPlus","_component_IconFullScreen","_component_LaTeXEditor","mouseEnterDelay","drawText","files","insertImageElement","shapePoolVisible","onSelect","drawShape","linePoolVisible","drawLine","chartPoolVisible","tableGeneratorVisible","onInsert","latexEditorVisible","mediaInputVisible","onInsertVideo","onInsertAudio","canvasScalePercentage","shapeList","selectShape","lineList","selectLine","LINE_LIST","_component_IconChartLine","_component_IconChartHistogram","_component_IconChartPie","_component_IconChartHistogramOne","_component_IconChartLineArea","_component_IconChartRing","_component_IconChartScatter","chartList","selectChart","_component_InputNumber","isCustom","customRow","customCol","insertCustomTable","handleClickTable","videoSrc","insertVideo","audioSrc","insertAudio","_component_TextArea","_component_FormulaContent","_component_SymbolContent","symbolList","selectedSymbolKey","symbolPool","insertSymbol","formulaList","hfmath","SUB_SUP_SCALE","FORMULA_LIST","SYMBOL_LIST","box","pathd","eq","boxW","boxH","SCALE_X","SCALE_Y","FormulaContent","SymbolContent","textAreaRef","selectedSymbol","ShapePool","LinePool","ChartPool","TableGenerator","MediaInput","LaTeXEditor","_component_LayoutPool","_component_IconDown","_component_Draggable","presetLayoutPopoverVisible","modelValue","scroll","scrollSensitivity","setData","onEnd","handleDragEnd","itemKey","handleClickSlideThumbnail","fillDigit","slidesLoadLimit","contextmenusThumbnailItem","contextmenusThumbnails","timer","loadSlide","selectSlideTemplate","Draggable","LayoutPool","useLoadSlides","changSlideIndex","minIndex","eventData","oldIndex","_slides","_slide","currentTabs","currentPanelComponent","_component_SelectOptGroup","_component_IconAddText","_component_InputGroup","_component_ColorPicker","_component_IconText","_component_IconBackgroundColor","_component_IconFill","_component_ButtonGroup","_component_IconTextBold","_component_CheckboxButton","_component_IconTextItalic","_component_IconTextUnderline","_component_IconStrikethrough","_component_IconFormat","_component_CheckboxButtonGroup","_component_IconUpOne","_component_IconDownOne","_component_IconCode","_component_IconQuote","_component_IconLinkOne","_component_IconAlignTextLeft","_component_IconAlignTextCenter","_component_IconAlignTextRight","_component_IconList","_component_IconOrderedList","_component_IconRowHeight","_component_IconFullwidth","_component_ElementShadow","_component_ElementOpacity","presetStyles","emitBatchRichTextCommand","compact","emitRichTextCommand","suffixIcon","webFonts","fontSizeOptions","updateFill","linkPopoverVisible","disabled","updateLink","openLinkPopover","updateLineHeight","lineHeightOptions","updateWordSpace","wordSpaceOptions","updateOpacity","deep","_component_ColorButton","fixed","hasOutline","toggleOutline","updateOutline","_component_IconPlatte","ColorButton","outlineProps","_outline","hasShadow","toggleShadow","updateShadow","shadowProps","_shadow","ElementOpacity","ElementShadow","_component_ElementFlip","_component_IconTailoring","_component_ElementFilter","_component_IconTransform","_component_IconUndo","_component_IconTheme","clipImage","clipPanelVisible","shapeClipPathOptions","presetImageClip","ratioClipOptions","ratio","replaceImage","resetImage","setBackgroundImage","_component_IconFlipVertically","_component_IconFlipHorizontally","updateFlip","flipProps","hasFilters","toggleFilters","filterOptions","updateFilter","defaultFilters","unit","_handleElement","originFilters","ElementFlip","ElementFilter","getImageElementDataBeforeClip","imgLeft","imgTop","originClipRange","originHeight","originLeft","originTop","imageRatio","distance","_component_IconAlignTextTopOne","_component_IconAlignTextMiddleOne","_component_IconAlignTextBottomOne","fillType","updateFillType","updateGradient","showTextTools","updateTextAlign","gradientProps","_gradient","updateLine","_component_Checkbox","_component_IconCloseSmall","_component_ChartDataEditor","chartDataEditorVisible","updateOptions","stackBars","updateLegend","deleteThemeColor","presetThemesVisible","presetChartThemes","itemIndex","presetThemeColorHoverIndex","applyPresetTheme","addThemeColor","onSave","updateData","tempRangeSize","rangeLines","resizablePointStyle","changeSelectRange","autocomplete","focusCell","onPaste","handlePaste","closeEditor","getTableData","CELL_WIDTH","CELL_HEIGHT","initData","_data","inputRef","moveNextRow","labelsItem","labelInputRef","legendsItem","seriesItem","valueInputRef","ChartDataEditor","_lineSmooth","_showLine","_showArea","_horizontalBars","_donut","_stackBars","optionProps","newOptions","textAttrs","updateTextAttrs","setTableRow","setTableCol","hasTheme","toggleTheme","minRowCount","minColCount","updateTextAttrState","selectedCell","textAttrProp","themeProp","_theme","newTableCells","newColSizeList","updateLatex","updateLatexData","setVideoPoster","updateVideo","updateAudio","panelMap","TextStylePanel","ImageStylePanel","ShapeStylePanel","LineStylePanel","ChartStylePanel","TableStylePanel","LatexStylePanel","VideoStylePanel","AudioStylePanel","_component_IconSendToBack","_component_IconBringToFrontOne","_component_IconBringToFront","_component_IconSentToBack","_component_IconAlignLeft","_component_IconAlignVertically","_component_IconAlignRight","_component_IconAlignTop","_component_IconAlignHorizontally","_component_IconAlignBottom","_component_IconLock","_component_IconUnlock","_component_IconRotate","updateLeft","updateTop","updateWidth","updateFixedRatio","updateHeight","updateRotate45","flex","updateRotate","_rotate","_component_IconEffects","_component_IconClick","animationPoolVisible","onVisibleChange","handlePopoverVisibleChange","hoverPreviewAnimation","addAnimation","popoverMaskHide","handleElementAnimationName","animationSequence","elType","animationType","runAnimation","deleteAnimation","handleElementAnimation","updateElementAnimationDuration","ANIMATIONS","defaultDuration","animationTypes","elRef","animationName","classList","handleAnimationEnd","removeProperty","once","updateElementAnimation","animationItem","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","updateBackgroundType","updateBackground","uploadBackgroundImage","applyBackgroundAllSlide","updateViewportRatio","showPresetThemes","togglePresetThemesVisible","themes","applyThemeAllSlide","PRESET_THEMES","newBackground","currentTurningMode","updateTurningMode","applyAllSlide","turningMode","_component_IconGroup","_component_IconUngroup","alignElement","displayItemCount","uniformHorizontalDisplay","uniformVerticalDisplay","alignActiveElement","groupElementRangeMap","activeElement","groupElements","horizontalCenter","center","verticalCenter","count","groupIdList","copyOfActiveElementList","singleElemetList","groupList","groupEl","formatedGroupList","groupItem","list","sort","itemA","itemB","sortedElementData","firstItem","lastPos","lastWidth","currentPos","currentWidth","sortedItem","totalHeight","lastHeight","currentHeight","useAlignActiveElement","useUniformDisplayElement","symbolPoolList","selectSymbol","elementTabs","EL_STYLE","SYMBOL","EL_POSITION","EL_ANIMATION","slideTabs","SLIDE_ANIMATION","multiSelectTabs","MULTI_POSITION","currentTabsValue","ElementStylePanel","ElementPositionPanel","ElementAnimationPanel","SlideDesignPanel","SlideAnimationPanel","MultiPositionPanel","SymbolPanel","resize","remark","newHeight","EditorHeader","Canvas","CanvasTool","Thumbnails","Toolbar","Remark","useGlobalHotkey","usePasteEvent","_component_BaseView","_component_PresenterView","viewMode","changeViewMode","_component_ScreenSlideList","_component_SlideThumbnails","_component_WritingBoardTool","_component_IconLeftTwo","_component_IconRightTwo","_component_IconWrite","_component_IconMagic","_component_IconListView","_component_IconOffScreenOne","_component_IconFullScreenOne","_component_IconPower","laserPen","slideWidth","slideHeight","animationIndex","turnSlideToId","manualExitFullscreen","mousewheelListener","touchStartListener","onTouchend","touchEndListener","slideThumbnailModelVisible","turnSlideToIndex","writingBoardToolVisible","execPrev","execNext","rightToolsVisible","fullscreenState","autoPlayTimer","closeAutoPlay","clearInterval","throttleMassage","lastIndex","autoPlay","setInterval","touchInfo","SPACE","turnPrevSlide","turnNextSlide","wrapRef","setSlideContentSize","slideWrapRef","winWidth","winHeight","escExit","windowResizeListener","_component_ScreenSlide","_component_ScreenElement","visibility","needWaitAnimation","openLink","_component_BaseChartElement","audioPlayerRef","ScreenChartElement","ScreenVideoElement","ScreenAudioElement","ScreenElement","ScreenSlide","_component_IconArrowCircleLeft","turnSlide","_component_WritingBoard","_component_IconHighLight","_component_IconErase","_component_IconClear","_component_IconClose","writingBoardColor","blackboard","model","writingBoardModel","changeModel","clearCanvas","writingBoardColors","changeColor","closeWritingBoard","handleMousedown","handleMousemove","onMouseup","onTouchmove","mouseInCanvas","mouse","rubberSize","penSize","markSize","writingBoardRef","lastTime","lastLineWidth","updateCanvasSize","initCanvas","lineCap","lineJoin","updateCtx","globalCompositeOperation","globalAlpha","draw","posX","posY","lastPosX","lastPosY","strokeStyle","beginPath","lineTo","closePath","erase","sinRadius","cosRadius","rectPoint1","rectPoint2","rectPoint3","rectPoint4","arc","restore","getDistance","getLineWidth","maxV","minV","maxWidth","handleMove","Date","getTime","getMouseOffsetPosition","event","MouseEvent","canvasRect","TouchEvent","WritingBoard","ScreenSlideList","SlideThumbnails","WritingBoardTool","useExecPlay","useSlideSize","useFullscreen","handleMousewheelThumbnails","remarkFontSize","currentSlideRemark","setRemarkFontSize","slideListWrapRef","thumbnailsRef","scrollBy","activeThumbnailRef","offsetLeft","scrollTo","behavior","BaseView","PresenterView","ESC","_component_Alert","description","mobileRef","Editor","Screen","Mobile","onbeforeunload","icons","PlayOne","Lock","Unlock","Ppt","Format","Picture","FullScreen","List","OrderedList","Helpcenter","FlipVertically","FlipHorizontally","FontSize","Code","TextBold","TextItalic","TextUnderline","Strikethrough","Edit","Quote","BackgroundColor","Group","Ungroup","Back","Next","Fullwidth","AlignTop","AlignLeft","AlignRight","AlignBottom","AlignVertically","AlignHorizontally","BringToFront","SendToBack","AlignTextLeft","AlignTextRight","AlignTextCenter","RowHeight","Write","InsertTable","AddText","Fill","Tailoring","Effects","ColorFilter","Down","Plus","Minus","Connection","BringToFrontOne","SentToBack","Github","ChartProportion","ChartHistogram","ChartHistogramOne","ChartLineArea","ChartRing","ChartScatter","ChartLine","ChartPie","Text","Rotate","LeftTwo","RightTwo","Platte","UpOne","DownOne","Close","CloseSmall","Undo","Transform","Click","Theme","ArrowCircleLeft","GraphicDesign","Logout","Erase","Clear","FolderClose","AlignTextTopOne","AlignTextBottomOne","AlignTextMiddleOne","Pause","VolumeMute","VolumeNotice","VolumeSmall","VideoTwo","Formula","LinkOne","FullScreenOne","OffScreenOne","Power","ListView","Magic","HighLight","install","app","component","$slots","accept","handleChange","_component_Saturation","_component_Checkboard","_component_Hue","_component_Alpha","_component_EditableInput","hue","onColorChange","currentColor","pickColor","selectPresetColor","presetColors","standardColors","recentColors","handleMouseDown","bgStyle","checkboardCache","renderCheckboard","white","grey","fillRect","translate","toDataURL","getCheckboard","checkboard","Checkboard","rgbaStr","g","alphaRef","containerWidth","xOffset","pageXOffset","unbindEventListeners","pointerLeft","oldHue","pullDirection","hsla","toHsl","hueRef","percent","pointerTop","hsva","toHsv","emitChangeEvent","param","saturationRef","containerHeight","yOffset","pageYOffset","saturation","bright","val","_hex","toHex8String","toRgb","RECENT_COLORS","presetColorConfig","startColor","endColor","_startColor","_endColor","rStep","gStep","bStep","gradientColorArr","Alpha","Hue","Saturation","EditableInput","rgbaString","colorString","updateRecentColorsCache","maxLength","recentColorsCache","localStorage","getItem","setItem","targetRef","maskRef","cssText","colorBlockRef","contains","toFixed","handleMouseleave","tColor","_component_Spin","FileInput","CheckboxButton","CheckboxButtonGroup","ColorPicker","FullscreenSpin","_component_MenuContent","removeContextmenu","menus","handleClickMenuItem","_component_menu_content","menu","MenuContent","MENU_WIDTH","MENU_HEIGHT","DIVIDER_HEIGHT","PADDING","menuCount","dividerCount","menuWidth","menuHeight","screenWidth","screenHeight","CTX_CONTEXTMENU_HANDLER","binding","vm","Contextmenu","ContextmenuDirective","mounted","unmounted","CTX_CLICK_OUTSIDE_HANDLER","clickListener","composedPath","isClickOutside","ClickOutsideDirective","directive","App","Option","OptGroup","Button","TextArea","Item","use","mount"],"mappings":"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oCCAA,W,oCCAA,W,sICAA,W,oCCAA,W,+JCAA,W,oCCAA,Y,oCCAA,W,2DCAA,W,6DCAA,W,oCCAA,W,2DCAA,W,6DCAA,W,yGCAA,W,oFCAA,W,yDCAA,W,oCCAA,W,+GCAA,W,6GCAA,W,yDCAA,W,6DCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,kCCAA,W,kCCAA,W,kCCAA,W,6JCAA,W,oCCAA,W,6DCAA,W,6DCAA,W,sFCAA,W,kCCAA,W,kCCAA,W,yDCAA,W,kCCAA,W,yDCAA,W,yDCAA,W,yDCAA,W,gFCAA,W,kCCAA,W,kCCAA,W,yDCAA,W,gFCAA,W,yDCAA,W,kCCAA,W,gFCAA,W,kCCAA,W,yDCAA,W,yDCAA,W,kCCAA,W,uGCAA,W,uGCAA,W,kCCAA,W,yDCAA,W,yDCAA,W,kCCAA,W,uGCAA,W,kCCAA,W,ugBCEM,SAAUyC,EAAOC,EAAUC,EAAYC,EAAYC,EAAYC,EAAWC,GAC9E,IAAMC,EAAoB,8BAAkB,UACtCC,EAAoB,8BAAkB,UACtCC,EAAoB,8BAAkB,UAE5C,OAAQR,EAAKS,WACR,yBAAc,yBAAaH,EAAmB,CAAEjB,IAAK,KACrDW,EAAKU,MACH,yBAAc,yBAAaH,EAAmB,CAAElB,IAAK,MACrD,yBAAc,yBAAamB,EAAmB,CAAEnB,IAAK,K,ICX5CsB,E,mDAAlB,SAAkBA,GAChB,qBACA,gCACA,wBACA,8BACA,gCACA,sCACA,qCAPF,CAAkBA,MAAa,KCAxB,ICGWC,EAOAC,EAUAC,EAOAC,EAWAC,ECtCAC,EFALC,EAAY,CACvB,CAAEC,MAAO,QAASpC,MAAO,SACzB,CAAEoC,MAAO,OAAQpC,MAAO,mBACxB,CAAEoC,MAAO,KAAMpC,MAAO,UACtB,CAAEoC,MAAO,KAAMpC,MAAO,UACtB,CAAEoC,MAAO,KAAMpC,MAAO,SACtB,CAAEoC,MAAO,MAAOpC,MAAO,WACvB,CAAEoC,MAAO,KAAMpC,MAAO,YACtB,CAAEoC,MAAO,KAAMpC,MAAO,eACtB,CAAEoC,MAAO,OAAQpC,MAAO,WACxB,CAAEoC,MAAO,OAAQpC,MAAO,WACxB,CA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S,CAAC,IAAK,KACfC,KAAM,yDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,yDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,+CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,yCAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uCAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6BAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,4CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,iDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,wDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,iEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,oHAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,0DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,sEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,kEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,+CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,oHAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,4DACNuU,YAAa5I,GAAsBuI,GAErC,CACEnU,QAAS,CAAC,IAAK,KACfC,KAAM,uEACNuU,YAAa5I,GAAsByI,WAErC,CACErU,QAAS,CAAC,IAAK,KACfC,KAAM,iEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,mHACNuU,YAAa5I,GAAsB0I,MAErC,CACEtU,QAAS,CAAC,IAAK,KACfC,KAAM,sHAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gEACNuU,YAAa5I,GAAsBmI,SAErC,CACE/T,QAAS,CAAC,IAAK,KACfC,KAAM,mIACNuU,YAAa5I,GAAsBsI,eAErC,CACElU,QAAS,CAAC,IAAK,KACfC,KAAM,qEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,2EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,2HAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,2DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,+JAKZ,CACEpG,KAAM,KACNkS,SAAU,CACR,CACE/L,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6EAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qGAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qGAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,qOAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,uFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,sFAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,8GAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,8GAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,8DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,gEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,4CAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,iDAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6DAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,kEAER,CACED,QAAS,CAAC,IAAK,KACfC,KAAM,6FAER,CACED,QAAS,CAAC,I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","file":"js/app.47a45865.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseLatexElement.vue?vue&type=style&index=0&id=4118f3dd&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MultiSelectOperate.vue?vue&type=style&index=0&id=55c8df22&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseView.vue?vue&type=style&index=0&id=2ed6935e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenVideoElement.vue?vue&type=style&index=0&id=0ef8b6c0&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseShapeElement.vue?vue&type=style&index=0&id=2bad8b7f&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=4ae7c9aa&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LineStylePanel.vue?vue&type=style&index=0&id=cbc4d7fa&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementOutline.vue?vue&type=style&index=0&id=34c0a0a8&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ViewportBackground.vue?vue&type=style&index=0&id=4d0018d8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementFlip.vue?vue&type=style&index=0&id=7bd50f1a&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=5e62abba&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=6abdbdd6&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=3168526a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=426704b7&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./HotkeyDoc.vue?vue&type=style&index=0&id=b6d79f64&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FullscreenSpin.vue?vue&type=style&index=0&id=5e77feb8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AudioPlayer.vue?vue&type=style&index=0&id=5cabbb47&scoped=true&lang=scss\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementShadow.vue?vue&type=style&index=0&id=73616cd6&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ColorButton.vue?vue&type=style&index=0&id=dffe32bc&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=ec4c62e4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=66dd4448&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseImageElement.vue?vue&type=style&index=0&id=0b1f9460&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=84601b0a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LineElementOperate.vue?vue&type=style&index=0&id=c0a272d2&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=603a705d&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseTableElement.vue?vue&type=style&index=0&id=3bbcc75c&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseVideoElement.vue?vue&type=style&index=0&id=1c831c75&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TextStylePanel.vue?vue&type=style&index=0&id=f5f21464&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImagePolygonOutline.vue?vue&type=style&index=0&id=21ca95cc&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SymbolPanel.vue?vue&type=style&index=0&id=6b8c5938&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageStylePanel.vue?vue&type=style&index=0&id=64e5a614&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageElementOperate.vue?vue&type=style&index=0&id=db6d5ba6&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=7ed67bb3&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageClipHandler.vue?vue&type=style&index=0&id=e9da1d6a&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ChartDataEditor.vue?vue&type=style&index=0&id=9a62f784&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SlideAnimationPanel.vue?vue&type=style&index=0&id=251ceb05&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenElement.vue?vue&type=style&index=0&id=360fef5f&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./WritingBoard.vue?vue&type=style&index=0&id=3dfd4579&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseLineElement.vue?vue&type=style&index=0&id=4032440c&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageRectOutline.vue?vue&type=style&index=0&id=48a14431&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ShapeStylePanel.vue?vue&type=style&index=0&id=0e201fca&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ResizeHandler.vue?vue&type=style&index=0&id=c9559332&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementCreateSelection.vue?vue&type=style&index=0&id=15b60d90&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MediaInput.vue?vue&type=style&index=0&id=ec37f828&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CheckboxButton.vue?vue&type=style&index=0&id=4074d5c2&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ProsemirrorEditor.vue?vue&type=style&index=0&id=481bb541&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Chart.vue?vue&type=style&index=1&id=79ce410e&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-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--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./StaticTable.vue?vue&type=style&index=0&id=74b60291&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./EditableInput.vue?vue&type=style&index=0&id=20bfe6b0&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=18f794c8&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Chart.vue?vue&type=style&index=0&id=79ce410e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BorderLine.vue?vue&type=style&index=0&id=1430bedc&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./EditableTable.vue?vue&type=style&index=0&id=c0c56b6e&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenAudioElement.vue?vue&type=style&index=0&id=1adba489&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ShapePool.vue?vue&type=style&index=0&id=7fdb328c&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=025539cf&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=e716fb74&scoped=true&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=bd9c8dc2&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MouseSelection.vue?vue&type=style&index=0&id=25d4b5f8&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenSlide.vue?vue&type=style&index=0&id=30708559&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./PresenterView.vue?vue&type=style&index=0&id=4887c6d4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=c09631b6&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ImageEllipseOutline.vue?vue&type=style&index=0&id=692bbda6&lang=scss&scoped=true\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./App.vue?vue&type=style&index=0&id=039e9a08&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ExportImgDialog.vue?vue&type=style&index=0&id=4aeb44b4&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=129e1afa&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=83da70aa&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FileInput.vue?vue&type=style&index=0&id=0a87e9c4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementOpacity.vue?vue&type=style&index=0&id=f62a02b6&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./WritingBoardTool.vue?vue&type=style&index=0&id=19b10edd&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LinkHandler.vue?vue&type=style&index=0&id=2b77dbb0&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementAnimationPanel.vue?vue&type=style&index=0&id=696c81e2&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./VideoStylePanel.vue?vue&type=style&index=0&id=61bcaa2a&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseChartElement.vue?vue&type=style&index=0&id=60d9ae43&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AlignmentLine.vue?vue&type=style&index=0&id=62c9018e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=fe9bcf9c&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MultiPositionPanel.vue?vue&type=style&index=0&id=2e982d59&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ScreenSlideList.vue?vue&type=style&index=0&id=056764ac&lang=scss&scoped=true\"","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Screen = _resolveComponent(\"Screen\")!\n const _component_Editor = _resolveComponent(\"Editor\")!\n const _component_Mobile = _resolveComponent(\"Mobile\")!\n\n return (_ctx.screening)\n ? (_openBlock(), _createBlock(_component_Screen, { key: 0 }))\n : (_ctx.isPC)\n ? (_openBlock(), _createBlock(_component_Editor, { key: 1 }))\n : (_openBlock(), _createBlock(_component_Mobile, { key: 2 }))\n}","export const enum ToolbarStates {\n SYMBOL = 'symbol',\n EL_ANIMATION = 'elAnimation',\n EL_STYLE = 'elStyle',\n EL_POSITION = 'elPosition',\n SLIDE_DESIGN = 'slideDesign',\n SLIDE_ANIMATION = 'slideAnimation',\n MULTI_POSITION = 'multiPosition',\n}","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]","import { ShapePoolItem } from '@/configs/shapes'\r\nimport { LinePoolItem } from '@/configs/lines'\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 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 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 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 const enum OperateLineHandlers {\r\n START = 'start',\r\n END = 'end',\r\n C = 'ctrl',\r\n C1 = 'ctrl1',\r\n C2 = 'ctrl2',\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 ESC = 'ESCAPE',\n}\n\nexport const HOTKEY_DOC = [\n {\n type: '通用',\n children: [\n { label: '剪切', value: 'Ctrl + X' },\n { label: '复制', value: 'Ctrl + C' },\n { label: '粘贴', value: 'Ctrl + V' },\n { label: '快速复制粘贴', value: 'Ctrl + D' },\n { label: '全选', value: 'Ctrl + A' },\n { label: '撤销', value: 'Ctrl + Z' },\n { label: '恢复', value: 'Ctrl + Y' },\n { label: '删除', value: 'Delete / Backspace' },\n { label: '多选', value: '按住 Ctrl 或 Shift' },\n ],\n },\n {\n type: '幻灯片放映',\n children: [\n { label: '开始放映幻灯片', value: 'Ctrl + F' },\n { label: '切换上一页', value: '↑ / ←' },\n { label: '切换下一页', value: '↓ / → / Enter / Space' },\n { label: '退出放映', value: 'ESC' },\n ],\n },\n {\n type: '幻灯片编辑',\n children: [\n { label: '新建幻灯片', value: 'Enter' },\n { label: '缩放画布', value: 'Ctrl + 鼠标滚动' },\n { label: '放大画布', value: 'Ctrl + =' },\n { label: '缩小画布', value: 'Ctrl + -' },\n { label: '缩放画布到合适大小', value: 'Ctrl + 0' },\n { label: '编辑上一页', value: '↑ / ← / 鼠标上滚' },\n { label: '编辑下一页', value: '↓ / → / 鼠标下滚' },\n ],\n },\n {\n type: '元素操作',\n children: [\n { label: '移动', value: '↑ / ← / ↓ / →' },\n { label: '锁定', value: 'Ctrl + L' },\n { label: '组合', value: 'Ctrl + G' },\n { label: '取消组合', value: 'Ctrl + Shift + G' },\n { label: '置顶层', value: 'Alt + F' },\n { label: '置底层', value: 'Alt + B' },\n { label: '锁定宽高比例', value: '按住 Ctrl 或 Shift' },\n { label: '创建水平 / 垂直线条', value: '按住 Ctrl 或 Shift' },\n { label: '切换焦点元素', value: 'Tab' },\n { label: '确认图片裁剪', value: 'Enter' },\n ],\n },\n {\n type: '表格编辑',\n children: [\n { label: '聚焦到下一个单元格', value: 'Tab' },\n { label: '在上方插入一行', value: 'Ctrl + ↑' },\n { label: '在下方插入一行', value: 'Ctrl + ↓' },\n { label: '在左侧插入一列', value: 'Ctrl + ←' },\n { label: '在右侧插入一列', value: 'Ctrl + →' },\n ],\n },\n {\n type: '图表数据编辑',\n children: [\n { label: '聚焦到下一行', value: 'Enter' },\n ],\n },\n {\n type: '文本编辑',\n children: [\n { label: '加粗', value: 'Ctrl + B' },\n { label: '斜体', value: 'Ctrl + I' },\n { label: '下划线', value: 'Ctrl + U' },\n { label: '删除线', value: 'Ctrl + D' },\n ],\n },\n]","import { Node, NodeType, ResolvedPos, Mark, MarkType } from 'prosemirror-model'\nimport { EditorState, Selection } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\nimport { selectAll } from 'prosemirror-commands'\n\nexport const autoSelectAll = (view: EditorView) => {\n const { empty } = view.state.selection\n if (empty) selectAll(view.state, view.dispatch)\n}\n\nexport const addMark = (editorView: EditorView, mark: Mark, selection?: { from: number; to: number; }) => {\n if (selection) {\n editorView.dispatch(editorView.state.tr.addMark(selection.from, selection.to, mark))\n }\n else {\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.addMark($from.pos, $to.pos, mark))\n }\n}\n\nexport const findNodesWithSameMark = (doc: Node, from: number, to: number, markType: MarkType) => {\n let ii = from\n const finder = (mark: Mark) => mark.type === markType\n let firstMark = null\n let fromNode = null\n let toNode = null\n\n while (ii <= to) {\n const node = doc.nodeAt(ii)\n if (!node || !node.marks) return null\n\n const mark = node.marks.find(finder)\n if (!mark) return null\n\n if (firstMark && mark !== firstMark) return null\n\n fromNode = fromNode || node\n firstMark = firstMark || mark\n toNode = node\n ii++\n }\n\n let fromPos = from\n let toPos = to\n\n let jj = 0\n ii = from - 1\n while (ii > jj) {\n const node = doc.nodeAt(ii)\n const mark = node && node.marks.find(finder)\n if (!mark || mark !== firstMark) break\n fromPos = ii\n fromNode = node\n ii--\n }\n\n ii = to + 1\n jj = doc.nodeSize - 2\n while (ii < jj) {\n const node = doc.nodeAt(ii)\n const mark = node && node.marks.find(finder)\n if (!mark || mark !== firstMark) break\n toPos = ii\n toNode = node\n ii++\n }\n\n return {\n mark: firstMark,\n from: {\n node: fromNode,\n pos: fromPos,\n },\n to: {\n node: toNode,\n pos: toPos,\n },\n }\n}\n\nconst equalNodeType = (nodeType: NodeType, node: Node) => {\n return Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1 || node.type === nodeType\n}\n\nconst findParentNodeClosestToPos = ($pos: ResolvedPos, predicate: (node: Node) => boolean) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i)\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node,\n }\n }\n }\n}\n\nexport const findParentNode = (predicate: (node: Node) => boolean) => {\n return (_ref: Selection) => findParentNodeClosestToPos(_ref.$from, predicate)\n}\n\nexport const findParentNodeOfType = (nodeType: NodeType) => {\n return (selection: Selection) => {\n return findParentNode((node: Node) => {\n return equalNodeType(nodeType, node)\n })(selection)\n }\n}\n\nexport const isActiveOfParentNodeType = (nodeType: string, state: EditorState) => {\n const node = state.schema.nodes[nodeType]\n return !!findParentNodeOfType(node)(state.selection)\n}\n\nexport const getMarkAttrs = (view: EditorView) => {\n const { selection, doc } = view.state\n const { from } = selection\n\n let node = doc.nodeAt(from) || doc.nodeAt(from - 1)\n if (node?.lastChild) node = node.lastChild\n\n return node?.marks || []\n}\n\nexport const getAttrValue = (marks: Mark[], markType: string, attr: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType && mark.attrs[attr]) return mark.attrs[attr]\n }\n return null\n}\n\nexport const isActiveMark = (marks: Mark[], markType: string) => {\n for (const mark of marks) {\n if (mark.type.name === markType) return true\n }\n return false\n}\n\nexport const markActive = (state: EditorState, type: MarkType) => {\n const { from, $from, to, empty } = state.selection\n if (empty) return type.isInSet(state.storedMarks || $from.marks())\n return state.doc.rangeHasMark(from, to, type)\n}\n\nexport const getAttrValueInSelection = (view: EditorView, attr: string) => {\n const { selection, doc } = view.state\n const { from, to } = selection\n\n let keepChecking = true\n let value = ''\n doc.nodesBetween(from, to, node => {\n if (keepChecking && node.attrs[attr]) {\n keepChecking = false\n value = node.attrs[attr]\n }\n return keepChecking\n })\n return value\n}\n\ninterface DefaultAttrs {\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: string;\n}\nconst _defaultAttrs: DefaultAttrs = {\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n align: 'left',\n}\nexport const getTextAttrs = (view: EditorView, defaultAttrs: DefaultAttrs = {}) => {\n defaultAttrs = { ..._defaultAttrs, ...defaultAttrs }\n\n const marks = getMarkAttrs(view)\n\n const isBold = isActiveMark(marks, 'strong')\n const isEm = isActiveMark(marks, 'em')\n const isUnderline = isActiveMark(marks, 'underline')\n const isStrikethrough = isActiveMark(marks, 'strikethrough')\n const isSuperscript = isActiveMark(marks, 'superscript')\n const isSubscript = isActiveMark(marks, 'subscript')\n const isCode = isActiveMark(marks, 'code')\n const color = getAttrValue(marks, 'forecolor', 'color') || defaultAttrs.color\n const backcolor = getAttrValue(marks, 'backcolor', 'backcolor') || defaultAttrs.backcolor\n const fontsize = getAttrValue(marks, 'fontsize', 'fontsize') || defaultAttrs.fontsize\n const fontname = getAttrValue(marks, 'fontname', 'fontname') || defaultAttrs.fontname\n const link = getAttrValue(marks, 'link', 'href') || ''\n const align = getAttrValueInSelection(view, 'align') || defaultAttrs.align\n const isBulletList = isActiveOfParentNodeType('bullet_list', view.state)\n const isOrderedList = isActiveOfParentNodeType('ordered_list', view.state)\n const isBlockquote = isActiveOfParentNodeType('blockquote', view.state)\n\n return {\n bold: isBold,\n em: isEm,\n underline: isUnderline,\n strikethrough: isStrikethrough,\n superscript: isSuperscript,\n subscript: isSubscript,\n code: isCode,\n color: color,\n backcolor: backcolor,\n fontsize: fontsize,\n fontname: fontname,\n link: link,\n align: align,\n bulletList: isBulletList,\n orderedList: isOrderedList,\n blockquote: isBlockquote,\n }\n}\n\nexport type TextAttrs = ReturnType\n\nexport const defaultRichTextAttrs: TextAttrs = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n superscript: false,\n subscript: false,\n code: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '20px',\n fontname: '微软雅黑',\n link: '',\n align: 'left',\n bulletList: false,\n orderedList: false,\n blockquote: false,\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 { 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, 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, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '#5b9bd5',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'idn7Mx',\n left: 355,\n top: 65.25,\n width: 585,\n height: 188,\n lineHeight: 1.2,\n content: '

PPTIST

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

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

',\n rotate: 0,\n defaultFontName: 'Microsoft Yahei',\n defaultColor: '#333'\n },\n {\n type: 'line',\n id: 'FnpZs4',\n left: 361,\n top: 238,\n start: [0, 0],\n end: [549, 0],\n points: ['', ''],\n color: '#5b9bd5',\n style: 'solid',\n width: 2,\n },\n ],\n background: {\n type: 'solid',\n color: '#ffffff',\n },\n }\n]","import { SlideTheme } from '@/types/slides'\n\nexport const theme: SlideTheme = {\n themeColor: '#5b9bd5',\n fontColor: '#333',\n fontName: 'Microsoft Yahei',\n backgroundColor: '#fff',\n}","/* eslint-disable max-lines */\n\nimport { Slide } from '@/types/slides'\n\nexport const layouts: Slide[] = [\n {\n id: 'template',\n elements: [\n {\n type: 'shape',\n id: '4cbRxp',\n left: 0,\n top: 200,\n width: 546,\n height: 362.5,\n viewBox: [200, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n opacity: 0.7,\n rotate: 0\n },\n {\n type: 'shape',\n id: 'ookHrf',\n left: 0,\n top: 0,\n width: 300,\n height: 320,\n viewBox: [200, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z',\n fill: '{{themeColor}}',\n fixedRatio: false,\n flipV: true,\n rotate: 0\n },\n {\n type: 'text',\n id: 'AkIh3E',\n left: 355,\n top: 95.11111111111111,\n width: 585,\n height: 116,\n lineHeight: 1.2,\n content: '

输入标题

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

请在此处输入副标题

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

在此处添加标题

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

在此处添加副标题

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

感谢观看

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

01

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

在此处输入标题

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

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

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

1

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

4

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

3

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

2

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

01

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

在此处添加标题

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

3.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

4.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

请在此处输入标题

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

请在此处输入内容1

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

请在此处输入内容2

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

请在此处输入内容3

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

请在此处输入内容4

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

1

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

在此输入内容

在此输入内容

在此输入内容

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

2

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

在此输入内容

在此输入内容

在此输入内容

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

3

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

在此输入内容

在此输入内容

在此输入内容

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

4

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

在此输入内容

在此输入内容

在此输入内容

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

5

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

在此输入内容

在此输入内容

在此输入内容

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

6

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

在此输入内容

在此输入内容

在此输入内容

',\n rotate: 0,\n defaultFontName: '{{fontName}}',\n defaultColor: '{{fontColor}}',\n fill: '{{subColor}}'\n }\n ],\n background: {\n type: 'solid',\n color: '{{backgroundColor}}',\n },\n },\n]","import { defineStore } from 'pinia'\nimport tinycolor from 'tinycolor2'\nimport { omit } from 'lodash'\nimport { Slide, SlideTheme, PPTElement } from '@/types/slides'\nimport { slides } from '@/mocks/slides'\nimport { theme } from '@/mocks/theme'\nimport { layouts } from '@/mocks/layout'\n\ninterface RemoveElementPropData {\n id: string;\n propName: string | string[];\n}\n\ninterface UpdateElementData {\n id: string | string[];\n props: Partial;\n}\n\nexport interface SlidesState {\n theme: SlideTheme;\n slides: Slide[];\n slideIndex: number;\n viewportRatio: number;\n}\n\nexport const useSlidesStore = defineStore('slides', {\n state: (): SlidesState => ({\n theme: theme, // 主题样式\n slides: slides, // 幻灯片页面数据\n slideIndex: 0, // 当前页面索引\n viewportRatio: 0.5625, // 可是区域比例,默认16:9\n }),\n\n getters: {\n currentSlide(state) {\n return state.slides[state.slideIndex]\n },\n \n currentSlideAnimations(state) {\n const currentSlide = state.slides[state.slideIndex]\n if (!currentSlide) return null\n const animations = currentSlide.animations\n if (!animations) return null\n \n const els = currentSlide.elements\n const elIds = els.map(el => el.id)\n return animations.filter(animation => elIds.includes(animation.elId))\n },\n \n layouts(state) {\n const {\n themeColor,\n fontColor,\n fontName,\n backgroundColor,\n } = state.theme\n \n const subColor = tinycolor(fontColor).isDark() ? 'rgba(230, 230, 230, 0.5)' : 'rgba(180, 180, 180, 0.5)'\n \n const layoutsString = JSON.stringify(layouts)\n .replaceAll('{{themeColor}}', themeColor)\n .replaceAll('{{fontColor}}', fontColor)\n .replaceAll('{{fontName}}', fontName)\n .replaceAll('{{backgroundColor}}', backgroundColor)\n .replaceAll('{{subColor}}', subColor)\n \n return JSON.parse(layoutsString)\n },\n },\n\n actions: {\n setTheme(themeProps: Partial) {\n this.theme = { ...this.theme, ...themeProps }\n },\n \n setViewportRatio(viewportRatio: number) {\n this.viewportRatio = viewportRatio\n },\n \n setSlides(slides: Slide[]) {\n this.slides = slides\n },\n \n addSlide(slide: Slide | Slide[]) {\n const slides = Array.isArray(slide) ? slide : [slide]\n const addIndex = this.slideIndex + 1\n this.slides.splice(addIndex, 0, ...slides)\n this.slideIndex = addIndex\n },\n \n updateSlide(props: Partial) {\n const slideIndex = this.slideIndex\n this.slides[slideIndex] = { ...this.slides[slideIndex], ...props }\n },\n \n deleteSlide(slideId: string | string[]) {\n const slidesId = Array.isArray(slideId) ? slideId : [slideId]\n \n const deleteSlidesIndex = []\n for (let i = 0; i < slidesId.length; i++) {\n const index = this.slides.findIndex(item => item.id === slidesId[i])\n deleteSlidesIndex.push(index)\n }\n let newIndex = Math.min(...deleteSlidesIndex)\n \n const maxIndex = this.slides.length - slidesId.length - 1\n if (newIndex > maxIndex) newIndex = maxIndex\n \n this.slideIndex = newIndex\n this.slides = this.slides.filter(item => !slidesId.includes(item.id))\n },\n \n updateSlideIndex(index: number) {\n this.slideIndex = index\n },\n \n addElement(element: PPTElement | PPTElement[]) {\n const elements = Array.isArray(element) ? element : [element]\n const currentSlideEls = this.slides[this.slideIndex].elements\n const newEls = [...currentSlideEls, ...elements]\n this.slides[this.slideIndex].elements = newEls\n },\n \n updateElement(data: UpdateElementData) {\n const { id, props } = data\n const elIdList = typeof id === 'string' ? [id] : id\n \n const slideIndex = this.slideIndex\n const slide = this.slides[slideIndex]\n const elements = slide.elements.map(el => {\n return elIdList.includes(el.id) ? { ...el, ...props } : el\n })\n this.slides[slideIndex].elements = (elements as PPTElement[])\n },\n \n removeElementProps(data: RemoveElementPropData) {\n const { id, propName } = data\n const propsNames = typeof propName === 'string' ? [propName] : propName\n \n const slideIndex = this.slideIndex\n const slide = this.slides[slideIndex]\n const elements = slide.elements.map(el => {\n return el.id === id ? omit(el, propsNames) : el\n })\n this.slides[slideIndex].elements = (elements as PPTElement[])\n },\n },\n})","import { defineStore } from 'pinia'\nimport { CreatingElement } from '@/types/edit'\nimport { ToolbarStates } from '@/types/toolbar'\nimport { SYS_FONTS } from '@/configs/font'\nimport { TextAttrs, defaultRichTextAttrs } from '@/utils/prosemirror/utils'\nimport { isSupportFont } from '@/utils/font'\n\nimport { useSlidesStore } from './slides'\n\nexport interface MainState {\n activeElementIdList: string[];\n handleElementId: string;\n activeGroupElementId: string;\n canvasPercentage: number;\n canvasScale: number;\n thumbnailsFocus: boolean;\n editorAreaFocus: boolean;\n disableHotkeys: boolean;\n showGridLines: boolean;\n creatingElement: CreatingElement | null;\n availableFonts: typeof SYS_FONTS;\n toolbarState: ToolbarStates;\n clipingImageElementId: string;\n isScaling: boolean;\n richTextAttrs: TextAttrs;\n selectedTableCells: string[];\n editingShapeElementId: string;\n selectedSlidesIndex: number[];\n}\n\nexport const useMainStore = defineStore('main', {\n state: (): MainState => ({\n activeElementIdList: [], // 被选中的元素ID集合,包含 handleElementId\n handleElementId: '', // 正在操作的元素ID\n activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID\n canvasPercentage: 90, // 画布可视区域百分比\n canvasScale: 1, // 画布缩放比例(基于宽度1000px)\n thumbnailsFocus: false, // 左侧导航缩略图区域聚焦\n editorAreaFocus: false, // 编辑区域聚焦\n disableHotkeys: false, // 禁用快捷键\n showGridLines: false, // 显示网格线\n creatingElement: null, // 正在插入的元素信息,需要通过绘制插入的元素(文字、形状、线条)\n availableFonts: SYS_FONTS, // 当前环境可用字体\n toolbarState: ToolbarStates.SLIDE_DESIGN, // 右侧工具栏状态\n clipingImageElementId: '', // 当前正在裁剪的图片ID \n richTextAttrs: defaultRichTextAttrs, // 富文本状态\n selectedTableCells: [], // 选中的表格单元格\n isScaling: false, // 正在进行元素缩放\n editingShapeElementId: '', // 当前正处在编辑文字状态的形状ID \n selectedSlidesIndex: [], // 当前被选中的页面索引集合\n }),\n\n getters: {\n activeElementList(state) {\n const slidesStore = useSlidesStore()\n const currentSlide = slidesStore.currentSlide\n if (!currentSlide || !currentSlide.elements) return []\n return currentSlide.elements.filter(element => state.activeElementIdList.includes(element.id))\n },\n \n handleElement(state) {\n const slidesStore = useSlidesStore()\n const currentSlide = slidesStore.currentSlide\n if (!currentSlide || !currentSlide.elements) return null\n return currentSlide.elements.find(element => state.handleElementId === element.id) || null\n },\n },\n\n actions: {\n setActiveElementIdList(activeElementIdList: string[]) {\n if (activeElementIdList.length === 1) this.handleElementId = activeElementIdList[0]\n else this.handleElementId = ''\n \n this.activeElementIdList = activeElementIdList\n },\n \n setHandleElementId(handleElementId: string) {\n this.handleElementId = handleElementId\n },\n \n setActiveGroupElementId(activeGroupElementId: string) {\n this.activeGroupElementId = activeGroupElementId\n },\n \n setCanvasPercentage(percentage: number) {\n this.canvasPercentage = percentage\n },\n \n setCanvasScale(scale: number) {\n this.canvasScale = scale\n },\n \n setThumbnailsFocus(isFocus: boolean) {\n this.thumbnailsFocus = isFocus\n },\n \n setEditorareaFocus(isFocus: boolean) {\n this.editorAreaFocus = isFocus\n },\n \n setDisableHotkeysState(disable: boolean) {\n this.disableHotkeys = disable\n },\n \n setGridLinesState(show: boolean) {\n this.showGridLines = show\n },\n \n setCreatingElement(element: CreatingElement | null) {\n this.creatingElement = element\n },\n \n setAvailableFonts() {\n this.availableFonts = SYS_FONTS.filter(font => isSupportFont(font.value))\n },\n \n setToolbarState(toolbarState: ToolbarStates) {\n this.toolbarState = toolbarState\n },\n \n setClipingImageElementId(elId: string) {\n this.clipingImageElementId = elId\n },\n \n setRichtextAttrs(attrs: TextAttrs) {\n this.richTextAttrs = attrs\n },\n \n setSelectedTableCells(cells: string[]) {\n this.selectedTableCells = cells\n },\n \n setScalingState(isScaling: boolean) {\n this.isScaling = isScaling\n },\n \n setEditingShapeElementId(ellId: string) {\n this.editingShapeElementId = ellId\n },\n \n updateSelectedSlidesIndex(selectedSlidesIndex: number[]) {\n this.selectedSlidesIndex = selectedSlidesIndex\n },\n },\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 { defineStore } from 'pinia'\nimport { IndexableTypeArray } from 'dexie'\nimport { snapshotDB, Snapshot } from '@/utils/database'\n\nimport { useSlidesStore } from './slides'\nimport { useMainStore } from './main'\n\nexport interface ScreenState {\n snapshotCursor: number;\n snapshotLength: number;\n}\n\nexport const useSnapshotStore = defineStore('snapshot', {\n state: (): ScreenState => ({\n snapshotCursor: -1, // 历史快照指针\n snapshotLength: 0, // 历史快照长度\n }),\n\n getters: {\n canUndo(state) {\n return state.snapshotCursor > 0\n },\n canRedo(state) {\n return state.snapshotCursor < state.snapshotLength - 1\n },\n },\n\n actions: {\n setSnapshotCursor(cursor: number) {\n this.snapshotCursor = cursor\n },\n setSnapshotLength(length: number) {\n this.snapshotLength = length\n },\n\n async initSnapshotDatabase() {\n const slidesStore = useSlidesStore()\n\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: slidesStore.slideIndex,\n slides: slidesStore.slides,\n }\n await snapshotDB.snapshots.add(newFirstSnapshot)\n this.setSnapshotCursor(0)\n this.setSnapshotLength(1)\n },\n \n async addSnapshot() {\n const slidesStore = useSlidesStore()\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 (this.snapshotCursor >= 0 && this.snapshotCursor < allKeys.length - 1) {\n needDeleteKeys = allKeys.slice(this.snapshotCursor + 1)\n }\n \n // 添加新快照\n const snapshot = {\n index: slidesStore.slideIndex,\n slides: slidesStore.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: slidesStore.slideIndex })\n }\n \n await snapshotDB.snapshots.bulkDelete(needDeleteKeys)\n \n this.setSnapshotCursor(snapshotLength - 1)\n this.setSnapshotLength(snapshotLength)\n },\n \n async unDo() {\n if (this.snapshotCursor <= 0) return\n\n const slidesStore = useSlidesStore()\n const mainStore = useMainStore()\n \n const snapshotCursor = this.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 slidesStore.setSlides(slides)\n slidesStore.updateSlideIndex(slideIndex)\n this.setSnapshotCursor(snapshotCursor)\n mainStore.setActiveElementIdList([])\n },\n \n async reDo() {\n if (this.snapshotCursor >= this.snapshotLength - 1) return\n\n const slidesStore = useSlidesStore()\n const mainStore = useMainStore()\n \n const snapshotCursor = this.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 slidesStore.setSlides(slides)\n slidesStore.updateSlideIndex(slideIndex)\n this.setSnapshotCursor(snapshotCursor)\n mainStore.setActiveElementIdList([])\n },\n },\n})","import { defineStore } from 'pinia'\n\nexport interface KeyboardState {\n ctrlKeyState: boolean;\n shiftKeyState: boolean;\n}\n\nexport const useKeyboardStore = defineStore('keyboard', {\n state: (): KeyboardState => ({\n ctrlKeyState: false, // ctrl键按下状态\n shiftKeyState: false, // shift键按下状态\n }),\n\n getters: {\n ctrlOrShiftKeyActive(state) {\n return state.ctrlKeyState || state.shiftKeyState\n },\n },\n\n actions: {\n setCtrlKeyState(active: boolean) {\n this.ctrlKeyState = active\n },\n setShiftKeyState(active: boolean) {\n this.shiftKeyState = active\n },\n },\n})","import { defineStore } from 'pinia'\n\nexport interface ScreenState {\n screening: boolean;\n}\n\nexport const useScreenStore = defineStore('screen', {\n state: (): ScreenState => ({\n screening: false, // 是否进入放映状态\n }),\n\n actions: {\n setScreening(screening: boolean) {\n this.screening = screening\n },\n },\n})","import { padStart } from 'lodash'\n\n/**\n * 生成随机码\n * @param len 随机码长度\n */\nexport const createRandomCode = (len = 8) => {\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}\n\n/**\n * 判断设备\n */\nexport const isPC = () => {\n return !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|Mobile|BlackBerry|Symbian|Windows Phone)/i)\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-55178b6a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"pptist-editor\" }\nconst _hoisted_2 = { class: \"layout-content\" }\nconst _hoisted_3 = { class: \"layout-content-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_EditorHeader = _resolveComponent(\"EditorHeader\")!\n const _component_Thumbnails = _resolveComponent(\"Thumbnails\")!\n const _component_CanvasTool = _resolveComponent(\"CanvasTool\")!\n const _component_Canvas = _resolveComponent(\"Canvas\")!\n const _component_Remark = _resolveComponent(\"Remark\")!\n const _component_Toolbar = _resolveComponent(\"Toolbar\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_EditorHeader, { class: \"layout-header\" }),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Thumbnails, { class: \"layout-content-left\" }),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_CanvasTool, { class: \"center-top\" }),\n _createVNode(_component_Canvas, {\n class: \"center-body\",\n style: _normalizeStyle({ height: `calc(100% - ${_ctx.remarkHeight + 40}px)` })\n }, null, 8, [\"style\"]),\n _createVNode(_component_Remark, {\n class: \"center-bottom\",\n height: _ctx.remarkHeight,\n \"onUpdate:height\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.remarkHeight) = $event)),\n style: _normalizeStyle({ height: `${_ctx.remarkHeight}px` })\n }, null, 8, [\"height\", \"style\"])\n ]),\n _createVNode(_component_Toolbar, { class: \"layout-content-right\" })\n ])\n ]))\n}","import { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'\n\nexport const enum ShapePathFormulasKeys {\n ROUND_RECT = 'roundRect',\n ROUND_RECT_DIAGONAL = 'roundRectDiagonal',\n ROUND_RECT_SINGLE = 'roundRectSingle',\n ROUND_RECT_SAMESIDE = 'roundRectSameSide',\n CUT_RECT_DIAGONAL = 'cutRectDiagonal',\n CUT_RECT_SINGLE = 'cutRectSingle',\n CUT_RECT_SAMESIDE = 'cutRectSameSide',\n MESSAGE = 'message',\n ROUND_MESSAGE = 'roundMessage',\n L = 'L',\n RING_RECT = 'ringRect',\n PLUS = 'plus',\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 LATEX = 'latex',\n VIDEO = 'video',\n AUDIO = 'audio',\n}\n\n/**\n * 元素阴影\n * \n * h: 水平偏移量\n * \n * v: 垂直偏移量\n * \n * blur: 模糊程度\n * \n * color: 阴影颜色\n */\nexport interface PPTElementShadow {\n h: number;\n v: number;\n blur: number;\n color: string;\n}\n\n/**\n * 元素边框\n * \n * style?: 边框样式(实线或虚线)\n * \n * width?: 边框宽度\n * \n * color?: 边框颜色\n */\nexport interface PPTElementOutline {\n style?: 'dashed' | 'solid';\n width?: number;\n color?: string;\n}\n\n/**\n * 元素超链接\n * \n * type: 链接类型(网页、幻灯片页面)\n * \n * target: 目标地址(网页链接、幻灯片页面ID)\n */\nexport interface PPTElementLink {\n type: 'web' | 'slide';\n target: string;\n}\n\n\n/**\n * 元素通用属性\n * \n * id: 元素ID\n * \n * left: 元素水平方向位置(距离画布左侧)\n * \n * top: 元素垂直方向位置(距离画布顶部)\n * \n * lock?: 锁定元素\n * \n * groupId?: 组合ID(拥有相同组合ID的元素即为同一组合元素成员)\n * \n * width: 元素宽度\n * \n * height: 元素高度\n * \n * rotate: 旋转角度\n * \n * link?: 超链接\n */\ninterface PPTBaseElement {\n id: string;\n left: number;\n top: number;\n lock?: boolean;\n groupId?: string;\n width: number;\n height: number;\n rotate: number;\n link?: PPTElementLink;\n}\n\n\n/**\n * 文本元素\n * \n * type: 元素类型(text)\n * \n * content: 文本内容(HTML字符串)\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * outline?: 边框\n * \n * fill?: 填充色\n * \n * lineHeight?: 行高(倍),默认1.5\n * \n * wordSpace?: 字间距,默认0\n * \n * opacity?: 不透明度,默认1\n * \n * shadow?: 阴影\n */\nexport interface PPTTextElement extends PPTBaseElement {\n type: 'text';\n content: string;\n defaultFontName: string;\n defaultColor: string;\n outline?: PPTElementOutline;\n fill?: string;\n lineHeight?: number;\n wordSpace?: number;\n opacity?: number;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 图片翻转、形状翻转\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n */\nexport interface ImageOrShapeFlip {\n flipH?: boolean;\n flipV?: boolean;\n}\n\n/**\n * 图片滤镜\n * \n * https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter\n * \n * 'blur'?: 模糊,默认0(px)\n * \n * 'brightness'?: 亮度,默认100(%)\n * \n * 'contrast'?: 对比度,默认100(%)\n * \n * 'grayscale'?: 灰度,默认0(%)\n * \n * 'saturate'?: 饱和度,默认100(%)\n * \n * 'hue-rotate'?: 色相旋转,默认0(deg)\n * \n * 'opacity'?: 不透明度,默认100(%)\n */\nexport interface ImageElementFilters {\n 'blur'?: string;\n 'brightness'?: string;\n 'contrast'?: string;\n 'grayscale'?: string;\n 'saturate'?: string;\n 'hue-rotate'?: string;\n 'opacity'?: string;\n}\n\n/**\n * 图片裁剪\n * \n * range: 裁剪范围,例如:[[10, 10], [90, 90]] 表示裁取原图从左上角 10%, 10% 到 90%, 90% 的范围\n * \n * shape: 裁剪形状,见 configs/imageClip.ts CLIPPATHS \n */\nexport interface ImageElementClip {\n range: [[number, number], [number, number]];\n shape: string;\n}\n\n/**\n * 图片元素\n * \n * type: 元素类型(image)\n * \n * fixedRatio: 固定图片宽高比例\n * \n * src: 图片地址\n * \n * outline?: 边框\n * \n * filters?: 图片滤镜\n * \n * clip?: 裁剪信息\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n */\nexport interface PPTImageElement extends PPTBaseElement {\n type: 'image';\n fixedRatio: boolean;\n src: string;\n outline?: PPTElementOutline;\n filters?: ImageElementFilters;\n clip?: ImageElementClip;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n}\n\n\n/**\n * 形状渐变\n * \n * type: 渐变类型(径向、线性)\n * \n * color: 渐变颜色\n * \n * rotate: 渐变角度(线性渐变)\n */\nexport interface ShapeGradient {\n type: 'linear' | 'radial';\n color: [string, string];\n rotate: number;\n}\n\n/**\n * 形状内文本\n * \n * content: 文本内容(HTML字符串)\n * \n * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖)\n * \n * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖)\n * \n * align: 文本对齐方向(垂直方向)\n */\nexport interface ShapeText {\n content: string;\n defaultFontName: string;\n defaultColor: string;\n align: 'top' | 'middle' | 'bottom';\n}\n\n/**\n * 形状元素\n * \n * type: 元素类型(shape)\n * \n * viewBox: SVG的viewBox属性,例如 [1000, 1000] 表示 '0 0 1000 1000'\n * \n * path: 形状路径,SVG path 的 d 属性\n * \n * fixedRatio: 固定形状宽高比例\n * \n * fill: 填充,不存在渐变时生效\n * \n * gradient?: 渐变,该属性存在时将优先作为填充\n * \n * outline?: 边框\n * \n * opacity?: 不透明度\n * \n * flipH?: 水平翻转\n * \n * flipV?: 垂直翻转\n * \n * shadow?: 阴影\n * \n * special?: 特殊形状(标记一些难以解析的形状,例如路径使用了 L Q C A 以外的类型,该类形状在导出后将变为图片的形式)\n * \n * text?: 形状内文本\n * \n * pathFormula?: 形状路径计算公式\n * 一般情况下,形状的大小变化时仅由宽高基于 viewBox 的缩放比例来调整形状,而 viewBox 本身和 path 不会变化,\n * 但也有一些形状希望能更精确的控制一些关键点的位置,此时就需要提供路径计算公式,通过在缩放时更新 viewBox 并重新计算 path 来重新绘制形状\n */\nexport interface PPTShapeElement extends PPTBaseElement {\n type: 'shape';\n viewBox: [number, number];\n path: string;\n fixedRatio: boolean;\n fill: string;\n gradient?: ShapeGradient;\n outline?: PPTElementOutline;\n opacity?: number;\n flipH?: boolean;\n flipV?: boolean;\n shadow?: PPTElementShadow;\n special?: boolean;\n text?: ShapeText;\n pathFormula?: ShapePathFormulasKeys;\n}\n\n\nexport type LinePoint = '' | 'arrow' | 'dot' \n\n/**\n * 线条元素\n * \n * type: 元素类型(line)\n * \n * start: 起点位置([x, y])\n * \n * end: 终点位置([x, y])\n * \n * style: 线条样式(实线、虚线)\n * \n * color: 线条颜色\n * \n * points: 端点样式([起点样式, 终点样式],可选:无、箭头、圆点)\n * \n * shadow?: 阴影\n * \n * broken?: 折线控制点位置([x, y])\n * \n * curve?: 二次曲线控制点位置([x, y])\n * \n * curve?: 三次曲线控制点位置([[x1, y1], [x2, y2]])\n */\nexport interface PPTLineElement extends Omit {\n type: 'line';\n start: [number, number];\n end: [number, number];\n style: 'solid' | 'dashed';\n color: string;\n points: [LinePoint, LinePoint];\n shadow?: PPTElementShadow;\n broken?: [number, number];\n curve?: [number, number];\n cubic?: [[number, number], [number, number]];\n}\n\n\nexport type PresetChartType = 'bar' | 'horizontalBar' | 'line' | 'area' | 'scatter' | 'pie' | 'ring'\nexport type ChartType = 'bar' | 'line' | 'pie'\nexport type ChartOptions = ILineChartOptions & IBarChartOptions & IPieChartOptions\nexport interface ChartData {\n labels: string[];\n legends: string[];\n series: number[][];\n}\n\n/**\n * 图表元素\n * \n * type: 元素类型(chart)\n * \n * fill?: 填充色\n * \n * chartType: 图表基础类型(bar/line/pie),所有图表类型都是由这三种基本类型衍生而来\n * \n * data: 图表数据\n * \n * options?: 图表配置项\n * \n * outline?: 边框\n * \n * themeColor: 主题色\n * \n * gridColor?: 网格&坐标颜色\n * \n * legend?: 图例/位置\n */\nexport interface PPTChartElement extends PPTBaseElement {\n type: 'chart';\n fill?: string;\n chartType: ChartType;\n data: ChartData;\n options?: ChartOptions;\n outline?: PPTElementOutline;\n themeColor: string[];\n gridColor?: string;\n legend?: '' | 'top' | 'bottom',\n}\n\n\n/**\n * 表格单元格样式\n * \n * bold?: 加粗\n * \n * em?: 斜体\n * \n * underline?: 下划线\n * \n * strikethrough?: 删除线\n * \n * color?: 字体颜色\n * \n * backcolor?: 填充色\n * \n * fontsize?: 字体大小\n * \n * fontname?: 字体\n * \n * align?: 对齐方式\n */\nexport interface TableCellStyle {\n bold?: boolean;\n em?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n color?: string;\n backcolor?: string;\n fontsize?: string;\n fontname?: string;\n align?: 'left' | 'center' | 'right';\n}\n\n\n/**\n * 表格单元格\n * \n * id: 单元格ID\n * \n * colspan: 合并列数\n * \n * rowspan: 合并行数\n * \n * text: 文字内容\n * \n * style?: 单元格样式\n */\nexport interface TableCell {\n id: string;\n colspan: number;\n rowspan: number;\n text: string;\n style?: TableCellStyle;\n}\n\n/**\n * 表格主题\n * \n * color: 主题色\n * \n * rowHeader: 标题行\n * \n * rowFooter: 汇总行\n * \n * colHeader: 第一列\n * \n * colFooter: 最后一列\n */\nexport interface TableTheme {\n color: string;\n rowHeader: boolean;\n rowFooter: boolean;\n colHeader: boolean;\n colFooter: boolean;\n}\n\n/**\n * 表格元素\n * \n * type: 元素类型(table)\n * \n * outline: 边框\n * \n * theme?: 主题\n * \n * colWidths: 列宽数组,如[30, 50, 20]表示三列宽度分别为30%, 50%, 20%\n * \n * data: 表格数据\n */\nexport interface PPTTableElement extends PPTBaseElement {\n type: 'table';\n outline: PPTElementOutline;\n theme?: TableTheme;\n colWidths: number[];\n data: TableCell[][];\n}\n\n\n/**\n * LaTeX元素(公式)\n * \n * type: 元素类型(latex)\n * \n * latex: latex代码\n * \n * path: svg path\n * \n * color: 颜色\n * \n * strokeWidth: 路径宽度\n * \n * viewBox: SVG的viewBox属性\n * \n * fixedRatio: 固定形状宽高比例\n */\nexport interface PPTLatexElement extends PPTBaseElement {\n type: 'latex';\n latex: string;\n path: string;\n color: string;\n strokeWidth: number;\n viewBox: [number, number];\n fixedRatio: boolean;\n}\n\n/**\n * 视频元素\n * \n * type: 元素类型(video)\n * \n * src: 视频地址\n * \n * poster: 预览封面\n */\nexport interface PPTVideoElement extends PPTBaseElement {\n type: 'video';\n src: string;\n poster?: string;\n}\n\n/**\n * 音频元素\n * \n * type: 元素类型(audio)\n * \n * fixedRatio: 固定图标宽高比例\n * \n * color: 图标颜色\n * \n * loop: 循环播放\n * \n * autoplay: 自动播放\n * \n * src: 音频地址\n */\nexport interface PPTAudioElement extends PPTBaseElement {\n type: 'audio';\n fixedRatio: boolean;\n color: string,\n loop: boolean,\n autoplay: boolean,\n src: string;\n}\n\n\nexport type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement | PPTLatexElement | PPTVideoElement | PPTAudioElement\n\n\n/**\n * 元素动画\n * \n * elId: 元素ID\n * \n * type: 动画类型\n * \n * duration: 动画持续时间\n */\nexport interface PPTAnimation {\n elId: string;\n type: string;\n duration: number;\n}\n\n/**\n * 幻灯片背景\n * \n * type: 背景类型(纯色、图片、渐变)\n * \n * color?: 背景颜色(纯色)\n * \n * image?: 图片地址(图片)\n * \n * imageSize?: 图片填充方式\n * \n * gradientType?: 渐变类型(线性、径向)\n * \n * gradientColor?: 渐变颜色\n * \n * gradientRotate?: 渐变角度(线性)\n */\nexport interface SlideBackground {\n type: 'solid' | 'image' | 'gradient';\n color?: string;\n image?: string;\n imageSize?: 'cover' | 'contain' | 'repeat';\n gradientType?: 'linear' | 'radial';\n gradientColor?: [string, string];\n gradientRotate?: number;\n}\n\n\nexport type TurningMode = 'no' | 'fade' | 'slideX' | 'slideY'\n\n/**\n * 幻灯片页面\n * \n * id: 页面ID\n * \n * elements: 元素集合\n * \n * remark?: 备注\n * \n * background?: 页面背景\n * \n * animations?: 元素动画集合\n * \n * turningMode?: 翻页方式\n */\nexport interface Slide {\n id: string;\n elements: PPTElement[];\n remark?: string;\n background?: SlideBackground;\n animations?: PPTAnimation[];\n turningMode?: TurningMode;\n}\n\n/**\n * 幻灯片主题\n * \n * backgroundColor: 页面背景颜色\n * \n * themeColor: 主题色,用于默认创建的形状颜色等\n * \n * fontColor: 字体颜色\n * \n * fontName: 字体\n */\nexport interface SlideTheme {\n backgroundColor: string;\n themeColor: string;\n fontColor: string;\n fontName: string;\n}","import CryptoJS from 'crypto-js'\n\nconst CRYPTO_KEY = 'pptist'\n\n/**\n * 加密\n * @param msg 待加密字符串\n */\nexport const encrypt = (msg: string) => {\n return CryptoJS.AES.encrypt(msg, CRYPTO_KEY).toString()\n}\n\n/**\n * 解密\n * @param ciphertext 待解密字符串\n */\nexport const decrypt = (ciphertext: string) => {\n const bytes = CryptoJS.AES.decrypt(ciphertext, CRYPTO_KEY)\n return bytes.toString(CryptoJS.enc.Utf8)\n}","import Clipboard from 'clipboard'\nimport { decrypt } from '@/utils/crypto'\n\n/**\n * 复制文本到剪贴板\n * @param text 文本内容\n */\nexport const copyText = (text: string) => {\n return new Promise((resolve, reject) => {\n const fakeElement = document.createElement('button')\n const clipboard = new Clipboard(fakeElement, {\n text: () => text,\n action: () => 'copy',\n container: document.body,\n })\n clipboard.on('success', e => {\n clipboard.destroy()\n resolve(e)\n })\n clipboard.on('error', e => {\n clipboard.destroy()\n reject(e)\n })\n document.body.appendChild(fakeElement)\n fakeElement.click()\n document.body.removeChild(fakeElement)\n })\n}\n\n// 读取剪贴板\nexport const readClipboard = (): Promise => {\n return new Promise((resolve, reject) => {\n if (navigator.clipboard?.readText) {\n navigator.clipboard.readText().then(text => {\n if (!text) reject('剪贴板为空或者不包含文本')\n return resolve(text)\n })\n }\n else reject('浏览器不支持或禁止访问剪贴板,请使用快捷键 Ctrl + V')\n })\n}\n\n// 解析加密后的剪贴板内容\nexport const pasteCustomClipboardString = (text: string) => {\n let clipboardData\n try {\n clipboardData = JSON.parse(decrypt(text))\n }\n catch {\n clipboardData = text\n }\n\n return clipboardData\n}\n\n// 尝试解析剪贴板内容是否为Excel表格(或类似的)数据格式\nexport const pasteExcelClipboardString = (text: string): string[][] | null => {\n const lines: string[] = text.split('\\r\\n')\n\n if (lines[lines.length - 1] === '') lines.pop()\n\n let colCount = -1\n const data: string[][] = []\n for (const index in lines) {\n data[index] = lines[index].split('\\t')\n\n if (data[index].length === 1) return null\n if (colCount === -1) colCount = data[index].length\n else if (colCount !== data[index].length) return null\n }\n return data\n}","import tinycolor from 'tinycolor2'\r\nimport { PPTElement, PPTLineElement } from '@/types/slides'\r\nimport { createRandomCode } from '@/utils/common'\r\n\r\ninterface RotatedElementData {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n rotate: number;\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置范围\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedRange = (element: RotatedElementData) => {\r\n const { left, top, width, height, rotate = 0 } = element\r\n\r\n const radius = Math.sqrt( Math.pow(width, 2) + Math.pow(height, 2) ) / 2\r\n const auxiliaryAngle = Math.atan(height / width) * 180 / Math.PI\r\n\r\n const tlbraRadian = (180 - rotate - auxiliaryAngle) * Math.PI / 180\r\n const trblaRadian = (auxiliaryAngle - rotate) * Math.PI / 180\r\n\r\n const middleLeft = left + width / 2\r\n const middleTop = top + height / 2\r\n\r\n const xAxis = [\r\n middleLeft + radius * Math.cos(tlbraRadian),\r\n middleLeft + radius * Math.cos(trblaRadian),\r\n middleLeft - radius * Math.cos(tlbraRadian),\r\n middleLeft - radius * Math.cos(trblaRadian),\r\n ]\r\n const yAxis = [\r\n middleTop - radius * Math.sin(tlbraRadian),\r\n middleTop - radius * Math.sin(trblaRadian),\r\n middleTop + radius * Math.sin(tlbraRadian),\r\n middleTop + radius * Math.sin(trblaRadian),\r\n ]\r\n\r\n return {\r\n xRange: [Math.min(...xAxis), Math.max(...xAxis)],\r\n yRange: [Math.min(...yAxis), Math.max(...yAxis)],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的矩形范围旋转后的新位置与旋转之前位置的偏离距离\r\n * @param element 元素的位置大小和旋转角度信息\r\n */\r\nexport const getRectRotatedOffset = (element: RotatedElementData) => {\r\n const { xRange: originXRange, yRange: originYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: 0,\r\n })\r\n const { xRange: rotatedXRange, yRange: rotatedYRange } = getRectRotatedRange({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n return {\r\n offsetX: rotatedXRange[0] - originXRange[0],\r\n offsetY: rotatedYRange[0] - originYRange[0],\r\n }\r\n}\r\n\r\n/**\r\n * 计算元素在画布中的位置范围\r\n * @param element 元素信息\r\n */\r\nexport const getElementRange = (element: PPTElement) => {\r\n let minX, maxX, minY, maxY\r\n\r\n if (element.type === 'line') {\r\n minX = element.left\r\n maxX = element.left + Math.max(element.start[0], element.end[0])\r\n minY = element.top\r\n maxY = element.top + Math.max(element.start[1], element.end[1])\r\n }\r\n else if ('rotate' in element && element.rotate) {\r\n const { left, top, width, height, rotate } = element\r\n const { xRange, yRange } = getRectRotatedRange({ left, top, width, height, rotate })\r\n minX = xRange[0]\r\n maxX = xRange[1]\r\n minY = yRange[0]\r\n maxY = yRange[1]\r\n }\r\n else {\r\n minX = element.left\r\n maxX = element.left + element.width\r\n minY = element.top\r\n maxY = element.top + element.height\r\n }\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\n/**\r\n * 计算一组元素在画布中的位置范围\r\n * @param elementList 一组元素信息\r\n */\r\nexport const getElementListRange = (elementList: PPTElement[]) => {\r\n const leftValues: number[] = []\r\n const topValues: number[] = []\r\n const rightValues: number[] = []\r\n const bottomValues: number[] = []\r\n\r\n elementList.forEach(element => {\r\n const { minX, maxX, minY, maxY } = getElementRange(element)\r\n leftValues.push(minX)\r\n topValues.push(minY)\r\n rightValues.push(maxX)\r\n bottomValues.push(maxY)\r\n })\r\n\r\n const minX = Math.min(...leftValues)\r\n const maxX = Math.max(...rightValues)\r\n const minY = Math.min(...topValues)\r\n const maxY = Math.max(...bottomValues)\r\n\r\n return { minX, maxX, minY, maxY }\r\n}\r\n\r\nexport interface AlignLine {\r\n value: number;\r\n range: [number, number];\r\n}\r\n\r\n/**\r\n * 将一组对齐吸附线进行去重:同位置的的多条对齐吸附线仅留下一条,取该位置所有对齐吸附线的最大值和最小值为新的范围\r\n * @param lines 一组对齐吸附线信息\r\n */\r\nexport const uniqAlignLines = (lines: AlignLine[]) => {\r\n const uniqLines: AlignLine[] = []\r\n lines.forEach(line => {\r\n const index = uniqLines.findIndex(_line => _line.value === line.value)\r\n if (index === -1) uniqLines.push(line)\r\n else {\r\n const uniqLine = uniqLines[index]\r\n const rangeMin = Math.min(uniqLine.range[0], line.range[0])\r\n const rangeMax = Math.max(uniqLine.range[1], line.range[1])\r\n const range: [number, number] = [rangeMin, rangeMax]\r\n const _line = { value: line.value, range }\r\n uniqLines[index] = _line\r\n }\r\n })\r\n return uniqLines\r\n}\r\n\r\n/**\r\n * 以元素列表为基础,为每一个元素生成新的ID,并关联到旧ID形成一个字典\r\n * 主要用于复制元素时,维持数据中各处元素ID原有的关系\r\n * 例如:原本两个组合的元素拥有相同的groupId,复制后依然会拥有另一个相同的groupId\r\n * @param elements 元素列表数据\r\n */\r\nexport const createElementIdMap = (elements: PPTElement[]) => {\r\n const groupIdMap = {}\r\n const elIdMap = {}\r\n for (const element of elements) {\r\n const groupId = element.groupId\r\n if (groupId && !groupIdMap[groupId]) {\r\n groupIdMap[groupId] = createRandomCode()\r\n }\r\n elIdMap[element.id] = createRandomCode()\r\n }\r\n return {\r\n groupIdMap,\r\n elIdMap,\r\n }\r\n}\r\n\r\n/**\r\n * 根据表格的主题色,获取对应用于配色的子颜色\r\n * @param themeColor 主题色\r\n */\r\nexport const getTableSubThemeColor = (themeColor: string) => {\r\n const rgba = tinycolor(themeColor)\r\n return [\r\n rgba.setAlpha(0.3).toRgbString(),\r\n rgba.setAlpha(0.1).toRgbString(),\r\n ]\r\n}\r\n\r\n/**\r\n * 获取线条元素路径字符串\r\n * @param element 线条元素\r\n */\r\nexport const getLineElementPath = (element: PPTLineElement) => {\r\n const start = element.start.join(',')\r\n const end = element.end.join(',')\r\n if (element.broken) {\r\n const mid = element.broken.join(',')\r\n return `M${start} L${mid} L${end}`\r\n }\r\n else if (element.curve) {\r\n const mid = element.curve.join(',')\r\n return `M${start} Q${mid} ${end}`\r\n }\r\n else if (element.cubic) {\r\n const [c1, c2] = element.cubic\r\n const p1 = c1.join(',')\r\n const p2 = c2.join(',')\r\n return `M${start} C${p1} ${p2} ${end}`\r\n }\r\n return `M${start} L${end}`\r\n}","/**\r\n * 将普通文本转为带段落信息的HTML字符串\r\n * @param text 文本\r\n */\r\nexport const parseText2Paragraphs = (text: string) => {\r\n const htmlText = text.replace(/[\\n\\r]+/g, '
')\r\n const paragraphs = htmlText.split('
')\r\n let string = ''\r\n for (const paragraph of paragraphs) {\r\n if (paragraph) string += `
${paragraph}
`\r\n }\r\n return string\r\n}","import { debounce, throttle} from 'lodash'\nimport { useSnapshotStore } from '@/store'\n\nexport default () => {\n const snapshotStore = useSnapshotStore()\n\n // 添加历史快照(历史记录)\n const addHistorySnapshot = debounce(function() {\n snapshotStore.addSnapshot()\n }, 300, { trailing: true })\n\n // 重做\n const redo = throttle(function() {\n snapshotStore.reDo()\n }, 100, { leading: true, trailing: false })\n\n // 撤销\n const undo = throttle(function() {\n snapshotStore.unDo()\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 { ShapePathFormulasKeys } from '@/types/slides'\n\nexport interface ShapePoolItem {\n viewBox: [number, number];\n path: string;\n special?: boolean;\n pathFormula?: ShapePathFormulasKeys;\n}\n\ninterface ShapeListItem {\n type: string;\n children: ShapePoolItem[];\n}\n\nexport const SHAPE_PATH_FORMULAS = {\n [ShapePathFormulasKeys.ROUND_RECT]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height - radius} Q ${width} ${height} ${width - radius} ${height} L ${radius} ${height} Q 0 ${height} 0 ${height - radius} L 0 ${radius} Q 0 0 ${radius} 0 Z`\n },\n [ShapePathFormulasKeys.CUT_RECT_DIAGONAL]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 5\n return `M 0 ${height - radius} L 0 0 L ${width - radius} 0 L ${width} ${radius} L ${width} ${height} L ${radius} ${height} Z`\n },\n [ShapePathFormulasKeys.CUT_RECT_SINGLE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 5\n return `M 0 ${height} L 0 0 L ${width - radius} 0 L ${width} ${radius} L ${width} ${height} Z`\n },\n [ShapePathFormulasKeys.CUT_RECT_SAMESIDE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 5\n return `M 0 ${radius} L ${radius} 0 L ${width - radius} 0 L ${width} ${radius} L ${width} ${height} L 0 ${height} Z`\n },\n [ShapePathFormulasKeys.ROUND_RECT_DIAGONAL]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M 0 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height} L ${radius} ${height} Q 0 ${height} 0 ${height - radius} L 0 0 Z`\n },\n [ShapePathFormulasKeys.ROUND_RECT_SINGLE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M 0 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height} L 0 ${height} L 0 0 Z`\n },\n [ShapePathFormulasKeys.ROUND_RECT_SAMESIDE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n return `M 0 ${radius} Q 0 0 ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height} L 0 ${height} Z`\n },\n [ShapePathFormulasKeys.MESSAGE]: (width: number, height: number) => {\n const arrowWidth = width / 5\n const arrowheight = height / 5\n return `M 0 0 L ${width} 0 L ${width} ${height - arrowheight} L ${width / 2} ${height - arrowheight} L ${width / 2 - arrowWidth} ${height} L ${width / 2 - arrowWidth} ${height - arrowheight} L 0 ${height - arrowheight} Z`\n },\n [ShapePathFormulasKeys.ROUND_MESSAGE]: (width: number, height: number) => {\n const radius = Math.min(width, height) / 8\n const arrowWidth = width / 5\n const arrowheight = height / 5\n return `M 0 ${radius} Q 0 0 ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height - radius - arrowheight} Q ${width} ${height - arrowheight} ${width - radius} ${height - arrowheight} L ${width / 2} ${height - arrowheight} L ${width / 2 - arrowWidth} ${height} L ${width / 2 - arrowWidth} ${height - arrowheight} L ${radius} ${height - arrowheight} Q 0 ${height - arrowheight} 0 ${height - radius - arrowheight} L 0 ${radius} Z`\n },\n [ShapePathFormulasKeys.L]: (width: number, height: number) => {\n const lineWidth = Math.min(width, height) / 4\n return `M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${height - lineWidth} L ${lineWidth} ${height - lineWidth} L ${lineWidth} 0 Z`\n },\n [ShapePathFormulasKeys.RING_RECT]: (width: number, height: number) => {\n const lineWidth = Math.min(width, height) / 4\n return `M 0 0 ${width} 0 ${width} ${height} L 0 ${height} L 0 0 Z M ${lineWidth} ${lineWidth} L ${lineWidth} ${height - lineWidth} L ${width - lineWidth} ${height - lineWidth} L ${width - lineWidth} ${lineWidth} Z`\n },\n [ShapePathFormulasKeys.PLUS]: (width: number, height: number) => {\n const lineWidth = Math.min(width, height) / 4\n return `M ${width / 2 - lineWidth / 2} 0 L ${width / 2 - lineWidth / 2} ${height / 2 - lineWidth / 2} L 0 ${height / 2 - lineWidth / 2} L 0 ${height / 2 + lineWidth / 2} L ${width / 2 - lineWidth / 2} ${height / 2 + lineWidth / 2} L ${width / 2 - lineWidth / 2} ${height} L ${width / 2 + lineWidth / 2} ${height} L ${width / 2 + lineWidth / 2} ${height / 2 + lineWidth / 2} L ${width} ${height / 2 + lineWidth / 2} L ${width} ${height / 2 - lineWidth / 2} L ${width / 2 + lineWidth / 2} ${height / 2 - lineWidth / 2} L ${width / 2 + lineWidth / 2} 0 Z`\n },\n}\n\nexport const SHAPE_LIST: ShapeListItem[] = [\n {\n type: '矩形',\n children: [\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 200 0 L 200 200 L 0 200 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 50 0 L 150 0 Q 200 0 200 50 L 200 150 Q 200 200 150 200 L 50 200 Q 0 200 0 150 L 0 50 Q 0 0 50 0 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 Z',\n pathFormula: ShapePathFormulasKeys.CUT_RECT_DIAGONAL,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 Z',\n pathFormula: ShapePathFormulasKeys.CUT_RECT_SINGLE,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 Z',\n pathFormula: ShapePathFormulasKeys.CUT_RECT_SAMESIDE,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 50 200 Q 0 200 0 150 L 0 0 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT_DIAGONAL,\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 0 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT_SINGLE,\n },\n {\n viewBox: [200, 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 Z',\n pathFormula: ShapePathFormulasKeys.ROUND_RECT_SAMESIDE,\n },\n ]\n },\n\n {\n type: '常用形状',\n children: [\n {\n viewBox: [200, 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, 200],\n path: 'M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 40 20 A 100 100 0 1 0 200 100 L 100 100 L 40 20 Z'\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 160 20 A 100 100 0 1 0 200 100 L 100 100 L 160 20 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z'\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 0 200 L 200 200 L 100 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 0 200 L 200 200 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z'\n },\n {\n viewBox: [200, 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, 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, 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, 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, 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, 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, 200],\n path: 'M 50 0 A 25 50 0 1 0 50 200 L 150 200 A 25 50 0 1 0 150 0 L 50 0 Z'\n },\n {\n viewBox: [200, 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, 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, 200],\n path: 'M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z'\n },\n {\n viewBox: [200, 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, 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 pathFormula: ShapePathFormulasKeys.L\n },\n {\n viewBox: [200, 200],\n path: 'M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z',\n pathFormula: ShapePathFormulasKeys.RING_RECT,\n },\n {\n viewBox: [200, 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, 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 pathFormula: ShapePathFormulasKeys.PLUS,\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 Z',\n pathFormula: ShapePathFormulasKeys.MESSAGE,\n },\n {\n viewBox: [200, 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 pathFormula: ShapePathFormulasKeys.ROUND_MESSAGE,\n },\n {\n viewBox: [200, 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, 200],\n path: 'M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 Q 0 50 0 175 Q 100 225 200 175 Q 200 50 100 0 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 0 100 A 50 50 0 1 1 200 100 L 100 200 L 0 100 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 60 60 L 0 100 L 60 140 L 100 200 L 140 140 L 200 100 L 140 60 L 100 0 Z',\n },\n {\n viewBox: [200, 200],\n path: 'M 100 0 L 80 40 L 20 20 L 40 80 L 0 100 L 40 120 L 20 180 L 80 160 L 100 200 L 120 160 L 180 180 L 160 120 L 200 100 L 160 80 L 180 20 L 120 40 L 100 0 Z',\n },\n ],\n },\n \n {\n type: '箭头',\n children: [\n {\n viewBox: [200, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 200],\n path: 'M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z'\n },\n {\n viewBox: [200, 200],\n path: 'M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z'\n },\n {\n viewBox: [200, 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, 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, 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, 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, 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, 1024],\n path: 'M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z',\n special: true,\n },\n ],\n },\n\n {\n type: '其他形状',\n children: [\n {\n viewBox: [1024, 1024],\n path: 'M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z',\n special: true,\n },\n {\n viewBox: [1024, 1024],\n path: 'M997.8886764 504.17210418L537.2729208 43.89182982c-13.97838539-13.97838539-36.56745619-13.97838539-50.5458416 0L26.1113236 504.17210418c-13.41924998 13.41924998-21.02349164 31.64706454-21.02349163 50.65766867 0 39.47496036 32.09437288 71.56933323 71.56933324 71.56933323h48.53295408V954.83524937c0 19.79339373 15.99127289 35.78466661 35.78466663 35.78466662H440.43066677V740.12724968h125.24633315v250.49266631h297.34821416c19.79339373 0 35.78466661-15.99127289 35.78466663-35.78466662V626.39910608h48.53295408c19.01060414 0 37.23841869-7.49241457 50.65766869-21.02349163 27.84494371-27.95677079 27.84494371-73.24673948-0.11182708-101.20351027z',\n special: true,\n },\n ],\n },\n]","import { ChartType } from '@/types/slides'\n\ninterface ChartTypes {\n [propName: string]: ChartType;\n}\n\nexport const CHART_TYPES: ChartTypes = {\n bar: 'bar',\n horizontalBar: 'bar',\n line: 'line',\n area: 'line',\n scatter: 'line',\n pie: 'pie',\n ring: 'pie',\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { createRandomCode } from '@/utils/common'\nimport { getImageSize } from '@/utils/image'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { PPTLineElement, PPTElement, TableCell, TableCellStyle, PPTShapeElement, PPTChartElement, ChartOptions, PresetChartType } from '@/types/slides'\nimport { ShapePoolItem, SHAPE_PATH_FORMULAS } from '@/configs/shapes'\nimport { LinePoolItem } from '@/configs/lines'\nimport { CHART_TYPES } from '@/configs/chartTypes'\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 mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { creatingElement } = storeToRefs(mainStore)\n const { theme, viewportRatio } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 创建(插入)一个元素并将其设置为被选中元素\n const createElement = (element: PPTElement) => {\n slidesStore.addElement(element)\n mainStore.setActiveElementIdList([element.id])\n\n if (creatingElement.value) mainStore.setCreatingElement(null)\n\n setTimeout(() => {\n mainStore.setEditorareaFocus(true)\n }, 0)\n\n addHistorySnapshot()\n }\n\n /**\n * 创建图片元素\n * @param src 图片地址\n */\n const createImageElement = (src: string) => {\n getImageSize(src).then(({ width, height }) => {\n const scale = height / width\n \n if (scale < viewportRatio.value && width > VIEWPORT_SIZE) {\n width = VIEWPORT_SIZE\n height = width * scale\n }\n else if (height > VIEWPORT_SIZE * viewportRatio.value) {\n height = VIEWPORT_SIZE * viewportRatio.value\n width = height / scale\n }\n\n createElement({\n type: 'image',\n id: createRandomCode(),\n src,\n width,\n height,\n left: (VIEWPORT_SIZE - width) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - height) / 2,\n fixedRatio: true,\n rotate: 0,\n })\n })\n }\n \n /**\n * 创建图表元素\n * @param chartType 图表类型\n */\n const createChartElement = (type: PresetChartType) => {\n const newElement: PPTChartElement = {\n type: 'chart',\n id: createRandomCode(),\n chartType: CHART_TYPES[type],\n left: 300,\n top: 81.25,\n width: 400,\n height: 400,\n rotate: 0,\n themeColor: [theme.value.themeColor],\n gridColor: theme.value.fontColor,\n data: {\n labels: ['类别1', '类别2', '类别3', '类别4', '类别5'],\n legends: ['系列1'],\n series: [\n [12, 19, 5, 2, 18],\n ],\n },\n }\n\n let options: ChartOptions = {}\n if (type === 'horizontalBar') options = { horizontalBars: true }\n else if (type === 'area') options = { showArea: true }\n else if (type === 'scatter') options = { showLine: false }\n else if (type === 'ring') options = { donut: true }\n\n createElement({\n ...newElement,\n options,\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: theme.value.fontName,\n color: theme.value.fontColor,\n }\n const data: TableCell[][] = []\n for (let i = 0; i < row; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < col; j++) {\n rowCells.push({ id: createRandomCode(), colspan: 1, rowspan: 1, text: '', style })\n }\n data.push(rowCells)\n }\n\n const DEFAULT_CELL_WIDTH = 100\n const DEFAULT_CELL_HEIGHT = 36\n\n const colWidths: number[] = new Array(col).fill(1 / col)\n\n const width = col * DEFAULT_CELL_WIDTH\n const height = row * DEFAULT_CELL_HEIGHT\n\n createElement({\n type: 'table',\n id: createRandomCode(),\n width,\n height,\n colWidths,\n rotate: 0,\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: theme.value.themeColor,\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: theme.value.fontName,\n defaultColor: theme.value.fontColor,\n })\n }\n \n /**\n * 创建形状元素\n * @param position 位置大小信息\n * @param data 形状路径信息\n */\n const createShapeElement = (position: CommonElementPosition, data: ShapePoolItem) => {\n const { left, top, width, height } = position\n const newElement: PPTShapeElement = {\n type: 'shape',\n id: createRandomCode(),\n left, \n top, \n width, \n height,\n viewBox: data.viewBox,\n path: data.path,\n fill: theme.value.themeColor,\n fixedRatio: false,\n rotate: 0,\n }\n if (data.special) newElement.special = true\n if (data.pathFormula) {\n newElement.pathFormula = data.pathFormula\n newElement.viewBox = [width, height]\n newElement.path = SHAPE_PATH_FORMULAS[data.pathFormula](width, height)\n }\n createElement(newElement)\n }\n \n /**\n * 创建线条元素\n * @param position 位置大小信息\n * @param data 线条的路径和样式\n */\n const createLineElement = (position: LineElementPosition, data: LinePoolItem) => {\n const { left, top, start, end } = position\n\n const newElement: PPTLineElement = {\n type: 'line',\n id: createRandomCode(),\n left, \n top, \n start,\n end,\n points: data.points,\n color: theme.value.themeColor,\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 if (data.isCubic) newElement.cubic = [[(start[0] + end[0]) / 2, (start[1] + end[1]) / 2], [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]]\n createElement(newElement)\n }\n \n /**\n * 创建LaTeX元素\n * @param svg SVG代码\n */\n const createLatexElement = (data: { path: string; latex: string; w: number; h: number; }) => {\n createElement({\n type: 'latex',\n id: createRandomCode(),\n width: data.w,\n height: data.h,\n rotate: 0,\n left: (VIEWPORT_SIZE - data.w) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - data.h) / 2,\n path: data.path,\n latex: data.latex,\n color: theme.value.fontColor,\n strokeWidth: 2,\n viewBox: [data.w, data.h],\n fixedRatio: true,\n })\n }\n \n /**\n * 创建视频元素\n * @param src 视频地址\n */\n const createVideoElement = (src: string) => {\n createElement({\n type: 'video',\n id: createRandomCode(),\n width: 500,\n height: 300,\n rotate: 0,\n left: (VIEWPORT_SIZE - 500) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - 300) / 2,\n src,\n })\n }\n \n /**\n * 创建音频元素\n * @param src 音频地址\n */\n const createAudioElement = (src: string) => {\n createElement({\n type: 'audio',\n id: createRandomCode(),\n width: 50,\n height: 50,\n rotate: 0,\n left: (VIEWPORT_SIZE - 50) / 2,\n top: (VIEWPORT_SIZE * viewportRatio.value - 50) / 2,\n loop: false,\n autoplay: false,\n fixedRatio: true,\n color: theme.value.themeColor,\n src,\n })\n }\n\n return {\n createImageElement,\n createChartElement,\n createTableElement,\n createTextElement,\n createShapeElement,\n createLineElement,\n createLatexElement,\n createVideoElement,\n createAudioElement,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useSlidesStore, useMainStore } from '@/store'\nimport { pasteCustomClipboardString } from '@/utils/clipboard'\nimport { PPTElement, Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { createElementIdMap } from '@/utils/element'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useCreateElement from '@/hooks/useCreateElement'\n\ninterface PasteTextClipboardDataOptions {\n onlySlide?: boolean;\n onlyElements?: boolean;\n}\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { currentSlide } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n const { createTextElement } = useCreateElement()\n\n /**\n * 粘贴元素(一组)\n * @param elements 元素列表数据\n */\n const addElementsFromClipboard = (elements: PPTElement[]) => {\n const { groupIdMap, elIdMap } = createElementIdMap(elements)\n const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id)\n \n for (const element of elements) {\n const inCurrentSlide = currentSlideElementIdList.includes(element.id)\n \n element.id = elIdMap[element.id]\n\n if (inCurrentSlide) {\n element.left = element.left + 10\n element.top = element.top + 10\n }\n\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n slidesStore.addElement(elements)\n mainStore.setActiveElementIdList(Object.values(elIdMap))\n addHistorySnapshot()\n }\n\n /**\n * 粘贴页面\n * @param slide 页面数据\n */\n const addSlidesFromClipboard = (slides: Slide[]) => {\n const newSlides = slides.map(slide => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n if (slide.animations) {\n for (const animation of slide.animations) {\n animation.elId = elIdMap[animation.elId]\n }\n }\n return {\n ...slide,\n id: createRandomCode(),\n }\n })\n slidesStore.addSlide(newSlides)\n addHistorySnapshot()\n }\n\n /**\n * 粘贴普通文本:创建为新的文本元素\n * @param text 文本\n */\n const createTextElementFromClipboard = (text: string) => {\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, text)\n }\n\n /**\n * 解析剪贴板内容,根据解析结果选择合适的粘贴方式\n * @param text 剪贴板内容\n * @param options 配置项:onlySlide -- 仅处理页面粘贴;onlyElements -- 仅处理元素粘贴;\n */\n const pasteTextClipboardData = (text: string, options?: PasteTextClipboardDataOptions) => {\n const onlySlide = options?.onlySlide || false\n const onlyElements = options?.onlyElements || false\n\n const clipboardData = pasteCustomClipboardString(text)\n\n // 元素或页面\n if (typeof clipboardData === 'object') {\n const { type, data } = clipboardData\n\n if (type === 'elements' && !onlySlide) addElementsFromClipboard(data)\n else if (type === 'slides' && !onlyElements) addSlidesFromClipboard(data)\n }\n\n // 普通文本\n else if (!onlyElements && !onlySlide) {\n const string = parseText2Paragraphs(clipboardData)\n createTextElementFromClipboard(string)\n }\n }\n\n return {\n addSlidesFromClipboard,\n pasteTextClipboardData,\n }\n}","import { computed } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { copyText, readClipboard } from '@/utils/clipboard'\nimport { encrypt } from '@/utils/crypto'\nimport { createElementIdMap } from '@/utils/element'\nimport { KEYS } from '@/configs/hotkey'\nimport { message } from 'ant-design-vue'\nimport usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { selectedSlidesIndex: _selectedSlidesIndex } = storeToRefs(mainStore)\n const { currentSlide, slides, theme, slideIndex } = storeToRefs(slidesStore)\n\n const selectedSlidesIndex = computed(() => [..._selectedSlidesIndex.value, slideIndex.value])\n const selectedSlides = computed(() => slides.value.filter((item, index) => selectedSlidesIndex.value.includes(index)))\n const selectedSlidesId = computed(() => selectedSlides.value.map(item => item.id))\n\n const { pasteTextClipboardData, addSlidesFromClipboard } = usePasteTextClipboardData()\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 重置幻灯片\n const resetSlides = () => {\n const emptySlide: Slide = {\n id: createRandomCode(),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n slidesStore.updateSlideIndex(0)\n mainStore.setActiveElementIdList([])\n slidesStore.setSlides([emptySlide])\n }\n\n /**\n * 移动页面焦点\n * @param command 移动页面焦点命令:上移、下移\n */\n const updateSlideIndex = (command: string) => {\n if (command === KEYS.UP && slideIndex.value > 0) {\n slidesStore.updateSlideIndex(slideIndex.value - 1)\n }\n else if (command === KEYS.DOWN && slideIndex.value < slides.value.length - 1) {\n slidesStore.updateSlideIndex(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 mainStore.setThumbnailsFocus(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: Slide = {\n id: createRandomCode(),\n elements: [],\n background: {\n type: 'solid',\n color: theme.value.backgroundColor,\n },\n }\n mainStore.setActiveElementIdList([])\n slidesStore.addSlide(emptySlide)\n addHistorySnapshot()\n }\n\n // 根据模板创建新页面\n const createSlideByTemplate = (slide: Slide) => {\n const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)\n\n for (const element of slide.elements) {\n element.id = elIdMap[element.id]\n if (element.groupId) element.groupId = groupIdMap[element.groupId]\n }\n const newSlide = {\n ...slide,\n id: createRandomCode(),\n }\n mainStore.setActiveElementIdList([])\n slidesStore.addSlide(newSlide)\n addHistorySnapshot()\n }\n\n // 将当前页复制一份到下一页\n const copyAndPasteSlide = () => {\n const slide = JSON.parse(JSON.stringify(currentSlide.value))\n addSlidesFromClipboard([slide])\n }\n\n // 删除当前页,若将删除全部页面,则执行重置幻灯片操作\n const deleteSlide = (targetSlidesId = selectedSlidesId.value) => {\n if (slides.value.length === targetSlidesId.length) resetSlides()\n else slidesStore.deleteSlide(targetSlidesId)\n\n mainStore.updateSelectedSlidesIndex([])\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 mainStore.setActiveElementIdList([])\n mainStore.updateSelectedSlidesIndex(newSelectedSlidesIndex)\n }\n\n return {\n resetSlides,\n updateSlideIndex,\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\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 slidesStore.updateSlide({ elements: newElementList })\n mainStore.setActiveElementIdList([])\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 const groupElementIdList = []\n for (const element of newElementList) {\n if (element.groupId === handleElement.groupId) {\n element.lock = false\n groupElementIdList.push(element.id)\n }\n }\n slidesStore.updateSlide({ elements: newElementList })\n mainStore.setActiveElementIdList(groupElementIdList)\n }\n else {\n for (const element of newElementList) {\n if (element.id === handleElement.id) {\n element.lock = false\n break\n }\n }\n slidesStore.updateSlide({ elements: newElementList })\n mainStore.setActiveElementIdList([handleElement.id])\n }\n addHistorySnapshot()\n }\n\n return {\n lockElement,\n unlockElement,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeGroupElementId } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\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 mainStore.setActiveElementIdList([])\n slidesStore.updateSlide({ elements: newElementList })\n addHistorySnapshot()\n }\n\n // 删除内面内全部元素(无论是否选中)\n const deleteAllElements = () => {\n if (!currentSlide.value.elements.length) return\n mainStore.setActiveElementIdList([])\n slidesStore.updateSlide({ elements: [] })\n addHistorySnapshot()\n }\n\n return {\n deleteElement,\n deleteAllElements,\n }\n}","import { computed } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeElementList, handleElementId } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 判断当前选中的元素是否可以组合\n */\n const canCombine = computed(() => {\n if (activeElementList.value.length < 2) return false\n\n const firstGroupId = activeElementList.value[0].groupId\n if (!firstGroupId) return true\n\n const inSameGroup = activeElementList.value.every(el => (el.groupId && el.groupId) === firstGroupId)\n return !inSameGroup\n })\n\n /**\n * 组合当前选中的元素:给当前选中的元素赋予一个相同的分组ID\n */\n const combineElements = () => {\n if (!activeElementList.value.length) return\n\n // 生成一个新元素列表进行后续操作\n let newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\n\n // 生成分组ID\n const groupId = createRandomCode()\n\n // 收集需要组合的元素列表,并赋上唯一分组ID\n const combineElementList: PPTElement[] = []\n for (const element of newElementList) {\n if (activeElementIdList.value.includes(element.id)) {\n element.groupId = groupId\n combineElementList.push(element)\n }\n }\n\n // 确保该组合内所有元素成员的层级是连续的,具体操作方法为:\n // 先获取到该组合内最上层元素的层级,将本次需要组合的元素从新元素列表中移除,\n // 再根据最上层元素的层级位置,将上面收集到的需要组合的元素列表一起插入到新元素列表中合适的位置\n const combineElementMaxLevel = newElementList.findIndex(_element => _element.id === combineElementList[combineElementList.length - 1].id)\n const combineElementIdList = combineElementList.map(_element => _element.id)\n newElementList = newElementList.filter(_element => !combineElementIdList.includes(_element.id))\n\n const insertLevel = combineElementMaxLevel - combineElementList.length + 1\n newElementList.splice(insertLevel, 0, ...combineElementList)\n\n slidesStore.updateSlide({ 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 slidesStore.updateSlide({ elements: newElementList })\n\n // 取消组合后,需要重置激活元素状态\n // 默认重置为当前正在操作的元素,如果不存在则重置为空\n const handleElementIdList = handleElementId.value ? [handleElementId.value] : []\n mainStore.setActiveElementIdList(handleElementIdList)\n\n addHistorySnapshot()\n }\n\n return {\n canCombine,\n combineElements,\n uncombineElements,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\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 mainStore = useMainStore()\n const { activeElementIdList, activeElementList } = storeToRefs(mainStore)\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 mainStore.setEditorareaFocus(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 { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\n\r\nexport default () => {\r\n const mainStore = useMainStore()\r\n const { currentSlide } = storeToRefs(useSlidesStore())\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 mainStore.setActiveElementIdList(newActiveElementIdList)\r\n }\r\n\r\n return {\r\n selectAllElement,\r\n }\r\n}","import { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { PPTElement } from '@/types/slides'\r\nimport { KEYS } from '@/configs/hotkey'\r\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\r\n\r\nexport default () => {\r\n const slidesStore = useSlidesStore()\r\n const { activeElementIdList, activeGroupElementId } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(slidesStore)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 将元素向指定方向移动指定的距离\r\n * 组合元素成员中,存在被选中可独立操作的元素时,优先移动该元素。否则默认移动所有被选中的元素\r\n * @param command 移动方向\r\n * @param step 移动距离\r\n */\r\n const moveElement = (command: string, step = 1) => {\r\n let newElementList: PPTElement[] = []\r\n\r\n const move = (el: PPTElement) => {\r\n let { left, top } = el\r\n switch (command) {\r\n case KEYS.LEFT: \r\n left = left - step\r\n break\r\n case KEYS.RIGHT: \r\n left = left + step\r\n break\r\n case KEYS.UP: \r\n top = top - step\r\n break\r\n case KEYS.DOWN: \r\n top = top + step\r\n break\r\n default: break\r\n }\r\n return { ...el, left, top }\r\n }\r\n\r\n if (activeGroupElementId.value) {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeGroupElementId.value === el.id ? move(el) : el\r\n })\r\n }\r\n else {\r\n newElementList = currentSlide.value.elements.map(el => {\r\n return activeElementIdList.value.includes(el.id) ? move(el) : el\r\n })\r\n }\r\n\r\n slidesStore.updateSlide({ elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n moveElement,\r\n }\r\n}","import { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { ElementOrderCommands } from '@/types/edit'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n const { currentSlide } = storeToRefs(slidesStore)\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: ElementOrderCommands) => {\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 slidesStore.updateSlide({ 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 { useScreenStore, useSlidesStore } from '@/store'\nimport { enterFullscreen, exitFullscreen, isFullscreen } from '@/utils/fullscreen'\n\nexport default () => {\n const screenStore = useScreenStore()\n const slidesStore = useSlidesStore()\n\n // 进入放映状态(从当前页开始)\n const enterScreening = () => {\n enterFullscreen()\n screenStore.setScreening(true)\n }\n\n // 进入放映状态(从第一页开始)\n const enterScreeningFromStart = () => {\n slidesStore.updateSlideIndex(0)\n enterScreening()\n }\n\n // 退出放映状态\n const exitScreening = () => {\n screenStore.setScreening(false)\n if (isFullscreen()) exitFullscreen()\n }\n\n return {\n enterScreening,\n enterScreeningFromStart,\n exitScreening,\n }\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\n\nexport default () => {\n const mainStore = useMainStore()\n const { canvasPercentage } = storeToRefs(mainStore)\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 mainStore.setCanvasPercentage(percentage)\n }\n\n /**\n * 设置画笔百分比\n * @param percentage 百分比(小数形式,如0.8)\n */\n const setCanvasPercentage = (percentage: number) => {\n mainStore.setCanvasPercentage(percentage)\n }\n \n return {\n scaleCanvas,\n setCanvasPercentage,\n }\n}","import { onMounted, onUnmounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { ElementOrderCommands } from '@/types/edit'\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 mainStore = useMainStore()\n const keyboardStore = useKeyboardStore()\n const {\n activeElementIdList,\n disableHotkeys,\n handleElement,\n handleElementId,\n editorAreaFocus,\n thumbnailsFocus,\n } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(useSlidesStore())\n const { ctrlKeyState, shiftKeyState } = storeToRefs(keyboardStore)\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: ElementOrderCommands) => {\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 (!handleElementId.value) {\n const firstElement = currentSlide.value.elements[0]\n mainStore.setActiveElementIdList([firstElement.id])\n return\n }\n const currentIndex = currentSlide.value.elements.findIndex(el => el.id === handleElementId.value)\n const nextIndex = currentIndex >= currentSlide.value.elements.length - 1 ? 0 : currentIndex + 1\n const nextElementId = currentSlide.value.elements[nextIndex].id\n\n mainStore.setActiveElementIdList([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 && !ctrlKeyState.value) keyboardStore.setCtrlKeyState(true)\n if (shiftKey && !shiftKeyState.value) keyboardStore.setShiftKeyState(true)\n\n if (ctrlOrMetaKeyActive && key === KEYS.F) {\n e.preventDefault()\n enterScreening()\n keyboardStore.setCtrlKeyState(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 (ctrlKeyState.value) keyboardStore.setCtrlKeyState(false)\n if (shiftKeyState.value) keyboardStore.setShiftKeyState(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 { onMounted, onUnmounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport usePasteTextClipboardData from './usePasteTextClipboardData'\nimport useCreateElement from './useCreateElement'\n\nexport default () => {\n const { editorAreaFocus, thumbnailsFocus, disableHotkeys } = storeToRefs(useMainStore())\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}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e62abba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"editor-header\" }\nconst _hoisted_2 = { class: \"left\" }\nconst _hoisted_3 = { class: \"menu-item\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"文件\", -1))\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"导出 JSON\")\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"导出 PPTX\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"导出图片\")\nconst _hoisted_9 = { class: \"menu-item\" }\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"编辑\", -1))\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"撤销\")\nconst _hoisted_13 = /*#__PURE__*/_createTextVNode(\"重做\")\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\"添加页面\")\nconst _hoisted_15 = /*#__PURE__*/_createTextVNode(\"删除页面\")\nconst _hoisted_16 = /*#__PURE__*/_createTextVNode(\"重置幻灯片\")\nconst _hoisted_17 = { class: \"menu-item\" }\nconst _hoisted_18 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"演示\", -1))\nconst _hoisted_20 = /*#__PURE__*/_createTextVNode(\"从头开始\")\nconst _hoisted_21 = /*#__PURE__*/_createTextVNode(\"从当前页开始\")\nconst _hoisted_22 = { class: \"menu-item\" }\nconst _hoisted_23 = /*#__PURE__*/_createTextVNode()\nconst _hoisted_24 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"text\" }, \"帮助\", -1))\nconst _hoisted_25 = /*#__PURE__*/_createTextVNode(\"意见反馈\")\nconst _hoisted_26 = /*#__PURE__*/_createTextVNode(\"快捷键\")\nconst _hoisted_27 = { class: \"right\" }\nconst _hoisted_28 = {\n href: \"https://github.com/pipipi-pikachu/PPTist\",\n target: \"_blank\"\n}\nconst _hoisted_29 = { class: \"menu-item\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconFolderClose = _resolveComponent(\"IconFolderClose\")!\n const _component_MenuItem = _resolveComponent(\"MenuItem\")!\n const _component_Menu = _resolveComponent(\"Menu\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_IconEdit = _resolveComponent(\"IconEdit\")!\n const _component_IconPpt = _resolveComponent(\"IconPpt\")!\n const _component_IconHelpcenter = _resolveComponent(\"IconHelpcenter\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconGithub = _resolveComponent(\"IconGithub\")!\n const _component_HotkeyDoc = _resolveComponent(\"HotkeyDoc\")!\n const _component_Drawer = _resolveComponent(\"Drawer\")!\n const _component_ExportImgDialog = _resolveComponent(\"ExportImgDialog\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_FullscreenSpin = _resolveComponent(\"FullscreenSpin\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.exportJSON()))\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.exportPPTX()))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.exportImgDialogVisible = true))\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_IconFolderClose),\n _hoisted_4,\n _hoisted_5\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.undo()))\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.redo()))\n }, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.createSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.deleteSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.toggleGridLines()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.showGridLines ? '关闭网格线' : '打开网格线'), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.resetSlides()))\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_IconEdit),\n _hoisted_10,\n _hoisted_11\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.enterScreeningFromStart()))\n }, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.enterScreening()))\n }, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_17, [\n _createVNode(_component_IconPpt),\n _hoisted_18,\n _hoisted_19\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Dropdown, { trigger: ['click'] }, {\n overlay: _withCtx(() => [\n _createVNode(_component_Menu, null, {\n default: _withCtx(() => [\n _createVNode(_component_MenuItem, {\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.goIssues()))\n }, {\n default: _withCtx(() => [\n _hoisted_25\n ]),\n _: 1\n }),\n _createVNode(_component_MenuItem, {\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.hotkeyDrawerVisible = true))\n }, {\n default: _withCtx(() => [\n _hoisted_26\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_22, [\n _createVNode(_component_IconHelpcenter),\n _hoisted_23,\n _hoisted_24\n ])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_27, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n title: \"幻灯片放映\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"menu-item\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.enterScreening()))\n }, [\n _createVNode(_component_IconPpt, {\n size: \"18\",\n fill: \"#666\",\n style: {\"margin-top\":\"2px\"}\n })\n ])\n ]),\n _: 1\n }),\n _createElementVNode(\"a\", _hoisted_28, [\n _createElementVNode(\"div\", _hoisted_29, [\n _createVNode(_component_IconGithub, {\n size: \"18\",\n fill: \"#666\"\n })\n ])\n ])\n ]),\n _createVNode(_component_Drawer, {\n width: \"320\",\n placement: \"right\",\n visible: _ctx.hotkeyDrawerVisible,\n onClose: _cache[14] || (_cache[14] = ($event: any) => (_ctx.hotkeyDrawerVisible = false))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_HotkeyDoc)\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Modal, {\n visible: _ctx.exportImgDialogVisible,\n \"onUpdate:visible\": _cache[16] || (_cache[16] = ($event: any) => ((_ctx.exportImgDialogVisible) = $event)),\n footer: null,\n centered: \"\",\n closable: false,\n width: 680,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_ExportImgDialog, {\n onClose: _cache[15] || (_cache[15] = ($event: any) => (_ctx.exportImgDialogVisible = false))\n })\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_FullscreenSpin, {\n loading: _ctx.exporting,\n tip: \"正在导出...\"\n }, null, 8, [\"loading\"])\n ]))\n}","export const childlessTags = ['style', 'script', 'template']\n\nexport const closingTags = ['html', 'head', 'body', 'p', 'dt', 'dd', 'li', 'option', 'thead', 'th', 'tbody', 'tr', 'td', 'tfoot', 'colgroup']\n\nexport const closingTagAncestorBreakers = {\n li: ['ul', 'ol', 'menu'],\n dt: ['dl'],\n dd: ['dl'],\n tbody: ['table'],\n thead: ['table'],\n tfoot: ['table'],\n tr: ['table'],\n td: ['table'],\n}\n\nexport const voidTags = ['!doctype', 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']","import { startsWith, endsWith } from 'lodash'\nimport { Token } from './types'\nimport { childlessTags } from './tags'\n\ninterface State {\n str: string;\n position: number;\n tokens: Token[];\n}\n\nconst jumpPosition = (state: State, end: number) => {\n const len = end - state.position\n movePositopn(state, len)\n}\n\nconst movePositopn = (state: State, len: number) => {\n state.position = state.position + len\n}\n\nconst findTextEnd = (str: string, index: number) => {\n const isEnd = false\n while (!isEnd) {\n const textEnd = str.indexOf('<', index)\n if (textEnd === -1) {\n return textEnd\n }\n const char = str.charAt(textEnd + 1)\n if (char === '/' || char === '!' || /[A-Za-z0-9]/.test(char)) {\n return textEnd\n }\n index = textEnd + 1\n }\n return -1\n}\n\nconst lexText = (state: State) => {\n const { str } = state\n let textEnd = findTextEnd(str, state.position)\n if (textEnd === state.position) return\n if (textEnd === -1) {\n textEnd = str.length\n }\n\n const content = str.slice(state.position, textEnd)\n jumpPosition(state, textEnd)\n\n state.tokens.push({\n type: 'text', \n content, \n })\n}\n\nconst lexComment = (state: State) => {\n const { str } = state\n\n movePositopn(state, 4)\n let contentEnd = str.indexOf('-->', state.position)\n let commentEnd = contentEnd + 3\n if (contentEnd === -1) {\n contentEnd = commentEnd = str.length\n }\n\n const content = str.slice(state.position, contentEnd)\n jumpPosition(state, commentEnd)\n\n state.tokens.push({\n type: 'comment',\n content,\n })\n}\n\nconst lexTagName = (state: State) => {\n const { str } = state\n const len = str.length\n let start = state.position\n\n while (start < len) {\n const char = str.charAt(start)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (isTagChar) break\n start++\n }\n\n let end = start + 1\n while (end < len) {\n const char = str.charAt(end)\n const isTagChar = !(/\\s/.test(char) || char === '/' || char === '>')\n if (!isTagChar) break\n end++\n }\n\n jumpPosition(state, end)\n const tagName = str.slice(start, end)\n state.tokens.push({\n type: 'tag',\n content: tagName\n })\n return tagName\n}\n\nconst lexTagAttributes = (state: State) => {\n const { str, tokens } = state\n let cursor = state.position\n let quote = null\n let wordBegin = cursor\n const words = []\n const len = str.length\n while (cursor < len) {\n const char = str.charAt(cursor)\n if (quote) {\n const isQuoteEnd = char === quote\n if (isQuoteEnd) quote = null\n cursor++\n continue\n }\n\n const isTagEnd = char === '/' || char === '>'\n if (isTagEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n break\n }\n\n const isWordEnd = /\\s/.test(char)\n if (isWordEnd) {\n if (cursor !== wordBegin) words.push(str.slice(wordBegin, cursor))\n wordBegin = cursor + 1\n cursor++\n continue\n }\n\n const isQuoteStart = char === '\\'' || char === '\"'\n if (isQuoteStart) {\n quote = char\n cursor++\n continue\n }\n\n cursor++\n }\n jumpPosition(state, cursor)\n\n const type = 'attribute'\n for (let i = 0; i < words.length; i++) {\n const word = words[i]\n\n const isNotPair = word.indexOf('=') === -1\n if (isNotPair) {\n const secondWord = words[i + 1]\n if (secondWord && startsWith(secondWord, '=')) {\n if (secondWord.length > 1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n const thirdWord = words[i + 2]\n i += 1\n if (thirdWord) {\n const newWord = word + '=' + thirdWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n }\n }\n if (endsWith(word, '=')) {\n const secondWord = words[i + 1]\n if (secondWord && secondWord.indexOf('=') === -1) {\n const newWord = word + secondWord\n tokens.push({ type, content: newWord })\n i += 1\n continue\n }\n\n const newWord = word.slice(0, -1)\n tokens.push({ type, content: newWord })\n continue\n }\n\n tokens.push({ type, content: word })\n }\n}\n\nconst lexSkipTag = (tagName: string, state: State) => {\n const { str, tokens } = state\n const safeTagName = tagName.toLowerCase()\n const len = str.length\n let index = state.position\n \n while (index < len) {\n const nextTag = str.indexOf(' {\n const { str } = state\n const secondChar = str.charAt(state.position + 1)\n const tagStartClose = secondChar === '/'\n movePositopn(state, tagStartClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-start',\n close: tagStartClose,\n })\n\n const tagName = lexTagName(state)\n lexTagAttributes(state)\n\n const firstChar = str.charAt(state.position)\n const tagEndClose = firstChar === '/'\n movePositopn(state, tagEndClose ? 2 : 1)\n state.tokens.push({\n type: 'tag-end',\n close: tagEndClose,\n })\n return tagName\n}\n\nconst lex = (state: State) => {\n const str = state.str\n const len = str.length\n\n while (state.position < len) {\n const start = state.position\n lexText(state)\n\n if (state.position === start) {\n const isComment = startsWith(str, '!--', start + 1)\n if (isComment) lexComment(state)\n else {\n const tagName = lexTag(state)\n const safeTag = tagName.toLowerCase()\n if (childlessTags.includes(safeTag)) lexSkipTag(tagName, state)\n }\n }\n }\n}\n\nexport const lexer = (str: string): Token[] => {\n const state = {\n str,\n position: 0,\n tokens: [],\n }\n lex(state)\n return state.tokens\n}","import { Token, HTMLNode, TagToken, NormalElement, TagEndToken, AttributeToken, TextToken } from './types'\nimport { closingTags, closingTagAncestorBreakers, voidTags } from './tags'\n\ninterface StackItem {\n tagName: string | null;\n children: HTMLNode[];\n}\n\ninterface State {\n stack: StackItem[];\n cursor: number;\n tokens: Token[];\n}\n\nexport const parser = (tokens: Token[]) => {\n const root: StackItem = { tagName: null, children: [] }\n const state: State = { tokens, cursor: 0, stack: [root] }\n parse(state)\n return root.children\n}\n\nexport const hasTerminalParent = (tagName: string, stack: StackItem[]) => {\n const tagParents = closingTagAncestorBreakers[tagName]\n if (tagParents) {\n let currentIndex = stack.length - 1\n while (currentIndex >= 0) {\n const parentTagName = stack[currentIndex].tagName\n if (parentTagName === tagName) break\n if (tagParents.includes(parentTagName)) return true\n currentIndex--\n }\n }\n return false\n}\n\nexport const rewindStack = (stack: StackItem[], newLength: number) => {\n stack.splice(newLength)\n}\n\nexport const parse = (state: State) => {\n const { stack, tokens } = state\n let { cursor } = state\n let nodes = stack[stack.length - 1].children\n const len = tokens.length\n \n while (cursor < len) {\n const token = tokens[cursor]\n if (token.type !== 'tag-start') {\n nodes.push(token as TextToken)\n cursor++\n continue\n }\n\n const tagToken = tokens[++cursor] as TagToken\n cursor++\n const tagName = tagToken.content.toLowerCase()\n if (token.close) {\n let index = stack.length\n let shouldRewind = false\n while (--index > -1) {\n if (stack[index].tagName === tagName) {\n shouldRewind = true\n break\n }\n }\n while (cursor < len) {\n if (tokens[cursor].type !== 'tag-end') break\n cursor++\n }\n if (shouldRewind) {\n rewindStack(stack, index)\n break\n } \n else continue\n }\n\n const isClosingTag = closingTags.includes(tagName)\n let shouldRewindToAutoClose = isClosingTag\n if (shouldRewindToAutoClose) {\n shouldRewindToAutoClose = !hasTerminalParent(tagName, stack)\n }\n\n if (shouldRewindToAutoClose) {\n let currentIndex = stack.length - 1\n while (currentIndex > 0) {\n if (tagName === stack[currentIndex].tagName) {\n rewindStack(stack, currentIndex)\n const previousIndex = currentIndex - 1\n nodes = stack[previousIndex].children\n break\n }\n currentIndex = currentIndex - 1\n }\n }\n\n const attributes = []\n let tagEndToken: TagEndToken | undefined\n while (cursor < len) {\n const _token = tokens[cursor]\n if (_token.type === 'tag-end') {\n tagEndToken = _token\n break\n }\n attributes.push((_token as AttributeToken).content)\n cursor++\n }\n\n if (!tagEndToken) break\n\n cursor++\n const children: HTMLNode[] = []\n const elementNode: NormalElement = {\n type: 'element',\n tagName: tagToken.content,\n attributes,\n children,\n }\n nodes.push(elementNode)\n\n const hasChildren = !(tagEndToken.close || voidTags.includes(tagName))\n if (hasChildren) {\n stack.push({tagName, children})\n const innerState = { tokens, cursor, stack }\n parse(innerState)\n cursor = innerState.cursor\n }\n }\n state.cursor = cursor\n}","import { HTMLNode, CommentOrTextAST, ElementAST, AST } from './types'\n\nexport const splitHead = (str: string, sep: string) => {\n const idx = str.indexOf(sep)\n if (idx === -1) return [str]\n return [str.slice(0, idx), str.slice(idx + sep.length)]\n}\n\nconst unquote = (str: string) => {\n const car = str.charAt(0)\n const end = str.length - 1\n const isQuoteStart = car === '\"' || car === \"'\"\n if (isQuoteStart && car === str.charAt(end)) {\n return str.slice(1, end)\n }\n return str\n}\n\nconst formatAttributes = (attributes: string[]) => {\n return attributes.map(attribute => {\n const parts = splitHead(attribute.trim(), '=')\n const key = parts[0]\n const value = typeof parts[1] === 'string' ? unquote(parts[1]) : null\n return { key, value }\n })\n}\n\nexport const format = (nodes: HTMLNode[]): AST[] => {\n return nodes.map(node => { \n if (node.type === 'element') {\n const children = format(node.children)\n const item: ElementAST = {\n type: 'element',\n tagName: node.tagName.toLowerCase(),\n attributes: formatAttributes(node.attributes),\n children,\n }\n return item\n }\n\n const item: CommentOrTextAST = {\n type: node.type,\n content: node.content,\n }\n return item\n })\n}","// 参考:https://github.com/andrejewski/himalaya 用TypeScript重写并简化部分功能\n\nimport { lexer } from './lexer'\nimport { parser } from './parser'\nimport { format } from './format'\nimport { toHTML } from './stringify'\nimport type { AST } from './types'\n\nexport const toAST = (str: string) => {\n const tokens = lexer(str)\n const nodes = parser(tokens)\n return format(nodes)\n}\n\nexport { toHTML, AST }","import { SVGPathData } from 'svg-pathdata'\nimport arcToBezier from 'svg-arc-to-cubic-bezier'\n\nconst typeMap = {\n 1: 'Z',\n 2: 'M',\n 4: 'H',\n 8: 'V',\n 16: 'L',\n 32: 'C',\n 64: 'S',\n 128: 'Q',\n 256: 'T',\n 512: 'A',\n}\n\n/**\n * 简单解析SVG路径\n * @param d SVG path d属性\n */\nexport const parseSvgPath = (d: string) => {\n const pathData = new SVGPathData(d)\n\n const ret = pathData.commands.map(item => {\n return { ...item, type: typeMap[item.type] }\n })\n return ret\n}\n\nexport type SvgPath = ReturnType\n\n/**\n * 解析SVG路径,并将圆弧(A)类型的路径转为三次贝塞尔(C)类型的路径\n * @param d SVG path d属性\n */\nexport const toPoints = (d: string) => {\n const pathData = new SVGPathData(d)\n \n const points = []\n for (const item of pathData.commands) {\n const type = typeMap[item.type]\n\n if (item.type === 2 || item.type === 16) {\n points.push({\n x: item.x,\n y: item.y,\n relative: item.relative,\n type,\n })\n }\n if (item.type === 32) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'cubic',\n x1: item.x1,\n y1: item.y1,\n x2: item.x2,\n y2: item.y2,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 128) {\n points.push({\n x: item.x, \n y: item.y,\n curve: {\n type: 'quadratic',\n x1: item.x1,\n y1: item.y1,\n },\n relative: item.relative,\n type,\n })\n }\n else if (item.type === 512) {\n const lastPoint = points[points.length - 1]\n if (!['M', 'L', 'Q', 'C'].includes(lastPoint.type)) continue\n\n const cubicBezierPoints = arcToBezier({\n px: lastPoint.x as number,\n py: lastPoint.y as number,\n cx: item.x,\n cy: item.y,\n rx: item.rX,\n ry: item.rY,\n xAxisRotation: item.xRot,\n largeArcFlag: item.lArcFlag,\n sweepFlag: item.sweepFlag,\n })\n for (const cbPoint of cubicBezierPoints) {\n points.push({\n x: cbPoint.x, \n y: cbPoint.y,\n curve: {\n type: 'cubic',\n x1: cbPoint.x1,\n y1: cbPoint.y1,\n x2: cbPoint.x2,\n y2: cbPoint.y2,\n },\n relative: false,\n type: 'C',\n })\n }\n }\n else if (item.type === 1) {\n points.push({ close: true, type })\n }\n else continue\n }\n return points\n}\n\nexport type SvgPoints = ReturnType","// svg转base64图片,参考:https://github.com/scriptex/svg64\n\nconst characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nconst PREFIX = 'data:image/svg+xml;base64,'\n\nconst utf8Encode = (string: string) => {\n string = string.replace(/\\r\\n/g, '\\n')\n let utftext = ''\n\n for (let n = 0; n < string.length; n++) {\n const c = string.charCodeAt(n)\n\n if (c < 128) {\n utftext += String.fromCharCode(c)\n }\n else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode((c >> 6) | 192)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n else {\n utftext += String.fromCharCode((c >> 12) | 224)\n utftext += String.fromCharCode(((c >> 6) & 63) | 128)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n }\n\n return utftext\n}\n\nconst encode = (input: string) => {\n let output = ''\n let chr1, chr2, chr3, enc1, enc2, enc3, enc4\n let i = 0\n input = utf8Encode(input)\n while (i < input.length) {\n chr1 = input.charCodeAt(i++)\n chr2 = input.charCodeAt(i++)\n chr3 = input.charCodeAt(i++)\n enc1 = chr1 >> 2\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)\n enc4 = chr3 & 63\n if (isNaN(chr2)) enc3 = enc4 = 64\n else if (isNaN(chr3)) enc4 = 64\n output = output + characters.charAt(enc1) + characters.charAt(enc2) + characters.charAt(enc3) + characters.charAt(enc4)\n }\n return output\n}\n\nexport const svg2Base64 = (element: Element) => {\n const XMLS = new XMLSerializer()\n const svg = XMLS.serializeToString(element)\n\n return PREFIX + encode(svg)\n}","import { ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { trim } from 'lodash'\nimport { saveAs } from 'file-saver'\nimport pptxgen from 'pptxgenjs'\nimport tinycolor from 'tinycolor2'\nimport { toPng, toJpeg } from 'html-to-image'\nimport { useSlidesStore } from '@/store'\nimport { PPTElementOutline, PPTElementShadow } from '@/types/slides'\nimport { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element'\nimport { AST, toAST } from '@/utils/htmlParser'\nimport { SvgPoints, toPoints } from '@/utils/svgPathParser'\nimport { svg2Base64 } from '@/utils/svg2Base64'\nimport { message } from 'ant-design-vue'\n\ninterface ExportImageConfig {\n quality: number;\n width: number;\n filter: (node: HTMLElement) => boolean;\n fontEmbedCSS?: string;\n}\n\nexport default () => {\n const { slides } = storeToRefs(useSlidesStore())\n\n const exporting = ref(false)\n\n // 导出图片\n const exportImage = (domRef: HTMLElement, format: string, quality: number, ignoreWebfont = true) => {\n exporting.value = true\n const toImage = format === 'png' ? toPng : toJpeg\n\n setTimeout(() => {\n if (!domRef) return\n\n const filter = (node: HTMLElement) => {\n if (node.tagName && node.tagName.toUpperCase() === 'FOREIGNOBJECT') return false\n return true\n }\n\n const config: ExportImageConfig = {\n quality,\n width: 1600,\n filter,\n }\n\n if (ignoreWebfont) config.fontEmbedCSS = ''\n\n toImage(domRef, config).then(dataUrl => {\n exporting.value = false\n saveAs(dataUrl, `pptist_slides.${format}`)\n }).catch(() => {\n exporting.value = false\n message.error('导出图片失败')\n })\n }, 200)\n }\n \n // 导出JSON文件\n const exportJSON = () => {\n const blob = new Blob([JSON.stringify(slides.value)], { type: '' })\n saveAs(blob, 'pptist_slides.json')\n }\n\n // 格式化颜色值为 透明度 + HexString,供pptxgenjs使用\n const formatColor = (_color: string) => {\n const c = tinycolor(_color)\n const alpha = c.getAlpha()\n const color = alpha === 0 ? '#ffffff' : c.setAlpha(1).toHexString()\n return {\n alpha,\n color,\n }\n }\n\n type FormatColor = ReturnType\n\n // 将HTML字符串格式化为pptxgenjs所需的格式\n // 核心思路:将HTML字符串按样式分片平铺,每个片段需要继承祖先元素的样式信息,遇到块级元素需要换行\n const formatHTML = (html: string) => {\n const ast = toAST(html)\n\n const slices: pptxgen.TextProps[] = []\n const parse = (obj: AST[], baseStyleObj = {}) => {\n for (const item of obj) {\n if ('tagName' in item && ['div', 'li', 'p'].includes(item.tagName) && slices.length) {\n const lastSlice = slices[slices.length - 1]\n if (!lastSlice.options) lastSlice.options = {}\n lastSlice.options.breakLine = true\n }\n\n const styleObj = { ...baseStyleObj }\n const styleAttr = 'attributes' in item ? item.attributes.find(attr => attr.key === 'style') : null\n if (styleAttr && styleAttr.value) {\n const styleArr = styleAttr.value.split(';')\n for (const styleItem of styleArr) {\n const [_key, _value] = styleItem.split(': ')\n const [key, value] = [trim(_key), trim(_value)]\n if (key && value) styleObj[key] = value\n }\n }\n\n if ('tagName' in item) {\n if (item.tagName === 'ul') styleObj['list-type'] = 'ul'\n if (item.tagName === 'ol') styleObj['list-type'] = 'ol'\n }\n\n if ('tagName' in item) {\n if (item.tagName === 'em') {\n styleObj['font-style'] = 'italic'\n }\n if (item.tagName === 'strong') {\n styleObj['font-weight'] = 'bold'\n }\n if (item.tagName === 'sup') {\n styleObj['vertical-align'] = 'super'\n }\n if (item.tagName === 'sub') {\n styleObj['vertical-align'] = 'sub'\n }\n if (item.tagName === 'a') {\n const attr = item.attributes.find(attr => attr.key === 'href')\n styleObj['href'] = attr?.value || ''\n }\n }\n\n if ('tagName' in item && item.tagName === 'br') {\n slices.push({ text: '', options: { breakLine: true } })\n }\n else if ('content' in item) {\n const text = item.content.replace(/ /g, ' ').replace(/>/g, '>').replace(/</g, '<').replace(/&/g, '&').replace(/\\n/g, '')\n const options: pptxgen.TextPropsOptions = {}\n\n if (styleObj['font-size']) {\n options.fontSize = parseInt(styleObj['font-size']) * 0.75\n }\n if (styleObj['color']) {\n options.color = formatColor(styleObj['color']).color\n }\n if (styleObj['background-color']) {\n options.highlight = formatColor(styleObj['background-color']).color\n }\n if (styleObj['text-decoration-line']) {\n if (styleObj['text-decoration-line'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration-line'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['text-decoration']) {\n if (styleObj['text-decoration'].indexOf('underline') !== -1) {\n options.underline = {\n color: options.color || '#000000',\n style: 'sng',\n }\n }\n if (styleObj['text-decoration'].indexOf('line-through') !== -1) {\n options.strike = 'sngStrike'\n }\n }\n if (styleObj['vertical-align']) {\n if (styleObj['vertical-align'] === 'super') options.superscript = true\n if (styleObj['vertical-align'] === 'sub') options.subscript = true\n }\n if (styleObj['text-align']) options.align = styleObj['text-align']\n if (styleObj['font-weight']) options.bold = styleObj['font-weight'] === 'bold'\n if (styleObj['font-style']) options.italic = styleObj['font-style'] === 'italic'\n if (styleObj['font-family']) options.fontFace = styleObj['font-family']\n if (styleObj['href']) options.hyperlink = { url: styleObj['href'] }\n\n slices.push({ text, options })\n }\n else if ('children' in item) parse(item.children, styleObj)\n\n if ('tagName' in item && item.tagName === 'li') {\n const slice = slices[slices.length - 1]\n if (!slice.options) slice.options = {}\n if (styleObj['list-type'] === 'ol') slice.options.bullet = { type: 'number', indent: 20 * 0.75 }\n if (styleObj['list-type'] === 'ul') slice.options.bullet = { indent: 20 * 0.75 }\n }\n }\n }\n parse(ast)\n return slices\n }\n\n type Points = Array<\n | { x: number; y: number; moveTo?: boolean }\n | { x: number; y: number; curve: { type: 'arc'; hR: number; wR: number; stAng: number; swAng: number } }\n | { x: number; y: number; curve: { type: 'quadratic'; x1: number; y1: number } }\n | { x: number; y: number; curve: { type: 'cubic'; x1: number; y1: number; x2: number; y2: number } }\n | { close: true }\n >\n\n // 将SVG路径信息格式化为pptxgenjs所需要的格式\n const formatPoints = (points: SvgPoints, scale = { x: 1, y: 1 }): Points => {\n return points.map(point => {\n if (point.close !== undefined) {\n return { close: true }\n }\n else if (point.type === 'M') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n moveTo: true,\n }\n }\n else if (point.curve) {\n if (point.curve.type === 'cubic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'cubic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n x2: (point.curve.x2 as number) / 100 * scale.x,\n y2: (point.curve.y2 as number) / 100 * scale.y,\n },\n }\n }\n else if (point.curve.type === 'quadratic') {\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n curve: {\n type: 'quadratic',\n x1: (point.curve.x1 as number) / 100 * scale.x,\n y1: (point.curve.y1 as number) / 100 * scale.y,\n },\n }\n }\n }\n return {\n x: point.x / 100 * scale.x,\n y: point.y / 100 * scale.y,\n }\n })\n }\n\n // 获取阴影配置\n const getShadowOption = (shadow: PPTElementShadow): pptxgen.ShadowProps => {\n const c = formatColor(shadow.color)\n return {\n type: 'outer',\n color: c.color.replace('#', ''),\n opacity: c.alpha,\n blur: shadow.blur * 0.75,\n offset: (shadow.h + shadow.v) / 2 * 0.75,\n angle: 45,\n }\n }\n\n // 获取边框配置\n const getOutlineOption = (outline: PPTElementOutline): pptxgen.ShapeLineProps => {\n const c = formatColor(outline?.color || '#000000')\n return {\n color: c.color, \n transparency: (1 - c.alpha) * 100,\n width: (outline.width || 1) * 0.75, \n dashType: outline.style === 'solid' ? 'solid' : 'dash',\n }\n }\n\n // 导出PPTX文件\n const exportPPTX = () => {\n exporting.value = true\n const pptx = new pptxgen()\n\n for (const slide of slides.value) {\n const pptxSlide = pptx.addSlide()\n\n if (slide.background) {\n const background = slide.background\n if (background.type === 'image' && background.image) {\n pptxSlide.background = { data: background.image }\n }\n else if (background.type === 'solid' && background.color) {\n const c = formatColor(background.color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n else if (background.type === 'gradient' && background.gradientColor) {\n const [color1, color2] = background.gradientColor\n const color = tinycolor.mix(color1, color2).toHexString()\n const c = formatColor(color)\n pptxSlide.background = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n }\n\n if (!slide.elements) continue\n\n for (const el of slide.elements) {\n if (el.type === 'text') {\n const textProps = formatHTML(el.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: 'middle',\n margin: 10 * 0.75,\n lineSpacingMultiple: 1.5 / 1.2,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.wordSpace) options.charSpacing = el.wordSpace * 0.75\n if (el.lineHeight) options.lineSpacingMultiple = el.lineHeight / 1.2\n if (el.fill) {\n const c = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n options.fill = { color: c.color, transparency: (1 - c.alpha * opacity) * 100 }\n }\n if (el.defaultColor) options.color = formatColor(el.defaultColor).color\n if (el.defaultFontName) options.fontFace = el.defaultFontName\n if (el.shadow) options.shadow = getShadowOption(el.shadow)\n if (el.outline?.width) options.line = getOutlineOption(el.outline)\n if (el.opacity !== undefined) options.transparency = (1 - el.opacity) * 100\n\n pptxSlide.addText(textProps, options)\n }\n\n else if (el.type === 'image') {\n const options: pptxgen.ImageProps = {\n path: el.src,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.rotate) options.rotate = el.rotate\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n if (el.filters?.opacity) options.transparency = 100 - parseInt(el.filters?.opacity)\n if (el.clip) {\n if (el.clip.shape === 'ellipse') options.rounding = true\n\n const range = el.clip.range\n\n const originW = el.width / ((range[1][0] - range[0][0]) / 100)\n const originH = el.height / ((range[1][1] - range[0][1]) / 100)\n options.w = originW / 100\n options.h = originH / 100\n\n const x = range[0][0] / 100 * originW / 100\n const y = range[0][1] / 100 * originH / 100\n const w = (range[1][0] - range[0][0]) / 100 * originW / 100\n const h = (range[1][1] - range[0][1]) / 100 * originH / 100\n options.sizing = { type: 'crop', w, h, x, y }\n }\n\n pptxSlide.addImage(options)\n }\n\n else if (el.type === 'shape') {\n if (el.special) {\n const svgRef = document.querySelector(`.thumbnail-list .base-element-${el.id} svg`) as HTMLElement\n const base64SVG = svg2Base64(svgRef)\n\n const options: pptxgen.ImageProps = {\n data: base64SVG,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n\n pptxSlide.addImage(options)\n }\n else {\n const scale = {\n x: el.width / el.viewBox[0],\n y: el.height / el.viewBox[1],\n }\n const points = formatPoints(toPoints(el.path), scale)\n \n const fillColor = formatColor(el.fill)\n const opacity = el.opacity === undefined ? 1 : el.opacity\n \n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fill: { color: fillColor.color, transparency: (1 - fillColor.alpha * opacity) * 100 },\n points,\n }\n if (el.flipH) options.flipH = el.flipH\n if (el.flipV) options.flipV = el.flipV\n if (el.shadow) options.shadow = getShadowOption(el.shadow)\n if (el.outline?.width) options.line = getOutlineOption(el.outline)\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n if (el.text) {\n const textProps = formatHTML(el.text.content)\n\n const options: pptxgen.TextPropsOptions = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n fontSize: 20 * 0.75,\n fontFace: '微软雅黑',\n color: '#000000',\n valign: el.text.align,\n }\n if (el.rotate) options.rotate = el.rotate\n if (el.text.defaultColor) options.color = formatColor(el.text.defaultColor).color\n if (el.text.defaultFontName) options.fontFace = el.text.defaultFontName\n\n pptxSlide.addText(textProps, options)\n }\n }\n\n else if (el.type === 'line') {\n const path = getLineElementPath(el)\n const points = formatPoints(toPoints(path))\n const { minX, maxX, minY, maxY } = getElementRange(el)\n const c = formatColor(el.color)\n\n const options: pptxgen.ShapeProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: (maxX - minX) / 100,\n h: (maxY - minY) / 100,\n line: {\n color: c.color, \n transparency: (1 - c.alpha) * 100,\n width: el.width * 0.75, \n dashType: el.style === 'solid' ? 'solid' : 'dash',\n beginArrowType: el.points[0] ? 'arrow' : 'none',\n endArrowType: el.points[1] ? 'arrow' : 'none',\n },\n points,\n }\n if (el.shadow) options.shadow = getShadowOption(el.shadow)\n\n pptxSlide.addShape('custGeom' as pptxgen.ShapeType, options)\n }\n\n else if (el.type === 'chart') {\n const chartData = []\n for (let i = 0; i < el.data.series.length; i++) {\n const item = el.data.series[i]\n chartData.push({\n name: `系列${i + 1}`,\n labels: el.data.labels,\n values: item,\n })\n }\n\n let chartColors: string[] = []\n if (el.themeColor.length === 10) chartColors = el.themeColor.map(color => formatColor(color).color)\n else if (el.themeColor.length === 1) chartColors = tinycolor(el.themeColor[0]).analogous(10).map(color => formatColor(color.toHexString()).color)\n else {\n const len = el.themeColor.length\n const supplement = tinycolor(el.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n chartColors = [...el.themeColor.slice(0, len - 1), ...supplement].map(color => formatColor(color).color)\n }\n \n const options: pptxgen.IChartOpts = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n chartColors: el.chartType === 'pie' ? chartColors : chartColors.slice(0, el.data.series.length),\n }\n\n if (el.fill) options.fill = formatColor(el.fill).color\n if (el.legend) {\n options.showLegend = true\n options.legendPos = el.legend === 'top' ? 't' : 'b'\n options.legendColor = formatColor(el.gridColor || '#000000').color\n options.legendFontSize = 14 * 0.75\n }\n\n let type = pptx.ChartType.bar\n if (el.chartType === 'bar') {\n type = pptx.ChartType.bar\n options.barDir = el.options?.horizontalBars ? 'bar' : 'col'\n }\n else if (el.chartType === 'line') {\n if (el.options?.showArea) type = pptx.ChartType.area\n else if (el.options?.showLine === false) {\n type = pptx.ChartType.scatter\n\n chartData.unshift({ name: 'X-Axis', values: Array(el.data.series[0].length).fill(0).map((v, i) => i) })\n options.lineSize = 0\n }\n else type = pptx.ChartType.line\n\n if (el.options?.lineSmooth) options.lineSmooth = true\n }\n else if (el.chartType === 'pie') {\n if (el.options?.donut) {\n type = pptx.ChartType.doughnut\n options.holeSize = 75\n }\n else type = pptx.ChartType.pie\n }\n \n pptxSlide.addChart(type, chartData, options)\n }\n\n else if (el.type === 'table') {\n const hiddenCells = []\n for (let i = 0; i < el.data.length; i++) {\n const rowData = el.data[i]\n\n for (let j = 0; j < rowData.length; j++) {\n const cell = rowData[j]\n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) hiddenCells.push(`${row}_${col}`)\n }\n }\n }\n }\n\n const tableData = []\n\n const theme = el.theme\n let themeColor: FormatColor | null = null\n let subThemeColors: FormatColor[] = []\n if (theme) {\n themeColor = formatColor(theme.color)\n subThemeColors = getTableSubThemeColor(theme.color).map(item => formatColor(item))\n }\n\n for (let i = 0; i < el.data.length; i++) {\n const row = el.data[i]\n const _row = []\n\n for (let j = 0; j < row.length; j++) {\n const cell = row[j]\n const cellOptions: pptxgen.TableCellProps = {\n colspan: cell.colspan,\n rowspan: cell.rowspan,\n bold: cell.style?.bold || false,\n italic: cell.style?.em || false,\n underline: { style: cell.style?.underline ? 'sng' : 'none' },\n align: cell.style?.align || 'left',\n valign: 'middle',\n fontFace: cell.style?.fontname || '微软雅黑',\n fontSize: (cell.style?.fontsize ? parseInt(cell.style?.fontsize) : 14) * 0.75,\n }\n if (theme && themeColor) {\n let c: FormatColor\n if (i % 2 === 0) c = subThemeColors[1]\n else c = subThemeColors[0]\n\n if (theme.rowHeader && i === 0) c = themeColor\n else if (theme.rowFooter && i === el.data.length - 1) c = themeColor\n else if (theme.colHeader && j === 0) c = themeColor\n else if (theme.colFooter && j === row.length - 1) c = themeColor\n\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.backcolor) {\n const c = formatColor(cell.style.backcolor)\n cellOptions.fill = { color: c.color, transparency: (1 - c.alpha) * 100 }\n }\n if (cell.style?.color) cellOptions.color = formatColor(cell.style.color).color\n\n if (!hiddenCells.includes(`${i}_${j}`)) {\n _row.push({\n text: cell.text,\n options: cellOptions,\n })\n }\n }\n if (_row.length) tableData.push(_row)\n }\n\n const options: pptxgen.TableProps = {\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n colW: el.colWidths.map(item => el.width * item / 100),\n }\n if (el.theme) options.fill = { color: '#ffffff' }\n if (el.outline.width && el.outline.color) {\n options.border = {\n type: el.outline.style === 'solid' ? 'solid' : 'dash',\n pt: el.outline.width * 0.75,\n color: formatColor(el.outline.color).color,\n }\n }\n\n pptxSlide.addTable(tableData, options)\n }\n \n else if (el.type === 'latex') {\n const svgRef = document.querySelector(`.thumbnail-list .base-element-${el.id} svg`) as HTMLElement\n const base64SVG = svg2Base64(svgRef)\n\n const options: pptxgen.ImageProps = {\n data: base64SVG,\n x: el.left / 100,\n y: el.top / 100,\n w: el.width / 100,\n h: el.height / 100,\n }\n if (el.link) {\n const { type, target } = el.link\n if (type === 'web') options.hyperlink = { url: target }\n else if (type === 'slide') {\n const index = slides.value.findIndex(slide => slide.id === target)\n if (index !== -1) options.hyperlink = { slide: index + 1 }\n }\n }\n\n pptxSlide.addImage(options)\n }\n }\n }\n pptx.writeFile({ fileName: `pptist.pptx` }).then(() => exporting.value = false).catch(() => {\n exporting.value = false\n message.error('导出失败')\n })\n }\n\n return {\n exporting,\n exportImage,\n exportJSON,\n exportPPTX,\n }\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b6d79f64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"hotkey-doc\" }\nconst _hoisted_2 = { class: \"title\" }\nconst _hoisted_3 = { class: \"label\" }\nconst _hoisted_4 = { class: \"value\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.hotkeys, (item) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: item.type\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(item.type), 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.children, (hotkey) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"hotkey-item\",\n key: hotkey.label\n }, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(hotkey.label), 1),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(hotkey.value), 1)\n ]))\n }), 128))\n ], 64))\n }), 128))\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { HOTKEY_DOC } from '@/configs/hotkey'\n\nexport default defineComponent({\n name: 'hotkey-doc',\n setup() {\n return {\n hotkeys: HOTKEY_DOC,\n }\n },\n})\n","import { render } from \"./HotkeyDoc.vue?vue&type=template&id=b6d79f64&scoped=true&ts=true\"\nimport script from \"./HotkeyDoc.vue?vue&type=script&lang=ts\"\nexport * from \"./HotkeyDoc.vue?vue&type=script&lang=ts\"\n\nimport \"./HotkeyDoc.vue?vue&type=style&index=0&id=b6d79f64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b6d79f64\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4aeb44b4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"export-img-dialog\" }\nconst _hoisted_2 = { class: \"thumbnails-view\" }\nconst _hoisted_3 = {\n class: \"thumbnails\",\n ref: \"imageThumbnailsRef\"\n}\nconst _hoisted_4 = { class: \"configs\" }\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"导出格式:\", -1))\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"JPEG\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"PNG\")\nconst _hoisted_9 = { class: \"row\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"图片质量:\", -1))\nconst _hoisted_11 = { class: \"row\" }\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"忽略在线字体:\", -1))\nconst _hoisted_13 = { class: \"config-item\" }\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"tip\" }, \" 提示:导出时默认会忽略在线字体,若您在幻灯片中使用了在线字体,且不希望导出图片中丢失相关样式,可以选择关闭【忽略在线字体】选项,但要注意,这将会导致导出用时大幅度增加。 \", -1))\nconst _hoisted_15 = { class: \"btns\" }\nconst _hoisted_16 = /*#__PURE__*/_createTextVNode(\"导出图片\")\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"关闭\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_FullscreenSpin = _resolveComponent(\"FullscreenSpin\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide) => {\n return (_openBlock(), _createBlock(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n key: slide.id,\n slide: slide,\n size: 1600\n }, null, 8, [\"slide\"]))\n }), 128))\n ], 512)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(_component_RadioGroup, {\n class: \"config-item\",\n value: _ctx.format,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.format) = $event))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, { value: \"jpeg\" }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_RadioButton, { value: \"png\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_Slider, {\n class: \"config-item\",\n min: 0,\n max: 1,\n step: 0.1,\n value: _ctx.quality,\n \"onUpdate:value\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.quality) = $event))\n }, null, 8, [\"step\", \"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_Switch, {\n checked: _ctx.ignoreWebfont,\n \"onUpdate:checked\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.ignoreWebfont) = $event))\n }, null, 8, [\"checked\"])\n ])\n ]),\n _hoisted_14,\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(_component_Button, {\n class: \"btn export\",\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.expImage()))\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"btn close\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.close()))\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n })\n ])\n ]),\n _createVNode(_component_FullscreenSpin, {\n loading: _ctx.exporting,\n tip: \"正在导出...\"\n }, null, 8, [\"loading\"])\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-025539cf\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 1,\n class: \"placeholder\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ThumbnailElement = _resolveComponent(\"ThumbnailElement\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"thumbnail-slide\",\n style: _normalizeStyle({\n width: _ctx.size + 'px',\n height: _ctx.size * _ctx.viewportRatio + 'px',\n })\n }, [\n (_ctx.visible)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"elements\",\n style: _normalizeStyle({\n width: _ctx.VIEWPORT_SIZE + 'px',\n height: _ctx.VIEWPORT_SIZE * _ctx.viewportRatio + 'px',\n transform: `scale(${_ctx.scale})`,\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"background\",\n style: _normalizeStyle(_ctx.backgroundStyle)\n }, null, 4),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slide.elements, (element, index) => {\n return (_openBlock(), _createBlock(_component_ThumbnailElement, {\n key: element.id,\n elementInfo: element,\n elementIndex: index + 1\n }, null, 8, [\"elementInfo\", \"elementIndex\"]))\n }), 128))\n ], 4))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_1, \"加载中 ...\"))\n ], 4))\n}","import { InjectionKey, Ref } from 'vue'\n\nexport type SlideScale = Ref\nexport type SlideId = Ref\n\nexport const injectKeySlideScale: InjectionKey = Symbol()\nexport const injectKeySlideId: InjectionKey = Symbol()","import { Ref, computed } from 'vue'\nimport { SlideBackground } from '@/types/slides'\n\n// 将页面背景数据转换为css样式\nexport default (background: Ref) => {\n const backgroundStyle = computed(() => {\n if (!background.value) return { backgroundColor: '#fff' }\n\n const {\n type,\n color,\n image,\n imageSize,\n gradientColor,\n gradientRotate,\n gradientType,\n } = background.value\n\n // 纯色背景\n if (type === 'solid') return { backgroundColor: color }\n\n // 背景图模式\n // 包括:背景图、背景大小,是否重复\n else if (type === 'image') {\n if (!image) return { backgroundColor: '#fff' }\n if (imageSize === 'repeat') {\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'repeat',\n backgroundSize: 'contain',\n }\n }\n return {\n backgroundImage: `url(${image}`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: imageSize || 'cover',\n }\n }\n\n // 渐变色背景\n else if (type === 'gradient') {\n const rotate = gradientRotate || 0\n const color1 = gradientColor ? gradientColor[0] : '#fff'\n const color2 = gradientColor ? gradientColor[1] : '#fff'\n \n if (gradientType === 'radial') return { backgroundImage: `radial-gradient(${color1}, ${color2}` }\n return { backgroundImage: `linear-gradient(${rotate}deg, ${color1}, ${color2}` }\n }\n\n return { backgroundColor: '#fff' }\n })\n\n return {\n backgroundStyle,\n }\n}","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"base-element\", `base-element-${_ctx.elementInfo.id}`]),\n style: _normalizeStyle({\n zIndex: _ctx.elementIndex,\n })\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentElementComponent), {\n elementInfo: _ctx.elementInfo,\n target: \"thumbnail\"\n }, null, 8, [\"elementInfo\"]))\n ], 6))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0b1f9460\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ImageOutline = _resolveComponent(\"ImageOutline\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-image\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n })\n }, [\n _createVNode(_component_ImageOutline, { elementInfo: _ctx.elementInfo }, null, 8, [\"elementInfo\"]),\n _createElementVNode(\"div\", {\n class: \"image-content\",\n style: _normalizeStyle({ clipPath: _ctx.clipShape.style })\n }, [\n _createElementVNode(\"img\", {\n src: _ctx.elementInfo.src,\n draggable: false,\n style: _normalizeStyle({\n top: _ctx.imgPosition.top,\n left: _ctx.imgPosition.left,\n width: _ctx.imgPosition.width,\n height: _ctx.imgPosition.height,\n filter: _ctx.filter,\n }),\n alt: \"\"\n }, null, 12, _hoisted_1)\n ], 4)\n ], 4)\n ], 4)\n ], 4))\n}","import { computed, Ref } from 'vue'\nimport { PPTElementShadow } from '@/types/slides'\n\n// 计算元素的阴影样式\nexport default (shadow: Ref) => {\n const shadowStyle = computed(() => {\n if (shadow.value) {\n const { h, v, blur, color } = shadow.value\n return `${h}px ${v}px ${blur}px ${color}`\n }\n return ''\n })\n\n return {\n shadowStyle,\n }\n}","export const enum ClipPathTypes {\n RECT = 'rect',\n ELLIPSE = 'ellipse',\n POLYGON = 'polygon',\n}\n\nexport const enum ClipPaths {\n RECT = 'rect',\n ROUNDRECT = 'roundRect',\n ELLIPSE = 'ellipse',\n TRIANGLE = 'triangle',\n PENTAGON = 'pentagon',\n RHOMBUS = 'rhombus',\n STAR = 'star',\n}\n\nexport const CLIPPATHS = {\n rect: {\n name: '矩形',\n type: ClipPathTypes.RECT,\n radius: '0',\n style: '',\n },\n rect2: {\n name: '矩形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L 0 ${height} Z`\n },\n },\n rect3: {\n name: '矩形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.8} Z`\n },\n },\n roundRect: {\n name: '圆角矩形',\n type: ClipPathTypes.RECT,\n radius: '10%',\n style: 'inset(0 0 0 0 round 10% 10% 10% 10%)',\n },\n ellipse: {\n name: '圆形',\n type: ClipPathTypes.ELLIPSE,\n style: 'ellipse(50% 50% at 50% 50%)',\n },\n triangle: {\n name: '三角形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n triangle2: {\n name: '三角形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 100%, 0% 0%, 100% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} ${height} L 0 0 L ${width} 0 Z`\n },\n },\n triangle3: {\n name: '三角形3',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 0% 100%, 100% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L 0 ${height} L ${width} ${height} Z`\n },\n },\n rhombus: {\n name: '菱形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${height * 0.5} L ${width * 0.5} ${height} L 0 ${height * 0.5} Z`\n },\n },\n hexagon: {\n name: '六边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.2} 0 L ${width * 0.8} 0 L ${width} ${height * 0.5} L ${width * 0.8} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.5} Z`\n },\n },\n pentagon: {\n name: '五边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.5} 0 L ${width} ${0.38 * height} L ${0.82 * width} ${height} L ${0.18 * width} ${height} L 0 ${0.38 * height} Z`\n },\n },\n parallelogram: {\n name: '平行四边形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} 0 L ${width} 0 L ${width * 0.7} ${height} L 0 ${height} Z`\n },\n },\n parallelogram2: {\n name: '平行四边形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.3} ${height} L ${width} ${height} L ${width * 0.7} 0 L 0 0 Z`\n },\n },\n trapezoid: {\n name: '梯形',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)',\n createPath: (width: number, height: number) => {\n return `M ${width * 0.25} 0 L ${width * 0.75} 0 L ${width} ${height} L 0 ${height} Z`\n },\n },\n trapezoid2: {\n name: '梯形2',\n type: ClipPathTypes.POLYGON,\n style: 'polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)',\n createPath: (width: number, height: number) => {\n return `M 0 0 L ${width} 0 L ${width * 0.75} ${height} L ${width * 0.25} ${height} Z`\n },\n },\n}","import { computed, Ref } from 'vue'\n\n// 计算元素的翻转样式\nexport default (flipH: Ref, flipV: Ref) => {\n const flipStyle = computed(() => {\n let style = ''\n \n if (flipH.value && flipV.value) style = 'rotateX(180deg) rotateY(180deg)'\n else if (flipV.value) style = 'rotateX(180deg)'\n else if (flipH.value) style = 'rotateY(180deg)'\n\n return style\n })\n\n return {\n flipStyle,\n }\n}","import { computed, Ref } from 'vue'\nimport { CLIPPATHS, ClipPathTypes } from '@/configs/imageClip'\nimport { ImageElementClip } from '@/types/slides'\n\nexport default (clip: Ref) => {\n const clipShape = computed(() => {\n if (!clip.value) return CLIPPATHS.rect\n const shape = clip.value.shape || ClipPathTypes.RECT\n\n return CLIPPATHS[shape]\n })\n\n const imgPosition = computed(() => {\n if (!clip.value) {\n return {\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n }\n }\n\n const [start, end] = clip.value.range\n\n const widthScale = (end[0] - start[0]) / 100\n const heightScale = (end[1] - start[1]) / 100\n const left = start[0] / widthScale\n const top = start[1] / heightScale\n\n return {\n left: -left + '%',\n top: -top + '%',\n width: 100 / widthScale + '%',\n height: 100 / heightScale + '%',\n }\n })\n\n return {\n clipShape,\n imgPosition,\n }\n}","import { computed, Ref } from 'vue'\nimport { ImageElementFilters } from '@/types/slides'\n\nexport default (filters: Ref) => {\n const filter = computed(() => {\n if (!filters.value) return ''\n let filter = ''\n for (const key of Object.keys(filters.value)) {\n filter += `${key}(${filters.value[key]}) `\n }\n return filter\n })\n\n return {\n filter,\n }\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"image-outline\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ImageRectOutline = _resolveComponent(\"ImageRectOutline\")!\n const _component_ImageEllipseOutline = _resolveComponent(\"ImageEllipseOutline\")!\n const _component_ImagePolygonOutline = _resolveComponent(\"ImagePolygonOutline\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.clipShape.type === 'rect')\n ? (_openBlock(), _createBlock(_component_ImageRectOutline, {\n key: 0,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n radius: _ctx.clipShape.radius,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"radius\", \"outline\"]))\n : (_ctx.clipShape.type === 'ellipse')\n ? (_openBlock(), _createBlock(_component_ImageEllipseOutline, {\n key: 1,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]))\n : (_ctx.clipShape.type === 'polygon')\n ? (_openBlock(), _createBlock(_component_ImagePolygonOutline, {\n key: 2,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline,\n createPath: _ctx.clipShape.createPath\n }, null, 8, [\"width\", \"height\", \"outline\", \"createPath\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-48a14431\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"rx\", \"ry\", \"width\", \"height\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"image-rect-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"rect\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n fill: \"transparent\",\n rx: _ctx.radius,\n ry: _ctx.radius,\n width: _ctx.width,\n height: _ctx.height,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=48a14431&scoped=true&ts=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=48a14431&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-48a14431\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-692bbda6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"cx\", \"cy\", \"rx\", \"ry\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"image-ellipse-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"ellipse\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n fill: \"transparent\",\n cx: _ctx.width / 2,\n cy: _ctx.height / 2,\n rx: _ctx.width / 2,\n ry: _ctx.height / 2,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=692bbda6&scoped=true&ts=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=692bbda6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-692bbda6\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-21ca95cc\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"image-polygon-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"path\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n fill: \"transparent\",\n d: _ctx.createPath(_ctx.width, _ctx.height),\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=21ca95cc&scoped=true&ts=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=21ca95cc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-21ca95cc\"]])\n\nexport default __exports__","\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&ts=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\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=0b1f9460&scoped=true&ts=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=0b1f9460&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0b1f9460\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2ec235c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-text\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n backgroundColor: _ctx.elementInfo.fill,\n opacity: _ctx.elementInfo.opacity,\n textShadow: _ctx.shadowStyle,\n lineHeight: _ctx.elementInfo.lineHeight,\n letterSpacing: (_ctx.elementInfo.wordSpace || 0) + 'px',\n color: _ctx.elementInfo.defaultColor,\n fontFamily: _ctx.elementInfo.defaultFontName,\n })\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createElementVNode(\"div\", {\n class: \"text ProseMirror-static\",\n innerHTML: _ctx.elementInfo.content\n }, null, 8, _hoisted_1)\n ], 4)\n ], 4)\n ], 4))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-34c0a0a8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.outline)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"element-outline\",\n overflow: \"visible\",\n width: _ctx.width,\n height: _ctx.height\n }, [\n _createElementVNode(\"path\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n fill: \"transparent\",\n d: `M0,0 L${_ctx.width},0 L${_ctx.width},${_ctx.height} L0,${_ctx.height} Z`,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\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=34c0a0a8&scoped=true&ts=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=34c0a0a8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-34c0a0a8\"]])\n\nexport default __exports__","\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&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2ec235c4\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2bad8b7f\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = [\"transform\"]\nconst _hoisted_4 = [\"d\", \"fill\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\nconst _hoisted_5 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GradientDefs = _resolveComponent(\"GradientDefs\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-shape\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n opacity: _ctx.elementInfo.opacity,\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n color: _ctx.text.defaultColor,\n fontFamily: _ctx.text.defaultFontName,\n })\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height\n }, [\n (_ctx.elementInfo.gradient)\n ? (_openBlock(), _createElementBlock(\"defs\", _hoisted_2, [\n _createVNode(_component_GradientDefs, {\n id: `base-gradient-${_ctx.elementInfo.id}`,\n type: _ctx.elementInfo.gradient.type,\n color1: _ctx.elementInfo.gradient.color[0],\n color2: _ctx.elementInfo.gradient.color[1],\n rotate: _ctx.elementInfo.gradient.rotate\n }, null, 8, [\"id\", \"type\", \"color1\", \"color2\", \"rotate\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n d: _ctx.elementInfo.path,\n fill: _ctx.elementInfo.gradient ? `url(#base-gradient-${_ctx.elementInfo.id})` : _ctx.elementInfo.fill,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 5' : '0 0'\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_3)\n ], 8, _hoisted_1)),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"shape-text\", _ctx.text.align])\n }, [\n _createElementVNode(\"div\", {\n class: \"ProseMirror-static\",\n innerHTML: _ctx.text.content\n }, null, 8, _hoisted_5)\n ], 2)\n ], 4)\n ], 4)\n ], 4))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"gradientTransform\"]\nconst _hoisted_2 = [\"stop-color\"]\nconst _hoisted_3 = [\"stop-color\"]\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = [\"stop-color\"]\nconst _hoisted_6 = [\"stop-color\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.type === 'linear')\n ? (_openBlock(), _createElementBlock(\"linearGradient\", {\n key: 0,\n id: _ctx.id,\n x1: \"0%\",\n y1: \"0%\",\n x2: \"100%\",\n y2: \"0%\",\n gradientTransform: `rotate(${_ctx.rotate},0.5,0.5)`\n }, [\n _createElementVNode(\"stop\", {\n offset: \"0%\",\n \"stop-color\": _ctx.color1\n }, null, 8, _hoisted_2),\n _createElementVNode(\"stop\", {\n offset: \"100%\",\n \"stop-color\": _ctx.color2\n }, null, 8, _hoisted_3)\n ], 8, _hoisted_1))\n : (_openBlock(), _createElementBlock(\"radialGradient\", {\n key: 1,\n id: _ctx.id\n }, [\n _createElementVNode(\"stop\", {\n offset: \"0%\",\n \"stop-color\": _ctx.color1\n }, null, 8, _hoisted_5),\n _createElementVNode(\"stop\", {\n offset: \"100%\",\n \"stop-color\": _ctx.color2\n }, null, 8, _hoisted_6)\n ], 8, _hoisted_4))\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&ts=true\"\nimport script from \"./GradientDefs.vue?vue&type=script&lang=ts\"\nexport * from \"./GradientDefs.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\n\nimport GradientDefs from './GradientDefs.vue'\n\nexport default defineComponent({\n name: 'base-element-shape',\n components: {\n GradientDefs,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n text,\n }\n },\n})\n","import { render } from \"./BaseShapeElement.vue?vue&type=template&id=2bad8b7f&scoped=true&ts=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=2bad8b7f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2bad8b7f\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4032440c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\", \"marker-start\", \"marker-end\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinePointMarker = _resolveComponent(\"LinePointMarker\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"editable-element-shape\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({ filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '' })\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.svgWidth,\n height: _ctx.svgHeight\n }, [\n _createElementVNode(\"defs\", null, [\n (_ctx.elementInfo.points[0])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 0,\n id: _ctx.elementInfo.id,\n position: \"start\",\n type: _ctx.elementInfo.points[0],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.elementInfo.points[1])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 1,\n id: _ctx.elementInfo.id,\n position: \"end\",\n type: _ctx.elementInfo.points[1],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"path\", {\n d: _ctx.path,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.width,\n \"stroke-dasharray\": _ctx.lineDashArray,\n fill: \"none\",\n \"stroke-linecap\": \"\",\n \"stroke-linejoin\": \"\",\n \"stroke-miterlimit\": \"\",\n \"marker-start\": _ctx.elementInfo.points[0] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[0]}-start)` : '',\n \"marker-end\": _ctx.elementInfo.points[1] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[1]}-end)` : ''\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n ], 4)\n ], 4))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"markerWidth\", \"markerHeight\", \"refX\", \"refY\"]\nconst _hoisted_2 = [\"d\", \"fill\", \"transform\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"marker\", {\n id: `${_ctx.id}-${_ctx.type}-${_ctx.position}`,\n markerUnits: \"userSpaceOnUse\",\n orient: \"auto\",\n markerWidth: _ctx.size * 3,\n markerHeight: _ctx.size * 3,\n refX: _ctx.size * 1.5,\n refY: _ctx.size * 1.5\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.path,\n fill: _ctx.color,\n transform: `scale(${_ctx.size * 0.3}, ${_ctx.size * 0.3}) rotate(${_ctx.rotate}, 5, 5)`\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\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&ts=true\"\nimport script from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\nexport * from \"./LinePointMarker.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10, 5' : '0, 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./BaseLineElement.vue?vue&type=template&id=4032440c&scoped=true&ts=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=4032440c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4032440c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-chart\",\n style: _normalizeStyle({\r\n top: _ctx.elementInfo.top + 'px',\r\n left: _ctx.elementInfo.left + 'px',\r\n width: _ctx.elementInfo.width + 'px',\r\n height: _ctx.elementInfo.height + 'px',\r\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\r\n backgroundColor: _ctx.elementInfo.fill,\r\n })\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createVNode(_component_Chart, {\n class: _normalizeClass({ 'need-scale': _ctx.needScaleSize }),\n width: _ctx.chartWidth,\n height: _ctx.chartHeight,\n type: _ctx.elementInfo.chartType,\n data: _ctx.elementInfo.data,\n options: _ctx.elementInfo.options,\n themeColor: _ctx.elementInfo.themeColor,\n gridColor: _ctx.elementInfo.gridColor,\n legends: _ctx.elementInfo.data.legends,\n legend: _ctx.elementInfo.legend || ''\n }, null, 8, [\"class\", \"width\", \"height\", \"type\", \"data\", \"options\", \"themeColor\", \"gridColor\", \"legends\", \"legend\"])\n ], 4)\n ], 4)\n ], 4))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"chart\",\n style: _normalizeStyle({ flexDirection: _ctx.legend === 'top' ? 'column-reverse' : 'column' })\n }, [\n _createElementVNode(\"div\", {\n class: \"chart-content\",\n ref: \"chartRef\",\n style: _normalizeStyle({\n width: _ctx.width + 'px',\n height: _ctx.chartHeight + 'px',\n transform: `scale(${1 / _ctx.slideScale})`,\n })\n }, null, 4),\n (_ctx.legend)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"legends\",\n style: _normalizeStyle({ transform: `scale(${1 / _ctx.slideScale})` })\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.legends, (legend, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"legend\",\n key: index,\n style: _normalizeStyle({ color: _ctx.gridColor })\n }, [\n _createElementVNode(\"div\", {\n class: \"block\",\n style: _normalizeStyle({ backgroundColor: _ctx.themeColors[index] })\n }, null, 4),\n _createTextVNode(\" \" + _toDisplayString(legend), 1)\n ], 4))\n }), 128))\n ], 4))\n : _createCommentVNode(\"\", true)\n ], 4))\n}","\nimport { computed, defineComponent, inject, onMounted, PropType, ref, watch } from 'vue'\nimport { upperFirst } from 'lodash'\nimport tinycolor from 'tinycolor2'\nimport Chartist, {\n IChartistLineChart,\n IChartistBarChart,\n IChartistPieChart,\n} from 'chartist'\nimport { ChartData, ChartOptions, ChartType } from '@/types/slides'\nimport { injectKeySlideScale } from '@/types/injectKey'\n\nimport 'chartist/dist/scss/chartist.scss'\n\nexport default defineComponent({\n name: 'chart',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n type: {\n type: String as PropType,\n required: true,\n },\n data: {\n type: Object as PropType,\n required: true,\n },\n options: {\n type: Object as PropType,\n },\n themeColor: {\n type: Array as PropType,\n required: true,\n },\n legends: {\n type: Array as PropType,\n required: true,\n },\n gridColor: {\n type: String,\n },\n legend: {\n type: String as PropType<'' | 'top' | 'bottom'>,\n },\n },\n setup(props) {\n const chartRef = ref()\n const slideScale = inject(injectKeySlideScale) || ref(1)\n\n let chart: IChartistLineChart | IChartistBarChart | IChartistPieChart | undefined\n\n const chartHeight = computed(() => {\n if (props.legend) return props.height - 20\n return props.height\n })\n\n const getDataAndOptions = () => {\n const propsOptopns = props.options || {}\n const options = {\n ...propsOptopns,\n width: props.width * slideScale.value,\n height: chartHeight.value * slideScale.value,\n }\n const data = props.type === 'pie' ? { ...props.data, series: props.data.series[0] } : props.data\n return { data, options }\n }\n\n const renderChart = () => {\n if (!chartRef.value) return\n\n const type = upperFirst(props.type)\n const { data, options } = getDataAndOptions()\n chart = new Chartist[type](chartRef.value, data, options)\n }\n\n const updateChart = () => {\n if (!chart) {\n renderChart()\n return\n }\n const { data, options } = getDataAndOptions()\n chart.update(data, options)\n }\n\n watch([\n () => props.width,\n () => props.height,\n () => props.data,\n () => props.options,\n slideScale,\n ], updateChart)\n\n onMounted(renderChart)\n\n const themeColors = computed(() => {\n let colors: string[] = []\n if (props.themeColor.length >= 10) colors = props.themeColor\n else if (props.themeColor.length === 1) colors = tinycolor(props.themeColor[0]).analogous(10).map(color => color.toHexString())\n else {\n const len = props.themeColor.length\n const supplement = tinycolor(props.themeColor[len - 1]).analogous(10 + 1 - len).map(color => color.toHexString())\n colors = [...props.themeColor.slice(0, len - 1), ...supplement]\n }\n return colors\n })\n\n // 更新主题配色:\n // 如果当前所设置的主题色数小于10,剩余部分获取最后一个主题色的相近颜色作为配色\n const updateTheme = () => {\n if (!chartRef.value) return\n\n for (let i = 0; i < 10; i++) {\n chartRef.value.style.setProperty(`--theme-color-${i + 1}`, themeColors.value[i])\n }\n }\n\n watch(themeColors, updateTheme)\n onMounted(updateTheme)\n\n // 更新网格颜色,包括坐标的文字部分\n const updateGridColor = () => {\n if (!chartRef.value) return\n if (props.gridColor) chartRef.value.style.setProperty(`--grid-color`, props.gridColor)\n }\n\n watch(() => props.gridColor, updateGridColor)\n onMounted(updateGridColor)\n\n return {\n chartHeight,\n themeColors,\n slideScale,\n chartRef,\n }\n },\n})\n","import { render } from \"./Chart.vue?vue&type=template&id=79ce410e&scoped=true&ts=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=79ce410e&lang=scss&scoped=true\"\nimport \"./Chart.vue?vue&type=style&index=1&id=79ce410e&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-79ce410e\"]])\n\nexport default __exports__","\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\nimport Chart from './Chart.vue'\r\n\r\nexport default defineComponent({\r\n name: 'base-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 needScaleSize: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n setup(props) {\r\n return {\r\n chartWidth: computed(() => props.needScaleSize ? props.elementInfo.width * 10 : props.elementInfo.width),\r\n chartHeight: computed(() => props.needScaleSize ? props.elementInfo.height * 10 : props.elementInfo.height),\r\n }\r\n },\r\n})\r\n","import { render } from \"./BaseChartElement.vue?vue&type=template&id=60d9ae43&scoped=true&ts=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=60d9ae43&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-60d9ae43\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3bbcc75c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_StaticTable = _resolveComponent(\"StaticTable\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-table\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_StaticTable, {\n data: _ctx.elementInfo.data,\n width: _ctx.elementInfo.width,\n colWidths: _ctx.elementInfo.colWidths,\n outline: _ctx.elementInfo.outline,\n theme: _ctx.elementInfo.theme\n }, null, 8, [\"data\", \"width\", \"colWidths\", \"outline\", \"theme\"])\n ])\n ], 4)\n ], 4))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, vShow as _vShow, normalizeStyle as _normalizeStyle, withDirectives as _withDirectives, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74b60291\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\"]\nconst _hoisted_2 = [\"rowspan\", \"colspan\"]\nconst _hoisted_3 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"static-table\",\n style: _normalizeStyle({ width: _ctx.totalWidth + 'px' })\n }, [\n _createElementVNode(\"table\", {\n class: _normalizeClass({\n 'theme': _ctx.theme,\n 'row-header': _ctx.theme?.rowHeader,\n 'row-footer': _ctx.theme?.rowFooter,\n 'col-header': _ctx.theme?.colHeader,\n 'col-footer': _ctx.theme?.colFooter,\n }),\n style: _normalizeStyle(`--themeColor: ${_ctx.theme?.color}; --subThemeColor1: ${_ctx.subThemeColor[0]}; --subThemeColor2: ${_ctx.subThemeColor[1]}`)\n }, [\n _createElementVNode(\"colgroup\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.colSizeList, (width, index) => {\n return (_openBlock(), _createElementBlock(\"col\", {\n span: \"1\",\n key: index,\n width: width\n }, null, 8, _hoisted_1))\n }), 128))\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.data, (rowCells, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"tr\", { key: rowIndex }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rowCells, (cell, colIndex) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"td\", {\n class: \"cell\",\n style: _normalizeStyle({\n borderStyle: _ctx.outline.style,\n borderColor: _ctx.outline.color,\n borderWidth: _ctx.outline.width + 'px',\n ..._ctx.getTextStyle(cell.style),\n }),\n key: cell.id,\n rowspan: cell.rowspan,\n colspan: cell.colspan\n }, [\n _createElementVNode(\"div\", {\n class: \"cell-text\",\n innerHTML: _ctx.formatText(cell.text)\n }, null, 8, _hoisted_3)\n ], 12, _hoisted_2)), [\n [_vShow, !_ctx.hideCells.includes(`${rowIndex}_${colIndex}`)]\n ])\n }), 128))\n ]))\n }), 128))\n ])\n ], 6)\n ], 4))\n}","import { TableCellStyle } from '@/types/slides'\n\n/**\n * 计算单元格文本样式\n * @param style 单元格文本样式原数据\n */\nexport const getTextStyle = (style?: TableCellStyle) => {\n if (!style) return {}\n const {\n bold,\n em,\n underline,\n strikethrough,\n color,\n backcolor,\n fontsize,\n fontname,\n align,\n } = style\n\n let textDecoration = `${underline ? 'underline' : ''} ${strikethrough ? 'line-through' : ''}`\n if (textDecoration === ' ') textDecoration = 'none'\n \n return {\n fontWeight: bold ? 'bold' : 'normal',\n fontStyle: em ? 'italic' : 'normal',\n textDecoration,\n color: color || '#000',\n backgroundColor: backcolor || '',\n fontSize: fontsize || '14px',\n fontFamily: fontname || '微软雅黑',\n textAlign: align || 'left',\n }\n}\n\nexport const formatText = (text: string) => {\n return text.replace(/\\n/g, '
').replace(/ /g, ' ')\n}","import { computed, Ref } from 'vue'\nimport { TableCell } from '@/types/slides'\n\n// 计算无效的单元格位置(被合并的单元格位置)集合\n\nexport default (cells: Ref) => {\n const hideCells = computed(() => {\n const hideCells = []\n \n for (let i = 0; i < cells.value.length; i++) {\n const rowCells = cells.value[i]\n\n for (let j = 0; j < rowCells.length; j++) {\n const cell = rowCells[j]\n \n if (cell.colspan > 1 || cell.rowspan > 1) {\n for (let row = i; row < i + cell.rowspan; row++) {\n for (let col = row === i ? j + 1 : j; col < j + cell.colspan; col++) {\n hideCells.push(`${row}_${col}`)\n }\n }\n }\n }\n }\n return hideCells\n })\n\n return {\n hideCells,\n }\n}","import { ref, Ref, watch } from 'vue'\nimport { TableTheme } from '@/types/slides'\nimport { getTableSubThemeColor } from '@/utils/element'\n\n// 通过表格的主题色计算辅助颜色\n\nexport default (theme: Ref) => {\n const subThemeColor = ref(['', ''])\n watch(() => theme.value, () => {\n if (theme.value) {\n subThemeColor.value = getTableSubThemeColor(theme.value.color)\n }\n }, { immediate: true })\n\n return {\n subThemeColor,\n }\n}","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nexport default defineComponent({\n name: 'static-table',\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props) {\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n return {\n colSizeList,\n totalWidth,\n hideCells,\n getTextStyle,\n formatText,\n subThemeColor,\n }\n },\n})\n","import { render } from \"./StaticTable.vue?vue&type=template&id=74b60291&scoped=true&ts=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=74b60291&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-74b60291\"]])\n\nexport default __exports__","\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=3bbcc75c&scoped=true&ts=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=3bbcc75c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3bbcc75c\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4118f3dd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\nconst _hoisted_2 = [\"width\", \"height\", \"stroke\", \"stroke-width\"]\nconst _hoisted_3 = [\"transform\"]\nconst _hoisted_4 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-latex\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.strokeWidth,\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }, [\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.elementInfo.path\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_3)\n ], 8, _hoisted_2))\n ])\n ], 4)\n ], 4))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTLatexElement } from '@/types/slides'\n\nexport default defineComponent({\n name: 'base-element-latex',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./BaseLatexElement.vue?vue&type=template&id=4118f3dd&scoped=true&ts=true\"\nimport script from \"./BaseLatexElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseLatexElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseLatexElement.vue?vue&type=style&index=0&id=4118f3dd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4118f3dd\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-video\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.elementInfo.poster})` })\n }, [\n _createVNode(_component_IconPlayOne, { class: \"icon\" })\n ], 4)\n ], 4)\n ], 4))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTVideoElement } from '@/types/slides'\n\nexport default defineComponent({\n name: 'base-element-video',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n})\n","import { render } from \"./BaseVideoElement.vue?vue&type=template&id=1c831c75&scoped=true&ts=true\"\nimport script from \"./BaseVideoElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseVideoElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseVideoElement.vue?vue&type=style&index=0&id=1c831c75&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1c831c75\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-513e91c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"base-element-audio\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_IconVolumeNotice, {\n class: \"audio-icon\",\n style: _normalizeStyle({\n fontSize: _ctx.audioIconSize,\n color: _ctx.elementInfo.color,\n })\n }, null, 8, [\"style\"])\n ])\n ], 4)\n ], 4))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTAudioElement } from '@/types/slides'\n\nexport default defineComponent({\n name: 'base-element-audio',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const audioIconSize = computed(() => {\n return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'\n })\n\n return {\n audioIconSize,\n }\n },\n})\n","import { render } from \"./BaseAudioElement.vue?vue&type=template&id=513e91c4&scoped=true&ts=true\"\nimport script from \"./BaseAudioElement.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseAudioElement.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseAudioElement.vue?vue&type=style&index=0&id=513e91c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-513e91c4\"]])\n\nexport default __exports__","\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'\nimport BaseLatexElement from '@/views/components/element/LatexElement/BaseLatexElement.vue'\nimport BaseVideoElement from '@/views/components/element/VideoElement/BaseVideoElement.vue'\nimport BaseAudioElement from '@/views/components/element/AudioElement/BaseAudioElement.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 [ElementTypes.LATEX]: BaseLatexElement,\n [ElementTypes.VIDEO]: BaseVideoElement,\n [ElementTypes.AUDIO]: BaseAudioElement,\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=36b099d8&ts=true\"\nimport script from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ThumbnailElement.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, PropType, defineComponent, provide } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { injectKeySlideScale } from '@/types/injectKey'\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 visible: {\n type: Boolean,\n default: true,\n },\n },\n setup(props) {\n const { viewportRatio } = storeToRefs(useSlidesStore())\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n const scale = computed(() => props.size / VIEWPORT_SIZE)\n provide(injectKeySlideScale, scale)\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=025539cf&scoped=true&ts=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=025539cf&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-025539cf\"]])\n\nexport default __exports__","\nimport { defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport useExport from '@/hooks/useExport'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'export-img-dialog',\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const { slides } = storeToRefs(useSlidesStore())\n\n const imageThumbnailsRef = ref()\n const format = ref<'jpeg' | 'png'>('jpeg')\n const quality = ref(1)\n const ignoreWebfont = ref(true)\n\n const close = () => emit('close')\n\n const { exportImage, exporting } = useExport()\n\n const expImage = () => {\n if (!imageThumbnailsRef.value) return\n exportImage(imageThumbnailsRef.value, format.value, quality.value, ignoreWebfont.value)\n }\n \n return {\n imageThumbnailsRef,\n slides,\n format,\n quality,\n ignoreWebfont,\n exporting,\n expImage,\n close,\n }\n },\n})\n","import { render } from \"./ExportImgDialog.vue?vue&type=template&id=4aeb44b4&scoped=true&ts=true\"\nimport script from \"./ExportImgDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./ExportImgDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./ExportImgDialog.vue?vue&type=style&index=0&id=4aeb44b4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4aeb44b4\"]])\n\nexport default __exports__","\nimport { defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useExport from '@/hooks/useExport'\n\nimport HotkeyDoc from './HotkeyDoc.vue'\nimport ExportImgDialog from './ExportImgDialog.vue'\n\nexport default defineComponent({\n name: 'editor-header',\n components: {\n HotkeyDoc,\n ExportImgDialog,\n },\n setup() {\n const mainStore = useMainStore()\n const { showGridLines } = storeToRefs(mainStore)\n\n const { enterScreening, enterScreeningFromStart } = useScreening()\n const { createSlide, deleteSlide, resetSlides } = useSlideHandler()\n const { redo, undo } = useHistorySnapshot()\n const { exporting, exportJSON, exportPPTX } = useExport()\n\n const toggleGridLines = () => {\n mainStore.setGridLinesState(!showGridLines.value)\n }\n\n const hotkeyDrawerVisible = ref(false)\n const exportImgDialogVisible = ref(false)\n\n const goIssues = () => {\n window.open('https://github.com/pipipi-pikachu/PPTist/issues')\n }\n\n return {\n redo,\n undo,\n showGridLines,\n hotkeyDrawerVisible,\n exportImgDialogVisible,\n exporting,\n enterScreening,\n enterScreeningFromStart,\n createSlide,\n deleteSlide,\n toggleGridLines,\n resetSlides,\n exportJSON,\n exportPPTX,\n goIssues,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5e62abba&scoped=true&ts=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=5e62abba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5e62abba\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-fe9bcf9c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"operates\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementCreateSelection = _resolveComponent(\"ElementCreateSelection\")!\n const _component_AlignmentLine = _resolveComponent(\"AlignmentLine\")!\n const _component_MultiSelectOperate = _resolveComponent(\"MultiSelectOperate\")!\n const _component_Operate = _resolveComponent(\"Operate\")!\n const _component_ViewportBackground = _resolveComponent(\"ViewportBackground\")!\n const _component_MouseSelection = _resolveComponent(\"MouseSelection\")!\n const _component_EditableElement = _resolveComponent(\"EditableElement\")!\n const _component_LinkDialog = _resolveComponent(\"LinkDialog\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"canvas\",\n ref: \"canvasRef\",\n onMousewheel: _cache[3] || (_cache[3] = $event => _ctx.handleMousewheelCanvas($event)),\n onMousedown: _cache[4] || (_cache[4] = $event => _ctx.handleClickBlankArea($event))\n }, [\n (_ctx.creatingElement)\n ? (_openBlock(), _createBlock(_component_ElementCreateSelection, {\n key: 0,\n onCreated: _cache[0] || (_cache[0] = data => _ctx.insertElementFromCreateSelection(data))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: \"viewport-wrapper\",\n style: _normalizeStyle({\n width: _ctx.viewportStyles.width * _ctx.canvasScale + 'px',\n height: _ctx.viewportStyles.height * _ctx.canvasScale + 'px',\n left: _ctx.viewportStyles.left + 'px',\n top: _ctx.viewportStyles.top + 'px',\n })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.alignmentLines, (line, index) => {\n return (_openBlock(), _createBlock(_component_AlignmentLine, {\n key: index,\n type: line.type,\n axis: line.axis,\n length: line.length\n }, null, 8, [\"type\", \"axis\", \"length\"]))\n }), 128)),\n (_ctx.activeElementIdList.length > 1)\n ? (_openBlock(), _createBlock(_component_MultiSelectOperate, {\n key: 0,\n elementList: _ctx.elementList,\n scaleMultiElement: _ctx.scaleMultiElement\n }, null, 8, [\"elementList\", \"scaleMultiElement\"]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.elementList, (element) => {\n return (_openBlock(), _createBlock(_component_Operate, {\n key: element.id,\n elementInfo: element,\n isSelected: _ctx.activeElementIdList.includes(element.id),\n isActive: _ctx.handleElementId === element.id,\n isActiveGroupElement: _ctx.activeGroupElementId === element.id,\n isMultiSelect: _ctx.activeElementIdList.length > 1,\n rotateElement: _ctx.rotateElement,\n scaleElement: _ctx.scaleElement,\n openLinkDialog: _ctx.openLinkDialog,\n dragLineElement: _ctx.dragLineElement\n }, null, 8, [\"elementInfo\", \"isSelected\", \"isActive\", \"isActiveGroupElement\", \"isMultiSelect\", \"rotateElement\", \"scaleElement\", \"openLinkDialog\", \"dragLineElement\"]))\n }), 128)),\n _createVNode(_component_ViewportBackground)\n ]),\n _createElementVNode(\"div\", {\n class: \"viewport\",\n ref: \"viewportRef\",\n style: _normalizeStyle({ transform: `scale(${_ctx.canvasScale})` })\n }, [\n (_ctx.mouseSelectionVisible)\n ? (_openBlock(), _createBlock(_component_MouseSelection, {\n key: 0,\n top: _ctx.mouseSelection.top,\n left: _ctx.mouseSelection.left,\n width: _ctx.mouseSelection.width,\n height: _ctx.mouseSelection.height,\n quadrant: _ctx.mouseSelectionQuadrant\n }, null, 8, [\"top\", \"left\", \"width\", \"height\", \"quadrant\"]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.elementList, (element, index) => {\n return (_openBlock(), _createBlock(_component_EditableElement, {\n key: element.id,\n elementInfo: element,\n elementIndex: index + 1,\n isMultiSelect: _ctx.activeElementIdList.length > 1,\n selectElement: _ctx.selectElement,\n openLinkDialog: _ctx.openLinkDialog\n }, null, 8, [\"elementInfo\", \"elementIndex\", \"isMultiSelect\", \"selectElement\", \"openLinkDialog\"]))\n }), 128))\n ], 4)\n ], 4),\n _createVNode(_component_Modal, {\n visible: _ctx.linkDialogVisible,\n \"onUpdate:visible\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.linkDialogVisible) = $event)),\n footer: null,\n centered: \"\",\n width: 540,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_LinkDialog, {\n onClose: _cache[1] || (_cache[1] = ($event: any) => (_ctx.linkDialogVisible = false))\n })\n ]),\n _: 1\n }, 8, [\"visible\"])\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus],\n [_directive_click_outside, _ctx.removeEditorAreaFocus]\n ])\n}","// 清除文字选区\nexport const removeAllRanges = () => {\n const selection = window.getSelection()\n selection && selection.removeAllRanges()\n}","import { ref, computed, onMounted, onUnmounted, Ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 mainStore = useMainStore()\n const { canvasPercentage } = storeToRefs(mainStore)\n const { viewportRatio } = storeToRefs(useSlidesStore())\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 mainStore.setCanvasScale(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 mainStore.setCanvasScale(viewportActualHeight / (VIEWPORT_SIZE * viewportRatio.value))\n viewportLeft.value = (canvasWidth - viewportActualHeight / viewportRatio.value) / 2\n viewportTop.value = (canvasHeight - viewportActualHeight) / 2\n }\n }\n\n // 可视区域缩放或比例变化时,更新可视区域的位置\n watch([canvasPercentage, viewportRatio], setViewportPosition)\n\n // 画布可视区域位置和大小的样式\n const viewportStyles = computed(() => ({\n width: VIEWPORT_SIZE,\n height: VIEWPORT_SIZE * viewportRatio.value,\n left: viewportLeft.value,\n top: viewportTop.value,\n }))\n\n // 监听画布尺寸发生变化时,更新可视区域的位置\n const resizeObserver = new ResizeObserver(setViewportPosition)\n\n onMounted(() => {\n if (canvasRef.value) resizeObserver.observe(canvasRef.value)\n })\n onUnmounted(() => {\n if (canvasRef.value) resizeObserver.unobserve(canvasRef.value)\n })\n\n return {\n viewportStyles,\n }\n}","import { Ref, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementRange } from '@/utils/element'\n\nexport default (elementList: Ref, viewportRef: Ref) => {\n const mainStore = useMainStore()\n const { canvasScale } = storeToRefs(mainStore)\n\n const mouseSelectionVisible = ref(false)\n const mouseSelectionQuadrant = ref(1)\n const mouseSelection = ref({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\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 mouseSelection.value = {\n top: top,\n left: left,\n width: 0,\n height: 0,\n }\n mouseSelectionVisible.value = false\n mouseSelectionQuadrant.value = 4\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 mouseSelection.value = {\n ...mouseSelection.value,\n width: width,\n height: height,\n }\n mouseSelectionVisible.value = true\n mouseSelectionQuadrant.value = quadrant\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 = mouseSelection.value.left\n const mouseSelectionTop = mouseSelection.value.top\n const mouseSelectionWidth = mouseSelection.value.width\n const mouseSelectionHeight = mouseSelection.value.height\n\n const { minX, maxX, minY, maxY } = getElementRange(element)\n\n // 计算元素是否处在框选范围内时,四个框选方向的计算方式有差异\n let isInclude = false\n if (mouseSelectionQuadrant.value === 4) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > mouseSelectionTop && \n maxY < mouseSelectionTop + mouseSelectionHeight\n }\n else if (mouseSelectionQuadrant.value === 1) {\n isInclude = minX > (mouseSelectionLeft - mouseSelectionWidth) && \n maxX < (mouseSelectionLeft - mouseSelectionWidth) + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (mouseSelectionQuadrant.value === 2) {\n isInclude = minX > mouseSelectionLeft && \n maxX < mouseSelectionLeft + mouseSelectionWidth && \n minY > (mouseSelectionTop - mouseSelectionHeight) && \n maxY < (mouseSelectionTop - mouseSelectionHeight) + mouseSelectionHeight\n }\n else if (mouseSelectionQuadrant.value === 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 mainStore.setActiveElementIdList(inRangeElementIdList)\n\n mouseSelectionVisible.value = false\n }\n }\n\n return {\n mouseSelection,\n mouseSelectionVisible,\n mouseSelectionQuadrant,\n updateMouseSelection,\n }\n}","import { onMounted, onUnmounted, Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { getImageDataURL } from '@/utils/image'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (elementRef: Ref) => {\n const { disableHotkeys } = storeToRefs(useMainStore())\n\n const { createImageElement, createTextElement } = useCreateElement()\n\n // 拖拽元素到画布中\n const handleDrop = (e: DragEvent) => {\n if (!e.dataTransfer || e.dataTransfer.items.length === 0) return\n const dataTransferItem = e.dataTransfer.items[0]\n\n // 检查事件对象中是否存在图片,存在则插入图片,否则继续检查是否存在文字,存在则插入文字\n if (dataTransferItem.kind === 'file' && dataTransferItem.type.indexOf('image') !== -1) {\n const imageFile = dataTransferItem.getAsFile()\n if (imageFile) {\n getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL))\n }\n }\n else if (dataTransferItem.kind === 'string' && dataTransferItem.type === 'text/plain') {\n dataTransferItem.getAsString(text => {\n if (disableHotkeys.value) return\n const string = parseText2Paragraphs(text)\n createTextElement({\n left: 0,\n top: 0,\n width: 600,\n height: 50,\n }, string)\n })\n }\n }\n\n onMounted(() => {\n elementRef.value && elementRef.value.addEventListener('drop', handleDrop)\n\n document.ondragleave = e => e.preventDefault()\n document.ondrop = e => e.preventDefault()\n document.ondragenter = e => e.preventDefault()\n document.ondragover = e => e.preventDefault()\n })\n onUnmounted(() => {\n elementRef.value && elementRef.value.removeEventListener('drop', handleDrop)\n\n document.ondragleave = null\n document.ondrop = null\n document.ondragenter = null\n document.ondragover = null\n })\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement, PPTLineElement, PPTVideoElement, PPTAudioElement } 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 slidesStore = useSlidesStore()\n const { canvasScale } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 旋转元素\n const rotateElement = (element: Exclude) => {\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 slidesStore.updateSlide({ 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 video: '视频',\n audio: '音频',\n}\n\nexport const MIN_SIZE = {\n text: 20,\n image: 20,\n shape: 15,\n chart: 200,\n table: 20,\n video: 250,\n audio: 20,\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { PPTElement, PPTImageElement, PPTLineElement, PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandlers, AlignmentLineProps, MultiSelectRange } from '@/types/edit'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport { MIN_SIZE } from '@/configs/element'\nimport { SHAPE_PATH_FORMULAS } from '@/configs/shapes'\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 mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeGroupElementId, canvasScale } = storeToRefs(mainStore)\n const { viewportRatio } = storeToRefs(slidesStore)\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 缩放元素\n const scaleElement = (e: MouseEvent, element: Exclude, command: OperateResizeHandlers) => {\n let isMouseDown = true\n mainStore.setScalingState(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 => {\n if (element.id !== el.id) return el\n if (el.type === 'shape' && 'pathFormula' in el && el.pathFormula) {\n return {\n ...el, left, top, width, height,\n viewBox: [width, height],\n path: SHAPE_PATH_FORMULAS[el.pathFormula](width, height),\n }\n }\n return { ...el, left, top, width, height }\n })\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 slidesStore.updateSlide({ elements: elementList.value })\n mainStore.setScalingState(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 slidesStore.updateSlide({ elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n scaleElement,\n scaleMultiElement,\n }\n}","import { Ref } from 'vue'\nimport { uniq } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useKeyboardStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\n\nexport default (\n elementList: Ref,\n moveElement: (e: MouseEvent, element: PPTElement) => void,\n) => {\n const mainStore = useMainStore()\n const { activeElementIdList, activeGroupElementId, handleElementId, editorAreaFocus } = storeToRefs(mainStore)\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n // 选中元素\n // startMove 表示是否需要再选中操作后进入到开始移动的状态\n const selectElement = (e: MouseEvent, element: PPTElement, startMove = true) => {\n if (!editorAreaFocus.value) mainStore.setEditorareaFocus(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 mainStore.setActiveElementIdList(uniq(newActiveIdList))\n mainStore.setHandleElementId(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 mainStore.setActiveElementIdList(newActiveIdList)\n }\n }\n\n // 如果目标元素已被选中,同时目标元素不是当前操作元素,则将其设置为当前操作元素\n else if (handleElementId.value !== element.id) {\n mainStore.setHandleElementId(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 mainStore.setActiveGroupElementId(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 mainStore.setActiveElementIdList(newActiveElementIdList)\n }\n\n return {\n selectElement,\n selectAllElement,\n }\n}\n","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 slidesStore = useSlidesStore()\n const { activeElementIdList, activeGroupElementId, canvasScale } = storeToRefs(useMainStore())\n const { viewportRatio } = storeToRefs(slidesStore)\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 slidesStore.updateSlide({ elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragElement,\n }\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement, PPTLineElement } from '@/types/slides'\nimport { 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 slidesStore = useSlidesStore()\n const { canvasScale } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 拖拽线条端点\n const dragLineElement = (e: MouseEvent, element: PPTLineElement, command: OperateLineHandlers) => {\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' || _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 const [c1, c2] = element.cubic || [[0, 0], [0, 0]]\n let c1X = element.left + c1[0]\n let c1Y = element.top + c1[1]\n let c2X = element.left + c2[0]\n let c2Y = element.top + c2[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 if (command === OperateLineHandlers.C) {\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 else if (command === OperateLineHandlers.C1) {\n c1X = c1X + moveX\n c1Y = c1Y + moveY\n\n if (Math.abs(c1X - startX) < sorptionRange) c1X = startX\n if (Math.abs(c1Y - startY) < sorptionRange) c1Y = startY\n if (Math.abs(c1X - endX) < sorptionRange) c1X = endX\n if (Math.abs(c1Y - endY) < sorptionRange) c1Y = endY\n }\n else if (command === OperateLineHandlers.C2) {\n c2X = c2X + moveX\n c2Y = c2Y + moveY\n\n if (Math.abs(c2X - startX) < sorptionRange) c2X = startX\n if (Math.abs(c2Y - startY) < sorptionRange) c2Y = startY\n if (Math.abs(c2X - endX) < sorptionRange) c2X = endX\n if (Math.abs(c2Y - endY) < sorptionRange) c2Y = endY\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.START || command === OperateLineHandlers.END) {\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 if (element.cubic) newEl.cubic = [[(start[0] + end[0]) / 2, (start[1] + end[1]) / 2], [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2]]\n }\n else if (command === OperateLineHandlers.C) {\n if (element.broken) newEl.broken = [midX - minX, midY - minY]\n if (element.curve) newEl.curve = [midX - minX, midY - minY]\n }\n else {\n if (element.cubic) newEl.cubic = [[c1X - minX, c1Y - minY], [c2X - minX, c2Y - 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 slidesStore.updateSlide({ elements: elementList.value })\n addHistorySnapshot()\n }\n }\n\n return {\n dragLineElement,\n }\n}","import { Ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { CreateElementSelectionData, CreatingLineElement, CreatingShapeElement } from '@/types/edit'\nimport useCreateElement from '@/hooks/useCreateElement'\n\nexport default (viewportRef: Ref) => {\n const mainStore = useMainStore()\n const { canvasScale, creatingElement } = storeToRefs(mainStore)\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 mainStore.setCreatingElement(null)\n }\n\n return {\n insertElementFromCreateSelection,\n }\n}","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"editable-element\",\n ref: \"elementRef\",\n id: `editable-element-${_ctx.elementInfo.id}`,\n style: _normalizeStyle({\n zIndex: _ctx.elementIndex,\n })\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentElementComponent), {\n elementInfo: _ctx.elementInfo,\n selectElement: _ctx.selectElement,\n contextmenus: _ctx.contextmenus\n }, null, 8, [\"elementInfo\", \"selectElement\", \"contextmenus\"]))\n ], 12, _hoisted_1))\n}","import { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { ElementAlignCommands } from '@/types/edit'\nimport { getElementListRange } from '@/utils/element'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\nimport useHistorySnapshot from './useHistorySnapshot'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n const { activeElementIdList, activeElementList } = storeToRefs(useMainStore())\n const { currentSlide, viewportRatio } = storeToRefs(slidesStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n /**\n * 将所有选中的元素对齐到画布\n * @param command 对齐方向\n */\n const alignElementToCanvas = (command: ElementAlignCommands) => {\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 slidesStore.updateSlide({ elements: newElementList })\n addHistorySnapshot()\n }\n\n return {\n alignElementToCanvas,\n }\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, createElementBlock as _createElementBlock, withDirectives as _withDirectives, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-288ee59d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ImageClipHandler = _resolveComponent(\"ImageClipHandler\")!\n const _component_ImageOutline = _resolveComponent(\"ImageOutline\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-image\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n (_ctx.isCliping)\n ? (_openBlock(), _createBlock(_component_ImageClipHandler, {\n key: 0,\n src: _ctx.elementInfo.src,\n clipData: _ctx.elementInfo.clip,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n top: _ctx.elementInfo.top,\n left: _ctx.elementInfo.left,\n rotate: _ctx.elementInfo.rotate,\n clipPath: _ctx.clipShape.style,\n onClip: _cache[0] || (_cache[0] = range => _ctx.handleClip(range))\n }, null, 8, [\"src\", \"clipData\", \"width\", \"height\", \"top\", \"left\", \"rotate\", \"clipPath\"]))\n : _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"element-content\",\n style: _normalizeStyle({\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n }),\n onMousedown: _cache[2] || (_cache[2] = $event => _ctx.handleSelectElement($event))\n }, [\n _createVNode(_component_ImageOutline, { elementInfo: _ctx.elementInfo }, null, 8, [\"elementInfo\"]),\n _createElementVNode(\"div\", {\n class: \"image-content\",\n style: _normalizeStyle({ clipPath: _ctx.clipShape.style })\n }, [\n _createElementVNode(\"img\", {\n src: _ctx.elementInfo.src,\n draggable: false,\n style: _normalizeStyle({\n top: _ctx.imgPosition.top,\n left: _ctx.imgPosition.left,\n width: _ctx.imgPosition.width,\n height: _ctx.imgPosition.height,\n filter: _ctx.filter,\n }),\n onDragstart: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"prevent\"])),\n alt: \"\"\n }, null, 44, _hoisted_1)\n ], 4)\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e9da1d6a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\"]\nconst _hoisted_2 = [\"src\"]\nconst _hoisted_3 = [\"onMousedown\"]\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"svg\", {\n width: \"16\",\n height: \"16\",\n fill: \"#fff\",\n stroke: \"#333\"\n}, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-width\": \"0.3\",\n \"shape-rendering\": \"crispEdges\",\n d: \"M 16 0 L 0 0 L 0 16 L 4 16 L 4 4 L 16 4 L 16 0 Z\"\n })\n], -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = [\"onMousedown\"]\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"svg\", {\n width: \"16\",\n height: \"16\",\n fill: \"#fff\",\n stroke: \"#333\"\n}, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-width\": \"0.3\",\n \"shape-rendering\": \"crispEdges\",\n d: \"M 16 0 L 0 0 L 0 4 L 16 4 Z\"\n })\n], -1))\nconst _hoisted_8 = [\n _hoisted_7\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"image-clip-handler\",\n style: _normalizeStyle(_ctx.clipWrapperPositionStyle)\n }, [\n _createElementVNode(\"img\", {\n class: \"bottom-img\",\n src: _ctx.src,\n draggable: false,\n alt: \"\",\n style: _normalizeStyle(_ctx.bottomImgPositionStyle)\n }, null, 12, _hoisted_1),\n _createElementVNode(\"div\", {\n class: \"top-image-content\",\n style: _normalizeStyle({\n ..._ctx.topImgWrapperPositionStyle,\n clipPath: _ctx.clipPath,\n })\n }, [\n _createElementVNode(\"img\", {\n class: \"top-img\",\n src: _ctx.src,\n draggable: false,\n alt: \"\",\n style: _normalizeStyle(_ctx.topImgPositionStyle)\n }, null, 12, _hoisted_2)\n ], 4),\n _createElementVNode(\"div\", {\n class: \"operate\",\n style: _normalizeStyle(_ctx.topImgWrapperPositionStyle),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers($event => _ctx.moveClipRange($event), [\"stop\"]))\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['left-top', 'right-top', 'left-bottom', 'right-bottom'], (point) => {\n return _createElementVNode(\"div\", {\n class: _normalizeClass(['clip-point', point, _ctx.rotateClassName]),\n key: point,\n onMousedown: _withModifiers($event => _ctx.scaleClipRange($event, point), [\"stop\"])\n }, _hoisted_5, 42, _hoisted_3)\n }), 64)),\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['top', 'bottom', 'left', 'right'], (point) => {\n return _createElementVNode(\"div\", {\n class: _normalizeClass(['clip-point', point, _ctx.rotateClassName]),\n key: point,\n onMousedown: _withModifiers($event => _ctx.scaleClipRange($event, point), [\"stop\"])\n }, _hoisted_8, 42, _hoisted_6)\n }), 64))\n ], 36)\n ], 4)), [\n [_directive_click_outside, _ctx.handleClip]\n ])\n}","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useKeyboardStore } from '@/store'\nimport { KEYS } from '@/configs/hotkey'\nimport { ImageClipData, ImageClipDataRange, ImageClipedEmitData, OperateResizeHandlers } from '@/types/edit'\n\nexport default defineComponent({\n name: 'image-clip-handler',\n emits: ['clip'],\n props: {\n src: {\n type: String,\n required: true,\n },\n clipData: {\n type: Object as PropType,\n },\n clipPath: {\n type: String,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n top: {\n type: Number,\n required: true,\n },\n left: {\n type: Number,\n required: true,\n },\n rotate: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const { canvasScale } = storeToRefs(useMainStore())\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const clipWrapperPositionStyle = ref({\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 = ref({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n })\n\n // 顶层图片容器位置大小样式(裁剪高亮区域)\n const topImgWrapperPositionStyle = computed(() => {\n const { top, left, width, height } = topImgWrapperPosition.value\n return {\n top: top + '%',\n left: left + '%',\n width: width + '%',\n height: height + '%',\n }\n })\n\n // 顶层图片位置大小样式(裁剪区域图片)\n const topImgPositionStyle = computed(() => {\n const bottomWidth = imgPosition.value.width\n const bottomHeight = imgPosition.value.height\n \n const { top, left, width, height } = topImgWrapperPosition.value\n \n return {\n left: -left * (100 / width) + '%',\n top: -top * (100 / height) + '%',\n width: bottomWidth / width * 100 + '%',\n height: bottomHeight / height * 100 + '%',\n }\n })\n\n // 初始化裁剪位置信息\n const initClipPosition = () => {\n const { left, top } = getClipDataTransformInfo()\n topImgWrapperPosition.value = {\n left: left,\n top: top,\n width: 100,\n height: 100,\n }\n \n clipWrapperPositionStyle.value = {\n top: -top + '%',\n left: -left + '%',\n }\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.value.left - left) / 100 * props.width,\n top: (topImgWrapperPosition.value.top - top) / 100 * props.height,\n width: (topImgWrapperPosition.value.width - 100) / 100 * props.width,\n height: (topImgWrapperPosition.value.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 = { ...topImgWrapperPosition.value }\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 (props.rotate > 45 && props.rotate < 135) {\n moveX = (currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = -(currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\n if ((props.rotate >= 135 && props.rotate <= 180) || (props.rotate >= -180 && props.rotate <= -135)) {\n moveX = -moveX\n moveY = -moveY\n }\n if (props.rotate > -135 && props.rotate < -45) {\n moveX = -(currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = (currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\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.value = {\n ...topImgWrapperPosition.value,\n left: targetLeft,\n top: targetTop,\n }\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: OperateResizeHandlers) => {\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 = { ...topImgWrapperPosition.value }\n\n const aspectRatio = topImgWrapperPosition.value.width / topImgWrapperPosition.value.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 (props.rotate > 45 && props.rotate < 135) {\n moveX = (currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = -(currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\n if ((props.rotate >= 135 && props.rotate <= 180) || (props.rotate >= -180 && props.rotate <= -135)) {\n moveX = -moveX\n moveY = -moveY\n }\n if (props.rotate > -135 && props.rotate < -45) {\n moveX = -(currentPageY - startPageY) / canvasScale.value / props.width * 100\n moveY = (currentPageX - startPageX) / canvasScale.value / props.height * 100\n }\n\n if (ctrlOrShiftKeyActive.value) {\n if (type === OperateResizeHandlers.RIGHT_BOTTOM || type === OperateResizeHandlers.LEFT_TOP) moveY = moveX / aspectRatio\n if (type === OperateResizeHandlers.LEFT_BOTTOM || type === OperateResizeHandlers.RIGHT_TOP) moveY = -moveX / aspectRatio\n }\n\n let targetLeft, targetTop, targetWidth, targetHeight\n\n if (type === OperateResizeHandlers.LEFT_TOP) {\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 === OperateResizeHandlers.RIGHT_TOP) {\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 === OperateResizeHandlers.LEFT_BOTTOM) {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else if (type === OperateResizeHandlers.RIGHT_BOTTOM) {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width + moveX\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === OperateResizeHandlers.TOP) {\n if (originPositopn.top + moveY < 0) {\n moveY = -originPositopn.top\n }\n if (originPositopn.height - moveY < minHeight) {\n moveY = originPositopn.height - minHeight\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height - moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top + moveY\n }\n else if (type === OperateResizeHandlers.BOTTOM) {\n if (originPositopn.top + originPositopn.height + moveY > bottomPosition.height) {\n moveY = bottomPosition.height - (originPositopn.top + originPositopn.height)\n }\n if (originPositopn.height + moveY < minHeight) {\n moveY = minHeight - originPositopn.height\n }\n targetWidth = originPositopn.width\n targetHeight = originPositopn.height + moveY\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n else if (type === OperateResizeHandlers.LEFT) {\n if (originPositopn.left + moveX < 0) {\n moveX = -originPositopn.left\n }\n if (originPositopn.width - moveX < minWidth) {\n moveX = originPositopn.width - minWidth\n }\n targetWidth = originPositopn.width - moveX\n targetHeight = originPositopn.height\n targetLeft = originPositopn.left + moveX\n targetTop = originPositopn.top\n }\n else {\n if (originPositopn.left + originPositopn.width + moveX > bottomPosition.width) {\n moveX = bottomPosition.width - (originPositopn.left + originPositopn.width)\n }\n if (originPositopn.width + moveX < minWidth) {\n moveX = minWidth - originPositopn.width\n }\n targetHeight = originPositopn.height\n targetWidth = originPositopn.width + moveX\n targetLeft = originPositopn.left\n targetTop = originPositopn.top\n }\n\n topImgWrapperPosition.value = {\n left: targetLeft,\n top: targetTop,\n width: targetWidth,\n height: targetHeight,\n }\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 const rotateClassName = computed(() => {\n const prefix = 'rotate-'\n const rotate = props.rotate\n if (rotate > -22.5 && rotate <= 22.5) return prefix + 0\n else if (rotate > 22.5 && rotate <= 67.5) return prefix + 45\n else if (rotate > 67.5 && rotate <= 112.5) return prefix + 90\n else if (rotate > 112.5 && rotate <= 157.5) return prefix + 135\n else if (rotate > 157.5 || rotate <= -157.5) return prefix + 0\n else if (rotate > -157.5 && rotate <= -112.5) return prefix + 45\n else if (rotate > -112.5 && rotate <= -67.5) return prefix + 90\n else if (rotate > -67.5 && rotate <= -22.5) return prefix + 135\n return prefix + 0\n })\n\n return {\n clipWrapperPositionStyle,\n bottomImgPositionStyle,\n topImgWrapperPositionStyle,\n topImgPositionStyle,\n rotateClassName,\n handleClip,\n moveClipRange,\n scaleClipRange,\n }\n },\n})\n","import { render } from \"./ImageClipHandler.vue?vue&type=template&id=e9da1d6a&scoped=true&ts=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=e9da1d6a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e9da1d6a\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { ImageElementClip, PPTImageElement } from '@/types/slides'\nimport { ImageClipedEmitData } from '@/types/edit'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport useClipImage from './useClipImage'\nimport useFilter from './useFilter'\n\nimport ImageOutline from './ImageOutline/index.vue'\nimport ImageClipHandler from './ImageClipHandler.vue'\n\nexport default defineComponent({\n name: 'editable-element-image',\n components: {\n ImageOutline,\n ImageClipHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTImageElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { clipingImageElementId } = storeToRefs(mainStore)\n\n const isCliping = computed(() => clipingImageElementId.value === props.elementInfo.id)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const clip = computed(() => props.elementInfo.clip)\n const { clipShape, imgPosition } = useClipImage(clip)\n\n const filters = computed(() => props.elementInfo.filters)\n const { filter } = useFilter(filters)\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n props.selectElement(e, props.elementInfo)\n }\n\n const handleClip = (data: ImageClipedEmitData) => {\n mainStore.setClipingImageElementId('')\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 left = props.elementInfo.left + position.left\n const top = props.elementInfo.top + position.top\n const width = props.elementInfo.width + position.width\n const height = props.elementInfo.height + position.height\n\n let centerOffsetX = 0\n let centerOffsetY = 0\n\n if (props.elementInfo.rotate) {\n const centerX = (left + width / 2) - (props.elementInfo.left + props.elementInfo.width / 2)\n const centerY = -((top + height / 2) - (props.elementInfo.top + props.elementInfo.height / 2))\n\n const radian = -props.elementInfo.rotate * Math.PI / 180\n\n const rotatedCenterX = centerX * Math.cos(radian) - centerY * Math.sin(radian)\n const rotatedCenterY = centerX * Math.sin(radian) + centerY * Math.cos(radian)\n\n centerOffsetX = rotatedCenterX - centerX\n centerOffsetY = -(rotatedCenterY - centerY)\n }\n\n const _props = {\n clip: { ...originClip, range },\n left: left + centerOffsetX,\n top: top + centerOffsetY,\n width,\n height,\n }\n slidesStore.updateElement({ id: props.elementInfo.id, props: _props })\n \n addHistorySnapshot()\n }\n\n return {\n isCliping,\n handleClip,\n clipingImageElementId,\n shadowStyle,\n handleSelectElement,\n clipShape,\n imgPosition,\n filter,\n flipStyle,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=288ee59d&scoped=true&ts=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=288ee59d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-288ee59d\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, withDirectives as _withDirectives, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d7761db4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"drag-handler top\" }, null, -1))\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"drag-handler bottom\" }, null, -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ProsemirrorEditor = _resolveComponent(\"ProsemirrorEditor\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-text\", { 'lock': _ctx.elementInfo.lock }]),\n ref: \"elementRef\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n backgroundColor: _ctx.elementInfo.fill,\n opacity: _ctx.elementInfo.opacity,\n textShadow: _ctx.shadowStyle,\n lineHeight: _ctx.elementInfo.lineHeight,\n letterSpacing: (_ctx.elementInfo.wordSpace || 0) + 'px',\n color: _ctx.elementInfo.defaultColor,\n fontFamily: _ctx.elementInfo.defaultFontName,\n }),\n onMousedown: _cache[2] || (_cache[2] = $event => _ctx.handleSelectElement($event))\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createVNode(_component_ProsemirrorEditor, {\n class: \"text\",\n elementId: _ctx.elementInfo.id,\n defaultColor: _ctx.elementInfo.defaultColor,\n defaultFontName: _ctx.elementInfo.defaultFontName,\n editable: !_ctx.elementInfo.lock,\n value: _ctx.elementInfo.content,\n onUpdate: _cache[0] || (_cache[0] = value => _ctx.updateContent(value)),\n onMousedown: _cache[1] || (_cache[1] = $event => _ctx.handleSelectElement($event, false))\n }, null, 8, [\"elementId\", \"defaultColor\", \"defaultFontName\", \"editable\", \"value\"]),\n _hoisted_1,\n _hoisted_2\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-481bb541\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"prosemirror-editor\",\n ref: \"editorViewRef\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, null, 512))\n}","import mitt, { Emitter } from 'mitt'\n\nexport const enum EmitterEvents {\n RICH_TEXT_COMMAND = 'RICH_TEXT_COMMAND',\n OPEN_CHART_DATA_EDITOR = 'OPEN_CHART_DATA_EDITOR',\n OPEN_LATEX_EDITOR = 'OPEN_LATEX_EDITOR',\n}\n\nexport interface RichTextCommand {\n command: string;\n value?: string;\n}\n\ntype Events = {\n [EmitterEvents.RICH_TEXT_COMMAND]: RichTextCommand | RichTextCommand[];\n [EmitterEvents.OPEN_CHART_DATA_EDITOR]: void;\n [EmitterEvents.OPEN_LATEX_EDITOR]: void;\n} \n\nconst emitter: Emitter = mitt()\n\nexport default emitter","import { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list'\nimport { Schema } from 'prosemirror-model'\nimport { undo, redo } from 'prosemirror-history'\nimport { undoInputRule } from 'prosemirror-inputrules'\nimport {\n toggleMark,\n selectParentNode,\n joinUp,\n joinDown,\n Command,\n} from 'prosemirror-commands'\n\nexport const buildKeymap = (schema: Schema) => {\n const keys = {}\n const bind = (key: string, cmd: Command) => keys[key] = cmd\n\n bind('Alt-ArrowUp', joinUp)\n bind('Alt-ArrowDown', joinDown)\n bind('Ctrl-z', undo)\n bind('Ctrl-y', redo)\n bind('Backspace', undoInputRule)\n bind('Escape', selectParentNode)\n bind('Ctrl-b', toggleMark(schema.marks.strong))\n bind('Ctrl-i', toggleMark(schema.marks.em))\n bind('Ctrl-u', toggleMark(schema.marks.underline))\n bind('Ctrl-d', toggleMark(schema.marks.strikethrough))\n\n bind('Enter', splitListItem(schema.nodes.list_item))\n bind('Mod-[', liftListItem(schema.nodes.list_item))\n bind('Mod-]', sinkListItem(schema.nodes.list_item))\n\n return keys\n}","import { NodeType, Schema } from 'prosemirror-model'\nimport {\n inputRules,\n wrappingInputRule,\n textblockTypeInputRule,\n smartQuotes,\n emDash,\n ellipsis,\n} from 'prosemirror-inputrules'\n\nconst blockQuoteRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*>\\s$/, nodeType)\n\nconst orderedListRule = (nodeType: NodeType) => (\n wrappingInputRule(\n /^(\\d+)\\.\\s$/, \n nodeType, \n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n )\n)\n\nconst bulletListRule = (nodeType: NodeType) => wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)\n\nconst codeBlockRule = (nodeType: NodeType) => textblockTypeInputRule(/^```$/, nodeType)\n\nexport const buildInputRules = (schema: Schema) => {\n const rules = [\n ...smartQuotes,\n ellipsis,\n emDash,\n ]\n rules.push(blockQuoteRule(schema.nodes.blockquote))\n rules.push(orderedListRule(schema.nodes.ordered_list))\n rules.push(bulletListRule(schema.nodes.bullet_list))\n rules.push(codeBlockRule(schema.nodes.code_block))\n\n return inputRules({ rules })\n}","import { keymap } from 'prosemirror-keymap'\nimport { Schema } from 'prosemirror-model'\nimport { history } from 'prosemirror-history'\nimport { baseKeymap } from 'prosemirror-commands'\nimport { dropCursor } from 'prosemirror-dropcursor'\nimport { gapCursor } from 'prosemirror-gapcursor'\n\nimport { buildKeymap } from './keymap'\nimport { buildInputRules } from './inputrules'\n\nexport const buildPlugins = (schema: Schema) => {\n return [\n buildInputRules(schema),\n keymap(buildKeymap(schema)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n ]\n}","import { nodes } from 'prosemirror-schema-basic'\nimport { Node, NodeSpec } from 'prosemirror-model'\nimport { orderedList, bulletList, listItem } from 'prosemirror-schema-list'\n\nconst _orderedList: NodeSpec = {\n ...orderedList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _bulletList: NodeSpec = {\n ...bulletList,\n content: 'list_item+',\n group: 'block',\n}\n\nconst _listItem: NodeSpec = {\n ...listItem,\n content: 'paragraph block*',\n group: 'block',\n}\n\nconst paragraph: NodeSpec = {\n attrs: {\n align: {\n default: '',\n },\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: dom => {\n const { textAlign } = (dom as HTMLElement).style\n let align = (dom as HTMLElement).getAttribute('align') || textAlign || ''\n align = /(left|right|center|justify)/.test(align) ? align : ''\n \n return { align }\n }\n }\n ],\n toDOM: (node: Node) => {\n const { align } = node.attrs\n let style = ''\n if (align && align !== 'left') style += `text-align: ${align};`\n\n return ['p', { style }, 0]\n },\n}\n\nexport default {\n ...nodes,\n 'ordered_list': _orderedList,\n 'bullet_list': _bulletList,\n 'list_item': _listItem,\n paragraph,\n}\n","import { marks } from 'prosemirror-schema-basic'\nimport { MarkSpec } from 'prosemirror-model'\n\nconst subscript: MarkSpec = {\n excludes: 'subscript',\n parseDOM: [\n { tag: 'sub' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'sub' && null\n },\n ],\n toDOM: () => ['sub', 0],\n}\n\nconst superscript: MarkSpec = {\n excludes: 'superscript',\n parseDOM: [\n { tag: 'sup' },\n {\n style: 'vertical-align',\n getAttrs: value => value === 'super' && null\n },\n ],\n toDOM: () => ['sup', 0],\n}\n\nconst strikethrough: MarkSpec = {\n parseDOM: [\n { tag: 'strike' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'line-through' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'line-through' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration-line: line-through' }, 0],\n}\n\nconst underline: MarkSpec = {\n parseDOM: [\n { tag: 'u' },\n {\n style: 'text-decoration',\n getAttrs: value => value === 'underline' && null\n },\n {\n style: 'text-decoration-line',\n getAttrs: value => value === 'underline' && null\n },\n ],\n toDOM: () => ['span', { style: 'text-decoration: underline' }, 0],\n}\n\nconst forecolor: MarkSpec = {\n attrs: {\n color: {},\n },\n inline: true,\n group: 'inline',\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 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\nconst link: MarkSpec = {\n attrs: {\n href: {},\n title: { default: null },\n target: { default: '_blank' },\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: dom => {\n const href = (dom as HTMLElement).getAttribute('href')\n const title = (dom as HTMLElement).getAttribute('title')\n return { href, title }\n }\n },\n ],\n toDOM: node => ['a', node.attrs, 0],\n}\n\nexport default {\n ...marks,\n subscript,\n superscript,\n strikethrough,\n underline,\n forecolor,\n backcolor,\n fontsize,\n fontname,\n link,\n}","import nodes from './nodes'\nimport marks from './marks'\n\nexport const schemaNodes = nodes\nexport const schemaMarks = marks\n","import { EditorState } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\nimport { Schema, DOMParser } from 'prosemirror-model'\n\nimport { buildPlugins } from './plugins/index'\nimport { schemaNodes, schemaMarks } from './schema/index'\n\nconst schema = new Schema({\n nodes: schemaNodes,\n marks: schemaMarks,\n})\n\nexport const createDocument = (content: string) => {\n const htmlString = `
${content}
`\n const parser = new window.DOMParser()\n const element = parser.parseFromString(htmlString, 'text/html').body.firstElementChild\n return DOMParser.fromSchema(schema).parse(element as Element)\n}\n\nexport const initProsemirrorEditor = (dom: Element, content: string, props = {}) => {\n return new EditorView(dom, {\n state: EditorState.create({\n doc: createDocument(content),\n plugins: buildPlugins(schema),\n }),\n ...props,\n })\n}","import { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction } from 'prosemirror-state'\nimport { EditorView } from 'prosemirror-view'\n\nexport const setTextAlign = (tr: Transaction, schema: Schema, alignment: string) => {\n const { selection, doc } = tr\n if (!selection || !doc) return tr\n\n const { from, to } = selection\n const { nodes } = schema\n\n const blockquote = nodes.blockquote\n const listItem = nodes.list_item\n const paragraph = nodes.paragraph\n\n interface Task {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }\n\n const tasks: Task[] = []\n alignment = alignment || ''\n\n const allowedNodeTypes = new Set([blockquote, listItem, paragraph])\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type\n const align = node.attrs.align || ''\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n })\n }\n return true\n })\n\n if (!tasks.length) return tr\n\n tasks.forEach(task => {\n const { node, pos, nodeType } = task\n let { attrs } = node\n if (alignment) attrs = { ...attrs, align: alignment }\n else attrs = { ...attrs, align: null }\n tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks)\n })\n\n return tr\n}\n\nexport const alignmentCommand = (view: EditorView, alignment: string) => {\n const { state } = view\n const { schema, selection } = state\n const tr = setTextAlign(\n state.tr.setSelection(selection),\n schema,\n alignment,\n )\n view.dispatch(tr)\n}","import { wrapInList, liftListItem } from 'prosemirror-schema-list'\nimport { Schema, Node, NodeType } from 'prosemirror-model'\nimport { Transaction, EditorState } from 'prosemirror-state'\nimport { findParentNode } from '../utils'\n\nconst isList = (node: Node, schema: Schema) => {\n return (\n node.type === schema.nodes.bullet_list ||\n node.type === schema.nodes.ordered_list\n )\n}\n\nexport const toggleList = (listType: NodeType, itemType: NodeType) => {\n return (state: EditorState, dispatch: (tr: Transaction) => void) => {\n const { schema, selection } = state\n const { $from, $to } = selection\n const range = $from.blockRange($to)\n\n if (!range) return false\n\n const parentList = findParentNode((node: Node) => isList(node, schema))(selection)\n\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n if (parentList.node.type === listType) {\n return liftListItem(itemType)(state, dispatch)\n }\n\n if (isList(parentList.node, schema) && listType.validContent(parentList.node.content)) {\n const { tr } = state\n tr.setNodeMarkup(parentList.pos, listType)\n\n if (dispatch) dispatch(tr)\n\n return false\n }\n }\n\n return wrapInList(listType)(state, dispatch)\n }\n}\n","\nimport { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { debounce } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { EditorView } from 'prosemirror-view'\nimport { toggleMark, wrapIn, selectAll } from 'prosemirror-commands'\nimport { initProsemirrorEditor, createDocument } from '@/utils/prosemirror'\nimport { findNodesWithSameMark, getTextAttrs, autoSelectAll, addMark, markActive } from '@/utils/prosemirror/utils'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { alignmentCommand } from '@/utils/prosemirror/commands/setTextAlign'\nimport { toggleList } from '@/utils/prosemirror/commands/toggleList'\n\nexport default defineComponent({\n name: 'prosemirror-editor',\n emits: ['update', 'focus', 'blur'],\n props: {\n elementId: {\n type: String,\n required: true,\n },\n defaultColor: {\n type: String,\n required: true,\n },\n defaultFontName: {\n type: String,\n required: true,\n },\n editable: {\n type: Boolean,\n default: false,\n },\n value: {\n type: String,\n required: true,\n },\n autoFocus: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { emit }) {\n const mainStore = useMainStore()\n const { handleElementId } = storeToRefs(mainStore)\n\n const editorViewRef = ref()\n let editorView: EditorView\n\n // 富文本的各种交互事件监听:\n // 聚焦时取消全局快捷键事件\n // 输入文字时同步数据到vuex\n // 点击鼠标和键盘时同步富文本状态到工具栏\n const handleInput = debounce(function() {\n emit('update', editorView.dom.innerHTML)\n }, 300, { trailing: true })\n\n const handleFocus = () => {\n if (props.value === '请输入内容') {\n setTimeout(() => {\n selectAll(editorView.state, editorView.dispatch)\n }, 100)\n }\n mainStore.setDisableHotkeysState(true)\n emit('focus')\n }\n\n const handleBlur = () => {\n mainStore.setDisableHotkeysState(false)\n emit('blur')\n }\n\n const handleClick = debounce(function() {\n const attrs = getTextAttrs(editorView, {\n color: props.defaultColor,\n fontname: props.defaultFontName,\n })\n mainStore.setRichtextAttrs(attrs)\n }, 30, { trailing: true })\n\n const handleKeydown = () => {\n handleInput()\n handleClick()\n }\n\n // 将富文本内容同步到DOM\n const textContent = computed(() => props.value)\n watch(textContent, () => {\n if (!editorView) return\n if (editorView.hasFocus()) return\n\n const { doc, tr } = editorView.state\n editorView.dispatch(tr.replaceRangeWith(0, doc.content.size, createDocument(textContent.value)))\n })\n\n // 打开/关闭编辑器的编辑模式\n watch(() => props.editable, () => {\n editorView.setProps({ editable: () => props.editable })\n })\n\n // Prosemirror编辑器的初始化和卸载\n onMounted(() => {\n editorView = initProsemirrorEditor((editorViewRef.value as Element), textContent.value, {\n handleDOMEvents: {\n focus: handleFocus,\n blur: handleBlur,\n keydown: handleKeydown,\n click: handleClick,\n },\n editable: () => props.editable,\n })\n if (props.autoFocus) editorView.focus()\n })\n onUnmounted(() => {\n editorView && editorView.destroy()\n })\n \n // 执行富文本命令(可以是一个或多个)\n // 部分命令在执行前先判断当前选区是否为空,如果选区为空先进行全选操作\n const execCommand = (payload: RichTextCommand | RichTextCommand[]) => {\n if (handleElementId.value !== props.elementId) return\n\n const commands = ('command' in payload) ? [payload] : payload\n\n for (const item of commands) {\n if (item.command === 'fontname' && item.value) {\n const mark = editorView.state.schema.marks.fontname.create({ fontname: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'fontsize' && item.value) {\n const mark = editorView.state.schema.marks.fontsize.create({ fontsize: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'color' && item.value) {\n const mark = editorView.state.schema.marks.forecolor.create({ color: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'backcolor' && item.value) {\n const mark = editorView.state.schema.marks.backcolor.create({ backcolor: item.value })\n autoSelectAll(editorView)\n addMark(editorView, mark)\n }\n else if (item.command === 'bold') {\n autoSelectAll(editorView)\n toggleMark(editorView.state.schema.marks.strong)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'em') {\n autoSelectAll(editorView)\n toggleMark(editorView.state.schema.marks.em)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'underline') {\n autoSelectAll(editorView)\n toggleMark(editorView.state.schema.marks.underline)(editorView.state, editorView.dispatch)\n }\n else if (item.command === 'strikethrough') {\n autoSelectAll(editorView)\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 autoSelectAll(editorView)\n const { $from, $to } = editorView.state.selection\n editorView.dispatch(editorView.state.tr.removeMark($from.pos, $to.pos))\n }\n else if (item.command === 'link') {\n const markType = editorView.state.schema.marks.link\n const { from, to } = editorView.state.selection\n const result = findNodesWithSameMark(editorView.state.doc, from, to, markType)\n if (result) {\n if (item.value) {\n const mark = editorView.state.schema.marks.link.create({ href: item.value, title: item.value })\n addMark(editorView, mark, { from: result.from.pos, to: result.to.pos + 1 })\n }\n else editorView.dispatch(editorView.state.tr.removeMark(result.from.pos, result.to.pos + 1, markType))\n }\n else if (markActive(editorView.state, markType)) {\n if (item.value) {\n const mark = editorView.state.schema.marks.link.create({ href: item.value, title: item.value })\n addMark(editorView, mark)\n }\n else toggleMark(markType)(editorView.state, editorView.dispatch)\n }\n else if (item.value) {\n autoSelectAll(editorView)\n toggleMark(markType, { href: item.value, title: item.value })(editorView.state, editorView.dispatch)\n }\n }\n else if (item.command === 'insert' && item.value) {\n editorView.dispatch(editorView.state.tr.insertText(item.value))\n }\n }\n\n editorView.focus()\n handleInput()\n handleClick()\n }\n\n emitter.on(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n onUnmounted(() => {\n emitter.off(EmitterEvents.RICH_TEXT_COMMAND, execCommand)\n })\n\n return {\n editorViewRef,\n }\n },\n})\n","import { render } from \"./ProsemirrorEditor.vue?vue&type=template&id=481bb541&scoped=true&ts=true\"\nimport script from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ProsemirrorEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ProsemirrorEditor.vue?vue&type=style&index=0&id=481bb541&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-481bb541\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-text',\n components: {\n ElementOutline,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTextElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElementId, isScaling } = storeToRefs(mainStore)\n \n const { addHistorySnapshot } = useHistorySnapshot()\n\n const elementRef = ref()\n\n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const handleSelectElement = (e: MouseEvent, canMove = true) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo, canMove)\n }\n\n // 监听文本元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTextElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { height: realHeight },\n })\n }\n else realHeightCache.value = realHeight\n }\n }\n const resizeObserver = new ResizeObserver(updateTextElementHeight)\n\n onMounted(() => {\n if (elementRef.value) resizeObserver.observe(elementRef.value)\n })\n onUnmounted(() => {\n if (elementRef.value) resizeObserver.unobserve(elementRef.value)\n })\n\n const updateContent = (content: string) => {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { content },\n })\n \n addHistorySnapshot()\n }\n\n return {\n elementRef,\n shadowStyle,\n updateContent,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=d7761db4&scoped=true&ts=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=d7761db4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d7761db4\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, withModifiers as _withModifiers, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bd9c8dc2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = [\"transform\"]\nconst _hoisted_4 = [\"d\", \"fill\", \"stroke\", \"stroke-width\", \"stroke-dasharray\"]\nconst _hoisted_5 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GradientDefs = _resolveComponent(\"GradientDefs\")!\n const _component_ProsemirrorEditor = _resolveComponent(\"ProsemirrorEditor\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-shape\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\n opacity: _ctx.elementInfo.opacity,\n filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '',\n transform: _ctx.flipStyle,\n color: _ctx.text.defaultColor,\n fontFamily: _ctx.text.defaultFontName,\n }),\n onMousedown: _cache[2] || (_cache[2] = $event => _ctx.handleSelectElement($event)),\n onDblclick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.enterEditing()))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height\n }, [\n (_ctx.elementInfo.gradient)\n ? (_openBlock(), _createElementBlock(\"defs\", _hoisted_2, [\n _createVNode(_component_GradientDefs, {\n id: `editabel-gradient-${_ctx.elementInfo.id}`,\n type: _ctx.elementInfo.gradient.type,\n color1: _ctx.elementInfo.gradient.color[0],\n color2: _ctx.elementInfo.gradient.color[1],\n rotate: _ctx.elementInfo.gradient.rotate\n }, null, 8, [\"id\", \"type\", \"color1\", \"color2\", \"rotate\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n class: \"shape-path\",\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n \"stroke-linejoin\": \"\",\n d: _ctx.elementInfo.path,\n fill: _ctx.elementInfo.gradient ? `url(#editabel-gradient-${_ctx.elementInfo.id})` : _ctx.elementInfo.fill,\n stroke: _ctx.outlineColor,\n \"stroke-width\": _ctx.outlineWidth,\n \"stroke-dasharray\": _ctx.outlineStyle === 'dashed' ? '10 6' : '0 0'\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_3)\n ], 8, _hoisted_1)),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"shape-text\", [_ctx.text.align, { 'editable': _ctx.editable }]])\n }, [\n (_ctx.editable)\n ? (_openBlock(), _createBlock(_component_ProsemirrorEditor, {\n key: 0,\n elementId: _ctx.elementInfo.id,\n defaultColor: _ctx.text.defaultColor,\n defaultFontName: _ctx.text.defaultFontName,\n editable: !_ctx.elementInfo.lock,\n autoFocus: true,\n value: _ctx.text.content,\n onUpdate: _cache[0] || (_cache[0] = value => _ctx.updateText(value)),\n onMousedown: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"elementId\", \"defaultColor\", \"defaultFontName\", \"editable\", \"value\"]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"show-text ProseMirror-static\",\n innerHTML: _ctx.text.content\n }, null, 8, _hoisted_5))\n ], 2)\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTShapeElement, ShapeText } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementOutline from '@/views/components/element/hooks/useElementOutline'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\nimport useElementFlip from '@/views/components/element/hooks/useElementFlip'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport GradientDefs from './GradientDefs.vue'\nimport ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n GradientDefs,\n ProsemirrorEditor,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElementId } = storeToRefs(mainStore)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n\n const outline = computed(() => props.elementInfo.outline)\n const { outlineWidth, outlineStyle, outlineColor } = useElementOutline(outline)\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const flipH = computed(() => props.elementInfo.flipH)\n const flipV = computed(() => props.elementInfo.flipV)\n const { flipStyle } = useElementFlip(flipH, flipV)\n\n const editable = ref(false)\n\n const enterEditing = () => {\n editable.value = true\n mainStore.setEditingShapeElementId(props.elementInfo.id)\n }\n\n const exitEditing = () => {\n editable.value = false\n mainStore.setEditingShapeElementId('')\n }\n \n watch(handleElementId, () => {\n if (handleElementId.value !== props.elementInfo.id) {\n if (editable.value) exitEditing()\n }\n })\n\n const text = computed(() => {\n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n if (!props.elementInfo.text) return defaultText\n\n return props.elementInfo.text\n })\n\n const updateText = (content: string) => {\n const _text = { ...text.value, content }\n slidesStore.updateElement({\n id: props.elementInfo.id, \n props: { text: _text },\n })\n \n addHistorySnapshot()\n }\n\n return {\n shadowStyle,\n outlineWidth,\n outlineStyle,\n outlineColor,\n flipStyle,\n editable,\n text,\n handleSelectElement,\n updateText,\n enterEditing,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=bd9c8dc2&scoped=true&ts=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=bd9c8dc2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bd9c8dc2\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-603a705d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\", \"stroke\", \"stroke-width\", \"stroke-dasharray\", \"marker-start\", \"marker-end\"]\nconst _hoisted_3 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinePointMarker = _resolveComponent(\"LinePointMarker\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-shape\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({ filter: _ctx.shadowStyle ? `drop-shadow(${_ctx.shadowStyle})` : '' }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.svgWidth,\n height: _ctx.svgHeight\n }, [\n _createElementVNode(\"defs\", null, [\n (_ctx.elementInfo.points[0])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 0,\n id: _ctx.elementInfo.id,\n position: \"start\",\n type: _ctx.elementInfo.points[0],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.elementInfo.points[1])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 1,\n id: _ctx.elementInfo.id,\n position: \"end\",\n type: _ctx.elementInfo.points[1],\n color: _ctx.elementInfo.color,\n baseSize: _ctx.elementInfo.width\n }, null, 8, [\"id\", \"type\", \"color\", \"baseSize\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"path\", {\n class: \"line-point\",\n d: _ctx.path,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.width,\n \"stroke-dasharray\": _ctx.lineDashArray,\n fill: \"none\",\n \"stroke-linecap\": \"\",\n \"stroke-linejoin\": \"\",\n \"stroke-miterlimit\": \"\",\n \"marker-start\": _ctx.elementInfo.points[0] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[0]}-start)` : '',\n \"marker-end\": _ctx.elementInfo.points[1] ? `url(#${_ctx.elementInfo.id}-${_ctx.elementInfo.points[1]}-end)` : ''\n }, null, 8, _hoisted_2),\n _withDirectives(_createElementVNode(\"path\", {\n class: \"line-path\",\n d: _ctx.path,\n stroke: \"transparent\",\n \"stroke-width\": \"20\",\n fill: \"none\"\n }, null, 8, _hoisted_3), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 8, _hoisted_1))\n ], 36)\n ], 6))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { PPTLineElement } from '@/types/slides'\nimport { getLineElementPath } from '@/utils/element'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useElementShadow from '@/views/components/element/hooks/useElementShadow'\n\nimport LinePointMarker from './LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'editable-element-shape',\n components: {\n LinePointMarker,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const handleSelectElement = (e: MouseEvent) => {\n if (props.elementInfo.lock) return\n e.stopPropagation()\n\n props.selectElement(e, props.elementInfo)\n }\n \n const shadow = computed(() => props.elementInfo.shadow)\n const { shadowStyle } = useElementShadow(shadow)\n\n const svgWidth = computed(() => {\n const width = Math.abs(props.elementInfo.start[0] - props.elementInfo.end[0])\n return width < 24 ? 24 : width\n })\n const svgHeight = computed(() => {\n const height = Math.abs(props.elementInfo.start[1] - props.elementInfo.end[1])\n return height < 24 ? 24 : height\n })\n\n const lineDashArray = computed(() => props.elementInfo.style === 'dashed' ? '10 6' : '0 0')\n\n const path = computed(() => {\n return getLineElementPath(props.elementInfo)\n })\n\n return {\n handleSelectElement,\n shadowStyle,\n svgWidth,\n svgHeight,\n lineDashArray,\n path,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=603a705d&scoped=true&ts=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=603a705d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-603a705d\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, withDirectives as _withDirectives, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_Chart = _resolveComponent(\"Chart\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-chart\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\r\n top: _ctx.elementInfo.top + 'px',\r\n left: _ctx.elementInfo.left + 'px',\r\n width: _ctx.elementInfo.width + 'px',\r\n height: _ctx.elementInfo.height + 'px',\r\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n style: _normalizeStyle({\r\n backgroundColor: _ctx.elementInfo.fill,\r\n }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event)),\n onDblclick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.openDataEditor()))\n }, [\n _createVNode(_component_ElementOutline, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n outline: _ctx.elementInfo.outline\n }, null, 8, [\"width\", \"height\", \"outline\"]),\n _createVNode(_component_Chart, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n type: _ctx.elementInfo.chartType,\n data: _ctx.elementInfo.data,\n options: _ctx.elementInfo.options,\n themeColor: _ctx.elementInfo.themeColor,\n gridColor: _ctx.elementInfo.gridColor,\n legends: _ctx.elementInfo.data.legends,\n legend: _ctx.elementInfo.legend || ''\n }, null, 8, [\"width\", \"height\", \"type\", \"data\", \"options\", \"themeColor\", \"gridColor\", \"legends\", \"legend\"])\n ], 36)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","\r\nimport { defineComponent, PropType } from 'vue'\r\nimport { PPTChartElement } from '@/types/slides'\r\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\r\nimport emitter, { EmitterEvents } from '@/utils/emitter'\r\n\r\nimport ElementOutline from '@/views/components/element/ElementOutline.vue'\r\nimport Chart from './Chart.vue'\r\n\r\nexport default defineComponent({\r\n name: 'editable-element-chart',\r\n components: {\r\n ElementOutline,\r\n Chart,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n selectElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTChartElement, canMove?: boolean) => void>,\r\n required: true,\r\n },\r\n contextmenus: {\r\n type: Function as PropType<() => ContextmenuItem[]>,\r\n },\r\n },\r\n setup(props) {\r\n const handleSelectElement = (e: MouseEvent) => {\r\n if (props.elementInfo.lock) return\r\n e.stopPropagation()\r\n\r\n props.selectElement(e, props.elementInfo)\r\n }\r\n\r\n const openDataEditor = () => {\r\n emitter.emit(EmitterEvents.OPEN_CHART_DATA_EDITOR)\r\n }\r\n\r\n return {\r\n handleSelectElement,\r\n openDataEditor,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=c09631b6&scoped=true&ts=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=c09631b6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c09631b6\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, withModifiers as _withModifiers, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-426704b7\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_EditableTable = _resolveComponent(\"EditableTable\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-table\", { 'lock': _ctx.elementInfo.lock }]),\n ref: \"elementRef\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_EditableTable, {\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"])),\n data: _ctx.elementInfo.data,\n width: _ctx.elementInfo.width,\n colWidths: _ctx.elementInfo.colWidths,\n outline: _ctx.elementInfo.outline,\n theme: _ctx.elementInfo.theme,\n editable: _ctx.editable,\n onChange: _cache[1] || (_cache[1] = data => _ctx.updateTableCells(data)),\n onChangeColWidths: _cache[2] || (_cache[2] = widths => _ctx.updateColWidths(widths)),\n onChangeSelectedCells: _cache[3] || (_cache[3] = cells => _ctx.updateSelectedCells(cells))\n }, null, 8, [\"data\", \"width\", \"colWidths\", \"outline\", \"theme\", \"editable\"]),\n (!_ctx.editable || _ctx.elementInfo.lock)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"table-mask\", { 'lock': _ctx.elementInfo.lock }]),\n onDblclick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.startEdit())),\n onMousedown: _cache[5] || (_cache[5] = $event => _ctx.handleSelectElement($event))\n }, [\n _createElementVNode(\"div\", {\n class: \"mask-tip\",\n style: _normalizeStyle({ transform: `scale(${ 1 / _ctx.canvasScale })` })\n }, \"双击编辑\", 4)\n ], 34))\n : _createCommentVNode(\"\", true)\n ])), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createBlock as _createBlock, vShow as _vShow, resolveDirective as _resolveDirective, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-c0c56b6e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"handler\"\n}\nconst _hoisted_2 = [\"onMousedown\"]\nconst _hoisted_3 = [\"width\"]\nconst _hoisted_4 = [\"rowspan\", \"colspan\", \"data-cell-index\", \"onMousedown\", \"onMouseenter\"]\nconst _hoisted_5 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CustomTextarea = _resolveComponent(\"CustomTextarea\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"editable-table\",\n style: _normalizeStyle({ width: _ctx.totalWidth + 'px' })\n }, [\n (_ctx.editable)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.dragLinePosition, (pos, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"drag-line\",\n key: index,\n style: _normalizeStyle({ left: pos + 'px' }),\n onMousedown: $event => _ctx.handleMousedownColHandler($event, index)\n }, null, 44, _hoisted_2))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"table\", {\n class: _normalizeClass({\n 'theme': _ctx.theme,\n 'row-header': _ctx.theme?.rowHeader,\n 'row-footer': _ctx.theme?.rowFooter,\n 'col-header': _ctx.theme?.colHeader,\n 'col-footer': _ctx.theme?.colFooter,\n }),\n style: _normalizeStyle(`--themeColor: ${_ctx.theme?.color}; --subThemeColor1: ${_ctx.subThemeColor[0]}; --subThemeColor2: ${_ctx.subThemeColor[1]}`)\n }, [\n _createElementVNode(\"colgroup\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.colSizeList, (width, index) => {\n return (_openBlock(), _createElementBlock(\"col\", {\n span: \"1\",\n key: index,\n width: width\n }, null, 8, _hoisted_3))\n }), 128))\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tableCells, (rowCells, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"tr\", { key: rowIndex }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rowCells, (cell, colIndex) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"td\", {\n class: _normalizeClass([\"cell\", {\n 'selected': _ctx.selectedCells.includes(`${rowIndex}_${colIndex}`) && _ctx.selectedCells.length > 1,\n 'active': _ctx.activedCell === `${rowIndex}_${colIndex}`,\n }]),\n style: _normalizeStyle({\n borderStyle: _ctx.outline.style,\n borderColor: _ctx.outline.color,\n borderWidth: _ctx.outline.width + 'px',\n ..._ctx.getTextStyle(cell.style),\n }),\n key: cell.id,\n rowspan: cell.rowspan,\n colspan: cell.colspan,\n \"data-cell-index\": `${rowIndex}_${colIndex}`,\n onMousedown: $event => _ctx.handleCellMousedown($event, rowIndex, colIndex),\n onMouseenter: ($event: any) => (_ctx.handleCellMouseenter(rowIndex, colIndex))\n }, [\n (_ctx.activedCell === `${rowIndex}_${colIndex}`)\n ? (_openBlock(), _createBlock(_component_CustomTextarea, {\n key: 0,\n class: _normalizeClass([\"cell-text\", { 'active': _ctx.activedCell === `${rowIndex}_${colIndex}` }]),\n contenteditable: \"plaintext-only\",\n value: cell.text,\n onUpdateValue: value => _ctx.handleInput(value, rowIndex, colIndex),\n onInsertExcelData: value => _ctx.insertExcelData(value, rowIndex, colIndex)\n }, null, 8, [\"class\", \"value\", \"onUpdateValue\", \"onInsertExcelData\"]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"cell-text\",\n innerHTML: _ctx.formatText(cell.text)\n }, null, 8, _hoisted_5))\n ], 46, _hoisted_4)), [\n [_vShow, !_ctx.hideCells.includes(`${rowIndex}_${colIndex}`)],\n [_directive_contextmenu, el => _ctx.contextmenus(el)]\n ])\n }), 128))\n ]))\n }), 128))\n ])\n ], 6)\n ], 4))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-59f468e0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"contenteditable\", \"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"custom-textarea\",\n ref: \"textareaRef\",\n contenteditable: _ctx.contenteditable,\n onFocus: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.handleFocus && _ctx.handleFocus(...args))),\n onBlur: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.handleBlur && _ctx.handleBlur(...args))),\n onInput: _cache[2] || (_cache[2] = $event => _ctx.handleInput($event)),\n innerHTML: _ctx.text\n }, null, 40, _hoisted_1))\n}","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { pasteCustomClipboardString, pasteExcelClipboardString } from '@/utils/clipboard'\n\nexport default defineComponent({\n name: 'custom-textarea',\n emits: ['updateValue', 'insertExcelData'],\n props: {\n value: {\n type: String,\n default: '',\n },\n contenteditable: {\n type: [Boolean, String],\n default: false,\n },\n },\n setup(props, { emit }) {\n const textareaRef = ref()\n const text = ref('')\n const isFocus = ref(false)\n\n // 自定义v-modal,同步数据\n // 当文本框聚焦时,不执行数据同步\n watch(() => props.value, () => {\n if (isFocus.value) return\n text.value = props.value\n if (textareaRef.value) textareaRef.value.innerHTML = props.value\n }, { immediate: true })\n\n const handleInput = () => {\n if (!textareaRef.value) return\n const text = textareaRef.value.innerHTML\n emit('updateValue', text)\n }\n\n // 聚焦时更新焦点标记,并监听粘贴事件\n const handleFocus = () => {\n isFocus.value = true\n\n if (!textareaRef.value) return\n textareaRef.value.onpaste = (e: ClipboardEvent) => {\n e.preventDefault()\n if (!e.clipboardData) return\n\n const clipboardDataFirstItem = e.clipboardData.items[0]\n\n if (clipboardDataFirstItem && clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => {\n const clipboardData = pasteCustomClipboardString(text)\n if (typeof clipboardData === 'object') return\n \n const excelData = pasteExcelClipboardString(text)\n if (excelData) {\n emit('insertExcelData', excelData)\n if (textareaRef.value) textareaRef.value.innerHTML = excelData[0][0]\n return\n }\n\n emit('updateValue', text)\n document.execCommand('insertText', false, text)\n })\n }\n }\n }\n\n // 失焦时更新焦点标记,清除粘贴事件监听\n const handleBlur = () => {\n isFocus.value = false\n if (textareaRef.value) textareaRef.value.onpaste = null\n }\n\n // 清除粘贴事件监听\n onUnmounted(() => {\n if (textareaRef.value) textareaRef.value.onpaste = null\n })\n\n return {\n textareaRef,\n handleFocus,\n handleInput,\n handleBlur,\n text,\n }\n },\n})\n","import { render } from \"./CustomTextarea.vue?vue&type=template&id=59f468e0&scoped=true&ts=true\"\nimport script from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\nexport * from \"./CustomTextarea.vue?vue&type=script&lang=ts\"\n\nimport \"./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-59f468e0\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { debounce, isEqual } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElementOutline, TableCell, TableTheme } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { KEYS } from '@/configs/hotkey'\nimport { createRandomCode } from '@/utils/common'\nimport { getTextStyle, formatText } from './utils'\nimport useHideCells from './useHideCells'\nimport useSubThemeColor from './useSubThemeColor'\n\nimport CustomTextarea from './CustomTextarea.vue'\n\nexport default defineComponent({\n name: 'editable-table',\n emits: ['change', 'changeColWidths', 'changeSelectedCells'],\n components: {\n CustomTextarea,\n },\n props: {\n data: {\n type: Array as PropType,\n required: true,\n },\n width: {\n type: Number,\n required: true,\n },\n colWidths: {\n type: Array as PropType,\n required: true,\n },\n outline: {\n type: Object as PropType,\n required: true,\n },\n theme: {\n type: Object as PropType,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { emit }) {\n const { canvasScale } = storeToRefs(useMainStore())\n \n const isStartSelect = ref(false)\n const startCell = ref([])\n const endCell = ref([])\n\n const tableCells = computed({\n get() {\n return props.data\n },\n set(newData) {\n emit('change', newData)\n },\n })\n\n // 主题辅助色\n const theme = computed(() => props.theme)\n const { subThemeColor } = useSubThemeColor(theme)\n\n // 计算表格每一列的列宽和总宽度\n const colSizeList = ref([])\n const totalWidth = computed(() => colSizeList.value.reduce((a, b) => a + b))\n watch([\n () => props.colWidths,\n () => props.width,\n ], () => {\n colSizeList.value = props.colWidths.map(item => item * props.width)\n }, { immediate: true })\n \n // 清除全部单元格的选中状态\n // 表格处于不可编辑状态时也需要清除\n const removeSelectedCells = () => {\n startCell.value = []\n endCell.value = []\n }\n\n watch(() => props.editable, () => {\n if (!props.editable) removeSelectedCells()\n })\n\n // 用于拖拽列宽的操作节点位置\n const dragLinePosition = computed(() => {\n const dragLinePosition: number[] = []\n for (let i = 1; i < colSizeList.value.length + 1; i++) {\n const pos = colSizeList.value.slice(0, i).reduce((a, b) => (a + b))\n dragLinePosition.push(pos)\n }\n return dragLinePosition\n })\n\n // 无效的单元格位置(被合并的单元格位置)集合\n const cells = computed(() => props.data)\n const { hideCells } = useHideCells(cells)\n\n // 当前选中的单元格集合\n const selectedCells = computed(() => {\n if (!startCell.value.length) return []\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return [`${startX}_${startY}`]\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return [`${startX}_${startY}`]\n\n const selectedCells = []\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n for (let j = 0; j < rowCells.length; j++) {\n if (i >= minX && i <= maxX && j >= minY && j <= maxY) selectedCells.push(`${i}_${j}`)\n }\n }\n return selectedCells\n })\n\n watch(selectedCells, (value, oldValue) => {\n if (isEqual(value, oldValue)) return\n emit('changeSelectedCells', selectedCells.value)\n })\n\n // 当前激活的单元格:当且仅当只有一个选中单元格时,该单元格为激活的单元格\n const activedCell = computed(() => {\n if (selectedCells.value.length > 1) return null\n return selectedCells.value[0]\n })\n\n // 当前选中的单元格位置范围\n const selectedRange = computed(() => {\n if (!startCell.value.length) return null\n const [startX, startY] = startCell.value\n\n if (!endCell.value.length) return { row: [startX, startX], col: [startY, startY] }\n const [endX, endY] = endCell.value\n\n if (startX === endX && startY === endY) return { row: [startX, startX], col: [startY, startY] }\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n return {\n row: [minX, maxX],\n col: [minY, maxY],\n }\n })\n\n // 设置选中单元格状态(鼠标点击或拖选)\n const handleMouseup = () => isStartSelect.value = false\n\n const handleCellMousedown = (e: MouseEvent, rowIndex: number, colIndex: number) => {\n if (e.button === 0) {\n endCell.value = []\n isStartSelect.value = true\n startCell.value = [rowIndex, colIndex]\n }\n }\n\n const handleCellMouseenter = (rowIndex: number, colIndex: number) => {\n if (!isStartSelect.value) return\n endCell.value = [rowIndex, colIndex]\n }\n\n onMounted(() => {\n document.addEventListener('mouseup', handleMouseup)\n })\n onUnmounted(() => {\n document.removeEventListener('mouseup', handleMouseup)\n })\n\n // 判断某位置是否为无效单元格(被合并掉的位置)\n const isHideCell = (rowIndex: number, colIndex: number) => hideCells.value.includes(`${rowIndex}_${colIndex}`)\n\n // 选中指定的列\n const selectCol = (index: number) => {\n const maxRow = tableCells.value.length - 1\n startCell.value = [0, index]\n endCell.value = [maxRow, index]\n }\n\n // 选中指定的行\n const selectRow = (index: number) => {\n const maxCol = tableCells.value[index].length - 1\n startCell.value = [index, 0]\n endCell.value = [index, maxCol]\n }\n\n // 选中全部单元格\n const selectAll = () => {\n const maxRow = tableCells.value.length - 1\n const maxCol = tableCells.value[maxRow].length - 1\n startCell.value = [0, 0]\n endCell.value = [maxRow, maxCol]\n }\n\n // 删除一行\n const deleteRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const targetCells = tableCells.value[rowIndex]\n const hideCellsPos = []\n for (let i = 0; i < targetCells.length; i++) {\n if (isHideCell(rowIndex, i)) hideCellsPos.push(i)\n }\n \n for (const pos of hideCellsPos) {\n for (let i = rowIndex; i >= 0; i--) {\n if (!isHideCell(i, pos)) {\n _tableCells[i][pos].rowspan = _tableCells[i][pos].rowspan - 1\n break\n }\n }\n }\n\n _tableCells.splice(rowIndex, 1)\n tableCells.value = _tableCells\n }\n\n // 删除一列\n const deleteCol = (colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const hideCellsPos = []\n for (let i = 0; i < tableCells.value.length; i++) {\n if (isHideCell(i, colIndex)) hideCellsPos.push(i)\n }\n\n for (const pos of hideCellsPos) {\n for (let i = colIndex; i >= 0; i--) {\n if (!isHideCell(pos, i)) {\n _tableCells[pos][i].colspan = _tableCells[pos][i].colspan - 1\n break\n }\n }\n }\n\n tableCells.value = _tableCells.map(item => {\n item.splice(colIndex, 1)\n return item\n })\n colSizeList.value.splice(colIndex, 1)\n emit('changeColWidths', colSizeList.value)\n }\n \n // 插入一行\n const insertRow = (rowIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n const rowCells: TableCell[] = []\n for (let i = 0; i < _tableCells[0].length; i++) {\n rowCells.push({\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n })\n }\n\n _tableCells.splice(rowIndex, 0, rowCells)\n tableCells.value = _tableCells\n }\n\n // 插入一列\n const insertCol = (colIndex: number) => {\n tableCells.value = tableCells.value.map(item => {\n const cell = {\n colspan: 1,\n rowspan: 1,\n text: '',\n id: createRandomCode(),\n }\n item.splice(colIndex, 0, cell)\n return item\n })\n colSizeList.value.splice(colIndex, 0, 100)\n emit('changeColWidths', colSizeList.value)\n }\n\n // 填充指定的行/列数\n const fillTable = (rowCount: number, colCount: number) => {\n let _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n const defaultCell = { colspan: 1, rowspan: 1, text: '' }\n \n if (rowCount) {\n const newRows = []\n for (let i = 0; i < rowCount; i++) {\n const rowCells: TableCell[] = []\n for (let j = 0; j < _tableCells[0].length; j++) {\n rowCells.push({\n ...defaultCell,\n id: createRandomCode(),\n })\n }\n newRows.push(rowCells)\n }\n _tableCells = [..._tableCells, ...newRows]\n }\n if (colCount) {\n _tableCells = _tableCells.map(item => {\n const cells: TableCell[] = []\n for (let i = 0; i < colCount; i++) {\n const cell = {\n ...defaultCell,\n id: createRandomCode(),\n }\n cells.push(cell)\n }\n return [...item, ...cells]\n })\n colSizeList.value = [...colSizeList.value, ...new Array(colCount).fill(100)]\n emit('changeColWidths', colSizeList.value)\n }\n\n tableCells.value = _tableCells\n }\n \n // 合并单元格\n const mergeCells = () => {\n const [startX, startY] = startCell.value\n const [endX, endY] = endCell.value\n\n const minX = Math.min(startX, endX)\n const minY = Math.min(startY, endY)\n const maxX = Math.max(startX, endX)\n const maxY = Math.max(startY, endY)\n\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n \n _tableCells[minX][minY].rowspan = maxX - minX + 1\n _tableCells[minX][minY].colspan = maxY - minY + 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 拆分单元格\n const splitCells = (rowIndex: number, colIndex: number) => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n _tableCells[rowIndex][colIndex].rowspan = 1\n _tableCells[rowIndex][colIndex].colspan = 1\n\n tableCells.value = _tableCells\n removeSelectedCells()\n }\n\n // 鼠标拖拽调整列宽\n const handleMousedownColHandler = (e: MouseEvent, colIndex: number) => {\n removeSelectedCells()\n let isMouseDown = true\n\n const originWidth = colSizeList.value[colIndex]\n const startPageX = e.pageX\n\n const minWidth = 50\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n \n const moveX = (e.pageX - startPageX) / canvasScale.value\n const width = originWidth + moveX < minWidth ? minWidth : Math.round(originWidth + moveX)\n\n colSizeList.value[colIndex] = width\n }\n document.onmouseup = () => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n emit('changeColWidths', colSizeList.value)\n }\n }\n\n // 清空选中单元格内的文字\n const clearSelectedCellText = () => {\n const _tableCells: TableCell[][] = JSON.parse(JSON.stringify(tableCells.value))\n\n for (let i = 0; i < _tableCells.length; i++) {\n for (let j = 0; j < _tableCells[i].length; j++) {\n if (selectedCells.value.includes(`${i}_${j}`)) {\n _tableCells[i][j].text = ''\n }\n }\n }\n tableCells.value = _tableCells\n }\n\n // 将焦点移动到下一个单元格\n // 当前行右边有单元格时,焦点右移\n // 当前行右边无单元格(已处在行末),且存在下一行时,焦点移动至下一行行首\n // 当前行右边无单元格(已处在行末),且不存在下一行(已处在最后一行)时,新建一行并将焦点移动至下一行行首\n const tabActiveCell = () => {\n const getNextCell = (i: number, j: number): [number, number] | null => {\n if (!tableCells.value[i]) return null\n if (!tableCells.value[i][j]) return getNextCell(i + 1, 0)\n if (isHideCell(i, j)) return getNextCell(i, j + 1)\n return [i, j]\n }\n\n endCell.value = []\n\n const nextRow = startCell.value[0]\n const nextCol = startCell.value[1] + 1\n\n const nextCell = getNextCell(nextRow, nextCol)\n if (!nextCell) {\n insertRow(nextRow + 1)\n startCell.value = [nextRow + 1, 0]\n }\n else startCell.value = nextCell\n\n // 移动焦点后自动聚焦文本\n nextTick(() => {\n const textRef = document.querySelector('.cell-text.active') as HTMLInputElement\n if (textRef) textRef.focus()\n })\n }\n\n // 表格快捷键监听\n const keydownListener = (e: KeyboardEvent) => {\n if (!props.editable || !selectedCells.value.length) return\n\n const key = e.key.toUpperCase()\n if (selectedCells.value.length < 2) {\n if (key === KEYS.TAB) {\n e.preventDefault()\n tabActiveCell()\n }\n if (e.ctrlKey && key === KEYS.UP) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex)\n }\n if (e.ctrlKey && key === KEYS.DOWN) {\n e.preventDefault()\n const rowIndex = +selectedCells.value[0].split('_')[0]\n insertRow(rowIndex + 1)\n }\n if (e.ctrlKey && key === KEYS.LEFT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex)\n }\n if (e.ctrlKey && key === KEYS.RIGHT) {\n e.preventDefault()\n const colIndex = +selectedCells.value[0].split('_')[1]\n insertCol(colIndex + 1)\n }\n }\n else if (key === KEYS.DELETE) {\n clearSelectedCellText()\n }\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keydownListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keydownListener)\n })\n\n // 单元格文字输入时更新表格数据\n const handleInput = debounce(function(value, rowIndex, colIndex) {\n tableCells.value[rowIndex][colIndex].text = value\n emit('change', tableCells.value)\n }, 300, { trailing: true })\n\n // 插入来自Excel的数据,表格的行/列数不够时自动补足\n const insertExcelData = (data: string[][], rowIndex: number, colIndex: number) => {\n const maxRow = data.length\n const maxCol = data[0].length\n\n let fillRowCount = 0\n let fillColCount = 0\n if (rowIndex + maxRow > tableCells.value.length) fillRowCount = rowIndex + maxRow - tableCells.value.length\n if (colIndex + maxCol > tableCells.value[0].length) fillColCount = colIndex + maxCol - tableCells.value[0].length\n if (fillRowCount || fillColCount) fillTable(fillRowCount, fillColCount)\n\n nextTick(() => {\n for (let i = 0; i < maxRow; i++) {\n for (let j = 0; j < maxCol; j++) {\n if (tableCells.value[rowIndex + i][colIndex + j]) {\n tableCells.value[rowIndex + i][colIndex + j].text = data[i][j]\n }\n }\n }\n emit('change', tableCells.value)\n })\n }\n\n // 获取有效的单元格(排除掉被合并的单元格)\n const getEffectiveTableCells = () => {\n const effectiveTableCells = []\n\n for (let i = 0; i < tableCells.value.length; i++) {\n const rowCells = tableCells.value[i]\n const _rowCells = []\n for (let j = 0; j < rowCells.length; j++) {\n if (!isHideCell(i, j)) _rowCells.push(rowCells[j])\n }\n if (_rowCells.length) effectiveTableCells.push(_rowCells)\n }\n\n return effectiveTableCells\n }\n\n // 检查是否可以删除行和列:有效的行/列数大于1\n const checkCanDeleteRowOrCol = () => {\n const effectiveTableCells = getEffectiveTableCells()\n const canDeleteRow = effectiveTableCells.length > 1\n const canDeleteCol = effectiveTableCells[0].length > 1\n\n return { canDeleteRow, canDeleteCol }\n }\n\n // 检查是否可以合并或拆分\n // 必须多选才可以合并\n // 必须单选且所选单元格为合并单元格才可以拆分\n const checkCanMergeOrSplit = (rowIndex: number, colIndex: number) => {\n const isMultiSelected = selectedCells.value.length > 1\n const targetCell = tableCells.value[rowIndex][colIndex]\n\n const canMerge = isMultiSelected\n const canSplit = !isMultiSelected && (targetCell.rowspan > 1 || targetCell.colspan > 1)\n\n return { canMerge, canSplit }\n }\n\n const contextmenus = (el: HTMLElement): ContextmenuItem[] => {\n const cellIndex = el.dataset.cellIndex as string\n const rowIndex = +cellIndex.split('_')[0]\n const colIndex = +cellIndex.split('_')[1]\n\n if (!selectedCells.value.includes(`${rowIndex}_${colIndex}`)) {\n startCell.value = [rowIndex, colIndex]\n endCell.value = []\n }\n\n const { canMerge, canSplit } = checkCanMergeOrSplit(rowIndex, colIndex)\n const { canDeleteRow, canDeleteCol } = checkCanDeleteRowOrCol()\n\n return [\n {\n text: '插入列',\n children: [\n { text: '到左侧', handler: () => insertCol(colIndex) },\n { text: '到右侧', handler: () => insertCol(colIndex + 1) },\n ],\n },\n {\n text: '插入行',\n children: [\n { text: '到上方', handler: () => insertRow(rowIndex) },\n { text: '到下方', handler: () => insertRow(rowIndex + 1) },\n ],\n },\n {\n text: '删除列',\n disable: !canDeleteCol,\n handler: () => deleteCol(colIndex),\n },\n {\n text: '删除行',\n disable: !canDeleteRow,\n handler: () => deleteRow(rowIndex),\n },\n { divider: true },\n {\n text: '合并单元格',\n disable: !canMerge,\n handler: mergeCells,\n },\n {\n text: '取消合并单元格',\n disable: !canSplit,\n handler: () => splitCells(rowIndex, colIndex),\n },\n { divider: true },\n {\n text: '选中当前列',\n handler: () => selectCol(colIndex),\n },\n {\n text: '选中当前行',\n handler: () => selectRow(rowIndex),\n },\n {\n text: '选中全部单元格',\n handler: selectAll,\n },\n ]\n }\n\n return {\n getTextStyle,\n dragLinePosition,\n tableCells,\n colSizeList,\n totalWidth,\n hideCells,\n selectedCells,\n activedCell,\n selectedRange,\n handleCellMousedown,\n handleCellMouseenter,\n selectCol,\n selectRow,\n handleMousedownColHandler,\n contextmenus,\n handleInput,\n insertExcelData,\n subThemeColor,\n formatText,\n }\n },\n})\n","import { render } from \"./EditableTable.vue?vue&type=template&id=c0c56b6e&scoped=true&ts=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=c0c56b6e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c0c56b6e\"]])\n\nexport default __exports__","\nimport { defineComponent, nextTick, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTableElement, TableCell } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport EditableTable from './EditableTable.vue'\n\nexport default defineComponent({\n name: 'editable-element-table',\n components: {\n EditableTable,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { canvasScale, handleElementId, isScaling } = storeToRefs(mainStore)\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 mainStore.setDisableHotkeysState(editable.value)\n })\n\n const startEdit = () => {\n if (!props.elementInfo.lock) editable.value = true\n }\n\n // 监听表格元素的尺寸变化,当高度变化时,更新高度到vuex\n // 如果高度变化时正处在缩放操作中,则等待缩放操作结束后再更新\n const realHeightCache = ref(-1)\n\n watch(isScaling, () => {\n if (handleElementId.value !== props.elementInfo.id) return\n\n if (isScaling.value) editable.value = false\n\n if (!isScaling.value && realHeightCache.value !== -1) {\n slidesStore.updateElement({\n id: props.elementInfo.id,\n props: { height: realHeightCache.value },\n })\n realHeightCache.value = -1\n }\n })\n\n const updateTableElementHeight = (entries: ResizeObserverEntry[]) => {\n const contentRect = entries[0].contentRect\n if (!elementRef.value) return\n\n const realHeight = contentRect.height\n\n if (props.elementInfo.height !== realHeight) {\n if (!isScaling.value) {\n slidesStore.updateElement({\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 slidesStore.updateElement({\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 slidesStore.updateElement({\n id: props.elementInfo.id, \n props: { width, colWidths },\n })\n addHistorySnapshot()\n }\n\n // 更新表格当前选中的单元格\n const updateSelectedCells = (cells: string[]) => {\n nextTick(() => mainStore.setSelectedTableCells(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=426704b7&scoped=true&ts=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=426704b7&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-426704b7\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3168526a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\", \"stroke\", \"stroke-width\"]\nconst _hoisted_2 = [\"transform\"]\nconst _hoisted_3 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-latex\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event)),\n onDblclick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.openLatexEditor()))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n overflow: \"visible\",\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n stroke: _ctx.elementInfo.color,\n \"stroke-width\": _ctx.elementInfo.strokeWidth,\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }, [\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.elementInfo.width / _ctx.elementInfo.viewBox[0]}, ${_ctx.elementInfo.height / _ctx.elementInfo.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.elementInfo.path\n }, null, 8, _hoisted_3)\n ], 8, _hoisted_2)\n ], 8, _hoisted_1))\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTLatexElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\n\nexport default defineComponent({\n name: 'editable-element-latex',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLatexElement, 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 openLatexEditor = () => {\n emitter.emit(EmitterEvents.OPEN_LATEX_EDITOR)\n }\n\n return {\n handleSelectElement,\n openLatexEditor,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=3168526a&scoped=true&ts=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=3168526a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3168526a\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_VideoPlayer = _resolveComponent(\"VideoPlayer\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-video\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n onMousedown: _cache[1] || (_cache[1] = $event => _ctx.handleSelectElement($event, false))\n }, [\n _createVNode(_component_VideoPlayer, {\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n src: _ctx.elementInfo.src,\n poster: _ctx.elementInfo.poster,\n scale: _ctx.canvasScale\n }, null, 8, [\"width\", \"height\", \"src\", \"poster\", \"scale\"]),\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['t', 'b', 'l', 'r'], (item) => {\n return _createElementVNode(\"div\", {\n class: _normalizeClass(['handler-border', item]),\n key: item,\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleSelectElement($event))\n }, null, 34)\n }), 64))\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e716fb74\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\", \"poster\"]\nconst _hoisted_2 = { class: \"bezel\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"controller-mask\" }, null, -1))\nconst _hoisted_4 = { class: \"controller\" }\nconst _hoisted_5 = { class: \"icons icons-left\" }\nconst _hoisted_6 = { class: \"icon-content\" }\nconst _hoisted_7 = { class: \"volume\" }\nconst _hoisted_8 = { class: \"icon-content\" }\nconst _hoisted_9 = {\n class: \"volume-bar\",\n ref: \"volumeBarRef\"\n}\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"time\" }\nconst _hoisted_13 = { class: \"ptime\" }\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\" / \")\nconst _hoisted_15 = { class: \"dtime\" }\nconst _hoisted_16 = { class: \"icons icons-right\" }\nconst _hoisted_17 = { class: \"speed\" }\nconst _hoisted_18 = { class: \"icon speed-icon\" }\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"icon-content\" }, \"循环\", -1))\nconst _hoisted_21 = [\n _hoisted_20\n]\nconst _hoisted_22 = { class: \"bar\" }\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_24 = [\n _hoisted_23\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPause = _resolveComponent(\"IconPause\")!\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n const _component_IconVolumeMute = _resolveComponent(\"IconVolumeMute\")!\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_IconVolumeSmall = _resolveComponent(\"IconVolumeSmall\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"video-player\", { 'hide-controller': _ctx.hideController }]),\n style: _normalizeStyle({\n width: _ctx.width * _ctx.scale + 'px',\n height: _ctx.height * _ctx.scale + 'px',\n transform: `scale(${1 / _ctx.scale})`,\n }),\n onMousemove: _cache[22] || (_cache[22] = ($event: any) => (_ctx.autoHideController())),\n onClick: _cache[23] || (_cache[23] = ($event: any) => (_ctx.autoHideController()))\n }, [\n _createElementVNode(\"div\", {\n class: \"video-wrap\",\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.toggle()))\n }, [\n _createElementVNode(\"video\", {\n class: \"video\",\n ref: \"videoRef\",\n src: _ctx.src,\n poster: _ctx.poster,\n \"webkit-playsinline\": \"\",\n playsinline: \"\",\n onDurationchange: _cache[0] || (_cache[0] = ($event: any) => (_ctx.handleDurationchange())),\n onTimeupdate: _cache[1] || (_cache[1] = ($event: any) => (_ctx.handleTimeupdate())),\n onEnded: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleEnded())),\n onProgress: _cache[3] || (_cache[3] = ($event: any) => (_ctx.handleProgress())),\n onPlay: _cache[4] || (_cache[4] = ($event: any) => (_ctx.autoHideController())),\n onPause: _cache[5] || (_cache[5] = ($event: any) => (_ctx.autoHideController())),\n onError: _cache[6] || (_cache[6] = ($event: any) => (_ctx.handleError()))\n }, null, 40, _hoisted_1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"bezel-icon\", { 'bezel-transition': _ctx.bezelTransition }]),\n onAnimationend: _cache[7] || (_cache[7] = ($event: any) => (_ctx.bezelTransition = false))\n }, [\n (_ctx.paused)\n ? (_openBlock(), _createBlock(_component_IconPause, { key: 0 }))\n : (_openBlock(), _createBlock(_component_IconPlayOne, { key: 1 }))\n ], 34)\n ])\n ]),\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", {\n class: \"icon play-icon\",\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.toggle()))\n }, [\n _createElementVNode(\"span\", _hoisted_6, [\n (_ctx.paused)\n ? (_openBlock(), _createBlock(_component_IconPlayOne, { key: 0 }))\n : (_openBlock(), _createBlock(_component_IconPause, { key: 1 }))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", {\n class: \"icon volume-icon\",\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.toggleVolume()))\n }, [\n _createElementVNode(\"span\", _hoisted_8, [\n (_ctx.volume === 0)\n ? (_openBlock(), _createBlock(_component_IconVolumeMute, { key: 0 }))\n : (_ctx.volume === 1)\n ? (_openBlock(), _createBlock(_component_IconVolumeNotice, { key: 1 }))\n : (_openBlock(), _createBlock(_component_IconVolumeSmall, { key: 2 }))\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"volume-bar-wrap\",\n onMousedown: _cache[11] || (_cache[11] = $event => _ctx.handleMousedownVolumeBar($event)),\n onTouchstart: _cache[12] || (_cache[12] = $event => _ctx.handleMousedownVolumeBar($event)),\n onClick: _cache[13] || (_cache[13] = $event => _ctx.handleClickVolumeBar($event))\n }, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", {\n class: \"volume-bar-inner\",\n style: _normalizeStyle({ width: _ctx.volumeBarWidth })\n }, _hoisted_11, 4)\n ], 512)\n ], 32)\n ]),\n _createElementVNode(\"span\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.ptime), 1),\n _hoisted_14,\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.dtime), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"div\", _hoisted_17, [\n _createElementVNode(\"div\", _hoisted_18, [\n _createElementVNode(\"span\", {\n class: \"icon-content\",\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.speedMenuVisible = !_ctx.speedMenuVisible))\n }, \"倍速\"),\n (_ctx.speedMenuVisible)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"speed-menu\",\n onMouseleave: _cache[15] || (_cache[15] = ($event: any) => (_ctx.speedMenuVisible = false))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.speedOptions, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"speed-menu-item\", { 'active': item.value === _ctx.playbackRate }]),\n key: item.label,\n onClick: ($event: any) => (_ctx.speed(item.value))\n }, _toDisplayString(item.label), 11, _hoisted_19))\n }), 128))\n ], 32))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"loop\",\n onClick: _cache[16] || (_cache[16] = ($event: any) => (_ctx.toggleLoop()))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"icon loop-icon\", { 'active': _ctx.loop }])\n }, _hoisted_21, 2)\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"bar-wrap\",\n ref: \"playBarWrap\",\n onMousedown: _cache[17] || (_cache[17] = $event => _ctx.handleMousedownPlayBar($event)),\n onTouchstart: _cache[18] || (_cache[18] = $event => _ctx.handleMousedownPlayBar($event)),\n onMousemove: _cache[19] || (_cache[19] = $event => _ctx.handleMousemovePlayBar($event)),\n onMouseenter: _cache[20] || (_cache[20] = ($event: any) => (_ctx.playBarTimeVisible = true)),\n onMouseleave: _cache[21] || (_cache[21] = ($event: any) => (_ctx.playBarTimeVisible = false))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"bar-time\", { 'hidden': !_ctx.playBarTimeVisible }]),\n style: _normalizeStyle({ left: _ctx.playBarTimeLeft })\n }, _toDisplayString(_ctx.playBarTime), 7),\n _createElementVNode(\"div\", _hoisted_22, [\n _createElementVNode(\"div\", {\n class: \"loaded\",\n style: _normalizeStyle({ width: _ctx.loadedBarWidth })\n }, null, 4),\n _createElementVNode(\"div\", {\n class: \"played\",\n style: _normalizeStyle({ width: _ctx.playedBarWidth })\n }, _hoisted_24, 4)\n ])\n ], 544)\n ])\n ], 38))\n}","/* eslint-disable */\n\nimport { onMounted, Ref } from 'vue'\n\nexport default (\n src: string,\n videoRef: Ref,\n) => {\n onMounted(() => {\n if (!videoRef.value) return\n\n let type = 'normal'\n if (/m3u8(#|\\?|$)/i.exec(src)) type = 'hls'\n else if (/.flv(#|\\?|$)/i.exec(src)) type = 'flv'\n\n if (videoRef.value && type === 'hls' && (videoRef.value.canPlayType('application/x-mpegURL') || videoRef.value.canPlayType('application/vnd.apple.mpegURL'))) {\n type = 'normal'\n }\n\n if (type === 'hls') {\n const Hls = (window as any).Hls\n \n if (Hls && Hls.isSupported()) {\n const hls = new Hls()\n hls.loadSource(src)\n hls.attachMedia(videoRef.value)\n }\n }\n else if (type === 'flv') {\n const flvjs = (window as any).flvjs\n if (flvjs && flvjs.isSupported()) {\n const flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: src,\n })\n flvPlayer.attachMediaElement(videoRef.value)\n flvPlayer.load()\n }\n }\n })\n}","\nimport { computed, defineComponent, ref } from 'vue'\nimport useMSE from './useMSE'\nimport { message } from 'ant-design-vue'\n\nconst secondToTime = (second = 0) => {\n if (second === 0 || isNaN(second)) return '00:00'\n\n const add0 = (num: number) => (num < 10 ? '0' + num : '' + num)\n const hour = Math.floor(second / 3600)\n const min = Math.floor((second - hour * 3600) / 60)\n const sec = Math.floor(second - hour * 3600 - min * 60)\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':')\n}\n\nconst getBoundingClientRectViewLeft = (element: HTMLElement) => {\n return element.getBoundingClientRect().left\n}\n\nexport default defineComponent({\n name: 'video-player',\n props: {\n width: {\n type: Number,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n src: {\n type: String,\n required: true,\n },\n poster: {\n type: String,\n default: '',\n },\n scale: {\n type: Number,\n default: 1,\n },\n },\n setup(props) {\n const videoRef = ref()\n const playBarWrap = ref()\n const volumeBarRef = ref()\n\n const volume = ref(0.5)\n const paused = ref(true)\n const currentTime = ref(0)\n const duration = ref(0)\n const loaded = ref(0)\n const loop = ref(false)\n const bezelTransition = ref(false)\n const playbackRate = ref(1)\n\n const playBarTimeVisible = ref(false)\n const playBarTime = ref('00:00')\n const playBarTimeLeft = ref('0')\n\n const ptime = computed(() => secondToTime(currentTime.value))\n const dtime = computed(() => secondToTime(duration.value))\n const playedBarWidth = computed(() => currentTime.value / duration.value * 100 + '%')\n const loadedBarWidth = computed(() => loaded.value / duration.value * 100 + '%')\n const volumeBarWidth = computed(() => volume.value * 100 + '%')\n\n const speedMenuVisible = ref(false)\n const speedOptions = [\n { label: '2x', value: 2 },\n { label: '1.5x', value: 1.5 },\n { label: '1.25x', value: 1.25 },\n { label: '1x', value: 1 },\n { label: '0.75x', value: 0.75 },\n { label: '0.5x', value: 0.5 },\n ]\n\n const seek = (time: number) => {\n if (!videoRef.value) return\n\n time = Math.max(time, 0)\n time = Math.min(time, duration.value)\n\n videoRef.value.currentTime = time\n currentTime.value = time\n }\n\n const play = () => {\n if (!videoRef.value) return\n\n paused.value = false\n videoRef.value.play()\n bezelTransition.value = true\n }\n\n const pause = () => {\n if (!videoRef.value) return\n\n paused.value = true\n videoRef.value.pause()\n bezelTransition.value = true\n }\n\n const toggle = () => {\n if (paused.value) play() \n else pause()\n }\n\n const setVolume = (percentage: number) => {\n if (!videoRef.value) return\n\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n\n videoRef.value.volume = percentage\n volume.value = percentage\n if (videoRef.value.muted && percentage !== 0) videoRef.value.muted = false\n }\n\n const speed = (rate: number) => {\n if (videoRef.value) videoRef.value.playbackRate = rate\n playbackRate.value = rate\n }\n\n const handleDurationchange = () => {\n duration.value = videoRef.value?.duration || 0\n }\n\n const handleTimeupdate = () => {\n currentTime.value = videoRef.value?.currentTime || 0\n }\n\n const handleEnded = () => {\n if (!loop.value) pause()\n else {\n seek(0)\n play()\n }\n }\n\n const handleProgress = () => {\n loaded.value = videoRef.value?.buffered.length ? videoRef.value.buffered.end(videoRef.value.buffered.length - 1) : 0\n }\n\n const handleError = () => message.error('视频加载失败')\n\n const thumbMove = (e: MouseEvent | TouchEvent) => {\n if (!videoRef.value || !playBarWrap.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n videoRef.value.currentTime = time\n currentTime.value = time\n }\n\n const thumbUp = (e: MouseEvent | TouchEvent) => {\n if (!videoRef.value || !playBarWrap.value) return\n\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n videoRef.value.currentTime = time\n currentTime.value = time\n\n document.removeEventListener('mousemove', thumbMove)\n document.removeEventListener('touchmove', thumbMove)\n document.removeEventListener('mouseup', thumbUp)\n document.removeEventListener('touchend', thumbUp)\n }\n\n const handleMousedownPlayBar = () => {\n document.addEventListener('mousemove', thumbMove)\n document.addEventListener('touchmove', thumbMove)\n document.addEventListener('mouseup', thumbUp)\n document.addEventListener('touchend', thumbUp)\n }\n\n const volumeMove = (e: MouseEvent | TouchEvent) => {\n if (!volumeBarRef.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n const percentage = (clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const volumeUp = () => {\n document.removeEventListener('mousemove', volumeMove)\n document.removeEventListener('touchmove', volumeMove)\n document.removeEventListener('mouseup', volumeUp)\n document.removeEventListener('touchend', volumeUp)\n }\n\n const handleMousedownVolumeBar = () => {\n document.addEventListener('mousemove', volumeMove)\n document.addEventListener('touchmove', volumeMove)\n document.addEventListener('mouseup', volumeUp)\n document.addEventListener('touchend', volumeUp)\n }\n\n const handleClickVolumeBar = (e: MouseEvent) => {\n if (!volumeBarRef.value) return\n const percentage = (e.clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const handleMousemovePlayBar = (e: MouseEvent) => {\n if (duration.value && playBarWrap.value) {\n const px = playBarWrap.value.getBoundingClientRect().left\n const tx = e.clientX - px\n if (tx < 0 || tx > playBarWrap.value.offsetWidth) return\n\n const time = duration.value * (tx / playBarWrap.value.offsetWidth)\n playBarTimeLeft.value = `${tx - (time >= 3600 ? 25 : 20)}px`\n playBarTime.value = secondToTime(time)\n playBarTimeVisible.value = true\n }\n }\n\n const toggleVolume = () => {\n if (!videoRef.value) return\n\n if (videoRef.value.muted) {\n videoRef.value.muted = false\n setVolume(0.5)\n }\n else {\n videoRef.value.muted = true\n setVolume(0)\n }\n }\n\n const toggleLoop = () => {\n loop.value = !loop.value\n }\n\n const autoHideControllerTimer = ref(-1)\n const hideController = ref(false)\n const autoHideController = () => {\n hideController.value = false\n clearTimeout(autoHideControllerTimer.value)\n autoHideControllerTimer.value = setTimeout(() => {\n if (videoRef.value?.played.length) hideController.value = true\n }, 3000)\n }\n \n useMSE(props.src, videoRef)\n\n return {\n videoRef,\n playBarWrap,\n volumeBarRef,\n volume,\n loop,\n paused,\n ptime,\n dtime,\n playBarTime,\n playBarTimeVisible,\n playBarTimeLeft,\n playedBarWidth,\n loadedBarWidth,\n volumeBarWidth,\n hideController,\n bezelTransition,\n playbackRate,\n speedMenuVisible,\n speedOptions,\n seek,\n play,\n pause,\n toggle,\n setVolume,\n speed,\n handleDurationchange,\n handleTimeupdate,\n handleEnded,\n handleProgress,\n handleMousedownPlayBar,\n handleMousedownVolumeBar,\n handleClickVolumeBar,\n handleMousemovePlayBar,\n toggleVolume,\n toggleLoop,\n autoHideController,\n handleError,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=e716fb74&scoped=true&ts=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=e716fb74&scoped=true&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e716fb74\"]])\n\nexport default __exports__","\nimport { defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTVideoElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\n\nimport VideoPlayer from './VideoPlayer/index.vue'\n\nexport default defineComponent({\n name: 'editable-element-video',\n components: {\n VideoPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTVideoElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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 return {\n canvasScale,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=7f80f8ee&scoped=true&ts=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=7f80f8ee&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7f80f8ee\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createVNode as _createVNode, withModifiers as _withModifiers, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, createElementBlock as _createElementBlock, withDirectives as _withDirectives, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_AudioPlayer = _resolveComponent(\"AudioPlayer\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"editable-element-audio\", { 'lock': _ctx.elementInfo.lock }]),\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"element-content\",\n onMousedown: _cache[1] || (_cache[1] = $event => _ctx.handleSelectElement($event))\n }, [\n _createVNode(_component_IconVolumeNotice, {\n class: \"audio-icon\",\n style: _normalizeStyle({\n fontSize: _ctx.audioIconSize,\n color: _ctx.elementInfo.color,\n })\n }, null, 8, [\"style\"]),\n (_ctx.handleElementId === _ctx.elementInfo.id)\n ? (_openBlock(), _createBlock(_component_AudioPlayer, {\n key: 0,\n class: \"audio-player\",\n style: _normalizeStyle({ ..._ctx.audioPlayerPosition }),\n src: _ctx.elementInfo.src,\n loop: _ctx.elementInfo.loop,\n scale: _ctx.canvasScale,\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"style\", \"src\", \"loop\", \"scale\"]))\n : _createCommentVNode(\"\", true)\n ], 32)), [\n [_directive_contextmenu, _ctx.contextmenus]\n ])\n ], 4)\n ], 6))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5cabbb47\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"src\", \"autoplay\"]\nconst _hoisted_2 = { class: \"controller\" }\nconst _hoisted_3 = { class: \"icons\" }\nconst _hoisted_4 = { class: \"icon-content\" }\nconst _hoisted_5 = { class: \"volume\" }\nconst _hoisted_6 = { class: \"icon-content\" }\nconst _hoisted_7 = {\n class: \"volume-bar\",\n ref: \"volumeBarRef\"\n}\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = { class: \"time\" }\nconst _hoisted_11 = { class: \"ptime\" }\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\" / \")\nconst _hoisted_13 = { class: \"dtime\" }\nconst _hoisted_14 = { class: \"bar\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"thumb\" }, null, -1))\nconst _hoisted_16 = [\n _hoisted_15\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n const _component_IconPause = _resolveComponent(\"IconPause\")!\n const _component_IconVolumeMute = _resolveComponent(\"IconVolumeMute\")!\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_IconVolumeSmall = _resolveComponent(\"IconVolumeSmall\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"audio-player\",\n style: _normalizeStyle({ transform: `scale(${1 / _ctx.scale})` })\n }, [\n _createElementVNode(\"audio\", {\n class: \"audio\",\n ref: \"audioRef\",\n src: _ctx.src,\n autoplay: _ctx.autoplay,\n onDurationchange: _cache[0] || (_cache[0] = ($event: any) => (_ctx.handleDurationchange())),\n onTimeupdate: _cache[1] || (_cache[1] = ($event: any) => (_ctx.handleTimeupdate())),\n onPlay: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handlePlayed())),\n onEnded: _cache[3] || (_cache[3] = ($event: any) => (_ctx.handleEnded())),\n onProgress: _cache[4] || (_cache[4] = ($event: any) => (_ctx.handleProgress())),\n onError: _cache[5] || (_cache[5] = ($event: any) => (_ctx.handleError()))\n }, null, 40, _hoisted_1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"icon play-icon\",\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.toggle()))\n }, [\n _createElementVNode(\"span\", _hoisted_4, [\n (_ctx.paused)\n ? (_openBlock(), _createBlock(_component_IconPlayOne, { key: 0 }))\n : (_openBlock(), _createBlock(_component_IconPause, { key: 1 }))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", {\n class: \"icon volume-icon\",\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.toggleVolume()))\n }, [\n _createElementVNode(\"span\", _hoisted_6, [\n (_ctx.volume === 0)\n ? (_openBlock(), _createBlock(_component_IconVolumeMute, { key: 0 }))\n : (_ctx.volume === 1)\n ? (_openBlock(), _createBlock(_component_IconVolumeNotice, { key: 1 }))\n : (_openBlock(), _createBlock(_component_IconVolumeSmall, { key: 2 }))\n ])\n ]),\n _createElementVNode(\"div\", {\n class: \"volume-bar-wrap\",\n onMousedown: _cache[8] || (_cache[8] = $event => _ctx.handleMousedownVolumeBar($event)),\n onTouchstart: _cache[9] || (_cache[9] = $event => _ctx.handleMousedownVolumeBar($event)),\n onClick: _cache[10] || (_cache[10] = $event => _ctx.handleClickVolumeBar($event))\n }, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", {\n class: \"volume-bar-inner\",\n style: _normalizeStyle({ width: _ctx.volumeBarWidth })\n }, _hoisted_9, 4)\n ], 512)\n ], 32)\n ])\n ]),\n _createElementVNode(\"span\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.ptime), 1),\n _hoisted_12,\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.dtime), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"bar-wrap\",\n ref: \"playBarWrap\",\n onMousedown: _cache[11] || (_cache[11] = $event => _ctx.handleMousedownPlayBar($event)),\n onTouchstart: _cache[12] || (_cache[12] = $event => _ctx.handleMousedownPlayBar($event)),\n onMousemove: _cache[13] || (_cache[13] = $event => _ctx.handleMousemovePlayBar($event)),\n onMouseenter: _cache[14] || (_cache[14] = ($event: any) => (_ctx.playBarTimeVisible = true)),\n onMouseleave: _cache[15] || (_cache[15] = ($event: any) => (_ctx.playBarTimeVisible = false))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"bar-time\", { 'hidden': !_ctx.playBarTimeVisible }]),\n style: _normalizeStyle({ left: _ctx.playBarTimeLeft })\n }, _toDisplayString(_ctx.playBarTime), 7),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", {\n class: \"loaded\",\n style: _normalizeStyle({ width: _ctx.loadedBarWidth })\n }, null, 4),\n _createElementVNode(\"div\", {\n class: \"played\",\n style: _normalizeStyle({ width: _ctx.playedBarWidth })\n }, _hoisted_16, 4)\n ])\n ], 544)\n ])\n ], 4))\n}","\nimport { computed, defineComponent, ref } from 'vue'\nimport { message } from 'ant-design-vue'\n\nconst secondToTime = (second = 0) => {\n if (second === 0 || isNaN(second)) return '00:00'\n\n const add0 = (num: number) => (num < 10 ? '0' + num : '' + num)\n const hour = Math.floor(second / 3600)\n const min = Math.floor((second - hour * 3600) / 60)\n const sec = Math.floor(second - hour * 3600 - min * 60)\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':')\n}\n\nconst getBoundingClientRectViewLeft = (element: HTMLElement) => {\n return element.getBoundingClientRect().left\n}\n\nexport default defineComponent({\n name: 'audio-player',\n props: {\n src: {\n type: String,\n required: true,\n },\n loop: {\n type: Boolean,\n required: true,\n },\n autoplay: {\n type: Boolean,\n default: false,\n },\n scale: {\n type: Number,\n default: 1,\n },\n },\n setup(props) {\n const audioRef = ref()\n const playBarWrap = ref()\n const volumeBarRef = ref()\n\n const volume = ref(0.5)\n const paused = ref(true)\n const currentTime = ref(0)\n const duration = ref(0)\n const loaded = ref(0)\n\n const playBarTimeVisible = ref(false)\n const playBarTime = ref('00:00')\n const playBarTimeLeft = ref('0')\n\n const ptime = computed(() => secondToTime(currentTime.value))\n const dtime = computed(() => secondToTime(duration.value))\n const playedBarWidth = computed(() => currentTime.value / duration.value * 100 + '%')\n const loadedBarWidth = computed(() => loaded.value / duration.value * 100 + '%')\n const volumeBarWidth = computed(() => volume.value * 100 + '%')\n\n const seek = (time: number) => {\n if (!audioRef.value) return\n\n time = Math.max(time, 0)\n time = Math.min(time, duration.value)\n\n audioRef.value.currentTime = time\n currentTime.value = time\n }\n\n const play = () => {\n if (!audioRef.value) return\n\n paused.value = false\n audioRef.value.play()\n }\n\n const pause = () => {\n if (!audioRef.value) return\n\n paused.value = true\n audioRef.value.pause()\n }\n\n const toggle = () => {\n if (paused.value) play() \n else pause()\n }\n\n const setVolume = (percentage: number) => {\n if (!audioRef.value) return\n\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n\n audioRef.value.volume = percentage\n volume.value = percentage\n if (audioRef.value.muted && percentage !== 0) audioRef.value.muted = false\n }\n\n const handleDurationchange = () => {\n duration.value = audioRef.value?.duration || 0\n }\n\n const handleTimeupdate = () => {\n currentTime.value = audioRef.value?.currentTime || 0\n }\n\n const handlePlayed = () => {\n paused.value = false\n }\n\n const handleEnded = () => {\n if (!props.loop) pause()\n else {\n seek(0)\n play()\n }\n }\n\n const handleProgress = () => {\n loaded.value = audioRef.value?.buffered.length ? audioRef.value.buffered.end(audioRef.value.buffered.length - 1) : 0\n }\n\n const handleError = () => message.error('视频加载失败')\n\n const thumbMove = (e: MouseEvent | TouchEvent) => {\n if (!audioRef.value || !playBarWrap.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n audioRef.value.currentTime = time\n currentTime.value = time\n }\n\n const thumbUp = (e: MouseEvent | TouchEvent) => {\n if (!audioRef.value || !playBarWrap.value) return\n\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n let percentage = (clientX - getBoundingClientRectViewLeft(playBarWrap.value)) / playBarWrap.value.clientWidth\n percentage = Math.max(percentage, 0)\n percentage = Math.min(percentage, 1)\n const time = percentage * duration.value\n\n audioRef.value.currentTime = time\n currentTime.value = time\n\n document.removeEventListener('mousemove', thumbMove)\n document.removeEventListener('touchmove', thumbMove)\n document.removeEventListener('mouseup', thumbUp)\n document.removeEventListener('touchend', thumbUp)\n }\n\n const handleMousedownPlayBar = () => {\n document.addEventListener('mousemove', thumbMove)\n document.addEventListener('touchmove', thumbMove)\n document.addEventListener('mouseup', thumbUp)\n document.addEventListener('touchend', thumbUp)\n }\n\n const volumeMove = (e: MouseEvent | TouchEvent) => {\n if (!volumeBarRef.value) return\n const clientX = 'clientX' in e ? e.clientX : e.changedTouches[0].clientX\n const percentage = (clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const volumeUp = () => {\n document.removeEventListener('mousemove', volumeMove)\n document.removeEventListener('touchmove', volumeMove)\n document.removeEventListener('mouseup', volumeUp)\n document.removeEventListener('touchend', volumeUp)\n }\n\n const handleMousedownVolumeBar = () => {\n document.addEventListener('mousemove', volumeMove)\n document.addEventListener('touchmove', volumeMove)\n document.addEventListener('mouseup', volumeUp)\n document.addEventListener('touchend', volumeUp)\n }\n\n const handleClickVolumeBar = (e: MouseEvent) => {\n if (!volumeBarRef.value) return\n const percentage = (e.clientX - getBoundingClientRectViewLeft(volumeBarRef.value) - 5.5) / 35\n setVolume(percentage)\n }\n\n const handleMousemovePlayBar = (e: MouseEvent) => {\n if (duration.value && playBarWrap.value) {\n const px = playBarWrap.value.getBoundingClientRect().left\n const tx = e.clientX - px\n if (tx < 0 || tx > playBarWrap.value.offsetWidth) return\n\n const time = duration.value * (tx / playBarWrap.value.offsetWidth)\n playBarTimeLeft.value = `${tx - (time >= 3600 ? 25 : 20)}px`\n playBarTime.value = secondToTime(time)\n playBarTimeVisible.value = true\n }\n }\n\n const toggleVolume = () => {\n if (!audioRef.value) return\n\n if (audioRef.value.muted) {\n audioRef.value.muted = false\n setVolume(0.5)\n }\n else {\n audioRef.value.muted = true\n setVolume(0)\n }\n }\n\n return {\n audioRef,\n playBarWrap,\n volumeBarRef,\n volume,\n paused,\n ptime,\n dtime,\n playBarTime,\n playBarTimeVisible,\n playBarTimeLeft,\n playedBarWidth,\n loadedBarWidth,\n volumeBarWidth,\n play,\n pause,\n toggle,\n setVolume,\n handleDurationchange,\n handleTimeupdate,\n handlePlayed,\n handleEnded,\n handleProgress,\n handleError,\n handleMousedownPlayBar,\n handleMousedownVolumeBar,\n handleClickVolumeBar,\n handleMousemovePlayBar,\n toggleVolume,\n }\n },\n})\n","import { render } from \"./AudioPlayer.vue?vue&type=template&id=5cabbb47&scoped=true&ts=true\"\nimport script from \"./AudioPlayer.vue?vue&type=script&lang=ts\"\nexport * from \"./AudioPlayer.vue?vue&type=script&lang=ts\"\n\nimport \"./AudioPlayer.vue?vue&type=style&index=0&id=5cabbb47&scoped=true&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5cabbb47\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTAudioElement } from '@/types/slides'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nimport AudioPlayer from './AudioPlayer.vue'\n\nexport default defineComponent({\n name: 'editable-element-audio',\n components: {\n AudioPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTAudioElement, canMove?: boolean) => void>,\n required: true,\n },\n contextmenus: {\n type: Function as PropType<() => ContextmenuItem[]>,\n },\n },\n setup(props) {\n const { canvasScale, handleElementId } = storeToRefs(useMainStore())\n const { viewportRatio } = storeToRefs(useSlidesStore())\n\n const audioIconSize = computed(() => {\n return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'\n })\n const audioPlayerPosition = computed(() => {\n const canvasWidth = VIEWPORT_SIZE\n const canvasHeight = VIEWPORT_SIZE * viewportRatio.value\n\n const audioWidth = 280 / canvasScale.value\n const audioHeight = 50 / canvasScale.value\n\n const elWidth = props.elementInfo.width\n const elHeight = props.elementInfo.height\n const elLeft = props.elementInfo.left\n const elTop = props.elementInfo.top\n\n let left = 0\n let top = elHeight\n \n if (elLeft + audioWidth >= canvasWidth) left = elWidth - audioWidth\n if (elTop + elHeight + audioHeight >= canvasHeight) top = -audioHeight\n\n return {\n left: left + 'px',\n top: top + 'px',\n }\n })\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 return {\n canvasScale,\n handleElementId,\n audioIconSize,\n audioPlayerPosition,\n handleSelectElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=66dd4448&scoped=true&ts=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=66dd4448&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-66dd4448\"]])\n\nexport default __exports__","\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'\nimport LatexElement from '@/views/components/element/LatexElement/index.vue'\nimport VideoElement from '@/views/components/element/VideoElement/index.vue'\nimport AudioElement from '@/views/components/element/AudioElement/index.vue'\n\nexport default defineComponent({\n name: 'editable-element',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n elementIndex: {\n type: Number,\n required: true,\n },\n isMultiSelect: {\n type: Boolean,\n required: true,\n },\n selectElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTElement, canMove?: boolean) => void>,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const currentElementComponent = computed(() => {\n const elementTypeMap = {\n [ElementTypes.IMAGE]: ImageElement,\n [ElementTypes.TEXT]: TextElement,\n [ElementTypes.SHAPE]: ShapeElement,\n [ElementTypes.LINE]: LineElement,\n [ElementTypes.CHART]: ChartElement,\n [ElementTypes.TABLE]: TableElement,\n [ElementTypes.LATEX]: LatexElement,\n [ElementTypes.VIDEO]: VideoElement,\n [ElementTypes.AUDIO]: AudioElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const { orderElement } = useOrderElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { combineElements, uncombineElements } = useCombineElement()\n const { deleteElement } = useDeleteElement()\n const { lockElement, unlockElement } = useLockElement()\n const { copyElement, pasteElement, cutElement } = useCopyAndPasteElement()\n const { selectAllElement } = useSelectAllElement()\n\n const contextmenus = (): ContextmenuItem[] => {\n if (props.elementInfo.lock) {\n return [{\n text: '解锁', \n handler: () => unlockElement(props.elementInfo),\n }]\n }\n\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutElement,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copyElement,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteElement,\n },\n { divider: true },\n {\n text: '水平居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER), },\n { text: '水平居中', handler: () => alignElementToCanvas(ElementAlignCommands.HORIZONTAL) },\n { text: '左对齐', handler: () => alignElementToCanvas(ElementAlignCommands.LEFT) },\n { text: '右对齐', handler: () => alignElementToCanvas(ElementAlignCommands.RIGHT) },\n ],\n },\n {\n text: '垂直居中',\n handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL),\n children: [\n { text: '水平垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.CENTER) },\n { text: '垂直居中', handler: () => alignElementToCanvas(ElementAlignCommands.VERTICAL) },\n { text: '顶部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.TOP) },\n { text: '底部对齐', handler: () => alignElementToCanvas(ElementAlignCommands.BOTTOM) },\n ],\n },\n { divider: true },\n {\n text: '置于顶层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP),\n children: [\n { text: '置于顶层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.TOP) },\n { text: '上移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.UP) },\n ],\n },\n {\n text: '置于底层',\n disable: props.isMultiSelect && !props.elementInfo.groupId,\n handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM),\n children: [\n { text: '置于底层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.BOTTOM) },\n { text: '下移一层', handler: () => orderElement(props.elementInfo, ElementOrderCommands.DOWN) },\n ],\n },\n { divider: true },\n {\n text: '设置链接',\n handler: props.openLinkDialog,\n },\n {\n text: props.elementInfo.groupId ? '取消组合' : '组合',\n subText: 'Ctrl + G',\n handler: props.elementInfo.groupId ? uncombineElements : combineElements,\n hide: !props.isMultiSelect,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllElement,\n },\n {\n text: '锁定',\n subText: 'Ctrl + L',\n handler: lockElement,\n },\n {\n text: '删除',\n subText: 'Delete',\n handler: deleteElement,\n },\n ]\n }\n\n return {\n currentElementComponent,\n contextmenus,\n }\n },\n})\n","import { render } from \"./EditableElement.vue?vue&type=template&id=19fcaa81&ts=true\"\nimport script from \"./EditableElement.vue?vue&type=script&lang=ts\"\nexport * from \"./EditableElement.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(`mouse-selection quadrant-${_ctx.quadrant}`),\n style: _normalizeStyle({\n top: _ctx.top + 'px',\n left: _ctx.left + 'px',\n width: _ctx.width + 'px',\n height: _ctx.height + 'px',\n })\n }, null, 6))\n}","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\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=25d4b5f8&scoped=true&ts=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=25d4b5f8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-25d4b5f8\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GridLines = _resolveComponent(\"GridLines\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"viewport-background\",\n style: _normalizeStyle(_ctx.backgroundStyle)\n }, [\n (_ctx.showGridLines)\n ? (_openBlock(), _createBlock(_component_GridLines, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ], 4))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9b94cc34\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"grid-lines\" }\nconst _hoisted_2 = [\"d\", \"stroke\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [\n _createElementVNode(\"path\", {\n style: _normalizeStyle({\n transform: `scale(${_ctx.canvasScale})`,\n }),\n d: _ctx.path,\n fill: \"none\",\n stroke: _ctx.gridColor,\n \"stroke-width\": \"0.3\",\n \"stroke-dasharray\": \"5\"\n }, null, 12, _hoisted_2)\n ]))\n}","\nimport { defineComponent, computed } from 'vue'\nimport tinycolor from 'tinycolor2'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 { canvasScale } = storeToRefs(useMainStore())\n const { currentSlide, viewportRatio } = storeToRefs(useSlidesStore())\n\n const background = computed(() => currentSlide.value?.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=9b94cc34&scoped=true&ts=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=9b94cc34&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9b94cc34\"]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 { showGridLines } = storeToRefs(useMainStore())\n const { currentSlide } = storeToRefs(useSlidesStore())\n const background = computed(() => currentSlide.value?.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=4d0018d8&scoped=true&ts=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=4d0018d8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4d0018d8\"]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"alignment-line\",\n style: _normalizeStyle({ left: _ctx.left, top: _ctx.top })\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass(['line', _ctx.type]),\n style: _normalizeStyle(_ctx.sizeStyle)\n }, null, 6)\n ], 4))\n}","\nimport { computed, PropType, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } 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 { canvasScale } = storeToRefs(useMainStore())\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=62c9018e&scoped=true&ts=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=62c9018e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62c9018e\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-15b60d90\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"element-create-selection\",\n ref: \"selectionRef\",\n onMousedown: _cache[0] || (_cache[0] = _withModifiers($event => _ctx.createSelection($event), [\"stop\"])),\n onContextmenu: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\",\"prevent\"]))\n }, [\n (_ctx.start && _ctx.end)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass(['selection', _ctx.creatingElement?.type]),\n style: _normalizeStyle(_ctx.position)\n }, [\n (_ctx.creatingElement?.type === 'line' && _ctx.lineData)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n overflow: \"visible\",\n width: _ctx.lineData.svgWidth,\n height: _ctx.lineData.svgHeight\n }, [\n _createElementVNode(\"path\", {\n d: _ctx.lineData.path,\n stroke: \"#d14424\",\n fill: \"none\",\n \"stroke-width\": \"2\"\n }, null, 8, _hoisted_2)\n ], 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ], 6))\n : _createCommentVNode(\"\", true)\n ], 544))\n}","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useKeyboardStore } from '@/store'\n\nexport default defineComponent({\n name: 'element-create-selection',\n emits: ['created'],\n setup(props, { emit }) {\n const mainStore = useMainStore()\n const { creatingElement } = storeToRefs(mainStore)\n const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const start = ref<[number, number]>()\n const end = ref<[number, number]>()\n\n const selectionRef = ref()\n const offset = ref({\n x: 0,\n y: 0,\n })\n onMounted(() => {\n if (!selectionRef.value) return\n const { x, y } = selectionRef.value.getBoundingClientRect()\n offset.value = { x, 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\n if (e.button === 2) {\n setTimeout(() => mainStore.setCreatingElement(null), 0)\n return\n }\n\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.value.x + 'px',\n top: minY - offset.value.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=15b60d90&scoped=true&ts=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=15b60d90&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-15b60d90\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"multi-select-operate\",\n style: _normalizeStyle({\n left: _ctx.range.minX * _ctx.canvasScale + 'px',\n top: _ctx.range.minY * _ctx.canvasScale + 'px',\n })\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (!_ctx.disableResize)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n key: point.direction,\n type: point.direction,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers(($event: any) => (_ctx.scaleMultiElement($event, _ctx.range, point.direction)), [\"stop\"])\n }, null, 8, [\"type\", \"style\", \"onMousedown\"]))\n }), 128))\n : _createCommentVNode(\"\", true)\n ], 4))\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}","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(['resize-handler', _ctx.rotateClassName, _ctx.type])\n }, null, 2))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { OperateResizeHandlers } from '@/types/edit'\n\nexport default defineComponent({\n name: 'resize-handler',\n props: {\n type: {\n type: String as PropType,\n default: '',\n },\n rotate: {\n type: Number,\n default: 0,\n },\n },\n setup(props) {\n const rotateClassName = computed(() => {\n const prefix = 'rotate-'\n const rotate = props.rotate\n if (rotate > -22.5 && rotate <= 22.5) return prefix + 0\n else if (rotate > 22.5 && rotate <= 67.5) return prefix + 45\n else if (rotate > 67.5 && rotate <= 112.5) return prefix + 90\n else if (rotate > 112.5 && rotate <= 157.5) return prefix + 135\n else if (rotate > 157.5 || rotate <= -157.5) return prefix + 0\n else if (rotate > -157.5 && rotate <= -112.5) return prefix + 45\n else if (rotate > -112.5 && rotate <= -67.5) return prefix + 90\n else if (rotate > -67.5 && rotate <= -22.5) return prefix + 135\n return prefix + 0\n })\n\n return {\n rotateClassName,\n }\n },\n})\n","import { render } from \"./ResizeHandler.vue?vue&type=template&id=c9559332&scoped=true&ts=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=c9559332&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c9559332\"]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(['border-line', _ctx.type, { 'wide': _ctx.isWide }])\n }, null, 2))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { OperateBorderLines } from '@/types/edit'\n\nexport default defineComponent({\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=1430bedc&scoped=true&ts=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=1430bedc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1430bedc\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, ref, PropType, watchEffect } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElement } from '@/types/slides'\nimport { getElementListRange } from '@/utils/element'\nimport { OperateResizeHandlers, 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: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { activeElementIdList, canvasScale } = storeToRefs(useMainStore())\n\n const localActiveElementList = computed(() => props.elementList.filter(el => activeElementIdList.value.includes(el.id)))\n\n const range = ref({\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0,\n })\n\n // 根据多选元素整体在画布中的范围,计算边框线和缩放点的位置信息\n const width = computed(() => (range.value.maxX - range.value.minX) * canvasScale.value)\n const height = computed(() => (range.value.maxY - range.value.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.value = { minX, maxX, minY, 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 range,\n canvasScale,\n borderLines,\n disableResize,\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./MultiSelectOperate.vue?vue&type=template&id=55c8df22&scoped=true&ts=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=55c8df22&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-55c8df22\"]])\n\nexport default __exports__","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withModifiers as _withModifiers, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6abdbdd6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 1,\n class: \"animation-index\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinkHandler = _resolveComponent(\"LinkHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"operate\", { 'multi-select': _ctx.isMultiSelect && !_ctx.isActive }]),\n style: _normalizeStyle({\r\n top: _ctx.elementInfo.top * _ctx.canvasScale + 'px',\r\n left: _ctx.elementInfo.left * _ctx.canvasScale + 'px',\r\n transform: `rotate(${_ctx.rotate}deg)`,\r\n transformOrigin: `${_ctx.elementInfo.width * _ctx.canvasScale / 2}px ${_ctx.height * _ctx.canvasScale / 2}px`,\r\n })\n }, [\n (_ctx.isSelected)\n ? (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentOperateComponent), {\n key: 0,\n elementInfo: _ctx.elementInfo,\n handlerVisible: !_ctx.elementInfo.lock && (_ctx.isActiveGroupElement || !_ctx.isMultiSelect),\n rotateElement: _ctx.rotateElement,\n scaleElement: _ctx.scaleElement,\n dragLineElement: _ctx.dragLineElement\n }, null, 8, [\"elementInfo\", \"handlerVisible\", \"rotateElement\", \"scaleElement\", \"dragLineElement\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.toolbarState === 'elAnimation' && _ctx.elementIndexInAnimation !== -1)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _toDisplayString(_ctx.elementIndexInAnimation + 1), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.isActive && _ctx.elementInfo.link)\n ? (_openBlock(), _createBlock(_component_LinkHandler, {\n key: 2,\n elementInfo: _ctx.elementInfo,\n link: _ctx.elementInfo.link,\n openLinkDialog: _ctx.openLinkDialog,\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"elementInfo\", \"link\", \"openLinkDialog\"]))\n : _createCommentVNode(\"\", true)\n ], 6))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"image-element-operate\", { 'cliping': _ctx.isCliping }])\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9a549510\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"rotate-handler\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1))\n}","\nexport default {\n name: 'rotate-handler',\n}\n","import { render } from \"./RotateHandler.vue?vue&type=template&id=9a549510&scoped=true&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9a549510\"]])\n\nexport default __exports__","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useMainStore } from '@/store'\r\nimport { PPTImageElement } from '@/types/slides'\r\nimport { OperateResizeHandlers } 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 handlerVisible: {\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: OperateResizeHandlers) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const { canvasScale, clipingImageElementId } = storeToRefs(useMainStore())\r\n\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=db6d5ba6&scoped=true&ts=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=db6d5ba6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-db6d5ba6\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.textElementResizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useMainStore } from '@/store'\r\nimport { PPTTextElement } from '@/types/slides'\r\nimport { OperateResizeHandlers } 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 handlerVisible: {\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: OperateResizeHandlers) => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const { canvasScale } = storeToRefs(useMainStore())\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=115c48f0&ts=true\"\nimport script from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TextElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"shape-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTShapeElement } from '@/types/slides'\nimport { OperateResizeHandlers } 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 handlerVisible: {\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: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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=08e569b7&ts=true\"\nimport script from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./ShapeElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, createBlock as _createBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-c0a272d2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"line-element-operate\" }\nconst _hoisted_2 = [\"width\", \"height\", \"stroke\"]\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = [\"x1\", \"y1\", \"x2\", \"y2\"]\nconst _hoisted_5 = [\"x1\", \"y1\", \"x2\", \"y2\"]\nconst _hoisted_6 = [\"x1\", \"y1\", \"x2\", \"y2\"]\nconst _hoisted_7 = [\"x1\", \"y1\", \"x2\", \"y2\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.handler,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.dragLineElement($event, _ctx.elementInfo, point.handler), [\"stop\"])\n }, null, 8, [\"style\", \"onMousedown\"]))\n }), 128)),\n (_openBlock(), _createElementBlock(\"svg\", {\n width: _ctx.svgWidth,\n height: _ctx.svgHeight,\n stroke: _ctx.elementInfo.color,\n overflow: \"visible\",\n style: _normalizeStyle({ transform: `scale(${_ctx.canvasScale})` })\n }, [\n (_ctx.elementInfo.curve)\n ? (_openBlock(), _createElementBlock(\"g\", _hoisted_3, [\n _createElementVNode(\"line\", {\n class: \"anchor-line\",\n x1: _ctx.elementInfo.start[0],\n y1: _ctx.elementInfo.start[1],\n x2: _ctx.elementInfo.curve[0],\n y2: _ctx.elementInfo.curve[1]\n }, null, 8, _hoisted_4),\n _createElementVNode(\"line\", {\n class: \"anchor-line\",\n x1: _ctx.elementInfo.end[0],\n y1: _ctx.elementInfo.end[1],\n x2: _ctx.elementInfo.curve[0],\n y2: _ctx.elementInfo.curve[1]\n }, null, 8, _hoisted_5)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.elementInfo.cubic)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 1 }, _renderList(_ctx.elementInfo.cubic, (item, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n (index === 0)\n ? (_openBlock(), _createElementBlock(\"line\", {\n key: 0,\n class: \"anchor-line\",\n x1: _ctx.elementInfo.start[0],\n y1: _ctx.elementInfo.start[1],\n x2: item[0],\n y2: item[1]\n }, null, 8, _hoisted_6))\n : _createCommentVNode(\"\", true),\n (index === 1)\n ? (_openBlock(), _createElementBlock(\"line\", {\n key: 1,\n class: \"anchor-line\",\n x1: _ctx.elementInfo.end[0],\n y1: _ctx.elementInfo.end[1],\n x2: item[0],\n y2: item[1]\n }, null, 8, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_2))\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTLineElement } from '@/types/slides'\nimport { OperateLineHandlers } from '@/types/edit'\n\nimport ResizeHandler from './ResizeHandler.vue'\n\nexport default defineComponent({\n name: 'line-element-operate',\n inheritAttrs: false,\n components: {\n ResizeHandler,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n handlerVisible: {\n type: Boolean,\n required: true,\n },\n dragLineElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, command: OperateLineHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\n\n const svgWidth = computed(() => Math.max(props.elementInfo.start[0], props.elementInfo.end[0]))\n const svgHeight = computed(() => Math.max(props.elementInfo.start[1], props.elementInfo.end[1]))\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 ctrlHandler = (props.elementInfo.curve || props.elementInfo.broken) as [number, number]\n\n handlers.push({\n handler: OperateLineHandlers.C,\n style: {\n left: ctrlHandler[0] * canvasScale.value + 'px',\n top: ctrlHandler[1] * canvasScale.value + 'px',\n }\n })\n }\n else if (props.elementInfo.cubic) {\n const [ctrlHandler1, ctrlHandler2] = props.elementInfo.cubic\n handlers.push({\n handler: OperateLineHandlers.C1,\n style: {\n left: ctrlHandler1[0] * canvasScale.value + 'px',\n top: ctrlHandler1[1] * canvasScale.value + 'px',\n }\n })\n handlers.push({\n handler: OperateLineHandlers.C2,\n style: {\n left: ctrlHandler2[0] * canvasScale.value + 'px',\n top: ctrlHandler2[1] * canvasScale.value + 'px',\n }\n })\n }\n\n return handlers\n })\n\n return {\n svgWidth,\n svgHeight,\n canvasScale,\n resizeHandlers,\n }\n },\n})\n","import { render } from \"./LineElementOperate.vue?vue&type=template&id=c0a272d2&scoped=true&ts=true\"\nimport script from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./LineElementOperate.vue?vue&type=script&lang=ts\"\n\nimport \"./LineElementOperate.vue?vue&type=style&index=0&id=c0a272d2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c0a272d2\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createVNode as _createVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"table-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.textElementResizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_RotateHandler, {\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTTableElement } from '@/types/slides'\nimport { OperateResizeHandlers } 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: 'table-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 handlerVisible: {\n type: Boolean,\n required: true,\n },\n rotateElement: {\n type: Function as PropType<(element: PPTTableElement) => void>,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTTableElement, command: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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=45c5e7da&ts=true\"\nimport script from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./TableElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withModifiers as _withModifiers, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"common-element-operate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BorderLine = _resolveComponent(\"BorderLine\")!\n const _component_ResizeHandler = _resolveComponent(\"ResizeHandler\")!\n const _component_RotateHandler = _resolveComponent(\"RotateHandler\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.borderLines, (line) => {\n return (_openBlock(), _createBlock(_component_BorderLine, {\n class: \"operate-border-line\",\n key: line.type,\n type: line.type,\n style: _normalizeStyle(line.style)\n }, null, 8, [\"type\", \"style\"]))\n }), 128)),\n (_ctx.handlerVisible)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.resizeHandlers, (point) => {\n return (_openBlock(), _createBlock(_component_ResizeHandler, {\n class: \"operate-resize-handler\",\n key: point.direction,\n type: point.direction,\n rotate: _ctx.elementInfo.rotate,\n style: _normalizeStyle(point.style),\n onMousedown: _withModifiers($event => _ctx.scaleElement($event, _ctx.elementInfo, point.direction), [\"stop\"])\n }, null, 8, [\"type\", \"rotate\", \"style\", \"onMousedown\"]))\n }), 128)),\n (!_ctx.cannotRotate)\n ? (_openBlock(), _createBlock(_component_RotateHandler, {\n key: 0,\n class: \"operate-rotate-handler\",\n style: _normalizeStyle({ left: _ctx.scaleWidth / 2 + 'px' }),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.rotateElement(_ctx.elementInfo)), [\"stop\"]))\n }, null, 8, [\"style\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTShapeElement, PPTVideoElement, PPTLatexElement, PPTAudioElement } from '@/types/slides'\nimport { OperateResizeHandlers } 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\ntype PPTElement = PPTShapeElement | PPTVideoElement | PPTLatexElement | PPTAudioElement\n\nexport default defineComponent({\n name: 'common-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 handlerVisible: {\n type: Boolean,\n required: true,\n },\n rotateElement: {\n type: Function as PropType<(element: PPTElement) => void>,\n required: true,\n },\n scaleElement: {\n type: Function as PropType<(e: MouseEvent, element: PPTElement, command: OperateResizeHandlers) => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\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 const cannotRotate = computed(() => ['video', 'audio'].includes(props.elementInfo.type))\n\n return {\n scaleWidth,\n resizeHandlers,\n borderLines,\n cannotRotate,\n }\n },\n})\n","import { render } from \"./CommonElementOperate.vue?vue&type=template&id=474b1c2e&ts=true\"\nimport script from \"./CommonElementOperate.vue?vue&type=script&lang=ts\"\nexport * from \"./CommonElementOperate.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2b77dbb0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"href\"]\nconst _hoisted_2 = {\n key: 1,\n class: \"link\"\n}\nconst _hoisted_3 = { class: \"btns\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Divider = _resolveComponent(\"Divider\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"link-handler\",\n style: _normalizeStyle({ top: _ctx.height * _ctx.canvasScale + 10 + 'px' })\n }, [\n (_ctx.link.type === 'web')\n ? (_openBlock(), _createElementBlock(\"a\", {\n key: 0,\n class: \"link\",\n href: _ctx.link.target,\n target: \"_blank\"\n }, _toDisplayString(_ctx.link.target), 9, _hoisted_1))\n : (_openBlock(), _createElementBlock(\"a\", _hoisted_2, \"幻灯片页面 \" + _toDisplayString(_ctx.link.target), 1)),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.openLinkDialog()))\n }, \"更换\"),\n _createVNode(_component_Divider, { type: \"vertical\" }),\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.removeLink(_ctx.elementInfo)))\n }, \"移除\")\n ])\n ], 4))\n}","import { useSlidesStore } from '@/store'\nimport { PPTElement, PPTElementLink } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const setLink = (handleElement: PPTElement, link: PPTElementLink) => {\n const linkRegExp = /^(https?):\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+([\\w\\-.,@?^=%&:\\/~+#]*[\\w\\-@?^=%&\\/~+#])?$/\n if (link.type === 'web' && !linkRegExp.test(link.target)) {\n message.error('不是正确的网页链接地址')\n return false\n }\n const props = { link }\n slidesStore.updateElement({ id: handleElement.id, props })\n addHistorySnapshot()\n\n return true\n }\n\n const removeLink = (handleElement: PPTElement) => {\n slidesStore.removeElementProps({ id: handleElement.id, propName: 'link' })\n addHistorySnapshot()\n }\n\n return {\n setLink,\n removeLink,\n }\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { PPTElement, PPTElementLink } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nexport default defineComponent({\n name: 'link-handler',\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n link: {\n type: Object as PropType,\n required: true,\n },\n openLinkDialog: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const { canvasScale } = storeToRefs(useMainStore())\n\n const { removeLink } = useLink()\n\n const height = computed(() => props.elementInfo.type === 'line' ? 0 : props.elementInfo.height)\n\n return {\n canvasScale,\n height,\n removeLink,\n }\n },\n})\n","import { render } from \"./LinkHandler.vue?vue&type=template&id=2b77dbb0&scoped=true&ts=true\"\nimport script from \"./LinkHandler.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkHandler.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkHandler.vue?vue&type=style&index=0&id=2b77dbb0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2b77dbb0\"]])\n\nexport default __exports__","\r\nimport { defineComponent, PropType, computed } from 'vue'\r\nimport { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { ElementTypes, PPTElement, PPTLineElement, PPTVideoElement, PPTAudioElement } from '@/types/slides'\r\nimport { OperateLineHandlers, OperateResizeHandlers } 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 TableElementOperate from './TableElementOperate.vue'\r\nimport CommonElementOperate from './CommonElementOperate.vue'\r\nimport LinkHandler from './LinkHandler.vue'\r\n\r\nexport default defineComponent({\r\n name: 'operate',\r\n components: {\r\n LinkHandler,\r\n },\r\n props: {\r\n elementInfo: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n isSelected: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActive: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isActiveGroupElement: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n isMultiSelect: {\r\n type: Boolean,\r\n required: true,\r\n },\r\n rotateElement: {\r\n type: Function as PropType<(element: Exclude) => void>,\r\n required: true,\r\n },\r\n scaleElement: {\r\n type: Function as PropType<(e: MouseEvent, element: Exclude, command: OperateResizeHandlers) => void>,\r\n required: true,\r\n },\r\n dragLineElement: {\r\n type: Function as PropType<(e: MouseEvent, element: PPTLineElement, command: OperateLineHandlers) => void>,\r\n required: true,\r\n },\r\n openLinkDialog: {\r\n type: Function as PropType<() => void>,\r\n required: true,\r\n },\r\n },\r\n setup(props) {\r\n const { canvasScale, toolbarState } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(useSlidesStore())\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.TABLE]: TableElementOperate,\r\n [ElementTypes.CHART]: CommonElementOperate,\r\n [ElementTypes.LATEX]: CommonElementOperate,\r\n [ElementTypes.VIDEO]: CommonElementOperate,\r\n [ElementTypes.AUDIO]: CommonElementOperate,\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 const rotate = computed(() => 'rotate' in props.elementInfo ? props.elementInfo.rotate : 0)\r\n const height = computed(() => 'height' in props.elementInfo ? props.elementInfo.height : 0)\r\n\r\n return {\r\n currentOperateComponent,\r\n canvasScale,\r\n toolbarState,\r\n elementIndexInAnimation,\r\n rotate,\r\n height,\r\n }\r\n },\r\n})\r\n","import { render } from \"./index.vue?vue&type=template&id=6abdbdd6&scoped=true&ts=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=6abdbdd6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6abdbdd6\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3adaaa8e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"link-dialog\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = {\n key: 2,\n class: \"preview\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", null, \"预览:\", -1))\nconst _hoisted_6 = { class: \"btns\" }\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Input = _resolveComponent(\"Input\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': _ctx.type === tab.key }]),\n key: tab.key,\n onClick: ($event: any) => (_ctx.type = tab.key)\n }, _toDisplayString(tab.label), 11, _hoisted_3))\n }), 128))\n ]),\n (_ctx.type === 'web')\n ? (_openBlock(), _createBlock(_component_Input, {\n key: 0,\n class: \"input\",\n value: _ctx.address,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.address) = $event)),\n placeholder: \"请输入网页链接地址\"\n }, null, 8, [\"value\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.type === 'slide')\n ? (_openBlock(), _createBlock(_component_Select, {\n key: 1,\n class: \"input\",\n value: _ctx.slideId,\n \"onUpdate:value\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.slideId) = $event))\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: slide.id,\n value: slide.id\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"幻灯片 \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.type === 'slide' && _ctx.selectedSlide)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _hoisted_5,\n _createVNode(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n slide: _ctx.selectedSlide,\n size: 490\n }, null, 8, [\"slide\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Button, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.close())),\n style: {\"margin-right\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.save()))\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ])\n ]))\n}","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTElementLink } from '@/types/slides'\nimport useLink from '@/hooks/useLink'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\ntype TypeKey = 'web' | 'slide'\ninterface TabItem {\n key: TypeKey;\n label: string;\n}\n\nexport default defineComponent({\n name: 'link-dialog',\n emits: ['close'],\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const { handleElement } = storeToRefs(useMainStore())\n const { slides } = storeToRefs(useSlidesStore())\n\n const type = ref('web')\n const address = ref('')\n const slideId = ref('')\n\n const selectedSlide = computed(() => {\n if (!slideId.value) return null\n\n return slides.value.find(item => item.id === slideId.value) || null\n })\n\n const tabs: TabItem[] = [\n { key: 'web', label: '网页链接' },\n { key: 'slide', label: '幻灯片页面' },\n ]\n\n const { setLink } = useLink()\n\n onMounted(() => {\n if (handleElement.value?.link) {\n if (handleElement.value.link.type === 'web') address.value = handleElement.value.link.target\n else if (handleElement.value.link.type === 'slide') slideId.value = handleElement.value.link.target\n\n type.value = handleElement.value.link.type\n }\n })\n\n const close = () => emit('close')\n\n const save = () => {\n const link: PPTElementLink = {\n type: type.value,\n target: type.value === 'web' ? address.value : slideId.value,\n }\n if (handleElement.value) {\n const success = setLink(handleElement.value, link)\n if (success) close()\n else address.value = ''\n }\n }\n\n return {\n slides,\n tabs,\n type,\n address,\n slideId,\n selectedSlide,\n close,\n save,\n }\n },\n})\n","import { render } from \"./LinkDialog.vue?vue&type=template&id=3adaaa8e&scoped=true&ts=true\"\nimport script from \"./LinkDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./LinkDialog.vue?vue&type=script&lang=ts\"\n\nimport \"./LinkDialog.vue?vue&type=style&index=0&id=3adaaa8e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3adaaa8e\"]])\n\nexport default __exports__","\nimport { defineComponent, provide, ref, watch, watchEffect } from 'vue'\nimport { throttle } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { PPTElement } from '@/types/slides'\nimport { AlignmentLineProps } from '@/types/edit'\nimport { injectKeySlideScale } from '@/types/injectKey'\nimport { removeAllRanges } from '@/utils/selection'\nimport { KEYS } from '@/configs/hotkey'\n\nimport useViewportSize from './hooks/useViewportSize'\nimport useMouseSelection from './hooks/useMouseSelection'\nimport useDropImageOrText from './hooks/useDropImageOrText'\nimport useRotateElement from './hooks/useRotateElement'\nimport useScaleElement from './hooks/useScaleElement'\nimport useSelectElement from './hooks/useSelectElement'\nimport useDragElement from './hooks/useDragElement'\nimport useDragLineElement from './hooks/useDragLineElement'\nimport useInsertFromCreateSelection from './hooks/useInsertFromCreateSelection'\n\nimport useDeleteElement from '@/hooks/useDeleteElement'\nimport useCopyAndPasteElement from '@/hooks/useCopyAndPasteElement'\nimport useSelectAllElement from '@/hooks/useSelectAllElement'\nimport useScaleCanvas from '@/hooks/useScaleCanvas'\nimport useScreening from '@/hooks/useScreening'\nimport useSlideHandler from '@/hooks/useSlideHandler'\n\nimport EditableElement from './EditableElement.vue'\nimport MouseSelection from './MouseSelection.vue'\nimport ViewportBackground from './ViewportBackground.vue'\nimport AlignmentLine from './AlignmentLine.vue'\nimport ElementCreateSelection from './ElementCreateSelection.vue'\nimport MultiSelectOperate from './Operate/MultiSelectOperate.vue'\nimport Operate from './Operate/index.vue'\nimport LinkDialog from './LinkDialog.vue'\n\nexport default defineComponent({\n name: 'editor-canvas',\n components: {\n EditableElement,\n MouseSelection,\n ViewportBackground,\n AlignmentLine,\n ElementCreateSelection,\n MultiSelectOperate,\n Operate,\n LinkDialog,\n },\n setup() {\n const mainStore = useMainStore()\n const {\n activeElementIdList,\n activeGroupElementId,\n handleElementId,\n editorAreaFocus,\n showGridLines,\n creatingElement,\n canvasScale,\n } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(useSlidesStore())\n const { ctrlKeyState, ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())\n\n const viewportRef = ref()\n const alignmentLines = ref([])\n\n const linkDialogVisible = ref(false)\n const openLinkDialog = () => linkDialogVisible.value = true\n\n watch(handleElementId, () => {\n mainStore.setActiveGroupElementId('')\n })\n\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 { viewportStyles } = useViewportSize(canvasRef)\n\n useDropImageOrText(canvasRef)\n\n const { mouseSelection, mouseSelectionVisible, mouseSelectionQuadrant, 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 mainStore.setActiveElementIdList([])\n if (!ctrlOrShiftKeyActive.value) updateMouseSelection(e)\n if (!editorAreaFocus.value) mainStore.setEditorareaFocus(true)\n removeAllRanges()\n }\n\n // 移除画布编辑区域焦点\n const removeEditorAreaFocus = () => {\n if (editorAreaFocus.value) mainStore.setEditorareaFocus(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 toggleGridLines = () => {\n mainStore.setGridLinesState(!showGridLines.value)\n }\n\n // 在鼠标绘制的范围插入元素\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(injectKeySlideScale, canvasScale)\n\n return {\n elementList,\n activeElementIdList,\n handleElementId,\n activeGroupElementId,\n canvasRef,\n viewportRef,\n viewportStyles,\n canvasScale,\n mouseSelection,\n mouseSelectionVisible,\n mouseSelectionQuadrant,\n creatingElement,\n alignmentLines,\n linkDialogVisible,\n openLinkDialog,\n handleClickBlankArea,\n removeEditorAreaFocus,\n insertElementFromCreateSelection,\n selectElement,\n rotateElement,\n scaleElement,\n dragLineElement,\n scaleMultiElement,\n handleMousewheelCanvas,\n contextmenus,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=fe9bcf9c&scoped=true&ts=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=fe9bcf9c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-fe9bcf9c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4ae7c9aa\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"canvas-tool\" }\nconst _hoisted_2 = { class: \"left-handler\" }\nconst _hoisted_3 = { class: \"add-element-handler\" }\nconst _hoisted_4 = { class: \"right-handler\" }\nconst _hoisted_5 = { class: \"text\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconBack = _resolveComponent(\"IconBack\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconNext = _resolveComponent(\"IconNext\")!\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_IconPicture = _resolveComponent(\"IconPicture\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_ShapePool = _resolveComponent(\"ShapePool\")!\n const _component_IconGraphicDesign = _resolveComponent(\"IconGraphicDesign\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_LinePool = _resolveComponent(\"LinePool\")!\n const _component_IconConnection = _resolveComponent(\"IconConnection\")!\n const _component_ChartPool = _resolveComponent(\"ChartPool\")!\n const _component_IconChartProportion = _resolveComponent(\"IconChartProportion\")!\n const _component_TableGenerator = _resolveComponent(\"TableGenerator\")!\n const _component_IconInsertTable = _resolveComponent(\"IconInsertTable\")!\n const _component_IconFormula = _resolveComponent(\"IconFormula\")!\n const _component_MediaInput = _resolveComponent(\"MediaInput\")!\n const _component_IconVideoTwo = _resolveComponent(\"IconVideoTwo\")!\n const _component_IconMinus = _resolveComponent(\"IconMinus\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_IconFullScreen = _resolveComponent(\"IconFullScreen\")!\n const _component_LaTeXEditor = _resolveComponent(\"LaTeXEditor\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"撤销\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBack, {\n class: _normalizeClass([\"handler-item\", { 'disable': !_ctx.canUndo }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.undo()))\n }, null, 8, [\"class\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"重做\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconNext, {\n class: _normalizeClass([\"handler-item\", { 'disable': !_ctx.canRedo }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.redo()))\n }, null, 8, [\"class\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入文字\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFontSize, {\n class: \"handler-item\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.drawText()))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_FileInput, {\n onChange: _cache[3] || (_cache[3] = files => _ctx.insertImageElement(files))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入图片\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPicture, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.shapePoolVisible,\n \"onUpdate:visible\": _cache[5] || (_cache[5] = ($event: any) => ((_ctx.shapePoolVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ShapePool, {\n onSelect: _cache[4] || (_cache[4] = shape => _ctx.drawShape(shape))\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入形状\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconGraphicDesign, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.linePoolVisible,\n \"onUpdate:visible\": _cache[7] || (_cache[7] = ($event: any) => ((_ctx.linePoolVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_LinePool, {\n onSelect: _cache[6] || (_cache[6] = line => _ctx.drawLine(line))\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入线条\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconConnection, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.chartPoolVisible,\n \"onUpdate:visible\": _cache[9] || (_cache[9] = ($event: any) => ((_ctx.chartPoolVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ChartPool, {\n onSelect: _cache[8] || (_cache[8] = chart => { _ctx.createChartElement(chart); _ctx.chartPoolVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入图表\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconChartProportion, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.tableGeneratorVisible,\n \"onUpdate:visible\": _cache[12] || (_cache[12] = ($event: any) => ((_ctx.tableGeneratorVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_TableGenerator, {\n onClose: _cache[10] || (_cache[10] = ($event: any) => (_ctx.tableGeneratorVisible = false)),\n onInsert: _cache[11] || (_cache[11] = ({ row, col }) => { _ctx.createTableElement(row, col); _ctx.tableGeneratorVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入表格\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconInsertTable, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入公式\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFormula, {\n class: \"handler-item\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.latexEditorVisible = true))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.mediaInputVisible,\n \"onUpdate:visible\": _cache[17] || (_cache[17] = ($event: any) => ((_ctx.mediaInputVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_MediaInput, {\n onClose: _cache[14] || (_cache[14] = ($event: any) => (_ctx.mediaInputVisible = false)),\n onInsertVideo: _cache[15] || (_cache[15] = src => { _ctx.createVideoElement(src); _ctx.mediaInputVisible = false }),\n onInsertAudio: _cache[16] || (_cache[16] = src => { _ctx.createAudioElement(src); _ctx.mediaInputVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"插入音视频\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconVideoTwo, { class: \"handler-item\" })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_IconMinus, {\n class: \"handler-item viewport-size\",\n onClick: _cache[18] || (_cache[18] = ($event: any) => (_ctx.scaleCanvas('-')))\n }),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.canvasScalePercentage), 1),\n _createVNode(_component_IconPlus, {\n class: \"handler-item viewport-size\",\n onClick: _cache[19] || (_cache[19] = ($event: any) => (_ctx.scaleCanvas('+')))\n }),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"适配屏幕\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFullScreen, {\n class: \"handler-item viewport-size-adaptation\",\n onClick: _cache[20] || (_cache[20] = ($event: any) => (_ctx.setCanvasPercentage(90)))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _createVNode(_component_Modal, {\n visible: _ctx.latexEditorVisible,\n \"onUpdate:visible\": _cache[23] || (_cache[23] = ($event: any) => ((_ctx.latexEditorVisible) = $event)),\n footer: null,\n centered: \"\",\n width: 880,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_LaTeXEditor, {\n onClose: _cache[21] || (_cache[21] = ($event: any) => (_ctx.latexEditorVisible = false)),\n onUpdate: _cache[22] || (_cache[22] = data => { _ctx.createLatexElement(data); _ctx.latexEditorVisible = false })\n })\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7fdb328c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"shape-pool\" }\nconst _hoisted_2 = { class: \"category-name\" }\nconst _hoisted_3 = { class: \"shape-list\" }\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = {\n overflow: \"visible\",\n width: \"18\",\n height: \"18\"\n}\nconst _hoisted_6 = [\"transform\"]\nconst _hoisted_7 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.shapeList, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"category\",\n key: item.type\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(item.type), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.children, (shape, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"shape-item\",\n key: index\n }, [\n _createElementVNode(\"div\", {\n class: \"shape-content\",\n onClick: ($event: any) => (_ctx.selectShape(shape))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, [\n _createElementVNode(\"g\", {\n transform: `scale(${18 / shape.viewBox[0]}, ${18 / shape.viewBox[1]}) translate(0,0) matrix(1,0,0,1,0,0)`\n }, [\n _createElementVNode(\"path\", {\n class: \"shape-path\",\n \"vector-effect\": \"non-scaling-stroke\",\n \"stroke-linecap\": \"butt\",\n \"stroke-miterlimit\": \"8\",\n fill: \"transparent\",\n stroke: \"#999\",\n \"stroke-width\": \"2\",\n d: shape.path\n }, null, 8, _hoisted_7)\n ], 8, _hoisted_6)\n ]))\n ], 8, _hoisted_4)\n ]))\n }), 128))\n ])\n ]))\n }), 128))\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { SHAPE_LIST, ShapePoolItem } from '@/configs/shapes'\n\nexport default defineComponent({\n name: 'shape-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const shapeList = SHAPE_LIST\n\n const selectShape = (shape: ShapePoolItem) => {\n emit('select', shape)\n }\n\n return {\n shapeList,\n selectShape,\n }\n },\n})\n","import { render } from \"./ShapePool.vue?vue&type=template&id=7fdb328c&scoped=true&ts=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=7fdb328c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7fdb328c\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7fa1d412\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"line-pool\" }\nconst _hoisted_2 = { class: \"category-name\" }\nconst _hoisted_3 = { class: \"line-list\" }\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = {\n overflow: \"visible\",\n width: \"20\",\n height: \"20\"\n}\nconst _hoisted_6 = [\"d\", \"stroke-dasharray\", \"marker-start\", \"marker-end\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinePointMarker = _resolveComponent(\"LinePointMarker\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.lineList, (item, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"category\",\n key: item.type\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(item.type), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.children, (line, j) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"line-item\",\n key: j\n }, [\n _createElementVNode(\"div\", {\n class: \"line-content\",\n onClick: ($event: any) => (_ctx.selectLine(line))\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, [\n _createElementVNode(\"defs\", null, [\n (line.points[0])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 0,\n class: \"line-marker\",\n id: `preset-line-${i}-${j}`,\n position: \"start\",\n type: line.points[0],\n color: \"currentColor\",\n baseSize: 2\n }, null, 8, [\"id\", \"type\"]))\n : _createCommentVNode(\"\", true),\n (line.points[1])\n ? (_openBlock(), _createBlock(_component_LinePointMarker, {\n key: 1,\n class: \"line-marker\",\n id: `preset-line-${i}-${j}`,\n position: \"end\",\n type: line.points[1],\n color: \"currentColor\",\n baseSize: 2\n }, null, 8, [\"id\", \"type\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"path\", {\n class: \"line-path\",\n d: line.path,\n stroke: \"currentColor\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-dasharray\": line.style === 'solid' ? '0, 0' : '4, 1',\n \"marker-start\": line.points[0] ? `url(#${`preset-line-${i}-${j}`}-${line.points[0]}-start)` : '',\n \"marker-end\": line.points[1] ? `url(#${`preset-line-${i}-${j}`}-${line.points[1]}-end)` : ''\n }, null, 8, _hoisted_6)\n ]))\n ], 8, _hoisted_4)\n ]))\n }), 128))\n ])\n ]))\n }), 128))\n ]))\n}","import { LinePoint } from '@/types/slides'\n\n\nexport interface LinePoolItem {\n path: string;\n style: 'solid' | 'dashed';\n points: [LinePoint, LinePoint];\n isBroken?: boolean;\n isCurve?: boolean;\n isCubic?: boolean;\n}\n\ninterface PresetLine {\n type: string;\n children: LinePoolItem[];\n}\n\nexport const LINE_LIST: PresetLine[] = [\n {\n type: '直线',\n children: [\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', ''] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'dashed', points: ['', 'arrow'] },\n { path: 'M 0 0 L 20 20', style: 'solid', points: ['', 'dot'] },\n ],\n },\n {\n type: '折线、曲线',\n children: [\n { path: 'M 0 0 L 0 20 L 20 20', style: 'solid', points: ['', 'arrow'], isBroken: true },\n { path: 'M 0 0 Q 0 20 20 20', style: 'solid', points: ['', 'arrow'], isCurve: true },\n { path: 'M 0 0 C 20 0 0 20 20 20', style: 'solid', points: ['', 'arrow'], isCubic: true },\n ],\n },\n]","\nimport { defineComponent } from 'vue'\nimport { LINE_LIST, LinePoolItem } from '@/configs/lines'\n\nimport LinePointMarker from '@/views/components/element/LineElement/LinePointMarker.vue'\n\nexport default defineComponent({\n name: 'line-pool',\n emits: ['select'],\n components: {\n LinePointMarker,\n },\n setup(props, { emit }) {\n const lineList = LINE_LIST\n\n const selectLine = (line: LinePoolItem) => {\n emit('select', line)\n }\n\n return {\n lineList,\n selectLine,\n }\n },\n})\n","import { render } from \"./LinePool.vue?vue&type=template&id=7fa1d412&scoped=true&ts=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=7fa1d412&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7fa1d412\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64ca421e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-pool\" }\nconst _hoisted_2 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconChartLine = _resolveComponent(\"IconChartLine\")!\n const _component_IconChartHistogram = _resolveComponent(\"IconChartHistogram\")!\n const _component_IconChartPie = _resolveComponent(\"IconChartPie\")!\n const _component_IconChartHistogramOne = _resolveComponent(\"IconChartHistogramOne\")!\n const _component_IconChartLineArea = _resolveComponent(\"IconChartLineArea\")!\n const _component_IconChartRing = _resolveComponent(\"IconChartRing\")!\n const _component_IconChartScatter = _resolveComponent(\"IconChartScatter\")!\n\n return (_openBlock(), _createElementBlock(\"ul\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.chartList, (chart, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: \"chart-item\",\n key: index\n }, [\n _createElementVNode(\"div\", {\n class: \"chart-content\",\n onClick: ($event: any) => (_ctx.selectChart(chart))\n }, [\n (chart === 'line')\n ? (_openBlock(), _createBlock(_component_IconChartLine, {\n key: 0,\n size: \"24\"\n }))\n : (chart === 'bar')\n ? (_openBlock(), _createBlock(_component_IconChartHistogram, {\n key: 1,\n size: \"24\"\n }))\n : (chart === 'pie')\n ? (_openBlock(), _createBlock(_component_IconChartPie, {\n key: 2,\n size: \"24\"\n }))\n : (chart === 'horizontalBar')\n ? (_openBlock(), _createBlock(_component_IconChartHistogramOne, {\n key: 3,\n size: \"24\"\n }))\n : (chart === 'area')\n ? (_openBlock(), _createBlock(_component_IconChartLineArea, {\n key: 4,\n size: \"24\"\n }))\n : (chart === 'ring')\n ? (_openBlock(), _createBlock(_component_IconChartRing, {\n key: 5,\n size: \"24\"\n }))\n : (chart === 'scatter')\n ? (_openBlock(), _createBlock(_component_IconChartScatter, {\n key: 6,\n size: \"24\"\n }))\n : _createCommentVNode(\"\", true)\n ], 8, _hoisted_2)\n ]))\n }), 128))\n ]))\n}","\nimport { PresetChartType } from '@/types/slides'\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'chart-pool',\n emits: ['select'],\n setup(props, { emit }) {\n const chartList: PresetChartType[] = ['bar', 'horizontalBar', 'line', 'area', 'scatter', 'pie', 'ring']\n\n const selectChart = (chart: PresetChartType) => {\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=64ca421e&scoped=true&ts=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=64ca421e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-64ca421e\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e325ce98\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-generator\" }\nconst _hoisted_2 = { class: \"title\" }\nconst _hoisted_3 = { class: \"lef\" }\nconst _hoisted_4 = [\"onMouseenter\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"custom\"\n}\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"label\",\n style: {\"flex\":\"1\"}\n}, \"行数:\", -1))\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"label\",\n style: {\"flex\":\"1\"}\n}, \"列数:\", -1))\nconst _hoisted_10 = { class: \"btns\" }\nconst _hoisted_11 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, \"表格 \" + _toDisplayString(_ctx.endCell.length ? `${_ctx.endCell[0]} x ${_ctx.endCell[1]}` : ''), 1),\n _createElementVNode(\"div\", {\n class: \"right\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.isCustom = !_ctx.isCustom))\n }, _toDisplayString(_ctx.isCustom ? '返回' : '自定义'), 1)\n ]),\n (!_ctx.isCustom)\n ? (_openBlock(), _createElementBlock(\"table\", {\n key: 0,\n onMouseleave: _cache[1] || (_cache[1] = ($event: any) => (_ctx.endCell = [])),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleClickTable()))\n }, [\n _createElementVNode(\"tbody\", null, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(10, (row) => {\n return _createElementVNode(\"tr\", { key: row }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(10, (col) => {\n return _createElementVNode(\"td\", {\n onMouseenter: ($event: any) => (_ctx.endCell = [row, col]),\n key: col\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"cell\", { 'active': _ctx.endCell.length && row <= _ctx.endCell[0] && col <= _ctx.endCell[1] }])\n }, null, 2)\n ], 40, _hoisted_4)\n }), 64))\n ])\n }), 64))\n ])\n ], 32))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createVNode(_component_InputNumber, {\n min: 1,\n max: 20,\n value: _ctx.customRow,\n \"onUpdate:value\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.customRow) = $event)),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_InputNumber, {\n min: 1,\n max: 20,\n value: _ctx.customCol,\n \"onUpdate:value\": _cache[4] || (_cache[4] = ($event: any) => ((_ctx.customCol) = $event)),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.close()))\n }, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"btn\",\n type: \"primary\",\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.insertCustomTable()))\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n })\n ])\n ]))\n ]))\n}","\nimport { defineComponent, ref } from 'vue'\n\nimport { message } from 'ant-design-vue'\n\nexport default defineComponent({\n name: 'table-generator',\n emits: ['insert', 'close'],\n setup(props, { emit }) {\n const endCell = ref([])\n const customRow = ref(3)\n const customCol = ref(3)\n const isCustom = ref(false)\n\n const handleClickTable = () => {\n if (!endCell.value.length) return\n const [row, col] = endCell.value\n emit('insert', { row, col })\n }\n\n const insertCustomTable = () => {\n if (customRow.value < 1 || customRow.value > 20) return message.warning('行数/列数必须在0~20之间!')\n if (customCol.value < 1 || customCol.value > 20) return message.warning('行数/列数必须在0~20之间!')\n emit('insert', { row: customRow.value, col: customCol.value })\n isCustom.value = false\n }\n\n const close = () => {\n emit('close')\n isCustom.value = false\n }\n\n return {\n endCell,\n customRow,\n customCol,\n handleClickTable,\n insertCustomTable,\n isCustom,\n close,\n }\n },\n})\n","import { render } from \"./TableGenerator.vue?vue&type=template&id=e325ce98&scoped=true&ts=true\"\nimport script from \"./TableGenerator.vue?vue&type=script&lang=ts\"\nexport * from \"./TableGenerator.vue?vue&type=script&lang=ts\"\n\nimport \"./TableGenerator.vue?vue&type=style&index=0&id=e325ce98&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e325ce98\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-ec37f828\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"media-input\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"btns\" }\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"确认\")\nconst _hoisted_7 = { class: \"btns\" }\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Input = _resolveComponent(\"Input\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': _ctx.type === tab.key }]),\n key: tab.key,\n onClick: ($event: any) => (_ctx.type = tab.key)\n }, _toDisplayString(tab.label), 11, _hoisted_3))\n }), 128))\n ]),\n (_ctx.type === 'video')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_Input, {\n value: _ctx.videoSrc,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.videoSrc) = $event)),\n placeholder: \"请输入视频地址,e.g. https://xxx.mp4\"\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Button, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.close())),\n style: {\"margin-right\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.insertVideo()))\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true),\n (_ctx.type === 'audio')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_Input, {\n value: _ctx.audioSrc,\n \"onUpdate:value\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.audioSrc) = $event)),\n placeholder: \"请输入音频地址,e.g. https://xxx.mp3\"\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_Button, {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.close())),\n style: {\"margin-right\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.insertAudio()))\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, ref } from 'vue'\nimport { message } from 'ant-design-vue'\n\ntype TypeKey = 'video' | 'audio'\ninterface TabItem {\n key: TypeKey;\n label: string;\n}\n\nexport default defineComponent({\n name: 'media-input',\n emits: ['insertVideo', 'insertAudio', 'close'],\n setup(props, { emit }) {\n const type = ref('video')\n\n const videoSrc = ref('https://mazwai.com/videvo_files/video/free/2019-01/small_watermarked/181004_04_Dolphins-Whale_06_preview.webm')\n const audioSrc = ref('https://freesound.org/data/previews/614/614107_11861866-lq.mp3')\n\n const tabs: TabItem[] = [\n { key: 'video', label: '视频' },\n { key: 'audio', label: '音频' },\n ]\n\n const insertVideo = () => {\n if (!videoSrc.value) return message.error('请先输入正确的视频地址')\n emit('insertVideo', videoSrc.value)\n }\n\n const insertAudio = () => {\n if (!audioSrc.value) return message.error('请先输入正确的音频地址')\n emit('insertAudio', audioSrc.value)\n }\n\n const close = () => emit('close')\n\n return {\n type,\n videoSrc,\n audioSrc,\n tabs,\n insertVideo,\n insertAudio,\n close,\n }\n },\n})\n","import { render } from \"./MediaInput.vue?vue&type=template&id=ec37f828&scoped=true&ts=true\"\nimport script from \"./MediaInput.vue?vue&type=script&lang=ts\"\nexport * from \"./MediaInput.vue?vue&type=script&lang=ts\"\n\nimport \"./MediaInput.vue?vue&type=style&index=0&id=ec37f828&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ec37f828\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-129e1afa\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"latex-editor\" }\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"left\" }\nconst _hoisted_4 = { class: \"input-area\" }\nconst _hoisted_5 = { class: \"preview\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"placeholder\"\n}\nconst _hoisted_7 = {\n key: 1,\n class: \"preview-content\"\n}\nconst _hoisted_8 = { class: \"right\" }\nconst _hoisted_9 = { class: \"tabs\" }\nconst _hoisted_10 = [\"onClick\"]\nconst _hoisted_11 = { class: \"content\" }\nconst _hoisted_12 = {\n key: 0,\n class: \"symbol\"\n}\nconst _hoisted_13 = { class: \"symbol-tabs\" }\nconst _hoisted_14 = [\"onClick\"]\nconst _hoisted_15 = { class: \"symbol-pool\" }\nconst _hoisted_16 = [\"onClick\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"formula\"\n}\nconst _hoisted_18 = { class: \"formula-title\" }\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = { class: \"footer\" }\nconst _hoisted_21 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_22 = /*#__PURE__*/_createTextVNode(\"确定\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextArea = _resolveComponent(\"TextArea\")!\n const _component_FormulaContent = _resolveComponent(\"FormulaContent\")!\n const _component_SymbolContent = _resolveComponent(\"SymbolContent\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_TextArea, {\n value: _ctx.latex,\n \"onUpdate:value\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.latex) = $event)),\n placeholder: \"输入 LaTeX 公式\",\n ref: \"textAreaRef\"\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_ctx.latex)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, \"公式预览\"))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(_component_FormulaContent, {\n width: 518,\n height: 138,\n latex: _ctx.latex\n }, null, 8, [\"latex\"])\n ]))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': tab.value === _ctx.toolbarState }]),\n key: tab.value,\n onClick: ($event: any) => (_ctx.toolbarState = tab.value)\n }, _toDisplayString(tab.label), 11, _hoisted_10))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n (_ctx.toolbarState === 'symbol')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolList, (group) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"symbol-tab\", { 'active': _ctx.selectedSymbolKey === group.type }]),\n key: group.type,\n onClick: ($event: any) => (_ctx.selectedSymbolKey = group.type)\n }, _toDisplayString(group.label), 11, _hoisted_14))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolPool, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"symbol-item\",\n key: item.latex,\n onClick: ($event: any) => (_ctx.insertSymbol(item.latex))\n }, [\n _createVNode(_component_SymbolContent, {\n latex: item.latex\n }, null, 8, [\"latex\"])\n ], 8, _hoisted_16))\n }), 128))\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.formulaList, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"formula-item\",\n key: item.label\n }, [\n _createElementVNode(\"div\", _hoisted_18, _toDisplayString(item.label), 1),\n _createElementVNode(\"div\", {\n class: \"formula-item-content\",\n onClick: ($event: any) => (_ctx.latex =item.latex)\n }, [\n _createVNode(_component_FormulaContent, {\n width: 236,\n height: 60,\n latex: item.latex\n }, null, 8, [\"latex\"])\n ], 8, _hoisted_19)\n ]))\n }), 128))\n ]))\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_20, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.close()))\n }, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"btn\",\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.update()))\n }, {\n default: _withCtx(() => [\n _hoisted_22\n ]),\n _: 1\n })\n ])\n ]))\n}","import { hfmath, CONFIG as hfmathConfig } from 'hfmath'\n\nhfmathConfig.SUB_SUP_SCALE = 0.5\n\nexport { hfmath }","export const FORMULA_LIST = [\n {\n label: '高斯公式',\n latex: `\\\\int\\\\int\\\\int _ { \\\\Omega } \\\\left( \\\\frac { \\\\partial {P} } { \\\\partial {x} } + \\\\frac { \\\\partial {Q} } { \\\\partial {y} } + \\\\frac { \\\\partial {R} }{ \\\\partial {z} } \\\\right) \\\\mathrm { d } V = \\\\oint _ { \\\\partial \\\\Omega } ( P \\\\cos \\\\alpha + Q \\\\cos \\\\beta + R \\\\cos \\\\gamma ) \\\\mathrm{ d} S`\n },\n {\n label: '傅里叶级数',\n latex: `f(x) = \\\\frac {a_0} 2 + \\\\sum_{n = 1}^\\\\infty {({a_n}\\\\cos {nx} + {b_n}\\\\sin {nx})}`,\n },\n {\n label: '泰勒展开式',\n latex: `e ^ { x } = 1 + \\\\frac { x } { 1 ! } + \\\\frac { x ^ { 2 } } { 2 ! } + \\\\frac { x ^ { 3 } } { 3 ! } + ... , \\\\quad - \\\\infty < x < \\\\infty`,\n },\n {\n label: '定积分',\n latex: `\\\\lim_ { n \\\\rightarrow + \\\\infty } \\\\sum _ { i = 1 } ^ { n } f \\\\left[ a + \\\\frac { i } { n } ( b - a ) \\\\right] \\\\frac { b - a } { n } = \\\\int _ { a } ^ { b } f ( x ) dx`,\n },\n {\n label: '三角恒等式1',\n latex: `\\\\sin \\\\alpha \\\\pm \\\\sin \\\\beta = 2 \\\\sin \\\\frac { 1 } { 2 } ( \\\\alpha \\\\pm \\\\beta ) \\\\cos \\\\frac { 1 } { 2 } ( \\\\alpha \\\\mp \\\\beta )`,\n },\n {\n label: '三角恒等式2',\n latex: `\\\\cos \\\\alpha + \\\\cos \\\\beta = 2 \\\\cos \\\\frac { 1 } { 2 } ( \\\\alpha + \\\\beta ) \\\\cos \\\\frac { 1 } { 2 } ( \\\\alpha - \\\\beta )`,\n },\n {\n label: '和的展开式',\n latex: `( 1 + x ) ^ { n } = 1 + \\\\frac { n x } { 1 ! } + \\\\frac { n ( n - 1 ) x ^ { 2 } } { 2 ! } + ...`,\n },\n {\n label: '欧拉公式',\n latex: ` e^{ix} = \\\\cos {x} + i\\\\sin {x}`,\n },\n {\n label: '贝努利方程',\n latex: `\\\\frac {dy} {dx} + P(x)y = Q(x) y^n ({n} \\\\not= {0,1})`,\n },\n {\n label: '全微分方程',\n latex: `du(x,y) = P(x,y)dx + Q(x,y)dy = 0`,\n },\n {\n label: '非齐次方程',\n latex: `y = (\\\\int Q(x) e^{\\\\int {P(x)dx}}dx + C)e^{-\\\\int {P(x)dx}}`,\n },\n {\n label: '柯西中值定理',\n latex: `\\\\frac{{f(b) - f(a)}}{{F(b) - F(a)}} = \\\\frac{{f'(\\\\xi )}}{{F'(\\\\xi )}}`,\n },\n {\n label: '拉格朗日中值定理',\n latex: `f(b) - f(a) = f'(\\\\xi )(b - a)`,\n },\n {\n label: '导数公式',\n latex: `(\\\\arcsin x)' = \\\\frac{1}{{\\\\sqrt {1 - x^2} }}`,\n },\n {\n label: '三角函数积分',\n latex: `\\\\int {tgxdx = - \\\\ln \\\\left| {\\\\cos x} \\\\right| + C}`,\n },\n {\n label: '二次曲面',\n latex: `\\\\frac{{{x^2}}}{{{a^2}}} + \\\\frac{{{y^2}}}{{{b^2}}} - \\\\frac{{{z^2}}}{{{c^2}}} = 1`,\n },\n {\n label: '二阶微分',\n latex: `\\\\frac {{d^2}y} {dx^2} + P(x) \\\\frac {dy} {dx} + Q(x)y = f(x)`,\n },\n {\n label: '方向导数',\n latex: `\\\\frac{{\\\\partial f}}{{\\\\partial l}} = \\\\frac{{\\\\partial f}}{{\\\\partial x}}\\\\cos \\\\phi + \\\\frac{{\\\\partial f}}{{\\\\partial y}}\\\\sin \\\\phi`,\n },\n]\n\nexport const SYMBOL_LIST = [\n {\n type: 'operators',\n label: '数学',\n children: [\n { latex: '\\\\cdot' },\n { latex: '\\\\pm' },\n { latex: '\\\\mp' },\n { latex: '+' },\n { latex: '-' },\n { latex: '\\\\times' },\n { latex: '\\\\div' },\n { latex: '<' },\n { latex: '>' },\n { latex: '=' },\n { latex: '\\\\neq\\\\ne' },\n { latex: '\\\\leqq' },\n { latex: '\\\\geqq' },\n { latex: '\\\\leq' },\n { latex: '\\\\geq' },\n { latex: '\\\\propto' },\n { latex: '\\\\sim' },\n { latex: '\\\\equiv' },\n { latex: '\\\\dagger' },\n { latex: '\\\\ddagger' },\n { latex: '\\\\ell' },\n { latex: '\\\\#' },\n { latex: '\\\\$' },\n { latex: '\\\\&' },\n { latex: '\\\\%' },\n { latex: '\\\\langle\\\\rangle' },\n { latex: '()' },\n { latex: '[]' },\n { latex: '\\\\{\\\\}' },\n { latex: '||' },\n { latex: '\\\\|' },\n { latex: '\\\\exists' },\n { latex: '\\\\in' },\n { latex: '\\\\subset' },\n { latex: '\\\\supset' },\n { latex: '\\\\cup' },\n { latex: '\\\\cap' },\n { latex: '\\\\infty' },\n { latex: '\\\\partial' },\n { latex: '\\\\nabla' },\n { latex: '\\\\aleph' },\n { latex: '\\\\wp' },\n { latex: '\\\\therefore' },\n { latex: '\\\\mid' },\n { latex: '\\\\sum' },\n { latex: '\\\\prod' },\n { latex: '\\\\bigoplus' },\n { latex: '\\\\bigodot' },\n { latex: '\\\\int' },\n { latex: '\\\\oint' },\n { latex: '\\\\oplus' },\n { latex: '\\\\odot' },\n { latex: '\\\\perp' },\n { latex: '\\\\angle' },\n { latex: '\\\\triangle' },\n { latex: '\\\\Box' },\n { latex: '\\\\rightarrow' },\n { latex: '\\\\to' },\n { latex: '\\\\leftarrow' },\n { latex: '\\\\gets' },\n { latex: '\\\\circ' },\n { latex: '\\\\bigcirc' },\n { latex: '\\\\bullet' },\n { latex: '\\\\star' },\n { latex: '\\\\diamond' },\n { latex: '\\\\ast' },\n { latex: ',' },\n { latex: '.' },\n { latex: ';' },\n { latex: '!' },\n ],\n },\n {\n type: 'group',\n label: '组合',\n children: [\n { latex: '\\\\frac{a}{b}' },\n { latex: '\\\\frac{dx}{dx}' },\n { latex: '\\\\frac{\\\\partial a}{\\\\partial b}' },\n { latex: '\\\\sqrt{x}' },\n { latex: '\\\\sqrt[n]{x}' },\n { latex: 'x^{n}' },\n { latex: 'x_{n}' },\n { latex: 'x_a^b' },\n { latex: '\\\\int_{a}^{b}' },\n { latex: '\\\\oint_a^b' },\n { latex: '\\\\lim_{a \\\\rightarrow b}' },\n { latex: '\\\\prod_a^b' },\n { latex: '\\\\sum_a^b' },\n { latex: '\\\\left(\\\\begin{array}a \\\\\\\\ b\\\\end{array}\\\\right)' },\n { latex: '\\\\begin{bmatrix}a & b \\\\\\\\ c & d \\\\end{bmatrix}' },\n { latex: '\\\\begin{cases}a & x = 0 \\\\\\\\ b & x > 0\\\\end{cases}' },\n { latex: '\\\\hat{a}' },\n { latex: '\\\\breve{a}' },\n { latex: '\\\\acute{a}' },\n { latex: '\\\\grave{a}' },\n { latex: '\\\\tilde{a}' },\n { latex: '\\\\bar{a}' },\n { latex: '\\\\vec{a}' },\n { latex: '\\\\underline{a}' },\n { latex: '\\\\overline{a}' },\n { latex: '\\\\widehat{ab}' },\n { latex: '\\\\overleftarrow{ab}' },\n { latex: '\\\\overrightarrow{ab}' },\n ],\n },\n {\n type: 'verbatim',\n label: '函数',\n children: [\n { latex: '\\\\log' },\n { latex: '\\\\ln' },\n { latex: '\\\\exp' },\n { latex: '\\\\mod' },\n { latex: '\\\\lim' },\n { latex: '\\\\sin' },\n { latex: '\\\\cos' },\n { latex: '\\\\tan' },\n { latex: '\\\\csc' },\n { latex: '\\\\sec' },\n { latex: '\\\\cot' },\n { latex: '\\\\sinh' },\n { latex: '\\\\cosh' },\n { latex: '\\\\tanh' },\n { latex: '\\\\csch' },\n { latex: '\\\\sech' },\n { latex: '\\\\coth' },\n { latex: '\\\\arcsin' },\n { latex: '\\\\arccos' },\n { latex: '\\\\arctan' },\n { latex: '\\\\arccsc' },\n { latex: '\\\\arcsec' },\n { latex: '\\\\arccot' },\n ],\n },\n {\n type: 'greek',\n label: '希腊字母',\n children: [\n { latex: '\\\\alpha' },\n { latex: '\\\\beta' },\n { latex: '\\\\gamma' },\n { latex: '\\\\delta' },\n { latex: '\\\\varepsilon' },\n { latex: '\\\\zeta' },\n { latex: '\\\\eta' },\n { latex: '\\\\vartheta' },\n { latex: '\\\\iota' },\n { latex: '\\\\kappa' },\n { latex: '\\\\lambda' },\n { latex: '\\\\mu' },\n { latex: '\\\\nu' },\n { latex: '\\\\xi' },\n { latex: '\\\\omicron' },\n { latex: '\\\\pi' },\n { latex: '\\\\rho' },\n { latex: '\\\\sigma' },\n { latex: '\\\\tau' },\n { latex: '\\\\upsilon' },\n { latex: '\\\\varphi' },\n { latex: '\\\\chi' },\n { latex: '\\\\psi' },\n { latex: '\\\\omega' },\n { latex: '\\\\epsilon' },\n { latex: '\\\\theta' },\n { latex: '\\\\phi' },\n { latex: '\\\\varsigma' },\n { latex: '\\\\Alpha' },\n { latex: '\\\\Beta' },\n { latex: '\\\\Gamma' },\n { latex: '\\\\Delta' },\n { latex: '\\\\Epsilon' },\n { latex: '\\\\Zeta' },\n { latex: '\\\\Eta' },\n { latex: '\\\\Theta' },\n { latex: '\\\\Iota' },\n { latex: '\\\\Kappa' },\n { latex: '\\\\Lambda' },\n { latex: '\\\\Mu' },\n { latex: '\\\\Nu' },\n { latex: '\\\\Xi' },\n { latex: '\\\\Omicron' },\n { latex: '\\\\Pi' },\n { latex: '\\\\Rho' },\n { latex: '\\\\Sigma' },\n { latex: '\\\\Tau' },\n { latex: '\\\\Upsilon' },\n { latex: '\\\\Phi' },\n { latex: '\\\\Chi' },\n { latex: '\\\\Psi' },\n { latex: '\\\\Omega' },\n ],\n },\n]","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-cf0ca630\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"transform\"]\nconst _hoisted_3 = [\"d\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n class: \"formula-content\",\n overflow: \"visible\",\n width: _ctx.box.w + 32,\n height: _ctx.box.h + 32,\n stroke: \"#000\",\n \"stroke-width\": \"1\",\n fill: \"none\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }, [\n _createElementVNode(\"g\", {\n transform: `scale(${_ctx.scale}, ${_ctx.scale}) translate(0,0) matrix(1,0,0,1,0,0)`,\n \"transform-origin\": \"0 50%\"\n }, [\n _createElementVNode(\"path\", { d: _ctx.pathd }, null, 8, _hoisted_3)\n ], 8, _hoisted_2)\n ], 8, _hoisted_1))\n}","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { hfmath } from './hfmath'\n\nexport default defineComponent({\n name: 'formula-content',\n props: {\n latex: {\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 },\n setup(props) {\n const box = ref({ x: 0, y: 0, w: 0, h: 0 })\n const pathd = ref('')\n\n watch(() => props.latex, () => {\n const eq = new hfmath(props.latex)\n pathd.value = eq.pathd({})\n box.value = eq.box({})\n }, { immediate: true })\n\n const scale = computed(() => {\n const boxW = box.value.w + 32\n const boxH = box.value.h + 32\n\n if (boxW > props.width || boxH > props.height) {\n if (boxW / boxH > props.width / props.height) return props.width / boxW\n return props.height / boxH\n }\n return 1\n })\n\n return {\n box,\n pathd,\n scale,\n }\n },\n})\n","import { render } from \"./FormulaContent.vue?vue&type=template&id=cf0ca630&scoped=true&ts=true\"\nimport script from \"./FormulaContent.vue?vue&type=script&lang=ts\"\nexport * from \"./FormulaContent.vue?vue&type=script&lang=ts\"\n\nimport \"./FormulaContent.vue?vue&type=style&index=0&id=cf0ca630&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-cf0ca630\"]])\n\nexport default __exports__","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"symbol-content\",\n innerHTML: _ctx.svg\n }, null, 8, _hoisted_1))\n}","\nimport { computed, defineComponent } from 'vue'\nimport { hfmath } from './hfmath'\n\nexport default defineComponent({\n name: 'symbol-content',\n props: {\n latex: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const svg = computed(() => {\n const eq = new hfmath(props.latex)\n return eq.svg({\n SCALE_X: 10,\n SCALE_Y: 10,\n })\n })\n\n return {\n svg,\n }\n },\n})\n","import { render } from \"./SymbolContent.vue?vue&type=template&id=3a83adf0&ts=true\"\nimport script from \"./SymbolContent.vue?vue&type=script&lang=ts\"\nexport * from \"./SymbolContent.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, ref } from 'vue'\nimport { hfmath } from './hfmath'\nimport { FORMULA_LIST, SYMBOL_LIST } from '@/configs/latex'\n\nimport FormulaContent from './FormulaContent.vue'\nimport SymbolContent from './SymbolContent.vue'\n\nconst tabs = [\n { label: '常用符号', value: 'symbol' },\n { label: '预置公式', value: 'formula' },\n]\n\nexport default defineComponent({\n name: 'latex-editor',\n emits: ['update', 'close'],\n components: {\n FormulaContent,\n SymbolContent,\n },\n props: {\n value: {\n type: String,\n default: '',\n },\n },\n setup(props, { emit }) {\n const latex = ref('')\n const toolbarState = ref('symbol')\n const textAreaRef = ref()\n\n const selectedSymbolKey = ref(SYMBOL_LIST[0].type)\n const symbolPool = computed(() => {\n const selectedSymbol = SYMBOL_LIST.find(item => item.type === selectedSymbolKey.value)\n return selectedSymbol?.children || []\n })\n\n onMounted(() => {\n if (props.value) latex.value = props.value\n })\n\n const update = () => {\n if (!latex.value) return\n\n const eq = new hfmath(latex.value)\n const pathd = eq.pathd({})\n const box = eq.box({})\n \n emit('update', {\n latex: latex.value,\n path: pathd,\n w: box.w + 32,\n h: box.h + 32,\n })\n }\n\n const close = () => emit('close')\n\n const insertSymbol = (latex: string) => {\n if (!textAreaRef.value) return\n textAreaRef.value.focus()\n document.execCommand('insertText', false, latex)\n }\n\n return {\n tabs,\n latex,\n toolbarState,\n selectedSymbolKey,\n formulaList: FORMULA_LIST,\n symbolList: SYMBOL_LIST,\n symbolPool,\n textAreaRef,\n update,\n close,\n insertSymbol,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=129e1afa&scoped=true&ts=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=129e1afa&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-129e1afa\"]])\n\nexport default __exports__","\nimport { defineComponent, computed, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSnapshotStore } 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'\nimport MediaInput from './MediaInput.vue'\nimport LaTeXEditor from '@/components/LaTeXEditor/index.vue'\n\nexport default defineComponent({\n name: 'canvas-tool',\n components: {\n ShapePool,\n LinePool,\n ChartPool,\n TableGenerator,\n MediaInput,\n LaTeXEditor,\n },\n setup() {\n const mainStore = useMainStore()\n const { canvasScale } = storeToRefs(mainStore)\n const { canUndo, canRedo } = storeToRefs(useSnapshotStore())\n\n const canvasScalePercentage = computed(() => parseInt(canvasScale.value * 100 + '') + '%')\n\n const { scaleCanvas, setCanvasPercentage } = useScaleCanvas()\n const { redo, undo } = useHistorySnapshot()\n\n const {\n createImageElement,\n createChartElement,\n createTableElement,\n createLatexElement,\n createVideoElement,\n createAudioElement,\n } = 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 const mediaInputVisible = ref(false)\n const latexEditorVisible = ref(false)\n\n // 绘制文字范围\n const drawText = () => {\n mainStore.setCreatingElement({\n type: 'text',\n })\n }\n\n // 绘制形状范围\n const drawShape = (shape: ShapePoolItem) => {\n mainStore.setCreatingElement({\n type: 'shape',\n data: shape,\n })\n shapePoolVisible.value = false\n }\n\n // 绘制线条路径\n const drawLine = (line: LinePoolItem) => {\n mainStore.setCreatingElement({\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 mediaInputVisible,\n latexEditorVisible,\n drawText,\n drawShape,\n drawLine,\n createChartElement,\n createTableElement,\n createLatexElement,\n createVideoElement,\n createAudioElement,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=4ae7c9aa&scoped=true&ts=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=4ae7c9aa&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4ae7c9aa\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, withDirectives as _withDirectives, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-ec4c62e4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"add-slide\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\"添加幻灯片\")\nconst _hoisted_3 = { class: \"select-btn\" }\nconst _hoisted_4 = [\"onMousedown\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_LayoutPool = _resolveComponent(\"LayoutPool\")!\n const _component_IconDown = _resolveComponent(\"IconDown\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_Draggable = _resolveComponent(\"Draggable\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"thumbnails\",\n onMousedown: _cache[3] || (_cache[3] = () => _ctx.setThumbnailsFocus(true))\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.createSlide()))\n }, [\n _createVNode(_component_IconPlus, { class: \"icon\" }),\n _hoisted_2\n ]),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n placement: \"bottomLeft\",\n visible: _ctx.presetLayoutPopoverVisible,\n \"onUpdate:visible\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.presetLayoutPopoverVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createVNode(_component_LayoutPool, {\n onSelect: _cache[1] || (_cache[1] = slide => { _ctx.createSlideByTemplate(slide); _ctx.presetLayoutPopoverVisible = false })\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_IconDown)\n ])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _createVNode(_component_Draggable, {\n class: \"thumbnail-list\",\n modelValue: _ctx.slides,\n animation: 300,\n scroll: true,\n scrollSensitivity: 50,\n setData: null,\n onEnd: _ctx.handleDragEnd,\n itemKey: \"id\"\n }, {\n item: _withCtx(({ element, index }) => [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"thumbnail-item\", {\n 'active': _ctx.slideIndex === index,\n 'selected': _ctx.selectedSlidesIndex.includes(index),\n }]),\n onMousedown: $event => _ctx.handleClickSlideThumbnail($event, index)\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"label\", { 'offset-left': index >= 99 }])\n }, _toDisplayString(_ctx.fillDigit(index + 1, 2)), 3),\n _createVNode(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n slide: element,\n size: 120,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"visible\"])\n ], 42, _hoisted_4)), [\n [_directive_contextmenu, _ctx.contextmenusThumbnailItem]\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onEnd\"])\n ], 32)), [\n [_directive_click_outside, () => _ctx.setThumbnailsFocus(false)],\n [_directive_contextmenu, _ctx.contextmenusThumbnails]\n ])\n}","import { ref, onMounted, onUnmounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\n\nexport default () => {\n const { slides } = storeToRefs(useSlidesStore())\n\n const timer = ref(null)\n const slidesLoadLimit = ref(50)\n\n const loadSlide = () => {\n if (slides.value.length > slidesLoadLimit.value) {\n timer.value = setTimeout(() => {\n slidesLoadLimit.value = slidesLoadLimit.value + 20\n loadSlide()\n }, 600)\n }\n else slidesLoadLimit.value = 9999\n }\n\n onMounted(loadSlide)\n\n onUnmounted(() => {\n if (timer.value) clearTimeout(timer.value)\n })\n\n return {\n slidesLoadLimit,\n }\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-741b366e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"layout-pool\" }\nconst _hoisted_2 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.layouts, (slide) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"layout-item\",\n key: slide.id,\n onClick: ($event: any) => (_ctx.selectSlideTemplate(slide))\n }, [\n _createVNode(_component_ThumbnailSlide, {\n class: \"thumbnail\",\n slide: slide,\n size: 180\n }, null, 8, [\"slide\"])\n ], 8, _hoisted_2))\n }), 128))\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'layout-pool',\n emits: ['select'],\n components: {\n ThumbnailSlide,\n },\n setup(props, { emit }) {\n const { layouts } = storeToRefs(useSlidesStore())\n\n const selectSlideTemplate = (slide: Slide) => {\n emit('select', slide)\n }\n\n return {\n layouts,\n selectSlideTemplate,\n }\n },\n})\n","import { render } from \"./LayoutPool.vue?vue&type=template&id=741b366e&scoped=true&ts=true\"\nimport script from \"./LayoutPool.vue?vue&type=script&lang=ts\"\nexport * from \"./LayoutPool.vue?vue&type=script&lang=ts\"\n\nimport \"./LayoutPool.vue?vue&type=style&index=0&id=741b366e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-741b366e\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore, useKeyboardStore } from '@/store'\nimport { fillDigit } from '@/utils/common'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport useSlideHandler from '@/hooks/useSlideHandler'\nimport useScreening from '@/hooks/useScreening'\nimport useLoadSlides from '@/hooks/useLoadSlides'\n\nimport Draggable from 'vuedraggable'\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\nimport LayoutPool from './LayoutPool.vue'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n Draggable,\n ThumbnailSlide,\n LayoutPool,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const keyboardStore = useKeyboardStore()\n const { selectedSlidesIndex: _selectedSlidesIndex, thumbnailsFocus } = storeToRefs(mainStore)\n const { slides, slideIndex } = storeToRefs(slidesStore)\n const { ctrlKeyState, shiftKeyState } = storeToRefs(keyboardStore)\n\n const { slidesLoadLimit } = useLoadSlides()\n\n const selectedSlidesIndex = computed(() => [..._selectedSlidesIndex.value, slideIndex.value])\n\n const presetLayoutPopoverVisible = ref(false)\n\n const {\n copySlide,\n pasteSlide,\n createSlide,\n createSlideByTemplate,\n copyAndPasteSlide,\n deleteSlide,\n cutSlide,\n selectAllSlide,\n } = useSlideHandler()\n\n // 切换页面\n const changSlideIndex = (index: number) => {\n mainStore.setActiveElementIdList([])\n\n if (slideIndex.value === index) return\n slidesStore.updateSlideIndex(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 mainStore.updateSelectedSlidesIndex(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 mainStore.updateSelectedSlidesIndex(newSelectedSlidesIndex)\n }\n else {\n const newSelectedSlidesIndex = [...selectedSlidesIndex.value, index]\n mainStore.updateSelectedSlidesIndex(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 mainStore.updateSelectedSlidesIndex(newSelectedSlidesIndex)\n changSlideIndex(index)\n }\n // 正常切换页面\n else {\n mainStore.updateSelectedSlidesIndex([])\n changSlideIndex(index)\n }\n }\n\n // 设置缩略图工具栏聚焦状态(只有聚焦状态下,该部分的快捷键才能生效)\n const setThumbnailsFocus = (focus: boolean) => {\n if (thumbnailsFocus.value === focus) return\n mainStore.setThumbnailsFocus(focus)\n\n if (!focus) mainStore.updateSelectedSlidesIndex([])\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 slidesStore.setSlides(_slides)\n slidesStore.updateSlideIndex(newIndex)\n }\n\n const { enterScreening } = useScreening()\n\n const contextmenusThumbnails = (): ContextmenuItem[] => {\n return [\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '开始演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n const contextmenusThumbnailItem = (): ContextmenuItem[] => {\n return [\n {\n text: '剪切',\n subText: 'Ctrl + X',\n handler: cutSlide,\n },\n {\n text: '复制',\n subText: 'Ctrl + C',\n handler: copySlide,\n },\n {\n text: '粘贴',\n subText: 'Ctrl + V',\n handler: pasteSlide,\n },\n {\n text: '全选',\n subText: 'Ctrl + A',\n handler: selectAllSlide,\n },\n { divider: true },\n {\n text: '新建页面',\n subText: 'Enter',\n handler: createSlide,\n },\n {\n text: '复制页面',\n subText: 'Ctrl + D',\n handler: copyAndPasteSlide,\n },\n {\n text: '删除页面',\n subText: 'Delete',\n handler: () => deleteSlide(),\n },\n { divider: true },\n {\n text: '从当前页演示',\n subText: 'Ctrl + F',\n handler: enterScreening,\n },\n ]\n }\n\n return {\n slides,\n slideIndex,\n selectedSlidesIndex,\n presetLayoutPopoverVisible,\n slidesLoadLimit,\n createSlide,\n createSlideByTemplate,\n setThumbnailsFocus,\n handleClickSlideThumbnail,\n contextmenusThumbnails,\n contextmenusThumbnailItem,\n fillDigit,\n handleDragEnd,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=ec4c62e4&scoped=true&ts=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=ec4c62e4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ec4c62e4\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-84601b0a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"toolbar\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.currentTabs, (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': tab.value === _ctx.toolbarState }]),\n key: tab.value,\n onClick: ($event: any) => (_ctx.setToolbarState(tab.value))\n }, _toDisplayString(tab.label), 11, _hoisted_3))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentPanelComponent)))\n ])\n ]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"element-style-panel\" }\nconst _hoisted_2 = { key: 0 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_ctx.currentPanelComponent)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \" 请先选中要编辑的元素 \"))\n : _createCommentVNode(\"\", true),\n (_ctx.handleElement)\n ? (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentPanelComponent), { key: 1 }))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f5f21464\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"text-style-panel\" }\nconst _hoisted_2 = { class: \"preset-style\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"link-popover\" }\nconst _hoisted_5 = { class: \"btns\" }\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"移除\")\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"确认\")\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"行间距:\", -1))\nconst _hoisted_10 = { class: \"row\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"字间距:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_IconAddText = _resolveComponent(\"IconAddText\")!\n const _component_InputGroup = _resolveComponent(\"InputGroup\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_IconText = _resolveComponent(\"IconText\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconBackgroundColor = _resolveComponent(\"IconBackgroundColor\")!\n const _component_IconFill = _resolveComponent(\"IconFill\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconTextBold = _resolveComponent(\"IconTextBold\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconTextItalic = _resolveComponent(\"IconTextItalic\")!\n const _component_IconTextUnderline = _resolveComponent(\"IconTextUnderline\")!\n const _component_IconStrikethrough = _resolveComponent(\"IconStrikethrough\")!\n const _component_IconFormat = _resolveComponent(\"IconFormat\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n const _component_IconUpOne = _resolveComponent(\"IconUpOne\")!\n const _component_IconDownOne = _resolveComponent(\"IconDownOne\")!\n const _component_IconCode = _resolveComponent(\"IconCode\")!\n const _component_IconQuote = _resolveComponent(\"IconQuote\")!\n const _component_Input = _resolveComponent(\"Input\")!\n const _component_IconLinkOne = _resolveComponent(\"IconLinkOne\")!\n const _component_IconAlignTextLeft = _resolveComponent(\"IconAlignTextLeft\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_IconAlignTextCenter = _resolveComponent(\"IconAlignTextCenter\")!\n const _component_IconAlignTextRight = _resolveComponent(\"IconAlignTextRight\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_IconList = _resolveComponent(\"IconList\")!\n const _component_IconOrderedList = _resolveComponent(\"IconOrderedList\")!\n const _component_IconRowHeight = _resolveComponent(\"IconRowHeight\")!\n const _component_IconFullwidth = _resolveComponent(\"IconFullwidth\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n const _component_ElementOpacity = _resolveComponent(\"ElementOpacity\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.presetStyles, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"preset-style-item\",\n key: item.label,\n style: _normalizeStyle(item.style),\n onClick: ($event: any) => (_ctx.emitBatchRichTextCommand(item.cmd))\n }, _toDisplayString(item.label), 13, _hoisted_3))\n }), 128))\n ]),\n _createVNode(_component_Divider),\n _createVNode(_component_InputGroup, {\n compact: \"\",\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.richTextAttrs.fontname,\n onChange: _cache[0] || (_cache[0] = value => _ctx.emitRichTextCommand('fontname', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFontSize)\n ]),\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Select, {\n style: {\"flex\":\"2\"},\n value: _ctx.richTextAttrs.fontsize,\n onChange: _cache[1] || (_cache[1] = value => _ctx.emitRichTextCommand('fontsize', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconAddText)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fontSizeOptions, (fontsize) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: fontsize,\n value: fontsize\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(fontsize), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.richTextAttrs.color,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = value => _ctx.emitRichTextCommand('color', value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字颜色\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconText),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.richTextAttrs.color })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.richTextAttrs.backcolor,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = value => _ctx.emitRichTextCommand('backcolor', value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字高亮\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBackgroundColor),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.richTextAttrs.backcolor })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.fill,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = value => _ctx.updateFill(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文本框填充\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFill),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.fill })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"加粗\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.bold,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.emitRichTextCommand('bold')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextBold)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"斜体\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.em,\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.emitRichTextCommand('em')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextItalic)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下划线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.underline,\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.emitRichTextCommand('underline')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextUnderline)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.strikethrough,\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.emitRichTextCommand('strikethrough')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconStrikethrough)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"清除格式\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.emitRichTextCommand('clear')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFormat)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"上标\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.superscript,\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.emitRichTextCommand('superscript')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUpOne)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下标\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.subscript,\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.emitRichTextCommand('subscript')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconDownOne)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"行内代码\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.code,\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.emitRichTextCommand('code')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconCode)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"引用\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.blockquote,\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.emitRichTextCommand('blockquote')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconQuote)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"超链接\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, {\n placement: \"bottomRight\",\n trigger: \"click\",\n visible: _ctx.linkPopoverVisible,\n \"onUpdate:visible\": _cache[18] || (_cache[18] = ($event: any) => ((_ctx.linkPopoverVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Input, {\n value: _ctx.link,\n \"onUpdate:value\": _cache[14] || (_cache[14] = ($event: any) => ((_ctx.link) = $event)),\n placeholder: \"请输入超链接\"\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_Button, {\n size: \"small\",\n disabled: !_ctx.richTextAttrs.link,\n onClick: _cache[15] || (_cache[15] = ($event: any) => (_ctx.updateLink())),\n style: {\"margin-right\":\"5px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createVNode(_component_Button, {\n size: \"small\",\n type: \"primary\",\n onClick: _cache[16] || (_cache[16] = ($event: any) => (_ctx.updateLink(_ctx.link)))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n })\n ])\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: !!_ctx.richTextAttrs.link,\n onClick: _cache[17] || (_cache[17] = ($event: any) => (_ctx.openLinkPopover()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconLinkOne)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.richTextAttrs.align,\n onChange: _cache[19] || (_cache[19] = e => _ctx.emitRichTextCommand('align', e.target.value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"left\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"center\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextCenter)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"right\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"项目符号\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.bulletList,\n onClick: _cache[20] || (_cache[20] = ($event: any) => (_ctx.emitRichTextCommand('bulletList')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconList)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"编号\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.orderedList,\n onClick: _cache[21] || (_cache[21] = ($event: any) => (_ctx.emitRichTextCommand('orderedList')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconOrderedList)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.lineHeight,\n onChange: _cache[22] || (_cache[22] = value => _ctx.updateLineHeight(value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconRowHeight)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.lineHeightOptions, (item) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: item,\n value: item\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(item) + \"倍\", 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.wordSpace,\n onChange: _cache[23] || (_cache[23] = value => _ctx.updateWordSpace(value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFullwidth)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.wordSpaceOptions, (item) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: item,\n value: item\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(item) + \"px\", 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOpacity)\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f62a02b6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-opacity\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"不透明度:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Slider = _resolveComponent(\"Slider\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 1,\n step: 0.1,\n value: _ctx.opacity,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateOpacity(value))\n }, null, 8, [\"step\", \"value\"])\n ])\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-opacity',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const opacity = ref(1)\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 if (!handleElement.value) return\n const props = { opacity: value }\n slidesStore.updateElement({ 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=f62a02b6&scoped=true&ts=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=f62a02b6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f62a02b6\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35c4c4a3\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-outline\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"row\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用边框:\", -1))\nconst _hoisted_4 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"边框样式:\", -1))\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"实线边框\")\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"虚线边框\")\nconst _hoisted_9 = { class: \"row\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"边框颜色:\", -1))\nconst _hoisted_11 = { class: \"row\" }\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"边框粗细:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_ctx.fixed)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasOutline,\n onChange: _cache[0] || (_cache[0] = checked => _ctx.toggleOutline(checked))\n }, null, 8, [\"checked\"])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.hasOutline)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.outline.style,\n onChange: _cache[1] || (_cache[1] = value => _ctx.updateOutline({ style: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"solid\" }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dashed\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.outline.color,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = value => _ctx.updateOutline({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.outline.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createVNode(_component_InputNumber, {\n value: _ctx.outline.width,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateOutline({ width: value })),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlatte = _resolveComponent(\"IconPlatte\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createBlock(_component_Button, { class: \"color-btn\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.color })\n }, null, 4),\n _createVNode(_component_IconPlatte, { class: \"color-btn-icon\" })\n ]),\n _: 1\n }))\n}","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\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=dffe32bc&scoped=true&ts=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=dffe32bc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-dffe32bc\"]])\n\nexport default __exports__","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { 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 slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\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 if (!handleElement.value) return\n const props = { outline: { ...outline.value, ...outlineProps } }\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const toggleOutline = (checked: boolean) => {\n if (!handleElement.value) return\n if (checked) {\n const _outline: PPTElementOutline = { width: 2, color: '#000', style: 'solid' }\n slidesStore.updateElement({ id: handleElement.value.id, props: { outline: _outline } })\n }\n else {\n slidesStore.removeElementProps({ 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=35c4c4a3&scoped=true&ts=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=35c4c4a3&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-35c4c4a3\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-73616cd6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-shadow\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用阴影:\", -1))\nconst _hoisted_4 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"水平阴影:\", -1))\nconst _hoisted_7 = { class: \"row\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"垂直阴影:\", -1))\nconst _hoisted_9 = { class: \"row\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"模糊距离:\", -1))\nconst _hoisted_11 = { class: \"row\" }\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"阴影颜色:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasShadow,\n onChange: _cache[0] || (_cache[0] = checked => _ctx.toggleShadow(checked))\n }, null, 8, [\"checked\"])\n ])\n ]),\n (_ctx.hasShadow && _ctx.shadow)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 10,\n step: 1,\n value: _ctx.shadow.h,\n onChange: _cache[1] || (_cache[1] = value => _ctx.updateShadow({ h: value }))\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 10,\n step: 1,\n value: _ctx.shadow.v,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateShadow({ v: value }))\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 1,\n max: 20,\n step: 1,\n value: _ctx.shadow.blur,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateShadow({ blur: value }))\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.shadow.color,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = value => _ctx.updateShadow({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.shadow.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { 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 slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\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 if (!handleElement.value || !shadow.value) return\n const _shadow = { ...shadow.value, ...shadowProps }\n slidesStore.updateElement({ id: handleElement.value.id, props: { shadow: _shadow } })\n addHistorySnapshot()\n }\n\n const toggleShadow = (checked: boolean) => {\n if (!handleElement.value) return\n if (checked) {\n const _shadow: PPTElementShadow = { h: 1, v: 1, blur: 2, color: '#000' }\n slidesStore.updateElement({ id: handleElement.value.id, props: { shadow: _shadow } })\n }\n else {\n slidesStore.removeElementProps({ 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=73616cd6&scoped=true&ts=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=73616cd6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-73616cd6\"]])\n\nexport default __exports__","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTextElement } from '@/types/slides'\nimport emitter, { EmitterEvents, RichTextCommand } from '@/utils/emitter'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\nimport { message } from 'ant-design-vue'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\n\nconst presetStyles = [\n {\n label: '大标题',\n style: {\n fontSize: '26px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '48px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '小标题',\n style: {\n fontSize: '22px',\n fontWeight: 700,\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '36px' },\n { command: 'align', value: 'center' },\n { command: 'bold' },\n ],\n },\n {\n label: '正文',\n style: {\n fontSize: '20px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '20px' },\n ],\n },\n {\n label: '正文[小]',\n style: {\n fontSize: '18px',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '18px' },\n ],\n },\n {\n label: '注释 1',\n style: {\n fontSize: '16px',\n fontStyle: 'italic',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'em' },\n ],\n },\n {\n label: '注释 2',\n style: {\n fontSize: '16px',\n textDecoration: 'underline',\n },\n cmd: [\n { command: 'clear' },\n { command: 'fontsize', value: '16px' },\n { command: 'underline' },\n ],\n },\n]\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'text-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId, richTextAttrs, availableFonts } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\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 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 updateLineHeight = (value: number) => {\n updateElement({ lineHeight: value })\n }\n\n // 设置字间距\n const updateWordSpace = (value: number) => {\n updateElement({ wordSpace: value })\n }\n\n // 设置文本框填充\n const updateFill = (value: string) => {\n updateElement({ fill: value })\n }\n\n // 发射富文本设置命令\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n // 发射富文本设置命令(批量)\n const emitBatchRichTextCommand = (payload: RichTextCommand[]) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, payload)\n }\n\n // 设置富文本超链接\n const link = ref('')\n const linkPopoverVisible = ref(false)\n\n watch(richTextAttrs, () => linkPopoverVisible.value = false)\n\n const openLinkPopover = () => {\n link.value = richTextAttrs.value.link\n linkPopoverVisible.value = true\n }\n const updateLink = (link: string) => {\n if (link) {\n const linkRegExp = /^(https?):\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+([\\w\\-.,@?^=%&:\\/~+#]*[\\w\\-@?^=%&\\/~+#])?$/\n if (!linkRegExp.test(link)) return message.error('不是正确的网页链接地址')\n }\n emitRichTextCommand('link', link)\n linkPopoverVisible.value = false\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 link,\n linkPopoverVisible,\n openLinkPopover,\n updateLink,\n }\n },\n})\n","import { render } from \"./TextStylePanel.vue?vue&type=template&id=f5f21464&scoped=true&ts=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=f5f21464&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f5f21464\"]])\n\nexport default __exports__","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64e5a614\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"image-style-panel\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\" 裁剪图片\")\nconst _hoisted_3 = { class: \"clip\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"按形状:\", -1))\nconst _hoisted_5 = { class: \"shape-clip\" }\nconst _hoisted_6 = [\"onClick\"]\nconst _hoisted_7 = {\n key: 0,\n class: \"title\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\" 替换图片\")\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\" 重置样式\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\" 设为背景\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ElementFlip = _resolveComponent(\"ElementFlip\")!\n const _component_IconTailoring = _resolveComponent(\"IconTailoring\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconDown = _resolveComponent(\"IconDown\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ElementFilter = _resolveComponent(\"ElementFilter\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n const _component_IconTransform = _resolveComponent(\"IconTransform\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_IconUndo = _resolveComponent(\"IconUndo\")!\n const _component_IconTheme = _resolveComponent(\"IconTheme\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"origin-image\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.handleElement.src})` })\n }, null, 4),\n _createVNode(_component_ElementFlip),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"5\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.clipImage()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTailoring, { class: \"btn-icon\" }),\n _hoisted_2\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.clipPanelVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.clipPanelVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.shapeClipPathOptions, (item, key) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"shape-clip-item\",\n key: key,\n onClick: ($event: any) => (_ctx.presetImageClip(key))\n }, [\n _createElementVNode(\"div\", {\n class: \"shape\",\n style: _normalizeStyle({ clipPath: item.style })\n }, null, 4)\n ], 8, _hoisted_6))\n }), 128))\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.ratioClipOptions, (type) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: type.label\n }, [\n (type.label)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"按\" + _toDisplayString(type.label) + \":\", 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(type.children, (item) => {\n return (_openBlock(), _createBlock(_component_Button, {\n style: {\"flex\":\"1\"},\n key: item.key,\n onClick: ($event: any) => (_ctx.presetImageClip('rect', item.ratio))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(item.key), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n }), 128))\n ]),\n _: 2\n }, 1024)\n ], 64))\n }), 128))\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"no-padding\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconDown)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementFilter),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow),\n _createVNode(_component_Divider),\n _createVNode(_component_FileInput, {\n onChange: _cache[2] || (_cache[2] = files => _ctx.replaceImage(files))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, { class: \"full-width-btn\" }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTransform, { class: \"btn-icon\" }),\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"full-width-btn\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.resetImage()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUndo, { class: \"btn-icon\" }),\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n class: \"full-width-btn\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.setBackgroundImage()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTheme, { class: \"btn-icon\" }),\n _hoisted_10\n ]),\n _: 1\n })\n ]))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7bd50f1a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-flip\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\" 垂直翻转\")\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\" 水平翻转\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconFlipVertically = _resolveComponent(\"IconFlipVertically\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconFlipHorizontally = _resolveComponent(\"IconFlipHorizontally\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.flipV,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.updateFlip({ flipV: !_ctx.flipV })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFlipVertically),\n _hoisted_2\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.flipH,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.updateFlip({ flipH: !_ctx.flipH })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFlipHorizontally),\n _hoisted_3\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n })\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { ImageOrShapeFlip } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'element-flip',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const flipH = ref(false)\n const flipV = ref(false)\n\n watch(handleElement, () => {\n if (handleElement.value && (handleElement.value.type === 'image' || handleElement.value.type === 'shape')) {\n flipH.value = !!handleElement.value.flipH\n flipV.value = !!handleElement.value.flipV\n }\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateFlip = (flipProps: ImageOrShapeFlip) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ 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=7bd50f1a&scoped=true&ts=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=7bd50f1a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7bd50f1a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95955a74\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-filter\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用滤镜:\", -1))\nconst _hoisted_4 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = {\n key: 0,\n class: \"filter\"\n}\nconst _hoisted_6 = { class: \"name\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasFilters,\n onChange: _cache[0] || (_cache[0] = checked => _ctx.toggleFilters(checked))\n }, null, 8, [\"checked\"])\n ])\n ]),\n (_ctx.hasFilters)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.filterOptions, (filter) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"filter-item\",\n key: filter.key\n }, [\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(filter.label), 1),\n _createVNode(_component_Slider, {\n class: \"filter-slider\",\n max: filter.max,\n min: 0,\n step: filter.step,\n value: filter.value,\n onChange: value => _ctx.updateFilter(filter, value)\n }, null, 8, [\"max\", \"step\", \"value\", \"onChange\"])\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTImageElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\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\nexport default defineComponent({\n name: 'element-filter',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(useMainStore())\n\n const filterOptions = ref(JSON.parse(JSON.stringify(defaultFilters)))\n const hasFilters = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\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 hasFilters.value = true\n }\n else {\n filterOptions.value = JSON.parse(JSON.stringify(defaultFilters))\n hasFilters.value = false\n }\n }, { deep: true, immediate: true })\n\n // 设置滤镜\n const updateFilter = (filter: FilterOption, value: number) => {\n const _handleElement = handleElement.value as PPTImageElement\n \n const originFilters = _handleElement.filters || {}\n const filters = { ...originFilters, [filter.key]: `${value}${filter.unit}` }\n slidesStore.updateElement({ id: handleElementId.value, props: { filters } })\n addHistorySnapshot()\n }\n\n const toggleFilters = (checked: boolean) => {\n if (!handleElement.value) return\n if (checked) {\n slidesStore.updateElement({ id: handleElement.value.id, props: { filters: {} } })\n }\n else {\n slidesStore.removeElementProps({ id: handleElement.value.id, propName: 'filters' })\n }\n addHistorySnapshot()\n }\n\n return {\n filterOptions,\n hasFilters,\n toggleFilters,\n updateFilter,\n }\n },\n})\n","import { render } from \"./ElementFilter.vue?vue&type=template&id=95955a74&scoped=true&ts=true\"\nimport script from \"./ElementFilter.vue?vue&type=script&lang=ts\"\nexport * from \"./ElementFilter.vue?vue&type=script&lang=ts\"\n\nimport \"./ElementFilter.vue?vue&type=style&index=0&id=95955a74&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-95955a74\"]])\n\nexport default __exports__","\nimport { defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTImageElement, SlideBackground } 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'\nimport ElementFilter from '../common/ElementFilter.vue'\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 ElementFilter,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(mainStore)\n const { currentSlide } = storeToRefs(slidesStore)\n\n const clipPanelVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 打开自由裁剪\n const clipImage = () => {\n mainStore.setClipingImageElementId(handleElementId.value)\n clipPanelVisible.value = false\n }\n\n // 获取原始图片的位置大小\n const getImageElementDataBeforeClip = () => {\n const _handleElement = handleElement.value as PPTImageElement\n\n // 图片当前的位置大小和裁剪范围\n const imgWidth = _handleElement.width\n const imgHeight = _handleElement.height\n const imgLeft = _handleElement.left\n const imgTop = _handleElement.top\n const originClipRange: [[number, number], [number, number]] = _handleElement.clip ? _handleElement.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 _handleElement = handleElement.value as PPTImageElement\n\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: [[number, number], [number, number]]\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 slidesStore.updateElement({\n id: handleElementId.value,\n props: {\n clip: { ..._handleElement.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 slidesStore.updateElement({\n id: handleElementId.value,\n props: {\n clip: { ..._handleElement.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 slidesStore.updateElement({ id: handleElementId.value, props })\n })\n addHistorySnapshot()\n }\n\n // 重置图片:清除全部样式\n const resetImage = () => {\n const _handleElement = handleElement.value as PPTImageElement\n\n if (_handleElement.clip) {\n const {\n originWidth,\n originHeight,\n originLeft,\n originTop,\n } = getImageElementDataBeforeClip()\n\n slidesStore.updateElement({\n id: handleElementId.value,\n props: {\n left: originLeft,\n top: originTop,\n width: originWidth,\n height: originHeight,\n },\n })\n }\n\n slidesStore.removeElementProps({\n id: handleElementId.value,\n propName: ['clip', 'outline', 'flip', 'shadow', 'filters'],\n })\n addHistorySnapshot()\n }\n\n // 将图片设置为背景\n const setBackgroundImage = () => {\n const _handleElement = handleElement.value as PPTImageElement\n\n const background: SlideBackground = {\n ...currentSlide.value.background,\n type: 'image',\n image: _handleElement.src,\n imageSize: 'cover',\n }\n slidesStore.updateSlide({ background })\n addHistorySnapshot()\n }\n\n return {\n clipPanelVisible,\n shapeClipPathOptions,\n ratioClipOptions,\n handleElement,\n clipImage,\n presetImageClip,\n replaceImage,\n resetImage,\n setBackgroundImage,\n }\n },\n})\n","import { render } from \"./ImageStylePanel.vue?vue&type=template&id=64e5a614&scoped=true&ts=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=64e5a614&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-64e5a614\"]])\n\nexport default __exports__","import { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, Fragment as _Fragment, renderList as _renderList, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0e201fca\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"shape-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\"纯色填充\")\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"渐变填充\")\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"线性渐变\")\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"径向渐变\")\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"起点颜色:\", -1))\nconst _hoisted_10 = { class: \"row\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"终点颜色:\", -1))\nconst _hoisted_12 = {\n key: 0,\n class: \"row\"\n}\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"渐变角度:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_ElementFlip = _resolveComponent(\"ElementFlip\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_IconAddText = _resolveComponent(\"IconAddText\")!\n const _component_InputGroup = _resolveComponent(\"InputGroup\")!\n const _component_IconText = _resolveComponent(\"IconText\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconTextBold = _resolveComponent(\"IconTextBold\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconTextItalic = _resolveComponent(\"IconTextItalic\")!\n const _component_IconTextUnderline = _resolveComponent(\"IconTextUnderline\")!\n const _component_IconFormat = _resolveComponent(\"IconFormat\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n const _component_IconAlignTextLeft = _resolveComponent(\"IconAlignTextLeft\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_IconAlignTextCenter = _resolveComponent(\"IconAlignTextCenter\")!\n const _component_IconAlignTextRight = _resolveComponent(\"IconAlignTextRight\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_IconAlignTextTopOne = _resolveComponent(\"IconAlignTextTopOne\")!\n const _component_IconAlignTextMiddleOne = _resolveComponent(\"IconAlignTextMiddleOne\")!\n const _component_IconAlignTextBottomOne = _resolveComponent(\"IconAlignTextBottomOne\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n const _component_ElementOpacity = _resolveComponent(\"ElementOpacity\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Select, {\n style: {\"flex\":\"10\"},\n value: _ctx.fillType,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateFillType(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"fill\" }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"gradient\" }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _hoisted_5,\n (_ctx.fillType === 'fill')\n ? (_openBlock(), _createBlock(_component_Popover, {\n key: 0,\n trigger: \"click\"\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.fill,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = value => _ctx.updateFill(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.fill,\n style: {\"flex\":\"10\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(_component_Select, {\n key: 1,\n style: {\"flex\":\"10\"},\n value: _ctx.gradient.type,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateGradient({ type: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"linear\" }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"radial\" }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]))\n ]),\n (_ctx.fillType === 'gradient')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.gradient.color[0],\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = value => _ctx.updateGradient({ color: [value, _ctx.gradient.color[1]] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.gradient.color[0],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.gradient.color[1],\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = value => _ctx.updateGradient({ color: [_ctx.gradient.color[0], value] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.gradient.color[1],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n (_ctx.gradient.type === 'linear')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _hoisted_13,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 360,\n step: 15,\n value: _ctx.gradient.rotate,\n onChange: _cache[5] || (_cache[5] = value => _ctx.updateGradient({ rotate: value }))\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ElementFlip),\n _createVNode(_component_Divider),\n (_ctx.showTextTools)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_InputGroup, {\n compact: \"\",\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.richTextAttrs.fontname,\n onChange: _cache[6] || (_cache[6] = value => _ctx.emitRichTextCommand('fontname', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFontSize)\n ]),\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Select, {\n style: {\"flex\":\"2\"},\n value: _ctx.richTextAttrs.fontsize,\n onChange: _cache[7] || (_cache[7] = value => _ctx.emitRichTextCommand('fontsize', value))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconAddText)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fontSizeOptions, (fontsize) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: fontsize,\n value: fontsize\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(fontsize), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.richTextAttrs.color,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = value => _ctx.emitRichTextCommand('color', value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字颜色\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconText),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.richTextAttrs.color })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"加粗\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.bold,\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.emitRichTextCommand('bold')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextBold)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"斜体\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.em,\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.emitRichTextCommand('em')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextItalic)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下划线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.richTextAttrs.underline,\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.emitRichTextCommand('underline')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextUnderline)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"清除格式\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.emitRichTextCommand('clear')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFormat)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.richTextAttrs.align,\n onChange: _cache[13] || (_cache[13] = e => _ctx.emitRichTextCommand('align', e.target.value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"left\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"center\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextCenter)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"right\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.textAlign,\n onChange: _cache[14] || (_cache[14] = e => _ctx.updateTextAlign(e.target.value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"顶对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"top\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextTopOne)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"middle\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextMiddleOne)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"底对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"bottom\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextBottomOne)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Divider)\n ], 64))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOpacity)\n ]))\n}","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTShapeElement, ShapeGradient, ShapeText } from '@/types/slides'\nimport { WEB_FONTS } from '@/configs/font'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOpacity from '../common/ElementOpacity.vue'\nimport ElementOutline from '../common/ElementOutline.vue'\nimport ElementShadow from '../common/ElementShadow.vue'\nimport ElementFlip from '../common/ElementFlip.vue'\nimport ColorButton from '../common/ColorButton.vue'\n\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'shape-style-panel',\n components: {\n ElementOpacity,\n ElementOutline,\n ElementShadow,\n ElementFlip,\n ColorButton,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId, editingShapeElementId, richTextAttrs, availableFonts } = storeToRefs(mainStore)\n\n const showTextTools = computed(() => editingShapeElementId.value === handleElementId.value)\n\n const fill = ref()\n const gradient = ref()\n const fillType = ref('fill')\n const textAlign = ref('middle')\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'shape') return\n\n fill.value = handleElement.value.fill || '#000'\n gradient.value = handleElement.value.gradient || { type: 'linear', rotate: 0, color: [fill.value, '#fff'] }\n fillType.value = handleElement.value.gradient ? 'gradient' : 'fill'\n textAlign.value = handleElement.value?.text?.align || 'middle'\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置填充类型:渐变、纯色\n const updateFillType = (type: 'gradient' | 'fill') => {\n if (type === 'fill') {\n slidesStore.removeElementProps({ id: handleElementId.value, propName: 'gradient' })\n addHistorySnapshot()\n }\n else updateElement({ gradient: gradient.value })\n }\n\n // 设置渐变填充\n const updateGradient = (gradientProps: Partial) => {\n if (!gradient.value) return\n const _gradient: ShapeGradient = { ...gradient.value, ...gradientProps }\n updateElement({ gradient: _gradient })\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n updateElement({ fill: value })\n }\n\n const updateTextAlign = (align: 'top' | 'middle' | 'bottom') => {\n const _handleElement = handleElement.value as PPTShapeElement\n \n const defaultText: ShapeText = {\n content: '',\n defaultFontName: '微软雅黑',\n defaultColor: '#000',\n align: 'middle',\n }\n const _text = _handleElement.text || defaultText\n updateElement({ text: { ..._text, align } })\n }\n\n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n '36px', '40px', '44px', '48px', '54px', '60px', '66px', '72px', '76px',\n '80px', '88px', '96px', '104px', '112px', '120px',\n ]\n\n const emitRichTextCommand = (command: string, value?: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command, value })\n }\n\n return {\n fill,\n gradient,\n fillType,\n textAlign,\n richTextAttrs,\n availableFonts,\n fontSizeOptions,\n webFonts,\n showTextTools,\n emitRichTextCommand,\n updateFillType,\n updateFill,\n updateGradient,\n updateTextAlign,\n }\n },\n})\n","import { render } from \"./ShapeStylePanel.vue?vue&type=template&id=0e201fca&scoped=true&ts=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=0e201fca&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0e201fca\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-cbc4d7fa\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"line-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"线条样式:\", -1))\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"实线\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"虚线\")\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"线条颜色:\", -1))\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"线条宽度:\", -1))\nconst _hoisted_10 = { class: \"row\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"起点样式:\", -1))\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"无\")\nconst _hoisted_13 = /*#__PURE__*/_createTextVNode(\"箭头\")\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\"圆点\")\nconst _hoisted_15 = { class: \"row\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"终点样式:\", -1))\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"无\")\nconst _hoisted_18 = /*#__PURE__*/_createTextVNode(\"箭头\")\nconst _hoisted_19 = /*#__PURE__*/_createTextVNode(\"圆点\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ElementShadow = _resolveComponent(\"ElementShadow\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.handleElement.style,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateLine({ style: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"solid\" }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dashed\" }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.handleElement.color,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = value => _ctx.updateLine({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.handleElement.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_InputNumber, {\n value: _ctx.handleElement.width,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateLine({ width: value })),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.handleElement.points[0],\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateLine({ points: [value, _ctx.handleElement.points[1]] }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"\" }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"arrow\" }, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dot\" }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _hoisted_16,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.handleElement.points[1],\n onChange: _cache[4] || (_cache[4] = value => _ctx.updateLine({ points: [_ctx.handleElement.points[0], value] }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"\" }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"arrow\" }, {\n default: _withCtx(() => [\n _hoisted_18\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"dot\" }, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementShadow)\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } 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 slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateLine = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ 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=cbc4d7fa&scoped=true&ts=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=cbc4d7fa&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-cbc4d7fa\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, toDisplayString as _toDisplayString, withModifiers as _withModifiers, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a3169a0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-style-panel\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\" 编辑图表数据 \")\nconst _hoisted_3 = { class: \"row\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"面积图样式\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"散点图样式\")\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"使用平滑曲线\")\nconst _hoisted_8 = {\n key: 1,\n class: \"row\"\n}\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"条形图样式\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\"堆叠样式\")\nconst _hoisted_11 = {\n key: 2,\n class: \"row\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"环形图样式\")\nconst _hoisted_13 = { class: \"row\" }\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"图例:\", -1))\nconst _hoisted_15 = /*#__PURE__*/_createTextVNode(\"不显示\")\nconst _hoisted_16 = /*#__PURE__*/_createTextVNode(\"显示在上方\")\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"显示在下方\")\nconst _hoisted_18 = { class: \"row\" }\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"背景填充:\", -1))\nconst _hoisted_20 = { class: \"row\" }\nconst _hoisted_21 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"网格颜色:\", -1))\nconst _hoisted_22 = { style: {\"flex\":\"2\"} }\nconst _hoisted_23 = {\n class: \"color-btn-wrap\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_24 = [\"onClick\"]\nconst _hoisted_25 = { class: \"preset-themes\" }\nconst _hoisted_26 = [\"onClick\", \"onMouseenter\"]\nconst _hoisted_27 = /*#__PURE__*/_createTextVNode(\"推荐主题\")\nconst _hoisted_28 = /*#__PURE__*/_createTextVNode(\" 添加主题色 \")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconEdit = _resolveComponent(\"IconEdit\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_Checkbox = _resolveComponent(\"Checkbox\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconCloseSmall = _resolveComponent(\"IconCloseSmall\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_ChartDataEditor = _resolveComponent(\"ChartDataEditor\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Button, {\n class: \"full-width-btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.chartDataEditorVisible = true))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconEdit, { class: \"btn-icon\" }),\n _hoisted_2\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n (_ctx.handleElement.chartType === 'line')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[1] || (_cache[1] = e => _ctx.updateOptions({ showArea: e.target.checked })),\n checked: _ctx.showArea,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[2] || (_cache[2] = e => _ctx.updateOptions({ showLine: !e.target.checked })),\n checked: !_ctx.showLine,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[3] || (_cache[3] = e => _ctx.updateOptions({ lineSmooth: e.target.checked })),\n checked: _ctx.lineSmooth\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"checked\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true),\n (_ctx.handleElement.chartType === 'bar')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[4] || (_cache[4] = e => _ctx.updateOptions({ horizontalBars: e.target.checked })),\n checked: _ctx.horizontalBars\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[5] || (_cache[5] = e => _ctx.updateOptions({ stackBars: e.target.checked })),\n checked: _ctx.stackBars\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.handleElement.chartType === 'pie')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[6] || (_cache[6] = e => _ctx.updateOptions({ donut: e.target.checked })),\n checked: _ctx.donut\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_13, [\n _hoisted_14,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.legend,\n onChange: _cache[7] || (_cache[7] = value => _ctx.updateLegend(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"\" }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"top\" }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"bottom\" }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_18, [\n _hoisted_19,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.fill,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = value => _ctx.updateFill(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.fill,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_20, [\n _hoisted_21,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.gridColor,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = value => _ctx.updateGridColor(value))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.gridColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_Divider),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.themeColor, (color, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"row\",\n key: index\n }, [\n _createElementVNode(\"div\", _hoisted_22, _toDisplayString(index === 0 ? '主题配色:' : ''), 1),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: color,\n \"onUpdate:modelValue\": value => _ctx.updateTheme(value, index)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\"])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_23, [\n _createVNode(_component_ColorButton, {\n color: color,\n style: {\"width\":\"100%\"}\n }, null, 8, [\"color\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除\"\n }, {\n default: _withCtx(() => [\n (index !== 0)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"delete-color-btn\",\n onClick: _withModifiers(($event: any) => (_ctx.deleteThemeColor(index)), [\"stop\"])\n }, [\n _createVNode(_component_IconCloseSmall)\n ], 8, _hoisted_24))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1032, [\"mouseEnterDelay\"])\n ])\n ]),\n _: 2\n }, 1024)\n ]))\n }), 128)),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, {\n trigger: \"click\",\n visible: _ctx.presetThemesVisible,\n \"onUpdate:visible\": _cache[11] || (_cache[11] = ($event: any) => ((_ctx.presetThemesVisible) = $event))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_25, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.presetChartThemes, (item, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"preset-theme\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item, (color, itemIndex) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"preset-theme-color\", { 'select': _ctx.presetThemeColorHoverIndex[0] === index && itemIndex <= _ctx.presetThemeColorHoverIndex[1] }]),\n key: color,\n style: _normalizeStyle({ backgroundColor: color }),\n onClick: ($event: any) => (_ctx.applyPresetTheme(item, itemIndex)),\n onMouseenter: ($event: any) => (_ctx.presetThemeColorHoverIndex = [index, itemIndex]),\n onMouseleave: _cache[10] || (_cache[10] = ($event: any) => (_ctx.presetThemeColorHoverIndex = [-1, -1]))\n }, null, 46, _hoisted_26))\n }), 128))\n ]))\n }), 128))\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"no-padding\",\n style: {\"flex\":\"2\"}\n }, {\n default: _withCtx(() => [\n _hoisted_27\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"visible\"]),\n _createVNode(_component_Button, {\n class: \"no-padding\",\n disabled: _ctx.themeColor.length >= 10,\n style: {\"flex\":\"3\"},\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.addThemeColor()))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlus, { class: \"btn-icon\" }),\n _hoisted_28\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline),\n _createVNode(_component_Modal, {\n visible: _ctx.chartDataEditorVisible,\n \"onUpdate:visible\": _cache[15] || (_cache[15] = ($event: any) => ((_ctx.chartDataEditorVisible) = $event)),\n footer: null,\n centered: \"\",\n closable: false,\n width: 648,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_ChartDataEditor, {\n data: _ctx.handleElement.data,\n onClose: _cache[13] || (_cache[13] = ($event: any) => (_ctx.chartDataEditorVisible = false)),\n onSave: _cache[14] || (_cache[14] = value => _ctx.updateData(value))\n }, null, 8, [\"data\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, withModifiers as _withModifiers, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9a62f784\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-data-editor\" }\nconst _hoisted_2 = { class: \"editor-content\" }\nconst _hoisted_3 = { class: \"range-box\" }\nconst _hoisted_4 = [\"id\", \"onFocus\", \"onPaste\"]\nconst _hoisted_5 = { class: \"btns\" }\nconst _hoisted_6 = { class: \"left\" }\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"清空\")\nconst _hoisted_8 = { class: \"right\" }\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"取消\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\"确认\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"temp-range\",\n style: _normalizeStyle({\n width: _ctx.tempRangeSize.width + 'px',\n height: _ctx.tempRangeSize.height + 'px',\n })\n }, null, 4),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.rangeLines, (line) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass(['range-line', line.type]),\n key: line.type,\n style: _normalizeStyle(line.style)\n }, null, 6))\n }), 128)),\n _createElementVNode(\"div\", {\n class: \"resizable\",\n style: _normalizeStyle(_ctx.resizablePointStyle),\n onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.changeSelectRange($event)), [\"stop\"]))\n }, null, 36)\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"tbody\", null, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(31, (rowIndex) => {\n return _createElementVNode(\"tr\", { key: rowIndex }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(7, (colIndex) => {\n return _createElementVNode(\"td\", {\n key: colIndex,\n class: _normalizeClass({ 'head': (colIndex === 1 && rowIndex <= _ctx.selectedRange[1]) || (rowIndex === 1 && colIndex <= _ctx.selectedRange[0]) })\n }, [\n _createElementVNode(\"input\", {\n class: _normalizeClass(['item', { 'selected': rowIndex <= _ctx.selectedRange[1] && colIndex <= _ctx.selectedRange[0] }]),\n id: `cell-${rowIndex - 1}-${colIndex - 1}`,\n autocomplete: \"off\",\n onFocus: ($event: any) => (_ctx.focusCell = [rowIndex - 1, colIndex - 1]),\n onPaste: $event => _ctx.handlePaste($event, rowIndex - 1, colIndex - 1)\n }, null, 42, _hoisted_4)\n ], 2)\n }), 64))\n ])\n }), 64))\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.clear()))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Button, {\n class: \"btn\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.closeEditor()))\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n type: \"primary\",\n class: \"btn\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.getTableData())),\n style: {\"margin-left\":\"10px\"}\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n })\n ])\n ])\n ]))\n}","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref } from 'vue'\nimport { ChartData } from '@/types/slides'\nimport { KEYS } from '@/configs/hotkey'\nimport { pasteCustomClipboardString, pasteExcelClipboardString } from '@/utils/clipboard'\n\nconst CELL_WIDTH = 100\nconst CELL_HEIGHT = 32\n\nexport default defineComponent({\n name: 'chart-data-editor',\n emits: ['save', 'close'],\n props: {\n data: {\n type: Object as PropType,\n required: true,\n }\n },\n setup(props, { emit }) {\n const selectedRange = ref([0, 0])\n const tempRangeSize = ref({ width: 0, height: 0 })\n const focusCell = ref<[number, number] | null>(null)\n\n // 当前选区的边框线条位置\n const rangeLines = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return [\n { type: 't', style: {width: width + 'px'} },\n { type: 'b', style: {top: height + 'px', width: width + 'px'} },\n { type: 'l', style: {height: height + 'px'} },\n { type: 'r', style: {left: width + 'px', height: height + 'px'} },\n ]\n })\n\n // 当前选区的缩放点位置\n const resizablePointStyle = computed(() => {\n const width = selectedRange.value[0] * CELL_WIDTH\n const height = selectedRange.value[1] * CELL_HEIGHT\n return { left: width + 'px', top: height + 'px' }\n })\n\n // 初始化图表数据:将数据格式化并填充到DOM\n const initData = () => {\n const _data: string[][] = []\n\n const { labels, legends, series } = props.data\n const rowCount = labels.length\n const colCount = series.length\n\n _data.push(['', ...legends])\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n const row = [labels[rowIndex]]\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\n row.push(series[colIndex][rowIndex] + '')\n }\n _data.push(row)\n }\n\n for (let rowIndex = 0; rowIndex < rowCount + 1; rowIndex++) {\n for (let colIndex = 0; colIndex < colCount + 1; colIndex++) {\n const inputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = _data[rowIndex][colIndex] + ''\n }\n }\n\n selectedRange.value = [colCount + 1, rowCount + 1]\n }\n\n onMounted(initData)\n\n // 快捷键监听:回车移动焦点到下一行\n const moveNextRow = () => {\n if (!focusCell.value) return\n\n const [rowIndex, colIndex] = focusCell.value\n const inputRef = document.querySelector(`#cell-${rowIndex + 1}-${colIndex}`) as HTMLInputElement\n inputRef && inputRef.focus()\n }\n\n const keyboardListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ENTER) moveNextRow()\n }\n\n onMounted(() => {\n document.addEventListener('keydown', keyboardListener)\n })\n onUnmounted(() => {\n document.removeEventListener('keydown', keyboardListener)\n })\n\n // 获取当前图表DOM中的数据,整理格式化后传递出去\n const getTableData = () => {\n const [col, row] = selectedRange.value\n\n const labels: string[] = []\n const legends: string[] = []\n const series: number[][] = []\n\n // 第一行为系列名,第一列为项目名,实际数据从第二行第二列开始\n for (let rowIndex = 1; rowIndex < row; rowIndex++) {\n let labelsItem = `类别${rowIndex}`\n const labelInputRef = document.querySelector(`#cell-${rowIndex}-0`) as HTMLInputElement\n if (labelInputRef && labelInputRef.value) labelsItem = labelInputRef.value\n labels.push(labelsItem)\n }\n for (let colIndex = 1; colIndex < col; colIndex++) {\n let legendsItem = `系列${colIndex}`\n const labelInputRef = document.querySelector(`#cell-0-${colIndex}`) as HTMLInputElement\n if (labelInputRef && labelInputRef.value) legendsItem = labelInputRef.value\n legends.push(legendsItem)\n }\n\n for (let colIndex = 1; colIndex < col; colIndex++) {\n const seriesItem = []\n for (let rowIndex = 1; rowIndex < row; rowIndex++) {\n const valueInputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n let value = 0\n if (valueInputRef && valueInputRef.value && !!(+valueInputRef.value)) {\n value = +valueInputRef.value\n }\n seriesItem.push(value)\n }\n series.push(seriesItem)\n }\n\n emit('save', { labels, legends, series })\n }\n\n // 清空表格数据\n const clear = () => {\n for (let rowIndex = 1; rowIndex < 31; rowIndex++) {\n for (let colIndex = 1; colIndex < 7; colIndex++) {\n const inputRef = document.querySelector(`#cell-${rowIndex}-${colIndex}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = ''\n }\n }\n }\n\n // 自定义粘贴事件(尝试读取剪贴板中的表格数据)\n const handlePaste = (e: ClipboardEvent, rowIndex: number, colIndex: number) => {\n e.preventDefault()\n\n if (!e.clipboardData) return\n\n const clipboardDataFirstItem = e.clipboardData.items[0]\n\n if (clipboardDataFirstItem && clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') {\n clipboardDataFirstItem.getAsString(text => {\n const clipboardData = pasteCustomClipboardString(text)\n if (typeof clipboardData === 'object') return\n \n const excelData = pasteExcelClipboardString(text)\n if (excelData) {\n const maxRow = rowIndex + excelData.length\n const maxCol = colIndex + excelData[0].length\n for (let i = rowIndex; i < maxRow; i++) {\n for (let j = colIndex; j < maxCol; j++) {\n const inputRef = document.querySelector(`#cell-${i}-${j}`) as HTMLInputElement\n if (!inputRef) continue\n inputRef.value = excelData[i - rowIndex][j - colIndex]\n }\n }\n }\n })\n }\n }\n\n // 关闭图表数据编辑器\n const closeEditor = () => emit('close')\n\n // 鼠标拖拽修改选中的数据范围\n const changeSelectRange = (e: MouseEvent) => {\n let isMouseDown = true\n\n const startPageX = e.pageX\n const startPageY = e.pageY\n\n const originWidth = selectedRange.value[0] * CELL_WIDTH\n const originHeight = selectedRange.value[1] * CELL_HEIGHT\n\n document.onmousemove = e => {\n if (!isMouseDown) return\n\n const currentPageX = e.pageX\n const currentPageY = e.pageY\n\n const x = currentPageX - startPageX\n const y = currentPageY - startPageY\n\n const width = originWidth + x\n const height = originHeight + y\n\n tempRangeSize.value = { width, height }\n }\n\n document.onmouseup = e => {\n isMouseDown = false\n document.onmousemove = null\n document.onmouseup = null\n\n const endPageX = e.pageX\n const endPageY = e.pageY\n\n if (startPageX === endPageX && startPageY === endPageY) return\n\n // 拖拽结束时,范围超过格子一半自动扩大到下一格(如拖动到一格半多的位置,会自动扩展到两格,横竖都同理)\n let width = tempRangeSize.value.width\n let height = tempRangeSize.value.height\n if (width % CELL_WIDTH > CELL_WIDTH * 0.5) width = width + (CELL_WIDTH - width % CELL_WIDTH)\n if (height % CELL_HEIGHT > CELL_HEIGHT * 0.5) height = height + (CELL_HEIGHT - height % CELL_HEIGHT)\n\n let row = Math.round(height / CELL_HEIGHT)\n let col = Math.round(width / CELL_WIDTH)\n\n if (row < 3) row = 3\n if (col < 2) col = 2\n\n selectedRange.value = [col, row]\n tempRangeSize.value = { width: 0, height: 0 }\n }\n }\n\n return {\n tempRangeSize,\n rangeLines,\n resizablePointStyle,\n selectedRange,\n focusCell,\n changeSelectRange,\n getTableData,\n closeEditor,\n clear,\n handlePaste,\n }\n },\n})\n","import { render } from \"./ChartDataEditor.vue?vue&type=template&id=9a62f784&scoped=true&ts=true\"\nimport script from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ChartDataEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./ChartDataEditor.vue?vue&type=style&index=0&id=9a62f784&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9a62f784\"]])\n\nexport default __exports__","\nimport { defineComponent, onUnmounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { ChartData, ChartOptions, PPTChartElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ElementOutline from '../../common/ElementOutline.vue'\nimport ColorButton from '../../common/ColorButton.vue'\nimport ChartDataEditor from './ChartDataEditor.vue'\n\nconst presetChartThemes = [\n ['#d87c7c', '#919e8b', '#d7ab82', '#6e7074', '#61a0a8', '#efa18d'],\n ['#dd6b66', '#759aa0', '#e69d87', '#8dc1a9', '#ea7e53', '#eedd78'],\n ['#516b91', '#59c4e6', '#edafda', '#93b7e3', '#a5e7f0', '#cbb0e3'],\n ['#893448', '#d95850', '#eb8146', '#ffb248', '#f2d643', '#ebdba4'],\n ['#4ea397', '#22c3aa', '#7bd9a5', '#d0648a', '#f58db2', '#f2b3c9'],\n ['#3fb1e3', '#6be6c1', '#626c91', '#a0a7e6', '#c4ebad', '#96dee8'],\n ['#fc97af', '#87f7cf', '#f7f494', '#72ccff', '#f7c5a0', '#d4a4eb'],\n ['#c1232b', '#27727b', '#fcce10', '#e87c25', '#b5c334', '#fe8463'],\n ['#2ec7c9', '#b6a2de', '#5ab1ef', '#ffb980', '#d87a80', '#8d98b3'],\n ['#e01f54', '#001852', '#f5e8c8', '#b8d2c7', '#c6b38e', '#a4d8c2'],\n ['#c12e34', '#e6b600', '#0098d9', '#2b821d', '#005eaa', '#339ca8'],\n ['#8a7ca8', '#e098c7', '#8fd3e8', '#71669e', '#cc70af', '#7cb4cc'],\n]\n\nexport default defineComponent({\n name: 'chart-style-panel',\n components: {\n ElementOutline,\n ChartDataEditor,\n ColorButton,\n },\n setup() {\n const mainStore = useMainStore()\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(mainStore)\n const { theme } = storeToRefs(slidesStore)\n\n const chartDataEditorVisible = ref(false)\n const presetThemesVisible = ref(false)\n const presetThemeColorHoverIndex = ref<[number, number]>([-1, -1])\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const fill = ref()\n\n const themeColor = ref([])\n const gridColor = ref('')\n const legend = ref('')\n\n const lineSmooth = ref(true)\n const showLine = ref(true)\n const showArea = ref(false)\n const horizontalBars = ref(false)\n const donut = ref(false)\n const stackBars = 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 stackBars: _stackBars,\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 if (_stackBars !== undefined) stackBars.value = _stackBars\n }\n\n themeColor.value = handleElement.value.themeColor\n gridColor.value = handleElement.value.gridColor || 'rgba(0, 0, 0, 0.4)'\n legend.value = handleElement.value.legend || ''\n }, { deep: true, immediate: true })\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置图表数据\n const updateData = (data: ChartData) => {\n chartDataEditorVisible.value = false\n updateElement({ data })\n }\n\n // 设置填充色\n const updateFill = (value: string) => {\n updateElement({ fill: value })\n }\n\n // 设置其他选项:柱状图转条形图、折线图转面积图、折线图转散点图、饼图转环形图、折线图开关平滑曲线\n const updateOptions = (optionProps: ChartOptions) => {\n const _handleElement = handleElement.value as PPTChartElement\n\n const newOptions = { ..._handleElement.options, ...optionProps }\n updateElement({ options: newOptions })\n }\n\n // 设置主题色\n const updateTheme = (color: string, index: number) => {\n const props = {\n themeColor: themeColor.value.map((c, i) => i === index ? color : c),\n }\n updateElement(props)\n }\n\n // 添加主题色\n const addThemeColor = () => {\n const props = {\n themeColor: [...themeColor.value, theme.value.themeColor],\n }\n updateElement(props)\n }\n\n // 使用预置主题配色\n const applyPresetTheme = (colors: string[], index: number) => {\n const themeColor = colors.slice(0, index + 1)\n updateElement({ themeColor })\n presetThemesVisible.value = false\n }\n\n // 删除主题色\n const deleteThemeColor = (index: number) => {\n const props = {\n themeColor: themeColor.value.filter((c, i) => i !== index),\n }\n updateElement(props)\n }\n\n // 设置网格颜色\n const updateGridColor = (gridColor: string) => {\n updateElement({ gridColor })\n }\n\n // 设置图例位置/不显示\n const updateLegend = (legend: '' | 'top' | 'bottom') => {\n updateElement({ legend })\n }\n\n const openDataEditor = () => chartDataEditorVisible.value = true\n\n emitter.on(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n onUnmounted(() => {\n emitter.off(EmitterEvents.OPEN_CHART_DATA_EDITOR, openDataEditor)\n })\n\n return {\n chartDataEditorVisible,\n presetThemesVisible,\n presetThemeColorHoverIndex,\n handleElement,\n updateData,\n fill,\n updateFill,\n lineSmooth,\n showLine,\n showArea,\n horizontalBars,\n donut,\n stackBars,\n updateOptions,\n themeColor,\n gridColor,\n legend,\n updateTheme,\n addThemeColor,\n deleteThemeColor,\n updateGridColor,\n updateLegend,\n presetChartThemes,\n applyPresetTheme,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=5a3169a0&scoped=true&ts=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=5a3169a0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5a3169a0\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, withCtx as _withCtx, createBlock as _createBlock, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72e00692\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"行数:\", -1))\nconst _hoisted_4 = {\n class: \"set-count\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_5 = { class: \"count-text\" }\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"列数:\", -1))\nconst _hoisted_8 = {\n class: \"set-count\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_9 = { class: \"count-text\" }\nconst _hoisted_10 = { class: \"row theme-switch\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"启用主题表格:\", -1))\nconst _hoisted_12 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_13 = { class: \"row\" }\nconst _hoisted_14 = /*#__PURE__*/_createTextVNode(\"标题行\")\nconst _hoisted_15 = /*#__PURE__*/_createTextVNode(\"汇总行\")\nconst _hoisted_16 = { class: \"row\" }\nconst _hoisted_17 = /*#__PURE__*/_createTextVNode(\"第一列\")\nconst _hoisted_18 = /*#__PURE__*/_createTextVNode(\"最后一列\")\nconst _hoisted_19 = { class: \"row\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"主题颜色:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconFontSize = _resolveComponent(\"IconFontSize\")!\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_IconAddText = _resolveComponent(\"IconAddText\")!\n const _component_InputGroup = _resolveComponent(\"InputGroup\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_IconText = _resolveComponent(\"IconText\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconFill = _resolveComponent(\"IconFill\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconTextBold = _resolveComponent(\"IconTextBold\")!\n const _component_CheckboxButton = _resolveComponent(\"CheckboxButton\")!\n const _component_IconTextItalic = _resolveComponent(\"IconTextItalic\")!\n const _component_IconTextUnderline = _resolveComponent(\"IconTextUnderline\")!\n const _component_IconStrikethrough = _resolveComponent(\"IconStrikethrough\")!\n const _component_CheckboxButtonGroup = _resolveComponent(\"CheckboxButtonGroup\")!\n const _component_IconAlignTextLeft = _resolveComponent(\"IconAlignTextLeft\")!\n const _component_RadioButton = _resolveComponent(\"RadioButton\")!\n const _component_IconAlignTextCenter = _resolveComponent(\"IconAlignTextCenter\")!\n const _component_IconAlignTextRight = _resolveComponent(\"IconAlignTextRight\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ElementOutline = _resolveComponent(\"ElementOutline\")!\n const _component_IconMinus = _resolveComponent(\"IconMinus\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_Switch = _resolveComponent(\"Switch\")!\n const _component_Checkbox = _resolveComponent(\"Checkbox\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_InputGroup, {\n compact: \"\",\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.textAttrs.fontname,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateTextAttrs({ fontname: value }))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconFontSize)\n ]),\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Select, {\n style: {\"flex\":\"2\"},\n value: _ctx.textAttrs.fontsize,\n onChange: _cache[1] || (_cache[1] = value => _ctx.updateTextAttrs({ fontsize: value }))\n }, {\n suffixIcon: _withCtx(() => [\n _createVNode(_component_IconAddText)\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fontSizeOptions, (fontsize) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: fontsize,\n value: fontsize\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(fontsize), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.textAttrs.color,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = value => _ctx.updateTextAttrs({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"文字颜色\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconText),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.textAttrs.color })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.textAttrs.backcolor,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = value => _ctx.updateTextAttrs({ backcolor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"单元格填充\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n class: \"text-color-btn\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconFill),\n _createElementVNode(\"div\", {\n class: \"text-color-block\",\n style: _normalizeStyle({ backgroundColor: _ctx.textAttrs.backcolor })\n }, null, 4)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_CheckboxButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"加粗\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.bold,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.updateTextAttrs({ bold: !_ctx.textAttrs.bold })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextBold)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"斜体\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.em,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.updateTextAttrs({ em: !_ctx.textAttrs.em })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextItalic)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下划线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.underline,\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.updateTextAttrs({ underline: !_ctx.textAttrs.underline })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconTextUnderline)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除线\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_CheckboxButton, {\n style: {\"flex\":\"1\"},\n checked: _ctx.textAttrs.strikethrough,\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.updateTextAttrs({ strikethrough: !_ctx.textAttrs.strikethrough })))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconStrikethrough)\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_RadioGroup, {\n class: \"row\",\n \"button-style\": \"solid\",\n value: _ctx.textAttrs.align,\n onChange: _cache[8] || (_cache[8] = e => _ctx.updateTextAttrs({ align: e.target.value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"left\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"center\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextCenter)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_RadioButton, {\n value: \"right\",\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTextRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_Divider),\n _createVNode(_component_ElementOutline, { fixed: true }),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.rowCount <= 1,\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.setTableRow(_ctx.rowCount - 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconMinus)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.rowCount), 1),\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.rowCount >= 30,\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.setTableRow(_ctx.rowCount + 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlus)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.colCount <= 1,\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.setTableCol(_ctx.colCount - 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconMinus)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.colCount), 1),\n _createVNode(_component_Button, {\n class: \"btn\",\n disabled: _ctx.colCount >= 30,\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.setTableCol(_ctx.colCount + 1)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlus)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ])\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(_component_Switch, {\n checked: _ctx.hasTheme,\n onChange: _cache[13] || (_cache[13] = checked => _ctx.toggleTheme(checked))\n }, null, 8, [\"checked\"])\n ])\n ]),\n (_ctx.hasTheme)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[14] || (_cache[14] = e => _ctx.updateTheme({ rowHeader: e.target.checked })),\n checked: _ctx.theme.rowHeader,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[15] || (_cache[15] = e => _ctx.updateTheme({ rowFooter: e.target.checked })),\n checked: _ctx.theme.rowFooter,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createVNode(_component_Checkbox, {\n onChange: _cache[16] || (_cache[16] = e => _ctx.updateTheme({ colHeader: e.target.checked })),\n checked: _ctx.theme.colHeader,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }, 8, [\"checked\"]),\n _createVNode(_component_Checkbox, {\n onChange: _cache[17] || (_cache[17] = e => _ctx.updateTheme({ colFooter: e.target.checked })),\n checked: _ctx.theme.colFooter,\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _hoisted_18\n ]),\n _: 1\n }, 8, [\"checked\"])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _hoisted_20,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.color,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = value => _ctx.updateTheme({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTTableElement, TableCell, TableCellStyle, TableTheme } from '@/types/slides'\nimport { createRandomCode } from '@/utils/common'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport 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 slidesStore = useSlidesStore()\n const { handleElement, handleElementId, selectedTableCells: selectedCells, availableFonts } = storeToRefs(useMainStore())\n const themeColor = computed(() => slidesStore.theme.themeColor)\n \n const fontSizeOptions = [\n '12px', '14px', '16px', '18px', '20px', '22px', '24px', '28px', '32px',\n ]\n\n const textAttrs = ref({\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n })\n\n const theme = ref()\n const hasTheme = ref(false)\n const rowCount = ref(0)\n const colCount = ref(0)\n const minRowCount = ref(0)\n const minColCount = ref(0)\n\n watch(handleElement, () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n \n theme.value = handleElement.value.theme\n hasTheme.value = !!theme.value\n\n rowCount.value = handleElement.value.data.length\n colCount.value = handleElement.value.data[0].length\n\n minRowCount.value = handleElement.value.data.length\n minColCount.value = handleElement.value.data[0].length\n }, { deep: true, immediate: true })\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n // 更新当前选中单元格的文本样式状态\n const updateTextAttrState = () => {\n if (!handleElement.value || handleElement.value.type !== 'table') return\n\n let rowIndex = 0\n let colIndex = 0\n if (selectedCells.value.length) {\n const selectedCell = selectedCells.value[0]\n rowIndex = +selectedCell.split('_')[0]\n colIndex = +selectedCell.split('_')[1]\n }\n const style = handleElement.value.data[rowIndex][colIndex].style\n\n if (!style) {\n textAttrs.value = {\n bold: false,\n em: false,\n underline: false,\n strikethrough: false,\n color: '#000',\n backcolor: '#000',\n fontsize: '12px',\n fontname: '微软雅黑',\n align: 'left',\n }\n }\n else {\n textAttrs.value = {\n bold: !!style.bold,\n em: !!style.em,\n underline: !!style.underline,\n strikethrough: !!style.strikethrough,\n color: style.color || '#000',\n backcolor: style.backcolor || '#000',\n fontsize: style.fontsize || '12px',\n fontname: style.fontname || '微软雅黑',\n align: style.align || 'left',\n }\n }\n }\n\n onMounted(() => {\n if (selectedCells.value.length) updateTextAttrState()\n })\n\n watch(selectedCells, updateTextAttrState)\n\n const updateElement = (props: Partial) => {\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置单元格内容文本样式\n const updateTextAttrs = (textAttrProp: Partial) => {\n const _handleElement = handleElement.value as PPTTableElement\n\n const data: TableCell[][] = JSON.parse(JSON.stringify(_handleElement.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 updateElement({ data })\n updateTextAttrState()\n }\n\n // 更新表格主题:主题色、标题行、汇总行、第一列、最后一列\n const updateTheme = (themeProp: Partial) => {\n if (!theme.value) return\n const _theme = { ...theme.value, ...themeProp }\n updateElement({ theme: _theme })\n }\n\n // 开启/关闭表格主题\n const toggleTheme = (checked: boolean) => {\n if (checked) {\n const props = {\n theme: {\n color: themeColor.value,\n rowHeader: true,\n rowFooter: false,\n colHeader: false,\n colFooter: false,\n }\n }\n updateElement(props)\n }\n else {\n slidesStore.removeElementProps({ id: handleElementId.value, propName: 'theme' })\n addHistorySnapshot()\n }\n }\n\n // 设置表格行数\n const setTableRow = (value: number) => {\n const _handleElement = handleElement.value as PPTTableElement\n const rowCount = _handleElement.data.length\n\n if (value > rowCount) {\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.data))\n tableCells.push(...newTableCells)\n \n updateElement({ data: tableCells })\n }\n else {\n const tableCells: TableCell[][] = _handleElement.data.slice(0, value)\n updateElement({ data: tableCells })\n }\n }\n\n // 设置表格列数\n const setTableCol = (value: number) => {\n const _handleElement = handleElement.value as PPTTableElement\n const colCount = _handleElement.data[0].length\n\n let tableCells = _handleElement.data\n let colSizeList = _handleElement.colWidths.map(item => item * _handleElement.width)\n\n if (value > colCount) {\n tableCells = tableCells.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 newColSizeList: number[] = new Array(value - colCount).fill(100)\n colSizeList.push(...newColSizeList)\n }\n else {\n tableCells = tableCells.map(item => item.slice(0, value))\n colSizeList = colSizeList.slice(0, value)\n }\n\n const width = colSizeList.reduce((a, b) => a + b)\n const colWidths = colSizeList.map(item => item / width)\n\n const props = {\n width,\n data: tableCells,\n colWidths,\n }\n updateElement(props)\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=72e00692&scoped=true&ts=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=72e00692&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-72e00692\"]])\n\nexport default __exports__","import { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69f903b1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"latex-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\"编辑 LaTeX\")\nconst _hoisted_4 = { class: \"row\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"颜色:\", -1))\nconst _hoisted_6 = { class: \"row\" }\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"粗细:\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_LaTeXEditor = _resolveComponent(\"LaTeXEditor\")!\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.latexEditorVisible = true))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.handleElement.color,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = value => _ctx.updateLatex({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.handleElement.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createVNode(_component_InputNumber, {\n min: 1,\n max: 3,\n value: _ctx.handleElement.strokeWidth,\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateLatex({ strokeWidth: value })),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ]),\n _createVNode(_component_Modal, {\n visible: _ctx.latexEditorVisible,\n \"onUpdate:visible\": _cache[5] || (_cache[5] = ($event: any) => ((_ctx.latexEditorVisible) = $event)),\n footer: null,\n centered: \"\",\n width: 880,\n destroyOnClose: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_LaTeXEditor, {\n value: _ctx.handleElement.latex,\n onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.latexEditorVisible = false)),\n onUpdate: _cache[4] || (_cache[4] = data => { _ctx.updateLatexData(data); _ctx.latexEditorVisible = false })\n }, null, 8, [\"value\"])\n ]),\n _: 1\n }, 8, [\"visible\"])\n ]))\n}","\nimport { defineComponent, onUnmounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTLatexElement } from '@/types/slides'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from '../common/ColorButton.vue'\nimport LaTeXEditor from '@/components/LaTeXEditor/index.vue'\n\nexport default defineComponent({\n name: 'latex-style-panel',\n components: {\n ColorButton,\n LaTeXEditor,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const latexEditorVisible = ref(false)\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateLatex = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n const updateLatexData = (data: { path: string; latex: string; w: number; h: number; }) => {\n updateLatex({\n path: data.path,\n latex: data.latex,\n width: data.w,\n height: data.h,\n viewBox: [data.w, data.h],\n })\n }\n\n const openLatexEditor = () => latexEditorVisible.value = true\n\n emitter.on(EmitterEvents.OPEN_LATEX_EDITOR, openLatexEditor)\n onUnmounted(() => {\n emitter.off(EmitterEvents.OPEN_LATEX_EDITOR, openLatexEditor)\n })\n\n return {\n handleElement,\n latexEditorVisible,\n updateLatex,\n updateLatexData,\n }\n }\n})\n","import { render } from \"./LatexStylePanel.vue?vue&type=template&id=69f903b1&scoped=true&ts=true\"\nimport script from \"./LatexStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./LatexStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./LatexStylePanel.vue?vue&type=style&index=0&id=69f903b1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-69f903b1\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-61bcaa2a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"video-style-panel\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"视频预览封面\", -1))\nconst _hoisted_3 = { class: \"background-image-wrapper\" }\nconst _hoisted_4 = { class: \"background-image\" }\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"重置封面\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_FileInput, {\n onChange: _cache[0] || (_cache[0] = files => _ctx.setVideoPoster(files))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: \"content\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.handleElement.poster})` })\n }, [\n _createVNode(_component_IconPlus)\n ], 4)\n ])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.updateVideo({ poster: '' })))\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n })\n ])\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTVideoElement } from '@/types/slides'\nimport { getImageDataURL } from '@/utils/image'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nexport default defineComponent({\n name: 'video-style-panel',\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateVideo = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n // 设置视频预览封面\n const setVideoPoster = (files: File[]) => {\n const imageFile = files[0]\n if (!imageFile) return\n getImageDataURL(imageFile).then(dataURL => updateVideo({ poster: dataURL }))\n }\n\n return {\n handleElement,\n updateVideo,\n setVideoPoster,\n }\n }\n})\n","import { render } from \"./VideoStylePanel.vue?vue&type=template&id=61bcaa2a&scoped=true&ts=true\"\nimport script from \"./VideoStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./VideoStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./VideoStylePanel.vue?vue&type=style&index=0&id=61bcaa2a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-61bcaa2a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-80767a46\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"audio-style-panel\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"图标颜色:\", -1))\nconst _hoisted_4 = { class: \"row switch-row\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"自动播放:\", -1))\nconst _hoisted_6 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\nconst _hoisted_7 = { class: \"row switch-row\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"循环播放:\", -1))\nconst _hoisted_9 = {\n class: \"switch-wrapper\",\n style: {\"flex\":\"3\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_Switch = _resolveComponent(\"Switch\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.handleElement.color,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = value => _ctx.updateAudio({ color: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.handleElement.color,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Switch, {\n checked: _ctx.handleElement.autoplay,\n onChange: _cache[1] || (_cache[1] = checked => _ctx.updateAudio({ autoplay: checked }))\n }, null, 8, [\"checked\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_Switch, {\n checked: _ctx.handleElement.loop,\n onChange: _cache[2] || (_cache[2] = checked => _ctx.updateAudio({ loop: checked }))\n }, null, 8, [\"checked\"])\n ])\n ])\n ]))\n}","\nimport { defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTAudioElement } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from '../common/ColorButton.vue'\n\nexport default defineComponent({\n name: 'audio-style-panel',\n components: {\n ColorButton,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement } = storeToRefs(useMainStore())\n\n const { addHistorySnapshot } = useHistorySnapshot()\n\n const updateAudio = (props: Partial) => {\n if (!handleElement.value) return\n slidesStore.updateElement({ id: handleElement.value.id, props })\n addHistorySnapshot()\n }\n\n return {\n handleElement,\n updateAudio,\n }\n }\n})\n","import { render } from \"./AudioStylePanel.vue?vue&type=template&id=80767a46&scoped=true&ts=true\"\nimport script from \"./AudioStylePanel.vue?vue&type=script&lang=ts\"\nexport * from \"./AudioStylePanel.vue?vue&type=script&lang=ts\"\n\nimport \"./AudioStylePanel.vue?vue&type=style&index=0&id=80767a46&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-80767a46\"]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { ElementTypes } 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'\nimport LatexStylePanel from './LatexStylePanel.vue'\nimport VideoStylePanel from './VideoStylePanel.vue'\nimport AudioStylePanel from './AudioStylePanel.vue'\n\nexport default defineComponent({\n name: 'element-style-panel',\n setup() {\n const { handleElement } = storeToRefs(useMainStore())\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 [ElementTypes.LATEX]: LatexStylePanel,\n [ElementTypes.VIDEO]: VideoStylePanel,\n [ElementTypes.AUDIO]: AudioStylePanel,\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=705f1755&ts=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createStaticVNode as _createStaticVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3476ee65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-positopn-panel\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"层级:\", -1))\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\" 置于顶层\")\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\" 置于底层\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\" 上移一层\")\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\" 下移一层\")\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"对齐:\", -1))\nconst _hoisted_8 = { class: \"row\" }\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"3\"} }, \"位置:\", -1))\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\nconst _hoisted_11 = /*#__PURE__*/_createStaticVNode(\"
X
Y
\", 1)\nconst _hoisted_12 = { class: \"row\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"3\"} }, \"大小:\", -1))\nconst _hoisted_14 = {\n key: 1,\n style: {\"flex\":\"1\"}\n}\nconst _hoisted_15 = /*#__PURE__*/_createStaticVNode(\"
\", 1)\nconst _hoisted_16 = { class: \"row\" }\nconst _hoisted_17 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"3\"} }, \"旋转:\", -1))\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconSendToBack = _resolveComponent(\"IconSendToBack\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_IconBringToFrontOne = _resolveComponent(\"IconBringToFrontOne\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconBringToFront = _resolveComponent(\"IconBringToFront\")!\n const _component_IconSentToBack = _resolveComponent(\"IconSentToBack\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconAlignLeft = _resolveComponent(\"IconAlignLeft\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconAlignVertically = _resolveComponent(\"IconAlignVertically\")!\n const _component_IconAlignRight = _resolveComponent(\"IconAlignRight\")!\n const _component_IconAlignTop = _resolveComponent(\"IconAlignTop\")!\n const _component_IconAlignHorizontally = _resolveComponent(\"IconAlignHorizontally\")!\n const _component_IconAlignBottom = _resolveComponent(\"IconAlignBottom\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n const _component_IconLock = _resolveComponent(\"IconLock\")!\n const _component_IconUnlock = _resolveComponent(\"IconUnlock\")!\n const _component_IconRotate = _resolveComponent(\"IconRotate\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'top')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconSendToBack, { class: \"btn-icon\" }),\n _hoisted_3\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'bottom')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBringToFrontOne, { class: \"btn-icon\" }),\n _hoisted_4\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'up')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconBringToFront, { class: \"btn-icon\" }),\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.orderElement(_ctx.handleElement, 'down')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconSentToBack, { class: \"btn-icon\" }),\n _hoisted_6\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _hoisted_7,\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.alignElementToCanvas('left')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"水平居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.alignElementToCanvas('horizontal')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignVertically)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.alignElementToCanvas('right')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"上对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.alignElementToCanvas('top')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTop)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"垂直居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.alignElementToCanvas('vertical')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignHorizontally)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.alignElementToCanvas('bottom')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignBottom)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createVNode(_component_InputNumber, {\n step: 5,\n value: _ctx.left,\n onChange: _cache[10] || (_cache[10] = value => _ctx.updateLeft(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"value\"]),\n _hoisted_10,\n _createVNode(_component_InputNumber, {\n step: 5,\n value: _ctx.top,\n onChange: _cache[11] || (_cache[11] = value => _ctx.updateTop(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"value\"])\n ]),\n _hoisted_11,\n (_ctx.handleElement.type !== 'line')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createVNode(_component_InputNumber, {\n min: _ctx.minSize,\n max: 1500,\n step: 5,\n value: _ctx.width,\n onChange: _cache[12] || (_cache[12] = value => _ctx.updateWidth(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"min\", \"value\"]),\n (['image', 'shape', 'audio'].includes(_ctx.handleElement.type))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (_ctx.fixedRatio)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"解除宽高比锁定\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconLock, {\n style: {\"flex\":\"1\"},\n class: \"icon-btn\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.updateFixedRatio(false)))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]))\n : (_openBlock(), _createBlock(_component_Tooltip, {\n key: 1,\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"宽高比锁定\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUnlock, {\n style: {\"flex\":\"1\"},\n class: \"icon-btn\",\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.updateFixedRatio(true)))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]))\n ], 64))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_14)),\n _createVNode(_component_InputNumber, {\n min: _ctx.minSize,\n max: 800,\n step: 5,\n disabled: _ctx.handleElement.type === 'text',\n value: _ctx.height,\n onChange: _cache[15] || (_cache[15] = value => _ctx.updateHeight(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"min\", \"disabled\", \"value\"])\n ]),\n _hoisted_15\n ], 64))\n : _createCommentVNode(\"\", true),\n (!['line', 'video', 'audio'].includes(_ctx.handleElement.type))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_16, [\n _hoisted_17,\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"逆时针旋转\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconRotate, {\n class: \"icon-btn\",\n onClick: _cache[16] || (_cache[16] = ($event: any) => (_ctx.updateRotate45('-'))),\n style: {\"flex\":\"2\"}\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"顺时针旋转\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconRotate, {\n class: \"icon-btn\",\n onClick: _cache[17] || (_cache[17] = ($event: any) => (_ctx.updateRotate45('+'))),\n style: _normalizeStyle({\n flex: 2,\n transform: 'rotateY(180deg)',\n })\n }, null, 8, [\"style\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _hoisted_18,\n _createVNode(_component_InputNumber, {\n min: -180,\n max: 180,\n step: 5,\n value: _ctx.rotate,\n onChange: _cache[18] || (_cache[18] = value => _ctx.updateRotate(value)),\n style: {\"flex\":\"4\"}\n }, null, 8, [\"value\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent, ref, watch } from 'vue'\nimport { round } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\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 slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(useMainStore())\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 slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n const updateTop = (value: number) => {\n const props = { top: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 设置元素宽度、高度、旋转角度\n const updateWidth = (value: number) => {\n const props = { width: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n const updateHeight = (value: number) => {\n const props = { height: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n const updateRotate = (value: number) => {\n const props = { rotate: value }\n slidesStore.updateElement({ id: handleElementId.value, props })\n addHistorySnapshot()\n }\n\n // 固定元素的宽高比\n const updateFixedRatio = (value: boolean) => {\n const props = { fixedRatio: value }\n slidesStore.updateElement({ id: handleElementId.value, 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 slidesStore.updateElement({ id: handleElementId.value, 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=3476ee65&scoped=true&ts=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=3476ee65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3476ee65\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-696c81e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-animation-panel\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"element-animation\"\n}\nconst _hoisted_3 = { class: \"animation-pool\" }\nconst _hoisted_4 = { class: \"type-title\" }\nconst _hoisted_5 = { class: \"pool-item-wrapper\" }\nconst _hoisted_6 = [\"onMouseenter\", \"onClick\"]\nconst _hoisted_7 = {\n key: 0,\n class: \"mask\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\" 该元素暂不支持动画 \")\nconst _hoisted_9 = {\n key: 1,\n class: \"tip\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\" 选中画布中的元素添加动画\")\nconst _hoisted_11 = { class: \"index\" }\nconst _hoisted_12 = { class: \"text\" }\nconst _hoisted_13 = { class: \"handler\" }\nconst _hoisted_14 = {\n key: 2,\n class: \"configs\"\n}\nconst _hoisted_15 = { class: \"duration\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"4\"} }, \"持续时间(毫秒):\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconEffects = _resolveComponent(\"IconEffects\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconClick = _resolveComponent(\"IconClick\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconPlayOne = _resolveComponent(\"IconPlayOne\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconCloseSmall = _resolveComponent(\"IconCloseSmall\")!\n const _component_Draggable = _resolveComponent(\"Draggable\")!\n const _component_InputNumber = _resolveComponent(\"InputNumber\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.handleElement)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (!['chart', 'video'].includes(_ctx.handleElement.type))\n ? (_openBlock(), _createBlock(_component_Popover, {\n key: 0,\n trigger: \"click\",\n visible: _ctx.animationPoolVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.animationPoolVisible) = $event)),\n onVisibleChange: _cache[2] || (_cache[2] = visible => _ctx.handlePopoverVisibleChange(visible))\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.animations, (type) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"pool-type\",\n key: type.name\n }, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(type.name) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(type.children, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"pool-item\",\n key: item.name,\n onMouseenter: ($event: any) => (_ctx.hoverPreviewAnimation = item.value),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (_ctx.hoverPreviewAnimation = '')),\n onClick: ($event: any) => (_ctx.addAnimation(item.value))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"animation-box\", [\n 'animate__animated',\n 'animate__faster',\n _ctx.hoverPreviewAnimation === item.value && `animate__${item.value}`,\n ]])\n }, _toDisplayString(item.name), 3)\n ], 40, _hoisted_6))\n }), 128))\n ])\n ]))\n }), 128)),\n (!_ctx.popoverMaskHide)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_Button, { class: \"element-animation-btn\" }, {\n default: _withCtx(() => [\n _createVNode(_component_IconEffects, { style: {\"margin-right\":\"5px\"} }),\n _createTextVNode(\" \" + _toDisplayString(_ctx.handleElementAnimationName || '点击选择动画'), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"visible\"]))\n : (_openBlock(), _createBlock(_component_Button, {\n key: 1,\n class: \"element-animation-btn\",\n disabled: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconEffects, { style: {\"margin-right\":\"5px\"} }),\n _hoisted_8\n ]),\n _: 1\n }))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createVNode(_component_IconClick, { style: {\"margin-right\":\"5px\"} }),\n _hoisted_10\n ])),\n _createVNode(_component_Divider),\n _createVNode(_component_Draggable, {\n class: \"animation-sequence\",\n modelValue: _ctx.animationSequence,\n animation: 300,\n scroll: true,\n scrollSensitivity: 50,\n onEnd: _ctx.handleDragEnd,\n itemKey: \"id\"\n }, {\n item: _withCtx(({ element, index }) => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"sequence-item\", { 'active': _ctx.handleElement?.id === element.elId }])\n }, [\n _createElementVNode(\"div\", _hoisted_11, _toDisplayString(index + 1), 1),\n _createElementVNode(\"div\", _hoisted_12, \"【\" + _toDisplayString(element.elType) + \"】\" + _toDisplayString(element.animationType), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"预览\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPlayOne, {\n class: \"handler-btn\",\n onClick: ($event: any) => (_ctx.runAnimation(element.elId, element.type, element.duration))\n }, null, 8, [\"onClick\"])\n ]),\n _: 2\n }, 1032, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"删除\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconCloseSmall, {\n class: \"handler-btn\",\n onClick: ($event: any) => (_ctx.deleteAnimation(element.elId))\n }, null, 8, [\"onClick\"])\n ]),\n _: 2\n }, 1032, [\"mouseEnterDelay\"])\n ])\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onEnd\"]),\n (_ctx.handleElementAnimation)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_15, [\n _hoisted_16,\n _createVNode(_component_InputNumber, {\n min: 100,\n max: 5000,\n step: 100,\n value: _ctx.handleElementAnimation.duration,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateElementAnimationDuration(value)),\n style: {\"flex\":\"3\"}\n }, null, 8, [\"value\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\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 { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { PPTAnimation } from '@/types/slides'\nimport { ANIMATIONS } from '@/configs/animation'\nimport { ELEMENT_TYPE_ZH } from '@/configs/element'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport Draggable from 'vuedraggable'\n\nconst defaultDuration = 1000\n\nconst animationTypes: { [key: string]: string } = {}\nfor (const type of ANIMATIONS) {\n for (const animation of type.children) {\n animationTypes[animation.value] = animation.name\n }\n}\n\nexport default defineComponent({\n name: 'element-animation-panel',\n components: {\n Draggable,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { handleElement, handleElementId } = storeToRefs(useMainStore())\n const { currentSlide, currentSlideAnimations } = storeToRefs(slidesStore)\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 const animations = currentSlideAnimations.value || []\n const animation = animations.find(item => item.elId === handleElementId.value)\n return animation || null\n })\n\n // 当前选中元素的入场动画名称\n const handleElementAnimationName = computed(() => {\n if (!handleElementAnimation.value) return null\n return animationTypes[handleElementAnimation.value.type]\n })\n\n // 删除元素入场动画\n const deleteAnimation = (elId: string) => {\n const animations = (currentSlideAnimations.value as PPTAnimation[]).filter(item => item.elId !== elId)\n slidesStore.updateSlide({ 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 slidesStore.updateSlide({ animations })\n addHistorySnapshot()\n }\n\n // 执行入场动画预览\n const runAnimation = (elId: string, animationType: string, duration: number) => {\n const prefix = 'animate__'\n const elRef = document.querySelector(`#editable-element-${elId} [class^=editable-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animationType}`\n document.documentElement.style.setProperty('--animate-duration', `${duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 修改元素入场动画,并执行一次预览\n const updateElementAnimation = (type: string) => {\n if (!currentSlideAnimations.value) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElementId.value) return { ...item, type }\n return item\n })\n slidesStore.updateSlide({ animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n const animationItem = currentSlideAnimations.value.find(item => item.elId === handleElementId.value)\n const duration = animationItem?.duration || defaultDuration\n\n runAnimation(handleElementId.value, type, duration)\n }\n\n // 修改元素入场动画持续时间\n const updateElementAnimationDuration = (duration: number) => {\n if (!currentSlideAnimations.value) return\n if (duration < 100 || duration > 5000) return\n\n const animations = currentSlideAnimations.value.map(item => {\n if (item.elId === handleElementId.value) return { ...item, duration }\n return item\n })\n slidesStore.updateSlide({ animations })\n addHistorySnapshot()\n }\n\n // 添加元素入场动画,并执行一次预览\n const addAnimation = (type: string) => {\n if (handleElementAnimationName.value) {\n updateElementAnimation(type)\n return\n }\n const animations: PPTAnimation[] = currentSlideAnimations.value ? JSON.parse(JSON.stringify(currentSlideAnimations.value)) : []\n animations.push({\n elId: handleElementId.value,\n type,\n duration: defaultDuration,\n })\n slidesStore.updateSlide({ animations })\n animationPoolVisible.value = false\n addHistorySnapshot()\n\n runAnimation(handleElementId.value, type, defaultDuration)\n }\n\n // 动画选择面板打开500ms后再移除遮罩层,否则打开面板后迅速滑入鼠标预览会导致抖动\n const popoverMaskHide = ref(false)\n const handlePopoverVisibleChange = (visible: boolean) => {\n if (visible) {\n setTimeout(() => popoverMaskHide.value = true, 500)\n }\n else popoverMaskHide.value = false\n }\n\n return {\n handleElement,\n animationPoolVisible,\n animations,\n animationSequence,\n hoverPreviewAnimation,\n handleElementAnimation,\n handleElementAnimationName,\n popoverMaskHide,\n addAnimation,\n deleteAnimation,\n handleDragEnd,\n runAnimation,\n updateElementAnimationDuration,\n handlePopoverVisibleChange,\n }\n },\n})\n","import { render } from \"./ElementAnimationPanel.vue?vue&type=template&id=696c81e2&scoped=true&ts=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=696c81e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-696c81e2\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0e2f846d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"slide-design-panel\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"背景填充\", -1))\nconst _hoisted_3 = { class: \"row\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"纯色填充\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"图片填充\")\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"渐变填充\")\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"1\"} }, null, -1))\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"缩放\")\nconst _hoisted_9 = /*#__PURE__*/_createTextVNode(\"拼贴\")\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\"缩放铺满\")\nconst _hoisted_11 = /*#__PURE__*/_createTextVNode(\"线性渐变\")\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\"径向渐变\")\nconst _hoisted_13 = {\n key: 0,\n class: \"background-image-wrapper\"\n}\nconst _hoisted_14 = { class: \"background-image\" }\nconst _hoisted_15 = {\n key: 1,\n class: \"background-gradient-wrapper\"\n}\nconst _hoisted_16 = { class: \"row\" }\nconst _hoisted_17 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"起点颜色:\", -1))\nconst _hoisted_18 = { class: \"row\" }\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"终点颜色:\", -1))\nconst _hoisted_20 = {\n key: 0,\n class: \"row\"\n}\nconst _hoisted_21 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"渐变角度:\", -1))\nconst _hoisted_22 = { class: \"row\" }\nconst _hoisted_23 = /*#__PURE__*/_createTextVNode(\"应用背景到全部\")\nconst _hoisted_24 = { class: \"row\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"画布尺寸:\", -1))\nconst _hoisted_26 = /*#__PURE__*/_createTextVNode(\"宽屏 16 : 9\")\nconst _hoisted_27 = /*#__PURE__*/_createTextVNode(\"宽屏 16 :10\")\nconst _hoisted_28 = /*#__PURE__*/_createTextVNode(\"标准 4 :3\")\nconst _hoisted_29 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"title\" }, \"全局主题\", -1))\nconst _hoisted_30 = { class: \"row\" }\nconst _hoisted_31 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"字体:\", -1))\nconst _hoisted_32 = { class: \"row\" }\nconst _hoisted_33 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"字体颜色:\", -1))\nconst _hoisted_34 = { class: \"row\" }\nconst _hoisted_35 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"背景颜色:\", -1))\nconst _hoisted_36 = { class: \"row\" }\nconst _hoisted_37 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"2\"} }, \"主题色:\", -1))\nconst _hoisted_38 = /*#__PURE__*/_createTextVNode(\" 预置主题 \")\nconst _hoisted_39 = {\n key: 2,\n class: \"theme-list\"\n}\nconst _hoisted_40 = [\"onClick\"]\nconst _hoisted_41 = { class: \"theme-item-content\" }\nconst _hoisted_42 = { class: \"row\" }\nconst _hoisted_43 = /*#__PURE__*/_createTextVNode(\"应用主题到全部\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SelectOption = _resolveComponent(\"SelectOption\")!\n const _component_Select = _resolveComponent(\"Select\")!\n const _component_ColorPicker = _resolveComponent(\"ColorPicker\")!\n const _component_ColorButton = _resolveComponent(\"ColorButton\")!\n const _component_Popover = _resolveComponent(\"Popover\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _component_FileInput = _resolveComponent(\"FileInput\")!\n const _component_Slider = _resolveComponent(\"Slider\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_SelectOptGroup = _resolveComponent(\"SelectOptGroup\")!\n const _component_IconDown = _resolveComponent(\"IconDown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Select, {\n style: {\"flex\":\"10\"},\n value: _ctx.background.type,\n onChange: _cache[0] || (_cache[0] = value => _ctx.updateBackgroundType(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"solid\" }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"image\" }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"gradient\" }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]),\n _hoisted_7,\n (_ctx.background.type === 'solid')\n ? (_openBlock(), _createBlock(_component_Popover, {\n key: 0,\n trigger: \"click\"\n }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.background.color,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = color => _ctx.updateBackground({ color }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.background.color || '#fff',\n style: {\"flex\":\"10\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n }))\n : (_ctx.background.type === 'image')\n ? (_openBlock(), _createBlock(_component_Select, {\n key: 1,\n style: {\"flex\":\"10\"},\n value: _ctx.background.imageSize || 'cover',\n onChange: _cache[2] || (_cache[2] = value => _ctx.updateBackground({ imageSize: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"contain\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"repeat\" }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"cover\" }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]))\n : (_openBlock(), _createBlock(_component_Select, {\n key: 2,\n style: {\"flex\":\"10\"},\n value: _ctx.background.gradientType,\n onChange: _cache[3] || (_cache[3] = value => _ctx.updateBackground({ gradientType: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: \"linear\" }, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOption, { value: \"radial\" }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"]))\n ]),\n (_ctx.background.type === 'image')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createVNode(_component_FileInput, {\n onChange: _cache[4] || (_cache[4] = files => _ctx.uploadBackgroundImage(files))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", {\n class: \"content\",\n style: _normalizeStyle({ backgroundImage: `url(${_ctx.background.image})` })\n }, [\n _createVNode(_component_IconPlus)\n ], 4)\n ])\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.background.type === 'gradient')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", _hoisted_16, [\n _hoisted_17,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.background.gradientColor[0],\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = value => _ctx.updateBackground({ gradientColor: [value, _ctx.background.gradientColor[1]] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.background.gradientColor[0],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_18, [\n _hoisted_19,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.background.gradientColor[1],\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = value => _ctx.updateBackground({ gradientColor: [_ctx.background.gradientColor[0], value] }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.background.gradientColor[1],\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n (_ctx.background.gradientType === 'linear')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _hoisted_21,\n _createVNode(_component_Slider, {\n class: \"slider\",\n min: 0,\n max: 360,\n step: 15,\n value: _ctx.background.gradientRotate,\n onChange: _cache[7] || (_cache[7] = value => _ctx.updateBackground({ gradientRotate: value }))\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_22, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.applyBackgroundAllSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_23\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_Divider),\n _createElementVNode(\"div\", _hoisted_24, [\n _hoisted_25,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.viewportRatio,\n onChange: _cache[9] || (_cache[9] = value => _ctx.updateViewportRatio(value))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOption, { value: 0.5625 }, {\n default: _withCtx(() => [\n _hoisted_26\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_SelectOption, { value: 0.625 }, {\n default: _withCtx(() => [\n _hoisted_27\n ]),\n _: 1\n }, 8, [\"value\"]),\n _createVNode(_component_SelectOption, { value: 0.75 }, {\n default: _withCtx(() => [\n _hoisted_28\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createVNode(_component_Divider),\n _hoisted_29,\n _createElementVNode(\"div\", _hoisted_30, [\n _hoisted_31,\n _createVNode(_component_Select, {\n style: {\"flex\":\"3\"},\n value: _ctx.theme.fontName,\n onChange: _cache[10] || (_cache[10] = value => _ctx.updateTheme({ fontName: value }))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_SelectOptGroup, { label: \"系统字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.availableFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: _normalizeStyle({ fontFamily: font.value })\n }, _toDisplayString(font.label), 5)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_SelectOptGroup, { label: \"在线字体\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.webFonts, (font) => {\n return (_openBlock(), _createBlock(_component_SelectOption, {\n key: font.value,\n value: font.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(font.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_32, [\n _hoisted_33,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.fontColor,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = value => _ctx.updateTheme({ fontColor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.fontColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _hoisted_35,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.backgroundColor,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = value => _ctx.updateTheme({ backgroundColor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.backgroundColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_36, [\n _hoisted_37,\n _createVNode(_component_Popover, { trigger: \"click\" }, {\n content: _withCtx(() => [\n _createVNode(_component_ColorPicker, {\n modelValue: _ctx.theme.themeColor,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = value => _ctx.updateTheme({ themeColor: value }))\n }, null, 8, [\"modelValue\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_ColorButton, {\n color: _ctx.theme.themeColor,\n style: {\"flex\":\"3\"}\n }, null, 8, [\"color\"])\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"title dropdown\", { 'active': _ctx.showPresetThemes }]),\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.togglePresetThemesVisible())),\n style: {\"margin-top\":\"20px\"}\n }, [\n _hoisted_38,\n _createVNode(_component_IconDown, { class: \"icon\" })\n ], 2),\n (_ctx.showPresetThemes)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.themes, (item, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"theme-item\",\n key: index,\n style: _normalizeStyle({ backgroundColor: item.background }),\n onClick: ($event: any) => (_ctx.updateTheme({\n fontColor: item.text,\n backgroundColor: item.background,\n themeColor: item.color,\n }))\n }, [\n _createElementVNode(\"div\", _hoisted_41, [\n _createElementVNode(\"div\", {\n class: \"text\",\n style: _normalizeStyle({ color: item.text })\n }, \"Aa\", 4),\n _createElementVNode(\"div\", {\n class: \"color-block\",\n style: _normalizeStyle({ backgroundColor: item.color })\n }, null, 4)\n ])\n ], 12, _hoisted_40))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_42, [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[15] || (_cache[15] = ($event: any) => (_ctx.applyThemeAllSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_43\n ]),\n _: 1\n })\n ])\n ]))\n}","export const PRESET_THEMES = [\r\n { color: '#d14424', background: '#ffffff', text: '#333' },\r\n { color: '#42464b', background: '#ffffff', text: '#333' },\r\n { color: '#5d82ba', background: '#ffffff', text: '#333' },\r\n { color: '#005a6f', background: '#ffffff', text: '#333' },\r\n { color: '#d0614c', background: '#dfb044', text: '#333' },\r\n { color: '#86a1ad', background: '#dfdbd4', text: '#333' },\r\n { color: '#697586', background: '#d5c4a4', text: '#333' },\r\n { color: '#333333', background: '#7acfa6', text: '#333' },\r\n { color: '#42464b', background: '#415065', text: '#fff' },\r\n { color: '#0c5999', background: '#35a2cd', text: '#fff' },\r\n { color: '#c49a41', background: '#8c4357', text: '#fff' },\r\n { color: '#dfaa00', background: '#2e4e7d', text: '#fff' },\r\n { color: '#d1ad88', background: '#f99070', text: '#fff' },\r\n { color: '#464d52', background: '#657984', text: '#fff' },\r\n { color: '#ffcfb6', background: '#1e4c6f', text: '#fff' },\r\n { color: '#c3a043', background: '#43292a', text: '#fff' },\r\n { color: '#464d52', background: '#60546f', text: '#fff' },\r\n { color: '#df9636', background: '#5b89a0', text: '#fff' },\r\n { color: '#b898a4', background: '#93716b', text: '#fff' },\r\n { color: '#c47a11', background: '#187db1', text: '#fff' },\r\n { color: '#333333', background: '#759564', text: '#fff' },\r\n { color: '#355b5e', background: '#424b50', text: '#fff' },\r\n { color: '#d29090', background: '#942a32', text: '#fff' },\r\n { color: '#00cfdf', background: '#3b434d', text: '#fff' },\r\n { color: '#424246', background: '#c70042', text: '#fff' },\r\n { color: '#2e4155', background: '#b35d44', text: '#fff' },\r\n { color: '#11bfce', background: '#8f98aa', text: '#fff' },\r\n { color: '#333333', background: '#549688', text: '#fff' },\r\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore, useSlidesStore } from '@/store'\nimport { Slide, SlideBackground, SlideTheme } from '@/types/slides'\nimport { PRESET_THEMES } from '@/configs/theme'\nimport { WEB_FONTS } from '@/configs/font'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\nimport ColorButton from './common/ColorButton.vue'\nimport { getImageDataURL } from '@/utils/image'\n\nconst themes = PRESET_THEMES\nconst webFonts = WEB_FONTS\n\nexport default defineComponent({\n name: 'slide-design-panel',\n components: {\n ColorButton,\n },\n setup() {\n const slidesStore = useSlidesStore()\n const { availableFonts } = storeToRefs(useMainStore())\n const { slides, currentSlide, viewportRatio, theme } = storeToRefs(slidesStore)\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 slidesStore.updateSlide({ 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 slidesStore.updateSlide({ 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 slidesStore.updateSlide({ background: newBackground })\n }\n addHistorySnapshot()\n }\n\n // 设置背景图片\n const updateBackground = (props: Partial) => {\n slidesStore.updateSlide({ 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 slidesStore.setSlides(newSlides)\n addHistorySnapshot()\n }\n\n // 设置主题\n const updateTheme = (themeProps: Partial) => {\n slidesStore.setTheme(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 else if (el.type === 'latex') el.color = fontColor\n else if (el.type === 'audio') el.color = themeColor\n }\n }\n slidesStore.setSlides(newSlides)\n addHistorySnapshot()\n }\n\n // 是否显示预设主题\n const showPresetThemes = ref(true)\n const togglePresetThemesVisible = () => {\n showPresetThemes.value = !showPresetThemes.value\n }\n\n // 设置画布尺寸(宽高比例)\n const updateViewportRatio = (value: number) => {\n slidesStore.setViewportRatio(value)\n }\n\n return {\n availableFonts,\n background,\n updateBackgroundType,\n updateBackground,\n uploadBackgroundImage,\n applyBackgroundAllSlide,\n themes,\n theme,\n webFonts,\n updateTheme,\n applyThemeAllSlide,\n viewportRatio,\n updateViewportRatio,\n showPresetThemes,\n togglePresetThemesVisible,\n }\n },\n})\n","import { render } from \"./SlideDesignPanel.vue?vue&type=template&id=0e2f846d&scoped=true&ts=true\"\nimport script from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SlideDesignPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SlideDesignPanel.vue?vue&type=style&index=0&id=0e2f846d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0e2f846d\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-251ceb05\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"slide-animation-panel\" }\nconst _hoisted_2 = { class: \"animation-pool\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"animation-text\" }\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"应用到全部\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Button = _resolveComponent(\"Button\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.animations, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"animation-item\", { 'active': _ctx.currentTurningMode === item.value }]),\n key: item.label,\n onClick: ($event: any) => (_ctx.updateTurningMode(item.value))\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass(['animation-block', item.value])\n }, null, 2),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(item.label), 1)\n ], 10, _hoisted_3))\n }), 128))\n ]),\n _createVNode(_component_Button, {\n style: {\"width\":\"100%\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.applyAllSlide()))\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n })\n ]))\n}","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { TurningMode } from '@/types/slides'\nimport useHistorySnapshot from '@/hooks/useHistorySnapshot'\n\ninterface Animations {\n label: string;\n value: TurningMode;\n}\n\nexport default defineComponent({\n name: 'slide-animation-panel',\n setup() {\n const slidesStore = useSlidesStore()\n const { slides, currentSlide } = storeToRefs(slidesStore)\n\n const currentTurningMode = computed(() => currentSlide.value.turningMode || 'slideY')\n\n const animations: 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: TurningMode) => {\n if (mode === currentTurningMode.value) return\n slidesStore.updateSlide({ 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 slidesStore.setSlides(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=251ceb05&scoped=true&ts=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=251ceb05&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-251ceb05\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e982d59\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"multi-position-panel\" }\nconst _hoisted_2 = /*#__PURE__*/_createTextVNode(\"水平均匀分布\")\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\"垂直均匀分布\")\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"组合\")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\"取消组合\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconAlignLeft = _resolveComponent(\"IconAlignLeft\")!\n const _component_Button = _resolveComponent(\"Button\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconAlignHorizontally = _resolveComponent(\"IconAlignHorizontally\")!\n const _component_IconAlignRight = _resolveComponent(\"IconAlignRight\")!\n const _component_ButtonGroup = _resolveComponent(\"ButtonGroup\")!\n const _component_IconAlignTop = _resolveComponent(\"IconAlignTop\")!\n const _component_IconAlignVertically = _resolveComponent(\"IconAlignVertically\")!\n const _component_IconAlignBottom = _resolveComponent(\"IconAlignBottom\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconGroup = _resolveComponent(\"IconGroup\")!\n const _component_IconUngroup = _resolveComponent(\"IconUngroup\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"左对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.alignElement('left')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignLeft)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"水平居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.alignElement('horizontal')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignHorizontally)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"右对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.alignElement('right')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignRight)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"上对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.alignElement('top')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignTop)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"垂直居中\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.alignElement('vertical')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignVertically)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.5,\n title: \"下对齐\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.alignElement('bottom')))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconAlignBottom)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ]),\n _: 1\n }),\n (_ctx.displayItemCount > 2)\n ? (_openBlock(), _createBlock(_component_ButtonGroup, {\n key: 0,\n class: \"row\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.uniformHorizontalDisplay()))\n }, {\n default: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }),\n _createVNode(_component_Button, {\n style: {\"flex\":\"1\"},\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.uniformVerticalDisplay()))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Divider),\n _createVNode(_component_ButtonGroup, { class: \"row\" }, {\n default: _withCtx(() => [\n _createVNode(_component_Button, {\n disabled: !_ctx.canCombine,\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.combineElements())),\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconGroup, { style: {\"margin-right\":\"3px\"} }),\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createVNode(_component_Button, {\n disabled: _ctx.canCombine,\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.uncombineElements())),\n style: {\"flex\":\"1\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconUngroup, { style: {\"margin-right\":\"3px\"} }),\n _hoisted_5\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]),\n _: 1\n })\n ]))\n}","import { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { PPTElement } from '@/types/slides'\r\nimport { ElementAlignCommands } from '@/types/edit'\r\nimport { getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\nexport default () => {\r\n const slidesStore = useSlidesStore()\r\n const { activeElementIdList, activeElementList } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(slidesStore)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n /**\r\n * 对齐选中的元素\r\n * @param command 对齐方向\r\n */\r\n const alignActiveElement = (command: ElementAlignCommands) => {\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 slidesStore.updateSlide({ 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 { storeToRefs } from 'pinia'\r\nimport { useMainStore, useSlidesStore } from '@/store'\r\nimport { PPTElement } from '@/types/slides'\r\nimport { getElementRange, getElementListRange, getRectRotatedOffset } from '@/utils/element'\r\nimport useHistorySnapshot from './useHistorySnapshot'\r\n\r\ninterface ElementItem {\r\n min: number;\r\n max: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface GroupItem {\r\n groupId: string;\r\n els: PPTElement[];\r\n}\r\n\r\ninterface GroupElementsItem {\r\n min: number;\r\n max: number;\r\n els: PPTElement[];\r\n}\r\n\r\ntype Item = ElementItem | GroupElementsItem\r\n\r\ninterface ElementWithPos {\r\n pos: number;\r\n el: PPTElement;\r\n}\r\n\r\ninterface LastPos {\r\n min: number;\r\n max: number;\r\n}\r\n\r\nexport default () => {\r\n const slidesStore = useSlidesStore()\r\n const { activeElementIdList, activeElementList } = storeToRefs(useMainStore())\r\n const { currentSlide } = storeToRefs(slidesStore)\r\n\r\n const { addHistorySnapshot } = useHistorySnapshot()\r\n\r\n const displayItemCount = computed(() => {\r\n let count = 0\r\n const groupIdList: string[] = []\r\n for (const el of activeElementList.value) {\r\n if (!el.groupId) count += 1\r\n else if (!groupIdList.includes(el.groupId)) {\r\n groupIdList.push(el.groupId)\r\n count += 1\r\n }\r\n }\r\n return count\r\n })\r\n // 水平均匀排列\r\n const uniformHorizontalDisplay = () => {\r\n const { minX, maxX } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n // 分别获取普通元素和组合元素集合,并记录下每一项的范围\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minX, maxX } = getElementRange(el)\r\n singleElemetList.push({ min: minX, max: maxX, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minX, maxX } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minX, max: maxX, els: groupItem.els })\r\n }\r\n\r\n // 将普通元素和组合元素集合组合在一起,然后将每一项按位置(从左到右)排序\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n // 计算元素均匀分布所需要的间隔:\r\n // (所选元素整体范围 - 所有所选元素宽度和) / (所选元素数 - 1)\r\n let totalWidth = 0\r\n for (const item of list) {\r\n const width = item.max - item.min\r\n totalWidth += width\r\n }\r\n const span = ((maxX - minX) - totalWidth) / (list.length - 1)\r\n\r\n // 按位置顺序依次计算每一个元素的目标位置\r\n // 第一项中的元素即为起点,无需计算\r\n // 从第二项开始,每一项的位置应该为:上一项位置 + 上一项宽度 + 间隔\r\n // 注意此处计算的位置(pos)并非元素最终的left值,而是目标位置范围最小值(元素旋转后的left值 ≠ 范围最小值)\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minX: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastWidth = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastWidth + span\r\n const currentWidth = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentWidth }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minX } = getElementRange(el)\r\n const offset = minX - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n // 根据目标位置计算元素最终目标left值\r\n // 对于旋转后的元素,需要计算旋转前后left的偏移来做校正\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetX } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.left = sortedItem.pos - offsetX\r\n }\r\n else element.left = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n slidesStore.updateSlide({ elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n // 垂直均匀排列(逻辑类似水平均匀排列方法)\r\n const uniformVerticalDisplay = () => {\r\n const { minY, maxY } = getElementListRange(activeElementList.value)\r\n const copyOfActiveElementList: PPTElement[] = JSON.parse(JSON.stringify(activeElementList.value))\r\n const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))\r\n\r\n const singleElemetList: ElementItem[] = []\r\n let groupList: GroupItem[] = []\r\n for (const el of copyOfActiveElementList) {\r\n if (!el.groupId) {\r\n const { minY, maxY } = getElementRange(el)\r\n singleElemetList.push({ min: minY, max: maxY, el })\r\n }\r\n else {\r\n const groupEl = groupList.find(item => item.groupId === el.groupId)\r\n if (!groupEl) groupList.push({ groupId: el.groupId, els: [el] })\r\n else {\r\n groupList = groupList.map(item => item.groupId === el.groupId ? { ...item, els: [...item.els, el] } : item)\r\n }\r\n }\r\n }\r\n const formatedGroupList: GroupElementsItem[] = []\r\n for (const groupItem of groupList) {\r\n const { minY, maxY } = getElementListRange(groupItem.els)\r\n formatedGroupList.push({ min: minY, max: maxY, els: groupItem.els })\r\n }\r\n\r\n const list: Item[] = [...singleElemetList, ...formatedGroupList]\r\n list.sort((itemA, itemB) => itemA.min - itemB.min)\r\n\r\n let totalHeight = 0\r\n for (const item of list) {\r\n const height = item.max - item.min\r\n totalHeight += height\r\n }\r\n const span = ((maxY - minY) - totalHeight) / (list.length - 1)\r\n\r\n const sortedElementData: ElementWithPos[] = []\r\n\r\n const firstItem = list[0]\r\n let lastPos: LastPos = { min: firstItem.min, max: firstItem.max }\r\n\r\n if ('el' in firstItem) {\r\n sortedElementData.push({ pos: firstItem.min, el: firstItem.el })\r\n }\r\n else {\r\n for (const el of firstItem.els) {\r\n const { minY: pos } = getElementRange(el)\r\n sortedElementData.push({ pos, el })\r\n }\r\n }\r\n\r\n for (let i = 1; i < list.length; i++) {\r\n const item = list[i]\r\n const lastHeight = lastPos.max - lastPos.min\r\n const currentPos = lastPos.min + lastHeight + span\r\n const currentHeight = item.max - item.min\r\n lastPos = { min: currentPos, max: currentPos + currentHeight }\r\n\r\n if ('el' in item) {\r\n sortedElementData.push({ pos: currentPos, el: item.el })\r\n }\r\n else {\r\n for (const el of item.els) {\r\n const { minY } = getElementRange(el)\r\n const offset = minY - item.min\r\n sortedElementData.push({ pos: currentPos + offset, el })\r\n }\r\n }\r\n }\r\n\r\n for (const element of newElementList) {\r\n if (!activeElementIdList.value.includes(element.id)) continue\r\n\r\n for (const sortedItem of sortedElementData) {\r\n if (sortedItem.el.id === element.id) {\r\n if ('rotate' in element && element.rotate) {\r\n const { offsetY } = getRectRotatedOffset({\r\n left: element.left,\r\n top: element.top,\r\n width: element.width,\r\n height: element.height,\r\n rotate: element.rotate,\r\n })\r\n element.top = sortedItem.pos - offsetY\r\n }\r\n else element.top = sortedItem.pos\r\n }\r\n }\r\n }\r\n\r\n slidesStore.updateSlide({ elements: newElementList })\r\n addHistorySnapshot()\r\n }\r\n\r\n return {\r\n displayItemCount,\r\n uniformHorizontalDisplay,\r\n uniformVerticalDisplay,\r\n }\r\n}","\nimport { defineComponent } from 'vue'\nimport { ElementAlignCommands } from '@/types/edit'\nimport useCombineElement from '@/hooks/useCombineElement'\nimport useAlignActiveElement from '@/hooks/useAlignActiveElement'\nimport useAlignElementToCanvas from '@/hooks/useAlignElementToCanvas'\nimport useUniformDisplayElement from '@/hooks/useUniformDisplayElement'\n\nexport default defineComponent({\n name: 'multi-position-panel',\n setup() {\n const { canCombine, combineElements, uncombineElements } = useCombineElement()\n const { alignActiveElement } = useAlignActiveElement()\n const { alignElementToCanvas } = useAlignElementToCanvas()\n const { displayItemCount, uniformHorizontalDisplay, uniformVerticalDisplay } = useUniformDisplayElement()\n\n // 多选元素对齐,需要先判断当前所选中的元素状态:\n // 如果所选元素为一组组合元素,则将它对齐到画布;\n // 如果所选元素不是组合元素或不止一组元素(即当前为可组合状态),则将这多个(多组)元素相互对齐。\n const alignElement = (command: ElementAlignCommands) => {\n if (canCombine.value) alignActiveElement(command)\n else alignElementToCanvas(command)\n }\n\n return {\n canCombine,\n displayItemCount,\n combineElements,\n uncombineElements,\n uniformHorizontalDisplay,\n uniformVerticalDisplay,\n alignElement,\n }\n },\n})\n","import { render } from \"./MultiPositionPanel.vue?vue&type=template&id=2e982d59&scoped=true&ts=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=2e982d59&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2e982d59\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8c5938\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"symbol-panel\" }\nconst _hoisted_2 = { class: \"tabs\" }\nconst _hoisted_3 = [\"onClick\"]\nconst _hoisted_4 = { class: \"pool\" }\nconst _hoisted_5 = [\"onClick\"]\nconst _hoisted_6 = { class: \"symbol\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolPoolList, (item) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"tab\", { 'active': _ctx.selectedSymbolKey === item.key }]),\n key: item.key,\n onClick: ($event: any) => (_ctx.selectedSymbolKey = item.key)\n }, _toDisplayString(item.label), 11, _hoisted_3))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.symbolPool, (item, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"symbol-item\",\n key: index,\n onClick: ($event: any) => (_ctx.selectSymbol(item))\n }, [\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(item), 1)\n ], 8, _hoisted_5))\n }), 128))\n ])\n ]))\n}","export const SYMBOL_LIST = [\n {\n key: 'letter',\n label: '字母',\n children: [\n 'α', 'β', 'γ', 'δ', 'ϵ', 'ε', 'ζ', 'η', 'θ', 'ϑ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'π', 'ϖ', 'ρ', 'ϱ', 'σ', 'ς', 'τ', 'υ', 'ϕ', 'φ', 'χ', 'ψ', 'ω', \n 'Γ', 'Δ', 'Θ', 'Λ', 'Ξ', 'Π', 'Σ', 'Υ', 'Φ', 'Ψ', 'Ω',\n '𝐀', '𝐁', '𝐂', '𝐃', '𝐄', '𝐅', '𝐆', '𝐇', '𝐈', '𝐉', '𝐊', '𝐋', '𝐌', '𝐍', '𝐎', '𝐏', '𝐐', '𝐑', '𝐒', '𝐓', '𝐔', '𝐕', '𝐖', '𝐗', '𝐘', '𝐙',\n '𝐚', '𝐛', '𝐜', '𝐝', '𝐞', '𝐟', '𝐠', '𝐡', '𝐢', '𝐣', '𝐤', '𝐥', '𝐦', '𝐧', '𝐨', '𝐩', '𝐪', '𝐫', '𝐬', '𝐭', '𝐮', '𝐯', '𝐰', '𝐱', '𝐲', '𝐳',\n '𝓐', '𝓑', '𝓒', '𝓓', '𝓔', '𝓕', '𝓖', '𝓗', '𝓘', '𝓙', '𝓚', '𝓛', '𝓜', '𝓝', '𝓞', '𝓟', '𝓠', '𝓡', '𝓢', '𝓣', '𝓤', '𝓥', '𝓦', '𝓧', '𝓨', '𝓩',\n '𝓪', '𝓫', '𝓬', '𝓭', '𝓮', '𝓯', '𝓰', '𝓱', '𝓲', '𝓳', '𝓴', '𝓵', '𝓶', '𝓷', '𝓸', '𝓹', '𝓺', '𝓻', '𝓼', '𝓽', '𝓾', '𝓿', '𝔀', '𝔁', '𝔂', '𝔃',\n ],\n },\n {\n key: 'number',\n label: '序号',\n children: [\n '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬', '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳',\n '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀', '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇',\n 'º', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹', '₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉',\n 'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', 'Ⅹ', 'Ⅺ', 'Ⅻ', 'Ⅼ', 'Ⅽ', 'Ⅾ', 'Ⅿ',\n 'ⅰ', 'ⅱ', 'ⅲ', 'ⅳ', 'ⅴ', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', 'ⅹ', 'ⅺ', 'ⅻ', 'ⅼ', 'ⅽ', 'ⅾ', 'ⅿ', 'ↀ', 'ↁ', 'ↂ',\n '㊀', '㊁', '㊂', '㊃', '㊄', '㊅', '㊆', '㊇', '㊈', '㊉', '㈠', '㈡', '㈢', '㈣', '㈤', '㈥', '㈦', '㈧', '㈨', '㈩',\n '𝟘', '𝟙', '𝟚', '𝟛', '𝟜', '𝟝', '𝟞', '𝟟', '𝟠', '𝟡',\n ],\n },\n {\n key: 'math',\n label: '数学',\n children: [\n '+', '-', '×', '÷', '=', '~', '¬', '±', '%', '°', 'ǃ', '‰', '‱', '½', '⅓', '⅔', '¼', '¾',\n '<', '>', 'l', 'o', 'g', 'l', 'g', 'l', 'n', '⨂', '⨁', '⨄', '⨃', '⨅', '⨆', '√', '∛', '∜', '∝', '∞',\n '∟', '∠', '∡', '∢', '∧', '∨', '∩', '∪', '∫', '∬', '∭', '∮', '∯', '∰', '∱', '∲', '∳',\n '∴', '∵', '∼', '∽', '∾', '∿', '≃', '≄', '≅', '≆', '≇', '≈', '≊', '≋', '≌', '≍', '≎', '≏', '≐', '≑', '≒', '≓', '≔', '≕',\n '≤', '≥', '≦', '≧', '≨', '≩', '≪', '≫', '≺', '≻', '≼', '≽', '≾', '≿', '⊀', '⊁', '⊂', '⊃', '⊄', '⊅', '⊆', '⊇', '⊈', '⊉', '⊊', '⊋', '⊏', '⊐', '⊑', '⊒',\n '⊓', '⊔', '⊢', '⊣', '⊤', '⊥', '⊦', '⊧', '⊨', '⊩', '⊪', '⊫', '⊬', '⊭', '⊮', '⊯', '⊲', '⊳', '⊴', '⊵', '⋀', '⋁', '⋂', '⋃', '⋉', '⋊',\n '⋋', '⋌', '⟨', '⟩', '⟪', '⟫', '⟮', '⟯', '⧼', '⧽', '⦰',\n ],\n },\n {\n key: 'arrow',\n label: '箭头',\n children: [\n '←', '↑', '→', '↓', '↔', '↕', '↖', '↗', '↘', '↙', '↚', '↛', '↜', '↝', '↞', '↟', '↠', '↡', '↢', '↣', '↤', '↥', '↦', '↧', '↨',\n '↫', '↬', '↭', '↮', '↯', '↰', '↱', '↲', '↳', '↴', '↵', '↶', '↷', '↸', '↹', '↺', '↻', '↼', '↽', '↾', '↿', '⇀', '⇁', '⇂', '⇃',\n '⇄', '⇅', '⇆', '⇇', '⇈', '⇉', '⇊', '⇋', '⇌', '⇍', '⇎', '⇏', '⇐', '⇑', '⇒', '⇓', '⇔', '⇕', '⇖', '⇗', '⇘', '⇙', '⇚', '⇛',\n '⇜', '⇝', '⇞', '⇟', '⇠', '⇡', '⇢', '⇣', '⇤', '⇥', '⇦', '⇧', '⇨', '⇩', '⇪', '⇫', '⇬', '⇭', '⇮', '⇯', '⇰', '⇱', '⇲', '⇳', '⇴', '⇵',\n '⇶', '⇷', '⇸', '⇹', '⇺', '⇻', '⇼', '⇽', '⇾', '⇿',\n ],\n },\n {\n key: 'graph',\n label: '图形',\n children: [\n '▢', '▣', '▤', '▥', '▦', '▧', '▨', '▩', '▭', '▮', '▯', '▰', '▱', '▲', '▷', '▼', '◁',\n '◈', '◉', '◍', '◐', '◑', '◒', '◓', '◔', '◕', '◧', '◨', '◩', '◪', '◫', '◬', '◭', '◮',\n ],\n },\n]","\nimport { computed, defineComponent, ref } from 'vue'\nimport { SYMBOL_LIST } from '@/configs/symbol'\nimport emitter, { EmitterEvents } from '@/utils/emitter'\n\nconst symbolPoolList = SYMBOL_LIST\n\nexport default defineComponent({\n name: 'symbol-panel',\n setup() {\n const selectedSymbolKey = ref(symbolPoolList[0].key)\n const symbolPool = computed(() => {\n const selectedSymbol = symbolPoolList.find(item => item.key === selectedSymbolKey.value)\n return selectedSymbol?.children || []\n })\n\n const selectSymbol = (item: string) => {\n emitter.emit(EmitterEvents.RICH_TEXT_COMMAND, { command: 'insert', value: item })\n }\n\n return {\n symbolPoolList,\n symbolPool,\n selectedSymbolKey,\n selectSymbol,\n }\n },\n})\n","import { render } from \"./SymbolPanel.vue?vue&type=template&id=6b8c5938&scoped=true&ts=true\"\nimport script from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./SymbolPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./SymbolPanel.vue?vue&type=style&index=0&id=6b8c5938&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6b8c5938\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useMainStore } from '@/store'\nimport { ToolbarStates } from '@/types/toolbar'\n\nimport ElementStylePanel from './ElementStylePanel/index.vue'\nimport ElementPositionPanel from './ElementPositionPanel.vue'\nimport ElementAnimationPanel from './ElementAnimationPanel.vue'\nimport SlideDesignPanel from './SlideDesignPanel.vue'\nimport SlideAnimationPanel from './SlideAnimationPanel.vue'\nimport MultiPositionPanel from './MultiPositionPanel.vue'\nimport SymbolPanel from './SymbolPanel.vue'\n\ninterface ElementTabs {\n label: string;\n value: ToolbarStates;\n}\n\nexport default defineComponent({\n name: 'toolbar',\n setup() {\n const mainStore = useMainStore()\n const { activeElementIdList, handleElement, toolbarState } = storeToRefs(mainStore)\n\n const elementTabs = computed(() => {\n if (handleElement.value?.type === 'text') {\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '符号', value: ToolbarStates.SYMBOL },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n }\n return [\n { label: '样式', value: ToolbarStates.EL_STYLE },\n { label: '位置', value: ToolbarStates.EL_POSITION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n })\n const slideTabs = [\n { label: '设计', value: ToolbarStates.SLIDE_DESIGN },\n { label: '切换', value: ToolbarStates.SLIDE_ANIMATION },\n { label: '动画', value: ToolbarStates.EL_ANIMATION },\n ]\n const multiSelectTabs = [\n { label: '位置', value: ToolbarStates.MULTI_POSITION },\n { label: '样式', value: ToolbarStates.EL_STYLE },\n ]\n\n const setToolbarState = (value: ToolbarStates) => {\n mainStore.setToolbarState(value)\n }\n\n const currentTabs = computed(() => {\n if (!activeElementIdList.value.length) return slideTabs\n else if (activeElementIdList.value.length > 1) return multiSelectTabs\n return elementTabs.value\n })\n\n watch(currentTabs, () => {\n const currentTabsValue: ToolbarStates[] = currentTabs.value.map(tab => tab.value)\n if (!currentTabsValue.includes(toolbarState.value)) {\n mainStore.setToolbarState(currentTabsValue[0])\n }\n })\n\n const currentPanelComponent = computed(() => {\n const panelMap = {\n [ToolbarStates.EL_STYLE]: ElementStylePanel,\n [ToolbarStates.EL_POSITION]: ElementPositionPanel,\n [ToolbarStates.EL_ANIMATION]: ElementAnimationPanel,\n [ToolbarStates.SLIDE_DESIGN]: SlideDesignPanel,\n [ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,\n [ToolbarStates.MULTI_POSITION]: MultiPositionPanel,\n [ToolbarStates.SYMBOL]: SymbolPanel,\n }\n return panelMap[toolbarState.value] || null\n })\n\n return {\n toolbarState,\n currentTabs,\n setToolbarState,\n currentPanelComponent,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=84601b0a&scoped=true&ts=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=84601b0a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-84601b0a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7ed67bb3\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"remark\" }\nconst _hoisted_2 = [\"value\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"resize-handler\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.resize($event))\n }, null, 32),\n _createElementVNode(\"textarea\", {\n value: _ctx.remark,\n placeholder: \"点击输入演讲者备注\",\n onInput: _cache[1] || (_cache[1] = $event => _ctx.handleInput($event))\n }, null, 40, _hoisted_2)\n ]))\n}","\nimport { computed, defineComponent } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\n\nexport default defineComponent({\n name: 'remark',\n emits: ['update:height'],\n props: {\n height: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const slidesStore = useSlidesStore()\n const { currentSlide } = storeToRefs(slidesStore)\n \n const remark = computed(() => currentSlide.value?.remark || '')\n\n const handleInput = (e: Event) => {\n const value = (e.target as HTMLTextAreaElement).value\n slidesStore.updateSlide({ 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=7ed67bb3&scoped=true&ts=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=7ed67bb3&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7ed67bb3\"]])\n\nexport default __exports__","\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&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-55178b6a\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-18f794c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"pptist-screen\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BaseView = _resolveComponent(\"BaseView\")!\n const _component_PresenterView = _resolveComponent(\"PresenterView\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.viewMode === 'base')\n ? (_openBlock(), _createBlock(_component_BaseView, {\n key: 0,\n changeViewMode: _ctx.changeViewMode\n }, null, 8, [\"changeViewMode\"]))\n : (_ctx.viewMode === 'presenter')\n ? (_openBlock(), _createBlock(_component_PresenterView, {\n key: 1,\n changeViewMode: _ctx.changeViewMode\n }, null, 8, [\"changeViewMode\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, createVNode as _createVNode, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2ed6935e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"tools-left\" }\nconst _hoisted_2 = { class: \"content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ScreenSlideList = _resolveComponent(\"ScreenSlideList\")!\n const _component_SlideThumbnails = _resolveComponent(\"SlideThumbnails\")!\n const _component_WritingBoardTool = _resolveComponent(\"WritingBoardTool\")!\n const _component_IconLeftTwo = _resolveComponent(\"IconLeftTwo\")!\n const _component_IconRightTwo = _resolveComponent(\"IconRightTwo\")!\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconMagic = _resolveComponent(\"IconMagic\")!\n const _component_IconListView = _resolveComponent(\"IconListView\")!\n const _component_IconOffScreenOne = _resolveComponent(\"IconOffScreenOne\")!\n const _component_IconFullScreenOne = _resolveComponent(\"IconFullScreenOne\")!\n const _component_IconPower = _resolveComponent(\"IconPower\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"base-view\", { 'laser-pen': _ctx.laserPen }])\n }, [\n _withDirectives(_createVNode(_component_ScreenSlideList, {\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen,\n onMousewheel: _cache[0] || (_cache[0] = $event => _ctx.mousewheelListener($event)),\n onTouchstart: _cache[1] || (_cache[1] = $event => _ctx.touchStartListener($event)),\n onTouchend: _cache[2] || (_cache[2] = $event => _ctx.touchEndListener($event))\n }, null, 8, [\"slideWidth\", \"slideHeight\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"]), [\n [_directive_contextmenu, _ctx.contextmenus]\n ]),\n (_ctx.slideThumbnailModelVisible)\n ? (_openBlock(), _createBlock(_component_SlideThumbnails, {\n key: 0,\n turnSlideToIndex: _ctx.turnSlideToIndex,\n onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.slideThumbnailModelVisible = false))\n }, null, 8, [\"turnSlideToIndex\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.writingBoardToolVisible)\n ? (_openBlock(), _createBlock(_component_WritingBoardTool, {\n key: 1,\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n onClose: _cache[4] || (_cache[4] = ($event: any) => (_ctx.writingBoardToolVisible = false))\n }, null, 8, [\"slideWidth\", \"slideHeight\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_IconLeftTwo, {\n class: \"tool-btn\",\n theme: \"two-tone\",\n fill: ['#111', '#fff'],\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.execPrev()))\n }),\n _createVNode(_component_IconRightTwo, {\n class: \"tool-btn\",\n theme: \"two-tone\",\n fill: ['#111', '#fff'],\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.execNext()))\n })\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"tools-right\", { 'visible': _ctx.rightToolsVisible }]),\n onMouseleave: _cache[14] || (_cache[14] = ($event: any) => (_ctx.rightToolsVisible = false)),\n onMouseenter: _cache[15] || (_cache[15] = ($event: any) => (_ctx.rightToolsVisible = true))\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: \"tool-btn page-number\",\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.slideThumbnailModelVisible = true))\n }, \"幻灯片 \" + _toDisplayString(_ctx.slideIndex + 1) + \" / \" + _toDisplayString(_ctx.slides.length), 1),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"画笔工具\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconWrite, {\n class: \"tool-btn\",\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.writingBoardToolVisible = true))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"激光笔\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconMagic, {\n class: _normalizeClass([\"tool-btn\", { 'active': _ctx.laserPen }]),\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.laserPen = !_ctx.laserPen))\n }, null, 8, [\"class\"])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"演讲者视图\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconListView, {\n class: \"tool-btn\",\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.changeViewMode('presenter')))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: _ctx.fullscreenState ? '退出全屏' : '进入全屏'\n }, {\n default: _withCtx(() => [\n (_ctx.fullscreenState)\n ? (_openBlock(), _createBlock(_component_IconOffScreenOne, {\n key: 0,\n class: \"tool-btn\",\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.manualExitFullscreen()))\n }))\n : (_openBlock(), _createBlock(_component_IconFullScreenOne, {\n key: 1,\n class: \"tool-btn\",\n onClick: _cache[12] || (_cache[12] = ($event: any) => (_ctx.enterFullscreen()))\n }))\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\", \"title\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"结束放映\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_IconPower, {\n class: \"tool-btn\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.exitScreening()))\n })\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ])\n ], 34)\n ], 2))\n}","import { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { throttle } from 'lodash'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { KEYS } from '@/configs/hotkey'\n\nimport { message } from 'ant-design-vue'\n\nexport default () => {\n const slidesStore = useSlidesStore()\n const { slides, slideIndex, currentSlide } = storeToRefs(slidesStore)\n\n // 当前页的元素动画列表和当前执行到的位置\n const animations = computed(() => currentSlide.value.animations || [])\n const animationIndex = ref(0)\n\n // 执行元素的入场动画\n const runAnimation = () => {\n const prefix = 'animate__'\n const animation = animations.value[animationIndex.value]\n animationIndex.value += 1\n\n const elRef = document.querySelector(`#screen-element-${animation.elId} [class^=base-element-]`)\n if (elRef) {\n const animationName = `${prefix}${animation.type}`\n document.documentElement.style.setProperty('--animate-duration', `${animation.duration}ms`)\n elRef.classList.add(`${prefix}animated`, animationName)\n\n const handleAnimationEnd = () => {\n document.documentElement.style.removeProperty('--animate-duration')\n elRef.classList.remove(`${prefix}animated`, animationName)\n }\n elRef.addEventListener('animationend', handleAnimationEnd, { once: true })\n }\n }\n\n // 关闭自动播放\n const autoPlayTimer = ref(0)\n const closeAutoPlay = () => {\n if (autoPlayTimer.value) {\n clearInterval(autoPlayTimer.value)\n autoPlayTimer.value = 0\n }\n }\n onUnmounted(closeAutoPlay)\n\n const throttleMassage = throttle(function(msg) {\n message.success(msg)\n }, 1000, { leading: true, trailing: false })\n\n // 向上/向下播放\n // 遇到元素动画时,优先执行动画播放,无动画则执行翻页\n // 向上播放遇到动画时,仅撤销到动画执行前的状态,不需要反向播放动画\n const execPrev = () => {\n if (animations.value.length && animationIndex.value > 0) {\n animationIndex.value -= 1\n }\n else if (slideIndex.value > 0) {\n slidesStore.updateSlideIndex(slideIndex.value - 1)\n const lastIndex = animations.value ? animations.value.length : 0\n animationIndex.value = lastIndex\n }\n else {\n throttleMassage('已经是第一页了')\n }\n }\n const execNext = () => {\n if (animations.value.length && animationIndex.value < animations.value.length) {\n runAnimation()\n }\n else if (slideIndex.value < slides.value.length - 1) {\n slidesStore.updateSlideIndex(slideIndex.value + 1)\n animationIndex.value = 0\n }\n else {\n throttleMassage('已经是最后一页了')\n closeAutoPlay()\n }\n }\n\n // 自动播放\n const autoPlay = () => {\n closeAutoPlay()\n message.success('开始自动放映')\n autoPlayTimer.value = setInterval(execNext, 2500)\n }\n\n // 鼠标滚动翻页\n const mousewheelListener = throttle(function(e: WheelEvent) {\n if (e.deltaY < 0) execPrev()\n else if (e.deltaY > 0) execNext()\n }, 500, { leading: true, trailing: false })\n\n // 触摸屏上下滑动翻页\n const touchInfo = ref<{ x: number; y: number; } | null>(null)\n\n const touchStartListener = (e: TouchEvent) => {\n touchInfo.value = {\n x: e.changedTouches[0].pageX,\n y: e.changedTouches[0].pageY,\n }\n }\n const touchEndListener = (e: TouchEvent) => {\n if (!touchInfo.value) return\n\n const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].pageX)\n const offsetY = e.changedTouches[0].pageY - touchInfo.value.y\n\n if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) {\n touchInfo.value = null\n\n if (offsetY > 0) execPrev()\n else execNext()\n }\n }\n\n // 快捷键翻页\n const keydownListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n\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(() => document.addEventListener('keydown', keydownListener))\n onUnmounted(() => document.removeEventListener('keydown', keydownListener))\n\n // 切换到上一张/上一张幻灯片(无视元素的入场动画)\n const turnPrevSlide = () => {\n slidesStore.updateSlideIndex(slideIndex.value - 1)\n animationIndex.value = 0\n }\n const turnNextSlide = () => {\n slidesStore.updateSlideIndex(slideIndex.value + 1)\n animationIndex.value = 0\n }\n\n // 切换幻灯片到指定的页面\n const turnSlideToIndex = (index: number) => {\n slidesStore.updateSlideIndex(index)\n animationIndex.value = 0\n }\n const turnSlideToId = (id: string) => {\n const index = slides.value.findIndex(slide => slide.id === id)\n if (index !== -1) {\n slidesStore.updateSlideIndex(index)\n animationIndex.value = 0\n }\n }\n\n return {\n autoPlayTimer,\n autoPlay,\n closeAutoPlay,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnPrevSlide,\n turnNextSlide,\n turnSlideToIndex,\n turnSlideToId,\n execPrev,\n execNext,\n animationIndex,\n }\n}","import { onMounted, onUnmounted, Ref, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\n\nexport default (wrapRef?: Ref) => {\n const slidesStore = useSlidesStore()\n const { viewportRatio } = storeToRefs(slidesStore)\n\n const slideWidth = ref(0)\n const slideHeight = ref(0)\n\n // 计算和更新幻灯片内容的尺寸(按比例自适应屏幕)\n const setSlideContentSize = () => {\n const slideWrapRef = wrapRef?.value || document.body\n const winWidth = slideWrapRef.clientWidth\n const winHeight = slideWrapRef.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 onMounted(() => {\n setSlideContentSize()\n window.addEventListener('resize', setSlideContentSize)\n })\n onUnmounted(() => {\n window.removeEventListener('resize', setSlideContentSize)\n })\n\n return {\n slideWidth,\n slideHeight,\n }\n}","import { onMounted, onUnmounted, ref } from 'vue'\nimport { isFullscreen, exitFullscreen } from '@/utils/fullscreen'\nimport useScreening from '@/hooks/useScreening'\n\nexport default () => {\n const fullscreenState = ref(true)\n const escExit = ref(true)\n\n const { exitScreening } = useScreening()\n\n const windowResizeListener = () => {\n fullscreenState.value = isFullscreen()\n if (!fullscreenState.value && escExit.value) exitScreening()\n\n escExit.value = true\n }\n\n onMounted(() => {\n fullscreenState.value = isFullscreen()\n window.addEventListener('resize', windowResizeListener)\n })\n onUnmounted(() => window.removeEventListener('resize', windowResizeListener))\n\n const manualExitFullscreen = () => {\n if (!fullscreenState.value) return\n escExit.value = false\n exitFullscreen()\n }\n\n return {\n fullscreenState,\n manualExitFullscreen,\n }\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-056764ac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"screen-slide-list\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ScreenSlide = _resolveComponent(\"ScreenSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\n 'slide-item', \n `turning-mode-${slide.turningMode || 'slideY'}`,\n {\n 'current': index === _ctx.slideIndex,\n 'before': index < _ctx.slideIndex,\n 'after': index > _ctx.slideIndex,\n 'hide': (index === _ctx.slideIndex - 1 || index === _ctx.slideIndex + 1) && slide.turningMode !== _ctx.currentSlide.turningMode,\n }\n ]),\n key: slide.id\n }, [\n (Math.abs(_ctx.slideIndex - index) < 2)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"slide-content\",\n style: _normalizeStyle({\n width: _ctx.slideWidth + 'px',\n height: _ctx.slideHeight + 'px',\n })\n }, [\n _createVNode(_component_ScreenSlide, {\n slide: slide,\n scale: _ctx.scale,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen\n }, null, 8, [\"slide\", \"scale\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"])\n ], 4))\n : _createCommentVNode(\"\", true)\n ], 2))\n }), 128))\n ]))\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ScreenElement = _resolveComponent(\"ScreenElement\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"screen-slide\",\n style: _normalizeStyle({\n width: _ctx.VIEWPORT_SIZE + 'px',\n height: _ctx.VIEWPORT_SIZE * _ctx.viewportRatio + 'px',\n transform: `scale(${_ctx.scale})`,\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"background\",\n style: _normalizeStyle({ ..._ctx.backgroundStyle })\n }, null, 4),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slide.elements, (element, index) => {\n return (_openBlock(), _createBlock(_component_ScreenElement, {\n key: element.id,\n elementInfo: element,\n elementIndex: index + 1,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen\n }, null, 8, [\"elementInfo\", \"elementIndex\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"]))\n }), 128))\n ], 4))\n}","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-360fef5f\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"id\", \"title\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"screen-element\", { 'link': _ctx.elementInfo.link }]),\n id: `screen-element-${_ctx.elementInfo.id}`,\n style: _normalizeStyle({\n zIndex: _ctx.elementIndex,\n color: _ctx.theme.fontColor,\n fontFamily: _ctx.theme.fontName,\n visibility: _ctx.needWaitAnimation ? 'hidden' : 'visible',\n }),\n title: _ctx.elementInfo.link?.target || '',\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.openLink()))\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.currentElementComponent), { elementInfo: _ctx.elementInfo }, null, 8, [\"elementInfo\"]))\n ], 14, _hoisted_1))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BaseChartElement = _resolveComponent(\"BaseChartElement\")!\n\n return (_openBlock(), _createBlock(_component_BaseChartElement, {\n class: \"screen-element-chart\",\n elementInfo: _ctx.elementInfo,\n needScaleSize: false\n }, null, 8, [\"elementInfo\"]))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { PPTChartElement } from '@/types/slides'\n\nimport BaseChartElement from './BaseChartElement.vue'\n\nexport default defineComponent({\n name: 'screen-element-chart',\n components: {\n BaseChartElement,\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=645e6419&ts=true\"\nimport script from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenChartElement.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0ef8b6c0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_VideoPlayer = _resolveComponent(\"VideoPlayer\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"screen-element-video\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.inCurrentSlide)\n ? (_openBlock(), _createBlock(_component_VideoPlayer, {\n key: 0,\n width: _ctx.elementInfo.width,\n height: _ctx.elementInfo.height,\n src: _ctx.elementInfo.src,\n poster: _ctx.elementInfo.poster,\n scale: _ctx.scale\n }, null, 8, [\"width\", \"height\", \"src\", \"poster\", \"scale\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 4)\n ], 4))\n}","\nimport { computed, defineComponent, inject, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { PPTVideoElement } from '@/types/slides'\nimport { injectKeySlideId, injectKeySlideScale } from '@/types/injectKey'\n\nimport VideoPlayer from './VideoPlayer/index.vue'\n\nexport default defineComponent({\n name: 'screen-element-video',\n components: {\n VideoPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup() {\n const { currentSlide } = storeToRefs(useSlidesStore())\n\n const scale = inject(injectKeySlideScale) || ref(1)\n const slideId = inject(injectKeySlideId) || ref('')\n\n const inCurrentSlide = computed(() => currentSlide.value.id === slideId.value)\n\n return {\n scale,\n inCurrentSlide,\n }\n },\n})\n","import { render } from \"./ScreenVideoElement.vue?vue&type=template&id=0ef8b6c0&scoped=true&ts=true\"\nimport script from \"./ScreenVideoElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenVideoElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenVideoElement.vue?vue&type=style&index=0&id=0ef8b6c0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0ef8b6c0\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1adba489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"element-content\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconVolumeNotice = _resolveComponent(\"IconVolumeNotice\")!\n const _component_AudioPlayer = _resolveComponent(\"AudioPlayer\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"screen-element-audio\",\n style: _normalizeStyle({\n top: _ctx.elementInfo.top + 'px',\n left: _ctx.elementInfo.left + 'px',\n width: _ctx.elementInfo.width + 'px',\n height: _ctx.elementInfo.height + 'px',\n })\n }, [\n _createElementVNode(\"div\", {\n class: \"rotate-wrapper\",\n style: _normalizeStyle({ transform: `rotate(${_ctx.elementInfo.rotate}deg)` })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_IconVolumeNotice, {\n class: \"audio-icon\",\n style: _normalizeStyle({\n fontSize: _ctx.audioIconSize,\n color: _ctx.elementInfo.color,\n }),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.toggle()))\n }, null, 8, [\"style\"]),\n (_ctx.inCurrentSlide)\n ? (_openBlock(), _createBlock(_component_AudioPlayer, {\n key: 0,\n class: \"audio-player\",\n ref: \"audioPlayerRef\",\n style: _normalizeStyle({ ..._ctx.audioPlayerPosition }),\n src: _ctx.elementInfo.src,\n loop: _ctx.elementInfo.loop,\n autoplay: _ctx.elementInfo.autoplay,\n scale: _ctx.scale\n }, null, 8, [\"style\", \"src\", \"loop\", \"autoplay\", \"scale\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 4)\n ], 4))\n}","\nimport { computed, defineComponent, inject, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { PPTAudioElement } from '@/types/slides'\nimport { injectKeySlideId, injectKeySlideScale } from '@/types/injectKey'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nimport AudioPlayer from './AudioPlayer.vue'\n\nexport default defineComponent({\n name: 'screen-element-audio',\n components: {\n AudioPlayer,\n },\n props: {\n elementInfo: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const { viewportRatio, currentSlide } = storeToRefs(useSlidesStore())\n\n const scale = inject(injectKeySlideScale) || ref(1)\n const slideId = inject(injectKeySlideId) || ref('')\n\n const inCurrentSlide = computed(() => currentSlide.value.id === slideId.value)\n\n const audioIconSize = computed(() => {\n return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'\n })\n const audioPlayerPosition = computed(() => {\n const canvasWidth = VIEWPORT_SIZE\n const canvasHeight = VIEWPORT_SIZE * viewportRatio.value\n\n const audioWidth = 280 / scale.value\n const audioHeight = 50 / scale.value\n\n const elWidth = props.elementInfo.width\n const elHeight = props.elementInfo.height\n const elLeft = props.elementInfo.left\n const elTop = props.elementInfo.top\n\n let left = 0\n let top = elHeight\n \n if (elLeft + audioWidth >= canvasWidth) left = elWidth - audioWidth\n if (elTop + elHeight + audioHeight >= canvasHeight) top = -audioHeight\n\n return {\n left: left + 'px',\n top: top + 'px',\n }\n })\n\n const audioPlayerRef = ref()\n const toggle = () => {\n if (!audioPlayerRef.value) return\n audioPlayerRef.value.toggle()\n }\n\n return {\n scale,\n inCurrentSlide,\n audioIconSize,\n audioPlayerPosition,\n audioPlayerRef,\n toggle,\n }\n },\n})\n","import { render } from \"./ScreenAudioElement.vue?vue&type=template&id=1adba489&scoped=true&ts=true\"\nimport script from \"./ScreenAudioElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenAudioElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenAudioElement.vue?vue&type=style&index=0&id=1adba489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1adba489\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\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 ScreenChartElement from '@/views/components/element/ChartElement/ScreenChartElement.vue'\nimport BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue'\nimport BaseLatexElement from '@/views/components/element/LatexElement/BaseLatexElement.vue'\nimport ScreenVideoElement from '@/views/components/element/VideoElement/ScreenVideoElement.vue'\nimport ScreenAudioElement from '@/views/components/element/AudioElement/ScreenAudioElement.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 turnSlideToId: {\n type: Function as PropType<(id: string) => void>,\n required: true,\n },\n manualExitFullscreen: {\n type: Function as PropType<() => void>,\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]: ScreenChartElement,\n [ElementTypes.TABLE]: BaseTableElement,\n [ElementTypes.LATEX]: BaseLatexElement,\n [ElementTypes.VIDEO]: ScreenVideoElement,\n [ElementTypes.AUDIO]: ScreenAudioElement,\n }\n return elementTypeMap[props.elementInfo.type] || null\n })\n\n const { currentSlide, theme } = storeToRefs(useSlidesStore())\n\n // 判断元素是否需要等待执行入场动画:等待执行的元素需要先隐藏\n const needWaitAnimation = computed(() => {\n const animations = currentSlide.value.animations || []\n const elementIndexInAnimation = animations.findIndex(animation => animation.elId === props.elementInfo.id)\n if (elementIndexInAnimation !== -1 && elementIndexInAnimation >= props.animationIndex) return true\n return false \n })\n\n // 打开元素绑定的超链接\n const openLink = () => {\n const link = props.elementInfo.link\n if (!link) return\n\n if (link.type === 'web') {\n props.manualExitFullscreen()\n window.open(link.target)\n }\n else if (link.type === 'slide') {\n props.turnSlideToId(link.target)\n }\n }\n\n return {\n currentElementComponent,\n needWaitAnimation,\n theme,\n openLink,\n }\n },\n})\n","import { render } from \"./ScreenElement.vue?vue&type=template&id=360fef5f&scoped=true&ts=true\"\nimport script from \"./ScreenElement.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenElement.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenElement.vue?vue&type=style&index=0&id=360fef5f&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-360fef5f\"]])\n\nexport default __exports__","\nimport { computed, PropType, defineComponent, provide } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { Slide } from '@/types/slides'\nimport { injectKeySlideId } from '@/types/injectKey'\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 turnSlideToId: {\n type: Function as PropType<(id: string) => void>,\n required: true,\n },\n manualExitFullscreen: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const { viewportRatio } = storeToRefs(useSlidesStore())\n\n const background = computed(() => props.slide.background)\n const { backgroundStyle } = useSlideBackgroundStyle(background)\n\n const slideId = computed(() => props.slide.id)\n provide(injectKeySlideId, slideId)\n\n return {\n backgroundStyle,\n VIEWPORT_SIZE,\n viewportRatio,\n }\n },\n})\n","import { render } from \"./ScreenSlide.vue?vue&type=template&id=30708559&scoped=true&ts=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=30708559&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-30708559\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType, provide } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { injectKeySlideScale } from '@/types/injectKey'\nimport { VIEWPORT_SIZE } from '@/configs/canvas'\n\nimport ScreenSlide from './ScreenSlide.vue'\n\nexport default defineComponent({\n name: 'screen-slide-list',\n components: {\n ScreenSlide,\n },\n props: {\n slideWidth: {\n type: Number,\n required: true,\n },\n slideHeight: {\n type: Number,\n required: true,\n },\n animationIndex: {\n type: Number,\n default: -1,\n },\n turnSlideToId: {\n type: Function as PropType<(id: string) => void>,\n required: true,\n },\n manualExitFullscreen: {\n type: Function as PropType<() => void>,\n required: true,\n },\n },\n setup(props) {\n const { slides, slideIndex, currentSlide } = storeToRefs(useSlidesStore())\n\n const scale = computed(() => props.slideWidth / VIEWPORT_SIZE)\n provide(injectKeySlideScale, scale)\n\n return {\n slides,\n slideIndex,\n currentSlide,\n scale,\n }\n },\n})\n","import { render } from \"./ScreenSlideList.vue?vue&type=template&id=056764ac&scoped=true&ts=true\"\nimport script from \"./ScreenSlideList.vue?vue&type=script&lang=ts\"\nexport * from \"./ScreenSlideList.vue?vue&type=script&lang=ts\"\n\nimport \"./ScreenSlideList.vue?vue&type=style&index=0&id=056764ac&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-056764ac\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-11e5b856\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"slide-thumbnails\" }\nconst _hoisted_2 = { class: \"return-button\" }\nconst _hoisted_3 = { class: \"slide-thumbnails-content\" }\nconst _hoisted_4 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconArrowCircleLeft = _resolveComponent(\"IconArrowCircleLeft\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_IconArrowCircleLeft, {\n class: \"icon\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.close()))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"thumbnail\", { 'active': index === _ctx.slideIndex }]),\n key: slide.id,\n onClick: ($event: any) => (_ctx.turnSlide(index))\n }, [\n _createVNode(_component_ThumbnailSlide, {\n slide: slide,\n size: 150,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"visible\"])\n ], 10, _hoisted_4))\n }), 128))\n ])\n ]))\n}","\nimport { defineComponent, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport useLoadSlides from '@/hooks/useLoadSlides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'slide-thumbnails',\n emits: ['close'],\n components: {\n ThumbnailSlide,\n },\n props: {\n turnSlideToIndex: {\n type: Function as PropType<(index: number) => void>,\n required: true,\n },\n },\n setup(props, { emit }) {\n const { slides, slideIndex } = storeToRefs(useSlidesStore())\n\n const { slidesLoadLimit } = useLoadSlides()\n\n const close = () => emit('close')\n\n const turnSlide = (index: number) => {\n props.turnSlideToIndex(index)\n close()\n }\n\n return {\n slides,\n slideIndex,\n slidesLoadLimit,\n turnSlide,\n close,\n }\n },\n})\n","import { render } from \"./SlideThumbnails.vue?vue&type=template&id=11e5b856&scoped=true&ts=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=11e5b856&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-11e5b856\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-19b10edd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"writing-board-tool\" }\nconst _hoisted_2 = { class: \"colors\" }\nconst _hoisted_3 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_WritingBoard = _resolveComponent(\"WritingBoard\")!\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_IconHighLight = _resolveComponent(\"IconHighLight\")!\n const _component_IconErase = _resolveComponent(\"IconErase\")!\n const _component_IconClear = _resolveComponent(\"IconClear\")!\n const _component_IconFill = _resolveComponent(\"IconFill\")!\n const _component_IconClose = _resolveComponent(\"IconClose\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"writing-board-wrap\",\n style: _normalizeStyle({\n width: _ctx.slideWidth + 'px',\n height: _ctx.slideHeight + 'px',\n })\n }, [\n _createVNode(_component_WritingBoard, {\n ref: \"writingBoardRef\",\n color: _ctx.writingBoardColor,\n blackboard: _ctx.blackboard,\n model: _ctx.writingBoardModel\n }, null, 8, [\"color\", \"blackboard\", \"model\"])\n ], 4),\n _createElementVNode(\"div\", {\n class: \"tools\",\n style: _normalizeStyle(_ctx.position)\n }, [\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"画笔\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.writingBoardModel === 'pen' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.changeModel('pen')))\n }, [\n _createVNode(_component_IconWrite, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"荧光笔\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.writingBoardModel === 'mark' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.changeModel('mark')))\n }, [\n _createVNode(_component_IconHighLight, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"橡皮擦\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.writingBoardModel === 'eraser' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.changeModel('eraser')))\n }, [\n _createVNode(_component_IconErase, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"清除墨迹\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.clearCanvas()))\n }, [\n _createVNode(_component_IconClear, { class: \"icon\" })\n ])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"黑板\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"btn\", { 'active': _ctx.blackboard }]),\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.blackboard = !_ctx.blackboard))\n }, [\n _createVNode(_component_IconFill, { class: \"icon\" })\n ], 2)\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.writingBoardColors, (color) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"color\", { 'active': color === _ctx.writingBoardColor }]),\n key: color,\n style: _normalizeStyle({ backgroundColor: color }),\n onClick: ($event: any) => (_ctx.changeColor(color))\n }, null, 14, _hoisted_3))\n }), 128))\n ]),\n _createVNode(_component_Tooltip, {\n mouseLeaveDelay: 0,\n mouseEnterDelay: 0.3,\n title: \"关闭画笔\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"btn\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.closeWritingBoard()))\n }, [\n _createVNode(_component_IconClose, { class: \"icon\" })\n ])\n ]),\n _: 1\n }, 8, [\"mouseEnterDelay\"])\n ], 4)\n ]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3dfd4579\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"writing-board\",\n ref: \"writingBoardRef\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"blackboard\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_IconHighLight = _resolveComponent(\"IconHighLight\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.blackboard)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"canvas\", {\n class: \"canvas\",\n ref: \"canvasRef\",\n style: _normalizeStyle({\n width: _ctx.canvasWidth + 'px',\n height: _ctx.canvasHeight + 'px',\n }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMousedown($event)),\n onMousemove: _cache[1] || (_cache[1] = $event => _ctx.handleMousemove($event)),\n onMouseup: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleMouseup())),\n onTouchstart: _cache[3] || (_cache[3] = $event => _ctx.handleMousedown($event)),\n onTouchmove: _cache[4] || (_cache[4] = $event => _ctx.handleMousemove($event)),\n onTouchend: _cache[5] || (_cache[5] = ($event: any) => {_ctx.handleMouseup(); _ctx.mouseInCanvas = false}),\n onMouseleave: _cache[6] || (_cache[6] = ($event: any) => {_ctx.handleMouseup(); _ctx.mouseInCanvas = false}),\n onMouseenter: _cache[7] || (_cache[7] = ($event: any) => (_ctx.mouseInCanvas = true))\n }, null, 36),\n (_ctx.mouseInCanvas)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n (_ctx.model === 'eraser')\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"eraser\",\n style: _normalizeStyle({\n left: _ctx.mouse.x - _ctx.rubberSize / 2 + 'px',\n top: _ctx.mouse.y - _ctx.rubberSize / 2 + 'px',\n width: _ctx.rubberSize + 'px',\n height: _ctx.rubberSize + 'px',\n })\n }, null, 4))\n : _createCommentVNode(\"\", true),\n (_ctx.model === 'pen')\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"pen\",\n style: _normalizeStyle({\n left: _ctx.mouse.x - _ctx.penSize / 2 + 'px',\n top: _ctx.mouse.y - 36 + _ctx.penSize / 2 + 'px',\n color: _ctx.color,\n })\n }, [\n (_ctx.model === 'pen')\n ? (_openBlock(), _createBlock(_component_IconWrite, {\n key: 0,\n class: \"icon\",\n size: \"36\"\n }))\n : _createCommentVNode(\"\", true)\n ], 4))\n : _createCommentVNode(\"\", true),\n (_ctx.model === 'mark')\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"pen\",\n style: _normalizeStyle({\n left: _ctx.mouse.x - _ctx.markSize / 2 + 'px',\n top: _ctx.mouse.y + 'px',\n color: _ctx.color,\n })\n }, [\n (_ctx.model === 'mark')\n ? (_openBlock(), _createBlock(_component_IconHighLight, {\n key: 0,\n class: \"icon\",\n size: \"36\"\n }))\n : _createCommentVNode(\"\", true)\n ], 4))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 512))\n}","\nimport { computed, defineComponent, onMounted, onUnmounted, PropType, ref, watch } from 'vue'\n\nconst penSize = 6\nconst rubberSize = 80\nconst markSize = 25\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' | 'mark'>,\n default: 'pen',\n },\n blackboard: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n let ctx: CanvasRenderingContext2D | null = null\n const writingBoardRef = ref()\n const canvasRef = ref()\n\n let lastPos = {\n x: 0,\n y: 0,\n }\n let isMouseDown = false\n let lastTime = 0\n let lastLineWidth = -1\n\n // 鼠标位置坐标:用于画笔或橡皮位置跟随\n const mouse = ref({\n x: 0,\n y: 0,\n })\n \n // 鼠标是否处在画布范围内:处在范围内才会显示画笔或橡皮\n const mouseInCanvas = ref(false)\n\n // 监听更新canvas尺寸\n const canvasWidth = ref(0)\n const canvasHeight = ref(0)\n\n const widthScale = computed(() => canvasRef.value ? canvasWidth.value / canvasRef.value.width : 1)\n const heightScale = computed(() => canvasRef.value ? canvasHeight.value / canvasRef.value.height : 1)\n\n const updateCanvasSize = () => {\n if (!writingBoardRef.value) return\n canvasWidth.value = writingBoardRef.value.clientWidth\n canvasHeight.value = writingBoardRef.value.clientHeight\n }\n const resizeObserver = new ResizeObserver(updateCanvasSize)\n onMounted(() => {\n if (writingBoardRef.value) resizeObserver.observe(writingBoardRef.value)\n })\n onUnmounted(() => {\n if (writingBoardRef.value) resizeObserver.unobserve(writingBoardRef.value)\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 ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n }\n onMounted(initCanvas)\n\n // 切换画笔模式时,更新 canvas ctx 配置\n const updateCtx = () => {\n if (!ctx) return\n if (props.model === 'mark') {\n ctx.globalCompositeOperation = 'xor'\n ctx.globalAlpha = 0.5\n }\n else if (props.model === 'pen') {\n ctx.globalCompositeOperation = 'source-over'\n ctx.globalAlpha = 1\n }\n }\n watch(() => props.model, updateCtx)\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 if (props.model === 'mark') draw(x, y, markSize)\n else erase(x, y)\n\n lastPos = { x, y }\n lastTime = new Date().getTime()\n }\n\n // 获取鼠标在canvas中的相对位置\n const getMouseOffsetPosition = (e: MouseEvent | TouchEvent) => {\n if (!canvasRef.value) return [0, 0]\n const event = e instanceof MouseEvent ? e : e.changedTouches[0]\n const canvasRect = canvasRef.value.getBoundingClientRect()\n const x = event.pageX - canvasRect.x\n const y = event.pageY - canvasRect.y\n return [x, y]\n }\n\n // 处理鼠标(触摸)事件\n // 准备开始绘制/擦除墨迹(落笔)\n const handleMousedown = (e: MouseEvent | TouchEvent) => {\n const [mouseX, mouseY] = getMouseOffsetPosition(e)\n const x = mouseX / widthScale.value\n const y = mouseY / heightScale.value\n\n isMouseDown = true\n lastPos = { x, y }\n lastTime = new Date().getTime()\n\n if (e instanceof TouchEvent) {\n mouse.value = { x: mouseX, y: mouseY }\n mouseInCanvas.value = true\n }\n }\n\n // 开始绘制/擦除墨迹(移动)\n const handleMousemove = (e: MouseEvent | TouchEvent) => {\n const [mouseX, mouseY] = getMouseOffsetPosition(e)\n const x = mouseX / widthScale.value\n const y = mouseY / heightScale.value\n\n mouse.value = { x: mouseX, y: mouseY }\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 markSize,\n writingBoardRef,\n canvasRef,\n canvasWidth,\n canvasHeight,\n handleMousedown,\n handleMousemove,\n handleMouseup,\n clearCanvas,\n }\n },\n})\n","import { render } from \"./WritingBoard.vue?vue&type=template&id=3dfd4579&scoped=true&ts=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=3dfd4579&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3dfd4579\"]])\n\nexport default __exports__","\nimport { defineComponent, PropType, ref } from 'vue'\nimport WritingBoard from '@/components/WritingBoard.vue'\n\nconst writingBoardColors = ['#000000', '#ffffff', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c', '#ffff3a']\n\ninterface Position {\n left?: number | string;\n right?: number | string;\n top?: number | string;\n bottom?: number | string;\n}\n\ntype WritingBoardModel = 'pen' | 'mark' | 'eraser'\n\nexport default defineComponent({\n name: 'writing-board-tool',\n emits: ['close'],\n components: {\n WritingBoard,\n },\n props: {\n slideWidth: {\n type: Number,\n required: true,\n },\n slideHeight: {\n type: Number,\n required: true,\n },\n position: {\n type: Object as PropType,\n default: () => ({\n right: '5px',\n bottom: '5px',\n })\n },\n },\n setup(props, { emit }) {\n const writingBoardRef = ref()\n const writingBoardColor = ref('#e2534d')\n const writingBoardModel = ref('pen')\n const blackboard = ref(false)\n\n const changeModel = (model: WritingBoardModel) => {\n writingBoardModel.value = model\n }\n\n // 清除画布上的墨迹\n const clearCanvas = () => {\n writingBoardRef.value.clearCanvas()\n }\n\n // 修改画笔颜色,如果当前处于橡皮状态则先切换到画笔状态\n const changeColor = (color: string) => {\n if (writingBoardModel.value === 'eraser') writingBoardModel.value = 'pen'\n writingBoardColor.value = color\n }\n \n // 关闭写字板\n const closeWritingBoard = () => {\n emit('close')\n }\n\n return {\n writingBoardRef,\n writingBoardColors,\n writingBoardColor,\n writingBoardModel,\n blackboard,\n changeModel,\n clearCanvas,\n changeColor,\n closeWritingBoard,\n }\n },\n})\n","import { render } from \"./WritingBoardTool.vue?vue&type=template&id=19b10edd&scoped=true&ts=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=19b10edd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-19b10edd\"]])\n\nexport default __exports__","\nimport { defineComponent, PropType, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { enterFullscreen } from '@/utils/fullscreen'\nimport useScreening from '@/hooks/useScreening'\nimport useExecPlay from './hooks/useExecPlay'\nimport useSlideSize from './hooks/useSlideSize'\nimport useFullscreen from './hooks/useFullscreen'\n\nimport ScreenSlideList from './ScreenSlideList.vue'\nimport SlideThumbnails from './SlideThumbnails.vue'\nimport WritingBoardTool from './WritingBoardTool.vue'\n\nexport default defineComponent({\n name: 'screen',\n components: {\n ScreenSlideList,\n SlideThumbnails,\n WritingBoardTool,\n },\n props: {\n changeViewMode: {\n type: Function as PropType<(mode: 'base' | 'presenter') => void>,\n required: true,\n },\n },\n setup(props) {\n const { slides, slideIndex } = storeToRefs(useSlidesStore())\n\n const {\n autoPlayTimer,\n autoPlay,\n closeAutoPlay,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnPrevSlide,\n turnNextSlide,\n turnSlideToIndex,\n turnSlideToId,\n execPrev,\n execNext,\n animationIndex,\n } = useExecPlay()\n\n const { slideWidth, slideHeight } = useSlideSize()\n const { exitScreening } = useScreening()\n const { fullscreenState, manualExitFullscreen } = useFullscreen()\n\n const rightToolsVisible = ref(false)\n const writingBoardToolVisible = ref(false)\n const slideThumbnailModelVisible = ref(false)\n const laserPen = ref(false)\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 handler: () => rightToolsVisible.value = true,\n },\n {\n text: '查看所有幻灯片',\n handler: () => slideThumbnailModelVisible.value = true,\n },\n {\n text: '画笔工具',\n handler: () => writingBoardToolVisible.value = true,\n },\n {\n text: '演讲者视图',\n handler: () => props.changeViewMode('presenter'),\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 return {\n slides,\n slideIndex,\n slideWidth,\n slideHeight,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n animationIndex,\n contextmenus,\n execPrev,\n execNext,\n turnSlideToIndex,\n turnSlideToId,\n slideThumbnailModelVisible,\n writingBoardToolVisible,\n rightToolsVisible,\n fullscreenState,\n exitScreening,\n enterFullscreen,\n manualExitFullscreen,\n laserPen,\n }\n },\n})\n","import { render } from \"./BaseView.vue?vue&type=template&id=2ed6935e&scoped=true&ts=true\"\nimport script from \"./BaseView.vue?vue&type=script&lang=ts\"\nexport * from \"./BaseView.vue?vue&type=script&lang=ts\"\n\nimport \"./BaseView.vue?vue&type=style&index=0&id=2ed6935e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2ed6935e\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveDirective as _resolveDirective, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4887c6d4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"presenter-view\" }\nconst _hoisted_2 = { class: \"toolbar\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"普通视图\", -1))\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"画笔\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"激光笔\", -1))\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"结束放映\", -1))\nconst _hoisted_7 = { class: \"content\" }\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { class: \"remark\" }\nconst _hoisted_10 = { class: \"header\" }\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", null, \"演讲者备注\", -1))\nconst _hoisted_12 = [\"innerHTML\"]\nconst _hoisted_13 = { class: \"remark-scale\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_IconListView = _resolveComponent(\"IconListView\")!\n const _component_IconWrite = _resolveComponent(\"IconWrite\")!\n const _component_IconMagic = _resolveComponent(\"IconMagic\")!\n const _component_IconOffScreenOne = _resolveComponent(\"IconOffScreenOne\")!\n const _component_Divider = _resolveComponent(\"Divider\")!\n const _component_IconPower = _resolveComponent(\"IconPower\")!\n const _component_ScreenSlideList = _resolveComponent(\"ScreenSlideList\")!\n const _component_WritingBoardTool = _resolveComponent(\"WritingBoardTool\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n const _component_IconMinus = _resolveComponent(\"IconMinus\")!\n const _component_IconPlus = _resolveComponent(\"IconPlus\")!\n const _directive_contextmenu = _resolveDirective(\"contextmenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: \"tool-btn\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.changeViewMode('base')))\n }, [\n _createVNode(_component_IconListView, { class: \"tool-icon\" }),\n _hoisted_3\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"tool-btn\", { 'active': _ctx.writingBoardToolVisible }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.writingBoardToolVisible = !_ctx.writingBoardToolVisible))\n }, [\n _createVNode(_component_IconWrite, { class: \"tool-icon\" }),\n _hoisted_4\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"tool-btn\", { 'active': _ctx.laserPen }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.laserPen = !_ctx.laserPen))\n }, [\n _createVNode(_component_IconMagic, { class: \"tool-icon\" }),\n _hoisted_5\n ], 2),\n _createElementVNode(\"div\", {\n class: \"tool-btn\",\n onClick: _cache[3] || (_cache[3] = () => _ctx.fullscreenState ? _ctx.manualExitFullscreen() : _ctx.enterFullscreen())\n }, [\n (_ctx.fullscreenState)\n ? (_openBlock(), _createBlock(_component_IconOffScreenOne, {\n key: 0,\n class: \"tool-icon\"\n }))\n : (_openBlock(), _createBlock(_component_IconOffScreenOne, {\n key: 1,\n class: \"tool-icon\"\n })),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.fullscreenState ? '退出全屏' : '全屏'), 1)\n ]),\n _createVNode(_component_Divider, { class: \"divider\" }),\n _createElementVNode(\"div\", {\n class: \"tool-btn\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.exitScreening()))\n }, [\n _createVNode(_component_IconPower, { class: \"tool-icon\" }),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"slide-list-wrap\", { 'laser-pen': _ctx.laserPen }]),\n ref: \"slideListWrapRef\"\n }, [\n _withDirectives(_createVNode(_component_ScreenSlideList, {\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n animationIndex: _ctx.animationIndex,\n turnSlideToId: _ctx.turnSlideToId,\n manualExitFullscreen: _ctx.manualExitFullscreen,\n onMousewheel: _cache[5] || (_cache[5] = $event => _ctx.mousewheelListener($event)),\n onTouchstart: _cache[6] || (_cache[6] = $event => _ctx.touchStartListener($event)),\n onTouchend: _cache[7] || (_cache[7] = $event => _ctx.touchEndListener($event))\n }, null, 8, [\"slideWidth\", \"slideHeight\", \"animationIndex\", \"turnSlideToId\", \"manualExitFullscreen\"]), [\n [_directive_contextmenu, _ctx.contextmenus]\n ]),\n (_ctx.writingBoardToolVisible)\n ? (_openBlock(), _createBlock(_component_WritingBoardTool, {\n key: 0,\n slideWidth: _ctx.slideWidth,\n slideHeight: _ctx.slideHeight,\n position: {\n left: '75px',\n top: '5px',\n },\n onClose: _cache[8] || (_cache[8] = ($event: any) => (_ctx.writingBoardToolVisible = false))\n }, null, 8, [\"slideWidth\", \"slideHeight\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: \"thumbnails\",\n ref: \"thumbnailsRef\",\n onMousewheel: _cache[9] || (_cache[9] = _withModifiers($event => _ctx.handleMousewheelThumbnails($event), [\"prevent\"]))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"thumbnail\", { 'active': index === _ctx.slideIndex }]),\n key: slide.id,\n onClick: ($event: any) => (_ctx.turnSlideToIndex(index))\n }, [\n _createVNode(_component_ThumbnailSlide, {\n slide: slide,\n size: 120 / _ctx.viewportRatio,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"size\", \"visible\"])\n ], 10, _hoisted_8))\n }), 128))\n ], 544)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"span\", null, \"P \" + _toDisplayString(_ctx.slideIndex + 1) + \" / \" + _toDisplayString(_ctx.slides.length), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"remark-content\",\n style: _normalizeStyle({ fontSize: _ctx.remarkFontSize + 'px' }),\n innerHTML: _ctx.currentSlideRemark\n }, null, 12, _hoisted_12),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", {\n class: _normalizeClass(['scale-btn', { 'disable': _ctx.remarkFontSize === 12 }]),\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.setRemarkFontSize(_ctx.remarkFontSize - 2)))\n }, [\n _createVNode(_component_IconMinus)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass(['scale-btn', { 'disable': _ctx.remarkFontSize === 40 }]),\n onClick: _cache[11] || (_cache[11] = ($event: any) => (_ctx.setRemarkFontSize(_ctx.remarkFontSize + 2)))\n }, [\n _createVNode(_component_IconPlus)\n ], 2)\n ])\n ])\n ]))\n}","\nimport { computed, defineComponent, nextTick, ref, watch, PropType } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport { ContextmenuItem } from '@/components/Contextmenu/types'\nimport { enterFullscreen } from '@/utils/fullscreen'\nimport { parseText2Paragraphs } from '@/utils/textParser'\nimport useScreening from '@/hooks/useScreening'\nimport useLoadSlides from '@/hooks/useLoadSlides'\nimport useExecPlay from './hooks/useExecPlay'\nimport useSlideSize from './hooks/useSlideSize'\nimport useFullscreen from './hooks/useFullscreen'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\nimport ScreenSlideList from './ScreenSlideList.vue'\nimport WritingBoardTool from './WritingBoardTool.vue'\n\nexport default defineComponent({\n name: 'presenter-view',\n components: {\n ScreenSlideList,\n ThumbnailSlide,\n WritingBoardTool,\n },\n props: {\n changeViewMode: {\n type: Function as PropType<(mode: 'base' | 'presenter') => void>,\n required: true,\n },\n },\n setup(props) {\n const { slides, slideIndex, viewportRatio, currentSlide } = storeToRefs(useSlidesStore())\n\n const slideListWrapRef = ref()\n const thumbnailsRef = ref()\n const writingBoardToolVisible = ref(false)\n const laserPen = ref(false)\n\n const {\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnPrevSlide,\n turnNextSlide,\n turnSlideToIndex,\n turnSlideToId,\n animationIndex,\n } = useExecPlay()\n\n const { slideWidth, slideHeight } = useSlideSize(slideListWrapRef)\n const { exitScreening } = useScreening()\n const { slidesLoadLimit } = useLoadSlides()\n const { fullscreenState, manualExitFullscreen } = useFullscreen()\n\n const remarkFontSize = ref(16)\n const currentSlideRemark = computed(() => {\n return parseText2Paragraphs(currentSlide.value.remark || '无备注')\n })\n\n const handleMousewheelThumbnails = (e: WheelEvent) => {\n if (!thumbnailsRef.value) return\n thumbnailsRef.value.scrollBy(e.deltaY, 0)\n }\n\n const setRemarkFontSize = (fontSize: number) => {\n if (fontSize < 12 || fontSize > 40) return\n remarkFontSize.value = fontSize\n }\n\n watch(slideIndex, () => {\n nextTick(() => {\n if (!thumbnailsRef.value) return\n\n const activeThumbnailRef: HTMLElement | null = thumbnailsRef.value.querySelector('.thumbnail.active')\n if (!activeThumbnailRef) return\n\n const width = thumbnailsRef.value.offsetWidth\n const offsetLeft = activeThumbnailRef.offsetLeft\n thumbnailsRef.value.scrollTo({ left: offsetLeft - width / 2, behavior: 'smooth' })\n })\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 handler: () => writingBoardToolVisible.value = true,\n },\n {\n text: '普通视图',\n handler: () => props.changeViewMode('base'),\n },\n { divider: true },\n {\n text: '结束放映',\n subText: 'ESC',\n handler: exitScreening,\n },\n ]\n }\n\n return {\n slides,\n slideIndex,\n viewportRatio,\n remarkFontSize,\n currentSlideRemark,\n setRemarkFontSize,\n slideListWrapRef,\n thumbnailsRef,\n slideWidth,\n slideHeight,\n animationIndex,\n turnSlideToId,\n mousewheelListener,\n touchStartListener,\n touchEndListener,\n turnSlideToIndex,\n contextmenus,\n slidesLoadLimit,\n handleMousewheelThumbnails,\n exitScreening,\n fullscreenState,\n enterFullscreen,\n manualExitFullscreen,\n writingBoardToolVisible,\n laserPen,\n }\n },\n})\n","import { render } from \"./PresenterView.vue?vue&type=template&id=4887c6d4&scoped=true&ts=true\"\nimport script from \"./PresenterView.vue?vue&type=script&lang=ts\"\nexport * from \"./PresenterView.vue?vue&type=script&lang=ts\"\n\nimport \"./PresenterView.vue?vue&type=style&index=0&id=4887c6d4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4887c6d4\"]])\n\nexport default __exports__","\nimport { defineComponent, onMounted, onUnmounted, ref } from 'vue'\nimport { KEYS } from '@/configs/hotkey'\nimport useScreening from '@/hooks/useScreening'\n\nimport BaseView from './BaseView.vue'\nimport PresenterView from './PresenterView.vue'\n\nexport default defineComponent({\n name: 'pptist-screen',\n components: {\n BaseView,\n PresenterView,\n },\n setup() {\n const viewMode = ref<'base' | 'presenter'>('base')\n\n const changeViewMode = (mode: 'base' | 'presenter') => {\n viewMode.value = mode\n }\n\n const { exitScreening } = useScreening()\n\n // 快捷键退出放映\n const keydownListener = (e: KeyboardEvent) => {\n const key = e.key.toUpperCase()\n if (key === KEYS.ESC) exitScreening()\n }\n\n onMounted(() => document.addEventListener('keydown', keydownListener))\n onUnmounted(() => document.removeEventListener('keydown', keydownListener))\n\n return {\n viewMode,\n changeViewMode,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=18f794c8&scoped=true&ts=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=18f794c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-18f794c8\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72b587f9\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"mobile\",\n ref: \"mobileRef\"\n}\nconst _hoisted_2 = { class: \"thumbnail-list\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Alert = _resolveComponent(\"Alert\")!\n const _component_ThumbnailSlide = _resolveComponent(\"ThumbnailSlide\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Alert, {\n class: \"tip\",\n message: \"注意\",\n description: \"移动设备下仅支持预览,请在PC上进行编辑\",\n type: \"warning\",\n closable: \"\",\n \"show-icon\": \"\"\n }),\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slides, (slide, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"thumbnail-item\",\n key: slide.id\n }, [\n _createVNode(_component_ThumbnailSlide, {\n slide: slide,\n size: _ctx.slideWidth,\n visible: index < _ctx.slidesLoadLimit\n }, null, 8, [\"slide\", \"size\", \"visible\"])\n ]))\n }), 128))\n ])\n ], 512))\n}","\nimport { defineComponent, onMounted, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useSlidesStore } from '@/store'\nimport useScreening from '@/hooks/useScreening'\nimport useLoadSlides from '@/hooks/useLoadSlides'\n\nimport ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'\n\nexport default defineComponent({\n name: 'thumbnails',\n components: {\n ThumbnailSlide,\n },\n setup() {\n const { slides } = storeToRefs(useSlidesStore())\n\n const { slidesLoadLimit } = useLoadSlides()\n const { enterScreening } = useScreening()\n\n const mobileRef = ref()\n const slideWidth = ref(0)\n\n onMounted(() => {\n if (!mobileRef.value) return\n slideWidth.value = mobileRef.value.clientWidth - 10\n })\n\n return {\n slides,\n slidesLoadLimit,\n mobileRef,\n slideWidth,\n enterScreening,\n }\n },\n})\n","import { render } from \"./Mobile.vue?vue&type=template&id=72b587f9&scoped=true&ts=true\"\nimport script from \"./Mobile.vue?vue&type=script&lang=ts\"\nexport * from \"./Mobile.vue?vue&type=script&lang=ts\"\n\nimport \"./Mobile.vue?vue&type=style&index=0&id=72b587f9&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-72b587f9\"]])\n\nexport default __exports__","\nimport { defineComponent, onMounted } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useScreenStore, useMainStore, useSnapshotStore } from '@/store'\nimport { isPC } from './utils/common'\n\nimport Editor from './views/Editor/index.vue'\nimport Screen from './views/Screen/index.vue'\nimport Mobile from './views/Mobile.vue'\n\nexport default defineComponent({\n name: 'app',\n components: {\n Editor,\n Screen,\n Mobile,\n },\n setup() {\n const mainStore = useMainStore()\n const snapshotStore = useSnapshotStore()\n const { screening } = storeToRefs(useScreenStore())\n\n if (process.env.NODE_ENV === 'production') {\n window.onbeforeunload = () => false\n }\n\n onMounted(() => {\n snapshotStore.initSnapshotDatabase()\n mainStore.setAvailableFonts()\n })\n\n return {\n screening,\n isPC: isPC(),\n }\n },\n})\n","import { render } from \"./App.vue?vue&type=template&id=039e9a08&ts=true\"\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=039e9a08&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// 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 ChartLineArea,\n ChartRing,\n ChartScatter,\n ChartLine,\n ChartPie,\n Text,\n Rotate,\n LeftTwo,\n RightTwo,\n Platte,\n UpOne,\n DownOne,\n Close,\n CloseSmall,\n Undo,\n Transform,\n Click,\n Theme,\n ArrowCircleLeft,\n GraphicDesign,\n Logout,\n Erase,\n Clear,\n FolderClose,\n AlignTextTopOne,\n AlignTextBottomOne,\n AlignTextMiddleOne,\n Pause,\n VolumeMute,\n VolumeNotice,\n VolumeSmall,\n VideoTwo,\n Formula,\n LinkOne,\n FullScreenOne,\n OffScreenOne,\n Power,\n ListView,\n Magic,\n HighLight,\n} from '@icon-park/vue-next'\n\nconst icons = {\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 ChartLineArea,\n ChartRing,\n ChartScatter,\n ChartLine,\n ChartPie,\n Text,\n Rotate,\n LeftTwo,\n RightTwo,\n Platte,\n UpOne,\n DownOne,\n Close,\n CloseSmall,\n Undo,\n Transform,\n Click,\n Theme,\n ArrowCircleLeft,\n GraphicDesign,\n Logout,\n Erase,\n Clear,\n FolderClose,\n AlignTextTopOne,\n AlignTextBottomOne,\n AlignTextMiddleOne,\n Pause,\n VolumeMute,\n VolumeNotice,\n VolumeSmall,\n VideoTwo,\n Formula,\n LinkOne,\n FullScreenOne,\n OffScreenOne,\n Power,\n ListView,\n Magic,\n HighLight,\n}\n\nexport default {\n install(app: App) {\n for (const key of Object.keys(icons)) {\n app.component(`Icon${key}`, icons[key])\n }\n }\n}","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0a87e9c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"accept\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"file-input\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.handleClick()))\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true),\n _createElementVNode(\"input\", {\n class: \"input\",\n type: \"file\",\n name: \"upload\",\n ref: \"inputRef\",\n accept: _ctx.accept,\n onChange: _cache[0] || (_cache[0] = $event => _ctx.handleChange($event))\n }, null, 40, _hoisted_1)\n ]))\n}","\nimport { defineComponent, ref } from 'vue'\n\nexport default defineComponent({\n name: 'file-input',\n emits: ['change'],\n props: {\n accept: {\n type: String,\n default: 'image/*',\n },\n },\n setup(props, { emit }) {\n const inputRef = ref()\n\n const handleClick = () => {\n if (!inputRef.value) return\n inputRef.value.value = ''\n inputRef.value.click()\n }\n const handleChange = (e: Event) => {\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=0a87e9c4&scoped=true&ts=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=0a87e9c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0a87e9c4\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"button\", {\n class: _normalizeClass([\"checkbox-button\", { 'checked': _ctx.checked }])\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ], 2))\n}","\r\nimport { defineComponent } from 'vue'\r\n\r\nexport default defineComponent({\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=4074d5c2&scoped=true&ts=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=4074d5c2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4074d5c2\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-7dafd0a9\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"checkbox-button-group\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ]))\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&ts=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\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7dafd0a9\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-05b64c90\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"color-picker\" }\nconst _hoisted_2 = { class: \"picker-saturation-wrap\" }\nconst _hoisted_3 = { class: \"picker-controls\" }\nconst _hoisted_4 = { class: \"picker-color-wrap\" }\nconst _hoisted_5 = { class: \"picker-sliders\" }\nconst _hoisted_6 = { class: \"picker-hue-wrap\" }\nconst _hoisted_7 = { class: \"picker-alpha-wrap\" }\nconst _hoisted_8 = { class: \"picker-field\" }\nconst _hoisted_9 = { class: \"picker-presets\" }\nconst _hoisted_10 = [\"onClick\"]\nconst _hoisted_11 = { class: \"picker-gradient-presets\" }\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = { class: \"picker-presets\" }\nconst _hoisted_14 = [\"onClick\"]\nconst _hoisted_15 = {\n key: 0,\n class: \"recent-colors-title\"\n}\nconst _hoisted_16 = { class: \"recent-colors\" }\nconst _hoisted_17 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Saturation = _resolveComponent(\"Saturation\")!\n const _component_Checkboard = _resolveComponent(\"Checkboard\")!\n const _component_Hue = _resolveComponent(\"Hue\")!\n const _component_Alpha = _resolveComponent(\"Alpha\")!\n const _component_EditableInput = _resolveComponent(\"EditableInput\")!\n const _component_IconPlatte = _resolveComponent(\"IconPlatte\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Saturation, {\n value: _ctx.color,\n hue: _ctx.hue,\n onColorChange: _cache[0] || (_cache[0] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\", \"hue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: \"picker-current-color\",\n style: _normalizeStyle({ background: _ctx.currentColor })\n }, null, 4),\n _createVNode(_component_Checkboard)\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Hue, {\n value: _ctx.color,\n hue: _ctx.hue,\n onColorChange: _cache[1] || (_cache[1] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\", \"hue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_Alpha, {\n value: _ctx.color,\n onColorChange: _cache[2] || (_cache[2] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\"])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_EditableInput, {\n class: \"input\",\n value: _ctx.color,\n onColorChange: _cache[3] || (_cache[3] = value => _ctx.changeColor(value))\n }, null, 8, [\"value\"]),\n _createElementVNode(\"div\", {\n class: \"straw\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.pickColor()))\n }, [\n _createVNode(_component_IconPlatte)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.themeColors, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"picker-presets-color\",\n key: c,\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_10))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.presetColors, (col, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"picker-gradient-col\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(col, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"picker-gradient-color\",\n key: c,\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_12))\n }), 128))\n ]))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.standardColors, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: c,\n class: \"picker-presets-color\",\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_14))\n }), 128))\n ]),\n (_ctx.recentColors.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, \"最近使用:\"))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_16, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.recentColors, (c) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: c,\n class: \"picker-presets-color\",\n style: _normalizeStyle({ background: c }),\n onClick: ($event: any) => (_ctx.selectPresetColor(c))\n }, null, 12, _hoisted_17))\n }), 128))\n ])\n ]))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6f2cb744\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alpha\" }\nconst _hoisted_2 = { class: \"alpha-checkboard-wrap\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"alpha-picker\" }, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Checkboard = _resolveComponent(\"Checkboard\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Checkboard)\n ]),\n _createElementVNode(\"div\", {\n class: \"alpha-gradient\",\n style: _normalizeStyle({ background: _ctx.gradientColor })\n }, null, 4),\n _createElementVNode(\"div\", {\n class: \"alpha-container\",\n ref: \"alphaRef\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMouseDown($event))\n }, [\n _createElementVNode(\"div\", {\n class: \"alpha-pointer\",\n style: _normalizeStyle({ left: _ctx.color.a * 100 + '%' })\n }, _hoisted_4, 4)\n ], 544)\n ]))\n}","import { normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"checkerboard\",\n style: _normalizeStyle(_ctx.bgStyle)\n }, null, 4))\n}","\nimport { computed, defineComponent } from 'vue'\n\nconst checkboardCache = {}\n\nconst renderCheckboard = (white: string, grey: string, size: number) => {\n const canvas = document.createElement('canvas')\n canvas.width = canvas.height = size * 2\n const ctx = canvas.getContext('2d')\n \n if (!ctx) return null\n\n ctx.fillStyle = white\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.fillStyle = grey\n ctx.fillRect(0, 0, size, size)\n ctx.translate(size, size)\n ctx.fillRect(0, 0, size, size)\n return canvas.toDataURL()\n}\n\nconst getCheckboard = (white: string, grey: string, size: number) => {\n const key = white + ',' + grey + ',' + size\n if (checkboardCache[key]) return checkboardCache[key]\n \n const checkboard = renderCheckboard(white, grey, size)\n checkboardCache[key] = checkboard\n return checkboard\n}\n\nexport default defineComponent({\n name: 'checkboard',\n emits: ['colorChange'],\n props: {\n size: {\n type: Number,\n default: 8,\n },\n white: {\n type: String,\n default: '#fff',\n },\n grey: {\n type: String,\n default: '#e6e6e6',\n },\n },\n setup(props) {\n const bgStyle = computed(() => {\n const checkboard = getCheckboard(props.white, props.grey, props.size)\n return { backgroundImage: `url(${checkboard})` }\n })\n\n return {\n bgStyle,\n }\n },\n})\n","import { render } from \"./Checkboard.vue?vue&type=template&id=0a544b87&scoped=true&ts=true\"\nimport script from \"./Checkboard.vue?vue&type=script&lang=ts\"\nexport * from \"./Checkboard.vue?vue&type=script&lang=ts\"\n\nimport \"./Checkboard.vue?vue&type=style&index=0&id=0a544b87&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0a544b87\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\n\nimport Checkboard from './Checkboard.vue'\nimport { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'alpha',\n components: {\n Checkboard,\n },\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => props.value)\n \n const gradientColor = computed(() => {\n const rgbaStr = [color.value.r, color.value.g, color.value.b].join(',')\n return `linear-gradient(to right, rgba(${rgbaStr}, 0) 0%, rgba(${rgbaStr}, 1) 100%)`\n })\n\n const alphaRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!alphaRef.value) return\n const containerWidth = alphaRef.value.clientWidth\n const xOffset = alphaRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let a\n\n if (left < 0) a = 0\n else if (left > containerWidth) a = 1\n else a = Math.round(left * 100 / containerWidth) / 100\n\n if (color.value.a !== a) {\n emit('colorChange', {\n r: color.value.r,\n g: color.value.g,\n b: color.value.b,\n a: a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n alphaRef,\n gradientColor,\n handleMouseDown,\n color,\n }\n },\n})\n","import { render } from \"./Alpha.vue?vue&type=template&id=6f2cb744&scoped=true&ts=true\"\nimport script from \"./Alpha.vue?vue&type=script&lang=ts\"\nexport * from \"./Alpha.vue?vue&type=script&lang=ts\"\n\nimport \"./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6f2cb744\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1766620e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"hue\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"hue-picker\" }, null, -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"hue-container\",\n ref: \"hueRef\",\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMouseDown($event))\n }, [\n _createElementVNode(\"div\", {\n class: \"hue-pointer\",\n style: _normalizeStyle({ left: _ctx.pointerLeft })\n }, _hoisted_3, 4)\n ], 544)\n ]))\n}","\nimport { computed, defineComponent, onUnmounted, PropType, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'hue',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const oldHue = ref(0)\n const pullDirection = ref('')\n \n const color = computed(() => {\n const hsla = tinycolor(props.value).toHsl()\n if (props.hue !== -1) hsla.h = props.hue\n return hsla\n })\n\n const pointerLeft = computed(() => {\n if (color.value.h === 0 && pullDirection.value === 'right') return '100%'\n return color.value.h * 100 / 360 + '%'\n })\n\n watch(() => props.value, () => {\n const hsla = tinycolor(props.value).toHsl()\n const h = hsla.s === 0 ? props.hue : hsla.h\n if (h !== 0 && h - oldHue.value > 0) pullDirection.value = 'right'\n if (h !== 0 && h - oldHue.value < 0) pullDirection.value = 'left'\n oldHue.value = h\n })\n\n const hueRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!hueRef.value) return\n\n const containerWidth = hueRef.value.clientWidth\n const xOffset = hueRef.value.getBoundingClientRect().left + window.pageXOffset\n const left = e.pageX - xOffset\n let h, percent\n \n if (left < 0) h = 0\n else if (left > containerWidth) h = 360\n else {\n percent = left * 100 / containerWidth\n h = 360 * percent / 100\n }\n if (props.hue === -1 || color.value.h !== h) {\n emit('colorChange', {\n h,\n l: color.value.l,\n s: color.value.s,\n a: color.value.a,\n })\n }\n }\n\n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n hueRef,\n handleMouseDown,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Hue.vue?vue&type=template&id=1766620e&scoped=true&ts=true\"\nimport script from \"./Hue.vue?vue&type=script&lang=ts\"\nexport * from \"./Hue.vue?vue&type=script&lang=ts\"\n\nimport \"./Hue.vue?vue&type=style&index=0&id=1766620e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1766620e\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8982eb4a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"saturation-white\" }, null, -1))\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"saturation-black\" }, null, -1))\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"saturation-circle\" }, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"saturation\",\n ref: \"saturationRef\",\n style: _normalizeStyle({ background: _ctx.bgColor }),\n onMousedown: _cache[0] || (_cache[0] = $event => _ctx.handleMouseDown($event))\n }, [\n _hoisted_1,\n _hoisted_2,\n _createElementVNode(\"div\", {\n class: \"saturation-pointer\",\n style: _normalizeStyle({\n top: _ctx.pointerTop,\n left: _ctx.pointerLeft,\n })\n }, _hoisted_4, 4)\n ], 36))\n}","\nimport { computed, defineComponent, onUnmounted, PropType, ref } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { throttle, clamp } from 'lodash'\n\nexport default defineComponent({\n name: 'saturation',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n hue: {\n type: Number,\n required: true,\n },\n },\n setup(props, { emit }) {\n const color = computed(() => {\n const hsva = tinycolor(props.value).toHsv()\n if (props.hue !== -1) hsva.h = props.hue\n return hsva\n })\n\n const bgColor = computed(() => `hsl(${color.value.h}, 100%, 50%)`)\n const pointerTop = computed(() => (-(color.value.v * 100) + 1) + 100 + '%')\n const pointerLeft = computed(() => color.value.s * 100 + '%')\n\n const emitChangeEvent = throttle(function(param) {\n emit('colorChange', param)\n }, 20, { leading: true, trailing: false })\n\n const saturationRef = ref()\n const handleChange = (e: MouseEvent) => {\n e.preventDefault()\n if (!saturationRef.value) return\n \n const containerWidth = saturationRef.value.clientWidth\n const containerHeight = saturationRef.value.clientHeight\n const xOffset = saturationRef.value.getBoundingClientRect().left + window.pageXOffset\n const yOffset = saturationRef.value.getBoundingClientRect().top + window.pageYOffset\n const left = clamp(e.pageX - xOffset, 0, containerWidth)\n const top = clamp(e.pageY - yOffset, 0, containerHeight)\n const saturation = left / containerWidth\n const bright = clamp(-(top / containerHeight) + 1, 0, 1)\n\n emitChangeEvent({\n h: color.value.h,\n s: saturation,\n v: bright,\n a: color.value.a,\n })\n }\n\n \n const unbindEventListeners = () => {\n window.removeEventListener('mousemove', handleChange)\n window.removeEventListener('mouseup', unbindEventListeners)\n }\n const handleMouseDown = (e: MouseEvent) => {\n handleChange(e)\n window.addEventListener('mousemove', handleChange)\n window.addEventListener('mouseup', unbindEventListeners)\n }\n\n onUnmounted(unbindEventListeners)\n\n return {\n saturationRef,\n bgColor,\n handleMouseDown,\n pointerTop,\n pointerLeft,\n }\n },\n})\n","import { render } from \"./Saturation.vue?vue&type=template&id=8982eb4a&scoped=true&ts=true\"\nimport script from \"./Saturation.vue?vue&type=script&lang=ts\"\nexport * from \"./Saturation.vue?vue&type=script&lang=ts\"\n\nimport \"./Saturation.vue?vue&type=style&index=0&id=8982eb4a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8982eb4a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20bfe6b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"editable-input\" }\nconst _hoisted_2 = [\"value\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"input-content\",\n value: _ctx.val,\n onInput: _cache[0] || (_cache[0] = $event => _ctx.handleInput($event))\n }, null, 40, _hoisted_2)\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\n\nexport default defineComponent({\n name: 'editable-input',\n emits: ['colorChange'],\n props: {\n value: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props, { emit }) {\n const val = computed(() => {\n let _hex = ''\n if (props.value.a < 1) _hex = tinycolor(props.value).toHex8String().toUpperCase()\n else _hex = tinycolor(props.value).toHexString().toUpperCase()\n return _hex.replace('#', '')\n })\n\n const handleInput = (e: Event) => {\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=20bfe6b0&scoped=true&ts=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=20bfe6b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-20bfe6b0\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, ref, watch } from 'vue'\nimport tinycolor, { ColorFormats } from 'tinycolor2'\nimport { debounce } from 'lodash'\nimport { toCanvas } from 'html-to-image'\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\nimport { message } from 'ant-design-vue'\n\nconst RECENT_COLORS = 'RECENT_COLORS'\n\nconst presetColorConfig = [\n ['#7f7f7f', '#f2f2f2'],\n ['#0d0d0d', '#808080'],\n ['#1c1a10', '#ddd8c3'],\n ['#0e243d', '#c6d9f0'],\n ['#233f5e', '#dae5f0'],\n ['#632623', '#f2dbdb'],\n ['#4d602c', '#eaf1de'],\n ['#3f3150', '#e6e0ec'],\n ['#1e5867', '#d9eef3'],\n ['#99490f', '#fee9da'],\n]\n\nconst gradient = (startColor: string, endColor: string, step: number) => {\n const _startColor = tinycolor(startColor).toRgb()\n const _endColor = tinycolor(endColor).toRgb()\n\n const rStep = (_endColor.r - _startColor.r) / step\n const gStep = (_endColor.g - _startColor.g) / step\n const bStep = (_endColor.b - _startColor.b) / step\n const gradientColorArr = []\n\n for (let i = 0; i < step; i++) {\n const gradientColor = tinycolor({\n r: _startColor.r + rStep * i,\n g: _startColor.g + gStep * i,\n b: _startColor.b + bStep * i,\n }).toRgbString()\n gradientColorArr.push(gradientColor)\n }\n return gradientColorArr\n}\n\nconst getPresetColors = () => {\n const presetColors = []\n for (const color of presetColorConfig) {\n presetColors.push(gradient(color[1], color[0], 5))\n }\n return presetColors\n}\n\nexport default defineComponent({\n name: 'color-picker',\n components: {\n Alpha,\n Checkboard,\n Hue,\n Saturation,\n EditableInput,\n },\n emits: ['update:modelValue'],\n props: {\n modelValue: {\n type: String,\n default: '#e86b99',\n },\n },\n setup(props, { emit }) {\n const hue = ref(-1)\n const recentColors = ref([])\n\n const color = computed({\n get() {\n return tinycolor(props.modelValue).toRgb()\n },\n set(rgba: ColorFormats.RGBA) {\n const rgbaString = `rgba(${[rgba.r, rgba.g, rgba.b, rgba.a].join(',')})`\n emit('update:modelValue', rgbaString)\n },\n })\n\n const themeColors = ['#000000', '#ffffff', '#eeece1', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c']\n const standardColors = ['#c21401', '#ff1e02', '#ffc12a', '#ffff3a', '#90cf5b', '#00af57', '#00afee', '#0071be', '#00215f', '#72349d']\n const presetColors = getPresetColors()\n\n const currentColor = computed(() => {\n return `rgba(${[color.value.r, color.value.g, color.value.b, color.value.a].join(',')})`\n })\n\n const selectPresetColor = (colorString: string) => {\n hue.value = tinycolor(colorString).toHsl().h\n emit('update:modelValue', colorString)\n }\n\n // 每次选择非预设颜色时,需要将该颜色加入到最近使用列表中\n const updateRecentColorsCache = debounce(function() {\n const _color = tinycolor(color.value).toRgbString()\n if (!recentColors.value.includes(_color)) {\n recentColors.value = [_color, ...recentColors.value]\n\n const maxLength = 10\n if (recentColors.value.length > maxLength) {\n recentColors.value = recentColors.value.slice(0, maxLength)\n }\n }\n }, 300, { trailing: true })\n\n onMounted(() => {\n const recentColorsCache = localStorage.getItem(RECENT_COLORS)\n if (recentColorsCache) recentColors.value = JSON.parse(recentColorsCache)\n })\n\n watch(recentColors, () => {\n const recentColorsCache = JSON.stringify(recentColors.value)\n localStorage.setItem(RECENT_COLORS, recentColorsCache)\n })\n\n const changeColor = (value: ColorFormats.RGBA | ColorFormats.HSLA | ColorFormats.HSVA) => {\n if ('h' in value) {\n hue.value = value.h\n color.value = tinycolor(value).toRgb()\n }\n else {\n hue.value = tinycolor(value).toHsl().h\n color.value = value\n }\n\n updateRecentColorsCache()\n }\n\n const pickColor = () => {\n const targetRef: HTMLElement | null = document.querySelector('.canvas')\n if (!targetRef) return\n\n const maskRef = document.createElement('div')\n maskRef.style.cssText = 'position: fixed; top: 0; left: 0; bottom: 0; right: 0; z-index: 9999; cursor: wait;'\n document.body.appendChild(maskRef)\n\n const colorBlockRef = document.createElement('div')\n colorBlockRef.style.cssText = 'position: absolute; top: -100px; left: -100px; width: 16px; height: 16px; border: 1px solid #000; z-index: 999'\n maskRef.appendChild(colorBlockRef)\n\n const { left, top } = targetRef.getBoundingClientRect()\n\n const filter = (node: HTMLElement) => {\n if (node.tagName && node.tagName.toUpperCase() === 'FOREIGNOBJECT') return false\n if (node.classList && node.classList.contains('operate')) return false\n return true\n }\n\n toCanvas(targetRef, { filter, fontEmbedCSS: '' }).then(canvasRef => {\n canvasRef.style.cssText = `position: absolute; top: ${top}px; left: ${left}px; cursor: crosshair;`\n maskRef.style.cursor = 'default'\n maskRef.appendChild(canvasRef)\n\n const ctx = canvasRef.getContext('2d')\n if (!ctx) return\n\n let currentColor = ''\n const handleMousemove = (e: MouseEvent) => {\n const x = e.x\n const y = e.y\n\n const mouseX = x - left\n const mouseY = y - top\n\n const [r, g, b, a] = ctx.getImageData(mouseX, mouseY, 1, 1).data\n currentColor = `rgba(${r}, ${g}, ${b}, ${(a / 255).toFixed(2)})`\n\n colorBlockRef.style.left = x + 10 + 'px'\n colorBlockRef.style.top = y + 10 + 'px'\n colorBlockRef.style.backgroundColor = currentColor\n }\n const handleMouseleave = () => {\n currentColor = ''\n colorBlockRef.style.left = '-100px'\n colorBlockRef.style.top = '-100px'\n colorBlockRef.style.backgroundColor = ''\n }\n const handleMousedown = (e: MouseEvent) => {\n if (currentColor && e.button === 0) {\n const tColor = tinycolor(currentColor)\n hue.value = tColor.toHsl().h\n color.value = tColor.toRgb()\n\n updateRecentColorsCache()\n }\n document.body.removeChild(maskRef)\n \n canvasRef.removeEventListener('mousemove', handleMousemove)\n canvasRef.removeEventListener('mouseleave', handleMouseleave)\n window.removeEventListener('mousedown', handleMousedown)\n }\n\n canvasRef.addEventListener('mousemove', handleMousemove)\n canvasRef.addEventListener('mouseleave', handleMouseleave)\n window.addEventListener('mousedown', handleMousedown)\n }).catch(() => {\n message.error('取色吸管初始化失败')\n document.body.removeChild(maskRef)\n })\n }\n\n return {\n themeColors,\n standardColors,\n presetColors,\n color,\n hue,\n currentColor,\n changeColor,\n selectPresetColor,\n recentColors,\n pickColor,\n }\n },\n})\n","import { render } from \"./index.vue?vue&type=template&id=05b64c90&scoped=true&ts=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=05b64c90&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-05b64c90\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e77feb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"fullscreen-spin\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Spin = _resolveComponent(\"Spin\")!\n\n return (_ctx.loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Spin, {\n tip: _ctx.tip,\n size: \"large\"\n }, null, 8, [\"tip\"])\n ]))\n : _createCommentVNode(\"\", true)\n}","\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n name: 'fullscreen-spin',\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n tip: {\n type: String,\n default: '',\n },\n },\n})\n","import { render } from \"./FullscreenSpin.vue?vue&type=template&id=5e77feb8&scoped=true&ts=true\"\nimport script from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\nexport * from \"./FullscreenSpin.vue?vue&type=script&lang=ts\"\n\nimport \"./FullscreenSpin.vue?vue&type=style&index=0&id=5e77feb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5e77feb8\"]])\n\nexport default __exports__","import { App } from 'vue'\n\nimport FileInput from '@/components/FileInput.vue'\nimport CheckboxButton from '@/components/CheckboxButton.vue'\nimport CheckboxButtonGroup from '@/components/CheckboxButtonGroup.vue'\nimport ColorPicker from '@/components/ColorPicker/index.vue'\nimport FullscreenSpin from '@/components/FullscreenSpin.vue'\n\nexport default {\n install(app: App) {\n app.component('FileInput', FileInput)\n app.component('CheckboxButton', CheckboxButton)\n app.component('CheckboxButtonGroup', CheckboxButtonGroup)\n app.component('ColorPicker', ColorPicker)\n app.component('FullscreenSpin', FullscreenSpin)\n }\n}\n","import { withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_MenuContent = _resolveComponent(\"MenuContent\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: \"mask\",\n onContextmenu: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.removeContextmenu()), [\"prevent\"])),\n onMousedown: _cache[1] || (_cache[1] = ($event: any) => (_ctx.removeContextmenu()))\n }, null, 32),\n _createElementVNode(\"div\", {\n class: \"contextmenu\",\n style: _normalizeStyle({\n left: _ctx.style.left + 'px',\n top: _ctx.style.top + 'px',\n }),\n onContextmenu: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"prevent\"]))\n }, [\n _createVNode(_component_MenuContent, {\n menus: _ctx.menus,\n handleClickMenuItem: _ctx.handleClickMenuItem\n }, null, 8, [\"menus\", \"handleClickMenuItem\"])\n ], 36)\n ], 64))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, normalizeClass as _normalizeClass, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eb1555e8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"menu-content\" }\nconst _hoisted_2 = [\"onClick\"]\nconst _hoisted_3 = { class: \"text\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"sub-text\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_menu_content = _resolveComponent(\"menu-content\", true)!\n\n return (_openBlock(), _createElementBlock(\"ul\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.menus, (menu, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: menu.text || index\n }, [\n (!menu.hide)\n ? (_openBlock(), _createElementBlock(\"li\", {\n key: 0,\n class: _normalizeClass([\"menu-item\", {'divider': menu.divider, 'disable': menu.disable}]),\n onClick: _withModifiers(($event: any) => (_ctx.handleClickMenuItem(menu)), [\"stop\"])\n }, [\n (!menu.divider)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"menu-item-content\", {\n 'has-children': menu.children,\n 'has-handler': menu.handler,\n }])\n }, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(menu.text), 1),\n (menu.subText && !menu.children)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(menu.subText), 1))\n : _createCommentVNode(\"\", true),\n (menu.children && menu.children.length)\n ? (_openBlock(), _createBlock(_component_menu_content, {\n key: 1,\n class: \"sub-menu\",\n menus: menu.children,\n handleClickMenuItem: _ctx.handleClickMenuItem\n }, null, 8, [\"menus\", \"handleClickMenuItem\"]))\n : _createCommentVNode(\"\", true)\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_2))\n : _createCommentVNode(\"\", true)\n ], 64))\n }), 128))\n ]))\n}","\nimport { PropType, defineComponent } from 'vue'\nimport { ContextmenuItem } from './types'\n\nexport default defineComponent({\n name: 'menu-content',\n props: {\n menus: {\n type: Array as PropType,\n required: true,\n },\n handleClickMenuItem: {\n type: Function,\n required: true,\n },\n },\n})\n","import { render } from \"./MenuContent.vue?vue&type=template&id=eb1555e8&scoped=true&ts=true\"\nimport script from \"./MenuContent.vue?vue&type=script&lang=ts\"\nexport * from \"./MenuContent.vue?vue&type=script&lang=ts\"\n\nimport \"./MenuContent.vue?vue&type=style&index=0&id=eb1555e8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-eb1555e8\"]])\n\nexport default __exports__","\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&ts=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=83da70aa&lang=scss\"\n\nimport exportComponent from \"/home/runner/work/PPTist/PPTist/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { Directive, createVNode, render, DirectiveBinding } from 'vue'\nimport ContextmenuComponent from '@/components/Contextmenu/index.vue'\n\nconst CTX_CONTEXTMENU_HANDLER = 'CTX_CONTEXTMENU_HANDLER'\n\nconst contextmenuListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n event.stopPropagation()\n event.preventDefault()\n\n const menus = binding.value(el)\n if (!menus) return\n\n let container: HTMLDivElement | null = null\n\n // 移除右键菜单并取消相关的事件监听\n const removeContextmenu = () => {\n if (container) {\n document.body.removeChild(container)\n container = null\n }\n el.classList.remove('contextmenu-active')\n document.body.removeEventListener('scroll', removeContextmenu) \n window.removeEventListener('resize', removeContextmenu)\n }\n\n // 创建自定义菜单\n const options = {\n axis: { x: event.x, y: event.y },\n el,\n menus,\n removeContextmenu,\n }\n container = document.createElement('div')\n const vm = createVNode(ContextmenuComponent, options, null)\n render(vm, container)\n document.body.appendChild(container)\n\n // 为目标节点添加菜单激活状态的className\n el.classList.add('contextmenu-active')\n\n // 页面变化时移除菜单\n document.body.addEventListener('scroll', removeContextmenu)\n window.addEventListener('resize', removeContextmenu)\n}\n\nconst ContextmenuDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CONTEXTMENU_HANDLER] = (event: MouseEvent) => contextmenuListener(el, event, binding)\n el.addEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n },\n\n unmounted(el: HTMLElement) {\n if (el && el[CTX_CONTEXTMENU_HANDLER]) {\n el.removeEventListener('contextmenu', el[CTX_CONTEXTMENU_HANDLER])\n delete el[CTX_CONTEXTMENU_HANDLER]\n }\n },\n}\n\nexport default ContextmenuDirective","import { Directive, DirectiveBinding } from 'vue'\n\nconst CTX_CLICK_OUTSIDE_HANDLER = 'CTX_CLICK_OUTSIDE_HANDLER'\n\nconst clickListener = (el: HTMLElement, event: MouseEvent, binding: DirectiveBinding) => {\n const handler = binding.value\n\n const path = event.composedPath()\n const isClickOutside = path ? path.indexOf(el) < 0 : !el.contains(event.target as HTMLElement)\n\n if (!isClickOutside) return\n handler(event)\n}\n\nconst ClickOutsideDirective: Directive = {\n mounted(el: HTMLElement, binding) {\n el[CTX_CLICK_OUTSIDE_HANDLER] = (event: MouseEvent) => clickListener(el, event, binding)\n setTimeout(() => {\n document.addEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n }, 0)\n },\n \n unmounted(el: HTMLElement) {\n if (el[CTX_CLICK_OUTSIDE_HANDLER]) {\n document.removeEventListener('click', el[CTX_CLICK_OUTSIDE_HANDLER])\n delete el[CTX_CLICK_OUTSIDE_HANDLER]\n }\n },\n}\n\nexport default ClickOutsideDirective","import { App } from 'vue'\n\nimport Contextmenu from './contextmenu'\nimport ClickOutside from './clickOutside'\n\nexport default {\n install(app: App) {\n app.directive('contextmenu', Contextmenu)\n app.directive('click-outside', ClickOutside)\n }\n}\n","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\n\nimport '@icon-park/vue-next/styles/index.css'\nimport 'prosemirror-view/style/prosemirror.css'\nimport 'animate.css'\n\nimport '@/assets/styles/prosemirror.scss'\nimport '@/assets/styles/global.scss'\nimport '@/assets/styles/antd.scss'\nimport '@/assets/styles/font.scss'\n\nimport Icon from '@/plugins/icon'\nimport Component from '@/plugins/component'\nimport Directive from '@/plugins/directive'\n\nimport {\n InputNumber,\n Divider,\n Button,\n Tooltip,\n Popover,\n Slider,\n Select,\n Switch,\n Radio,\n Input,\n Modal,\n Dropdown,\n Menu,\n Checkbox,\n Drawer,\n Spin,\n Alert,\n} from 'ant-design-vue'\n\nconst app = createApp(App)\n\napp.component('InputNumber', InputNumber)\napp.component('Divider', Divider)\napp.component('Button', Button)\napp.component('ButtonGroup', Button.Group)\napp.component('Tooltip', Tooltip)\napp.component('Popover', Popover)\napp.component('Slider', Slider)\napp.component('Select', Select)\napp.component('SelectOption', Select.Option)\napp.component('SelectOptGroup', Select.OptGroup)\napp.component('Switch', Switch)\napp.component('Radio', Radio)\napp.component('RadioGroup', Radio.Group)\napp.component('RadioButton', Radio.Button)\napp.component('Input', Input)\napp.component('InputGroup', Input.Group)\napp.component('TextArea', Input.TextArea)\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)\napp.component('Alert', Alert)\n\napp.use(Icon)\napp.use(Component)\napp.use(Directive)\n\napp.use(createPinia())\napp.mount('#app')\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AudioStylePanel.vue?vue&type=style&index=0&id=80767a46&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ChartPool.vue?vue&type=style&index=0&id=64ca421e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BaseAudioElement.vue?vue&type=style&index=0&id=513e91c4&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=05b64c90&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=7f80f8ee&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SlideThumbnails.vue?vue&type=style&index=0&id=11e5b856&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementOutline.vue?vue&type=style&index=0&id=35c4c4a3&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LatexStylePanel.vue?vue&type=style&index=0&id=69f903b1&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LayoutPool.vue?vue&type=style&index=0&id=741b366e&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TableStylePanel.vue?vue&type=style&index=0&id=72e00692&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SlideDesignPanel.vue?vue&type=style&index=0&id=0e2f846d&lang=scss&scoped=true\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=5a3169a0&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Mobile.vue?vue&type=style&index=0&id=72b587f9&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FormulaContent.vue?vue&type=style&index=0&id=cf0ca630&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementPositionPanel.vue?vue&type=style&index=0&id=3476ee65&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=d7761db4&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CustomTextarea.vue?vue&type=style&index=0&id=59f468e0&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Alpha.vue?vue&type=style&index=0&id=6f2cb744&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ElementFilter.vue?vue&type=style&index=0&id=95955a74&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LinePool.vue?vue&type=style&index=0&id=7fa1d412&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=288ee59d&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LinkDialog.vue?vue&type=style&index=0&id=3adaaa8e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./GridLines.vue?vue&type=style&index=0&id=9b94cc34&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file diff --git a/js/app.90f175cd.js b/js/app.90f175cd.js deleted file mode 100644 index e23c99c1..00000000 --- a/js/app.90f175cd.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var o,a,r=t[0],i=t[1],u=t[2],s=0,f=[];sb){var p=e.nodeAt(l),m=p&&p.marks.find(c);if(!m||m!==a)break;s=l,r=p,l--}l=n+1,b=e.nodeSize-2;while(l-1||t.type===e},F=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}}},R=function(e){return function(t){return F(t.$from,e)}},P=function(e){return function(t){return R((function(t){return A(e,t)}))(t)}},H=function(e,t){var n=t.schema.nodes[e];return!!P(n)(t.selection)},q=function(e){var t,n,o=e.state,l=o.selection,c=o.doc,a=l.from,r=c.nodeAt(a)||c.nodeAt(a-1);return null!==(t=r)&&void 0!==t&&t.lastChild&&(r=r.lastChild),(null===(n=r)||void 0===n?void 0:n.marks)||[]},W=function(e,t,n){var o,l=Object(T["a"])(e);try{for(l.s();!(o=l.n()).done;){var c=o.value;if(c.type.name===t&&c.attrs[n])return c.attrs[n]}}catch(a){l.e(a)}finally{l.f()}return null},G=function(e,t){var n,o=Object(T["a"])(e);try{for(o.s();!(n=o.n()).done;){var l=n.value;if(l.type.name===t)return!0}}catch(c){o.e(c)}finally{o.f()}return!1},U=function(e,t){var n=e.selection,o=n.from,l=n.$from,c=n.to,a=n.empty;return a?t.isInSet(e.storedMarks||l.marks()):e.doc.rangeHasMark(o,c,t)},X=function(e,t){var n=e.state,o=n.selection,l=n.doc,c=o.from,a=o.to,r=!0,i="";return l.nodesBetween(c,a,(function(e){return r&&e.attrs[t]&&(r=!1,i=e.attrs[t]),r})),i},Z={color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",align:"left"},Y=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=Object(L["a"])(Object(L["a"])({},Z),t);var n=q(e),o=G(n,"strong"),l=G(n,"em"),c=G(n,"underline"),a=G(n,"strikethrough"),r=G(n,"superscript"),i=G(n,"subscript"),u=G(n,"code"),d=W(n,"forecolor","color")||t.color,s=W(n,"backcolor","backcolor")||t.backcolor,f=W(n,"fontsize","fontsize")||t.fontsize,b=W(n,"fontname","fontname")||t.fontname,p=W(n,"link","href")||"",m=X(e,"align")||t.align,v=H("bullet_list",e.state),O=H("ordered_list",e.state),h=H("blockquote",e.state);return{bold:o,em:l,underline:c,strikethrough:a,superscript:r,subscript:i,code:u,color:d,backcolor:s,fontsize:f,fontname:b,link:p,align:m,bulletList:v,orderedList:O,blockquote:h}},J={bold:!1,em:!1,underline:!1,strikethrough:!1,superscript:!1,subscript:!1,code:!1,color:"#000",backcolor:"#000",fontsize:"20px",fontname:"微软雅黑",link:"",align:"left",bulletList:!1,orderedList:!1,blockquote:!1},Q=(n("99af"),n("fb6a"),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,l=100,c="a",a=document.createElement("canvas"),r=a.getContext("2d");if(!r)return!1;a.width=o,a.height=l,r.textAlign="center",r.fillStyle="black",r.textBaseline="middle";var i=function(e){r.clearRect(0,0,o,l),r.font="".concat(n,"px ").concat(e,", ").concat(t),r.fillText(c,o/2,l/2);var a=r.getImageData(0,0,o,l).data;return[].slice.call(a).filter((function(e){return 0!==e}))};return i(t).join("")!==i(e).join("")}),K=n("2909"),$=(n("d81d"),n("ac1f"),n("5319"),n("5b81"),n("e9c4"),n("a434"),n("c740"),n("66cb")),ee=n.n($),te=n("2ef0"),ne=[{id:"test123456",elements:[{type:"shape",id:"4cbRxp",left:0,top:200,width:546,height:362.5,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"#5b9bd5",fixedRatio:!1,opacity:.7,rotate:0},{type:"shape",id:"ookHrf",left:0,top:0,width:300,height:320,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"#5b9bd5",fixedRatio:!1,flipV:!0,rotate:0},{type:"text",id:"idn7Mx",left:355,top:65.25,width:585,height:188,lineHeight:1.2,content:"

PPTIST

",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"}}],oe={themeColor:"#5b9bd5",fontColor:"#333",fontName:"Microsoft Yahei",backgroundColor:"#fff"},le=[{id:"template",elements:[{type:"shape",id:"4cbRxp",left:0,top:200,width:546,height:362.5,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,opacity:.7,rotate:0},{type:"shape",id:"ookHrf",left:0,top:0,width:300,height:320,viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z",fill:"{{themeColor}}",fixedRatio:!1,flipV:!0,rotate:0},{type:"text",id:"AkIh3E",left:355,top:95.11111111111111,width:585,height:116,lineHeight:1.2,content:"

输入标题

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

请在此处输入副标题

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

在此处添加标题

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

在此处添加副标题

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

感谢观看

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

01

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

在此处输入标题

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

  2. 在此处输入内容

  3. 在此处输入内容

  4. 在此处输入内容

  5. 在此处输入内容

  6. 在此处输入内容

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

1

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

4

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

3

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

2

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

在此输入内容

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

01

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

在此处添加标题

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

在此处输入内容

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

1.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

2.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

3.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

4.请输入标题

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

在此处输入内容

在此处输入内容

在此处输入内容

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

请在此处输入标题

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

请在此处输入内容1

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

请在此处输入内容2

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

请在此处输入内容3

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

请在此处输入内容4

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

1

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

在此输入内容

在此输入内容

在此输入内容

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

2

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

在此输入内容

在此输入内容

在此输入内容

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

3

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

在此输入内容

在此输入内容

在此输入内容

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

4

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

在此输入内容

在此输入内容

在此输入内容

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

5

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

在此输入内容

在此输入内容

在此输入内容

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

6

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

在此输入内容

在此输入内容

在此输入内容

",rotate:0,defaultFontName:"{{fontName}}",defaultColor:"{{fontColor}}",fill:"{{subColor}}"}],background:{type:"solid",color:"{{backgroundColor}}"}}],ce=Object(g["b"])("slides",{state:function(){return{theme:oe,slides:ne,slideIndex:0,viewportRatio:.5625}},getters:{currentSlide:function(e){return e.slides[e.slideIndex]},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,l=o.map((function(e){return e.id}));return n.filter((function(e){return l.includes(e.elId)}))},layouts:function(e){var t=e.theme,n=t.themeColor,o=t.fontColor,l=t.fontName,c=t.backgroundColor,a=ee()(o).isDark()?"rgba(230, 230, 230, 0.5)":"rgba(180, 180, 180, 0.5)",r=JSON.stringify(le).replaceAll("{{themeColor}}",n).replaceAll("{{fontColor}}",o).replaceAll("{{fontName}}",l).replaceAll("{{backgroundColor}}",c).replaceAll("{{subColor}}",a);return JSON.parse(r)}},actions:{setTheme:function(e){this.theme=Object(L["a"])(Object(L["a"])({},this.theme),e)},setViewportRatio:function(e){this.viewportRatio=e},setSlides:function(e){this.slides=e},addSlide:function(e){var t,n=Array.isArray(e)?e:[e],o=this.slideIndex+1;(t=this.slides).splice.apply(t,[o,0].concat(Object(K["a"])(n))),this.slideIndex=o},updateSlide:function(e){var t=this.slideIndex;this.slides[t]=Object(L["a"])(Object(L["a"])({},this.slides[t]),e)},deleteSlide:function(e){for(var t=this,n=Array.isArray(e)?e:[e],o=[],l=function(e){var l=t.slides.findIndex((function(t){return t.id===n[e]}));o.push(l)},c=0;cr&&(a=r),this.slideIndex=a,this.slides=this.slides.filter((function(e){return!n.includes(e.id)}))},updateSlideIndex:function(e){this.slideIndex=e},addElement:function(e){var t=Array.isArray(e)?e:[e],n=this.slides[this.slideIndex].elements,o=[].concat(Object(K["a"])(n),Object(K["a"])(t));this.slides[this.slideIndex].elements=o},updateElement:function(e){var t=e.id,n=e.props,o="string"===typeof t?[t]:t,l=this.slideIndex,c=this.slides[l],a=c.elements.map((function(e){return o.includes(e.id)?Object(L["a"])(Object(L["a"])({},e),n):e}));this.slides[l].elements=a},removeElementProps:function(e){var t=e.id,n=e.propName,o="string"===typeof n?[n]:n,l=this.slideIndex,c=this.slides[l],a=c.elements.map((function(e){return e.id===t?Object(te["omit"])(e,o):e}));this.slides[l].elements=a}}}),ae=Object(g["b"])("main",{state:function(){return{activeElementIdList:[],handleElementId:"",activeGroupElementId:"",canvasPercentage:90,canvasScale:1,thumbnailsFocus:!1,editorAreaFocus:!1,disableHotkeys:!1,showGridLines:!1,creatingElement:null,availableFonts:S,toolbarState:C.SLIDE_DESIGN,clipingImageElementId:"",richTextAttrs:J,selectedTableCells:[],isScaling:!1,editingShapeElementId:"",selectedSlidesIndex:[]}},getters:{activeElementList:function(e){var t=ce(),n=t.currentSlide;return n&&n.elements?n.elements.filter((function(t){return e.activeElementIdList.includes(t.id)})):[]},handleElement:function(e){var t=ce(),n=t.currentSlide;return n&&n.elements&&n.elements.find((function(t){return e.handleElementId===t.id}))||null}},actions:{setActiveElementIdList:function(e){1===e.length?this.handleElementId=e[0]:this.handleElementId="",this.activeElementIdList=e},setHandleElementId:function(e){this.handleElementId=e},setActiveGroupElementId:function(e){this.activeGroupElementId=e},setCanvasPercentage:function(e){this.canvasPercentage=e},setCanvasScale:function(e){this.canvasScale=e},setThumbnailsFocus:function(e){this.thumbnailsFocus=e},setEditorareaFocus:function(e){this.editorAreaFocus=e},setDisableHotkeysState:function(e){this.disableHotkeys=e},setGridLinesState:function(e){this.showGridLines=e},setCreatingElement:function(e){this.creatingElement=e},setAvailableFonts:function(){this.availableFonts=S.filter((function(e){return Q(e.value)}))},setToolbarState:function(e){this.toolbarState=e},setClipingImageElementId:function(e){this.clipingImageElementId=e},setRichtextAttrs:function(e){this.richTextAttrs=e},setSelectedTableCells:function(e){this.selectedTableCells=e},setScalingState:function(e){this.isScaling=e},setEditingShapeElementId:function(e){this.editingShapeElementId=e},updateSelectedSlidesIndex:function(e){this.selectedSlidesIndex=e}}}),re=n("1da1"),ie=(n("96cf"),n("ddb0"),n("d4ec")),ue=n("257e"),de=n("262e"),se=n("2caf"),fe=n("ade3"),be=n("4dec"),pe=function(e){Object(de["a"])(n,e);var t=Object(se["a"])(n);function n(){var e;return Object(ie["a"])(this,n),e=t.call(this,"SnapshotDatabase"),Object(fe["a"])(Object(ue["a"])(e),"snapshots",void 0),e.version(1).stores({snapshots:"++id"}),e.snapshots=e.table("snapshots"),e}return n}(be["a"]),me=new pe,ve=Object(g["b"])("snapshot",{state:function(){return{snapshotCursor:-1,snapshotLength:0}},getters:{canUndo:function(e){return e.snapshotCursor>0},canRedo:function(e){return e.snapshotCursor=0&&e.snapshotCursorr&&(l.push(o[0]),a--),a>=2&&me.snapshots.update(o[a-2],{index:n.slideIndex}),t.next=15,me.snapshots.bulkDelete(l);case 15:e.setSnapshotCursor(a-1),e.setSnapshotLength(a);case 17:case"end":return t.stop()}}),t)})))()},unDo:function(){var e=this;return Object(re["a"])(regeneratorRuntime.mark((function t(){var n,o,l,c,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!(e.snapshotCursor<=0)){t.next=2;break}return t.abrupt("return");case 2:return n=ce(),o=ae(),l=e.snapshotCursor-1,t.next=7,me.snapshots.orderBy("id").toArray();case 7:c=t.sent,a=c[l],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,n.setSlides(i),n.updateSlideIndex(u),e.setSnapshotCursor(l),o.setActiveElementIdList([]);case 15:case"end":return t.stop()}}),t)})))()},reDo:function(){var e=this;return Object(re["a"])(regeneratorRuntime.mark((function t(){var n,o,l,c,a,r,i,u;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!(e.snapshotCursor>=e.snapshotLength-1)){t.next=2;break}return t.abrupt("return");case 2:return n=ce(),o=ae(),l=e.snapshotCursor+1,t.next=7,me.snapshots.orderBy("id").toArray();case 7:c=t.sent,a=c[l],r=a.index,i=a.slides,u=r>i.length-1?i.length-1:r,n.setSlides(i),n.updateSlideIndex(u),e.setSnapshotCursor(l),o.setActiveElementIdList([]);case 15:case"end":return t.stop()}}),t)})))()}}}),Oe=Object(g["b"])("keyboard",{state:function(){return{ctrlKeyState:!1,shiftKeyState:!1}},getters:{ctrlOrShiftKeyActive:function(e){return e.ctrlKeyState||e.shiftKeyState}},actions:{setCtrlKeyState:function(e){this.ctrlKeyState=e},setShiftKeyState:function(e){this.shiftKeyState=e}}}),he=Object(g["b"])("screen",{state:function(){return{screening:!1}},actions:{setScreening:function(e){this.screening=e}}}),je=(n("466d"),function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:8,t="_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",n=t.length,o="",l=0;l"),o=n.split("
"),l="",c=Object(T["a"])(o);try{for(c.s();!(t=c.n()).done;){var a=t.value;a&&(l+="
".concat(a,"
"))}}catch(r){c.e(r)}finally{c.f()}return l}),$e=function(){var e=ve(),t=Object(te["debounce"])((function(){e.addSnapshot()}),300,{trailing:!0}),n=Object(te["throttle"])((function(){e.reDo()}),100,{leading:!0,trailing:!1}),o=Object(te["throttle"])((function(){e.unDo()}),100,{leading:!0,trailing:!1});return{addHistorySnapshot:t,redo:n,undo:o}},et=(n("cb29"),function(e){return new Promise((function(t){var n=document.createElement("img");n.src=e,n.style.opacity="0",document.body.appendChild(n),n.onload=function(){var e=n.clientWidth,o=n.clientHeight;n.onload=null,n.onerror=null,document.body.removeChild(n),t({width:e,height:o})},n.onerror=function(){n.onload=null,n.onerror=null}}))}),tt=function(e){return new Promise((function(t){var n=new FileReader;n.addEventListener("load",(function(){t(n.result)})),n.readAsDataURL(e)}))},nt=1e3;(function(e){e["ROUND_RECT"]="roundRect",e["ROUND_RECT_DIAGONAL"]="roundRectDiagonal",e["ROUND_RECT_SINGLE"]="roundRectSingle",e["ROUND_RECT_SAMESIDE"]="roundRectSameSide",e["CUT_RECT_DIAGONAL"]="cutRectDiagonal",e["CUT_RECT_SINGLE"]="cutRectSingle",e["CUT_RECT_SAMESIDE"]="cutRectSameSide",e["MESSAGE"]="message",e["ROUND_MESSAGE"]="roundMessage",e["L"]="L",e["RING_RECT"]="ringRect",e["PLUS"]="plus"})(we||(we={})),function(e){e["TEXT"]="text",e["IMAGE"]="image",e["SHAPE"]="shape",e["LINE"]="line",e["CHART"]="chart",e["TABLE"]="table",e["LATEX"]="latex",e["VIDEO"]="video",e["AUDIO"]="audio"}(Ne||(Ne={}));var ot=(Ie={},Object(fe["a"])(Ie,we.ROUND_RECT,(function(e,t){var n=Math.min(e,t)/8;return"M ".concat(n," 0 L ").concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t-n," Q ").concat(e," ").concat(t," ").concat(e-n," ").concat(t," L ").concat(n," ").concat(t," Q 0 ").concat(t," 0 ").concat(t-n," L 0 ").concat(n," Q 0 0 ").concat(n," 0 Z")})),Object(fe["a"])(Ie,we.CUT_RECT_DIAGONAL,(function(e,t){var n=Math.min(e,t)/5;return"M 0 ".concat(t-n," L 0 0 L ").concat(e-n," 0 L ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L ").concat(n," ").concat(t," Z")})),Object(fe["a"])(Ie,we.CUT_RECT_SINGLE,(function(e,t){var n=Math.min(e,t)/5;return"M 0 ".concat(t," L 0 0 L ").concat(e-n," 0 L ").concat(e," ").concat(n," L ").concat(e," ").concat(t," Z")})),Object(fe["a"])(Ie,we.CUT_RECT_SAMESIDE,(function(e,t){var n=Math.min(e,t)/5;return"M 0 ".concat(n," L ").concat(n," 0 L ").concat(e-n," 0 L ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L 0 ").concat(t," Z")})),Object(fe["a"])(Ie,we.ROUND_RECT_DIAGONAL,(function(e,t){var n=Math.min(e,t)/8;return"M 0 0 L ".concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L ").concat(n," ").concat(t," Q 0 ").concat(t," 0 ").concat(t-n," L 0 0 Z")})),Object(fe["a"])(Ie,we.ROUND_RECT_SINGLE,(function(e,t){var n=Math.min(e,t)/8;return"M 0 0 L ".concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L 0 ").concat(t," L 0 0 Z")})),Object(fe["a"])(Ie,we.ROUND_RECT_SAMESIDE,(function(e,t){var n=Math.min(e,t)/8;return"M 0 ".concat(n," Q 0 0 ").concat(n," 0 L ").concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t," L 0 ").concat(t," Z")})),Object(fe["a"])(Ie,we.MESSAGE,(function(e,t){var n=e/5,o=t/5;return"M 0 0 L ".concat(e," 0 L ").concat(e," ").concat(t-o," L ").concat(e/2," ").concat(t-o," L ").concat(e/2-n," ").concat(t," L ").concat(e/2-n," ").concat(t-o," L 0 ").concat(t-o," Z")})),Object(fe["a"])(Ie,we.ROUND_MESSAGE,(function(e,t){var n=Math.min(e,t)/8,o=e/5,l=t/5;return"M 0 ".concat(n," Q 0 0 ").concat(n," 0 L ").concat(e-n," 0 Q ").concat(e," 0 ").concat(e," ").concat(n," L ").concat(e," ").concat(t-n-l," Q ").concat(e," ").concat(t-l," ").concat(e-n," ").concat(t-l," L ").concat(e/2," ").concat(t-l," L ").concat(e/2-o," ").concat(t," L ").concat(e/2-o," ").concat(t-l," L ").concat(n," ").concat(t-l," Q 0 ").concat(t-l," 0 ").concat(t-n-l," L 0 ").concat(n," Z")})),Object(fe["a"])(Ie,we.L,(function(e,t){var n=Math.min(e,t)/4;return"M 0 0 L 0 ".concat(t," L ").concat(e," ").concat(t," L ").concat(e," ").concat(t-n," L ").concat(n," ").concat(t-n," L ").concat(n," 0 Z")})),Object(fe["a"])(Ie,we.RING_RECT,(function(e,t){var n=Math.min(e,t)/4;return"M 0 0 ".concat(e," 0 ").concat(e," ").concat(t," L 0 ").concat(t," L 0 0 Z M ").concat(n," ").concat(n," L ").concat(n," ").concat(t-n," L ").concat(e-n," ").concat(t-n," L ").concat(e-n," ").concat(n," Z")})),Object(fe["a"])(Ie,we.PLUS,(function(e,t){var n=Math.min(e,t)/4;return"M ".concat(e/2-n/2," 0 L ").concat(e/2-n/2," ").concat(t/2-n/2," L 0 ").concat(t/2-n/2," L 0 ").concat(t/2+n/2," L ").concat(e/2-n/2," ").concat(t/2+n/2," L ").concat(e/2-n/2," ").concat(t," L ").concat(e/2+n/2," ").concat(t," L ").concat(e/2+n/2," ").concat(t/2+n/2," L ").concat(e," ").concat(t/2+n/2," L ").concat(e," ").concat(t/2-n/2," L ").concat(e/2+n/2," ").concat(t/2-n/2," L ").concat(e/2+n/2," 0 Z")})),Ie),lt=[{type:"矩形",children:[{viewBox:[200,200],path:"M 0 0 L 200 0 L 200 200 L 0 200 Z"},{viewBox:[200,200],path:"M 50 0 L 150 0 Q 200 0 200 50 L 200 150 Q 200 200 150 200 L 50 200 Q 0 200 0 150 L 0 50 Q 0 0 50 0 Z",pathFormula:we.ROUND_RECT},{viewBox:[200,200],path:"M 0 150 L 0 0 L 150 0 L 200 50 L 200 200 L 50 200 Z",pathFormula:we.CUT_RECT_DIAGONAL},{viewBox:[200,200],path:"M 0 200 L 0 0 L 150 0 L 200 50 L 200 200 Z",pathFormula:we.CUT_RECT_SINGLE},{viewBox:[200,200],path:"M 0 50 L 50 0 L 150 0 L 200 50 L 200 200 L 0 200 Z",pathFormula:we.CUT_RECT_SAMESIDE},{viewBox:[200,200],path:"M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 50 200 Q 0 200 0 150 L 0 0 Z",pathFormula:we.ROUND_RECT_DIAGONAL},{viewBox:[200,200],path:"M 0 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 L 0 0 Z",pathFormula:we.ROUND_RECT_SINGLE},{viewBox:[200,200],path:"M 0 50 Q 0 0 50 0 L 150 0 Q 200 0 200 50 L 200 200 L 0 200 Z",pathFormula:we.ROUND_RECT_SAMESIDE}]},{type:"常用形状",children:[{viewBox:[200,200],path:"M 100 0 A 50 50 0 1 1 100 200 A 50 50 0 1 1 100 0 Z"},{viewBox:[200,200],path:"M 0 200 A 50 100 0 1 1 200 200 L 0 200 Z"},{viewBox:[200,200],path:"M 40 20 A 100 100 0 1 0 200 100 L 100 100 L 40 20 Z"},{viewBox:[200,200],path:"M 100 0 A 100 100 102 1 0 200 100 L 100 100 L 100 0 Z"},{viewBox:[200,200],path:"M 160 20 A 100 100 0 1 0 200 100 L 100 100 L 160 20 Z"},{viewBox:[200,200],path:"M 100 0 A 100 100 102 1 0 200 100 L 100 0 Z"},{viewBox:[200,200],path:"M 100 0 A 100 100 102 1 0 200 100 L 200 0 L 100 0 Z"},{viewBox:[200,200],path:"M 0 0 L 200 0 Q 200 200 0 200 L 0 0 Z"},{viewBox:[200,200],path:"M 100 0 L 0 200 L 200 200 L 100 0 Z"},{viewBox:[200,200],path:"M 0 0 L 0 200 L 200 200 Z"},{viewBox:[200,200],path:"M 50 0 L 200 0 L 150 200 L 0 200 L 50 0 Z"},{viewBox:[200,200],path:"M 0 0 L 150 0 L 200 200 L 50 200 L 0 0 Z"},{viewBox:[200,200],path:"M 50 0 L 150 0 L 200 200 L 0 200 L 50 0 Z"},{viewBox:[200,200],path:"M 100 0 L 0 100 L 100 200 L 200 100 L 100 0 Z"},{viewBox:[200,200],path:"M 100 0 L 0 90 L 50 200 L 150 200 L 200 90 L 100 0 Z"},{viewBox:[200,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,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,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,200],path:"M 100 0 L 0 50 L 0 200 L 200 200 L 200 50 L 100 0 Z"},{viewBox:[200,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,200],path:"M 50 0 A 25 50 0 1 0 50 200 L 150 200 A 25 50 0 1 0 150 0 L 50 0 Z"},{viewBox:[200,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,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,200],path:"M 200 0 L 200 200 L 0 200 L 0 100 L 200 0 Z"},{viewBox:[200,200],path:"M 0 0 L 200 100 L 200 200 L 0 200 L 0 0 Z"},{viewBox:[200,200],path:"M 200 0 L 100 0 L 0 100 L 0 200 L 200 0 Z"},{viewBox:[200,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,200],path:"M 0 0 L 0 200 L 200 200 L 200 140 L 60 140 L 60 0 L 0 0 Z",pathFormula:we.L},{viewBox:[200,200],path:"M0 0 L200 0 L200 200 L0 200 L0 0 Z M50 50 L50 150 L150 150 L150 50 Z",pathFormula:we.RING_RECT},{viewBox:[200,200],path:"M0 100 A100 100 0 1 1 0 101 Z M150 100 A50 50 0 1 0 150 101 Z"},{viewBox:[200,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",pathFormula:we.PLUS},{viewBox:[200,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,200],path:"M 0 0 L 200 0 L 200 160 L 100 160 L 60 200 L 60 160 L 0 160 Z",pathFormula:we.MESSAGE},{viewBox:[200,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",pathFormula:we.ROUND_MESSAGE},{viewBox:[200,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,200],path:"M 200 0 L 0 0 L 200 200 L 0 200 L 200 0 Z"},{viewBox:[200,200],path:"M 0 20 C 60 60 140 -40 200 20 L 200 180 C 140 140 60 240 0 180 L 0 20 Z"},{viewBox:[200,200],path:"M 0 20 C 40 -40 60 60 100 20 C 140 -40 160 60 200 20 L 200 180 C 140 240 160 140 100 180 C 40 240 60 140 0 180 L 0 20 Z"},{viewBox:[200,200],path:"M 100 0 Q 0 50 0 175 Q 100 225 200 175 Q 200 50 100 0 Z"},{viewBox:[200,200],path:"M 0 100 A 50 50 0 1 1 200 100 L 100 200 L 0 100 Z"},{viewBox:[200,200],path:"M 100 0 L 60 60 L 0 100 L 60 140 L 100 200 L 140 140 L 200 100 L 140 60 L 100 0 Z"},{viewBox:[200,200],path:"M 100 0 L 80 40 L 20 20 L 40 80 L 0 100 L 40 120 L 20 180 L 80 160 L 100 200 L 120 160 L 180 180 L 160 120 L 200 100 L 160 80 L 180 20 L 120 40 L 100 0 Z"}]},{type:"箭头",children:[{viewBox:[200,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,200],path:"M 0 0 L 200 100 L 0 200 L 60 100 L 0 0 Z"},{viewBox:[200,200],path:"M 200 0 L 0 100 L 200 200 L 140 100 L 200 0 Z"},{viewBox:[200,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,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,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,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,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,1024],path:"M398.208 302.912V64L0 482.112l398.208 418.176V655.36c284.48 0 483.584 95.552 625.792 304.64-56.896-298.688-227.584-597.312-625.792-657.088z",special:!0},{viewBox:[1024,1024],path:"M625.792 302.912V64L1024 482.112l-398.208 418.176V655.36C341.312 655.36 142.208 750.912 0 960c56.896-298.688 227.584-597.312 625.792-657.088z",special:!0}]},{type:"其他形状",children:[{viewBox:[1024,1024],path:"M995.336 243.4016c-15.7584-36.5736-38.3376-69.26639999-66.91440001-97.37280001-28.5768-27.98879999-61.73999999-49.8624-98.78399999-65.26799998-38.22-15.876-78.6744-23.8728-120.4224-23.87280001-57.97680001 0-114.5424 15.876-163.69919999 45.864-11.76 7.17360001-22.932 15.05279999-33.51600001 23.63760001-10.584-8.5848-21.75600001-16.46400001-33.51600001-23.63760001-49.1568-29.98799999-105.7224-45.86399999-163.69919999-45.864-41.74799999 0-82.2024 7.9968-120.4224 23.87280001-36.9264 15.28799999-70.2072 37.27919999-98.78399999 65.26799998-28.6944 28.10640001-51.156 60.79919999-66.91440001 97.37280001-16.34639999 37.9848-24.696 78.3216-24.696 119.83439999 0 39.1608 7.9968 79.96800001 23.8728 121.48080001 13.28880001 34.692 32.34000001 70.67760001 56.6832 107.016 38.57279999 57.5064 91.61040001 117.4824 157.4664 178.28160001 109.1328 100.78319999 217.2072 170.4024 221.79359999 173.22479998l27.87120001 17.8752c12.348 7.8792 28.224 7.8792 40.572 0l27.87119999-17.8752c4.58639999-2.94 112.54319999-72.44159999 221.79360001-173.22479998 65.85599999-60.79919999 118.89359999-120.7752 157.4664-178.28160001 24.3432-36.33839999 43.512-72.324 56.68319999-107.016 15.876-41.5128 23.8728-82.32 23.87280001-121.48080001 0.1176-41.5128-8.232-81.8496-24.5784-119.83439999z",special:!0},{viewBox:[1024,1024],path:"M985.20746667 343.50079998l-303.32586667-44.08319999L546.28693333 24.5248c-3.70346666-7.5264-9.79626667-13.6192-17.32266665-17.32266668-18.87573334-9.3184-41.81333333-1.55306667-51.25120001 17.32266668L342.1184 299.41759999l-303.32586667 44.08319999c-8.36266667 1.19466667-16.00853333 5.13706667-21.8624 11.11040001-14.69440001 15.17226667-14.45546667 39.30453334 0.71679999 54.1184l219.46026668 213.9648-51.84853333 302.1312c-1.43359999 8.24320001-0.11946667 16.8448 3.82293333 24.25173333 9.79626667 18.6368 32.9728 25.92426667 51.6096 16.00853334L512 822.44266665l271.3088 142.64320001c7.40693333 3.9424 16.00853333 5.25653333 24.25173333 3.82293333 20.78719999-3.584 34.7648-23.296 31.1808-44.0832l-51.84853333-302.1312 219.46026668-213.9648c5.97333334-5.85386666 9.91573333-13.49973334 11.11039999-21.8624 3.2256-20.90666667-11.34933333-40.26026667-32.256-43.36640001z",special:!0},{viewBox:[1024,1024],path:"M852.65066667 405.84533333C800.54044445 268.40177778 667.76177778 170.66666667 512.22755555 170.66666667S223.91466667 268.288 171.80444445 405.73155555C74.29688889 431.33155555 2.27555555 520.07822222 2.27555555 625.77777778c0 125.72444445 101.83111111 227.55555555 227.44177778 227.55555555h564.56533334C919.89333333 853.33333333 1021.72444445 751.50222222 1021.72444445 625.77777778c0-105.472-71.79377778-194.21866667-169.07377778-219.93244445z",special:!0},{viewBox:[1024,1024],path:"M926.25224691 323.7371485H654.6457886L898.88200917 15.14388241c5.05486373-6.53433603 0.49315743-16.02761669-7.76722963-16.02761668H418.30008701c-3.45210206 0-6.78091476 1.84934039-8.50696579 4.93157436L90.35039154 555.76772251c-3.82197013 6.53433603 0.86302552 14.7947231 8.50696578 14.79472311h215.01664245l-110.22068713 440.88274851c-2.34249783 9.61657002 9.24670194 16.39748478 16.39748477 9.49328065L933.03316167 340.62779071c6.41104668-6.0411786 2.09591911-16.8906422-6.78091476-16.89064221z",special:!0},{viewBox:[1024,1024],path:"M878.47822222 463.30311111c-22.18666667-49.83466667-53.93066667-93.98044445-94.32177777-131.072l-33.10933334-30.37866666c-4.89244445-4.32355555-12.62933333-2.38933333-14.79111111 3.75466666l-14.79111111 42.43911111c-9.216 26.624-26.16888889 53.81688889-50.176 80.55466667-1.59288889 1.70666667-3.41333333 2.16177778-4.66488889 2.27555556-1.25155555 0.11377778-3.18577778-0.11377778-4.89244445-1.70666667-1.59288889-1.36533333-2.38933333-3.41333333-2.27555555-5.46133333 4.20977778-68.49422222-16.27022222-145.74933333-61.09866667-229.83111112C561.26577778 124.01777778 509.72444445 69.51822222 445.32622222 31.51644445l-46.99022222-27.648c-6.144-3.64088889-13.99466667 1.13777778-13.65333333 8.30577777l2.50311111 54.61333333c1.70666667 37.31911111-2.61688889 70.31466667-12.85688889 97.73511112-12.51555555 33.56444445-30.49244445 64.73955555-53.47555556 92.72888888-16.15644445 19.56977778-34.24711111 37.20533333-54.04444444 52.45155556-47.90044445 36.75022222-87.38133333 84.65066667-114.11911111 138.24C125.72444445 502.10133333 111.50222222 562.74488889 111.50222222 623.50222222c0 53.70311111 10.58133333 105.69955555 31.51644445 154.73777778 20.25244445 47.21777778 49.152 89.77066667 85.90222222 126.17955555 36.864 36.40888889 79.64444445 65.08088889 127.31733333 84.992C405.61777778 1010.11911111 457.95555555 1020.58666667 512 1020.58666667s106.38222222-10.46755555 155.76177778-31.06133334c47.67288889-19.91111111 90.56711111-48.46933333 127.31733333-84.992 36.864-36.40888889 65.76355555-78.96177778 85.90222222-126.17955555 20.93511111-49.03822222 31.51644445-101.03466667 31.51644445-154.73777778 0-55.52355555-11.37777778-109.45422222-34.01955556-160.31288889z",special:!0},{viewBox:[1024,1024],path:"M968.20337778 20.11591112H705.44042667c-22.17301333 0-41.92483556 15.16430222-47.14951111 37.33731555C642.36202666 124.73685332 582.08711111 173.03324444 512 173.03324444s-130.36202666-48.29639112-146.29091556-115.58001777c-5.22467555-22.17301333-24.84906667-37.33731556-47.14951111-37.33731555H55.79662222c-30.96576 0-56.06968889 25.10392889-56.06968888 56.06968888v321.12639999c0 30.96576 25.10392889 56.06968889 56.06968888 56.06968889h95.57333334v494.43271112c0 30.96576 25.10392889 56.06968889 56.06968889 56.06968888h609.1207111c30.96576 0 56.06968889-25.10392889 56.06968889-56.06968888V453.38168888h95.57333334c30.96576 0 56.06968889-25.10392889 56.06968888-56.06968889V76.1856c0-30.96576-25.10392889-56.06968889-56.06968888-56.06968888z",special:!0},{viewBox:[1024,1024],path:"M980.94648889 239.80714666H523.46880001L373.99210666 96.82944c-1.91146667-1.78403556-4.46008889-2.80348444-7.00871111-2.80348445H43.05351111c-22.55530667 0-40.77795555 18.22264888-40.77795555 40.77795557v754.39217776c0 22.55530667 18.22264888 40.77795555 40.77795555 40.77795557h937.89297778c22.55530667 0 40.77795555-18.22264888 40.77795555-40.77795557V280.58510222c0-22.55530667-18.22264888-40.77795555-40.77795555-40.77795556z",special:!0},{viewBox:[1024,1024],path:"M972.60904597 164.57058577L841.30587843 33.39070759c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480282-29.3428675-26.75379095 0-51.90482023 10.47959553-70.76809219 29.3428675L558.60337778 174.68031322c-18.86327195 18.86327195-29.34286748 44.1375906-29.34286749 70.64480283 0 26.75379095 10.47959553 51.90482023 29.34286749 70.76809218l103.31648301 103.31648302c-24.28800376 53.50758189-57.69942011 101.59043198-99.24793416 143.13894603-41.42522469 41.67180341-89.63136414 75.08321976-143.13894603 99.61780223L316.21649759 558.84995649c-18.86327195-18.86327195-44.1375906-29.34286748-70.64480283-29.34286747-26.75379095 0-51.90482023 10.47959553-70.76809217 29.34286747L33.39070759 700.01627278c-18.86327195 18.86327195-29.34286748 44.1375906-29.3428675 70.76809217 0 26.75379095 10.47959553 51.90482023 29.3428675 70.76809219l131.05658883 131.05658883c30.08260365 30.205893 71.63111769 47.34311394 114.28923598 47.34311394 9.00012323 0 17.63037836-0.73973616 26.13734414-2.21920846 166.19405621-27.37023774 331.03192945-115.76870829 464.06114804-248.67463751C901.84095379 636.27567408 990.11613498 471.56109018 1017.85624079 304.87387654c8.38367642-50.91850535-8.50696579-103.31648302-45.24719482-140.30329077z",special:!0},{viewBox:[1024,1024],path:"M910.60451556 640.96028445c-20.38897778-65.49959112-43.83630221-120.54983112-79.89930667-210.64362666C836.31217778 193.67708444 737.93535999 2.27555556 511.36284444 2.27555556 282.24170667 2.27555556 186.03121778 197.50001778 192.14791111 430.31665779c-36.19043555 90.22122667-59.51032888 144.88917333-79.89930667 210.64362666-43.32657778 139.53706668-29.30915556 197.26336001-18.60494222 198.53767111 22.9376 2.80348444 89.32920888-105.00323556 89.32920889-105.00323556 0 62.44124445 32.11264001 143.86972444 101.69002667 202.61546667-33.64181333 10.32192-109.20846222 38.10190221-91.24067556 68.55793777 14.52714667 24.59420444 250.01984 15.67402668 317.94062222 8.02816 67.92078222 7.64586667 303.41347556 16.56604444 317.94062223-8.02816 17.96778667-30.32860444-57.72629333-58.23601779-91.24067555-68.55793777 69.57738667-58.87317334 101.69002667-140.30165333 101.69002667-202.61546667 0 0 66.39160889 107.80672 89.32920888 105.00323556 10.83164445-1.40174222 24.84906667-59.12803556-18.47751111-198.53767111z",special:!0},{viewBox:[1024,1024],path:"M1016.86992592 199.24764445c-37.13706667 16.01991111-77.55093333 27.54939259-119.17842962 32.03982222 42.96248889-25.60758518 75.60912592-66.02145185 91.02222222-114.08118519-39.68568889 23.66577778-84.58998518 41.02068148-131.31472593 50.00154074C819.53374815 126.79395555 765.76995555 101.79318518 706.18074075 101.79318518c-114.688 0-206.92385185 92.96402963-206.92385186 207.04521482 0 16.01991111 1.94180741 32.03982222 5.09724444 47.45291852-171.72859259-8.98085925-324.88865185-91.02222222-426.71217778-216.63288889-17.96171852 30.82619259-28.15620741 66.02145185-28.1562074 104.49351112 0 71.84687408 36.53025185 135.19834075 92.23585185 172.45677036-33.98162963-1.33499259-66.02145185-10.92266667-93.57084445-26.33576296v2.54862222c0 100.6098963 71.1186963 183.98625185 165.90317037 203.1616-17.3549037 4.49042963-35.92343703 7.03905185-54.49197037 7.03905185-13.47128889 0-26.2144-1.33499259-39.07887407-3.15543704C146.69748148 681.90814815 223.03478518 741.49736297 313.93564445 743.43917037c-71.1186963 55.7056-160.19911111 88.4736-256.9253926 88.4736-17.3549037 0-33.37481482-0.60681482-50.00154074-2.54862222C98.75911111 888.22518518 207.62168889 922.20681482 324.85831111 922.20681482 705.45256297 922.20681482 913.71140741 606.90583703 913.71140741 333.23235555c0-8.98085925 0-17.96171852-0.60681482-26.94257777 40.2925037-29.4912 75.60912592-66.02145185 103.76533333-107.04213333z",special:!0},{viewBox:[1024,1024],path:"M917.96720197 1.08889505H106.03279803C53.56084718 1.08889505 9.37393998 45.27580225 9.37393998 97.74775309v5.52336372c0 19.33177108 8.28504494 41.42522469 22.0934536 55.23363205l331.40179753 392.15879462v325.87843379c0 16.57008987 8.28504494 30.37849854 22.09345359 35.90186098l209.88780469 104.94390299 2.76168121 2.76168121c27.61681602 11.04672615 55.23363335-8.28504494 55.23363335-38.66354218V550.66354348l331.40179753-392.15879462c35.90186097-41.42522469 30.37849854-102.18222047-11.04672616-135.32240022-11.04672615-13.80840865-33.14017975-22.0934536-55.23363335-22.09345359z",special:!0},{viewBox:[1024,1024],path:"M491.70164031 97.48884502a25.89076502 25.89076502 0 0 1 40.59671938 0L745.66415762 367.01171317a25.89076502 25.89076502 0 0 0 30.49932208 7.72839349l208.00640948-89.14190458a25.89076502 25.89076502 0 0 1 35.56096592 29.06238339l-115.18801541 554.96855704A103.56306132 103.56306132 0 0 1 803.14165689 952.14301275H220.85834311a103.56306132 103.56306132 0 0 1-101.4011828-82.51387024l-115.18801541-554.96855704a25.89076502 25.89076502 0 0 1 35.54802012-29.06238339l208.01935528 89.14190458a25.89076502 25.89076502 0 0 0 30.49932208-7.72839349l213.36579793-269.52286815z",special:!0},{viewBox:[1024,1024],path:"M643.02466884 387.7801525c19.85376751-88.69205333 33.718272-152.84087467 41.61900049-192.57389433C704.52292267 95.17283515 652.90057916 2.27555515 550.58614084 2.27555515c-92.26012484 0-138.59407685 45.84971417-165.91530666 137.49816969l-0.70087152 2.67605334c-16.40038399 74.13942085-41.47882668 131.61085116-74.6746315 172.73287031a189.06953915 189.06953915 0 0 1-143.04142182 70.44391902l-26.17434983 0.5606965C77.66380049 387.52529067 27.76177817 438.90551468 27.76177817 501.84374084V881.55022182c0 77.4144 62.25009818 140.17422182 139.05282766 140.17422303h492.82707951c101.23127467 0 191.59267516-63.995904 225.93535999-159.98976l102.37815468-286.22301868c26.04691951-72.82688-11.39234134-153.15945284-83.63303784-179.42300483a138.04612267 138.04612267 0 0 0-47.17499733-8.30850884H643.02466884z",special:!0},{viewBox:[1024,1024],path:"M512 512c140.82958222 0 254.86222222-114.03264 254.86222222-254.86222222S652.82958222 2.27555555 512 2.27555555a254.78940445 254.78940445 0 0 0-254.86222222 254.86222223C257.13777778 397.96736 371.17041778 512 512 512z m0 72.81777778c-170.10232889 0-509.72444445 97.57582222-509.72444445 291.27111111v145.63555556h1019.4488889v-145.63555556c0-193.69528889-339.62211555-291.27111111-509.72444445-291.27111111z",special:!0},{viewBox:[1024,1024],path:"M1019.81297778 564.50161779l-138.89991111-472.51456c-8.66531556-25.99594668-29.43658667-43.45400889-57.21656889-43.45400891s-50.33528889 15.67402668-59.00060446 41.66997334l-92.00526221 274.48661334H351.69166222L259.6864 90.33045333c-8.66531556-25.99594668-31.22062222-41.66997333-59.00060444-41.66997332s-50.33528889 17.33063112-57.2165689 43.45400887L4.69674667 564.50161779c-5.22467555 17.33063112 1.78403556 36.44529778 15.67402667 46.89464887l491.11950221 368.27591113 492.77610666-368.27591113c13.76256-10.32192 20.77127111-29.43658667 15.54659557-46.89464887z",special:!0},{viewBox:[1024,1024],path:"M927.78951111 340.39277037c-12.01493333-47.81700741 12.01493333-124.03294815 89.08041481-150.97552592l-82.40545184-4.36906667s-31.19028148-109.22666667-174.27721483-118.9357037c-143.08693333-9.8304-236.65777778-3.64088889-236.65777777-3.6408889s106.07122963 67.47780741 63.5941926 187.74850371c-31.06891852 63.71555555-79.85682963 116.02299259-132.04290371 175.61220741-1.57771852 1.57771852-3.03407408 3.15543703-4.2477037 4.49042962C278.25493333 624.86755555 7.13007408 934.34311111 7.13007408 934.34311111c298.43152592 78.15774815 498.43768889-7.64586667 616.76657777-110.56165926 24.87940741-0.24272592 43.5693037-0.36408889 56.19105185-0.36408888 164.8109037 0 304.13558518-142.72284445 298.43152593-301.4656-3.88361482-109.1053037-38.71478518-133.74198518-50.72971852-181.5589926z",special:!0},{viewBox:[1024,1024],path:"M997.8886764 504.17210418L537.2729208 43.89182982c-13.97838539-13.97838539-36.56745619-13.97838539-50.5458416 0L26.1113236 504.17210418c-13.41924998 13.41924998-21.02349164 31.64706454-21.02349163 50.65766867 0 39.47496036 32.09437288 71.56933323 71.56933324 71.56933323h48.53295408V954.83524937c0 19.79339373 15.99127289 35.78466661 35.78466663 35.78466662H440.43066677V740.12724968h125.24633315v250.49266631h297.34821416c19.79339373 0 35.78466661-15.99127289 35.78466663-35.78466662V626.39910608h48.53295408c19.01060414 0 37.23841869-7.49241457 50.65766869-21.02349163 27.84494371-27.95677079 27.84494371-73.24673948-0.11182708-101.20351027z",special:!0}]}],ct={bar:"bar",horizontalBar:"bar",line:"line",area:"line",scatter:"line",pie:"pie",ring:"pie"},at=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.creatingElement,l=Object(g["c"])(t),c=l.theme,a=l.viewportRatio,r=$e(),i=r.addHistorySnapshot,u=function(n){t.addElement(n),e.setActiveElementIdList([n.id]),o.value&&e.setCreatingElement(null),setTimeout((function(){e.setEditorareaFocus(!0)}),0),i()},d=function(e){et(e).then((function(t){var n=t.width,o=t.height,l=o/n;lnt?(n=nt,o=n*l):o>nt*a.value&&(o=nt*a.value,n=o/l),u({type:"image",id:je(),src:e,width:n,height:o,left:(nt-n)/2,top:(nt*a.value-o)/2,fixedRatio:!0,rotate:0})}))},s=function(e){var t={type:"chart",id:je(),chartType:ct[e],left:300,top:81.25,width:400,height:400,rotate:0,themeColor:[c.value.themeColor],gridColor:c.value.fontColor,data:{labels:["类别1","类别2","类别3","类别4","类别5"],legends:["系列1"],series:[[12,19,5,2,18]]}},n={};"horizontalBar"===e?n={horizontalBars:!0}:"area"===e?n={showArea:!0}:"scatter"===e?n={showLine:!1}:"ring"===e&&(n={donut:!0}),u(Object(L["a"])(Object(L["a"])({},t),{},{options:n}))},f=function(e,t){for(var n={fontname:c.value.fontName,color:c.value.fontColor},o=[],l=0;l1&&void 0!==arguments[1]?arguments[1]:"请输入内容",n=e.left,o=e.top,l=e.width,a=e.height;u({type:"text",id:je(),left:n,top:o,width:l,height:a,content:t,rotate:0,defaultFontName:c.value.fontName,defaultColor:c.value.fontColor})},p=function(e,t){var n=e.left,o=e.top,l=e.width,a=e.height,r={type:"shape",id:je(),left:n,top:o,width:l,height:a,viewBox:t.viewBox,path:t.path,fill:c.value.themeColor,fixedRatio:!1,rotate:0};t.special&&(r.special=!0),t.pathFormula&&(r.pathFormula=t.pathFormula,r.viewBox=[l,a],r.path=ot[t.pathFormula](l,a)),u(r)},m=function(e,t){var n=e.left,o=e.top,l=e.start,a=e.end,r={type:"line",id:je(),left:n,top:o,start:l,end:a,points:t.points,color:c.value.themeColor,style:t.style,width:2};t.isBroken&&(r.broken=[(l[0]+a[0])/2,(l[1]+a[1])/2]),t.isCurve&&(r.curve=[(l[0]+a[0])/2,(l[1]+a[1])/2]),t.isCubic&&(r.cubic=[[(l[0]+a[0])/2,(l[1]+a[1])/2],[(l[0]+a[0])/2,(l[1]+a[1])/2]]),u(r)},v=function(e){u({type:"latex",id:je(),width:e.w,height:e.h,rotate:0,left:(nt-e.w)/2,top:(nt*a.value-e.h)/2,path:e.path,latex:e.latex,color:c.value.fontColor,strokeWidth:2,viewBox:[e.w,e.h],fixedRatio:!0})},O=function(e){u({type:"video",id:je(),width:500,height:300,rotate:0,left:(nt-500)/2,top:(nt*a.value-300)/2,src:e})},h=function(e){u({type:"audio",id:je(),width:50,height:50,rotate:0,left:(nt-50)/2,top:(nt*a.value-50)/2,loop:!1,autoplay:!1,fixedRatio:!0,color:c.value.themeColor,src:e})};return{createImageElement:d,createChartElement:s,createTableElement:f,createTextElement:b,createShapeElement:p,createLineElement:m,createLatexElement:v,createVideoElement:O,createAudioElement:h}},rt=function(){var e=ae(),t=ce(),n=Object(g["c"])(t),o=n.currentSlide,l=$e(),c=l.addHistorySnapshot,a=at(),r=a.createTextElement,i=function(n){var l,a=Ze(n),r=a.groupIdMap,i=a.elIdMap,u=o.value.elements.map((function(e){return e.id})),d=Object(T["a"])(n);try{for(d.s();!(l=d.n()).done;){var s=l.value,f=u.includes(s.id);s.id=i[s.id],f&&(s.left=s.left+10,s.top=s.top+10),s.groupId&&(s.groupId=r[s.groupId])}}catch(b){d.e(b)}finally{d.f()}t.addElement(n),e.setActiveElementIdList(Object.values(i)),c()},u=function(e){var n=e.map((function(e){var t,n=Ze(e.elements),o=n.groupIdMap,l=n.elIdMap,c=Object(T["a"])(e.elements);try{for(c.s();!(t=c.n()).done;){var a=t.value;a.id=l[a.id],a.groupId&&(a.groupId=o[a.groupId])}}catch(d){c.e(d)}finally{c.f()}if(e.animations){var r,i=Object(T["a"])(e.animations);try{for(i.s();!(r=i.n()).done;){var u=r.value;u.elId=l[u.elId]}}catch(d){i.e(d)}finally{i.f()}}return Object(L["a"])(Object(L["a"])({},e),{},{id:je()})}));t.addSlide(n),c()},d=function(e){r({left:0,top:0,width:600,height:50},e)},s=function(e,t){var n=(null===t||void 0===t?void 0:t.onlySlide)||!1,o=(null===t||void 0===t?void 0:t.onlyElements)||!1,l=Re(e);if("object"===Object(Qe["a"])(l)){var c=l.type,a=l.data;"elements"!==c||n?"slides"!==c||o||u(a):i(a)}else if(!o&&!n){var r=Ke(l);d(r)}};return{addSlidesFromClipboard:u,pasteTextClipboardData:s}},it=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.selectedSlidesIndex,l=Object(g["c"])(t),c=l.currentSlide,a=l.slides,r=l.theme,i=l.slideIndex,u=Object(y["computed"])((function(){return[].concat(Object(K["a"])(o.value),[i.value])})),d=Object(y["computed"])((function(){return a.value.filter((function(e,t){return u.value.includes(t)}))})),s=Object(y["computed"])((function(){return d.value.map((function(e){return e.id}))})),f=rt(),b=f.pasteTextClipboardData,p=f.addSlidesFromClipboard,m=$e(),v=m.addHistorySnapshot,O=function(){var n={id:je(),elements:[],background:{type:"solid",color:r.value.backgroundColor}};t.updateSlideIndex(0),e.setActiveElementIdList([]),t.setSlides([n])},h=function(e){e===V.UP&&i.value>0?t.updateSlideIndex(i.value-1):e===V.DOWN&&i.value0&&void 0!==arguments[0]?arguments[0]:s.value;a.value.length===n.length?O():t.deleteSlide(n),e.updateSelectedSlidesIndex([]),v()},N=function(){var e=Object(K["a"])(s.value);j(),w(e)},I=function(){var t=Array.from(Array(a.value.length),(function(e,t){return t}));e.setActiveElementIdList([]),e.updateSelectedSlidesIndex(t)};return{resetSlides:O,updateSlideIndex:h,copySlide:j,pasteSlide:x,createSlide:C,createSlideByTemplate:k,copyAndPasteSlide:E,deleteSlide:w,cutSlide:N,selectAllSlide:I}},ut=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.activeElementIdList,l=Object(g["c"])(t),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=function(){var n,l=JSON.parse(JSON.stringify(c.value.elements)),a=Object(T["a"])(l);try{for(a.s();!(n=a.n()).done;){var i=n.value;o.value.includes(i.id)&&(i.lock=!0)}}catch(u){a.e(u)}finally{a.f()}t.updateSlide({elements:l}),e.setActiveElementIdList([]),r()},u=function(n){var o=JSON.parse(JSON.stringify(c.value.elements));if(n.groupId){var l,a=[],i=Object(T["a"])(o);try{for(i.s();!(l=i.n()).done;){var u=l.value;u.groupId===n.groupId&&(u.lock=!1,a.push(u.id))}}catch(b){i.e(b)}finally{i.f()}t.updateSlide({elements:o}),e.setActiveElementIdList(a)}else{var d,s=Object(T["a"])(o);try{for(s.s();!(d=s.n()).done;){var f=d.value;if(f.id===n.id){f.lock=!1;break}}}catch(b){s.e(b)}finally{s.f()}t.updateSlide({elements:o}),e.setActiveElementIdList([n.id])}r()};return{lockElement:i,unlockElement:u}},dt=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.activeElementIdList,l=n.activeGroupElementId,c=Object(g["c"])(t),a=c.currentSlide,r=$e(),i=r.addHistorySnapshot,u=function(){if(o.value.length){var n=[];n=l.value?a.value.elements.filter((function(e){return e.id!==l.value})):a.value.elements.filter((function(e){return!o.value.includes(e.id)})),e.setActiveElementIdList([]),t.updateSlide({elements:n}),i()}},d=function(){a.value.elements.length&&(e.setActiveElementIdList([]),t.updateSlide({elements:[]}),i())};return{deleteElement:u,deleteAllElements:d}},st=function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.activeElementIdList,l=n.activeElementList,c=n.handleElementId,a=Object(g["c"])(t),r=a.currentSlide,i=$e(),u=i.addHistorySnapshot,d=Object(y["computed"])((function(){if(l.value.length<2)return!1;var e=l.value[0].groupId;if(!e)return!0;var t=l.value.every((function(t){return(t.groupId&&t.groupId)===e}));return!t})),s=function(){var e;if(l.value.length){var n,c=JSON.parse(JSON.stringify(r.value.elements)),a=je(),i=[],d=Object(T["a"])(c);try{for(d.s();!(n=d.n()).done;){var s=n.value;o.value.includes(s.id)&&(s.groupId=a,i.push(s))}}catch(m){d.e(m)}finally{d.f()}var f=c.findIndex((function(e){return e.id===i[i.length-1].id})),b=i.map((function(e){return e.id}));c=c.filter((function(e){return!b.includes(e.id)}));var p=f-i.length+1;(e=c).splice.apply(e,[p,0].concat(i)),t.updateSlide({elements:c}),u()}},f=function(){if(l.value.length){var n=l.value.some((function(e){return e.groupId}));if(n){var a,i=JSON.parse(JSON.stringify(r.value.elements)),d=Object(T["a"])(i);try{for(d.s();!(a=d.n()).done;){var s=a.value;o.value.includes(s.id)&&s.groupId&&delete s.groupId}}catch(b){d.e(b)}finally{d.f()}t.updateSlide({elements:i});var f=c.value?[c.value]:[];e.setActiveElementIdList(f),u()}}};return{canCombine:d,combineElements:s,uncombineElements:f}},ft=function(){var e=ae(),t=Object(g["c"])(e),n=t.activeElementIdList,o=t.activeElementList,l=rt(),c=l.pasteTextClipboardData,a=dt(),r=a.deleteElement,i=function(){if(n.value.length){var t=De(JSON.stringify({type:"elements",data:o.value}));Ae(t).then((function(){e.setEditorareaFocus(!0)}))}},u=function(){i(),r()},d=function(){Fe().then((function(e){c(e)})).catch((function(e){return Se["a"].warning(e)}))},s=function(){i(),d()};return{copyElement:i,cutElement:u,pasteElement:d,quickCopyElement:s}},bt=function(){var e=ae(),t=Object(g["c"])(ce()),n=t.currentSlide,o=function(){var t=n.value.elements.filter((function(e){return!e.lock})),o=t.map((function(e){return e.id}));e.setActiveElementIdList(o)};return{selectAllElement:o}},pt=function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeGroupElementId,l=Object(g["c"])(e),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=function(t){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,a=[],i=function(e){var n=e.left,o=e.top;switch(t){case V.LEFT:n-=l;break;case V.RIGHT:n+=l;break;case V.UP:o-=l;break;case V.DOWN:o+=l;break;default:break}return Object(L["a"])(Object(L["a"])({},e),{},{left:n,top:o})};a=o.value?c.value.elements.map((function(e){return o.value===e.id?i(e):e})):c.value.elements.map((function(e){return n.value.includes(e.id)?i(e):e})),e.updateSlide({elements:a}),r()};return{moveElement:i}},mt=function(){var e=ce(),t=Object(g["c"])(e),n=t.currentSlide,o=$e(),l=o.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})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return;var i=n[r+1],u=n.splice(a,o.length);if(i.groupId){var d=n.filter((function(e){return e.groupId===i.groupId}));n.splice.apply(n,[a+d.length,0].concat(Object(K["a"])(u)))}else n.splice.apply(n,[a+1,0].concat(Object(K["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],b=n.splice(s,1)[0];if(f.groupId){var p=n.filter((function(e){return e.groupId===f.groupId}));n.splice(s+p.length,0,b)}else n.splice(s+1,0,b)}return n},r=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n[a-1],i=n.splice(a,o.length);if(r.groupId){var u=n.filter((function(e){return e.groupId===r.groupId}));n.splice.apply(n,[a-u.length,0].concat(Object(K["a"])(i)))}else n.splice.apply(n,[a-1,0].concat(Object(K["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 b=n.filter((function(e){return e.groupId===s.groupId}));n.splice(d-b.length,0,f)}else n.splice(d-1,0,f)}return n},i=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel,r=l.maxLevel;if(r===e.length-1)return null;var i=n.splice(a,o.length);n.push.apply(n,Object(K["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},u=function(e,t){var n=JSON.parse(JSON.stringify(e));if(t.groupId){var o=n.filter((function(e){return e.groupId===t.groupId})),l=c(e,o),a=l.minLevel;if(0===a)return;var r=n.splice(a,o.length);n.unshift.apply(n,Object(K["a"])(r))}else{var i=e.findIndex((function(e){return e.id===t.id}));if(0===i)return;n.splice(i,1),n.unshift(t)}return n},d=function(t,o){var c;o===k.UP?c=a(n.value.elements,t):o===k.DOWN?c=r(n.value.elements,t):o===k.TOP?c=i(n.value.elements,t):o===k.BOTTOM&&(c=u(n.value.elements,t)),c&&(e.updateSlide({elements:c}),l())};return{orderElement:d}},vt=function(){var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen&&e.webkitRequestFullScreen()},Ot=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen()},ht=function(){return document.mozFullScreen||document.webkitIsFullScreen||document.webkitFullScreen},jt=function(){var e=he(),t=ce(),n=function(){vt(),e.setScreening(!0)},o=function(){t.updateSlideIndex(0),n()},l=function(){e.setScreening(!1),ht()&&Ot()};return{enterScreening:n,enterScreeningFromStart:o,exitScreening:l}},yt=function(){var e=ae(),t=Object(g["c"])(e),n=t.canvasPercentage,o=function(t){var o=n.value,l=5,c=120,a=60;"+"===t&&o<=c&&(o+=l),"-"===t&&o>=a&&(o-=l),e.setCanvasPercentage(o)},l=function(t){e.setCanvasPercentage(t)};return{scaleCanvas:o,setCanvasPercentage:l}},gt=function(){var e=ae(),t=Oe(),n=Object(g["c"])(e),o=n.activeElementIdList,l=n.disableHotkeys,c=n.handleElement,a=n.handleElementId,r=n.editorAreaFocus,i=n.thumbnailsFocus,u=Object(g["c"])(ce()),d=u.currentSlide,s=Object(g["c"])(t),f=s.ctrlKeyState,b=s.shiftKeyState,p=it(),m=p.updateSlideIndex,v=p.copySlide,O=p.createSlide,h=p.deleteSlide,j=p.cutSlide,x=p.copyAndPasteSlide,C=p.selectAllSlide,E=st(),w=E.combineElements,N=E.uncombineElements,I=dt(),S=I.deleteElement,B=ut(),L=B.lockElement,T=ft(),M=T.copyElement,_=T.cutElement,D=T.quickCopyElement,z=bt(),A=z.selectAllElement,F=pt(),R=F.moveElement,P=mt(),H=P.orderElement,q=$e(),W=q.redo,G=q.undo,U=jt(),X=U.enterScreening,Z=yt(),Y=Z.scaleCanvas,J=Z.setCanvasPercentage,Q=function(){o.value.length?M():i.value&&v()},K=function(){o.value.length?_():i.value&&j()},$=function(){o.value.length?D():i.value&&x()},ee=function(){r.value&&A(),i.value&&C()},te=function(){r.value&&L()},ne=function(){r.value&&w()},oe=function(){r.value&&N()},le=function(){o.value.length?S():i.value&&h()},re=function(e){o.value.length?R(e):e!==V.UP&&e!==V.DOWN||m(e)},ie=function(e){c.value&&H(c.value,e)},ue=function(){i.value&&O()},de=function(){if(d.value.elements.length)if(a.value){var t=d.value.elements.findIndex((function(e){return e.id===a.value})),n=t>=d.value.elements.length-1?0:t+1,o=d.value.elements[n].id;e.setActiveElementIdList([o])}else{var l=d.value.elements[0];e.setActiveElementIdList([l.id])}},se=function(e){var n=e.ctrlKey,o=e.shiftKey,c=e.altKey,a=e.metaKey,u=n||a,d=e.key.toUpperCase();if(u&&!f.value&&t.setCtrlKeyState(!0),o&&!b.value&&t.setShiftKeyState(!0),u&&d===V.F&&(e.preventDefault(),X(),t.setCtrlKeyState(!1)),r.value||i.value){if(u&&d===V.C){if(l.value)return;e.preventDefault(),Q()}if(u&&d===V.X){if(l.value)return;e.preventDefault(),K()}if(u&&d===V.D){if(l.value)return;e.preventDefault(),$()}if(u&&d===V.Z){if(l.value)return;e.preventDefault(),G()}if(u&&d===V.Y){if(l.value)return;e.preventDefault(),W()}if(u&&d===V.A){if(l.value)return;e.preventDefault(),ee()}if(u&&d===V.L){if(l.value)return;e.preventDefault(),te()}if(!o&&u&&d===V.G){if(l.value)return;e.preventDefault(),ne()}if(o&&u&&d===V.G){if(l.value)return;e.preventDefault(),oe()}if(c&&d===V.F){if(l.value)return;e.preventDefault(),ie(k.TOP)}if(c&&d===V.B){if(l.value)return;e.preventDefault(),ie(k.BOTTOM)}if(d===V.DELETE||d===V.BACKSPACE){if(l.value)return;e.preventDefault(),le()}if(d===V.UP){if(l.value)return;e.preventDefault(),re(V.UP)}if(d===V.DOWN){if(l.value)return;e.preventDefault(),re(V.DOWN)}if(d===V.LEFT){if(l.value)return;e.preventDefault(),re(V.LEFT)}if(d===V.RIGHT){if(l.value)return;e.preventDefault(),re(V.RIGHT)}if(d===V.ENTER){if(l.value)return;e.preventDefault(),ue()}if(d===V.MINUS){if(l.value)return;e.preventDefault(),Y("-")}if(d===V.EQUAL){if(l.value)return;e.preventDefault(),Y("+")}if(d===V.DIGIT_0){if(l.value)return;e.preventDefault(),J(90)}if(d===V.TAB){if(l.value)return;e.preventDefault(),de()}}},fe=function(){f.value&&t.setCtrlKeyState(!1),b.value&&t.setShiftKeyState(!1)};Object(y["onMounted"])((function(){document.addEventListener("keydown",se),document.addEventListener("keyup",fe),window.addEventListener("blur",fe)})),Object(y["onUnmounted"])((function(){document.removeEventListener("keydown",se),document.removeEventListener("keyup",fe),window.removeEventListener("blur",fe)}))},xt=function(){var e=Object(g["c"])(ae()),t=e.editorAreaFocus,n=e.thumbnailsFocus,o=e.disableHotkeys,l=rt(),c=l.pasteTextClipboardData,a=at(),r=a.createImageElement,i=function(e){tt(e).then((function(e){return r(e)}))},u=function(e){if((t.value||n.value)&&!o.value&&e.clipboardData){var l=e.clipboardData.items,a=l[0];if(a){var r,u=Object(T["a"])(l);try{for(u.s();!(r=u.n()).done;){var d=r.value;if("file"===d.kind&&-1!==d.type.indexOf("image")){var s=d.getAsFile();return void(s&&i(s))}}}catch(f){u.e(f)}finally{u.f()}"string"===a.kind&&"text/plain"===a.type&&a.getAsString((function(e){return c(e)}))}}};Object(y["onMounted"])((function(){document.addEventListener("paste",u)})),Object(y["onUnmounted"])((function(){document.removeEventListener("paste",u)}))},Ct=function(e){return Object(y["pushScopeId"])("data-v-5e62abba"),e=e(),Object(y["popScopeId"])(),e},kt={class:"editor-header"},Et={class:"left"},wt={class:"menu-item"},Nt=Object(y["createTextVNode"])(),It=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"文件",-1)})),Vt=Object(y["createTextVNode"])("导出 JSON"),St=Object(y["createTextVNode"])("导出 PPTX"),Bt=Object(y["createTextVNode"])("导出图片"),Lt={class:"menu-item"},Tt=Object(y["createTextVNode"])(),Mt=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"编辑",-1)})),_t=Object(y["createTextVNode"])("撤销"),Dt=Object(y["createTextVNode"])("重做"),zt=Object(y["createTextVNode"])("添加页面"),At=Object(y["createTextVNode"])("删除页面"),Ft=Object(y["createTextVNode"])("重置幻灯片"),Rt={class:"menu-item"},Pt=Object(y["createTextVNode"])(),Ht=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"演示",-1)})),qt=Object(y["createTextVNode"])("从头开始"),Wt=Object(y["createTextVNode"])("从当前页开始"),Gt={class:"menu-item"},Ut=Object(y["createTextVNode"])(),Xt=Ct((function(){return Object(y["createElementVNode"])("span",{class:"text"},"帮助",-1)})),Zt=Object(y["createTextVNode"])("意见反馈"),Yt=Object(y["createTextVNode"])("快捷键"),Jt={class:"right"},Qt={href:"https://github.com/pipipi-pikachu/PPTist",target:"_blank"},Kt={class:"menu-item"};function $t(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconFolderClose"),r=Object(y["resolveComponent"])("MenuItem"),i=Object(y["resolveComponent"])("Menu"),u=Object(y["resolveComponent"])("Dropdown"),d=Object(y["resolveComponent"])("IconEdit"),s=Object(y["resolveComponent"])("IconPpt"),f=Object(y["resolveComponent"])("IconHelpcenter"),b=Object(y["resolveComponent"])("Tooltip"),p=Object(y["resolveComponent"])("IconGithub"),m=Object(y["resolveComponent"])("HotkeyDoc"),v=Object(y["resolveComponent"])("Drawer"),O=Object(y["resolveComponent"])("ExportImgDialog"),h=Object(y["resolveComponent"])("Modal"),j=Object(y["resolveComponent"])("FullscreenSpin");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",kt,[Object(y["createElementVNode"])("div",Et,[Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[0]||(t[0]=function(t){return e.exportJSON()})},{default:Object(y["withCtx"])((function(){return[Vt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.exportPPTX()})},{default:Object(y["withCtx"])((function(){return[St]})),_:1}),Object(y["createVNode"])(r,{onClick:t[2]||(t[2]=function(t){return e.exportImgDialogVisible=!0})},{default:Object(y["withCtx"])((function(){return[Bt]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",wt,[Object(y["createVNode"])(a),Nt,It])]})),_:1}),Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[3]||(t[3]=function(t){return e.undo()})},{default:Object(y["withCtx"])((function(){return[_t]})),_:1}),Object(y["createVNode"])(r,{onClick:t[4]||(t[4]=function(t){return e.redo()})},{default:Object(y["withCtx"])((function(){return[Dt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[5]||(t[5]=function(t){return e.createSlide()})},{default:Object(y["withCtx"])((function(){return[zt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[6]||(t[6]=function(t){return e.deleteSlide()})},{default:Object(y["withCtx"])((function(){return[At]})),_:1}),Object(y["createVNode"])(r,{onClick:t[7]||(t[7]=function(t){return e.toggleGridLines()})},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])(Object(y["toDisplayString"])(e.showGridLines?"关闭网格线":"打开网格线"),1)]})),_:1}),Object(y["createVNode"])(r,{onClick:t[8]||(t[8]=function(t){return e.resetSlides()})},{default:Object(y["withCtx"])((function(){return[Ft]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Lt,[Object(y["createVNode"])(d),Tt,Mt])]})),_:1}),Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[9]||(t[9]=function(t){return e.enterScreeningFromStart()})},{default:Object(y["withCtx"])((function(){return[qt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[10]||(t[10]=function(t){return e.enterScreening()})},{default:Object(y["withCtx"])((function(){return[Wt]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Rt,[Object(y["createVNode"])(s),Pt,Ht])]})),_:1}),Object(y["createVNode"])(u,{trigger:["click"]},{overlay:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,null,{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onClick:t[11]||(t[11]=function(t){return e.goIssues()})},{default:Object(y["withCtx"])((function(){return[Zt]})),_:1}),Object(y["createVNode"])(r,{onClick:t[12]||(t[12]=function(t){return e.hotkeyDrawerVisible=!0})},{default:Object(y["withCtx"])((function(){return[Yt]})),_:1})]})),_:1})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Gt,[Object(y["createVNode"])(f),Ut,Xt])]})),_:1})]),Object(y["createElementVNode"])("div",Jt,[Object(y["createVNode"])(b,{mouseLeaveDelay:0,title:"幻灯片放映"},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",{class:"menu-item",onClick:t[13]||(t[13]=function(t){return e.enterScreening()})},[Object(y["createVNode"])(s,{size:"18",fill:"#666",style:{"margin-top":"2px"}})])]})),_:1}),Object(y["createElementVNode"])("a",Qt,[Object(y["createElementVNode"])("div",Kt,[Object(y["createVNode"])(p,{size:"18",fill:"#666"})])])]),Object(y["createVNode"])(v,{width:"320",placement:"right",visible:e.hotkeyDrawerVisible,onClose:t[14]||(t[14]=function(t){return e.hotkeyDrawerVisible=!1})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m)]})),_:1},8,["visible"]),Object(y["createVNode"])(h,{visible:e.exportImgDialogVisible,"onUpdate:visible":t[16]||(t[16]=function(t){return e.exportImgDialogVisible=t}),footer:null,centered:"",closable:!1,width:680,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{onClose:t[15]||(t[15]=function(t){return e.exportImgDialogVisible=!1})})]})),_:1},8,["visible"]),Object(y["createVNode"])(j,{loading:e.exporting,tip:"正在导出..."},null,8,["loading"])])}n("9911"),n("cc71");var en=n("21a6"),tn=n("8f74"),nn=n("e774"),on=(n("00b4"),["style","script","template"]),ln=["html","head","body","p","dt","dd","li","option","thead","th","tbody","tr","td","tfoot","colgroup"],cn={li:["ul","ol","menu"],dt:["dl"],dd:["dl"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table"],td:["table"]},an=["!doctype","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],rn=function(e,t){var n=t-e.position;un(e,n)},un=function(e,t){e.position=e.position+t},dn=function(e,t){var n=!1;while(!n){var o=e.indexOf("<",t);if(-1===o)return o;var l=e.charAt(o+1);if("/"===l||"!"===l||/[A-Za-z0-9]/.test(l))return o;t=o+1}return-1},sn=function(e){var t=e.str,n=dn(t,e.position);if(n!==e.position){-1===n&&(n=t.length);var o=t.slice(e.position,n);rn(e,n),e.tokens.push({type:"text",content:o})}},fn=function(e){var t=e.str;un(e,4);var n=t.indexOf("--\x3e",e.position),o=n+3;-1===n&&(n=o=t.length);var l=t.slice(e.position,n);rn(e,o),e.tokens.push({type:"comment",content:l})},bn=function(e){var t=e.str,n=t.length,o=e.position;while(o"===l);if(c)break;o++}var a=o+1;while(a"===r);if(!i)break;a++}rn(e,a);var u=t.slice(o,a);return e.tokens.push({type:"tag",content:u}),u},pn=function(e){var t=e.str,n=e.tokens,o=e.position,l=null,c=o,a=[],r=t.length;while(o"===i;if(d){o!==c&&a.push(t.slice(c,o));break}var s=/\s/.test(i);if(s)o!==c&&a.push(t.slice(c,o)),c=o+1,o++;else{var f="'"===i||'"'===i;f?(l=i,o++):o++}}}rn(e,o);for(var b="attribute",p=0;p1){var h=m+O;n.push({type:b,content:h}),p+=1;continue}var j=a[p+2];if(p+=1,j){var y=m+"="+j;n.push({type:b,content:y}),p+=1;continue}}}if(Object(te["endsWith"])(m,"=")){var g=a[p+1];if(g&&-1===g.indexOf("=")){var x=m+g;n.push({type:b,content:x}),p+=1;continue}var C=m.slice(0,-1);n.push({type:b,content:C})}else n.push({type:b,content:m})}},mn=function(e,t){var n=t.str,o=t.tokens,l=e.toLowerCase(),c=n.length,a=t.position;while(a=0){var l=t[o].tagName;if(l===e)break;if(n.includes(l))return!0;o--}}return!1},gn=function(e,t){e.splice(t)},xn=function e(t){var n=t.stack,o=t.tokens,l=t.cursor,c=n[n.length-1].children,a=o.length;while(l-1)if(n[d].tagName===u){s=!0;break}while(l0){if(u===n[p].tagName){gn(n,p);var m=p-1;c=n[m].children;break}p-=1}}var v=[],O=void 0;while(l127&&o<2048?(t+=String.fromCharCode(o>>6|192),t+=String.fromCharCode(63&o|128)):(t+=String.fromCharCode(o>>12|224),t+=String.fromCharCode(o>>6&63|128),t+=String.fromCharCode(63&o|128))}return t},_n=function(e){var t,n,o,l,c,a,r,i="",u=0;e=Mn(e);while(u>2,c=(3&t)<<4|n>>4,a=(15&n)<<2|o>>6,r=63&o,isNaN(n)?a=r=64:isNaN(o)&&(r=64),i=i+Ln.charAt(l)+Ln.charAt(c)+Ln.charAt(a)+Ln.charAt(r);return i},Dn=function(e){var t=new XMLSerializer,n=t.serializeToString(e);return Tn+_n(n)},zn=function(){var e=Object(g["c"])(ce()),t=e.slides,n=Object(y["ref"])(!1),o=function(e,t,o){var l=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];n.value=!0;var c="png"===t?nn["c"]:nn["b"];setTimeout((function(){if(e){var a=function(e){return!e.tagName||"FOREIGNOBJECT"!==e.tagName.toUpperCase()},r={quality:o,width:1600,filter:a};l&&(r.fontEmbedCSS=""),c(e,r).then((function(e){n.value=!1,Object(en["saveAs"])(e,"pptist_slides.".concat(t))})).catch((function(){n.value=!1,Se["a"].error("导出图片失败")}))}}),200)},l=function(){var e=new Blob([JSON.stringify(t.value)],{type:""});Object(en["saveAs"])(e,"pptist_slides.json")},c=function(e){var t=ee()(e),n=t.getAlpha(),o=0===n?"#ffffff":t.setAlpha(1).toHexString();return{alpha:n,color:o}},a=function(e){var t=Nn(e),n=[],o=function e(t){var o,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=Object(T["a"])(t);try{for(a.s();!(o=a.n()).done;){var r=o.value;if("tagName"in r&&["div","li","p"].includes(r.tagName)&&n.length){var i=n[n.length-1];i.options||(i.options={}),i.options.breakLine=!0}var u=Object(L["a"])({},l),d="attributes"in r?r.attributes.find((function(e){return"style"===e.key})):null;if(d&&d.value){var s,f=d.value.split(";"),b=Object(T["a"])(f);try{for(b.s();!(s=b.n()).done;){var p=s.value,m=p.split(": "),v=Object(He["a"])(m,2),O=v[0],h=v[1],j=[Object(te["trim"])(O),Object(te["trim"])(h)],y=j[0],g=j[1];y&&g&&(u[y]=g)}}catch(w){b.e(w)}finally{b.f()}}if("tagName"in r&&("ul"===r.tagName&&(u["list-type"]="ul"),"ol"===r.tagName&&(u["list-type"]="ol")),"tagName"in r&&("em"===r.tagName&&(u["font-style"]="italic"),"strong"===r.tagName&&(u["font-weight"]="bold"),"sup"===r.tagName&&(u["vertical-align"]="super"),"sub"===r.tagName&&(u["vertical-align"]="sub"),"a"===r.tagName)){var x=r.attributes.find((function(e){return"href"===e.key}));u["href"]=(null===x||void 0===x?void 0:x.value)||""}if("tagName"in r&&"br"===r.tagName)n.push({text:"",options:{breakLine:!0}});else if("content"in r){var C=r.content.replace(/ /g," ").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,""),k={};u["font-size"]&&(k.fontSize=.75*parseInt(u["font-size"])),u["color"]&&(k.color=c(u["color"]).color),u["background-color"]&&(k.highlight=c(u["background-color"]).color),u["text-decoration-line"]&&(-1!==u["text-decoration-line"].indexOf("underline")&&(k.underline={color:k.color||"#000000",style:"sng"}),-1!==u["text-decoration-line"].indexOf("line-through")&&(k.strike="sngStrike")),u["text-decoration"]&&(-1!==u["text-decoration"].indexOf("underline")&&(k.underline={color:k.color||"#000000",style:"sng"}),-1!==u["text-decoration"].indexOf("line-through")&&(k.strike="sngStrike")),u["vertical-align"]&&("super"===u["vertical-align"]&&(k.superscript=!0),"sub"===u["vertical-align"]&&(k.subscript=!0)),u["text-align"]&&(k.align=u["text-align"]),u["font-weight"]&&(k.bold="bold"===u["font-weight"]),u["font-style"]&&(k.italic="italic"===u["font-style"]),u["font-family"]&&(k.fontFace=u["font-family"]),u["href"]&&(k.hyperlink={url:u["href"]}),n.push({text:C,options:k})}else"children"in r&&e(r.children,u);if("tagName"in r&&"li"===r.tagName){var E=n[n.length-1];E.options||(E.options={}),"ol"===u["list-type"]&&(E.options.bullet={type:"number",indent:15}),"ul"===u["list-type"]&&(E.options.bullet={indent:15})}}}catch(w){a.e(w)}finally{a.f()}};return o(t),n},r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:1,y:1};return e.map((function(e){if(void 0!==e.close)return{close:!0};if("M"===e.type)return{x:e.x/100*t.x,y:e.y/100*t.y,moveTo:!0};if(e.curve){if("cubic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"cubic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y,x2:e.curve.x2/100*t.x,y2:e.curve.y2/100*t.y}};if("quadratic"===e.curve.type)return{x:e.x/100*t.x,y:e.y/100*t.y,curve:{type:"quadratic",x1:e.curve.x1/100*t.x,y1:e.curve.y1/100*t.y}}}return{x:e.x/100*t.x,y:e.y/100*t.y}}))},i=function(){n.value=!0;var e,o=new tn["a"],l=Object(T["a"])(t.value);try{for(l.s();!(e=l.n()).done;){var i=e.value,u=o.addSlide();if(i.background){var d=i.background;if("image"===d.type&&d.image)u.background={data:d.image};else if("solid"===d.type&&d.color){var s=c(d.color);u.background={color:s.color,transparency:100*(1-s.alpha)}}else if("gradient"===d.type&&d.gradientColor){var f=Object(He["a"])(d.gradientColor,2),b=f[0],p=f[1],m=ee.a.mix(b,p).toHexString(),v=c(m);u.background={color:v.color,transparency:100*(1-v.alpha)}}}if(i.elements){var O,h=Object(T["a"])(i.elements);try{var j=function(){var e=O.value;if("text"===e.type){var n=a(e.content),l={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:"middle",margin:7.5,lineSpacingMultiple:1.25};if(e.rotate&&(l.rotate=e.rotate),e.wordSpace&&(l.charSpacing=.75*e.wordSpace),e.lineHeight&&(l.lineSpacingMultiple=e.lineHeight/1.2),e.fill){var i=c(e.fill),d=void 0===e.opacity?1:e.opacity;l.fill={color:i.color,transparency:100*(1-i.alpha*d)}}if(e.defaultColor&&(l.color=c(e.defaultColor).color),e.defaultFontName&&(l.fontFace=e.defaultFontName),e.shadow){var s=c(e.shadow.color);l.shadow={type:"outer",color:s.color.replace("#",""),opacity:s.alpha,blur:.75*e.shadow.blur,offset:(e.shadow.h+e.shadow.v)/2*.75,angle:45}}void 0!==e.opacity&&(l.transparency=100*(1-e.opacity)),u.addText(n,l)}else if("image"===e.type){var f,b,p={path:e.src,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};if(e.flipH&&(p.flipH=e.flipH),e.flipV&&(p.flipV=e.flipV),e.rotate&&(p.rotate=e.rotate),e.link){var m=e.link,v=m.type,h=m.target;if("web"===v)p.hyperlink={url:h};else if("slide"===v){var j=t.value.findIndex((function(e){return e.id===h}));-1!==j&&(p.hyperlink={slide:j+1})}}if(null!==(f=e.filters)&&void 0!==f&&f.opacity&&(p.transparency=100-parseInt(null===(b=e.filters)||void 0===b?void 0:b.opacity)),e.clip){"ellipse"===e.clip.shape&&(p.rounding=!0);var y=e.clip.range,g=e.width/((y[1][0]-y[0][0])/100),x=e.height/((y[1][1]-y[0][1])/100);p.w=g/100,p.h=x/100;var C=y[0][0]/100*g/100,k=y[0][1]/100*x/100,E=(y[1][0]-y[0][0])/100*g/100,w=(y[1][1]-y[0][1])/100*x/100;p.sizing={type:"crop",w:E,h:w,x:C,y:k}}u.addImage(p)}else if("shape"===e.type){if(e.special){var N=document.querySelector(".thumbnail-list .base-element-".concat(e.id," svg")),I=Dn(N),V={data:I,x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100};if(e.rotate&&(V.rotate=e.rotate),e.link){var S=e.link,B=S.type,L=S.target;if("web"===B)V.hyperlink={url:L};else if("slide"===B){var T=t.value.findIndex((function(e){return e.id===L}));-1!==T&&(V.hyperlink={slide:T+1})}}u.addImage(V)}else{var M,_={x:e.width/e.viewBox[0],y:e.height/e.viewBox[1]},D=r(Bn(e.path),_),z=c(e.fill),A=void 0===e.opacity?1:e.opacity,F={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fill:{color:z.color,transparency:100*(1-z.alpha*A)},points:D};if(e.flipH&&(F.flipH=e.flipH),e.flipV&&(F.flipV=e.flipV),null!==(M=e.outline)&&void 0!==M&&M.width){var R,P=c((null===(R=e.outline)||void 0===R?void 0:R.color)||"#000000");F.line={color:P.color,transparency:100*(1-P.alpha),width:.75*e.outline.width,dashType:"solid"===e.outline.style?"solid":"dash"}}if(e.shadow){var H=c(e.shadow.color);F.shadow={type:"outer",color:H.color.replace("#",""),opacity:H.alpha,blur:.75*e.shadow.blur,offset:(e.shadow.h+e.shadow.v)/2*.75,angle:45}}if(e.link){var q=e.link,W=q.type,G=q.target;if("web"===W)F.hyperlink={url:G};else if("slide"===W){var U=t.value.findIndex((function(e){return e.id===G}));-1!==U&&(F.hyperlink={slide:U+1})}}u.addShape("custGeom",F)}if(e.text){var X=a(e.text.content),Z={x:e.left/100,y:e.top/100,w:e.width/100,h:e.height/100,fontSize:15,fontFace:"微软雅黑",color:"#000000",valign:e.text.align};e.rotate&&(Z.rotate=e.rotate),e.text.defaultColor&&(Z.color=c(e.text.defaultColor).color),e.text.defaultFontName&&(Z.fontFace=e.text.defaultFontName),u.addText(X,Z)}}else if("line"===e.type){var Y=Je(e),J=r(Bn(Y)),Q=Ge(e),$=Q.minX,te=Q.maxX,ne=Q.minY,oe=Q.maxY,le=c(e.color),ce={x:e.left/100,y:e.top/100,w:(te-$)/100,h:(oe-ne)/100,line:{color:le.color,transparency:100*(1-le.alpha),width:.75*e.width,dashType:"solid"===e.style?"solid":"dash",beginArrowType:e.points[0]?"arrow":"none",endArrowType:e.points[1]?"arrow":"none"},points:J};u.addShape("custGeom",ce)}else if("chart"===e.type){for(var ae=[],re=0;re1||Ce.rowspan>1)for(var ke=ye;ke=10)t=e.themeColor;else if(1===e.themeColor.length)t=ee()(e.themeColor[0]).analogous(10).map((function(e){return e.toHexString()}));else{var n=e.themeColor.length,o=ee()(e.themeColor[n-1]).analogous(11-n).map((function(e){return e.toHexString()}));t=[].concat(Object(K["a"])(e.themeColor.slice(0,n-1)),Object(K["a"])(o))}return t})),u=function(){if(n.value)for(var e=0;e<10;e++)n.value.style.setProperty("--theme-color-".concat(e+1),i.value[e])};Object(y["watch"])(i,u),Object(y["onMounted"])(u);var d=function(){n.value&&e.gridColor&&n.value.style.setProperty("--grid-color",e.gridColor)};return Object(y["watch"])((function(){return e.gridColor}),d),Object(y["onMounted"])(d),{chartHeight:l,themeColors:i,slideScale:o,chartRef:n}}}));n("97a7"),n("8749");const Ql=Gn()(Jl,[["render",Xl],["__scopeId","data-v-79ce410e"]]);var Kl=Ql,$l=Object(y["defineComponent"])({name:"base-element-chart",components:{ElementOutline:ul,Chart:Kl},props:{elementInfo:{type:Object,required:!0},needScaleSize:{type:Boolean,default:!0}},setup:function(e){return{chartWidth:Object(y["computed"])((function(){return e.needScaleSize?10*e.elementInfo.width:e.elementInfo.width})),chartHeight:Object(y["computed"])((function(){return e.needScaleSize?10*e.elementInfo.height:e.elementInfo.height}))}}});n("c645");const ec=Gn()($l,[["render",Ul],["__scopeId","data-v-60d9ae43"]]);var tc=ec,nc={class:"element-content"};function oc(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("StaticTable");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"base-element-table",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["createElementVNode"])("div",nc,[Object(y["createVNode"])(a,{data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme},null,8,["data","width","colWidths","outline","theme"])])],4)],4)}var lc=["width"],cc=["rowspan","colspan"],ac=["innerHTML"];function rc(e,t,n,o,l,c){var a,r,i,u,d;return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"static-table",style:Object(y["normalizeStyle"])({width:e.totalWidth+"px"})},[Object(y["createElementVNode"])("table",{class:Object(y["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(y["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(y["createElementVNode"])("colgroup",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.colSizeList,(function(e,t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,lc)})),128))]),Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.data,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("tr",{key:n},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t,(function(t,o){return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("td",{class:"cell",style:Object(y["normalizeStyle"])(Object(L["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(y["createElementVNode"])("div",{class:"cell-text",innerHTML:e.formatText(t.text)},null,8,ac)],12,cc)),[[y["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))]])})),128))])})),128))])],6)],4)}var ic=function(e){if(!e)return{};var t=e.bold,n=e.em,o=e.underline,l=e.strikethrough,c=e.color,a=e.backcolor,r=e.fontsize,i=e.fontname,u=e.align,d="".concat(o?"underline":""," ").concat(l?"line-through":"");return" "===d&&(d="none"),{fontWeight:t?"bold":"normal",fontStyle:n?"italic":"normal",textDecoration:d,color:c||"#000",backgroundColor:a||"",fontSize:r||"14px",fontFamily:i||"微软雅黑",textAlign:u||"left"}},uc=function(e){return e.replace(/\n/g,"
").replace(/ /g," ")},dc=function(e){var t=Object(y["computed"])((function(){for(var t=[],n=0;n1||c.rowspan>1)for(var a=n;a1?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0,elementList:e.elementList,scaleMultiElement:e.scaleMultiElement},null,8,["elementList","scaleMultiElement"])):Object(y["createCommentVNode"])("",!0),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.elementList,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:t.id,elementInfo:t,isSelected:e.activeElementIdList.includes(t.id),isActive:e.handleElementId===t.id,isActiveGroupElement:e.activeGroupElementId===t.id,isMultiSelect:e.activeElementIdList.length>1,rotateElement:e.rotateElement,scaleElement:e.scaleElement,openLinkDialog:e.openLinkDialog,dragLineElement:e.dragLineElement},null,8,["elementInfo","isSelected","isActive","isActiveGroupElement","isMultiSelect","rotateElement","scaleElement","openLinkDialog","dragLineElement"])})),128)),Object(y["createVNode"])(d)]),Object(y["createElementVNode"])("div",{class:"viewport",ref:"viewportRef",style:Object(y["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")})},[e.mouseSelectionVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:0,top:e.mouseSelection.top,left:e.mouseSelection.left,width:e.mouseSelection.width,height:e.mouseSelection.height,quadrant:e.mouseSelectionQuadrant},null,8,["top","left","width","height","quadrant"])):Object(y["createCommentVNode"])("",!0),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.elementList,(function(t,n){return Object(y["openBlock"])(),Object(y["createBlock"])(f,{key:t.id,elementInfo:t,elementIndex:n+1,isMultiSelect:e.activeElementIdList.length>1,selectElement:e.selectElement,openLinkDialog:e.openLinkDialog},null,8,["elementInfo","elementIndex","isMultiSelect","selectElement","openLinkDialog"])})),128))],4)],4),Object(y["createVNode"])(p,{visible:e.linkDialogVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.linkDialogVisible=t}),footer:null,centered:"",width:540,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{onClose:t[1]||(t[1]=function(t){return e.linkDialogVisible=!1})})]})),_:1},8,["visible"])],32)),[[m,e.contextmenus],[v,e.removeEditorAreaFocus]])}var Yc=function(){var e=window.getSelection();e&&e.removeAllRanges()},Jc=function(e){var t=Object(y["ref"])(0),n=Object(y["ref"])(0),o=ae(),l=Object(g["c"])(o),c=l.canvasPercentage,a=Object(g["c"])(ce()),r=a.viewportRatio,i=function(){if(e.value){var l=e.value.clientWidth,a=e.value.clientHeight;if(a/l>r.value){var i=l*(c.value/100);o.setCanvasScale(i/nt),t.value=(l-i)/2,n.value=(a-i*r.value)/2}else{var u=a*(c.value/100);o.setCanvasScale(u/(nt*r.value)),t.value=(l-u/r.value)/2,n.value=(a-u)/2}}};Object(y["watch"])([c,r],i);var u=Object(y["computed"])((function(){return{width:nt,height:nt*r.value,left:t.value,top:n.value}})),d=new ResizeObserver(i);return Object(y["onMounted"])((function(){e.value&&d.observe(e.value)})),Object(y["onUnmounted"])((function(){e.value&&d.unobserve(e.value)})),{viewportStyles:u}},Qc=function(e,t){var n=ae(),o=Object(g["c"])(n),l=o.canvasScale,c=Object(y["ref"])(!1),a=Object(y["ref"])(1),r=Object(y["ref"])({top:0,left:0,width:0,height:0}),i=function(o){if(t.value){var i=!0,u=t.value.getBoundingClientRect(),d=5,s=o.pageX,f=o.pageY,b=(s-u.x)/l.value,p=(f-u.y)/l.value;r.value={top:p,left:b,width:0,height:0},c.value=!1,a.value=4,document.onmousemove=function(e){if(i){var t=e.pageX,n=e.pageY,o=(t-s)/l.value,u=(n-f)/l.value,b=Math.abs(o),p=Math.abs(u);if(!(b0&&u>0?m=4:o<0&&u<0?m=1:o>0&&u<0?m=2:o<0&&u>0&&(m=3),r.value=Object(L["a"])(Object(L["a"])({},r.value),{},{width:b,height:p}),c.value=!0,a.value=m}}},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null,i=!1;for(var t=[],o=0;ou&&md&&Ou-s&&md-f&&Ou&&md-f&&Ou-s&&md&&O0&&Math.abs(r-45)<=d?r-=r-45:r<0&&Math.abs(r+45)<=d?r-=r+45:r>0&&Math.abs(r-90)<=d?r-=r-90:r<0&&Math.abs(r+90)<=d?r-=r+90:r>0&&Math.abs(r-135)<=d?r-=r-135:r<0&&Math.abs(r+135)<=d?r-=r+135:r>0&&Math.abs(r-180)<=d?r-=r-180:r<0&&Math.abs(r+180)<=d&&(r-=r+180),e.value=e.value.map((function(e){return o.id===e.id?Object(L["a"])(Object(L["a"])({},e),{},{rotate:r}):e}))}},document.onmouseup=function(){c=!1,document.onmousemove=null,document.onmouseup=null,i!==r&&(n.updateSlide({elements:e.value}),a())}}};return{rotateElement:r}},ta={text:"文本",image:"图片",shape:"形状",line:"线条",chart:"图表",table:"表格",video:"视频",audio:"音频"},na={text:20,image:20,shape:15,chart:200,table:20,video:250,audio:20},oa=function(e,t){var n=e.left,o=e.top,l=e.width,c=e.height,a=Math.sqrt(Math.pow(l,2)+Math.pow(c,2))/2,r=180*Math.atan(c/l)/Math.PI,i=(180-t-r)*Math.PI/180,u=(r-t)*Math.PI/180,d=(90-t)*Math.PI/180,s=t*Math.PI/180,f=l/2,b=c/2,p=n+f,m=o+b,v={left:p+a*Math.cos(i),top:m-a*Math.sin(i)},O={left:p+b*Math.cos(d),top:m-b*Math.sin(d)},h={left:p+a*Math.cos(u),top:m-a*Math.sin(u)},j={left:p+f*Math.cos(s),top:m+f*Math.sin(s)},y={left:p-a*Math.cos(i),top:m+a*Math.sin(i)},g={left:p-b*Math.sin(s),top:m+b*Math.cos(s)},x={left:p-a*Math.cos(u),top:m+a*Math.sin(u)},C={left:p-f*Math.cos(s),top:m-f*Math.sin(s)};return{leftTopPoint:v,topPoint:O,rightTopPoint:h,rightPoint:j,rightBottomPoint:y,bottomPoint:g,leftBottomPoint:x,leftPoint:C}},la=function(e,t){var n,o=(n={},Object(fe["a"])(n,N.RIGHT_BOTTOM,t.leftTopPoint),Object(fe["a"])(n,N.LEFT_BOTTOM,t.rightTopPoint),Object(fe["a"])(n,N.LEFT_TOP,t.rightBottomPoint),Object(fe["a"])(n,N.RIGHT_TOP,t.leftBottomPoint),Object(fe["a"])(n,N.TOP,t.bottomPoint),Object(fe["a"])(n,N.BOTTOM,t.topPoint),Object(fe["a"])(n,N.LEFT,t.rightPoint),Object(fe["a"])(n,N.RIGHT,t.leftPoint),n);return o[e]},ca=function(e,t){var n=ae(),o=ce(),l=Object(g["c"])(n),c=l.activeElementIdList,a=l.activeGroupElementId,r=l.canvasScale,i=Object(g["c"])(o),u=i.viewportRatio,d=Object(g["c"])(Oe()),s=d.ctrlOrShiftKeyActive,f=$e(),b=f.addHistorySnapshot,p=function(l,i,d){var f=!0;n.setScalingState(!0);var p,m=i.left,v=i.top,O=i.width,h=i.height,j="rotate"in i&&i.rotate?i.rotate:0,y=Math.PI*j/180,g=s.value||"fixedRatio"in i&&i.fixedRatio,x=O/h,C=l.pageX,k=l.pageY,E=na[i.type]||20,w=function(e){return e2&&void 0!==arguments[2])||arguments[2];if(r.value||n.setEditorareaFocus(!0),l.value.includes(i.id)){if(u.value){var s=[];if(i.groupId){var f=[];e.value.forEach((function(e){e.groupId===i.groupId&&f.push(e.id)})),s=l.value.filter((function(e){return!f.includes(e)}))}else s=l.value.filter((function(e){return e!==i.id}));s.length>0&&n.setActiveElementIdList(s)}else if(a.value!==i.id)n.setHandleElementId(i.id);else if(c.value!==i.id){var b=o.pageX,p=o.pageY;o.target.onmouseup=function(e){var t=e.pageX,o=e.pageY;b===t&&p===o&&(n.setActiveGroupElementId(i.id),e.target.onmouseup=null)}}}else{var m=[];if(m=u.value?[].concat(Object(K["a"])(l.value),[i.id]):[i.id],i.groupId){var v=[];e.value.forEach((function(e){e.groupId===i.groupId&&v.push(e.id)})),m=[].concat(Object(K["a"])(m),v)}n.setActiveElementIdList(Object(te["uniq"])(m)),n.setHandleElementId(i.id)}d&&t(o,i)},s=function(){var t=e.value.filter((function(e){return!e.lock})),o=t.map((function(e){return e.id}));n.setActiveElementIdList(o)};return{selectElement:d,selectAllElement:s}},ra=function(e,t){var n=ce(),o=Object(g["c"])(ae()),l=o.activeElementIdList,c=o.activeGroupElementId,a=o.canvasScale,r=Object(g["c"])(n),i=r.viewportRatio,u=$e(),d=u.addHistorySnapshot,s=function(o,r){if(l.value.includes(r.id)){var u,s=!0,f=nt,b=nt*i.value,p=5,m=JSON.parse(JSON.stringify(e.value)),v=m.filter((function(e){return l.value.includes(e.id)})),O=r.left,h=r.top,j=r.width,y="height"in r&&r.height?r.height:0,g="rotate"in r&&r.rotate?r.rotate:0,x=o.pageX,C=o.pageY,k=null,E=r.id===c.value,w=[],N=[],I=Object(T["a"])(e.value);try{for(I.s();!(u=I.n()).done;){var V=u.value;if("line"!==V.type&&((!E||V.id!==r.id)&&(E||!l.value.includes(V.id)))){var S=void 0,B=void 0,M=void 0,_=void 0;if("rotate"in V&&V.rotate){var D=qe({left:V.left,top:V.top,width:V.width,height:V.height,rotate:V.rotate}),z=D.xRange,A=D.yRange;S=z[0],B=A[0],M=z[1]-z[0],_=A[1]-A[0]}else S=V.left,B=V.top,M=V.width,_=V.height;var F=S+M,R=B+_,P=B+_/2,H=S+M/2,q={value:B,range:[S,F]},W={value:R,range:[S,F]},G={value:P,range:[S,F]},U={value:S,range:[B,R]},X={value:F,range:[B,R]},Z={value:H,range:[B,R]};w.push(q,W,G),N.push(U,X,Z)}}}catch(ne){I.e(ne)}finally{I.f()}var Y={value:0,range:[0,f]},J={value:b,range:[0,f]},Q={value:b/2,range:[0,f]},$={value:0,range:[0,b]},ee={value:f,range:[0,b]},te={value:f/2,range:[0,b]};w.push(Y,J,Q),N.push($,ee,te),w=Xe(w),N=Xe(N),document.onmousemove=function(n){var o=n.pageX,c=n.pageY;if(!1!==k&&(k=Math.abs(x-o)v&&(U[0]=W-H,X[0]=0),m>O&&(U[1]=G-q,X[1]=0),e.value=e.value.map((function(e){if(e.id===l.id){var t=Object(L["a"])(Object(L["a"])({},e),{},{left:H,top:q,start:U,end:X});return a===I.START||a===I.END?(l.broken&&(t.broken=[(U[0]+X[0])/2,(U[1]+X[1])/2]),l.curve&&(t.curve=[(U[0]+X[0])/2,(U[1]+X[1])/2]),l.cubic&&(t.cubic=[[(U[0]+X[0])/2,(U[1]+X[1])/2],[(U[0]+X[0])/2,(U[1]+X[1])/2]])):a===I.C?(l.broken&&(t.broken=[j-H,y-q]),l.curve&&(t.curve=[j-H,y-q])):l.cubic&&(t.cubic=[[E-H,w-q],[N-H,V-q]]),t}return e}))}},document.onmouseup=function(n){r=!1,document.onmousemove=null,document.onmouseup=null;var o=n.pageX,l=n.pageY;u===o&&d===l||(t.updateSlide({elements:e.value}),c())}};return{dragLineElement:a}},ua=function(e){var t=ae(),n=Object(g["c"])(t),o=n.canvasScale,l=n.creatingElement,c=function(t){var n=t.start,l=t.end;if(e.value){var c=e.value.getBoundingClientRect(),a=Object(He["a"])(n,2),r=a[0],i=a[1],u=Object(He["a"])(l,2),d=u[0],s=u[1],f=Math.min(r,d),b=Math.max(r,d),p=Math.min(i,s),m=Math.max(i,s),v=(f-c.x)/o.value,O=(p-c.y)/o.value,h=(b-f)/o.value,j=(m-p)/o.value;return{left:v,top:O,width:h,height:j}}},a=function(t){var n=t.start,l=t.end;if(e.value){var c=e.value.getBoundingClientRect(),a=Object(He["a"])(n,2),r=a[0],i=a[1],u=Object(He["a"])(l,2),d=u[0],s=u[1],f=Math.min(r,d),b=Math.max(r,d),p=Math.min(i,s),m=Math.max(i,s),v=(f-c.x)/o.value,O=(p-c.y)/o.value,h=(b-f)/o.value,j=(m-p)/o.value,y=[r===f?0:h,i===p?0:j],g=[d===f?0:h,s===p?0:j];return{left:v,top:O,start:y,end:g}}},r=at(),i=r.createTextElement,u=r.createShapeElement,d=r.createLineElement,s=function(e){if(l.value){var n=l.value.type;if("text"===n){var o=c(e);o&&i(o)}else if("shape"===n){var r=c(e);r&&u(r,l.value.data)}else if("line"===n){var s=a(e);s&&d(s,l.value.data)}t.setCreatingElement(null)}};return{insertElementFromCreateSelection:s}},da=["id"];function sa(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"editable-element",ref:"elementRef",id:"editable-element-".concat(e.elementInfo.id),style:Object(y["normalizeStyle"])({zIndex:e.elementIndex})},[(Object(y["openBlock"])(),Object(y["createBlock"])(Object(y["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo,selectElement:e.selectElement,contextmenus:e.contextmenus},null,8,["elementInfo","selectElement","contextmenus"]))],12,da)}var fa=function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeElementList,l=Object(g["c"])(e),c=l.currentSlide,a=l.viewportRatio,r=$e(),i=r.addHistorySnapshot,u=function(t){var l,r=nt,u=nt*a.value,d=Ue(o.value),s=d.minX,f=d.maxX,b=d.minY,p=d.maxY,m=JSON.parse(JSON.stringify(c.value.elements)),v=Object(T["a"])(m);try{for(v.s();!(l=v.n()).done;){var O=l.value;if(n.value.includes(O.id)){if(t===E.CENTER){var h=b+(p-b)/2-u/2,j=s+(f-s)/2-r/2;O.top=O.top-h,O.left=O.left-j}if(t===E.TOP){var y=b-0;O.top=O.top-y}else if(t===E.VERTICAL){var g=b+(p-b)/2-u/2;O.top=O.top-g}else if(t===E.BOTTOM){var x=p-u;O.top=O.top-x}else if(t===E.LEFT){var C=s-0;O.left=O.left-C}else if(t===E.HORIZONTAL){var k=s+(f-s)/2-r/2;O.left=O.left-k}else if(t===E.RIGHT){var w=f-r;O.left=O.left-w}}}}catch(N){v.e(N)}finally{v.f()}e.updateSlide({elements:m}),i()};return{alignElementToCanvas:u}},ba=["src"];function pa(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ImageClipHandler"),r=Object(y["resolveComponent"])("ImageOutline"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-image",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[e.isCliping?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,src:e.elementInfo.src,clipData:e.elementInfo.clip,width:e.elementInfo.width,height:e.elementInfo.height,top:e.elementInfo.top,left:e.elementInfo.left,rotate:e.elementInfo.rotate,clipPath:e.clipShape.style,onClip:t[0]||(t[0]=function(t){return e.handleClip(t)})},null,8,["src","clipData","width","height","top","left","rotate","clipPath"])):Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:1,class:"element-content",style:Object(y["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)})},[Object(y["createVNode"])(r,{elementInfo:e.elementInfo},null,8,["elementInfo"]),Object(y["createElementVNode"])("div",{class:"image-content",style:Object(y["normalizeStyle"])({clipPath:e.clipShape.style})},[Object(y["createElementVNode"])("img",{src:e.elementInfo.src,draggable:!1,style:Object(y["normalizeStyle"])({top:e.imgPosition.top,left:e.imgPosition.left,width:e.imgPosition.width,height:e.imgPosition.height,filter:e.filter}),onDragstart:t[1]||(t[1]=Object(y["withModifiers"])((function(){}),["prevent"])),alt:""},null,44,ba)],4)],36)),[[i,e.contextmenus]])],4)],6)}var ma=function(e){return Object(y["pushScopeId"])("data-v-e9da1d6a"),e=e(),Object(y["popScopeId"])(),e},va=["src"],Oa=["src"],ha=["onMousedown"],ja=ma((function(){return Object(y["createElementVNode"])("svg",{width:"16",height:"16",fill:"#fff",stroke:"#333"},[Object(y["createElementVNode"])("path",{"stroke-width":"0.3","shape-rendering":"crispEdges",d:"M 16 0 L 0 0 L 0 16 L 4 16 L 4 4 L 16 4 L 16 0 Z"})],-1)})),ya=[ja],ga=["onMousedown"],xa=ma((function(){return Object(y["createElementVNode"])("svg",{width:"16",height:"16",fill:"#fff",stroke:"#333"},[Object(y["createElementVNode"])("path",{"stroke-width":"0.3","shape-rendering":"crispEdges",d:"M 16 0 L 0 0 L 0 4 L 16 4 Z"})],-1)})),Ca=[xa];function ka(e,t,n,o,l,c){var a=Object(y["resolveDirective"])("click-outside");return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"image-clip-handler",style:Object(y["normalizeStyle"])(e.clipWrapperPositionStyle)},[Object(y["createElementVNode"])("img",{class:"bottom-img",src:e.src,draggable:!1,alt:"",style:Object(y["normalizeStyle"])(e.bottomImgPositionStyle)},null,12,va),Object(y["createElementVNode"])("div",{class:"top-image-content",style:Object(y["normalizeStyle"])(Object(L["a"])(Object(L["a"])({},e.topImgWrapperPositionStyle),{},{clipPath:e.clipPath}))},[Object(y["createElementVNode"])("img",{class:"top-img",src:e.src,draggable:!1,alt:"",style:Object(y["normalizeStyle"])(e.topImgPositionStyle)},null,12,Oa)],4),Object(y["createElementVNode"])("div",{class:"operate",style:Object(y["normalizeStyle"])(e.topImgWrapperPositionStyle),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.moveClipRange(t)}),["stop"]))},[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(["left-top","right-top","left-bottom","right-bottom"],(function(t){return Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["clip-point",t,e.rotateClassName]),key:t,onMousedown:Object(y["withModifiers"])((function(n){return e.scaleClipRange(n,t)}),["stop"])},ya,42,ha)})),64)),(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(["top","bottom","left","right"],(function(t){return Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["clip-point",t,e.rotateClassName]),key:t,onMousedown:Object(y["withModifiers"])((function(n){return e.scaleClipRange(n,t)}),["stop"])},Ca,42,ga)})),64))],36)],4)),[[a,e.handleClip]])}var Ea=Object(y["defineComponent"])({name:"image-clip-handler",emits:["clip"],props:{src:{type:String,required:!0},clipData:{type:Object},clipPath:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},top:{type:Number,required:!0},left:{type:Number,required:!0},rotate:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(g["c"])(ae()),l=o.canvasScale,c=Object(g["c"])(Oe()),a=c.ctrlOrShiftKeyActive,r=Object(y["ref"])({top:"0",left:"0"}),i=Object(y["ref"])(!1),u=Object(y["ref"])(null),d=function(){var t=e.clipData?e.clipData.range:[[0,0],[100,100]],n=Object(He["a"])(t,2),o=n[0],l=n[1],c=(l[0]-o[0])/100,a=(l[1]-o[1])/100,r=o[0]/c,i=o[1]/a;return{widthScale:c,heightScale:a,left:r,top:i}},s=Object(y["computed"])((function(){var e=d(),t=e.widthScale,n=e.heightScale,o=e.left,l=e.top;return{left:-o,top:-l,width:100/t,height:100/n}})),f=Object(y["computed"])((function(){return{top:s.value.top+"%",left:s.value.left+"%",width:s.value.width+"%",height:s.value.height+"%"}})),b=Object(y["ref"])({top:0,left:0,width:0,height:0}),p=Object(y["computed"])((function(){var e=b.value,t=e.top,n=e.left,o=e.width,l=e.height;return{top:t+"%",left:n+"%",width:o+"%",height:l+"%"}})),m=Object(y["computed"])((function(){var e=s.value.width,t=s.value.height,n=b.value,o=n.top,l=n.left,c=n.width,a=n.height;return{left:100/c*-l+"%",top:100/a*-o+"%",width:e/c*100+"%",height:t/a*100+"%"}})),v=function(){var e=d(),t=e.left,n=e.top;b.value={left:t,top:n,width:100,height:100},r.value={top:-n+"%",left:-t+"%"}},O=function(){if(!i.value)if(u.value){var t=d(),o=t.left,l=t.top,c={left:(b.value.left-o)/100*e.width,top:(b.value.top-l)/100*e.height,width:(b.value.width-100)/100*e.width,height:(b.value.height-100)/100*e.height},a={range:u.value,position:c};n("clip",a)}else n("clip",null)},h=function(e){var t=e.key.toUpperCase();t===V.ENTER&&O()};Object(y["onMounted"])((function(){v(),document.addEventListener("keydown",h)})),Object(y["onUnmounted"])((function(){document.removeEventListener("keydown",h)}));var j=function(){var e={left:parseInt(m.value.left),top:parseInt(m.value.top),width:parseInt(m.value.width),height:parseInt(m.value.height)},t=100/e.width,n=100/e.height,o=[-e.left*t,-e.top*n],l=[100*t+o[0],100*n+o[1]];u.value=[o,l]},x=function(t){i.value=!0;var n=!0,o=t.pageX,c=t.pageY,a=s.value,r=Object(L["a"])({},b.value);document.onmousemove=function(t){if(n){var i=t.pageX,u=t.pageY,d=(i-o)/l.value/e.width*100,s=(u-c)/l.value/e.height*100;e.rotate>45&&e.rotate<135&&(d=(u-c)/l.value/e.width*100,s=-(i-o)/l.value/e.height*100),(e.rotate>=135&&e.rotate<=180||e.rotate>=-180&&e.rotate<=-135)&&(d=-d,s=-s),e.rotate>-135&&e.rotate<-45&&(d=-(u-c)/l.value/e.width*100,s=(i-o)/l.value/e.height*100);var f=r.left+d,p=r.top+s;f<0?f=0:f+r.width>a.width&&(f=a.width-r.width),p<0?p=0:p+r.height>a.height&&(p=a.height-r.height),b.value=Object(L["a"])(Object(L["a"])({},b.value),{},{left:f,top:p})}},document.onmouseup=function(){n=!1,document.onmousemove=null,document.onmouseup=null,j(),setTimeout((function(){i.value=!1}),0)}},C=function(t,n){i.value=!0;var o=!0,c=50/e.width*100,r=50/e.height*100,u=t.pageX,d=t.pageY,f=s.value,p=Object(L["a"])({},b.value),m=b.value.width/b.value.height;document.onmousemove=function(t){if(o){var i,s,v,O,h=t.pageX,j=t.pageY,y=(h-u)/l.value/e.width*100,g=(j-d)/l.value/e.height*100;e.rotate>45&&e.rotate<135&&(y=(j-d)/l.value/e.width*100,g=-(h-u)/l.value/e.height*100),(e.rotate>=135&&e.rotate<=180||e.rotate>=-180&&e.rotate<=-135)&&(y=-y,g=-g),e.rotate>-135&&e.rotate<-45&&(y=-(j-d)/l.value/e.width*100,g=(h-u)/l.value/e.height*100),a.value&&(n!==N.RIGHT_BOTTOM&&n!==N.LEFT_TOP||(g=y/m),n!==N.LEFT_BOTTOM&&n!==N.RIGHT_TOP||(g=-y/m)),n===N.LEFT_TOP?(p.left+y<0&&(y=-p.left),p.top+g<0&&(g=-p.top),p.width-yf.width&&(y=f.width-(p.left+p.width)),p.top+g<0&&(g=-p.top),p.width+yf.height&&(g=f.height-(p.top+p.height)),p.width-yf.width&&(y=f.width-(p.left+p.width)),p.top+p.height+g>f.height&&(g=f.height-(p.top+p.height)),p.width+yf.height&&(g=f.height-(p.top+p.height)),p.height+gf.width&&(y=f.width-(p.left+p.width)),p.width+y-22.5&&n<=22.5?t+0:n>22.5&&n<=67.5?t+45:n>67.5&&n<=112.5?t+90:n>112.5&&n<=157.5?t+135:n>157.5||n<=-157.5?t+0:n>-157.5&&n<=-112.5?t+45:n>-112.5&&n<=-67.5?t+90:n>-67.5&&n<=-22.5?t+135:t+0}));return{clipWrapperPositionStyle:r,bottomImgPositionStyle:f,topImgWrapperPositionStyle:p,topImgPositionStyle:m,rotateClassName:k,handleClip:O,moveClipRange:x,scaleClipRange:C}}});n("663b");const wa=Gn()(Ea,[["render",ka],["__scopeId","data-v-e9da1d6a"]]);var Na=wa,Ia=Object(y["defineComponent"])({name:"editable-element-image",components:{ImageOutline:Ko,ImageClipHandler:Na},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.clipingImageElementId,c=Object(y["computed"])((function(){return l.value===e.elementInfo.id})),a=$e(),r=a.addHistorySnapshot,i=Object(y["computed"])((function(){return e.elementInfo.shadow})),u=ko(i),d=u.shadowStyle,s=Object(y["computed"])((function(){return e.elementInfo.flipH})),f=Object(y["computed"])((function(){return e.elementInfo.flipV})),b=Eo(s,f),p=b.flipStyle,m=Object(y["computed"])((function(){return e.elementInfo.clip})),v=No(m),O=v.clipShape,h=v.imgPosition,j=Object(y["computed"])((function(){return e.elementInfo.filters})),x=Io(j),C=x.filter,k=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},E=function(o){if(t.setClipingImageElementId(""),o){var l=o.range,c=o.position,a=e.elementInfo.clip||{shape:"rect",range:[[0,0],[100,100]]},i=e.elementInfo.left+c.left,u=e.elementInfo.top+c.top,d=e.elementInfo.width+c.width,s=e.elementInfo.height+c.height,f=0,b=0;if(e.elementInfo.rotate){var p=i+d/2-(e.elementInfo.left+e.elementInfo.width/2),m=-(u+s/2-(e.elementInfo.top+e.elementInfo.height/2)),v=-e.elementInfo.rotate*Math.PI/180,O=p*Math.cos(v)-m*Math.sin(v),h=p*Math.sin(v)+m*Math.cos(v);f=O-p,b=-(h-m)}var j={clip:Object(L["a"])(Object(L["a"])({},a),{},{range:l}),left:i+f,top:u+b,width:d,height:s};n.updateElement({id:e.elementInfo.id,props:j}),r()}};return{isCliping:c,handleClip:E,clipingImageElementId:l,shadowStyle:d,handleSelectElement:k,clipShape:O,imgPosition:h,filter:C,flipStyle:p}}});n("fc7e");const Va=Gn()(Ia,[["render",pa],["__scopeId","data-v-288ee59d"]]);var Sa=Va,Ba=function(e){return Object(y["pushScopeId"])("data-v-d7761db4"),e=e(),Object(y["popScopeId"])(),e},La=Ba((function(){return Object(y["createElementVNode"])("div",{class:"drag-handler top"},null,-1)})),Ta=Ba((function(){return Object(y["createElementVNode"])("div",{class:"drag-handler bottom"},null,-1)}));function Ma(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ElementOutline"),r=Object(y["resolveComponent"])("ProsemirrorEditor"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-text",{lock:e.elementInfo.lock}]),ref:"elementRef",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({backgroundColor:e.elementInfo.fill,opacity:e.elementInfo.opacity,textShadow:e.shadowStyle,lineHeight:e.elementInfo.lineHeight,letterSpacing:(e.elementInfo.wordSpace||0)+"px",color:e.elementInfo.defaultColor,fontFamily:e.elementInfo.defaultFontName}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)})},[Object(y["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(y["createVNode"])(r,{class:"text",elementId:e.elementInfo.id,defaultColor:e.elementInfo.defaultColor,defaultFontName:e.elementInfo.defaultFontName,editable:!e.elementInfo.lock,value:e.elementInfo.content,onUpdate:t[0]||(t[0]=function(t){return e.updateContent(t)}),onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t,!1)})},null,8,["elementId","defaultColor","defaultFontName","editable","value"]),La,Ta],36)),[[i,e.contextmenus]])],4)],6)}var _a={class:"prosemirror-editor",ref:"editorViewRef"};function Da(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",_a,null,512)}var za,Aa=n("5313"),Fa=n("576a"),Ra=n("304a"),Pa=n("7f06"),Ha=n("8726"),qa=n("23f1"),Wa=n("1a16"),Ga=n("665f"),Ua=n("f95e"),Xa=function(e){var t={},n=function(e,n){return t[e]=n};return n("Alt-ArrowUp",M["c"]),n("Alt-ArrowDown",M["b"]),n("Ctrl-z",Ha["c"]),n("Ctrl-y",Ha["b"]),n("Backspace",Ua["f"]),n("Escape",M["e"]),n("Ctrl-b",Object(M["f"])(e.marks.strong)),n("Ctrl-i",Object(M["f"])(e.marks.em)),n("Ctrl-u",Object(M["f"])(e.marks.underline)),n("Ctrl-d",Object(M["f"])(e.marks.strikethrough)),n("Enter",Object(Ga["f"])(e.nodes.list_item)),n("Mod-[",Object(Ga["b"])(e.nodes.list_item)),n("Mod-]",Object(Ga["e"])(e.nodes.list_item)),t},Za=function(e){return Object(Ua["g"])(/^\s*>\s$/,e)},Ya=function(e){return Object(Ua["g"])(/^(\d+)\.\s$/,e,(function(e){return{order:+e[1]}}),(function(e,t){return t.childCount+t.attrs.order===+e[1]}))},Ja=function(e){return Object(Ua["g"])(/^\s*([-+*])\s$/,e)},Qa=function(e){return Object(Ua["e"])(/^```$/,e)},Ka=function(e){var t=[].concat(Object(K["a"])(Ua["d"]),[Ua["a"],Ua["b"]]);return t.push(Za(e.nodes.blockquote)),t.push(Ya(e.nodes.ordered_list)),t.push(Ja(e.nodes.bullet_list)),t.push(Qa(e.nodes.code_block)),Object(Ua["c"])({rules:t})},$a=function(e){return[Ka(e),Object(Pa["b"])(Xa(e)),Object(Pa["b"])(M["a"]),Object(qa["a"])(),Object(Wa["a"])(),Object(Ha["a"])()]},er=n("2210"),tr=Object(L["a"])(Object(L["a"])({},Ga["d"]),{},{content:"list_item+",group:"block"}),nr=Object(L["a"])(Object(L["a"])({},Ga["a"]),{},{content:"list_item+",group:"block"}),or=Object(L["a"])(Object(L["a"])({},Ga["c"]),{},{content:"paragraph block*",group:"block"}),lr={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]}},cr=Object(L["a"])(Object(L["a"])({},er["b"]),{},{ordered_list:tr,bullet_list:nr,list_item:or,paragraph:lr}),ar={excludes:"subscript",parseDOM:[{tag:"sub"},{style:"vertical-align",getAttrs:function(e){return"sub"===e&&null}}],toDOM:function(){return["sub",0]}},rr={excludes:"superscript",parseDOM:[{tag:"sup"},{style:"vertical-align",getAttrs:function(e){return"super"===e&&null}}],toDOM:function(){return["sup",0]}},ir={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]}},ur={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]}},dr={attrs:{color:{}},inline:!0,group:"inline",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]}},sr={attrs:{backcolor:{}},inline:!0,group:"inline",parseDOM:[{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]}},fr={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]}},br={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]}},pr={attrs:{href:{},title:{default:null},target:{default:"_blank"}},inclusive:!1,parseDOM:[{tag:"a[href]",getAttrs:function(e){var t=e.getAttribute("href"),n=e.getAttribute("title");return{href:t,title:n}}}],toDOM:function(e){return["a",e.attrs,0]}},mr=Object(L["a"])(Object(L["a"])({},er["a"]),{},{subscript:ar,superscript:rr,strikethrough:ir,underline:ur,forecolor:dr,backcolor:sr,fontsize:fr,fontname:br,link:pr}),vr=cr,Or=mr,hr=new Ra["i"]({nodes:vr,marks:Or}),jr=function(e){var t="
".concat(e,"
"),n=new window.DOMParser,o=n.parseFromString(t,"text/html").body.firstElementChild;return Ra["a"].fromSchema(hr).parse(o)},yr=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Fa["c"](e,Object(L["a"])({state:Aa["b"].create({doc:jr(t),plugins:$a(hr)})},n))},gr=n("1344");(function(e){e["RICH_TEXT_COMMAND"]="RICH_TEXT_COMMAND",e["OPEN_CHART_DATA_EDITOR"]="OPEN_CHART_DATA_EDITOR",e["OPEN_LATEX_EDITOR"]="OPEN_LATEX_EDITOR"})(za||(za={}));var xr=Object(gr["a"])(),Cr=xr,kr=(n("6062"),function(e,t,n){var o=e,l=o.selection,c=o.doc;if(!l||!c)return e;var a=l.from,r=l.to,i=t.nodes,u=i.blockquote,d=i.list_item,s=i.paragraph,f=[];n=n||"";var b=new Set([u,d,s]);return c.nodesBetween(a,r,(function(e,t){var o=e.type,l=e.attrs.align||"";return l!==n&&b.has(o)&&f.push({node:e,pos:t,nodeType:o}),!0})),f.length?(f.forEach((function(t){var o=t.node,l=t.pos,c=t.nodeType,a=o.attrs;a=n?Object(L["a"])(Object(L["a"])({},a),{},{align:n}):Object(L["a"])(Object(L["a"])({},a),{},{align:null}),e=e.setNodeMarkup(l,c,a,o.marks)})),e):e}),Er=function(e,t){var n=e.state,o=n.schema,l=n.selection,c=kr(n.tr.setSelection(l),o,t);e.dispatch(c)},wr=function(e,t){return e.type===t.nodes.bullet_list||e.type===t.nodes.ordered_list},Nr=function(e,t){return function(n,o){var l=n.schema,c=n.selection,a=c.$from,r=c.$to,i=a.blockRange(r);if(!i)return!1;var u=R((function(e){return wr(e,l)}))(c);if(i.depth>=1&&u&&i.depth-u.depth<=1){if(u.node.type===e)return Object(Ga["b"])(t)(n,o);if(wr(u.node,l)&&e.validContent(u.node.content)){var d=n.tr;return d.setNodeMarkup(u.pos,e),o&&o(d),!1}}return Object(Ga["g"])(e)(n,o)}},Ir=Object(y["defineComponent"])({name:"prosemirror-editor",emits:["update","focus","blur"],props:{elementId:{type:String,required:!0},defaultColor:{type:String,required:!0},defaultFontName:{type:String,required:!0},editable:{type:Boolean,default:!1},value:{type:String,required:!0},autoFocus:{type:Boolean,default:!1}},setup:function(e,t){var n,o=t.emit,l=ae(),c=Object(g["c"])(l),a=c.handleElementId,r=Object(y["ref"])(),i=Object(te["debounce"])((function(){o("update",n.dom.innerHTML)}),300,{trailing:!0}),u=function(){"请输入内容"===e.value&&setTimeout((function(){Object(M["d"])(n.state,n.dispatch)}),100),l.setDisableHotkeysState(!0),o("focus")},d=function(){l.setDisableHotkeysState(!1),o("blur")},s=Object(te["debounce"])((function(){var t=Y(n,{color:e.defaultColor,fontname:e.defaultFontName});l.setRichtextAttrs(t)}),30,{trailing:!0}),f=function(){i(),s()},b=Object(y["computed"])((function(){return e.value}));Object(y["watch"])(b,(function(){if(n&&!n.hasFocus()){var e=n.state,t=e.doc,o=e.tr;n.dispatch(o.replaceRangeWith(0,t.content.size,jr(b.value)))}})),Object(y["watch"])((function(){return e.editable}),(function(){n.setProps({editable:function(){return e.editable}})})),Object(y["onMounted"])((function(){n=yr(r.value,b.value,{handleDOMEvents:{focus:u,blur:d,keydown:f,click:s},editable:function(){return e.editable}}),e.autoFocus&&n.focus()})),Object(y["onUnmounted"])((function(){n&&n.destroy()}));var p=function(t){if(a.value===e.elementId){var o,l="command"in t?[t]:t,c=Object(T["a"])(l);try{for(c.s();!(o=c.n()).done;){var r=o.value;if("fontname"===r.command&&r.value){var u=n.state.schema.marks.fontname.create({fontname:r.value});_(n),D(n,u)}else if("fontsize"===r.command&&r.value){var d=n.state.schema.marks.fontsize.create({fontsize:r.value});_(n),D(n,d)}else if("color"===r.command&&r.value){var f=n.state.schema.marks.forecolor.create({color:r.value});_(n),D(n,f)}else if("backcolor"===r.command&&r.value){var b=n.state.schema.marks.backcolor.create({backcolor:r.value});_(n),D(n,b)}else if("bold"===r.command)_(n),Object(M["f"])(n.state.schema.marks.strong)(n.state,n.dispatch);else if("em"===r.command)_(n),Object(M["f"])(n.state.schema.marks.em)(n.state,n.dispatch);else if("underline"===r.command)_(n),Object(M["f"])(n.state.schema.marks.underline)(n.state,n.dispatch);else if("strikethrough"===r.command)_(n),Object(M["f"])(n.state.schema.marks.strikethrough)(n.state,n.dispatch);else if("subscript"===r.command)Object(M["f"])(n.state.schema.marks.subscript)(n.state,n.dispatch);else if("superscript"===r.command)Object(M["f"])(n.state.schema.marks.superscript)(n.state,n.dispatch);else if("blockquote"===r.command)Object(M["g"])(n.state.schema.nodes.blockquote)(n.state,n.dispatch);else if("code"===r.command)Object(M["f"])(n.state.schema.marks.code)(n.state,n.dispatch);else if("align"===r.command&&r.value)Er(n,r.value);else if("bulletList"===r.command){var p=n.state.schema.nodes,m=p.bullet_list,v=p.list_item;Nr(m,v)(n.state,n.dispatch)}else if("orderedList"===r.command){var O=n.state.schema.nodes,h=O.ordered_list,j=O.list_item;Nr(h,j)(n.state,n.dispatch)}else if("clear"===r.command){_(n);var y=n.state.selection,g=y.$from,x=y.$to;n.dispatch(n.state.tr.removeMark(g.pos,x.pos))}else if("link"===r.command){var C=n.state.schema.marks.link,k=n.state.selection,E=k.from,w=k.to,N=z(n.state.doc,E,w,C);if(N)if(r.value){var I=n.state.schema.marks.link.create({href:r.value,title:r.value});D(n,I,{from:N.from.pos,to:N.to.pos+1})}else n.dispatch(n.state.tr.removeMark(N.from.pos,N.to.pos+1,C));else if(U(n.state,C))if(r.value){var V=n.state.schema.marks.link.create({href:r.value,title:r.value});D(n,V)}else Object(M["f"])(C)(n.state,n.dispatch);else r.value&&(_(n),Object(M["f"])(C,{href:r.value,title:r.value})(n.state,n.dispatch))}else"insert"===r.command&&r.value&&n.dispatch(n.state.tr.insertText(r.value))}}catch(S){c.e(S)}finally{c.f()}n.focus(),i(),s()}};return Cr.on(za.RICH_TEXT_COMMAND,p),Object(y["onUnmounted"])((function(){Cr.off(za.RICH_TEXT_COMMAND,p)})),{editorViewRef:r}}});n("8569");const Vr=Gn()(Ir,[["render",Da],["__scopeId","data-v-481bb541"]]);var Sr=Vr,Br=Object(y["defineComponent"])({name:"editable-element-text",components:{ElementOutline:ul,ProsemirrorEditor:Sr},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.handleElementId,c=o.isScaling,a=$e(),r=a.addHistorySnapshot,i=Object(y["ref"])(),u=Object(y["computed"])((function(){return e.elementInfo.shadow})),d=ko(u),s=d.shadowStyle,f=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=Object(y["ref"])(-1);Object(y["watch"])(c,(function(){l.value===e.elementInfo.id&&(c.value||-1===b.value||(n.updateElement({id:e.elementInfo.id,props:{height:b.value}}),b.value=-1))}));var p=function(t){var o=t[0].contentRect;if(i.value){var l=o.height;e.elementInfo.height!==l&&(c.value?b.value=l:n.updateElement({id:e.elementInfo.id,props:{height:l}}))}},m=new ResizeObserver(p);Object(y["onMounted"])((function(){i.value&&m.observe(i.value)})),Object(y["onUnmounted"])((function(){i.value&&m.unobserve(i.value)}));var v=function(t){n.updateElement({id:e.elementInfo.id,props:{content:t}}),r()};return{elementRef:i,shadowStyle:s,updateContent:v,handleSelectElement:f}}});n("f208");const Lr=Gn()(Br,[["render",Ma],["__scopeId","data-v-d7761db4"]]);var Tr=Lr,Mr=["width","height"],_r={key:0},Dr=["transform"],zr=["d","fill","stroke","stroke-width","stroke-dasharray"],Ar=["innerHTML"];function Fr(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("GradientDefs"),r=Object(y["resolveComponent"])("ProsemirrorEditor"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({opacity:e.elementInfo.opacity,filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):"",transform:e.flipStyle,color:e.text.defaultColor,fontFamily:e.text.defaultFontName}),onMousedown:t[2]||(t[2]=function(t){return e.handleSelectElement(t)}),onDblclick:t[3]||(t[3]=function(t){return e.enterEditing()})},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height},[e.elementInfo.gradient?(Object(y["openBlock"])(),Object(y["createElementBlock"])("defs",_r,[Object(y["createVNode"])(a,{id:"editabel-gradient-".concat(e.elementInfo.id),type:e.elementInfo.gradient.type,color1:e.elementInfo.gradient.color[0],color2:e.elementInfo.gradient.color[1],rotate:e.elementInfo.gradient.rotate},null,8,["id","type","color1","color2","rotate"])])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox[0],", ").concat(e.elementInfo.height/e.elementInfo.viewBox[1],") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(y["createElementVNode"])("path",{class:"shape-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,zr)],8,Dr)],8,Mr)),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["shape-text",[e.text.align,{editable:e.editable}]])},[e.editable?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,elementId:e.elementInfo.id,defaultColor:e.text.defaultColor,defaultFontName:e.text.defaultFontName,editable:!e.elementInfo.lock,autoFocus:!0,value:e.text.content,onUpdate:t[0]||(t[0]=function(t){return e.updateText(t)}),onMousedown:t[1]||(t[1]=Object(y["withModifiers"])((function(){}),["stop"]))},null,8,["elementId","defaultColor","defaultFontName","editable","value"])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:1,class:"show-text ProseMirror-static",innerHTML:e.text.content},null,8,Ar))],2)],36)),[[i,e.contextmenus]])],4)],6)}var Rr=Object(y["defineComponent"])({name:"editable-element-shape",components:{GradientDefs:Il,ProsemirrorEditor:Sr},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.handleElementId,c=$e(),a=c.addHistorySnapshot,r=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},i=Object(y["computed"])((function(){return e.elementInfo.outline})),u=Mo(i),d=u.outlineWidth,s=u.outlineStyle,f=u.outlineColor,b=Object(y["computed"])((function(){return e.elementInfo.shadow})),p=ko(b),m=p.shadowStyle,v=Object(y["computed"])((function(){return e.elementInfo.flipH})),O=Object(y["computed"])((function(){return e.elementInfo.flipV})),h=Eo(v,O),j=h.flipStyle,x=Object(y["ref"])(!1),C=function(){x.value=!0,t.setEditingShapeElementId(e.elementInfo.id)},k=function(){x.value=!1,t.setEditingShapeElementId("")};Object(y["watch"])(l,(function(){l.value!==e.elementInfo.id&&x.value&&k()}));var E=Object(y["computed"])((function(){var t={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"};return e.elementInfo.text?e.elementInfo.text:t})),w=function(t){var o=Object(L["a"])(Object(L["a"])({},E.value),{},{content:t});n.updateElement({id:e.elementInfo.id,props:{text:o}}),a()};return{shadowStyle:m,outlineWidth:d,outlineStyle:s,outlineColor:f,flipStyle:j,editable:x,text:E,handleSelectElement:r,updateText:w,enterEditing:C}}});n("a8ac");const Pr=Gn()(Rr,[["render",Fr],["__scopeId","data-v-bd9c8dc2"]]);var Hr=Pr,qr=["width","height"],Wr=["d","stroke","stroke-width","stroke-dasharray","marker-start","marker-end"],Gr=["d"];function Ur(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("LinePointMarker"),r=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-shape",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px"})},[Object(y["createElementVNode"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({filter:e.shadowStyle?"drop-shadow(".concat(e.shadowStyle,")"):""}),onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)})},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{overflow:"visible",width:e.svgWidth,height:e.svgHeight},[Object(y["createElementVNode"])("defs",null,[e.elementInfo.points[0]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,id:e.elementInfo.id,position:"start",type:e.elementInfo.points[0],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(y["createCommentVNode"])("",!0),e.elementInfo.points[1]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1,id:e.elementInfo.id,position:"end",type:e.elementInfo.points[1],color:e.elementInfo.color,baseSize:e.elementInfo.width},null,8,["id","type","color","baseSize"])):Object(y["createCommentVNode"])("",!0)]),Object(y["createElementVNode"])("path",{class:"line-point",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,Wr),Object(y["withDirectives"])(Object(y["createElementVNode"])("path",{class:"line-path",d:e.path,stroke:"transparent","stroke-width":"20",fill:"none"},null,8,Gr),[[r,e.contextmenus]])],8,qr))],36)],6)}var Xr=Object(y["defineComponent"])({name:"editable-element-shape",components:{LinePointMarker:Hl},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(y["computed"])((function(){return e.elementInfo.shadow})),o=ko(n),l=o.shadowStyle,c=Object(y["computed"])((function(){var t=Math.abs(e.elementInfo.start[0]-e.elementInfo.end[0]);return t<24?24:t})),a=Object(y["computed"])((function(){var t=Math.abs(e.elementInfo.start[1]-e.elementInfo.end[1]);return t<24?24:t})),r=Object(y["computed"])((function(){return"dashed"===e.elementInfo.style?"10 6":"0 0"})),i=Object(y["computed"])((function(){return Je(e.elementInfo)}));return{handleSelectElement:t,shadowStyle:l,svgWidth:c,svgHeight:a,lineDashArray:r,path:i}}});n("3dc0");const Zr=Gn()(Xr,[["render",Ur],["__scopeId","data-v-603a705d"]]);var Yr=Zr;function Jr(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ElementOutline"),r=Object(y["resolveComponent"])("Chart"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-chart",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",style:Object(y["normalizeStyle"])({backgroundColor:e.elementInfo.fill}),onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)}),onDblclick:t[1]||(t[1]=function(t){return e.openDataEditor()})},[Object(y["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,outline:e.elementInfo.outline},null,8,["width","height","outline"]),Object(y["createVNode"])(r,{width:e.elementInfo.width,height:e.elementInfo.height,type:e.elementInfo.chartType,data:e.elementInfo.data,options:e.elementInfo.options,themeColor:e.elementInfo.themeColor,gridColor:e.elementInfo.gridColor,legends:e.elementInfo.data.legends,legend:e.elementInfo.legend||""},null,8,["width","height","type","data","options","themeColor","gridColor","legends","legend"])],36)),[[i,e.contextmenus]])],4)],6)}var Qr=Object(y["defineComponent"])({name:"editable-element-chart",components:{ElementOutline:ul,Chart:Kl},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=function(){Cr.emit(za.OPEN_CHART_DATA_EDITOR)};return{handleSelectElement:t,openDataEditor:n}}});n("b05d");const Kr=Gn()(Qr,[["render",Jr],["__scopeId","data-v-c09631b6"]]);var $r=Kr,ei={class:"element-content"};function ti(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("EditableTable"),r=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-table",{lock:e.elementInfo.lock}]),ref:"elementRef",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ei,[Object(y["createVNode"])(a,{onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(){}),["stop"])),data:e.elementInfo.data,width:e.elementInfo.width,colWidths:e.elementInfo.colWidths,outline:e.elementInfo.outline,theme:e.elementInfo.theme,editable:e.editable,onChange:t[1]||(t[1]=function(t){return e.updateTableCells(t)}),onChangeColWidths:t[2]||(t[2]=function(t){return e.updateColWidths(t)}),onChangeSelectedCells:t[3]||(t[3]=function(t){return e.updateSelectedCells(t)})},null,8,["data","width","colWidths","outline","theme","editable"]),!e.editable||e.elementInfo.lock?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:Object(y["normalizeClass"])(["table-mask",{lock:e.elementInfo.lock}]),onDblclick:t[4]||(t[4]=function(t){return e.startEdit()}),onMousedown:t[5]||(t[5]=function(t){return e.handleSelectElement(t)})},[Object(y["createElementVNode"])("div",{class:"mask-tip",style:Object(y["normalizeStyle"])({transform:"scale(".concat(1/e.canvasScale,")")})},"双击编辑",4)],34)):Object(y["createCommentVNode"])("",!0)])),[[r,e.contextmenus]])],4)],6)}var ni={key:0,class:"handler"},oi=["onMousedown"],li=["width"],ci=["rowspan","colspan","data-cell-index","onMousedown","onMouseenter"],ai=["innerHTML"];function ri(e,t,n,o,l,c){var a,r,i,u,d,s=Object(y["resolveComponent"])("CustomTextarea"),f=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"editable-table",style:Object(y["normalizeStyle"])({width:e.totalWidth+"px"})},[e.editable?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ni,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.dragLinePosition,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"drag-line",key:n,style:Object(y["normalizeStyle"])({left:t+"px"}),onMousedown:function(t){return e.handleMousedownColHandler(t,n)}},null,44,oi)})),128))])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("table",{class:Object(y["normalizeClass"])({theme:e.theme,"row-header":null===(a=e.theme)||void 0===a?void 0:a.rowHeader,"row-footer":null===(r=e.theme)||void 0===r?void 0:r.rowFooter,"col-header":null===(i=e.theme)||void 0===i?void 0:i.colHeader,"col-footer":null===(u=e.theme)||void 0===u?void 0:u.colFooter}),style:Object(y["normalizeStyle"])("--themeColor: ".concat(null===(d=e.theme)||void 0===d?void 0:d.color,"; --subThemeColor1: ").concat(e.subThemeColor[0],"; --subThemeColor2: ").concat(e.subThemeColor[1]))},[Object(y["createElementVNode"])("colgroup",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.colSizeList,(function(e,t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("col",{span:"1",key:t,width:e},null,8,li)})),128))]),Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tableCells,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("tr",{key:n},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t,(function(t,o){return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("td",{class:Object(y["normalizeClass"])(["cell",{selected:e.selectedCells.includes("".concat(n,"_").concat(o))&&e.selectedCells.length>1,active:e.activedCell==="".concat(n,"_").concat(o)}]),style:Object(y["normalizeStyle"])(Object(L["a"])({borderStyle:e.outline.style,borderColor:e.outline.color,borderWidth:e.outline.width+"px"},e.getTextStyle(t.style))),key:t.id,rowspan:t.rowspan,colspan:t.colspan,"data-cell-index":"".concat(n,"_").concat(o),onMousedown:function(t){return e.handleCellMousedown(t,n,o)},onMouseenter:function(t){return e.handleCellMouseenter(n,o)}},[e.activedCell==="".concat(n,"_").concat(o)?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:0,class:Object(y["normalizeClass"])(["cell-text",{active:e.activedCell==="".concat(n,"_").concat(o)}]),contenteditable:"plaintext-only",value:t.text,onUpdateValue:function(t){return e.handleInput(t,n,o)},onInsertExcelData:function(t){return e.insertExcelData(t,n,o)}},null,8,["class","value","onUpdateValue","onInsertExcelData"])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:1,class:"cell-text",innerHTML:e.formatText(t.text)},null,8,ai))],46,ci)),[[y["vShow"],!e.hideCells.includes("".concat(n,"_").concat(o))],[f,function(t){return e.contextmenus(t)}]])})),128))])})),128))])],6)],4)}var ii=["contenteditable","innerHTML"];function ui(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"custom-textarea",ref:"textareaRef",contenteditable:e.contenteditable,onFocus:t[0]||(t[0]=function(){return e.handleFocus&&e.handleFocus.apply(e,arguments)}),onBlur:t[1]||(t[1]=function(){return e.handleBlur&&e.handleBlur.apply(e,arguments)}),onInput:t[2]||(t[2]=function(t){return e.handleInput(t)}),innerHTML:e.text},null,40,ii)}var di=Object(y["defineComponent"])({name:"custom-textarea",emits:["updateValue","insertExcelData"],props:{value:{type:String,default:""},contenteditable:{type:[Boolean,String],default:!1}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(),l=Object(y["ref"])(""),c=Object(y["ref"])(!1);Object(y["watch"])((function(){return e.value}),(function(){c.value||(l.value=e.value,o.value&&(o.value.innerHTML=e.value))}),{immediate:!0});var a=function(){if(o.value){var e=o.value.innerHTML;n("updateValue",e)}},r=function(){c.value=!0,o.value&&(o.value.onpaste=function(e){if(e.preventDefault(),e.clipboardData){var t=e.clipboardData.items[0];t&&"string"===t.kind&&"text/plain"===t.type&&t.getAsString((function(e){var t=Re(e);if("object"!==Object(Qe["a"])(t)){var l=Pe(e);if(l)return n("insertExcelData",l),void(o.value&&(o.value.innerHTML=l[0][0]));n("updateValue",e),document.execCommand("insertText",!1,e)}}))}})},i=function(){c.value=!1,o.value&&(o.value.onpaste=null)};return Object(y["onUnmounted"])((function(){o.value&&(o.value.onpaste=null)})),{textareaRef:o,handleFocus:r,handleInput:a,handleBlur:i,text:l}}});n("f33f");const si=Gn()(di,[["render",ui],["__scopeId","data-v-59f468e0"]]);var fi=si,bi=Object(y["defineComponent"])({name:"editable-table",emits:["change","changeColWidths","changeSelectedCells"],components:{CustomTextarea:fi},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,t){var n=t.emit,o=Object(g["c"])(ae()),l=o.canvasScale,c=Object(y["ref"])(!1),a=Object(y["ref"])([]),r=Object(y["ref"])([]),i=Object(y["computed"])({get:function(){return e.data},set:function(e){n("change",e)}}),u=Object(y["computed"])((function(){return e.theme})),d=sc(u),s=d.subThemeColor,f=Object(y["ref"])([]),b=Object(y["computed"])((function(){return f.value.reduce((function(e,t){return e+t}))}));Object(y["watch"])([function(){return e.colWidths},function(){return e.width}],(function(){f.value=e.colWidths.map((function(t){return t*e.width}))}),{immediate:!0});var p=function(){a.value=[],r.value=[]};Object(y["watch"])((function(){return e.editable}),(function(){e.editable||p()}));var m=Object(y["computed"])((function(){for(var e=[],t=1;t=d&&p<=f&&v>=s&&v<=b&&u.push("".concat(p,"_").concat(v));return u}));Object(y["watch"])(j,(function(e,t){Object(te["isEqual"])(e,t)||n("changeSelectedCells",j.value)}));var x=Object(y["computed"])((function(){return j.value.length>1?null:j.value[0]})),C=Object(y["computed"])((function(){if(!a.value.length)return null;var e=Object(He["a"])(a.value,2),t=e[0],n=e[1];if(!r.value.length)return{row:[t,t],col:[n,n]};var o=Object(He["a"])(r.value,2),l=o[0],c=o[1];if(t===l&&n===c)return{row:[t,t],col:[n,n]};var i=Math.min(t,l),u=Math.min(n,c),d=Math.max(t,l),s=Math.max(n,c);return{row:[i,d],col:[u,s]}})),k=function(){return c.value=!1},E=function(e,t,n){0===e.button&&(r.value=[],c.value=!0,a.value=[t,n])},w=function(e,t){c.value&&(r.value=[e,t])};Object(y["onMounted"])((function(){document.addEventListener("mouseup",k)})),Object(y["onUnmounted"])((function(){document.removeEventListener("mouseup",k)}));var N=function(e,t){return h.value.includes("".concat(e,"_").concat(t))},I=function(e){var t=i.value.length-1;a.value=[0,e],r.value=[t,e]},S=function(e){var t=i.value[e].length-1;a.value=[e,0],r.value=[e,t]},B=function(){var e=i.value.length-1,t=i.value[e].length-1;a.value=[0,0],r.value=[e,t]},T=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=i.value[e],o=[],l=0;l=0;u--)if(!N(u,r)){t[u][r].rowspan=t[u][r].rowspan-1;break}t.splice(e,1),i.value=t},M=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),o=[],l=0;l=0;u--)if(!N(r,u)){t[r][u].colspan=t[r][u].colspan-1;break}i.value=t.map((function(t){return t.splice(e,1),t})),f.value.splice(e,1),n("changeColWidths",f.value)},_=function(e){for(var t=JSON.parse(JSON.stringify(i.value)),n=[],o=0;oi.value.length&&(a=t+l-i.value.length),o+c>i.value[0].length&&(r=o+c-i.value[0].length),(a||r)&&z(a,r),Object(y["nextTick"])((function(){for(var a=0;a1,n=e[0].length>1;return{canDeleteRow:t,canDeleteCol:n}},Z=function(e,t){var n=j.value.length>1,o=i.value[e][t],l=n,c=!n&&(o.rowspan>1||o.colspan>1);return{canMerge:l,canSplit:c}},Y=function(e){var t=e.dataset.cellIndex,n=+t.split("_")[0],o=+t.split("_")[1];j.value.includes("".concat(n,"_").concat(o))||(a.value=[n,o],r.value=[]);var l=Z(n,o),c=l.canMerge,i=l.canSplit,u=X(),d=u.canDeleteRow,s=u.canDeleteCol;return[{text:"插入列",children:[{text:"到左侧",handler:function(){return D(o)}},{text:"到右侧",handler:function(){return D(o+1)}}]},{text:"插入行",children:[{text:"到上方",handler:function(){return _(n)}},{text:"到下方",handler:function(){return _(n+1)}}]},{text:"删除列",disable:!s,handler:function(){return M(o)}},{text:"删除行",disable:!d,handler:function(){return T(n)}},{divider:!0},{text:"合并单元格",disable:!c,handler:A},{text:"取消合并单元格",disable:!i,handler:function(){return F(n,o)}},{divider:!0},{text:"选中当前列",handler:function(){return I(o)}},{text:"选中当前行",handler:function(){return S(n)}},{text:"选中全部单元格",handler:B}]};return{getTextStyle:ic,dragLinePosition:m,tableCells:i,colSizeList:f,totalWidth:b,hideCells:h,selectedCells:j,activedCell:x,selectedRange:C,handleCellMousedown:E,handleCellMouseenter:w,selectCol:I,selectRow:S,handleMousedownColHandler:R,contextmenus:Y,handleInput:W,insertExcelData:G,subThemeColor:s,formatText:uc}}});n("a215");const pi=Gn()(bi,[["render",ri],["__scopeId","data-v-c0c56b6e"]]);var mi=pi,vi=Object(y["defineComponent"])({name:"editable-element-table",components:{EditableTable:mi},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=ae(),n=ce(),o=Object(g["c"])(t),l=o.canvasScale,c=o.handleElementId,a=o.isScaling,r=Object(y["ref"])(),i=$e(),u=i.addHistorySnapshot,d=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},s=Object(y["ref"])(!1);Object(y["watch"])(c,(function(){c.value!==e.elementInfo.id&&(s.value=!1)})),Object(y["watch"])(s,(function(){t.setDisableHotkeysState(s.value)}));var f=function(){e.elementInfo.lock||(s.value=!0)},b=Object(y["ref"])(-1);Object(y["watch"])(a,(function(){c.value===e.elementInfo.id&&(a.value&&(s.value=!1),a.value||-1===b.value||(n.updateElement({id:e.elementInfo.id,props:{height:b.value}}),b.value=-1))}));var p=function(t){var o=t[0].contentRect;if(r.value){var l=o.height;e.elementInfo.height!==l&&(a.value?b.value=l:n.updateElement({id:e.elementInfo.id,props:{height:l}}))}},m=new ResizeObserver(p);Object(y["onMounted"])((function(){r.value&&m.observe(r.value)})),Object(y["onUnmounted"])((function(){r.value&&m.unobserve(r.value)}));var v=function(t){n.updateElement({id:e.elementInfo.id,props:{data:t}}),u()},O=function(t){var o=t.reduce((function(e,t){return e+t})),l=t.map((function(e){return e/o}));n.updateElement({id:e.elementInfo.id,props:{width:o,colWidths:l}}),u()},h=function(e){Object(y["nextTick"])((function(){return t.setSelectedTableCells(e)}))};return{elementRef:r,canvasScale:l,handleSelectElement:d,updateTableCells:v,updateColWidths:O,editable:s,startEdit:f,updateSelectedCells:h}}});n("11f0");const Oi=Gn()(vi,[["render",ti],["__scopeId","data-v-426704b7"]]);var hi=Oi,ji=["width","height","stroke","stroke-width"],yi=["transform"],gi=["d"];function xi(e,t,n,o,l,c){var a=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-latex",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)}),onDblclick:t[1]||(t[1]=function(t){return e.openLatexEditor()})},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{overflow:"visible",width:e.elementInfo.width,height:e.elementInfo.height,stroke:e.elementInfo.color,"stroke-width":e.elementInfo.strokeWidth,fill:"none","stroke-linecap":"round","stroke-linejoin":"round"},[Object(y["createElementVNode"])("g",{transform:"scale(".concat(e.elementInfo.width/e.elementInfo.viewBox[0],", ").concat(e.elementInfo.height/e.elementInfo.viewBox[1],") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(y["createElementVNode"])("path",{d:e.elementInfo.path},null,8,gi)],8,yi)],8,ji))],32)),[[a,e.contextmenus]])],4)],6)}var Ci=Object(y["defineComponent"])({name:"editable-element-latex",props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))},n=function(){Cr.emit(za.OPEN_LATEX_EDITOR)};return{handleSelectElement:t,openLatexEditor:n}}});n("1190");const ki=Gn()(Ci,[["render",xi],["__scopeId","data-v-3168526a"]]);var Ei=ki;function wi(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("VideoPlayer"),r=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-video",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t,!1)})},[Object(y["createVNode"])(a,{width:e.elementInfo.width,height:e.elementInfo.height,src:e.elementInfo.src,poster:e.elementInfo.poster,scale:e.canvasScale},null,8,["width","height","src","poster","scale"]),(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(["t","b","l","r"],(function(n){return Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["handler-border",n]),key:n,onMousedown:t[0]||(t[0]=function(t){return e.handleSelectElement(t)})},null,34)})),64))],32)),[[r,e.contextmenus]])],4)],6)}var Ni=function(e){return Object(y["pushScopeId"])("data-v-e716fb74"),e=e(),Object(y["popScopeId"])(),e},Ii=["src","poster"],Vi={class:"bezel"},Si=Ni((function(){return Object(y["createElementVNode"])("div",{class:"controller-mask"},null,-1)})),Bi={class:"controller"},Li={class:"icons icons-left"},Ti={class:"icon-content"},Mi={class:"volume"},_i={class:"icon-content"},Di={class:"volume-bar",ref:"volumeBarRef"},zi=Ni((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),Ai=[zi],Fi={class:"time"},Ri={class:"ptime"},Pi=Object(y["createTextVNode"])(" / "),Hi={class:"dtime"},qi={class:"icons icons-right"},Wi={class:"speed"},Gi={class:"icon speed-icon"},Ui=["onClick"],Xi=Ni((function(){return Object(y["createElementVNode"])("span",{class:"icon-content"},"循环",-1)})),Zi=[Xi],Yi={class:"bar"},Ji=Ni((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),Qi=[Ji];function Ki(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPause"),r=Object(y["resolveComponent"])("IconPlayOne"),i=Object(y["resolveComponent"])("IconVolumeMute"),u=Object(y["resolveComponent"])("IconVolumeNotice"),d=Object(y["resolveComponent"])("IconVolumeSmall");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["video-player",{"hide-controller":e.hideController}]),style:Object(y["normalizeStyle"])({width:e.width*e.scale+"px",height:e.height*e.scale+"px",transform:"scale(".concat(1/e.scale,")")}),onMousemove:t[22]||(t[22]=function(t){return e.autoHideController()}),onClick:t[23]||(t[23]=function(t){return e.autoHideController()})},[Object(y["createElementVNode"])("div",{class:"video-wrap",onClick:t[8]||(t[8]=function(t){return e.toggle()})},[Object(y["createElementVNode"])("video",{class:"video",ref:"videoRef",src:e.src,poster:e.poster,"webkit-playsinline":"",playsinline:"",onDurationchange:t[0]||(t[0]=function(t){return e.handleDurationchange()}),onTimeupdate:t[1]||(t[1]=function(t){return e.handleTimeupdate()}),onEnded:t[2]||(t[2]=function(t){return e.handleEnded()}),onProgress:t[3]||(t[3]=function(t){return e.handleProgress()}),onPlay:t[4]||(t[4]=function(t){return e.autoHideController()}),onPause:t[5]||(t[5]=function(t){return e.autoHideController()}),onError:t[6]||(t[6]=function(t){return e.handleError()})},null,40,Ii),Object(y["createElementVNode"])("div",Vi,[Object(y["createElementVNode"])("span",{class:Object(y["normalizeClass"])(["bezel-icon",{"bezel-transition":e.bezelTransition}]),onAnimationend:t[7]||(t[7]=function(t){return e.bezelTransition=!1})},[e.paused?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0})):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1}))],34)])]),Si,Object(y["createElementVNode"])("div",Bi,[Object(y["createElementVNode"])("div",Li,[Object(y["createElementVNode"])("div",{class:"icon play-icon",onClick:t[9]||(t[9]=function(t){return e.toggle()})},[Object(y["createElementVNode"])("span",Ti,[e.paused?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0})):(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1}))])]),Object(y["createElementVNode"])("div",Mi,[Object(y["createElementVNode"])("div",{class:"icon volume-icon",onClick:t[10]||(t[10]=function(t){return e.toggleVolume()})},[Object(y["createElementVNode"])("span",_i,[0===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0})):1===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:2}))])]),Object(y["createElementVNode"])("div",{class:"volume-bar-wrap",onMousedown:t[11]||(t[11]=function(t){return e.handleMousedownVolumeBar(t)}),onTouchstart:t[12]||(t[12]=function(t){return e.handleMousedownVolumeBar(t)}),onClick:t[13]||(t[13]=function(t){return e.handleClickVolumeBar(t)})},[Object(y["createElementVNode"])("div",Di,[Object(y["createElementVNode"])("div",{class:"volume-bar-inner",style:Object(y["normalizeStyle"])({width:e.volumeBarWidth})},Ai,4)],512)],32)]),Object(y["createElementVNode"])("span",Fi,[Object(y["createElementVNode"])("span",Ri,Object(y["toDisplayString"])(e.ptime),1),Pi,Object(y["createElementVNode"])("span",Hi,Object(y["toDisplayString"])(e.dtime),1)])]),Object(y["createElementVNode"])("div",qi,[Object(y["createElementVNode"])("div",Wi,[Object(y["createElementVNode"])("div",Gi,[Object(y["createElementVNode"])("span",{class:"icon-content",onClick:t[14]||(t[14]=function(t){return e.speedMenuVisible=!e.speedMenuVisible})},"倍速"),e.speedMenuVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:"speed-menu",onMouseleave:t[15]||(t[15]=function(t){return e.speedMenuVisible=!1})},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.speedOptions,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["speed-menu-item",{active:t.value===e.playbackRate}]),key:t.label,onClick:function(n){return e.speed(t.value)}},Object(y["toDisplayString"])(t.label),11,Ui)})),128))],32)):Object(y["createCommentVNode"])("",!0)])]),Object(y["createElementVNode"])("div",{class:"loop",onClick:t[16]||(t[16]=function(t){return e.toggleLoop()})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["icon loop-icon",{active:e.loop}])},Zi,2)])]),Object(y["createElementVNode"])("div",{class:"bar-wrap",ref:"playBarWrap",onMousedown:t[17]||(t[17]=function(t){return e.handleMousedownPlayBar(t)}),onTouchstart:t[18]||(t[18]=function(t){return e.handleMousedownPlayBar(t)}),onMousemove:t[19]||(t[19]=function(t){return e.handleMousemovePlayBar(t)}),onMouseenter:t[20]||(t[20]=function(t){return e.playBarTimeVisible=!0}),onMouseleave:t[21]||(t[21]=function(t){return e.playBarTimeVisible=!1})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["bar-time",{hidden:!e.playBarTimeVisible}]),style:Object(y["normalizeStyle"])({left:e.playBarTimeLeft})},Object(y["toDisplayString"])(e.playBarTime),7),Object(y["createElementVNode"])("div",Yi,[Object(y["createElementVNode"])("div",{class:"loaded",style:Object(y["normalizeStyle"])({width:e.loadedBarWidth})},null,4),Object(y["createElementVNode"])("div",{class:"played",style:Object(y["normalizeStyle"])({width:e.playedBarWidth})},Qi,4)])],544)])],38)}var $i=function(e,t){Object(y["onMounted"])((function(){if(t.value){var n="normal";if(/m3u8(#|\?|$)/i.exec(e)?n="hls":/.flv(#|\?|$)/i.exec(e)&&(n="flv"),t.value&&"hls"===n&&(t.value.canPlayType("application/x-mpegURL")||t.value.canPlayType("application/vnd.apple.mpegURL"))&&(n="normal"),"hls"===n){var o=window.Hls;if(o&&o.isSupported()){var l=new o;l.loadSource(e),l.attachMedia(t.value)}}else if("flv"===n){var c=window.flvjs;if(c&&c.isSupported()){var a=c.createPlayer({type:"flv",url:e});a.attachMediaElement(t.value),a.load()}}}}))},eu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(0===e||isNaN(e))return"00:00";var t=function(e){return e<10?"0"+e:""+e},n=Math.floor(e/3600),o=Math.floor((e-3600*n)/60),l=Math.floor(e-3600*n-60*o);return(n>0?[n,o,l]:[o,l]).map(t).join(":")},tu=function(e){return e.getBoundingClientRect().left},nu=Object(y["defineComponent"])({name:"video-player",props:{width:{type:Number,required:!0},height:{type:Number,required:!0},src:{type:String,required:!0},poster:{type:String,default:""},scale:{type:Number,default:1}},setup:function(e){var t=Object(y["ref"])(),n=Object(y["ref"])(),o=Object(y["ref"])(),l=Object(y["ref"])(.5),c=Object(y["ref"])(!0),a=Object(y["ref"])(0),r=Object(y["ref"])(0),i=Object(y["ref"])(0),u=Object(y["ref"])(!1),d=Object(y["ref"])(!1),s=Object(y["ref"])(1),f=Object(y["ref"])(!1),b=Object(y["ref"])("00:00"),p=Object(y["ref"])("0"),m=Object(y["computed"])((function(){return eu(a.value)})),v=Object(y["computed"])((function(){return eu(r.value)})),O=Object(y["computed"])((function(){return a.value/r.value*100+"%"})),h=Object(y["computed"])((function(){return i.value/r.value*100+"%"})),j=Object(y["computed"])((function(){return 100*l.value+"%"})),g=Object(y["ref"])(!1),x=[{label:"2x",value:2},{label:"1.5x",value:1.5},{label:"1.25x",value:1.25},{label:"1x",value:1},{label:"0.75x",value:.75},{label:"0.5x",value:.5}],C=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,r.value),t.value.currentTime=e,a.value=e)},k=function(){t.value&&(c.value=!1,t.value.play(),d.value=!0)},E=function(){t.value&&(c.value=!0,t.value.pause(),d.value=!0)},w=function(){c.value?k():E()},N=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,1),t.value.volume=e,l.value=e,t.value.muted&&0!==e&&(t.value.muted=!1))},I=function(e){t.value&&(t.value.playbackRate=e),s.value=e},V=function(){var e;r.value=(null===(e=t.value)||void 0===e?void 0:e.duration)||0},S=function(){var e;a.value=(null===(e=t.value)||void 0===e?void 0:e.currentTime)||0},B=function(){u.value?(C(0),k()):E()},L=function(){var e;i.value=null!==(e=t.value)&&void 0!==e&&e.buffered.length?t.value.buffered.end(t.value.buffered.length-1):0},T=function(){return Se["a"].error("视频加载失败")},M=function(e){if(t.value&&n.value){var o="clientX"in e?e.clientX:e.changedTouches[0].clientX,l=(o-tu(n.value))/n.value.clientWidth;l=Math.max(l,0),l=Math.min(l,1);var c=l*r.value;t.value.currentTime=c,a.value=c}},_=function e(o){if(t.value&&n.value){var l="clientX"in o?o.clientX:o.changedTouches[0].clientX,c=(l-tu(n.value))/n.value.clientWidth;c=Math.max(c,0),c=Math.min(c,1);var i=c*r.value;t.value.currentTime=i,a.value=i,document.removeEventListener("mousemove",M),document.removeEventListener("touchmove",M),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)}},D=function(){document.addEventListener("mousemove",M),document.addEventListener("touchmove",M),document.addEventListener("mouseup",_),document.addEventListener("touchend",_)},z=function(e){if(o.value){var t="clientX"in e?e.clientX:e.changedTouches[0].clientX,n=(t-tu(o.value)-5.5)/35;N(n)}},A=function e(){document.removeEventListener("mousemove",z),document.removeEventListener("touchmove",z),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)},F=function(){document.addEventListener("mousemove",z),document.addEventListener("touchmove",z),document.addEventListener("mouseup",A),document.addEventListener("touchend",A)},R=function(e){if(o.value){var t=(e.clientX-tu(o.value)-5.5)/35;N(t)}},P=function(e){if(r.value&&n.value){var t=n.value.getBoundingClientRect().left,o=e.clientX-t;if(o<0||o>n.value.offsetWidth)return;var l=r.value*(o/n.value.offsetWidth);p.value="".concat(o-(l>=3600?25:20),"px"),b.value=eu(l),f.value=!0}},H=function(){t.value&&(t.value.muted?(t.value.muted=!1,N(.5)):(t.value.muted=!0,N(0)))},q=function(){u.value=!u.value},W=Object(y["ref"])(-1),G=Object(y["ref"])(!1),U=function(){G.value=!1,clearTimeout(W.value),W.value=setTimeout((function(){var e;null!==(e=t.value)&&void 0!==e&&e.played.length&&(G.value=!0)}),3e3)};return $i(e.src,t),{videoRef:t,playBarWrap:n,volumeBarRef:o,volume:l,loop:u,paused:c,ptime:m,dtime:v,playBarTime:b,playBarTimeVisible:f,playBarTimeLeft:p,playedBarWidth:O,loadedBarWidth:h,volumeBarWidth:j,hideController:G,bezelTransition:d,playbackRate:s,speedMenuVisible:g,speedOptions:x,seek:C,play:k,pause:E,toggle:w,setVolume:N,speed:I,handleDurationchange:V,handleTimeupdate:S,handleEnded:B,handleProgress:L,handleMousedownPlayBar:D,handleMousedownVolumeBar:F,handleClickVolumeBar:R,handleMousemovePlayBar:P,toggleVolume:H,toggleLoop:q,autoHideController:U,handleError:T}}});n("a7fe");const ou=Gn()(nu,[["render",Ki],["__scopeId","data-v-e716fb74"]]);var lu=ou,cu=Object(y["defineComponent"])({name:"editable-element-video",components:{VideoPlayer:lu},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo,n))};return{canvasScale:n,handleSelectElement:o}}});n("de30");const au=Gn()(cu,[["render",wi],["__scopeId","data-v-7f80f8ee"]]);var ru=au;function iu(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconVolumeNotice"),r=Object(y["resolveComponent"])("AudioPlayer"),i=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["editable-element-audio",{lock:e.elementInfo.lock}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-content",onMousedown:t[1]||(t[1]=function(t){return e.handleSelectElement(t)})},[Object(y["createVNode"])(a,{class:"audio-icon",style:Object(y["normalizeStyle"])({fontSize:e.audioIconSize,color:e.elementInfo.color})},null,8,["style"]),e.handleElementId===e.elementInfo.id?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,class:"audio-player",style:Object(y["normalizeStyle"])(Object(L["a"])({},e.audioPlayerPosition)),src:e.elementInfo.src,loop:e.elementInfo.loop,scale:e.canvasScale,onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(){}),["stop"]))},null,8,["style","src","loop","scale"])):Object(y["createCommentVNode"])("",!0)],32)),[[i,e.contextmenus]])],4)],6)}var uu=function(e){return Object(y["pushScopeId"])("data-v-5cabbb47"),e=e(),Object(y["popScopeId"])(),e},du=["src","autoplay"],su={class:"controller"},fu={class:"icons"},bu={class:"icon-content"},pu={class:"volume"},mu={class:"icon-content"},vu={class:"volume-bar",ref:"volumeBarRef"},Ou=uu((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),hu=[Ou],ju={class:"time"},yu={class:"ptime"},gu=Object(y["createTextVNode"])(" / "),xu={class:"dtime"},Cu={class:"bar"},ku=uu((function(){return Object(y["createElementVNode"])("span",{class:"thumb"},null,-1)})),Eu=[ku];function wu(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPlayOne"),r=Object(y["resolveComponent"])("IconPause"),i=Object(y["resolveComponent"])("IconVolumeMute"),u=Object(y["resolveComponent"])("IconVolumeNotice"),d=Object(y["resolveComponent"])("IconVolumeSmall");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"audio-player",style:Object(y["normalizeStyle"])({transform:"scale(".concat(1/e.scale,")")})},[Object(y["createElementVNode"])("audio",{class:"audio",ref:"audioRef",src:e.src,autoplay:e.autoplay,onDurationchange:t[0]||(t[0]=function(t){return e.handleDurationchange()}),onTimeupdate:t[1]||(t[1]=function(t){return e.handleTimeupdate()}),onPlay:t[2]||(t[2]=function(t){return e.handlePlayed()}),onEnded:t[3]||(t[3]=function(t){return e.handleEnded()}),onProgress:t[4]||(t[4]=function(t){return e.handleProgress()}),onError:t[5]||(t[5]=function(t){return e.handleError()})},null,40,du),Object(y["createElementVNode"])("div",su,[Object(y["createElementVNode"])("div",fu,[Object(y["createElementVNode"])("div",{class:"icon play-icon",onClick:t[6]||(t[6]=function(t){return e.toggle()})},[Object(y["createElementVNode"])("span",bu,[e.paused?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0})):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1}))])]),Object(y["createElementVNode"])("div",pu,[Object(y["createElementVNode"])("div",{class:"icon volume-icon",onClick:t[7]||(t[7]=function(t){return e.toggleVolume()})},[Object(y["createElementVNode"])("span",mu,[0===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0})):1===e.volume?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:2}))])]),Object(y["createElementVNode"])("div",{class:"volume-bar-wrap",onMousedown:t[8]||(t[8]=function(t){return e.handleMousedownVolumeBar(t)}),onTouchstart:t[9]||(t[9]=function(t){return e.handleMousedownVolumeBar(t)}),onClick:t[10]||(t[10]=function(t){return e.handleClickVolumeBar(t)})},[Object(y["createElementVNode"])("div",vu,[Object(y["createElementVNode"])("div",{class:"volume-bar-inner",style:Object(y["normalizeStyle"])({width:e.volumeBarWidth})},hu,4)],512)],32)])]),Object(y["createElementVNode"])("span",ju,[Object(y["createElementVNode"])("span",yu,Object(y["toDisplayString"])(e.ptime),1),gu,Object(y["createElementVNode"])("span",xu,Object(y["toDisplayString"])(e.dtime),1)]),Object(y["createElementVNode"])("div",{class:"bar-wrap",ref:"playBarWrap",onMousedown:t[11]||(t[11]=function(t){return e.handleMousedownPlayBar(t)}),onTouchstart:t[12]||(t[12]=function(t){return e.handleMousedownPlayBar(t)}),onMousemove:t[13]||(t[13]=function(t){return e.handleMousemovePlayBar(t)}),onMouseenter:t[14]||(t[14]=function(t){return e.playBarTimeVisible=!0}),onMouseleave:t[15]||(t[15]=function(t){return e.playBarTimeVisible=!1})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["bar-time",{hidden:!e.playBarTimeVisible}]),style:Object(y["normalizeStyle"])({left:e.playBarTimeLeft})},Object(y["toDisplayString"])(e.playBarTime),7),Object(y["createElementVNode"])("div",Cu,[Object(y["createElementVNode"])("div",{class:"loaded",style:Object(y["normalizeStyle"])({width:e.loadedBarWidth})},null,4),Object(y["createElementVNode"])("div",{class:"played",style:Object(y["normalizeStyle"])({width:e.playedBarWidth})},Eu,4)])],544)])],4)}var Nu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(0===e||isNaN(e))return"00:00";var t=function(e){return e<10?"0"+e:""+e},n=Math.floor(e/3600),o=Math.floor((e-3600*n)/60),l=Math.floor(e-3600*n-60*o);return(n>0?[n,o,l]:[o,l]).map(t).join(":")},Iu=function(e){return e.getBoundingClientRect().left},Vu=Object(y["defineComponent"])({name:"audio-player",props:{src:{type:String,required:!0},loop:{type:Boolean,required:!0},autoplay:{type:Boolean,default:!1},scale:{type:Number,default:1}},setup:function(e){var t=Object(y["ref"])(),n=Object(y["ref"])(),o=Object(y["ref"])(),l=Object(y["ref"])(.5),c=Object(y["ref"])(!0),a=Object(y["ref"])(0),r=Object(y["ref"])(0),i=Object(y["ref"])(0),u=Object(y["ref"])(!1),d=Object(y["ref"])("00:00"),s=Object(y["ref"])("0"),f=Object(y["computed"])((function(){return Nu(a.value)})),b=Object(y["computed"])((function(){return Nu(r.value)})),p=Object(y["computed"])((function(){return a.value/r.value*100+"%"})),m=Object(y["computed"])((function(){return i.value/r.value*100+"%"})),v=Object(y["computed"])((function(){return 100*l.value+"%"})),O=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,r.value),t.value.currentTime=e,a.value=e)},h=function(){t.value&&(c.value=!1,t.value.play())},j=function(){t.value&&(c.value=!0,t.value.pause())},g=function(){c.value?h():j()},x=function(e){t.value&&(e=Math.max(e,0),e=Math.min(e,1),t.value.volume=e,l.value=e,t.value.muted&&0!==e&&(t.value.muted=!1))},C=function(){var e;r.value=(null===(e=t.value)||void 0===e?void 0:e.duration)||0},k=function(){var e;a.value=(null===(e=t.value)||void 0===e?void 0:e.currentTime)||0},E=function(){c.value=!1},w=function(){e.loop?(O(0),h()):j()},N=function(){var e;i.value=null!==(e=t.value)&&void 0!==e&&e.buffered.length?t.value.buffered.end(t.value.buffered.length-1):0},I=function(){return Se["a"].error("视频加载失败")},V=function(e){if(t.value&&n.value){var o="clientX"in e?e.clientX:e.changedTouches[0].clientX,l=(o-Iu(n.value))/n.value.clientWidth;l=Math.max(l,0),l=Math.min(l,1);var c=l*r.value;t.value.currentTime=c,a.value=c}},S=function e(o){if(t.value&&n.value){var l="clientX"in o?o.clientX:o.changedTouches[0].clientX,c=(l-Iu(n.value))/n.value.clientWidth;c=Math.max(c,0),c=Math.min(c,1);var i=c*r.value;t.value.currentTime=i,a.value=i,document.removeEventListener("mousemove",V),document.removeEventListener("touchmove",V),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)}},B=function(){document.addEventListener("mousemove",V),document.addEventListener("touchmove",V),document.addEventListener("mouseup",S),document.addEventListener("touchend",S)},L=function(e){if(o.value){var t="clientX"in e?e.clientX:e.changedTouches[0].clientX,n=(t-Iu(o.value)-5.5)/35;x(n)}},T=function e(){document.removeEventListener("mousemove",L),document.removeEventListener("touchmove",L),document.removeEventListener("mouseup",e),document.removeEventListener("touchend",e)},M=function(){document.addEventListener("mousemove",L),document.addEventListener("touchmove",L),document.addEventListener("mouseup",T),document.addEventListener("touchend",T)},_=function(e){if(o.value){var t=(e.clientX-Iu(o.value)-5.5)/35;x(t)}},D=function(e){if(r.value&&n.value){var t=n.value.getBoundingClientRect().left,o=e.clientX-t;if(o<0||o>n.value.offsetWidth)return;var l=r.value*(o/n.value.offsetWidth);s.value="".concat(o-(l>=3600?25:20),"px"),d.value=Nu(l),u.value=!0}},z=function(){t.value&&(t.value.muted?(t.value.muted=!1,x(.5)):(t.value.muted=!0,x(0)))};return{audioRef:t,playBarWrap:n,volumeBarRef:o,volume:l,paused:c,ptime:f,dtime:b,playBarTime:d,playBarTimeVisible:u,playBarTimeLeft:s,playedBarWidth:p,loadedBarWidth:m,volumeBarWidth:v,play:h,pause:j,toggle:g,setVolume:x,handleDurationchange:C,handleTimeupdate:k,handlePlayed:E,handleEnded:w,handleProgress:N,handleError:I,handleMousedownPlayBar:B,handleMousedownVolumeBar:M,handleClickVolumeBar:_,handleMousemovePlayBar:D,toggleVolume:z}}});n("195c");const Su=Gn()(Vu,[["render",wu],["__scopeId","data-v-5cabbb47"]]);var Bu=Su,Lu=Object(y["defineComponent"])({name:"editable-element-audio",components:{AudioPlayer:Bu},props:{elementInfo:{type:Object,required:!0},selectElement:{type:Function,required:!0},contextmenus:{type:Function}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=t.handleElementId,l=Object(g["c"])(ce()),c=l.viewportRatio,a=Object(y["computed"])((function(){return Math.min(e.elementInfo.width,e.elementInfo.height)+"px"})),r=Object(y["computed"])((function(){var t=nt,o=nt*c.value,l=280/n.value,a=50/n.value,r=e.elementInfo.width,i=e.elementInfo.height,u=e.elementInfo.left,d=e.elementInfo.top,s=0,f=i;return u+l>=t&&(s=r-l),d+i+a>=o&&(f=-a),{left:s+"px",top:f+"px"}})),i=function(t){e.elementInfo.lock||(t.stopPropagation(),e.selectElement(t,e.elementInfo))};return{canvasScale:n,handleElementId:o,audioIconSize:a,audioPlayerPosition:r,handleSelectElement:i}}});n("2fee");const Tu=Gn()(Lu,[["render",iu],["__scopeId","data-v-66dd4448"]]);var Mu=Tu,_u=Object(y["defineComponent"])({name:"editable-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},isMultiSelect:{type:Boolean,required:!0},selectElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(y["computed"])((function(){var t,n=(t={},Object(fe["a"])(t,Ne.IMAGE,Sa),Object(fe["a"])(t,Ne.TEXT,Tr),Object(fe["a"])(t,Ne.SHAPE,Hr),Object(fe["a"])(t,Ne.LINE,Yr),Object(fe["a"])(t,Ne.CHART,$r),Object(fe["a"])(t,Ne.TABLE,hi),Object(fe["a"])(t,Ne.LATEX,Ei),Object(fe["a"])(t,Ne.VIDEO,ru),Object(fe["a"])(t,Ne.AUDIO,Mu),t);return n[e.elementInfo.type]||null})),n=mt(),o=n.orderElement,l=fa(),c=l.alignElementToCanvas,a=st(),r=a.combineElements,i=a.uncombineElements,u=dt(),d=u.deleteElement,s=ut(),f=s.lockElement,b=s.unlockElement,p=ft(),m=p.copyElement,v=p.pasteElement,O=p.cutElement,h=bt(),j=h.selectAllElement,g=function(){return e.elementInfo.lock?[{text:"解锁",handler:function(){return b(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 c(E.HORIZONTAL)},children:[{text:"水平垂直居中",handler:function(){return c(E.CENTER)}},{text:"水平居中",handler:function(){return c(E.HORIZONTAL)}},{text:"左对齐",handler:function(){return c(E.LEFT)}},{text:"右对齐",handler:function(){return c(E.RIGHT)}}]},{text:"垂直居中",handler:function(){return c(E.VERTICAL)},children:[{text:"水平垂直居中",handler:function(){return c(E.CENTER)}},{text:"垂直居中",handler:function(){return c(E.VERTICAL)}},{text:"顶部对齐",handler:function(){return c(E.TOP)}},{text:"底部对齐",handler:function(){return c(E.BOTTOM)}}]},{divider:!0},{text:"置于顶层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,k.TOP)},children:[{text:"置于顶层",handler:function(){return o(e.elementInfo,k.TOP)}},{text:"上移一层",handler:function(){return o(e.elementInfo,k.UP)}}]},{text:"置于底层",disable:e.isMultiSelect&&!e.elementInfo.groupId,handler:function(){return o(e.elementInfo,k.BOTTOM)},children:[{text:"置于底层",handler:function(){return o(e.elementInfo,k.BOTTOM)}},{text:"下移一层",handler:function(){return o(e.elementInfo,k.DOWN)}}]},{divider:!0},{text:"设置链接",handler:e.openLinkDialog},{text:e.elementInfo.groupId?"取消组合":"组合",subText:"Ctrl + G",handler:e.elementInfo.groupId?i:r,hide:!e.isMultiSelect},{text:"全选",subText:"Ctrl + A",handler:j},{text:"锁定",subText:"Ctrl + L",handler:f},{text:"删除",subText:"Delete",handler:d}]};return{currentElementComponent:t,contextmenus:g}}});const Du=Gn()(_u,[["render",sa]]);var zu=Du;function Au(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])("mouse-selection quadrant-".concat(e.quadrant)),style:Object(y["normalizeStyle"])({top:e.top+"px",left:e.left+"px",width:e.width+"px",height:e.height+"px"})},null,6)}var Fu=Object(y["defineComponent"])({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("aa92");const Ru=Gn()(Fu,[["render",Au],["__scopeId","data-v-25d4b5f8"]]);var Pu=Ru;function Hu(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("GridLines");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"viewport-background",style:Object(y["normalizeStyle"])(e.backgroundStyle)},[e.showGridLines?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0})):Object(y["createCommentVNode"])("",!0)],4)}var qu={class:"grid-lines"},Wu=["d","stroke"];function Gu(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",qu,[Object(y["createElementVNode"])("path",{style:Object(y["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")}),d:e.path,fill:"none",stroke:e.gridColor,"stroke-width":"0.3","stroke-dasharray":"5"},null,12,Wu)])}var Uu=Object(y["defineComponent"])({name:"grid-lines",setup:function(){var e=Object(g["c"])(ae()),t=e.canvasScale,n=Object(g["c"])(ce()),o=n.currentSlide,l=n.viewportRatio,c=Object(y["computed"])((function(){var e;return null===(e=o.value)||void 0===e?void 0:e.background})),a=Object(y["computed"])((function(){var e,t=(null===(e=c.value)||void 0===e?void 0:e.color)||"#fff",n=["#000","#fff"];return ee.a.mostReadable(t,n,{includeFallbackColors:!0}).setAlpha(.5).toRgbString()})),r=50,i=function(){for(var e=nt,t=nt*l.value,n="",o=0;o<=Math.floor(t/r);o++)n+="M0 ".concat(o*r," L").concat(e," ").concat(o*r," ");for(var c=0;c<=Math.floor(e/r);c++)n+="M".concat(c*r," 0 L").concat(c*r," ").concat(t," ");return n};return{canvasScale:t,gridColor:a,width:nt,height:nt*l.value,path:i()}}});n("ffb8");const Xu=Gn()(Uu,[["render",Gu],["__scopeId","data-v-9b94cc34"]]);var Zu=Xu,Yu=Object(y["defineComponent"])({name:"viewport-background",components:{GridLines:Zu},setup:function(){var e=Object(g["c"])(ae()),t=e.showGridLines,n=Object(g["c"])(ce()),o=n.currentSlide,l=Object(y["computed"])((function(){var e;return null===(e=o.value)||void 0===e?void 0:e.background})),c=ho(l),a=c.backgroundStyle;return{showGridLines:t,backgroundStyle:a}}});n("06b6");const Ju=Gn()(Yu,[["render",Hu],["__scopeId","data-v-4d0018d8"]]);var Qu=Ju;function Ku(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"alignment-line",style:Object(y["normalizeStyle"])({left:e.left,top:e.top})},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["line",e.type]),style:Object(y["normalizeStyle"])(e.sizeStyle)},null,6)],4)}var $u=Object(y["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=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.axis.x*n.value+"px"})),l=Object(y["computed"])((function(){return e.axis.y*n.value+"px"})),c=Object(y["computed"])((function(){return"vertical"===e.type?{height:e.length*n.value+"px"}:{width:e.length*n.value+"px"}}));return{left:o,top:l,sizeStyle:c}}});n("c790");const ed=Gn()($u,[["render",Ku],["__scopeId","data-v-62c9018e"]]);var td=ed,nd=["width","height"],od=["d"];function ld(e,t,n,o,l,c){var a,r;return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"element-create-selection",ref:"selectionRef",onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.createSelection(t)}),["stop"])),onContextmenu:t[1]||(t[1]=Object(y["withModifiers"])((function(){}),["stop","prevent"]))},[e.start&&e.end?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:Object(y["normalizeClass"])(["selection",null===(a=e.creatingElement)||void 0===a?void 0:a.type]),style:Object(y["normalizeStyle"])(e.position)},["line"===(null===(r=e.creatingElement)||void 0===r?void 0:r.type)&&e.lineData?(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{key:0,overflow:"visible",width:e.lineData.svgWidth,height:e.lineData.svgHeight},[Object(y["createElementVNode"])("path",{d:e.lineData.path,stroke:"#d14424",fill:"none","stroke-width":"2"},null,8,od)],8,nd)):Object(y["createCommentVNode"])("",!0)],6)):Object(y["createCommentVNode"])("",!0)],544)}var cd=Object(y["defineComponent"])({name:"element-create-selection",emits:["created"],setup:function(e,t){var n=t.emit,o=ae(),l=Object(g["c"])(o),c=l.creatingElement,a=Object(g["c"])(Oe()),r=a.ctrlOrShiftKeyActive,i=Object(y["ref"])(),u=Object(y["ref"])(),d=Object(y["ref"])(),s=Object(y["ref"])({x:0,y:0});Object(y["onMounted"])((function(){if(d.value){var e=d.value.getBoundingClientRect(),t=e.x,n=e.y;s.value={x:t,y:n}}}));var f=function(e){var t=!0,l=e.pageX,a=e.pageY;i.value=[l,a],document.onmousemove=function(e){if(c.value&&t){var n=e.pageX,o=e.pageY;if(r.value){var i=n-l,d=o-a,s=Math.abs(i),f=Math.abs(d);if("shape"===c.value.type){var b=d>0&&i<0||d<0&&i>0;s>f?o=b?a-i:a+i:n=b?l-d:l+d}else"line"===c.value.type&&(s>f?o=a:n=l)}u.value=[n,o]}},document.onmouseup=function(e){var r,d;if(document.onmousemove=null,document.onmouseup=null,2!==e.button){t=!1;var s=e.pageX,f=e.pageY,b=30;if("line"===(null===(r=c.value)||void 0===r?void 0:r.type)&&(Math.abs(s-l)>=b||Math.abs(f-a)>=b))n("created",{start:i.value,end:u.value});else if("line"!==(null===(d=c.value)||void 0===d?void 0:d.type)&&Math.abs(s-l)>=b&&Math.abs(f-a)>=b)n("created",{start:i.value,end:u.value});else{var p=200,m=Math.min(s,l),v=Math.min(f,a),O=Math.max(s,l),h=Math.max(f,a),j=O-m>=b?O-m:p,y=h-v>=b?h-v:p;n("created",{start:[m,v],end:[m+j,v+y]})}}else setTimeout((function(){return o.setCreatingElement(null)}),0)}},b=Object(y["computed"])((function(){if(!i.value||!u.value)return null;if(!c.value||"line"!==c.value.type)return null;var e=Object(He["a"])(i.value,2),t=e[0],n=e[1],o=Object(He["a"])(u.value,2),l=o[0],a=o[1],r=Math.min(t,l),d=Math.max(t,l),s=Math.min(n,a),f=Math.max(n,a),b=d-r>=24?d-r:24,p=f-s>=24?f-s:24,m=t===r?0:d-r,v=n===s?0:f-s,O=l===r?0:d-r,h=a===s?0:f-s,j="M".concat(m,", ").concat(v," L").concat(O,", ").concat(h);return{svgWidth:b,svgHeight:p,startX:m,startY:v,endX:O,endY:h,path:j}})),p=Object(y["computed"])((function(){if(!i.value||!u.value)return{};var e=Object(He["a"])(i.value,2),t=e[0],n=e[1],o=Object(He["a"])(u.value,2),l=o[0],c=o[1],a=Math.min(t,l),r=Math.max(t,l),d=Math.min(n,c),f=Math.max(n,c),b=r-a,p=f-d;return{left:a-s.value.x+"px",top:d-s.value.y+"px",width:b+"px",height:p+"px"}}));return{selectionRef:d,start:i,end:u,creatingElement:c,createSelection:f,lineData:b,position:p}}});n("80f7");const ad=Gn()(cd,[["render",ld],["__scopeId","data-v-15b60d90"]]);var rd=ad;function id(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"multi-select-operate",style:Object(y["normalizeStyle"])({left:e.range.minX*e.canvasScale+"px",top:e.range.minY*e.canvasScale+"px"})},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.disableResize?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],{key:0},Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:t.direction,type:t.direction,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleMultiElement(n,e.range,t.direction)}),["stop"])},null,8,["type","style","onMousedown"])})),128))],4)}var ud=function(e,t){var n=Object(y["computed"])((function(){return[{direction:N.LEFT_TOP,style:{}},{direction:N.TOP,style:{left:e.value/2+"px"}},{direction:N.RIGHT_TOP,style:{left:e.value+"px"}},{direction:N.LEFT,style:{top:t.value/2+"px"}},{direction:N.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}},{direction:N.LEFT_BOTTOM,style:{top:t.value+"px"}},{direction:N.BOTTOM,style:{left:e.value/2+"px",top:t.value+"px"}},{direction:N.RIGHT_BOTTOM,style:{left:e.value+"px",top:t.value+"px"}}]})),o=Object(y["computed"])((function(){return[{direction:N.LEFT,style:{top:t.value/2+"px"}},{direction:N.RIGHT,style:{left:e.value+"px",top:t.value/2+"px"}}]})),l=Object(y["computed"])((function(){return[{type:w.T,style:{width:e.value+"px"}},{type:w.B,style:{top:t.value+"px",width:e.value+"px"}},{type:w.L,style:{height:t.value+"px"}},{type:w.R,style:{left:e.value+"px",height:t.value+"px"}}]}));return{resizeHandlers:n,textElementResizeHandlers:o,borderLines:l}};function dd(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["resize-handler",e.rotateClassName,e.type])},null,2)}var sd=Object(y["defineComponent"])({name:"resize-handler",props:{type:{type:String,default:""},rotate:{type:Number,default:0}},setup:function(e){var t=Object(y["computed"])((function(){var t="rotate-",n=e.rotate;return n>-22.5&&n<=22.5?t+0:n>22.5&&n<=67.5?t+45:n>67.5&&n<=112.5?t+90:n>112.5&&n<=157.5?t+135:n>157.5||n<=-157.5?t+0:n>-157.5&&n<=-112.5?t+45:n>-112.5&&n<=-67.5?t+90:n>-67.5&&n<=-22.5?t+135:t+0}));return{rotateClassName:t}}});n("7f52");const fd=Gn()(sd,[["render",dd],["__scopeId","data-v-c9559332"]]);var bd=fd;function pd(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["border-line",e.type,{wide:e.isWide}])},null,2)}var md=Object(y["defineComponent"])({name:"border-line",props:{type:{type:String,required:!0},isWide:{type:Boolean,default:!1}}});n("9d5f");const vd=Gn()(md,[["render",pd],["__scopeId","data-v-1430bedc"]]);var Od=vd,hd=Object(y["defineComponent"])({name:"multi-select-operate",components:{ResizeHandler:bd,BorderLine:Od},props:{elementList:{type:Array,required:!0},scaleMultiElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.canvasScale,l=Object(y["computed"])((function(){return e.elementList.filter((function(e){return n.value.includes(e.id)}))})),c=Object(y["ref"])({minX:0,maxX:0,minY:0,maxY:0}),a=Object(y["computed"])((function(){return(c.value.maxX-c.value.minX)*o.value})),r=Object(y["computed"])((function(){return(c.value.maxY-c.value.minY)*o.value})),i=ud(a,r),u=i.resizeHandlers,d=i.borderLines,s=function(){var e=Ue(l.value),t=e.minX,n=e.maxX,o=e.minY,a=e.maxY;c.value={minX:t,maxX:n,minY:o,maxY:a}};Object(y["watchEffect"])(s);var f=Object(y["computed"])((function(){return l.value.some((function(e){return!!("image"!==e.type&&"shape"!==e.type||e.rotate)}))}));return{range:c,canvasScale:o,borderLines:d,disableResize:f,resizeHandlers:u}}});n("008f");const jd=Gn()(hd,[["render",id],["__scopeId","data-v-55c8df22"]]);var yd=jd,gd={key:1,class:"animation-index"};function xd(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("LinkHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["operate",{"multi-select":e.isMultiSelect&&!e.isActive}]),style:Object(y["normalizeStyle"])({top:e.elementInfo.top*e.canvasScale+"px",left:e.elementInfo.left*e.canvasScale+"px",transform:"rotate(".concat(e.rotate,"deg)"),transformOrigin:"".concat(e.elementInfo.width*e.canvasScale/2,"px ").concat(e.height*e.canvasScale/2,"px")})},[e.isSelected?(Object(y["openBlock"])(),Object(y["createBlock"])(Object(y["resolveDynamicComponent"])(e.currentOperateComponent),{key:0,elementInfo:e.elementInfo,handlerVisible:!e.elementInfo.lock&&(e.isActiveGroupElement||!e.isMultiSelect),rotateElement:e.rotateElement,scaleElement:e.scaleElement,dragLineElement:e.dragLineElement},null,8,["elementInfo","handlerVisible","rotateElement","scaleElement","dragLineElement"])):Object(y["createCommentVNode"])("",!0),"elAnimation"===e.toolbarState&&-1!==e.elementIndexInAnimation?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",gd,Object(y["toDisplayString"])(e.elementIndexInAnimation+1),1)):Object(y["createCommentVNode"])("",!0),e.isActive&&e.elementInfo.link?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:2,elementInfo:e.elementInfo,link:e.elementInfo.link,openLinkDialog:e.openLinkDialog,onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(){}),["stop"]))},null,8,["elementInfo","link","openLinkDialog"])):Object(y["createCommentVNode"])("",!0)],6)}function Cd(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["image-element-operate",{cliping:e.isCliping}])},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)],2)}var kd={class:"rotate-handler"};function Ed(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",kd)}var wd={name:"rotate-handler"};n("8754");const Nd=Gn()(wd,[["render",Ed],["__scopeId","data-v-9a549510"]]);var Id=Nd,Vd=Object(y["defineComponent"])({name:"image-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=t.clipingImageElementId,l=Object(y["computed"])((function(){return o.value===e.elementInfo.id})),c=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),a=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),r=ud(c,a),i=r.resizeHandlers,u=r.borderLines;return{isCliping:l,scaleWidth:c,resizeHandlers:i,borderLines:u}}});n("5efd");const Sd=Gn()(Vd,[["render",Cd],["__scopeId","data-v-db6d5ba6"]]);var Bd=Sd,Ld={class:"text-element-operate"};function Td(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ld,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.textElementResizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)])}var Md=Object(y["defineComponent"])({name:"text-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),l=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),c=ud(o,l),a=c.textElementResizeHandlers,r=c.borderLines;return{scaleWidth:o,textElementResizeHandlers:a,borderLines:r}}});const _d=Gn()(Md,[["render",Td]]);var Dd=_d,zd={class:"shape-element-operate"};function Ad(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",zd,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)])}var Fd=Object(y["defineComponent"])({name:"shape-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),l=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),c=ud(o,l),a=c.resizeHandlers,r=c.borderLines;return{scaleWidth:o,resizeHandlers:a,borderLines:r}}});const Rd=Gn()(Fd,[["render",Ad]]);var Pd=Rd,Hd={class:"line-element-operate"},qd=["width","height","stroke"],Wd={key:0},Gd=["x1","y1","x2","y2"],Ud=["x1","y1","x2","y2"],Xd=["x1","y1","x2","y2"],Zd=["x1","y1","x2","y2"];function Yd(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ResizeHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Hd,[e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-resize-handler",key:t.handler,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.dragLineElement(n,e.elementInfo,t.handler)}),["stop"])},null,8,["style","onMousedown"])})),128)),(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{width:e.svgWidth,height:e.svgHeight,stroke:e.elementInfo.color,overflow:"visible",style:Object(y["normalizeStyle"])({transform:"scale(".concat(e.canvasScale,")")})},[e.elementInfo.curve?(Object(y["openBlock"])(),Object(y["createElementBlock"])("g",Wd,[Object(y["createElementVNode"])("line",{class:"anchor-line",x1:e.elementInfo.start[0],y1:e.elementInfo.start[1],x2:e.elementInfo.curve[0],y2:e.elementInfo.curve[1]},null,8,Gd),Object(y["createElementVNode"])("line",{class:"anchor-line",x1:e.elementInfo.end[0],y1:e.elementInfo.end[1],x2:e.elementInfo.curve[0],y2:e.elementInfo.curve[1]},null,8,Ud)])):Object(y["createCommentVNode"])("",!0),e.elementInfo.cubic?(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],{key:1},Object(y["renderList"])(e.elementInfo.cubic,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("g",{key:n},[0===n?(Object(y["openBlock"])(),Object(y["createElementBlock"])("line",{key:0,class:"anchor-line",x1:e.elementInfo.start[0],y1:e.elementInfo.start[1],x2:t[0],y2:t[1]},null,8,Xd)):Object(y["createCommentVNode"])("",!0),1===n?(Object(y["openBlock"])(),Object(y["createElementBlock"])("line",{key:1,class:"anchor-line",x1:e.elementInfo.end[0],y1:e.elementInfo.end[1],x2:t[0],y2:t[1]},null,8,Zd)):Object(y["createCommentVNode"])("",!0)])})),128)):Object(y["createCommentVNode"])("",!0)],12,qd))],64)):Object(y["createCommentVNode"])("",!0)])}var Jd=Object(y["defineComponent"])({name:"line-element-operate",inheritAttrs:!1,components:{ResizeHandler:bd},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},dragLineElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return Math.max(e.elementInfo.start[0],e.elementInfo.end[0])})),l=Object(y["computed"])((function(){return Math.max(e.elementInfo.start[1],e.elementInfo.end[1])})),c=Object(y["computed"])((function(){var t=[{handler:I.START,style:{left:e.elementInfo.start[0]*n.value+"px",top:e.elementInfo.start[1]*n.value+"px"}},{handler:I.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:I.C,style:{left:o[0]*n.value+"px",top:o[1]*n.value+"px"}})}else if(e.elementInfo.cubic){var l=Object(He["a"])(e.elementInfo.cubic,2),c=l[0],a=l[1];t.push({handler:I.C1,style:{left:c[0]*n.value+"px",top:c[1]*n.value+"px"}}),t.push({handler:I.C2,style:{left:a[0]*n.value+"px",top:a[1]*n.value+"px"}})}return t}));return{svgWidth:o,svgHeight:l,canvasScale:n,resizeHandlers:c}}});n("3c1d");const Qd=Gn()(Jd,[["render",Yd],["__scopeId","data-v-c0a272d2"]]);var Kd=Qd,$d={class:"table-element-operate"};function es(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$d,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.textElementResizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),Object(y["createVNode"])(i,{class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"])],64)):Object(y["createCommentVNode"])("",!0)])}var ts=Object(y["defineComponent"])({name:"table-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.outline.width||1})),l=Object(y["computed"])((function(){return(e.elementInfo.width+o.value)*n.value})),c=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),a=ud(l,c),r=a.textElementResizeHandlers,i=a.borderLines;return{scaleWidth:l,textElementResizeHandlers:r,borderLines:i}}});const ns=Gn()(ts,[["render",es]]);var os=ns,ls={class:"common-element-operate"};function cs(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BorderLine"),r=Object(y["resolveComponent"])("ResizeHandler"),i=Object(y["resolveComponent"])("RotateHandler");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ls,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.borderLines,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"operate-border-line",key:e.type,type:e.type,style:Object(y["normalizeStyle"])(e.style)},null,8,["type","style"])})),128)),e.handlerVisible?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.resizeHandlers,(function(t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{class:"operate-resize-handler",key:t.direction,type:t.direction,rotate:e.elementInfo.rotate,style:Object(y["normalizeStyle"])(t.style),onMousedown:Object(y["withModifiers"])((function(n){return e.scaleElement(n,e.elementInfo,t.direction)}),["stop"])},null,8,["type","rotate","style","onMousedown"])})),128)),e.cannotRotate?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0,class:"operate-rotate-handler",style:Object(y["normalizeStyle"])({left:e.scaleWidth/2+"px"}),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.rotateElement(e.elementInfo)}),["stop"]))},null,8,["style"]))],64)):Object(y["createCommentVNode"])("",!0)])}var as=Object(y["defineComponent"])({name:"common-element-operate",inheritAttrs:!1,components:{RotateHandler:Id,ResizeHandler:bd,BorderLine:Od},props:{elementInfo:{type:Object,required:!0},handlerVisible:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=Object(y["computed"])((function(){return e.elementInfo.width*n.value})),l=Object(y["computed"])((function(){return e.elementInfo.height*n.value})),c=ud(o,l),a=c.resizeHandlers,r=c.borderLines,i=Object(y["computed"])((function(){return["video","audio"].includes(e.elementInfo.type)}));return{scaleWidth:o,resizeHandlers:a,borderLines:r,cannotRotate:i}}});const rs=Gn()(as,[["render",cs]]);var is=rs,us=["href"],ds={key:1,class:"link"},ss={class:"btns"};function fs(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Divider");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"link-handler",style:Object(y["normalizeStyle"])({top:e.height*e.canvasScale+10+"px"})},["web"===e.link.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("a",{key:0,class:"link",href:e.link.target,target:"_blank"},Object(y["toDisplayString"])(e.link.target),9,us)):(Object(y["openBlock"])(),Object(y["createElementBlock"])("a",ds,"幻灯片页面 "+Object(y["toDisplayString"])(e.link.target),1)),Object(y["createElementVNode"])("div",ss,[Object(y["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.openLinkDialog()})},"更换"),Object(y["createVNode"])(a,{type:"vertical"}),Object(y["createElementVNode"])("div",{class:"btn",onClick:t[1]||(t[1]=function(t){return e.removeLink(e.elementInfo)})},"移除")])],4)}var bs=function(){var e=ce(),t=$e(),n=t.addHistorySnapshot,o=function(t,o){var l=/^(https?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$/;if("web"===o.type&&!l.test(o.target))return Se["a"].error("不是正确的网页链接地址"),!1;var c={link:o};return e.updateElement({id:t.id,props:c}),n(),!0},l=function(t){e.removeElementProps({id:t.id,propName:"link"}),n()};return{setLink:o,removeLink:l}},ps=Object(y["defineComponent"])({name:"link-handler",props:{elementInfo:{type:Object,required:!0},link:{type:Object,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=bs(),l=o.removeLink,c=Object(y["computed"])((function(){return"line"===e.elementInfo.type?0:e.elementInfo.height}));return{canvasScale:n,height:c,removeLink:l}}});n("c15d");const ms=Gn()(ps,[["render",fs],["__scopeId","data-v-2b77dbb0"]]);var vs=ms,Os=Object(y["defineComponent"])({name:"operate",components:{LinkHandler:vs},props:{elementInfo:{type:Object,required:!0},isSelected:{type:Boolean,required:!0},isActive:{type:Boolean,required:!0},isActiveGroupElement:{type:Boolean,required:!0},isMultiSelect:{type:Boolean,required:!0},rotateElement:{type:Function,required:!0},scaleElement:{type:Function,required:!0},dragLineElement:{type:Function,required:!0},openLinkDialog:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ae()),n=t.canvasScale,o=t.toolbarState,l=Object(g["c"])(ce()),c=l.currentSlide,a=Object(y["computed"])((function(){var t,n=(t={},Object(fe["a"])(t,Ne.IMAGE,Bd),Object(fe["a"])(t,Ne.TEXT,Dd),Object(fe["a"])(t,Ne.SHAPE,Pd),Object(fe["a"])(t,Ne.LINE,Kd),Object(fe["a"])(t,Ne.TABLE,os),Object(fe["a"])(t,Ne.CHART,is),Object(fe["a"])(t,Ne.LATEX,is),Object(fe["a"])(t,Ne.VIDEO,is),Object(fe["a"])(t,Ne.AUDIO,is),t);return n[e.elementInfo.type]||null})),r=Object(y["computed"])((function(){var t=c.value.animations||[];return t.findIndex((function(t){return t.elId===e.elementInfo.id}))})),i=Object(y["computed"])((function(){return"rotate"in e.elementInfo?e.elementInfo.rotate:0})),u=Object(y["computed"])((function(){return"height"in e.elementInfo?e.elementInfo.height:0}));return{currentOperateComponent:a,canvasScale:n,toolbarState:o,elementIndexInAnimation:r,rotate:i,height:u}}});n("1118");const hs=Gn()(Os,[["render",xd],["__scopeId","data-v-6abdbdd6"]]);var js=hs,ys=function(e){return Object(y["pushScopeId"])("data-v-3adaaa8e"),e=e(),Object(y["popScopeId"])(),e},gs={class:"link-dialog"},xs={class:"tabs"},Cs=["onClick"],ks={key:2,class:"preview"},Es=ys((function(){return Object(y["createElementVNode"])("div",null,"预览:",-1)})),ws={class:"btns"},Ns=Object(y["createTextVNode"])("取消"),Is=Object(y["createTextVNode"])("确认");function Vs(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Input"),r=Object(y["resolveComponent"])("SelectOption"),i=Object(y["resolveComponent"])("Select"),u=Object(y["resolveComponent"])("ThumbnailSlide"),d=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",gs,[Object(y["createElementVNode"])("div",xs,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tabs,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["tab",{active:e.type===t.key}]),key:t.key,onClick:function(n){return e.type=t.key}},Object(y["toDisplayString"])(t.label),11,Cs)})),128))]),"web"===e.type?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,class:"input",value:e.address,"onUpdate:value":t[0]||(t[0]=function(t){return e.address=t}),placeholder:"请输入网页链接地址"},null,8,["value"])):Object(y["createCommentVNode"])("",!0),"slide"===e.type?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:1,class:"input",value:e.slideId,"onUpdate:value":t[1]||(t[1]=function(t){return e.slideId=t})},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(e,t){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e.id,value:e.id},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])("幻灯片 "+Object(y["toDisplayString"])(t+1),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])):Object(y["createCommentVNode"])("",!0),"slide"===e.type&&e.selectedSlide?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ks,[Es,Object(y["createVNode"])(u,{class:"thumbnail",slide:e.selectedSlide,size:490},null,8,["slide"])])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",ws,[Object(y["createVNode"])(d,{onClick:t[2]||(t[2]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(y["withCtx"])((function(){return[Ns]})),_:1}),Object(y["createVNode"])(d,{type:"primary",onClick:t[3]||(t[3]=function(t){return e.save()})},{default:Object(y["withCtx"])((function(){return[Is]})),_:1})])])}var Ss=Object(y["defineComponent"])({name:"link-dialog",emits:["close"],components:{ThumbnailSlide:Rc},setup:function(e,t){var n=t.emit,o=Object(g["c"])(ae()),l=o.handleElement,c=Object(g["c"])(ce()),a=c.slides,r=Object(y["ref"])("web"),i=Object(y["ref"])(""),u=Object(y["ref"])(""),d=Object(y["computed"])((function(){return u.value&&a.value.find((function(e){return e.id===u.value}))||null})),s=[{key:"web",label:"网页链接"},{key:"slide",label:"幻灯片页面"}],f=bs(),b=f.setLink;Object(y["onMounted"])((function(){var e;null!==(e=l.value)&&void 0!==e&&e.link&&("web"===l.value.link.type?i.value=l.value.link.target:"slide"===l.value.link.type&&(u.value=l.value.link.target),r.value=l.value.link.type)}));var p=function(){return n("close")},m=function(){var e={type:r.value,target:"web"===r.value?i.value:u.value};if(l.value){var t=b(l.value,e);t?p():i.value=""}};return{slides:a,tabs:s,type:r,address:i,slideId:u,selectedSlide:d,close:p,save:m}}});n("fe34");const Bs=Gn()(Ss,[["render",Vs],["__scopeId","data-v-3adaaa8e"]]);var Ls=Bs,Ts=Object(y["defineComponent"])({name:"editor-canvas",components:{EditableElement:zu,MouseSelection:Pu,ViewportBackground:Qu,AlignmentLine:td,ElementCreateSelection:rd,MultiSelectOperate:yd,Operate:js,LinkDialog:Ls},setup:function(){var e=ae(),t=Object(g["c"])(e),n=t.activeElementIdList,o=t.activeGroupElementId,l=t.handleElementId,c=t.editorAreaFocus,a=t.showGridLines,r=t.creatingElement,i=t.canvasScale,u=Object(g["c"])(ce()),d=u.currentSlide,s=Object(g["c"])(Oe()),f=s.ctrlKeyState,b=s.ctrlOrShiftKeyActive,p=Object(y["ref"])(),m=Object(y["ref"])([]),v=Object(y["ref"])(!1),O=function(){return v.value=!0};Object(y["watch"])(l,(function(){e.setActiveGroupElementId("")}));var h=Object(y["ref"])([]),j=function(){h.value=d.value?JSON.parse(JSON.stringify(d.value.elements)):[]};Object(y["watchEffect"])(j);var x=Object(y["ref"])(),C=Jc(x),k=C.viewportStyles;Kc(x);var E=Qc(h,p),w=E.mouseSelection,N=E.mouseSelectionVisible,I=E.mouseSelectionQuadrant,S=E.updateMouseSelection,B=ra(h,m),L=B.dragElement,T=ia(h),M=T.dragLineElement,_=aa(h,L),D=_.selectElement,z=ca(h,m),A=z.scaleElement,F=z.scaleMultiElement,R=ea(h,p),P=R.rotateElement,H=bt(),q=H.selectAllElement,W=dt(),G=W.deleteAllElements,U=ft(),X=U.pasteElement,Z=jt(),Y=Z.enterScreening,J=it(),Q=J.updateSlideIndex,K=function(t){e.setActiveElementIdList([]),b.value||S(t),c.value||e.setEditorareaFocus(!0),Yc()},$=function(){c.value&&e.setEditorareaFocus(!1)},ee=yt(),ne=ee.scaleCanvas,oe=Object(te["throttle"])(ne,100,{leading:!0,trailing:!1}),le=Object(te["throttle"])(Q,300,{leading:!0,trailing:!1}),re=function(e){e.preventDefault(),f.value?e.deltaY>0?oe("-"):e.deltaY<0&&oe("+"):e.deltaY>0?le(V.DOWN):e.deltaY<0&&le(V.UP)},ie=function(){e.setGridLinesState(!a.value)},ue=ua(p),de=ue.insertElementFromCreateSelection,se=function(){return[{text:"粘贴",subText:"Ctrl + V",handler:X},{text:"全选",subText:"Ctrl + A",handler:q},{text:"网格线",subText:a.value?"√":"",handler:ie},{text:"重置当前页",handler:G},{divider:!0},{text:"从当前页演示",subText:"Ctrl+F",handler:Y}]};return Object(y["provide"])(vo,i),{elementList:h,activeElementIdList:n,handleElementId:l,activeGroupElementId:o,canvasRef:x,viewportRef:p,viewportStyles:k,canvasScale:i,mouseSelection:w,mouseSelectionVisible:N,mouseSelectionQuadrant:I,creatingElement:r,alignmentLines:m,linkDialogVisible:v,openLinkDialog:O,handleClickBlankArea:K,removeEditorAreaFocus:$,insertElementFromCreateSelection:de,selectElement:D,rotateElement:P,scaleElement:A,dragLineElement:M,scaleMultiElement:F,handleMousewheelCanvas:re,contextmenus:se}}});n("c83b");const Ms=Gn()(Ts,[["render",Zc],["__scopeId","data-v-fe9bcf9c"]]);var _s=Ms,Ds={class:"canvas-tool"},zs={class:"left-handler"},As={class:"add-element-handler"},Fs={class:"right-handler"},Rs={class:"text"};function Ps(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconBack"),r=Object(y["resolveComponent"])("Tooltip"),i=Object(y["resolveComponent"])("IconNext"),u=Object(y["resolveComponent"])("IconFontSize"),d=Object(y["resolveComponent"])("IconPicture"),s=Object(y["resolveComponent"])("FileInput"),f=Object(y["resolveComponent"])("ShapePool"),b=Object(y["resolveComponent"])("IconGraphicDesign"),p=Object(y["resolveComponent"])("Popover"),m=Object(y["resolveComponent"])("LinePool"),v=Object(y["resolveComponent"])("IconConnection"),O=Object(y["resolveComponent"])("ChartPool"),h=Object(y["resolveComponent"])("IconChartProportion"),j=Object(y["resolveComponent"])("TableGenerator"),g=Object(y["resolveComponent"])("IconInsertTable"),x=Object(y["resolveComponent"])("IconFormula"),C=Object(y["resolveComponent"])("MediaInput"),k=Object(y["resolveComponent"])("IconVideoTwo"),E=Object(y["resolveComponent"])("IconMinus"),w=Object(y["resolveComponent"])("IconPlus"),N=Object(y["resolveComponent"])("IconFullScreen"),I=Object(y["resolveComponent"])("LaTeXEditor"),V=Object(y["resolveComponent"])("Modal");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ds,[Object(y["createElementVNode"])("div",zs,[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"撤销"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{class:Object(y["normalizeClass"])(["handler-item",{disable:!e.canUndo}]),onClick:t[0]||(t[0]=function(t){return e.undo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"重做"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{class:Object(y["normalizeClass"])(["handler-item",{disable:!e.canRedo}]),onClick:t[1]||(t[1]=function(t){return e.redo()})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"])]),Object(y["createElementVNode"])("div",As,[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入文字"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{class:"handler-item",onClick:t[2]||(t[2]=function(t){return e.drawText()})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(s,{onChange:t[3]||(t[3]=function(t){return e.insertImageElement(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图片"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(p,{trigger:"click",visible:e.shapePoolVisible,"onUpdate:visible":t[5]||(t[5]=function(t){return e.shapePoolVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{onSelect:t[4]||(t[4]=function(t){return e.drawShape(t)})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入形状"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.linePoolVisible,"onUpdate:visible":t[7]||(t[7]=function(t){return e.linePoolVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{onSelect:t[6]||(t[6]=function(t){return e.drawLine(t)})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入线条"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.chartPoolVisible,"onUpdate:visible":t[9]||(t[9]=function(t){return e.chartPoolVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{onSelect:t[8]||(t[8]=function(t){e.createChartElement(t),e.chartPoolVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入图表"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(h,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.tableGeneratorVisible,"onUpdate:visible":t[12]||(t[12]=function(t){return e.tableGeneratorVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j,{onClose:t[10]||(t[10]=function(t){return e.tableGeneratorVisible=!1}),onInsert:t[11]||(t[11]=function(t){var n=t.row,o=t.col;e.createTableElement(n,o),e.tableGeneratorVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入表格"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"]),Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入公式"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(x,{class:"handler-item",onClick:t[13]||(t[13]=function(t){return e.latexEditorVisible=!0})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{trigger:"click",visible:e.mediaInputVisible,"onUpdate:visible":t[17]||(t[17]=function(t){return e.mediaInputVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C,{onClose:t[14]||(t[14]=function(t){return e.mediaInputVisible=!1}),onInsertVideo:t[15]||(t[15]=function(t){e.createVideoElement(t),e.mediaInputVisible=!1}),onInsertAudio:t[16]||(t[16]=function(t){e.createAudioElement(t),e.mediaInputVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"插入音视频"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{class:"handler-item"})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["visible"])]),Object(y["createElementVNode"])("div",Fs,[Object(y["createVNode"])(E,{class:"handler-item viewport-size",onClick:t[18]||(t[18]=function(t){return e.scaleCanvas("-")})}),Object(y["createElementVNode"])("span",Rs,Object(y["toDisplayString"])(e.canvasScalePercentage),1),Object(y["createVNode"])(w,{class:"handler-item viewport-size",onClick:t[19]||(t[19]=function(t){return e.scaleCanvas("+")})}),Object(y["createVNode"])(r,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"适配屏幕"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{class:"handler-item viewport-size-adaptation",onClick:t[20]||(t[20]=function(t){return e.setCanvasPercentage(90)})})]})),_:1},8,["mouseEnterDelay"])]),Object(y["createVNode"])(V,{visible:e.latexEditorVisible,"onUpdate:visible":t[23]||(t[23]=function(t){return e.latexEditorVisible=t}),footer:null,centered:"",width:880,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(I,{onClose:t[21]||(t[21]=function(t){return e.latexEditorVisible=!1}),onUpdate:t[22]||(t[22]=function(t){e.createLatexElement(t),e.latexEditorVisible=!1})})]})),_:1},8,["visible"])])}var Hs={class:"shape-pool"},qs={class:"category-name"},Ws={class:"shape-list"},Gs=["onClick"],Us={overflow:"visible",width:"18",height:"18"},Xs=["transform"],Zs=["d"];function Ys(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Hs,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.shapeList,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"category",key:t.type},[Object(y["createElementVNode"])("div",qs,Object(y["toDisplayString"])(t.type),1),Object(y["createElementVNode"])("div",Ws,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t.children,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"shape-item",key:n},[Object(y["createElementVNode"])("div",{class:"shape-content",onClick:function(n){return e.selectShape(t)}},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",Us,[Object(y["createElementVNode"])("g",{transform:"scale(".concat(18/t.viewBox[0],", ").concat(18/t.viewBox[1],") translate(0,0) matrix(1,0,0,1,0,0)")},[Object(y["createElementVNode"])("path",{class:"shape-path","vector-effect":"non-scaling-stroke","stroke-linecap":"butt","stroke-miterlimit":"8",fill:"transparent",stroke:"#999","stroke-width":"2",d:t.path},null,8,Zs)],8,Xs)]))],8,Gs)])})),128))])])})),128))])}var Js=Object(y["defineComponent"])({name:"shape-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=lt,l=function(e){n("select",e)};return{shapeList:o,selectShape:l}}});n("a568");const Qs=Gn()(Js,[["render",Ys],["__scopeId","data-v-7fdb328c"]]);var Ks=Qs,$s={class:"line-pool"},ef={class:"category-name"},tf={class:"line-list"},nf=["onClick"],of={overflow:"visible",width:"20",height:"20"},lf=["d","stroke-dasharray","marker-start","marker-end"];function cf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("LinePointMarker");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$s,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.lineList,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"category",key:t.type},[Object(y["createElementVNode"])("div",ef,Object(y["toDisplayString"])(t.type),1),Object(y["createElementVNode"])("div",tf,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(t.children,(function(t,o){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"line-item",key:o},[Object(y["createElementVNode"])("div",{class:"line-content",onClick:function(n){return e.selectLine(t)}},[(Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",of,[Object(y["createElementVNode"])("defs",null,[t.points[0]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,class:"line-marker",id:"preset-line-".concat(n,"-").concat(o),position:"start",type:t.points[0],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(y["createCommentVNode"])("",!0),t.points[1]?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1,class:"line-marker",id:"preset-line-".concat(n,"-").concat(o),position:"end",type:t.points[1],color:"currentColor",baseSize:2},null,8,["id","type"])):Object(y["createCommentVNode"])("",!0)]),Object(y["createElementVNode"])("path",{class:"line-path",d:t.path,stroke:"currentColor",fill:"none","stroke-width":"2","stroke-dasharray":"solid"===t.style?"0, 0":"4, 1","marker-start":t.points[0]?"url(#".concat("preset-line-".concat(n,"-").concat(o),"-",t.points[0],"-start)"):"","marker-end":t.points[1]?"url(#".concat("preset-line-".concat(n,"-").concat(o),"-",t.points[1],"-end)"):""},null,8,lf)]))],8,nf)])})),128))])])})),128))])}var af=[{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},{path:"M 0 0 C 20 0 0 20 20 20",style:"solid",points:["","arrow"],isCubic:!0}]}],rf=Object(y["defineComponent"])({name:"line-pool",emits:["select"],components:{LinePointMarker:Hl},setup:function(e,t){var n=t.emit,o=af,l=function(e){n("select",e)};return{lineList:o,selectLine:l}}});n("fc12");const uf=Gn()(rf,[["render",cf],["__scopeId","data-v-7fa1d412"]]);var df=uf,sf={class:"chart-pool"},ff=["onClick"];function bf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconChartLine"),r=Object(y["resolveComponent"])("IconChartHistogram"),i=Object(y["resolveComponent"])("IconChartPie"),u=Object(y["resolveComponent"])("IconChartHistogramOne"),d=Object(y["resolveComponent"])("IconChartLineArea"),s=Object(y["resolveComponent"])("IconChartRing"),f=Object(y["resolveComponent"])("IconChartScatter");return Object(y["openBlock"])(),Object(y["createElementBlock"])("ul",sf,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.chartList,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("li",{class:"chart-item",key:n},[Object(y["createElementVNode"])("div",{class:"chart-content",onClick:function(n){return e.selectChart(t)}},["line"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,size:"24"})):"bar"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,size:"24"})):"pie"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:2,size:"24"})):"horizontalBar"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:3,size:"24"})):"area"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:4,size:"24"})):"ring"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:5,size:"24"})):"scatter"===t?(Object(y["openBlock"])(),Object(y["createBlock"])(f,{key:6,size:"24"})):Object(y["createCommentVNode"])("",!0)],8,ff)])})),128))])}var pf=Object(y["defineComponent"])({name:"chart-pool",emits:["select"],setup:function(e,t){var n=t.emit,o=["bar","horizontalBar","line","area","scatter","pie","ring"],l=function(e){n("select",e)};return{chartList:o,selectChart:l}}});n("d4d8");const mf=Gn()(pf,[["render",bf],["__scopeId","data-v-64ca421e"]]);var vf=mf,Of=function(e){return Object(y["pushScopeId"])("data-v-e325ce98"),e=e(),Object(y["popScopeId"])(),e},hf={class:"table-generator"},jf={class:"title"},yf={class:"lef"},gf=["onMouseenter"],xf={key:1,class:"custom"},Cf={class:"row"},kf=Of((function(){return Object(y["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"行数:",-1)})),Ef={class:"row"},wf=Of((function(){return Object(y["createElementVNode"])("div",{class:"label",style:{flex:"1"}},"列数:",-1)})),Nf={class:"btns"},If=Object(y["createTextVNode"])("取消"),Vf=Object(y["createTextVNode"])("确认");function Sf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("InputNumber"),r=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",hf,[Object(y["createElementVNode"])("div",jf,[Object(y["createElementVNode"])("div",yf,"表格 "+Object(y["toDisplayString"])(e.endCell.length?"".concat(e.endCell[0]," x ").concat(e.endCell[1]):""),1),Object(y["createElementVNode"])("div",{class:"right",onClick:t[0]||(t[0]=function(t){return e.isCustom=!e.isCustom})},Object(y["toDisplayString"])(e.isCustom?"返回":"自定义"),1)]),e.isCustom?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",xf,[Object(y["createElementVNode"])("div",Cf,[kf,Object(y["createVNode"])(a,{min:1,max:20,value:e.customRow,"onUpdate:value":t[3]||(t[3]=function(t){return e.customRow=t}),style:{flex:"3"}},null,8,["value"])]),Object(y["createElementVNode"])("div",Ef,[wf,Object(y["createVNode"])(a,{min:1,max:20,value:e.customCol,"onUpdate:value":t[4]||(t[4]=function(t){return e.customCol=t}),style:{flex:"3"}},null,8,["value"])]),Object(y["createElementVNode"])("div",Nf,[Object(y["createVNode"])(r,{class:"btn",onClick:t[5]||(t[5]=function(t){return e.close()})},{default:Object(y["withCtx"])((function(){return[If]})),_:1}),Object(y["createVNode"])(r,{class:"btn",type:"primary",onClick:t[6]||(t[6]=function(t){return e.insertCustomTable()})},{default:Object(y["withCtx"])((function(){return[Vf]})),_:1})])])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("table",{key:0,onMouseleave:t[1]||(t[1]=function(t){return e.endCell=[]}),onClick:t[2]||(t[2]=function(t){return e.handleClickTable()})},[Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(10,(function(t){return Object(y["createElementVNode"])("tr",{key:t},[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(10,(function(n){return Object(y["createElementVNode"])("td",{onMouseenter:function(o){return e.endCell=[t,n]},key:n},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["cell",{active:e.endCell.length&&t<=e.endCell[0]&&n<=e.endCell[1]}])},null,2)],40,gf)})),64))])})),64))])],32))])}var Bf=Object(y["defineComponent"])({name:"table-generator",emits:["insert","close"],setup:function(e,t){var n=t.emit,o=Object(y["ref"])([]),l=Object(y["ref"])(3),c=Object(y["ref"])(3),a=Object(y["ref"])(!1),r=function(){if(o.value.length){var e=Object(He["a"])(o.value,2),t=e[0],l=e[1];n("insert",{row:t,col:l})}},i=function(){return l.value<1||l.value>20||c.value<1||c.value>20?Se["a"].warning("行数/列数必须在0~20之间!"):(n("insert",{row:l.value,col:c.value}),void(a.value=!1))},u=function(){n("close"),a.value=!1};return{endCell:o,customRow:l,customCol:c,handleClickTable:r,insertCustomTable:i,isCustom:a,close:u}}});n("5a68");const Lf=Gn()(Bf,[["render",Sf],["__scopeId","data-v-e325ce98"]]);var Tf=Lf,Mf={class:"media-input"},_f={class:"tabs"},Df=["onClick"],zf={class:"btns"},Af=Object(y["createTextVNode"])("取消"),Ff=Object(y["createTextVNode"])("确认"),Rf={class:"btns"},Pf=Object(y["createTextVNode"])("取消"),Hf=Object(y["createTextVNode"])("确认");function qf(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Input"),r=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Mf,[Object(y["createElementVNode"])("div",_f,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tabs,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["tab",{active:e.type===t.key}]),key:t.key,onClick:function(n){return e.type=t.key}},Object(y["toDisplayString"])(t.label),11,Df)})),128))]),"video"===e.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createVNode"])(a,{value:e.videoSrc,"onUpdate:value":t[0]||(t[0]=function(t){return e.videoSrc=t}),placeholder:"请输入视频地址,e.g. https://xxx.mp4"},null,8,["value"]),Object(y["createElementVNode"])("div",zf,[Object(y["createVNode"])(r,{onClick:t[1]||(t[1]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(y["withCtx"])((function(){return[Af]})),_:1}),Object(y["createVNode"])(r,{type:"primary",onClick:t[2]||(t[2]=function(t){return e.insertVideo()})},{default:Object(y["withCtx"])((function(){return[Ff]})),_:1})])],64)):Object(y["createCommentVNode"])("",!0),"audio"===e.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:1},[Object(y["createVNode"])(a,{value:e.audioSrc,"onUpdate:value":t[3]||(t[3]=function(t){return e.audioSrc=t}),placeholder:"请输入音频地址,e.g. https://xxx.mp3"},null,8,["value"]),Object(y["createElementVNode"])("div",Rf,[Object(y["createVNode"])(r,{onClick:t[4]||(t[4]=function(t){return e.close()}),style:{"margin-right":"10px"}},{default:Object(y["withCtx"])((function(){return[Pf]})),_:1}),Object(y["createVNode"])(r,{type:"primary",onClick:t[5]||(t[5]=function(t){return e.insertAudio()})},{default:Object(y["withCtx"])((function(){return[Hf]})),_:1})])],64)):Object(y["createCommentVNode"])("",!0)])}var Wf=Object(y["defineComponent"])({name:"media-input",emits:["insertVideo","insertAudio","close"],setup:function(e,t){var n=t.emit,o=Object(y["ref"])("video"),l=Object(y["ref"])("https://mazwai.com/videvo_files/video/free/2019-01/small_watermarked/181004_04_Dolphins-Whale_06_preview.webm"),c=Object(y["ref"])("https://freesound.org/data/previews/614/614107_11861866-lq.mp3"),a=[{key:"video",label:"视频"},{key:"audio",label:"音频"}],r=function(){if(!l.value)return Se["a"].error("请先输入正确的视频地址");n("insertVideo",l.value)},i=function(){if(!c.value)return Se["a"].error("请先输入正确的音频地址");n("insertAudio",c.value)},u=function(){return n("close")};return{type:o,videoSrc:l,audioSrc:c,tabs:a,insertVideo:r,insertAudio:i,close:u}}});n("81ab");const Gf=Gn()(Wf,[["render",qf],["__scopeId","data-v-ec37f828"]]);var Uf=Gf,Xf={class:"latex-editor"},Zf={class:"container"},Yf={class:"left"},Jf={class:"input-area"},Qf={class:"preview"},Kf={key:0,class:"placeholder"},$f={key:1,class:"preview-content"},eb={class:"right"},tb={class:"tabs"},nb=["onClick"],ob={class:"content"},lb={key:0,class:"symbol"},cb={class:"symbol-tabs"},ab=["onClick"],rb={class:"symbol-pool"},ib=["onClick"],ub={key:1,class:"formula"},db={class:"formula-title"},sb=["onClick"],fb={class:"footer"},bb=Object(y["createTextVNode"])("取消"),pb=Object(y["createTextVNode"])("确定");function mb(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("TextArea"),r=Object(y["resolveComponent"])("FormulaContent"),i=Object(y["resolveComponent"])("SymbolContent"),u=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Xf,[Object(y["createElementVNode"])("div",Zf,[Object(y["createElementVNode"])("div",Yf,[Object(y["createElementVNode"])("div",Jf,[Object(y["createVNode"])(a,{value:e.latex,"onUpdate:value":t[0]||(t[0]=function(t){return e.latex=t}),placeholder:"输入 LaTeX 公式",ref:"textAreaRef"},null,8,["value"])]),Object(y["createElementVNode"])("div",Qf,[e.latex?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$f,[Object(y["createVNode"])(r,{width:518,height:138,latex:e.latex},null,8,["latex"])])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Kf,"公式预览"))])]),Object(y["createElementVNode"])("div",eb,[Object(y["createElementVNode"])("div",tb,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.tabs,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["tab",{active:t.value===e.toolbarState}]),key:t.value,onClick:function(n){return e.toolbarState=t.value}},Object(y["toDisplayString"])(t.label),11,nb)})),128))]),Object(y["createElementVNode"])("div",ob,["symbol"===e.toolbarState?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",lb,[Object(y["createElementVNode"])("div",cb,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.symbolList,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["symbol-tab",{active:e.selectedSymbolKey===t.type}]),key:t.type,onClick:function(n){return e.selectedSymbolKey=t.type}},Object(y["toDisplayString"])(t.label),11,ab)})),128))]),Object(y["createElementVNode"])("div",rb,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.symbolPool,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"symbol-item",key:t.latex,onClick:function(n){return e.insertSymbol(t.latex)}},[Object(y["createVNode"])(i,{latex:t.latex},null,8,["latex"])],8,ib)})),128))])])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",ub,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.formulaList,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"formula-item",key:t.label},[Object(y["createElementVNode"])("div",db,Object(y["toDisplayString"])(t.label),1),Object(y["createElementVNode"])("div",{class:"formula-item-content",onClick:function(n){return e.latex=t.latex}},[Object(y["createVNode"])(r,{width:236,height:60,latex:t.latex},null,8,["latex"])],8,sb)])})),128))]))])])]),Object(y["createElementVNode"])("div",fb,[Object(y["createVNode"])(u,{class:"btn",onClick:t[1]||(t[1]=function(t){return e.close()})},{default:Object(y["withCtx"])((function(){return[bb]})),_:1}),Object(y["createVNode"])(u,{class:"btn",type:"primary",onClick:t[2]||(t[2]=function(t){return e.update()})},{default:Object(y["withCtx"])((function(){return[pb]})),_:1})])])}var vb=n("e5ca");vb["a"].SUB_SUP_SCALE=.5;var Ob=[{label:"高斯公式",latex:"\\int\\int\\int _ { \\Omega } \\left( \\frac { \\partial {P} } { \\partial {x} } + \\frac { \\partial {Q} } { \\partial {y} } + \\frac { \\partial {R} }{ \\partial {z} } \\right) \\mathrm { d } V = \\oint _ { \\partial \\Omega } ( P \\cos \\alpha + Q \\cos \\beta + R \\cos \\gamma ) \\mathrm{ d} S"},{label:"傅里叶级数",latex:"f(x) = \\frac {a_0} 2 + \\sum_{n = 1}^\\infty {({a_n}\\cos {nx} + {b_n}\\sin {nx})}"},{label:"泰勒展开式",latex:"e ^ { x } = 1 + \\frac { x } { 1 ! } + \\frac { x ^ { 2 } } { 2 ! } + \\frac { x ^ { 3 } } { 3 ! } + ... , \\quad - \\infty < x < \\infty"},{label:"定积分",latex:"\\lim_ { n \\rightarrow + \\infty } \\sum _ { i = 1 } ^ { n } f \\left[ a + \\frac { i } { n } ( b - a ) \\right] \\frac { b - a } { n } = \\int _ { a } ^ { b } f ( x ) dx"},{label:"三角恒等式1",latex:"\\sin \\alpha \\pm \\sin \\beta = 2 \\sin \\frac { 1 } { 2 } ( \\alpha \\pm \\beta ) \\cos \\frac { 1 } { 2 } ( \\alpha \\mp \\beta )"},{label:"三角恒等式2",latex:"\\cos \\alpha + \\cos \\beta = 2 \\cos \\frac { 1 } { 2 } ( \\alpha + \\beta ) \\cos \\frac { 1 } { 2 } ( \\alpha - \\beta )"},{label:"和的展开式",latex:"( 1 + x ) ^ { n } = 1 + \\frac { n x } { 1 ! } + \\frac { n ( n - 1 ) x ^ { 2 } } { 2 ! } + ..."},{label:"欧拉公式",latex:" e^{ix} = \\cos {x} + i\\sin {x}"},{label:"贝努利方程",latex:"\\frac {dy} {dx} + P(x)y = Q(x) y^n ({n} \\not= {0,1})"},{label:"全微分方程",latex:"du(x,y) = P(x,y)dx + Q(x,y)dy = 0"},{label:"非齐次方程",latex:"y = (\\int Q(x) e^{\\int {P(x)dx}}dx + C)e^{-\\int {P(x)dx}}"},{label:"柯西中值定理",latex:"\\frac{{f(b) - f(a)}}{{F(b) - F(a)}} = \\frac{{f'(\\xi )}}{{F'(\\xi )}}"},{label:"拉格朗日中值定理",latex:"f(b) - f(a) = f'(\\xi )(b - a)"},{label:"导数公式",latex:"(\\arcsin x)' = \\frac{1}{{\\sqrt {1 - x^2} }}"},{label:"三角函数积分",latex:"\\int {tgxdx = - \\ln \\left| {\\cos x} \\right| + C}"},{label:"二次曲面",latex:"\\frac{{{x^2}}}{{{a^2}}} + \\frac{{{y^2}}}{{{b^2}}} - \\frac{{{z^2}}}{{{c^2}}} = 1"},{label:"二阶微分",latex:"\\frac {{d^2}y} {dx^2} + P(x) \\frac {dy} {dx} + Q(x)y = f(x)"},{label:"方向导数",latex:"\\frac{{\\partial f}}{{\\partial l}} = \\frac{{\\partial f}}{{\\partial x}}\\cos \\phi + \\frac{{\\partial f}}{{\\partial y}}\\sin \\phi"}],hb=[{type:"operators",label:"数学",children:[{latex:"\\cdot"},{latex:"\\pm"},{latex:"\\mp"},{latex:"+"},{latex:"-"},{latex:"\\times"},{latex:"\\div"},{latex:"<"},{latex:">"},{latex:"="},{latex:"\\neq\\ne"},{latex:"\\leqq"},{latex:"\\geqq"},{latex:"\\leq"},{latex:"\\geq"},{latex:"\\propto"},{latex:"\\sim"},{latex:"\\equiv"},{latex:"\\dagger"},{latex:"\\ddagger"},{latex:"\\ell"},{latex:"\\#"},{latex:"\\$"},{latex:"\\&"},{latex:"\\%"},{latex:"\\langle\\rangle"},{latex:"()"},{latex:"[]"},{latex:"\\{\\}"},{latex:"||"},{latex:"\\|"},{latex:"\\exists"},{latex:"\\in"},{latex:"\\subset"},{latex:"\\supset"},{latex:"\\cup"},{latex:"\\cap"},{latex:"\\infty"},{latex:"\\partial"},{latex:"\\nabla"},{latex:"\\aleph"},{latex:"\\wp"},{latex:"\\therefore"},{latex:"\\mid"},{latex:"\\sum"},{latex:"\\prod"},{latex:"\\bigoplus"},{latex:"\\bigodot"},{latex:"\\int"},{latex:"\\oint"},{latex:"\\oplus"},{latex:"\\odot"},{latex:"\\perp"},{latex:"\\angle"},{latex:"\\triangle"},{latex:"\\Box"},{latex:"\\rightarrow"},{latex:"\\to"},{latex:"\\leftarrow"},{latex:"\\gets"},{latex:"\\circ"},{latex:"\\bigcirc"},{latex:"\\bullet"},{latex:"\\star"},{latex:"\\diamond"},{latex:"\\ast"},{latex:","},{latex:"."},{latex:";"},{latex:"!"}]},{type:"group",label:"组合",children:[{latex:"\\frac{a}{b}"},{latex:"\\frac{dx}{dx}"},{latex:"\\frac{\\partial a}{\\partial b}"},{latex:"\\sqrt{x}"},{latex:"\\sqrt[n]{x}"},{latex:"x^{n}"},{latex:"x_{n}"},{latex:"x_a^b"},{latex:"\\int_{a}^{b}"},{latex:"\\oint_a^b"},{latex:"\\lim_{a \\rightarrow b}"},{latex:"\\prod_a^b"},{latex:"\\sum_a^b"},{latex:"\\left(\\begin{array}a \\\\ b\\end{array}\\right)"},{latex:"\\begin{bmatrix}a & b \\\\ c & d \\end{bmatrix}"},{latex:"\\begin{cases}a & x = 0 \\\\ b & x > 0\\end{cases}"},{latex:"\\hat{a}"},{latex:"\\breve{a}"},{latex:"\\acute{a}"},{latex:"\\grave{a}"},{latex:"\\tilde{a}"},{latex:"\\bar{a}"},{latex:"\\vec{a}"},{latex:"\\underline{a}"},{latex:"\\overline{a}"},{latex:"\\widehat{ab}"},{latex:"\\overleftarrow{ab}"},{latex:"\\overrightarrow{ab}"}]},{type:"verbatim",label:"函数",children:[{latex:"\\log"},{latex:"\\ln"},{latex:"\\exp"},{latex:"\\mod"},{latex:"\\lim"},{latex:"\\sin"},{latex:"\\cos"},{latex:"\\tan"},{latex:"\\csc"},{latex:"\\sec"},{latex:"\\cot"},{latex:"\\sinh"},{latex:"\\cosh"},{latex:"\\tanh"},{latex:"\\csch"},{latex:"\\sech"},{latex:"\\coth"},{latex:"\\arcsin"},{latex:"\\arccos"},{latex:"\\arctan"},{latex:"\\arccsc"},{latex:"\\arcsec"},{latex:"\\arccot"}]},{type:"greek",label:"希腊字母",children:[{latex:"\\alpha"},{latex:"\\beta"},{latex:"\\gamma"},{latex:"\\delta"},{latex:"\\varepsilon"},{latex:"\\zeta"},{latex:"\\eta"},{latex:"\\vartheta"},{latex:"\\iota"},{latex:"\\kappa"},{latex:"\\lambda"},{latex:"\\mu"},{latex:"\\nu"},{latex:"\\xi"},{latex:"\\omicron"},{latex:"\\pi"},{latex:"\\rho"},{latex:"\\sigma"},{latex:"\\tau"},{latex:"\\upsilon"},{latex:"\\varphi"},{latex:"\\chi"},{latex:"\\psi"},{latex:"\\omega"},{latex:"\\epsilon"},{latex:"\\theta"},{latex:"\\phi"},{latex:"\\varsigma"},{latex:"\\Alpha"},{latex:"\\Beta"},{latex:"\\Gamma"},{latex:"\\Delta"},{latex:"\\Epsilon"},{latex:"\\Zeta"},{latex:"\\Eta"},{latex:"\\Theta"},{latex:"\\Iota"},{latex:"\\Kappa"},{latex:"\\Lambda"},{latex:"\\Mu"},{latex:"\\Nu"},{latex:"\\Xi"},{latex:"\\Omicron"},{latex:"\\Pi"},{latex:"\\Rho"},{latex:"\\Sigma"},{latex:"\\Tau"},{latex:"\\Upsilon"},{latex:"\\Phi"},{latex:"\\Chi"},{latex:"\\Psi"},{latex:"\\Omega"}]}],jb=["width","height"],yb=["transform"],gb=["d"];function xb(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("svg",{class:"formula-content",overflow:"visible",width:e.box.w+32,height:e.box.h+32,stroke:"#000","stroke-width":"1",fill:"none","stroke-linecap":"round","stroke-linejoin":"round"},[Object(y["createElementVNode"])("g",{transform:"scale(".concat(e.scale,", ").concat(e.scale,") translate(0,0) matrix(1,0,0,1,0,0)"),"transform-origin":"0 50%"},[Object(y["createElementVNode"])("path",{d:e.pathd},null,8,gb)],8,yb)],8,jb)}var Cb=Object(y["defineComponent"])({name:"formula-content",props:{latex:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0}},setup:function(e){var t=Object(y["ref"])({x:0,y:0,w:0,h:0}),n=Object(y["ref"])("");Object(y["watch"])((function(){return e.latex}),(function(){var o=new vb["b"](e.latex);n.value=o.pathd({}),t.value=o.box({})}),{immediate:!0});var o=Object(y["computed"])((function(){var n=t.value.w+32,o=t.value.h+32;return n>e.width||o>e.height?n/o>e.width/e.height?e.width/n:e.height/o:1}));return{box:t,pathd:n,scale:o}}});n("edc2");const kb=Gn()(Cb,[["render",xb],["__scopeId","data-v-cf0ca630"]]);var Eb=kb,wb=["innerHTML"];function Nb(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"symbol-content",innerHTML:e.svg},null,8,wb)}var Ib=Object(y["defineComponent"])({name:"symbol-content",props:{latex:{type:String,required:!0}},setup:function(e){var t=Object(y["computed"])((function(){var t=new vb["b"](e.latex);return t.svg({SCALE_X:10,SCALE_Y:10})}));return{svg:t}}});const Vb=Gn()(Ib,[["render",Nb]]);var Sb=Vb,Bb=[{label:"常用符号",value:"symbol"},{label:"预置公式",value:"formula"}],Lb=Object(y["defineComponent"])({name:"latex-editor",emits:["update","close"],components:{FormulaContent:Eb,SymbolContent:Sb},props:{value:{type:String,default:""}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(""),l=Object(y["ref"])("symbol"),c=Object(y["ref"])(),a=Object(y["ref"])(hb[0].type),r=Object(y["computed"])((function(){var e=hb.find((function(e){return e.type===a.value}));return(null===e||void 0===e?void 0:e.children)||[]}));Object(y["onMounted"])((function(){e.value&&(o.value=e.value)}));var i=function(){if(o.value){var e=new vb["b"](o.value),t=e.pathd({}),l=e.box({});n("update",{latex:o.value,path:t,w:l.w+32,h:l.h+32})}},u=function(){return n("close")},d=function(e){c.value&&(c.value.focus(),document.execCommand("insertText",!1,e))};return{tabs:Bb,latex:o,toolbarState:l,selectedSymbolKey:a,formulaList:Ob,symbolList:hb,symbolPool:r,textAreaRef:c,update:i,close:u,insertSymbol:d}}});n("b824");const Tb=Gn()(Lb,[["render",mb],["__scopeId","data-v-129e1afa"]]);var Mb=Tb,_b=Object(y["defineComponent"])({name:"canvas-tool",components:{ShapePool:Ks,LinePool:df,ChartPool:vf,TableGenerator:Tf,MediaInput:Uf,LaTeXEditor:Mb},setup:function(){var e=ae(),t=Object(g["c"])(e),n=t.canvasScale,o=Object(g["c"])(ve()),l=o.canUndo,c=o.canRedo,a=Object(y["computed"])((function(){return parseInt(100*n.value+"")+"%"})),r=yt(),i=r.scaleCanvas,u=r.setCanvasPercentage,d=$e(),s=d.redo,f=d.undo,b=at(),p=b.createImageElement,m=b.createChartElement,v=b.createTableElement,O=b.createLatexElement,h=b.createVideoElement,j=b.createAudioElement,x=function(e){var t=e[0];t&&tt(t).then((function(e){return p(e)}))},C=Object(y["ref"])(!1),k=Object(y["ref"])(!1),E=Object(y["ref"])(!1),w=Object(y["ref"])(!1),N=Object(y["ref"])(!1),I=Object(y["ref"])(!1),V=function(){e.setCreatingElement({type:"text"})},S=function(t){e.setCreatingElement({type:"shape",data:t}),C.value=!1},B=function(t){e.setCreatingElement({type:"line",data:t}),k.value=!1};return{scaleCanvas:i,setCanvasPercentage:u,canvasScalePercentage:a,canUndo:l,canRedo:c,redo:s,undo:f,insertImageElement:x,shapePoolVisible:C,linePoolVisible:k,chartPoolVisible:E,tableGeneratorVisible:w,mediaInputVisible:N,latexEditorVisible:I,drawText:V,drawShape:S,drawLine:B,createChartElement:m,createTableElement:v,createLatexElement:O,createVideoElement:h,createAudioElement:j}}});n("044f");const Db=Gn()(_b,[["render",Ps],["__scopeId","data-v-4ae7c9aa"]]);var zb=Db,Ab={class:"add-slide"},Fb=Object(y["createTextVNode"])("添加幻灯片"),Rb={class:"select-btn"},Pb=["onMousedown"];function Hb(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPlus"),r=Object(y["resolveComponent"])("LayoutPool"),i=Object(y["resolveComponent"])("IconDown"),u=Object(y["resolveComponent"])("Popover"),d=Object(y["resolveComponent"])("ThumbnailSlide"),s=Object(y["resolveComponent"])("Draggable"),f=Object(y["resolveDirective"])("contextmenu"),b=Object(y["resolveDirective"])("click-outside");return Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"thumbnails",onMousedown:t[3]||(t[3]=function(){return e.setThumbnailsFocus(!0)})},[Object(y["createElementVNode"])("div",Ab,[Object(y["createElementVNode"])("div",{class:"btn",onClick:t[0]||(t[0]=function(t){return e.createSlide()})},[Object(y["createVNode"])(a,{class:"icon"}),Fb]),Object(y["createVNode"])(u,{trigger:"click",placement:"bottomLeft",visible:e.presetLayoutPopoverVisible,"onUpdate:visible":t[2]||(t[2]=function(t){return e.presetLayoutPopoverVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{onSelect:t[1]||(t[1]=function(t){e.createSlideByTemplate(t),e.presetLayoutPopoverVisible=!1})})]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Rb,[Object(y["createVNode"])(i)])]})),_:1},8,["visible"])]),Object(y["createVNode"])(s,{class:"thumbnail-list",modelValue:e.slides,animation:300,scroll:!0,scrollSensitivity:50,setData:null,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(y["withCtx"])((function(t){var n=t.element,o=t.index;return[Object(y["withDirectives"])((Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["thumbnail-item",{active:e.slideIndex===o,selected:e.selectedSlidesIndex.includes(o)}]),onMousedown:function(t){return e.handleClickSlideThumbnail(t,o)}},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["label",{"offset-left":o>=99}])},Object(y["toDisplayString"])(e.fillDigit(o+1,2)),3),Object(y["createVNode"])(d,{class:"thumbnail",slide:n,size:120,visible:oo.value?n.value=setTimeout((function(){o.value=o.value+20,e()}),600):o.value=9999};return Object(y["onMounted"])(l),Object(y["onUnmounted"])((function(){n.value&&clearTimeout(n.value)})),{slidesLoadLimit:o}},Wb=n("b76a"),Gb=n.n(Wb),Ub={class:"layout-pool"},Xb=["onClick"];function Zb(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ThumbnailSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ub,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.layouts,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"layout-item",key:t.id,onClick:function(n){return e.selectSlideTemplate(t)}},[Object(y["createVNode"])(a,{class:"thumbnail",slide:t,size:180},null,8,["slide"])],8,Xb)})),128))])}var Yb=Object(y["defineComponent"])({name:"layout-pool",emits:["select"],components:{ThumbnailSlide:Rc},setup:function(e,t){var n=t.emit,o=Object(g["c"])(ce()),l=o.layouts,c=function(e){n("select",e)};return{layouts:l,selectSlideTemplate:c}}});n("e7b8");const Jb=Gn()(Yb,[["render",Zb],["__scopeId","data-v-741b366e"]]);var Qb=Jb,Kb=Object(y["defineComponent"])({name:"thumbnails",components:{Draggable:Gb.a,ThumbnailSlide:Rc,LayoutPool:Qb},setup:function(){var e=ae(),t=ce(),n=Oe(),o=Object(g["c"])(e),l=o.selectedSlidesIndex,c=o.thumbnailsFocus,a=Object(g["c"])(t),r=a.slides,i=a.slideIndex,u=Object(g["c"])(n),d=u.ctrlKeyState,s=u.shiftKeyState,f=qb(),b=f.slidesLoadLimit,p=Object(y["computed"])((function(){return[].concat(Object(K["a"])(l.value),[i.value])})),m=Object(y["ref"])(!1),v=it(),O=v.copySlide,h=v.pasteSlide,j=v.createSlide,x=v.createSlideByTemplate,C=v.copyAndPasteSlide,k=v.deleteSlide,E=v.cutSlide,w=v.selectAllSlide,N=function(n){e.setActiveElementIdList([]),i.value!==n&&t.updateSlideIndex(n)},I=function(t,n){var o=p.value.length>1;if(!o||!p.value.includes(n)||0===t.button)if(d.value)if(i.value===n){if(!o)return;var l=p.value.filter((function(e){return e!==n}));e.updateSelectedSlidesIndex(l),N(p.value[0])}else if(p.value.includes(n)){var c=p.value.filter((function(e){return e!==n}));e.updateSelectedSlidesIndex(c)}else{var a=[].concat(Object(K["a"])(p.value),[n]);e.updateSelectedSlidesIndex(a),N(n)}else if(s.value){if(i.value===n&&!o)return;var r=Math.min.apply(Math,Object(K["a"])(p.value)),u=n;n1&&void 0!==arguments[1]?arguments[1]:0,c=o.value,a=s(),r=a.originClipRange,i=a.originWidth,f=a.originHeight,b=a.originLeft,p=a.originTop;if(n){var m,v=f/i,O=0,h=100;if(v>n){var j=(1-n/v)/2*100;m=[[O,j],[h,h-j]]}else{var y=(1-v/n)/2*100;m=[[y,O],[h-y,h]]}t.updateElement({id:l.value,props:{clip:Object(L["a"])(Object(L["a"])({},c.clip),{},{shape:e,range:m}),left:b+i*(m[0][0]/100),top:p+f*(m[0][1]/100),width:i*(m[1][0]-m[0][0])/100,height:f*(m[1][1]-m[0][1])/100}})}else t.updateElement({id:l.value,props:{clip:Object(L["a"])(Object(L["a"])({},c.clip),{},{shape:e,range:r})}});d(),u()},b=function(e){var n=e[0];n&&(tt(n).then((function(e){var n={src:e};t.updateElement({id:l.value,props:n})})),u())},p=function(){var e=o.value;if(e.clip){var n=s(),c=n.originWidth,a=n.originHeight,r=n.originLeft,i=n.originTop;t.updateElement({id:l.value,props:{left:r,top:i,width:c,height:a}})}t.removeElementProps({id:l.value,propName:["clip","outline","flip","shadow","filters"]}),u()},m=function(){var e=o.value,n=Object(L["a"])(Object(L["a"])({},a.value.background),{},{type:"image",image:e.src,imageSize:"cover"});t.updateSlide({background:n}),u()};return{clipPanelVisible:r,shapeClipPathOptions:Jm,ratioClipOptions:Qm,handleElement:o,clipImage:d,presetImageClip:f,replaceImage:b,resetImage:p,setBackgroundImage:m}}});n("56bc");const $m=Gn()(Km,[["render",Sm],["__scopeId","data-v-64e5a614"]]);var ev=$m,tv=function(e){return Object(y["pushScopeId"])("data-v-0e201fca"),e=e(),Object(y["popScopeId"])(),e},nv={class:"shape-style-panel"},ov={class:"row"},lv=Object(y["createTextVNode"])("纯色填充"),cv=Object(y["createTextVNode"])("渐变填充"),av=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)})),rv=Object(y["createTextVNode"])("线性渐变"),iv=Object(y["createTextVNode"])("径向渐变"),uv={class:"row"},dv=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1)})),sv={class:"row"},fv=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1)})),bv={key:0,class:"row"},pv=tv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1)}));function mv(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("SelectOption"),r=Object(y["resolveComponent"])("Select"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("Slider"),f=Object(y["resolveComponent"])("ElementFlip"),b=Object(y["resolveComponent"])("Divider"),p=Object(y["resolveComponent"])("IconFontSize"),m=Object(y["resolveComponent"])("SelectOptGroup"),v=Object(y["resolveComponent"])("IconAddText"),O=Object(y["resolveComponent"])("InputGroup"),h=Object(y["resolveComponent"])("IconText"),j=Object(y["resolveComponent"])("Button"),g=Object(y["resolveComponent"])("Tooltip"),x=Object(y["resolveComponent"])("ButtonGroup"),C=Object(y["resolveComponent"])("IconTextBold"),k=Object(y["resolveComponent"])("CheckboxButton"),E=Object(y["resolveComponent"])("IconTextItalic"),w=Object(y["resolveComponent"])("IconTextUnderline"),N=Object(y["resolveComponent"])("IconFormat"),I=Object(y["resolveComponent"])("CheckboxButtonGroup"),V=Object(y["resolveComponent"])("IconAlignTextLeft"),S=Object(y["resolveComponent"])("RadioButton"),B=Object(y["resolveComponent"])("IconAlignTextCenter"),L=Object(y["resolveComponent"])("IconAlignTextRight"),T=Object(y["resolveComponent"])("RadioGroup"),M=Object(y["resolveComponent"])("IconAlignTextTopOne"),_=Object(y["resolveComponent"])("IconAlignTextMiddleOne"),D=Object(y["resolveComponent"])("IconAlignTextBottomOne"),z=Object(y["resolveComponent"])("ElementOutline"),A=Object(y["resolveComponent"])("ElementShadow"),F=Object(y["resolveComponent"])("ElementOpacity");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",nv,[Object(y["createElementVNode"])("div",ov,[Object(y["createVNode"])(r,{style:{flex:"10"},value:e.fillType,onChange:t[0]||(t[0]=function(t){return e.updateFillType(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"fill"},{default:Object(y["withCtx"])((function(){return[lv]})),_:1}),Object(y["createVNode"])(a,{value:"gradient"},{default:Object(y["withCtx"])((function(){return[cv]})),_:1})]})),_:1},8,["value"]),av,"fill"===e.fillType?(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:0,trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.fill,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.fill,style:{flex:"10"}},null,8,["color"])]})),_:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,style:{flex:"10"},value:e.gradient.type,onChange:t[2]||(t[2]=function(t){return e.updateGradient({type:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"linear"},{default:Object(y["withCtx"])((function(){return[rv]})),_:1}),Object(y["createVNode"])(a,{value:"radial"},{default:Object(y["withCtx"])((function(){return[iv]})),_:1})]})),_:1},8,["value"]))]),"gradient"===e.fillType?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",uv,[dv,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.gradient.color[0],"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateGradient({color:[t,e.gradient.color[1]]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.gradient.color[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",sv,[fv,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.gradient.color[1],"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.updateGradient({color:[e.gradient.color[0],t]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.gradient.color[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.gradient.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",bv,[pv,Object(y["createVNode"])(s,{class:"slider",min:0,max:360,step:15,value:e.gradient.rotate,onChange:t[5]||(t[5]=function(t){return e.updateGradient({rotate:t})})},null,8,["value"])])):Object(y["createCommentVNode"])("",!0)],64)):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(f),Object(y["createVNode"])(b),e.showTextTools?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:1},[Object(y["createVNode"])(O,{compact:"",class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"3"},value:e.richTextAttrs.fontname,onChange:t[6]||(t[6]=function(t){return e.emitRichTextCommand("fontname",t)})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p)]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{label:"系统字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.availableFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",{style:Object(y["normalizeStyle"])({fontFamily:e.value})},Object(y["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(y["createVNode"])(m,{label:"在线字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.webFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(y["createVNode"])(r,{style:{flex:"2"},value:e.richTextAttrs.fontsize,onChange:t[7]||(t[7]=function(t){return e.emitRichTextCommand("fontsize",t)})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v)]})),default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.fontSizeOptions,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e,value:e},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])(Object(y["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(y["createVNode"])(x,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.richTextAttrs.color,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.emitRichTextCommand("color",t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j,{class:"text-color-btn",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(h),Object(y["createElementVNode"])("div",{class:"text-color-block",style:Object(y["normalizeStyle"])({backgroundColor:e.richTextAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(y["createVNode"])(I,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},checked:e.richTextAttrs.bold,onClick:t[9]||(t[9]=function(t){return e.emitRichTextCommand("bold")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},checked:e.richTextAttrs.em,onClick:t[10]||(t[10]=function(t){return e.emitRichTextCommand("em")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(E)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},checked:e.richTextAttrs.underline,onClick:t[11]||(t[11]=function(t){return e.emitRichTextCommand("underline")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(w)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"清除格式"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{style:{flex:"1"},onClick:t[12]||(t[12]=function(t){return e.emitRichTextCommand("clear")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(T,{class:"row","button-style":"solid",value:e.richTextAttrs.align,onChange:t[13]||(t[13]=function(t){return e.emitRichTextCommand("align",t.target.value)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"left",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(V)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"center",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(B)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"right",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(L)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(y["createVNode"])(T,{class:"row","button-style":"solid",value:e.textAlign,onChange:t[14]||(t[14]=function(t){return e.updateTextAlign(t.target.value)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顶对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"top",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(M)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"middle",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(_)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(g,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"底对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(S,{value:"bottom",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(D)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(y["createVNode"])(b)],64)):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(z),Object(y["createVNode"])(b),Object(y["createVNode"])(A),Object(y["createVNode"])(b),Object(y["createVNode"])(F)])}var vv=B,Ov=Object(y["defineComponent"])({name:"shape-style-panel",components:{ElementOpacity:Vp,ElementOutline:Jp,ElementShadow:bm,ElementFlip:zm,ColorButton:Xp},setup:function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.handleElement,l=n.handleElementId,c=n.editingShapeElementId,a=n.richTextAttrs,r=n.availableFonts,i=Object(y["computed"])((function(){return c.value===l.value})),u=Object(y["ref"])(),d=Object(y["ref"])(),s=Object(y["ref"])("fill"),f=Object(y["ref"])("middle");Object(y["watch"])(o,(function(){var e,t;o.value&&"shape"===o.value.type&&(u.value=o.value.fill||"#000",d.value=o.value.gradient||{type:"linear",rotate:0,color:[u.value,"#fff"]},s.value=o.value.gradient?"gradient":"fill",f.value=(null===(e=o.value)||void 0===e||null===(t=e.text)||void 0===t?void 0:t.align)||"middle")}),{deep:!0,immediate:!0});var b=$e(),p=b.addHistorySnapshot,m=function(e){t.updateElement({id:l.value,props:e}),p()},v=function(e){"fill"===e?(t.removeElementProps({id:l.value,propName:"gradient"}),p()):m({gradient:d.value})},O=function(e){if(d.value){var t=Object(L["a"])(Object(L["a"])({},d.value),e);m({gradient:t})}},h=function(e){m({fill:e})},j=function(e){var t=o.value,n={content:"",defaultFontName:"微软雅黑",defaultColor:"#000",align:"middle"},l=t.text||n;m({text:Object(L["a"])(Object(L["a"])({},l),{},{align:e})})},x=["12px","14px","16px","18px","20px","22px","24px","28px","32px","36px","40px","44px","48px","54px","60px","66px","72px","76px","80px","88px","96px","104px","112px","120px"],C=function(e,t){Cr.emit(za.RICH_TEXT_COMMAND,{command:e,value:t})};return{fill:u,gradient:d,fillType:s,textAlign:f,richTextAttrs:a,availableFonts:r,fontSizeOptions:x,webFonts:vv,showTextTools:i,emitRichTextCommand:C,updateFillType:v,updateFill:h,updateGradient:O,updateTextAlign:j}}});n("7e0a");const hv=Gn()(Ov,[["render",mv],["__scopeId","data-v-0e201fca"]]);var jv=hv,yv=function(e){return Object(y["pushScopeId"])("data-v-cbc4d7fa"),e=e(),Object(y["popScopeId"])(),e},gv={class:"line-style-panel"},xv={class:"row"},Cv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"线条样式:",-1)})),kv=Object(y["createTextVNode"])("实线"),Ev=Object(y["createTextVNode"])("虚线"),wv={class:"row"},Nv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"线条颜色:",-1)})),Iv={class:"row"},Vv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"线条宽度:",-1)})),Sv={class:"row"},Bv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"起点样式:",-1)})),Lv=Object(y["createTextVNode"])("无"),Tv=Object(y["createTextVNode"])("箭头"),Mv=Object(y["createTextVNode"])("圆点"),_v={class:"row"},Dv=yv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"终点样式:",-1)})),zv=Object(y["createTextVNode"])("无"),Av=Object(y["createTextVNode"])("箭头"),Fv=Object(y["createTextVNode"])("圆点");function Rv(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("SelectOption"),r=Object(y["resolveComponent"])("Select"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("InputNumber"),f=Object(y["resolveComponent"])("Divider"),b=Object(y["resolveComponent"])("ElementShadow");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",gv,[Object(y["createElementVNode"])("div",xv,[Cv,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.style,onChange:t[0]||(t[0]=function(t){return e.updateLine({style:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"solid"},{default:Object(y["withCtx"])((function(){return[kv]})),_:1}),Object(y["createVNode"])(a,{value:"dashed"},{default:Object(y["withCtx"])((function(){return[Ev]})),_:1})]})),_:1},8,["value"])]),Object(y["createElementVNode"])("div",wv,[Nv,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateLine({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",Iv,[Vv,Object(y["createVNode"])(s,{value:e.handleElement.width,onChange:t[2]||(t[2]=function(t){return e.updateLine({width:t})}),style:{flex:"3"}},null,8,["value"])]),Object(y["createElementVNode"])("div",Sv,[Bv,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[0],onChange:t[3]||(t[3]=function(t){return e.updateLine({points:[t,e.handleElement.points[1]]})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:""},{default:Object(y["withCtx"])((function(){return[Lv]})),_:1}),Object(y["createVNode"])(a,{value:"arrow"},{default:Object(y["withCtx"])((function(){return[Tv]})),_:1}),Object(y["createVNode"])(a,{value:"dot"},{default:Object(y["withCtx"])((function(){return[Mv]})),_:1})]})),_:1},8,["value"])]),Object(y["createElementVNode"])("div",_v,[Dv,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.handleElement.points[1],onChange:t[4]||(t[4]=function(t){return e.updateLine({points:[e.handleElement.points[0],t]})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:""},{default:Object(y["withCtx"])((function(){return[zv]})),_:1}),Object(y["createVNode"])(a,{value:"arrow"},{default:Object(y["withCtx"])((function(){return[Av]})),_:1}),Object(y["createVNode"])(a,{value:"dot"},{default:Object(y["withCtx"])((function(){return[Fv]})),_:1})]})),_:1},8,["value"])]),Object(y["createVNode"])(f),Object(y["createVNode"])(b)])}var Pv=Object(y["defineComponent"])({name:"line-style-panel",components:{ElementShadow:bm,ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=$e(),l=o.addHistorySnapshot,c=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),l())};return{handleElement:n,updateLine:c}}});n("04e6");const Hv=Gn()(Pv,[["render",Rv],["__scopeId","data-v-cbc4d7fa"]]);var qv=Hv,Wv=function(e){return Object(y["pushScopeId"])("data-v-5a3169a0"),e=e(),Object(y["popScopeId"])(),e},Gv={class:"chart-style-panel"},Uv=Object(y["createTextVNode"])(" 编辑图表数据 "),Xv={class:"row"},Zv=Object(y["createTextVNode"])("面积图样式"),Yv=Object(y["createTextVNode"])("散点图样式"),Jv={class:"row"},Qv=Object(y["createTextVNode"])("使用平滑曲线"),Kv={key:1,class:"row"},$v=Object(y["createTextVNode"])("条形图样式"),eO=Object(y["createTextVNode"])("堆叠样式"),tO={key:2,class:"row"},nO=Object(y["createTextVNode"])("环形图样式"),oO={class:"row"},lO=Wv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"图例:",-1)})),cO=Object(y["createTextVNode"])("不显示"),aO=Object(y["createTextVNode"])("显示在上方"),rO=Object(y["createTextVNode"])("显示在下方"),iO={class:"row"},uO=Wv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"背景填充:",-1)})),dO={class:"row"},sO=Wv((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"网格颜色:",-1)})),fO={style:{flex:"2"}},bO={class:"color-btn-wrap",style:{flex:"3"}},pO=["onClick"],mO={class:"preset-themes"},vO=["onClick","onMouseenter"],OO=Object(y["createTextVNode"])("推荐主题"),hO=Object(y["createTextVNode"])(" 添加主题色 ");function jO(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconEdit"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("Divider"),u=Object(y["resolveComponent"])("Checkbox"),d=Object(y["resolveComponent"])("SelectOption"),s=Object(y["resolveComponent"])("Select"),f=Object(y["resolveComponent"])("ColorPicker"),b=Object(y["resolveComponent"])("ColorButton"),p=Object(y["resolveComponent"])("Popover"),m=Object(y["resolveComponent"])("IconCloseSmall"),v=Object(y["resolveComponent"])("Tooltip"),O=Object(y["resolveComponent"])("IconPlus"),h=Object(y["resolveComponent"])("ButtonGroup"),j=Object(y["resolveComponent"])("ElementOutline"),g=Object(y["resolveComponent"])("ChartDataEditor"),x=Object(y["resolveComponent"])("Modal");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Gv,[Object(y["createVNode"])(r,{class:"full-width-btn",onClick:t[0]||(t[0]=function(t){return e.chartDataEditorVisible=!0})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{class:"btn-icon"}),Uv]})),_:1}),Object(y["createVNode"])(i),"line"===e.handleElement.chartType?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",Xv,[Object(y["createVNode"])(u,{onChange:t[1]||(t[1]=function(t){return e.updateOptions({showArea:t.target.checked})}),checked:e.showArea,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Zv]})),_:1},8,["checked"]),Object(y["createVNode"])(u,{onChange:t[2]||(t[2]=function(t){return e.updateOptions({showLine:!t.target.checked})}),checked:!e.showLine,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Yv]})),_:1},8,["checked"])]),Object(y["createElementVNode"])("div",Jv,[Object(y["createVNode"])(u,{onChange:t[3]||(t[3]=function(t){return e.updateOptions({lineSmooth:t.target.checked})}),checked:e.lineSmooth},{default:Object(y["withCtx"])((function(){return[Qv]})),_:1},8,["checked"])])],64)):Object(y["createCommentVNode"])("",!0),"bar"===e.handleElement.chartType?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Kv,[Object(y["createVNode"])(u,{onChange:t[4]||(t[4]=function(t){return e.updateOptions({horizontalBars:t.target.checked})}),checked:e.horizontalBars},{default:Object(y["withCtx"])((function(){return[$v]})),_:1},8,["checked"]),Object(y["createVNode"])(u,{onChange:t[5]||(t[5]=function(t){return e.updateOptions({stackBars:t.target.checked})}),checked:e.stackBars},{default:Object(y["withCtx"])((function(){return[eO]})),_:1},8,["checked"])])):Object(y["createCommentVNode"])("",!0),"pie"===e.handleElement.chartType?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",tO,[Object(y["createVNode"])(u,{onChange:t[6]||(t[6]=function(t){return e.updateOptions({donut:t.target.checked})}),checked:e.donut},{default:Object(y["withCtx"])((function(){return[nO]})),_:1},8,["checked"])])):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(i),Object(y["createElementVNode"])("div",oO,[lO,Object(y["createVNode"])(s,{style:{flex:"3"},value:e.legend,onChange:t[7]||(t[7]=function(t){return e.updateLegend(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{value:""},{default:Object(y["withCtx"])((function(){return[cO]})),_:1}),Object(y["createVNode"])(d,{value:"top"},{default:Object(y["withCtx"])((function(){return[aO]})),_:1}),Object(y["createVNode"])(d,{value:"bottom"},{default:Object(y["withCtx"])((function(){return[rO]})),_:1})]})),_:1},8,["value"])]),Object(y["createVNode"])(i),Object(y["createElementVNode"])("div",iO,[uO,Object(y["createVNode"])(p,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.fill,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.updateFill(t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{color:e.fill,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",dO,[sO,Object(y["createVNode"])(p,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.gridColor,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.updateGridColor(t)})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{color:e.gridColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createVNode"])(i),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.themeColor,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"row",key:n},[Object(y["createElementVNode"])("div",fO,Object(y["toDisplayString"])(0===n?"主题配色:":""),1),Object(y["createVNode"])(p,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:t,"onUpdate:modelValue":function(t){return e.updateTheme(t,n)}},null,8,["modelValue","onUpdate:modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",bO,[Object(y["createVNode"])(b,{color:t,style:{width:"100%"}},null,8,["color"]),Object(y["createVNode"])(v,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(y["withCtx"])((function(){return[0!==n?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:"delete-color-btn",onClick:Object(y["withModifiers"])((function(t){return e.deleteThemeColor(n)}),["stop"])},[Object(y["createVNode"])(m)],8,pO)):Object(y["createCommentVNode"])("",!0)]})),_:2},1032,["mouseEnterDelay"])])]})),_:2},1024)])})),128)),Object(y["createVNode"])(h,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{trigger:"click",visible:e.presetThemesVisible,"onUpdate:visible":t[11]||(t[11]=function(t){return e.presetThemesVisible=t})},{content:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",mO,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.presetChartThemes,(function(n,o){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"preset-theme",key:o},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(n,(function(l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["preset-theme-color",{select:e.presetThemeColorHoverIndex[0]===o&&c<=e.presetThemeColorHoverIndex[1]}]),key:l,style:Object(y["normalizeStyle"])({backgroundColor:l}),onClick:function(t){return e.applyPresetTheme(n,c)},onMouseenter:function(t){return e.presetThemeColorHoverIndex=[o,c]},onMouseleave:t[10]||(t[10]=function(t){return e.presetThemeColorHoverIndex=[-1,-1]})},null,46,vO)})),128))])})),128))])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{class:"no-padding",style:{flex:"2"}},{default:Object(y["withCtx"])((function(){return[OO]})),_:1})]})),_:1},8,["visible"]),Object(y["createVNode"])(r,{class:"no-padding",disabled:e.themeColor.length>=10,style:{flex:"3"},onClick:t[12]||(t[12]=function(t){return e.addThemeColor()})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{class:"btn-icon"}),hO]})),_:1},8,["disabled"])]})),_:1}),Object(y["createVNode"])(i),Object(y["createVNode"])(j),Object(y["createVNode"])(x,{visible:e.chartDataEditorVisible,"onUpdate:visible":t[15]||(t[15]=function(t){return e.chartDataEditorVisible=t}),footer:null,centered:"",closable:!1,width:648,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{data:e.handleElement.data,onClose:t[13]||(t[13]=function(t){return e.chartDataEditorVisible=!1}),onSave:t[14]||(t[14]=function(t){return e.updateData(t)})},null,8,["data"])]})),_:1},8,["visible"])])}var yO={class:"chart-data-editor"},gO={class:"editor-content"},xO={class:"range-box"},CO=["id","onFocus","onPaste"],kO={class:"btns"},EO={class:"left"},wO=Object(y["createTextVNode"])("清空"),NO={class:"right"},IO=Object(y["createTextVNode"])("取消"),VO=Object(y["createTextVNode"])("确认");function SO(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",yO,[Object(y["createElementVNode"])("div",gO,[Object(y["createElementVNode"])("div",xO,[Object(y["createElementVNode"])("div",{class:"temp-range",style:Object(y["normalizeStyle"])({width:e.tempRangeSize.width+"px",height:e.tempRangeSize.height+"px"})},null,4),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.rangeLines,(function(e){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["range-line",e.type]),key:e.type,style:Object(y["normalizeStyle"])(e.style)},null,6)})),128)),Object(y["createElementVNode"])("div",{class:"resizable",style:Object(y["normalizeStyle"])(e.resizablePointStyle),onMousedown:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.changeSelectRange(t)}),["stop"]))},null,36)]),Object(y["createElementVNode"])("table",null,[Object(y["createElementVNode"])("tbody",null,[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(31,(function(t){return Object(y["createElementVNode"])("tr",{key:t},[(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(7,(function(n){return Object(y["createElementVNode"])("td",{key:n,class:Object(y["normalizeClass"])({head:1===n&&t<=e.selectedRange[1]||1===t&&n<=e.selectedRange[0]})},[Object(y["createElementVNode"])("input",{class:Object(y["normalizeClass"])(["item",{selected:t<=e.selectedRange[1]&&n<=e.selectedRange[0]}]),id:"cell-".concat(t-1,"-").concat(n-1),autocomplete:"off",onFocus:function(o){return e.focusCell=[t-1,n-1]},onPaste:function(o){return e.handlePaste(o,t-1,n-1)}},null,42,CO)],2)})),64))])})),64))])])]),Object(y["createElementVNode"])("div",kO,[Object(y["createElementVNode"])("div",EO,[Object(y["createVNode"])(a,{class:"btn",onClick:t[1]||(t[1]=function(t){return e.clear()})},{default:Object(y["withCtx"])((function(){return[wO]})),_:1})]),Object(y["createElementVNode"])("div",NO,[Object(y["createVNode"])(a,{class:"btn",onClick:t[2]||(t[2]=function(t){return e.closeEditor()})},{default:Object(y["withCtx"])((function(){return[IO]})),_:1}),Object(y["createVNode"])(a,{type:"primary",class:"btn",onClick:t[3]||(t[3]=function(t){return e.getTableData()}),style:{"margin-left":"10px"}},{default:Object(y["withCtx"])((function(){return[VO]})),_:1})])])])}var BO=100,LO=32,TO=Object(y["defineComponent"])({name:"chart-data-editor",emits:["save","close"],props:{data:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])([0,0]),l=Object(y["ref"])({width:0,height:0}),c=Object(y["ref"])(null),a=Object(y["computed"])((function(){var e=o.value[0]*BO,t=o.value[1]*LO;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(y["computed"])((function(){var e=o.value[0]*BO,t=o.value[1]*LO;return{left:e+"px",top:t+"px"}})),i=function(){var t=[],n=e.data,l=n.labels,c=n.legends,a=n.series,r=l.length,i=a.length;t.push([""].concat(Object(K["a"])(c)));for(var u=0;u.5*BO&&(i+=BO-i%BO),u%LO>.5*LO&&(u+=LO-u%LO);var d=Math.round(u/LO),s=Math.round(i/BO);d<3&&(d=3),s<2&&(s=2),o.value=[s,d],l.value={width:0,height:0}}}};return{tempRangeSize:l,rangeLines:a,resizablePointStyle:r,selectedRange:o,focusCell:c,changeSelectRange:m,getTableData:s,closeEditor:p,clear:f,handlePaste:b}}});n("6856");const MO=Gn()(TO,[["render",SO],["__scopeId","data-v-9a62f784"]]);var _O=MO,DO=[["#d87c7c","#919e8b","#d7ab82","#6e7074","#61a0a8","#efa18d"],["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78"],["#516b91","#59c4e6","#edafda","#93b7e3","#a5e7f0","#cbb0e3"],["#893448","#d95850","#eb8146","#ffb248","#f2d643","#ebdba4"],["#4ea397","#22c3aa","#7bd9a5","#d0648a","#f58db2","#f2b3c9"],["#3fb1e3","#6be6c1","#626c91","#a0a7e6","#c4ebad","#96dee8"],["#fc97af","#87f7cf","#f7f494","#72ccff","#f7c5a0","#d4a4eb"],["#c1232b","#27727b","#fcce10","#e87c25","#b5c334","#fe8463"],["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3"],["#e01f54","#001852","#f5e8c8","#b8d2c7","#c6b38e","#a4d8c2"],["#c12e34","#e6b600","#0098d9","#2b821d","#005eaa","#339ca8"],["#8a7ca8","#e098c7","#8fd3e8","#71669e","#cc70af","#7cb4cc"]],zO=Object(y["defineComponent"])({name:"chart-style-panel",components:{ElementOutline:Jp,ChartDataEditor:_O,ColorButton:Xp},setup:function(){var e=ae(),t=ce(),n=Object(g["c"])(e),o=n.handleElement,l=n.handleElementId,c=Object(g["c"])(t),a=c.theme,r=Object(y["ref"])(!1),i=Object(y["ref"])(!1),u=Object(y["ref"])([-1,-1]),d=$e(),s=d.addHistorySnapshot,f=Object(y["ref"])(),b=Object(y["ref"])([]),p=Object(y["ref"])(""),m=Object(y["ref"])(""),v=Object(y["ref"])(!0),O=Object(y["ref"])(!0),h=Object(y["ref"])(!1),j=Object(y["ref"])(!1),x=Object(y["ref"])(!1),C=Object(y["ref"])(!1);Object(y["watch"])(o,(function(){if(o.value&&"chart"===o.value.type){if(f.value=o.value.fill||"#000",o.value.options){var e=o.value.options,t=e.lineSmooth,n=e.showLine,l=e.showArea,c=e.horizontalBars,a=e.donut,r=e.stackBars;void 0!==t&&(v.value=t),void 0!==n&&(O.value=n),void 0!==l&&(h.value=l),void 0!==c&&(j.value=c),void 0!==a&&(x.value=a),void 0!==r&&(C.value=r)}b.value=o.value.themeColor,p.value=o.value.gridColor||"rgba(0, 0, 0, 0.4)",m.value=o.value.legend||""}}),{deep:!0,immediate:!0});var k=function(e){t.updateElement({id:l.value,props:e}),s()},E=function(e){r.value=!1,k({data:e})},w=function(e){k({fill:e})},N=function(e){var t=o.value,n=Object(L["a"])(Object(L["a"])({},t.options),e);k({options:n})},I=function(e,t){var n={themeColor:b.value.map((function(n,o){return o===t?e:n}))};k(n)},V=function(){var e={themeColor:[].concat(Object(K["a"])(b.value),[a.value.themeColor])};k(e)},S=function(e,t){var n=e.slice(0,t+1);k({themeColor:n}),i.value=!1},B=function(e){var t={themeColor:b.value.filter((function(t,n){return n!==e}))};k(t)},T=function(e){k({gridColor:e})},M=function(e){k({legend:e})},_=function(){return r.value=!0};return Cr.on(za.OPEN_CHART_DATA_EDITOR,_),Object(y["onUnmounted"])((function(){Cr.off(za.OPEN_CHART_DATA_EDITOR,_)})),{chartDataEditorVisible:r,presetThemesVisible:i,presetThemeColorHoverIndex:u,handleElement:o,updateData:E,fill:f,updateFill:w,lineSmooth:v,showLine:O,showArea:h,horizontalBars:j,donut:x,stackBars:C,updateOptions:N,themeColor:b,gridColor:p,legend:m,updateTheme:I,addThemeColor:V,deleteThemeColor:B,updateGridColor:T,updateLegend:M,presetChartThemes:DO,applyPresetTheme:S}}});n("eb6a");const AO=Gn()(zO,[["render",jO],["__scopeId","data-v-5a3169a0"]]);var FO=AO,RO=function(e){return Object(y["pushScopeId"])("data-v-72e00692"),e=e(),Object(y["popScopeId"])(),e},PO={class:"table-style-panel"},HO={class:"row"},qO=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"行数:",-1)})),WO={class:"set-count",style:{flex:"3"}},GO={class:"count-text"},UO={class:"row"},XO=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"列数:",-1)})),ZO={class:"set-count",style:{flex:"3"}},YO={class:"count-text"},JO={class:"row theme-switch"},QO=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"启用主题表格:",-1)})),KO={class:"switch-wrapper",style:{flex:"3"}},$O={class:"row"},eh=Object(y["createTextVNode"])("标题行"),th=Object(y["createTextVNode"])("汇总行"),nh={class:"row"},oh=Object(y["createTextVNode"])("第一列"),lh=Object(y["createTextVNode"])("最后一列"),ch={class:"row"},ah=RO((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"主题颜色:",-1)}));function rh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconFontSize"),r=Object(y["resolveComponent"])("SelectOption"),i=Object(y["resolveComponent"])("SelectOptGroup"),u=Object(y["resolveComponent"])("Select"),d=Object(y["resolveComponent"])("IconAddText"),s=Object(y["resolveComponent"])("InputGroup"),f=Object(y["resolveComponent"])("ColorPicker"),b=Object(y["resolveComponent"])("IconText"),p=Object(y["resolveComponent"])("Button"),m=Object(y["resolveComponent"])("Tooltip"),v=Object(y["resolveComponent"])("Popover"),O=Object(y["resolveComponent"])("IconFill"),h=Object(y["resolveComponent"])("ButtonGroup"),j=Object(y["resolveComponent"])("IconTextBold"),g=Object(y["resolveComponent"])("CheckboxButton"),x=Object(y["resolveComponent"])("IconTextItalic"),C=Object(y["resolveComponent"])("IconTextUnderline"),k=Object(y["resolveComponent"])("IconStrikethrough"),E=Object(y["resolveComponent"])("CheckboxButtonGroup"),w=Object(y["resolveComponent"])("IconAlignTextLeft"),N=Object(y["resolveComponent"])("RadioButton"),I=Object(y["resolveComponent"])("IconAlignTextCenter"),V=Object(y["resolveComponent"])("IconAlignTextRight"),S=Object(y["resolveComponent"])("RadioGroup"),B=Object(y["resolveComponent"])("Divider"),L=Object(y["resolveComponent"])("ElementOutline"),T=Object(y["resolveComponent"])("IconMinus"),M=Object(y["resolveComponent"])("IconPlus"),_=Object(y["resolveComponent"])("Switch"),D=Object(y["resolveComponent"])("Checkbox"),z=Object(y["resolveComponent"])("ColorButton");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",PO,[Object(y["createVNode"])(s,{compact:"",class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{style:{flex:"3"},value:e.textAttrs.fontname,onChange:t[0]||(t[0]=function(t){return e.updateTextAttrs({fontname:t})})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a)]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{label:"系统字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.availableFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",{style:Object(y["normalizeStyle"])({fontFamily:e.value})},Object(y["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(y["createVNode"])(i,{label:"在线字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.webFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"]),Object(y["createVNode"])(u,{style:{flex:"2"},value:e.textAttrs.fontsize,onChange:t[1]||(t[1]=function(t){return e.updateTextAttrs({fontsize:t})})},{suffixIcon:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d)]})),default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.fontSizeOptions,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:e,value:e},{default:Object(y["withCtx"])((function(){return[Object(y["createTextVNode"])(Object(y["toDisplayString"])(e),1)]})),_:2},1032,["value"])})),128))]})),_:1},8,["value"])]})),_:1}),Object(y["createVNode"])(h,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.textAttrs.color,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.updateTextAttrs({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"文字颜色"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{class:"text-color-btn",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b),Object(y["createElementVNode"])("div",{class:"text-color-block",style:Object(y["normalizeStyle"])({backgroundColor:e.textAttrs.color})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(v,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.textAttrs.backcolor,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.updateTextAttrs({backcolor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"单元格填充"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{class:"text-color-btn",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O),Object(y["createElementVNode"])("div",{class:"text-color-block",style:Object(y["normalizeStyle"])({backgroundColor:e.textAttrs.backcolor})},null,4)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1})]})),_:1}),Object(y["createVNode"])(E,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"加粗"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.bold,onClick:t[4]||(t[4]=function(t){return e.updateTextAttrs({bold:!e.textAttrs.bold})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"斜体"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.em,onClick:t[5]||(t[5]=function(t){return e.updateTextAttrs({em:!e.textAttrs.em})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(x)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下划线"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.underline,onClick:t[6]||(t[6]=function(t){return e.updateTextAttrs({underline:!e.textAttrs.underline})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除线"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(g,{style:{flex:"1"},checked:e.textAttrs.strikethrough,onClick:t[7]||(t[7]=function(t){return e.updateTextAttrs({strikethrough:!e.textAttrs.strikethrough})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k)]})),_:1},8,["checked"])]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(S,{class:"row","button-style":"solid",value:e.textAttrs.align,onChange:t[8]||(t[8]=function(t){return e.updateTextAttrs({align:t.target.value})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{value:"left",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(w)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{value:"center",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(I)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(m,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(N,{value:"right",style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(V)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1},8,["value"]),Object(y["createVNode"])(B),Object(y["createVNode"])(L,{fixed:!0}),Object(y["createVNode"])(B),Object(y["createElementVNode"])("div",HO,[qO,Object(y["createElementVNode"])("div",WO,[Object(y["createVNode"])(p,{class:"btn",disabled:e.rowCount<=1,onClick:t[9]||(t[9]=function(t){return e.setTableRow(e.rowCount-1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(T)]})),_:1},8,["disabled"]),Object(y["createElementVNode"])("div",GO,Object(y["toDisplayString"])(e.rowCount),1),Object(y["createVNode"])(p,{class:"btn",disabled:e.rowCount>=30,onClick:t[10]||(t[10]=function(t){return e.setTableRow(e.rowCount+1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(M)]})),_:1},8,["disabled"])])]),Object(y["createElementVNode"])("div",UO,[XO,Object(y["createElementVNode"])("div",ZO,[Object(y["createVNode"])(p,{class:"btn",disabled:e.colCount<=1,onClick:t[11]||(t[11]=function(t){return e.setTableCol(e.colCount-1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(T)]})),_:1},8,["disabled"]),Object(y["createElementVNode"])("div",YO,Object(y["toDisplayString"])(e.colCount),1),Object(y["createVNode"])(p,{class:"btn",disabled:e.colCount>=30,onClick:t[12]||(t[12]=function(t){return e.setTableCol(e.colCount+1)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(M)]})),_:1},8,["disabled"])])]),Object(y["createVNode"])(B),Object(y["createElementVNode"])("div",JO,[QO,Object(y["createElementVNode"])("div",KO,[Object(y["createVNode"])(_,{checked:e.hasTheme,onChange:t[13]||(t[13]=function(t){return e.toggleTheme(t)})},null,8,["checked"])])]),e.hasTheme?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",$O,[Object(y["createVNode"])(D,{onChange:t[14]||(t[14]=function(t){return e.updateTheme({rowHeader:t.target.checked})}),checked:e.theme.rowHeader,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[eh]})),_:1},8,["checked"]),Object(y["createVNode"])(D,{onChange:t[15]||(t[15]=function(t){return e.updateTheme({rowFooter:t.target.checked})}),checked:e.theme.rowFooter,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[th]})),_:1},8,["checked"])]),Object(y["createElementVNode"])("div",nh,[Object(y["createVNode"])(D,{onChange:t[16]||(t[16]=function(t){return e.updateTheme({colHeader:t.target.checked})}),checked:e.theme.colHeader,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[oh]})),_:1},8,["checked"]),Object(y["createVNode"])(D,{onChange:t[17]||(t[17]=function(t){return e.updateTheme({colFooter:t.target.checked})}),checked:e.theme.colFooter,style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[lh]})),_:1},8,["checked"])]),Object(y["createElementVNode"])("div",ch,[ah,Object(y["createVNode"])(v,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{modelValue:e.theme.color,"onUpdate:modelValue":t[18]||(t[18]=function(t){return e.updateTheme({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(z,{color:e.theme.color,style:{flex:"3"}},null,8,["color"])]})),_:1})])],64)):Object(y["createCommentVNode"])("",!0)])}var ih=B,uh=Object(y["defineComponent"])({name:"table-style-panel",components:{ElementOutline:Jp,ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=t.handleElementId,l=t.selectedTableCells,c=t.availableFonts,a=Object(y["computed"])((function(){return e.theme.themeColor})),r=["12px","14px","16px","18px","20px","22px","24px","28px","32px"],i=Object(y["ref"])({bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}),u=Object(y["ref"])(),d=Object(y["ref"])(!1),s=Object(y["ref"])(0),f=Object(y["ref"])(0),b=Object(y["ref"])(0),p=Object(y["ref"])(0);Object(y["watch"])(n,(function(){n.value&&"table"===n.value.type&&(u.value=n.value.theme,d.value=!!u.value,s.value=n.value.data.length,f.value=n.value.data[0].length,b.value=n.value.data.length,p.value=n.value.data[0].length)}),{deep:!0,immediate:!0});var m=$e(),v=m.addHistorySnapshot,O=function(){if(n.value&&"table"===n.value.type){var e=0,t=0;if(l.value.length){var o=l.value[0];e=+o.split("_")[0],t=+o.split("_")[1]}var c=n.value.data[e][t].style;i.value=c?{bold:!!c.bold,em:!!c.em,underline:!!c.underline,strikethrough:!!c.strikethrough,color:c.color||"#000",backcolor:c.backcolor||"#000",fontsize:c.fontsize||"12px",fontname:c.fontname||"微软雅黑",align:c.align||"left"}:{bold:!1,em:!1,underline:!1,strikethrough:!1,color:"#000",backcolor:"#000",fontsize:"12px",fontname:"微软雅黑",align:"left"}}};Object(y["onMounted"])((function(){l.value.length&&O()})),Object(y["watch"])(l,O);var h=function(t){e.updateElement({id:o.value,props:t}),v()},j=function(e){for(var t=n.value,o=JSON.parse(JSON.stringify(t.data)),c=0;co){var l=new Array(f.value).fill({id:je(),colspan:1,rowspan:1,text:""}),c=new Array(e-o).fill(l),a=JSON.parse(JSON.stringify(t.data));a.push.apply(a,Object(K["a"])(c)),h({data:a})}else{var r=t.data.slice(0,e);h({data:r})}},E=function(e){var t=n.value,o=t.data[0].length,l=t.data,c=t.colWidths.map((function(e){return e*t.width}));if(e>o){var a;l=l.map((function(t){var n=new Array(e-o).fill({id:je(),colspan:1,rowspan:1,text:""});return t.push.apply(t,Object(K["a"])(n)),t}));var r=new Array(e-o).fill(100);(a=c).push.apply(a,Object(K["a"])(r))}else l=l.map((function(t){return t.slice(0,e)})),c=c.slice(0,e);var i=c.reduce((function(e,t){return e+t})),u=c.map((function(e){return e/i})),d={width:i,data:l,colWidths:u};h(d)};return{handleElement:n,availableFonts:c,fontSizeOptions:r,textAttrs:i,updateTextAttrs:j,theme:u,rowCount:s,colCount:f,minRowCount:b,minColCount:p,hasTheme:d,toggleTheme:C,updateTheme:x,setTableRow:k,setTableCol:E,webFonts:ih}}});n("eacc");const dh=Gn()(uh,[["render",rh],["__scopeId","data-v-72e00692"]]);var sh=dh,fh=function(e){return Object(y["pushScopeId"])("data-v-69f903b1"),e=e(),Object(y["popScopeId"])(),e},bh={class:"latex-style-panel"},ph={class:"row"},mh=Object(y["createTextVNode"])("编辑 LaTeX"),vh={class:"row"},Oh=fh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"颜色:",-1)})),hh={class:"row"},jh=fh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"粗细:",-1)}));function yh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Button"),r=Object(y["resolveComponent"])("Divider"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("InputNumber"),f=Object(y["resolveComponent"])("LaTeXEditor"),b=Object(y["resolveComponent"])("Modal");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",bh,[Object(y["createElementVNode"])("div",ph,[Object(y["createVNode"])(a,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.latexEditorVisible=!0})},{default:Object(y["withCtx"])((function(){return[mh]})),_:1})]),Object(y["createVNode"])(r),Object(y["createElementVNode"])("div",vh,[Oh,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateLatex({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",hh,[jh,Object(y["createVNode"])(s,{min:1,max:3,value:e.handleElement.strokeWidth,onChange:t[2]||(t[2]=function(t){return e.updateLatex({strokeWidth:t})}),style:{flex:"3"}},null,8,["value"])]),Object(y["createVNode"])(b,{visible:e.latexEditorVisible,"onUpdate:visible":t[5]||(t[5]=function(t){return e.latexEditorVisible=t}),footer:null,centered:"",width:880,destroyOnClose:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f,{value:e.handleElement.latex,onClose:t[3]||(t[3]=function(t){return e.latexEditorVisible=!1}),onUpdate:t[4]||(t[4]=function(t){e.updateLatexData(t),e.latexEditorVisible=!1})},null,8,["value"])]})),_:1},8,["visible"])])}var gh=Object(y["defineComponent"])({name:"latex-style-panel",components:{ColorButton:Xp,LaTeXEditor:Mb},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=Object(y["ref"])(!1),l=$e(),c=l.addHistorySnapshot,a=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),c())},r=function(e){a({path:e.path,latex:e.latex,width:e.w,height:e.h,viewBox:[e.w,e.h]})},i=function(){return o.value=!0};return Cr.on(za.OPEN_LATEX_EDITOR,i),Object(y["onUnmounted"])((function(){Cr.off(za.OPEN_LATEX_EDITOR,i)})),{handleElement:n,latexEditorVisible:o,updateLatex:a,updateLatexData:r}}});n("e5a8");const xh=Gn()(gh,[["render",yh],["__scopeId","data-v-69f903b1"]]);var Ch=xh,kh=function(e){return Object(y["pushScopeId"])("data-v-61bcaa2a"),e=e(),Object(y["popScopeId"])(),e},Eh={class:"video-style-panel"},wh=kh((function(){return Object(y["createElementVNode"])("div",{class:"title"},"视频预览封面",-1)})),Nh={class:"background-image-wrapper"},Ih={class:"background-image"},Vh={class:"row"},Sh=Object(y["createTextVNode"])("重置封面");function Bh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconPlus"),r=Object(y["resolveComponent"])("FileInput"),i=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Eh,[wh,Object(y["createElementVNode"])("div",Nh,[Object(y["createVNode"])(r,{onChange:t[0]||(t[0]=function(t){return e.setVideoPoster(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",Ih,[Object(y["createElementVNode"])("div",{class:"content",style:Object(y["normalizeStyle"])({backgroundImage:"url(".concat(e.handleElement.poster,")")})},[Object(y["createVNode"])(a)],4)])]})),_:1})]),Object(y["createElementVNode"])("div",Vh,[Object(y["createVNode"])(i,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.updateVideo({poster:""})})},{default:Object(y["withCtx"])((function(){return[Sh]})),_:1})])])}var Lh=Object(y["defineComponent"])({name:"video-style-panel",setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=$e(),l=o.addHistorySnapshot,c=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),l())},a=function(e){var t=e[0];t&&tt(t).then((function(e){return c({poster:e})}))};return{handleElement:n,updateVideo:c,setVideoPoster:a}}});n("c43a");const Th=Gn()(Lh,[["render",Bh],["__scopeId","data-v-61bcaa2a"]]);var Mh=Th,_h=function(e){return Object(y["pushScopeId"])("data-v-80767a46"),e=e(),Object(y["popScopeId"])(),e},Dh={class:"audio-style-panel"},zh={class:"row"},Ah=_h((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"图标颜色:",-1)})),Fh={class:"row switch-row"},Rh=_h((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"自动播放:",-1)})),Ph={class:"switch-wrapper",style:{flex:"3"}},Hh={class:"row switch-row"},qh=_h((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"循环播放:",-1)})),Wh={class:"switch-wrapper",style:{flex:"3"}};function Gh(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ColorPicker"),r=Object(y["resolveComponent"])("ColorButton"),i=Object(y["resolveComponent"])("Popover"),u=Object(y["resolveComponent"])("Switch");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Dh,[Object(y["createElementVNode"])("div",zh,[Ah,Object(y["createVNode"])(i,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{modelValue:e.handleElement.color,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.updateAudio({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{color:e.handleElement.color,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",Fh,[Rh,Object(y["createElementVNode"])("div",Ph,[Object(y["createVNode"])(u,{checked:e.handleElement.autoplay,onChange:t[1]||(t[1]=function(t){return e.updateAudio({autoplay:t})})},null,8,["checked"])])]),Object(y["createElementVNode"])("div",Hh,[qh,Object(y["createElementVNode"])("div",Wh,[Object(y["createVNode"])(u,{checked:e.handleElement.loop,onChange:t[2]||(t[2]=function(t){return e.updateAudio({loop:t})})},null,8,["checked"])])])])}var Uh=Object(y["defineComponent"])({name:"audio-style-panel",components:{ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=$e(),l=o.addHistorySnapshot,c=function(t){n.value&&(e.updateElement({id:n.value.id,props:t}),l())};return{handleElement:n,updateAudio:c}}});n("d129");const Xh=Gn()(Uh,[["render",Gh],["__scopeId","data-v-80767a46"]]);var Zh=Xh,Yh=Object(y["defineComponent"])({name:"element-style-panel",setup:function(){var e=Object(g["c"])(ae()),t=e.handleElement,n=Object(y["computed"])((function(){var e;if(!t.value)return null;var n=(e={},Object(fe["a"])(e,Ne.TEXT,hm),Object(fe["a"])(e,Ne.IMAGE,ev),Object(fe["a"])(e,Ne.SHAPE,jv),Object(fe["a"])(e,Ne.LINE,qv),Object(fe["a"])(e,Ne.CHART,FO),Object(fe["a"])(e,Ne.TABLE,sh),Object(fe["a"])(e,Ne.LATEX,Ch),Object(fe["a"])(e,Ne.VIDEO,Mh),Object(fe["a"])(e,Ne.AUDIO,Zh),e);return n[t.value.type]||null}));return{handleElement:t,currentPanelComponent:n}}});const Jh=Gn()(Yh,[["render",ip]]);var Qh=Jh,Kh=function(e){return Object(y["pushScopeId"])("data-v-3476ee65"),e=e(),Object(y["popScopeId"])(),e},$h={class:"element-positopn-panel"},ej=Kh((function(){return Object(y["createElementVNode"])("div",{class:"title"},"层级:",-1)})),tj=Object(y["createTextVNode"])(" 置于顶层"),nj=Object(y["createTextVNode"])(" 置于底层"),oj=Object(y["createTextVNode"])(" 上移一层"),lj=Object(y["createTextVNode"])(" 下移一层"),cj=Kh((function(){return Object(y["createElementVNode"])("div",{class:"title"},"对齐:",-1)})),aj={class:"row"},rj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"3"}},"位置:",-1)})),ij=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)})),uj=Object(y["createStaticVNode"])('
X
Y
',1),dj={class:"row"},sj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"3"}},"大小:",-1)})),fj={key:1,style:{flex:"1"}},bj=Object(y["createStaticVNode"])('
',1),pj={class:"row"},mj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"3"}},"旋转:",-1)})),vj=Kh((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)}));function Oj(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconSendToBack"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("IconBringToFrontOne"),u=Object(y["resolveComponent"])("ButtonGroup"),d=Object(y["resolveComponent"])("IconBringToFront"),s=Object(y["resolveComponent"])("IconSentToBack"),f=Object(y["resolveComponent"])("Divider"),b=Object(y["resolveComponent"])("IconAlignLeft"),p=Object(y["resolveComponent"])("Tooltip"),m=Object(y["resolveComponent"])("IconAlignVertically"),v=Object(y["resolveComponent"])("IconAlignRight"),O=Object(y["resolveComponent"])("IconAlignTop"),h=Object(y["resolveComponent"])("IconAlignHorizontally"),j=Object(y["resolveComponent"])("IconAlignBottom"),g=Object(y["resolveComponent"])("InputNumber"),x=Object(y["resolveComponent"])("IconLock"),C=Object(y["resolveComponent"])("IconUnlock"),k=Object(y["resolveComponent"])("IconRotate");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",$h,[ej,Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.orderElement(e.handleElement,"top")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{class:"btn-icon"}),tj]})),_:1}),Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.orderElement(e.handleElement,"bottom")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{class:"btn-icon"}),nj]})),_:1})]})),_:1}),Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.orderElement(e.handleElement,"up")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d,{class:"btn-icon"}),oj]})),_:1}),Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.orderElement(e.handleElement,"down")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(s,{class:"btn-icon"}),lj]})),_:1})]})),_:1}),Object(y["createVNode"])(f),cj,Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElementToCanvas("left")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElementToCanvas("horizontal")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(m)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.alignElementToCanvas("right")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(u,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.alignElementToCanvas("top")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.alignElementToCanvas("vertical")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(h)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[9]||(t[9]=function(t){return e.alignElementToCanvas("bottom")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(j)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(f),Object(y["createElementVNode"])("div",aj,[rj,Object(y["createVNode"])(g,{step:5,value:e.left,onChange:t[10]||(t[10]=function(t){return e.updateLeft(t)}),style:{flex:"4"}},null,8,["value"]),ij,Object(y["createVNode"])(g,{step:5,value:e.top,onChange:t[11]||(t[11]=function(t){return e.updateTop(t)}),style:{flex:"4"}},null,8,["value"])]),uj,"line"!==e.handleElement.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[Object(y["createElementVNode"])("div",dj,[sj,Object(y["createVNode"])(g,{min:e.minSize,max:1500,step:5,value:e.width,onChange:t[12]||(t[12]=function(t){return e.updateWidth(t)}),style:{flex:"4"}},null,8,["min","value"]),["image","shape","audio"].includes(e.handleElement.type)?(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:0},[e.fixedRatio?(Object(y["openBlock"])(),Object(y["createBlock"])(p,{key:0,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"解除宽高比锁定"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(x,{style:{flex:"1"},class:"icon-btn",onClick:t[13]||(t[13]=function(t){return e.updateFixedRatio(!1)})})]})),_:1},8,["mouseEnterDelay"])):(Object(y["openBlock"])(),Object(y["createBlock"])(p,{key:1,mouseLeaveDelay:0,mouseEnterDelay:.5,title:"宽高比锁定"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(C,{style:{flex:"1"},class:"icon-btn",onClick:t[14]||(t[14]=function(t){return e.updateFixedRatio(!0)})})]})),_:1},8,["mouseEnterDelay"]))],64)):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",fj)),Object(y["createVNode"])(g,{min:e.minSize,max:800,step:5,disabled:"text"===e.handleElement.type,value:e.height,onChange:t[15]||(t[15]=function(t){return e.updateHeight(t)}),style:{flex:"4"}},null,8,["min","disabled","value"])]),bj],64)):Object(y["createCommentVNode"])("",!0),["line","video","audio"].includes(e.handleElement.type)?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:1},[Object(y["createVNode"])(f),Object(y["createElementVNode"])("div",pj,[mj,Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"逆时针旋转"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{class:"icon-btn",onClick:t[16]||(t[16]=function(t){return e.updateRotate45("-")}),style:{flex:"2"}})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(p,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"顺时针旋转"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(k,{class:"icon-btn",onClick:t[17]||(t[17]=function(t){return e.updateRotate45("+")}),style:Object(y["normalizeStyle"])({flex:2,transform:"rotateY(180deg)"})},null,8,["style"])]})),_:1},8,["mouseEnterDelay"]),vj,Object(y["createVNode"])(g,{min:-180,max:180,step:5,value:e.rotate,onChange:t[18]||(t[18]=function(t){return e.updateRotate(t)}),style:{flex:"4"}},null,8,["value"])])],64))])}var hj=Object(y["defineComponent"])({name:"element-positopn-panel",setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=t.handleElementId,l=Object(y["ref"])(0),c=Object(y["ref"])(0),a=Object(y["ref"])(0),r=Object(y["ref"])(0),i=Object(y["ref"])(0),u=Object(y["ref"])(!1),d=Object(y["computed"])((function(){return n.value&&na[n.value.type]||20}));Object(y["watch"])(n,(function(){n.value&&(l.value=Object(te["round"])(n.value.left,1),c.value=Object(te["round"])(n.value.top,1),u.value="fixedRatio"in n.value&&!!n.value.fixedRatio,"line"!==n.value.type&&(a.value=Object(te["round"])(n.value.width,1),r.value=Object(te["round"])(n.value.height,1),i.value="rotate"in n.value&&void 0!==n.value.rotate?Object(te["round"])(n.value.rotate,1):0))}),{deep:!0,immediate:!0});var s=mt(),f=s.orderElement,b=fa(),p=b.alignElementToCanvas,m=$e(),v=m.addHistorySnapshot,O=function(t){var n={left:t};e.updateElement({id:o.value,props:n}),v()},h=function(t){var n={top:t};e.updateElement({id:o.value,props:n}),v()},j=function(t){var n={width:t};e.updateElement({id:o.value,props:n}),v()},x=function(t){var n={height:t};e.updateElement({id:o.value,props:n}),v()},C=function(t){var n={rotate:t};e.updateElement({id:o.value,props:n}),v()},k=function(t){var n={fixedRatio:t};e.updateElement({id:o.value,props:n}),v()},E=function(t){var n=45*Math.floor(i.value/45);"+"===t?n+=45:"-"===t&&(n-=45),n<-180&&(n=-180),n>180&&(n=180);var l={rotate:n};e.updateElement({id:o.value,props:l}),v()};return{handleElement:n,orderElement:f,alignElementToCanvas:p,left:l,top:c,width:a,height:r,rotate:i,fixedRatio:u,minSize:d,updateLeft:O,updateTop:h,updateWidth:j,updateHeight:x,updateRotate:C,updateFixedRatio:k,updateRotate45:E}}});n("f10d");const jj=Gn()(hj,[["render",Oj],["__scopeId","data-v-3476ee65"]]);var yj=jj,gj=function(e){return Object(y["pushScopeId"])("data-v-696c81e2"),e=e(),Object(y["popScopeId"])(),e},xj={class:"element-animation-panel"},Cj={key:0,class:"element-animation"},kj={class:"animation-pool"},Ej={class:"type-title"},wj={class:"pool-item-wrapper"},Nj=["onMouseenter","onClick"],Ij={key:0,class:"mask"},Vj=Object(y["createTextVNode"])(" 该元素暂不支持动画 "),Sj={key:1,class:"tip"},Bj=Object(y["createTextVNode"])(" 选中画布中的元素添加动画"),Lj={class:"index"},Tj={class:"text"},Mj={class:"handler"},_j={key:2,class:"configs"},Dj={class:"duration"},zj=gj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"4"}},"持续时间(毫秒):",-1)}));function Aj(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconEffects"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("Popover"),u=Object(y["resolveComponent"])("IconClick"),d=Object(y["resolveComponent"])("Divider"),s=Object(y["resolveComponent"])("IconPlayOne"),f=Object(y["resolveComponent"])("Tooltip"),b=Object(y["resolveComponent"])("IconCloseSmall"),p=Object(y["resolveComponent"])("Draggable"),m=Object(y["resolveComponent"])("InputNumber");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",xj,[e.handleElement?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Cj,[["chart","video"].includes(e.handleElement.type)?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,class:"element-animation-btn",disabled:""},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{style:{"margin-right":"5px"}}),Vj]})),_:1})):(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:0,trigger:"click",visible:e.animationPoolVisible,"onUpdate:visible":t[1]||(t[1]=function(t){return e.animationPoolVisible=t}),onVisibleChange:t[2]||(t[2]=function(t){return e.handlePopoverVisibleChange(t)})},{content:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",kj,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.animations,(function(n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"pool-type",key:n.name},[Object(y["createElementVNode"])("div",Ej,Object(y["toDisplayString"])(n.name)+":",1),Object(y["createElementVNode"])("div",wj,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(n.children,(function(n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"pool-item",key:n.name,onMouseenter:function(t){return e.hoverPreviewAnimation=n.value},onMouseleave:t[0]||(t[0]=function(t){return e.hoverPreviewAnimation=""}),onClick:function(t){return e.addAnimation(n.value)}},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["animation-box",["animate__animated","animate__faster",e.hoverPreviewAnimation===n.value&&"animate__".concat(n.value)]])},Object(y["toDisplayString"])(n.name),3)],40,Nj)})),128))])])})),128)),e.popoverMaskHide?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ij))])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{class:"element-animation-btn"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{style:{"margin-right":"5px"}}),Object(y["createTextVNode"])(" "+Object(y["toDisplayString"])(e.handleElementAnimationName||"点击选择动画"),1)]})),_:1})]})),_:1},8,["visible"]))])):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Sj,[Object(y["createVNode"])(u,{style:{"margin-right":"5px"}}),Bj])),Object(y["createVNode"])(d),Object(y["createVNode"])(p,{class:"animation-sequence",modelValue:e.animationSequence,animation:300,scroll:!0,scrollSensitivity:50,onEnd:e.handleDragEnd,itemKey:"id"},{item:Object(y["withCtx"])((function(t){var n,o=t.element,l=t.index;return[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["sequence-item",{active:(null===(n=e.handleElement)||void 0===n?void 0:n.id)===o.elId}])},[Object(y["createElementVNode"])("div",Lj,Object(y["toDisplayString"])(l+1),1),Object(y["createElementVNode"])("div",Tj,"【"+Object(y["toDisplayString"])(o.elType)+"】"+Object(y["toDisplayString"])(o.animationType),1),Object(y["createElementVNode"])("div",Mj,[Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"预览"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(s,{class:"handler-btn",onClick:function(t){return e.runAnimation(o.elId,o.type,o.duration)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"删除"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{class:"handler-btn",onClick:function(t){return e.deleteAnimation(o.elId)}},null,8,["onClick"])]})),_:2},1032,["mouseEnterDelay"])])],2)]})),_:1},8,["modelValue","onEnd"]),e.handleElementAnimation?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",_j,[Object(y["createVNode"])(d),Object(y["createElementVNode"])("div",Dj,[zj,Object(y["createVNode"])(m,{min:100,max:5e3,step:100,value:e.handleElementAnimation.duration,onChange:t[3]||(t[3]=function(t){return e.updateElementAnimationDuration(t)}),style:{flex:"3"}},null,8,["value"])])])):Object(y["createCommentVNode"])("",!0)])}var Fj,Rj=[{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"}]}],Pj=1e3,Hj={},qj=Object(T["a"])(Rj);try{for(qj.s();!(Fj=qj.n()).done;){var Wj,Gj=Fj.value,Uj=Object(T["a"])(Gj.children);try{for(Uj.s();!(Wj=Uj.n()).done;){var Xj=Wj.value;Hj[Xj.value]=Xj.name}}catch(sN){Uj.e(sN)}finally{Uj.f()}}}catch(sN){qj.e(sN)}finally{qj.f()}var Zj=Object(y["defineComponent"])({name:"element-animation-panel",components:{Draggable:Gb.a},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.handleElement,o=t.handleElementId,l=Object(g["c"])(e),c=l.currentSlide,a=l.currentSlideAnimations,r=Object(y["ref"])(""),i=Object(y["ref"])(!1),u=$e(),d=u.addHistorySnapshot,s=Rj,f=Object(y["computed"])((function(){if(!a.value)return[];var e,t=[],n=Object(T["a"])(a.value);try{var o=function(){var n=e.value,o=c.value.elements.find((function(e){return e.id===n.elId}));if(!o)return"continue";var l=ta[o.type],a=Hj[n.type];t.push(Object(L["a"])(Object(L["a"])({},n),{},{elType:l,animationType:a}))};for(n.s();!(e=n.n()).done;)o()}catch(sN){n.e(sN)}finally{n.f()}return t})),b=Object(y["computed"])((function(){var e=a.value||[],t=e.find((function(e){return e.elId===o.value}));return t||null})),p=Object(y["computed"])((function(){return b.value?Hj[b.value.type]:null})),m=function(t){var n=a.value.filter((function(e){return e.elId!==t}));e.updateSlide({animations:n}),d()},v=function(t){var n=t.newIndex,o=t.oldIndex;if(o!==n){var l=JSON.parse(JSON.stringify(a.value)),c=l[o];l.splice(o,1),l.splice(n,0,c),e.updateSlide({animations:l}),d()}},O=function(e,t,n){var o="animate__",l=document.querySelector("#editable-element-".concat(e," [class^=editable-element-]"));if(l){var c="".concat(o).concat(t);document.documentElement.style.setProperty("--animate-duration","".concat(n,"ms")),l.classList.add("".concat(o,"animated"),c);var a=function(){document.documentElement.style.removeProperty("--animate-duration"),l.classList.remove("".concat(o,"animated"),c)};l.addEventListener("animationend",a,{once:!0})}},h=function(t){if(a.value){var n=a.value.map((function(e){return e.elId===o.value?Object(L["a"])(Object(L["a"])({},e),{},{type:t}):e}));e.updateSlide({animations:n}),i.value=!1,d();var l=a.value.find((function(e){return e.elId===o.value})),c=(null===l||void 0===l?void 0:l.duration)||Pj;O(o.value,t,c)}},j=function(t){if(a.value&&!(t<100||t>5e3)){var n=a.value.map((function(e){return e.elId===o.value?Object(L["a"])(Object(L["a"])({},e),{},{duration:t}):e}));e.updateSlide({animations:n}),d()}},x=function(t){if(p.value)h(t);else{var n=a.value?JSON.parse(JSON.stringify(a.value)):[];n.push({elId:o.value,type:t,duration:Pj}),e.updateSlide({animations:n}),i.value=!1,d(),O(o.value,t,Pj)}},C=Object(y["ref"])(!1),k=function(e){e?setTimeout((function(){return C.value=!0}),500):C.value=!1};return{handleElement:n,animationPoolVisible:i,animations:s,animationSequence:f,hoverPreviewAnimation:r,handleElementAnimation:b,handleElementAnimationName:p,popoverMaskHide:C,addAnimation:x,deleteAnimation:m,handleDragEnd:v,runAnimation:O,updateElementAnimationDuration:j,handlePopoverVisibleChange:k}}});n("c390");const Yj=Gn()(Zj,[["render",Aj],["__scopeId","data-v-696c81e2"]]);var Jj=Yj,Qj=function(e){return Object(y["pushScopeId"])("data-v-0e2f846d"),e=e(),Object(y["popScopeId"])(),e},Kj={class:"slide-design-panel"},$j=Qj((function(){return Object(y["createElementVNode"])("div",{class:"title"},"背景填充",-1)})),ey={class:"row"},ty=Object(y["createTextVNode"])("纯色填充"),ny=Object(y["createTextVNode"])("图片填充"),oy=Object(y["createTextVNode"])("渐变填充"),ly=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"1"}},null,-1)})),cy=Object(y["createTextVNode"])("缩放"),ay=Object(y["createTextVNode"])("拼贴"),ry=Object(y["createTextVNode"])("缩放铺满"),iy=Object(y["createTextVNode"])("线性渐变"),uy=Object(y["createTextVNode"])("径向渐变"),dy={key:0,class:"background-image-wrapper"},sy={class:"background-image"},fy={key:1,class:"background-gradient-wrapper"},by={class:"row"},py=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"起点颜色:",-1)})),my={class:"row"},vy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"终点颜色:",-1)})),Oy={key:0,class:"row"},hy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"渐变角度:",-1)})),jy={class:"row"},yy=Object(y["createTextVNode"])("应用背景到全部"),gy={class:"row"},xy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"画布尺寸:",-1)})),Cy=Object(y["createTextVNode"])("宽屏 16 : 9"),ky=Object(y["createTextVNode"])("宽屏 16 :10"),Ey=Object(y["createTextVNode"])("标准 4 :3"),wy=Qj((function(){return Object(y["createElementVNode"])("div",{class:"title"},"全局主题",-1)})),Ny={class:"row"},Iy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"字体:",-1)})),Vy={class:"row"},Sy=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"字体颜色:",-1)})),By={class:"row"},Ly=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"背景颜色:",-1)})),Ty={class:"row"},My=Qj((function(){return Object(y["createElementVNode"])("div",{style:{flex:"2"}},"主题色:",-1)})),_y=Object(y["createTextVNode"])(" 预置主题 "),Dy={key:2,class:"theme-list"},zy=["onClick"],Ay={class:"theme-item-content"},Fy={class:"row"},Ry=Object(y["createTextVNode"])("应用主题到全部");function Py(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("SelectOption"),r=Object(y["resolveComponent"])("Select"),i=Object(y["resolveComponent"])("ColorPicker"),u=Object(y["resolveComponent"])("ColorButton"),d=Object(y["resolveComponent"])("Popover"),s=Object(y["resolveComponent"])("IconPlus"),f=Object(y["resolveComponent"])("FileInput"),b=Object(y["resolveComponent"])("Slider"),p=Object(y["resolveComponent"])("Button"),m=Object(y["resolveComponent"])("Divider"),v=Object(y["resolveComponent"])("SelectOptGroup"),O=Object(y["resolveComponent"])("IconDown");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Kj,[$j,Object(y["createElementVNode"])("div",ey,[Object(y["createVNode"])(r,{style:{flex:"10"},value:e.background.type,onChange:t[0]||(t[0]=function(t){return e.updateBackgroundType(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"solid"},{default:Object(y["withCtx"])((function(){return[ty]})),_:1}),Object(y["createVNode"])(a,{value:"image"},{default:Object(y["withCtx"])((function(){return[ny]})),_:1}),Object(y["createVNode"])(a,{value:"gradient"},{default:Object(y["withCtx"])((function(){return[oy]})),_:1})]})),_:1},8,["value"]),ly,"solid"===e.background.type?(Object(y["openBlock"])(),Object(y["createBlock"])(d,{key:0,trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.background.color,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.updateBackground({color:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.background.color||"#fff",style:{flex:"10"}},null,8,["color"])]})),_:1})):"image"===e.background.type?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,style:{flex:"10"},value:e.background.imageSize||"cover",onChange:t[2]||(t[2]=function(t){return e.updateBackground({imageSize:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"contain"},{default:Object(y["withCtx"])((function(){return[cy]})),_:1}),Object(y["createVNode"])(a,{value:"repeat"},{default:Object(y["withCtx"])((function(){return[ay]})),_:1}),Object(y["createVNode"])(a,{value:"cover"},{default:Object(y["withCtx"])((function(){return[ry]})),_:1})]})),_:1},8,["value"])):(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:2,style:{flex:"10"},value:e.background.gradientType,onChange:t[3]||(t[3]=function(t){return e.updateBackground({gradientType:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:"linear"},{default:Object(y["withCtx"])((function(){return[iy]})),_:1}),Object(y["createVNode"])(a,{value:"radial"},{default:Object(y["withCtx"])((function(){return[uy]})),_:1})]})),_:1},8,["value"]))]),"image"===e.background.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",dy,[Object(y["createVNode"])(f,{onChange:t[4]||(t[4]=function(t){return e.uploadBackgroundImage(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("div",sy,[Object(y["createElementVNode"])("div",{class:"content",style:Object(y["normalizeStyle"])({backgroundImage:"url(".concat(e.background.image,")")})},[Object(y["createVNode"])(s)],4)])]})),_:1})])):Object(y["createCommentVNode"])("",!0),"gradient"===e.background.type?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",fy,[Object(y["createElementVNode"])("div",by,[py,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.background.gradientColor[0],"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.updateBackground({gradientColor:[t,e.background.gradientColor[1]]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.background.gradientColor[0],style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",my,[vy,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.background.gradientColor[1],"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.updateBackground({gradientColor:[e.background.gradientColor[0],t]})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.background.gradientColor[1],style:{flex:"3"}},null,8,["color"])]})),_:1})]),"linear"===e.background.gradientType?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Oy,[hy,Object(y["createVNode"])(b,{class:"slider",min:0,max:360,step:15,value:e.background.gradientRotate,onChange:t[7]||(t[7]=function(t){return e.updateBackground({gradientRotate:t})})},null,8,["value"])])):Object(y["createCommentVNode"])("",!0)])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",jy,[Object(y["createVNode"])(p,{style:{flex:"1"},onClick:t[8]||(t[8]=function(t){return e.applyBackgroundAllSlide()})},{default:Object(y["withCtx"])((function(){return[yy]})),_:1})]),Object(y["createVNode"])(m),Object(y["createElementVNode"])("div",gy,[xy,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.viewportRatio,onChange:t[9]||(t[9]=function(t){return e.updateViewportRatio(t)})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a,{value:.5625},{default:Object(y["withCtx"])((function(){return[Cy]})),_:1},8,["value"]),Object(y["createVNode"])(a,{value:.625},{default:Object(y["withCtx"])((function(){return[ky]})),_:1},8,["value"]),Object(y["createVNode"])(a,{value:.75},{default:Object(y["withCtx"])((function(){return[Ey]})),_:1},8,["value"])]})),_:1},8,["value"])]),Object(y["createVNode"])(m),wy,Object(y["createElementVNode"])("div",Ny,[Iy,Object(y["createVNode"])(r,{style:{flex:"3"},value:e.theme.fontName,onChange:t[10]||(t[10]=function(t){return e.updateTheme({fontName:t})})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{label:"系统字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.availableFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",{style:Object(y["normalizeStyle"])({fontFamily:e.value})},Object(y["toDisplayString"])(e.label),5)]})),_:2},1032,["value"])})),128))]})),_:1}),Object(y["createVNode"])(v,{label:"在线字体"},{default:Object(y["withCtx"])((function(){return[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.webFonts,(function(e){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:e.value,value:e.value},{default:Object(y["withCtx"])((function(){return[Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.label),1)]})),_:2},1032,["value"])})),128))]})),_:1})]})),_:1},8,["value"])]),Object(y["createElementVNode"])("div",Vy,[Sy,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.theme.fontColor,"onUpdate:modelValue":t[11]||(t[11]=function(t){return e.updateTheme({fontColor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.theme.fontColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",By,[Ly,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.theme.backgroundColor,"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.updateTheme({backgroundColor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.theme.backgroundColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",Ty,[My,Object(y["createVNode"])(d,{trigger:"click"},{content:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{modelValue:e.theme.themeColor,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.updateTheme({themeColor:t})})},null,8,["modelValue"])]})),default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u,{color:e.theme.themeColor,style:{flex:"3"}},null,8,["color"])]})),_:1})]),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["title dropdown",{active:e.showPresetThemes}]),onClick:t[14]||(t[14]=function(t){return e.togglePresetThemesVisible()}),style:{"margin-top":"20px"}},[_y,Object(y["createVNode"])(O,{class:"icon"})],2),e.showPresetThemes?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Dy,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.themes,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"theme-item",key:n,style:Object(y["normalizeStyle"])({backgroundColor:t.background}),onClick:function(n){return e.updateTheme({fontColor:t.text,backgroundColor:t.background,themeColor:t.color})}},[Object(y["createElementVNode"])("div",Ay,[Object(y["createElementVNode"])("div",{class:"text",style:Object(y["normalizeStyle"])({color:t.text})},"Aa",4),Object(y["createElementVNode"])("div",{class:"color-block",style:Object(y["normalizeStyle"])({backgroundColor:t.color})},null,4)])],12,zy)})),128))])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",Fy,[Object(y["createVNode"])(p,{style:{flex:"1"},onClick:t[15]||(t[15]=function(t){return e.applyThemeAllSlide()})},{default:Object(y["withCtx"])((function(){return[Ry]})),_:1})])])}var Hy=[{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"}],qy=Hy,Wy=B,Gy=Object(y["defineComponent"])({name:"slide-design-panel",components:{ColorButton:Xp},setup:function(){var e=ce(),t=Object(g["c"])(ae()),n=t.availableFonts,o=Object(g["c"])(e),l=o.slides,c=o.currentSlide,a=o.viewportRatio,r=o.theme,i=Object(y["computed"])((function(){return c.value.background?c.value.background:{type:"solid",value:"#fff"}})),u=$e(),d=u.addHistorySnapshot,s=function(t){if("solid"===t){var n=Object(L["a"])(Object(L["a"])({},i.value),{},{type:"solid",color:i.value.color||"#fff"});e.updateSlide({background:n})}else if("image"===t){var o=Object(L["a"])(Object(L["a"])({},i.value),{},{type:"image",image:i.value.image||"",imageSize:i.value.imageSize||"cover"});e.updateSlide({background:o})}else{var l=Object(L["a"])(Object(L["a"])({},i.value),{},{type:"gradient",gradientType:i.value.gradientType||"linear",gradientColor:i.value.gradientColor||["#fff","#fff"],gradientRotate:i.value.gradientRotate||0});e.updateSlide({background:l})}d()},f=function(t){e.updateSlide({background:Object(L["a"])(Object(L["a"])({},i.value),t)}),d()},b=function(e){var t=e[0];t&&tt(t).then((function(e){return f({image:e})}))},p=function(){var t=l.value.map((function(e){return Object(L["a"])(Object(L["a"])({},e),{},{background:c.value.background})}));e.setSlides(t),d()},m=function(t){e.setTheme(t)},v=function(){var t,n=JSON.parse(JSON.stringify(l.value)),o=r.value,c=o.themeColor,a=o.backgroundColor,i=o.fontColor,u=o.fontName,s=Object(T["a"])(n);try{for(s.s();!(t=s.n()).done;){var f=t.value;f.background&&"image"===f.background.type||(f.background=Object(L["a"])(Object(L["a"])({},f.background),{},{type:"solid",color:a}));var b,p=f.elements,m=Object(T["a"])(p);try{for(m.s();!(b=m.n()).done;){var v=b.value;if("shape"===v.type)v.fill=c;else if("line"===v.type)v.color=c;else if("text"===v.type)v.defaultColor=i,v.defaultFontName=u,v.fill&&(v.fill=c);else if("table"===v.type){v.theme&&(v.theme.color=c);var O,h=Object(T["a"])(v.data);try{for(h.s();!(O=h.n()).done;){var j,y=O.value,g=Object(T["a"])(y);try{for(g.s();!(j=g.n()).done;){var x=j.value;x.style&&(x.style.color=i,x.style.fontname=u)}}catch(sN){g.e(sN)}finally{g.f()}}}catch(sN){h.e(sN)}finally{h.f()}}else"chart"===v.type?(v.themeColor=[c],v.gridColor=i):"latex"===v.type?v.color=i:"audio"===v.type&&(v.color=c)}}catch(sN){m.e(sN)}finally{m.f()}}}catch(sN){s.e(sN)}finally{s.f()}e.setSlides(n),d()},O=Object(y["ref"])(!0),h=function(){O.value=!O.value},j=function(t){e.setViewportRatio(t)};return{availableFonts:n,background:i,updateBackgroundType:s,updateBackground:f,uploadBackgroundImage:b,applyBackgroundAllSlide:p,themes:qy,theme:r,webFonts:Wy,updateTheme:m,applyThemeAllSlide:v,viewportRatio:a,updateViewportRatio:j,showPresetThemes:O,togglePresetThemesVisible:h}}});n("eb2c");const Uy=Gn()(Gy,[["render",Py],["__scopeId","data-v-0e2f846d"]]);var Xy=Uy,Zy={class:"slide-animation-panel"},Yy={class:"animation-pool"},Jy=["onClick"],Qy={class:"animation-text"},Ky=Object(y["createTextVNode"])("应用到全部");function $y(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Button");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Zy,[Object(y["createElementVNode"])("div",Yy,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.animations,(function(t){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["animation-item",{active:e.currentTurningMode===t.value}]),key:t.label,onClick:function(n){return e.updateTurningMode(t.value)}},[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["animation-block",t.value])},null,2),Object(y["createElementVNode"])("div",Qy,Object(y["toDisplayString"])(t.label),1)],10,Jy)})),128))]),Object(y["createVNode"])(a,{style:{width:"100%"},onClick:t[0]||(t[0]=function(t){return e.applyAllSlide()})},{default:Object(y["withCtx"])((function(){return[Ky]})),_:1})])}var eg=Object(y["defineComponent"])({name:"slide-animation-panel",setup:function(){var e=ce(),t=Object(g["c"])(e),n=t.slides,o=t.currentSlide,l=Object(y["computed"])((function(){return o.value.turningMode||"slideY"})),c=[{label:"无",value:"no"},{label:"淡入淡出",value:"fade"},{label:"左右推移",value:"slideX"},{label:"上下推移",value:"slideY"}],a=$e(),r=a.addHistorySnapshot,i=function(t){t!==l.value&&(e.updateSlide({turningMode:t}),r())},u=function(){var t=n.value.map((function(e){return Object(L["a"])(Object(L["a"])({},e),{},{turningMode:o.value.turningMode})}));e.setSlides(t),r()};return{currentTurningMode:l,animations:c,updateTurningMode:i,applyAllSlide:u}}});n("6e42");const tg=Gn()(eg,[["render",$y],["__scopeId","data-v-251ceb05"]]);var ng=tg,og={class:"multi-position-panel"},lg=Object(y["createTextVNode"])("水平均匀分布"),cg=Object(y["createTextVNode"])("垂直均匀分布"),ag=Object(y["createTextVNode"])("组合"),rg=Object(y["createTextVNode"])("取消组合");function ig(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconAlignLeft"),r=Object(y["resolveComponent"])("Button"),i=Object(y["resolveComponent"])("Tooltip"),u=Object(y["resolveComponent"])("IconAlignHorizontally"),d=Object(y["resolveComponent"])("IconAlignRight"),s=Object(y["resolveComponent"])("ButtonGroup"),f=Object(y["resolveComponent"])("IconAlignTop"),b=Object(y["resolveComponent"])("IconAlignVertically"),p=Object(y["resolveComponent"])("IconAlignBottom"),m=Object(y["resolveComponent"])("Divider"),v=Object(y["resolveComponent"])("IconGroup"),O=Object(y["resolveComponent"])("IconUngroup");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",og,[Object(y["createVNode"])(s,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"左对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[0]||(t[0]=function(t){return e.alignElement("left")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(a)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"水平居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[1]||(t[1]=function(t){return e.alignElement("horizontal")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(u)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"右对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[2]||(t[2]=function(t){return e.alignElement("right")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(d)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),Object(y["createVNode"])(s,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"上对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[3]||(t[3]=function(t){return e.alignElement("top")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(f)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"垂直居中"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[4]||(t[4]=function(t){return e.alignElement("vertical")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b)]})),_:1})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(i,{mouseLeaveDelay:0,mouseEnterDelay:.5,title:"下对齐"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[5]||(t[5]=function(t){return e.alignElement("bottom")})},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p)]})),_:1})]})),_:1},8,["mouseEnterDelay"])]})),_:1}),e.displayItemCount>2?(Object(y["openBlock"])(),Object(y["createBlock"])(s,{key:0,class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[6]||(t[6]=function(t){return e.uniformHorizontalDisplay()})},{default:Object(y["withCtx"])((function(){return[lg]})),_:1}),Object(y["createVNode"])(r,{style:{flex:"1"},onClick:t[7]||(t[7]=function(t){return e.uniformVerticalDisplay()})},{default:Object(y["withCtx"])((function(){return[cg]})),_:1})]})),_:1})):Object(y["createCommentVNode"])("",!0),Object(y["createVNode"])(m),Object(y["createVNode"])(s,{class:"row"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(r,{disabled:!e.canCombine,onClick:t[8]||(t[8]=function(t){return e.combineElements()}),style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(v,{style:{"margin-right":"3px"}}),ag]})),_:1},8,["disabled"]),Object(y["createVNode"])(r,{disabled:e.canCombine,onClick:t[9]||(t[9]=function(t){return e.uncombineElements()}),style:{flex:"1"}},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{style:{"margin-right":"3px"}}),rg]})),_:1},8,["disabled"])]})),_:1})])}var ug=function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeElementList,l=Object(g["c"])(e),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=function(t){var l,a=Ue(o.value),i=a.minX,u=a.maxX,d=a.minY,s=a.maxY,f=JSON.parse(JSON.stringify(c.value.elements)),b={},p=Object(T["a"])(o.value);try{var m=function(){var e=l.value;if(e.groupId&&!b[e.groupId]){var t=o.value.filter((function(t){return t.groupId===e.groupId}));b[e.groupId]=Ue(t)}};for(p.s();!(l=p.n()).done;)m()}catch(sN){p.e(sN)}finally{p.f()}if(t===E.LEFT)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.minX-i;e.left=e.left-o}else if("rotate"in e&&e.rotate){var l=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),c=l.offsetX;e.left=i-c}else e.left=i}));else if(t===E.RIGHT)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.maxX-u;e.left=e.left-o}else{var l="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;if("rotate"in e&&e.rotate){var c=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetX;e.left=u-l+a}else e.left=u-l}}));else if(t===E.TOP)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.minY-d;e.top=e.top-o}else if("rotate"in e&&e.rotate){var l=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),c=l.offsetY;e.top=d-c}else e.top=d}));else if(t===E.BOTTOM)f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=t.maxY-s;e.top=e.top-o}else{var l="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;if("rotate"in e&&e.rotate){var c=We({left:e.left,top:e.top,width:e.width,height:e.height,rotate:e.rotate}),a=c.offsetY;e.top=s-l+a}else e.top=s-l}}));else if(t===E.HORIZONTAL){var v=(i+u)/2;f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=(t.maxX+t.minX)/2,l=o-v;e.left=e.left-l}else{var c="line"===e.type?Math.max(e.start[0],e.end[0]):e.width;e.left=v-c/2}}))}else if(t===E.VERTICAL){var O=(d+s)/2;f.forEach((function(e){if(n.value.includes(e.id))if(e.groupId){var t=b[e.groupId],o=(t.maxY+t.minY)/2,l=o-O;e.top=e.top-l}else{var c="line"===e.type?Math.max(e.start[1],e.end[1]):e.height;e.top=O-c/2}}))}e.updateSlide({elements:f}),r()};return{alignActiveElement:i}},dg=(n("4e82"),function(){var e=ce(),t=Object(g["c"])(ae()),n=t.activeElementIdList,o=t.activeElementList,l=Object(g["c"])(e),c=l.currentSlide,a=$e(),r=a.addHistorySnapshot,i=Object(y["computed"])((function(){var e,t=0,n=[],l=Object(T["a"])(o.value);try{for(l.s();!(e=l.n()).done;){var c=e.value;c.groupId?n.includes(c.groupId)||(n.push(c.groupId),t+=1):t+=1}}catch(sN){l.e(sN)}finally{l.f()}return t})),u=function(){var t,l=Ue(o.value),a=l.minX,i=l.maxX,u=JSON.parse(JSON.stringify(o.value)),d=JSON.parse(JSON.stringify(c.value.elements)),s=[],f=[],b=Object(T["a"])(u);try{var p=function(){var e=t.value;if(e.groupId){var n=f.find((function(t){return t.groupId===e.groupId}));n?f=f.map((function(t){return t.groupId===e.groupId?Object(L["a"])(Object(L["a"])({},t),{},{els:[].concat(Object(K["a"])(t.els),[e])}):t})):f.push({groupId:e.groupId,els:[e]})}else{var o=Ge(e),l=o.minX,c=o.maxX;s.push({min:l,max:c,el:e})}};for(b.s();!(t=b.n()).done;)p()}catch(sN){b.e(sN)}finally{b.f()}var m,v=[],O=Object(T["a"])(f);try{for(O.s();!(m=O.n()).done;){var h=m.value,j=Ue(h.els),y=j.minX,g=j.maxX;v.push({min:y,max:g,els:h.els})}}catch(sN){O.e(sN)}finally{O.f()}var x=[].concat(s,v);x.sort((function(e,t){return e.min-t.min}));var C,k=0,E=Object(T["a"])(x);try{for(E.s();!(C=E.n()).done;){var w=C.value,N=w.max-w.min;k+=N}}catch(sN){E.e(sN)}finally{E.f()}var I=(i-a-k)/(x.length-1),V=[],S=x[0],B={min:S.min,max:S.max};if("el"in S)V.push({pos:S.min,el:S.el});else{var M,_=Object(T["a"])(S.els);try{for(_.s();!(M=_.n()).done;){var D=M.value,z=Ge(D),A=z.minX;V.push({pos:A,el:D})}}catch(sN){_.e(sN)}finally{_.f()}}for(var F=1;F","l","o","g","l","g","l","n","⨂","⨁","⨄","⨃","⨅","⨆","√","∛","∜","∝","∞","∟","∠","∡","∢","∧","∨","∩","∪","∫","∬","∭","∮","∯","∰","∱","∲","∳","∴","∵","∼","∽","∾","∿","≃","≄","≅","≆","≇","≈","≊","≋","≌","≍","≎","≏","≐","≑","≒","≓","≔","≕","≤","≥","≦","≧","≨","≩","≪","≫","≺","≻","≼","≽","≾","≿","⊀","⊁","⊂","⊃","⊄","⊅","⊆","⊇","⊈","⊉","⊊","⊋","⊏","⊐","⊑","⊒","⊓","⊔","⊢","⊣","⊤","⊥","⊦","⊧","⊨","⊩","⊪","⊫","⊬","⊭","⊮","⊯","⊲","⊳","⊴","⊵","⋀","⋁","⋂","⋃","⋉","⋊","⋋","⋌","⟨","⟩","⟪","⟫","⟮","⟯","⧼","⧽","⦰"]},{key:"arrow",label:"箭头",children:["←","↑","→","↓","↔","↕","↖","↗","↘","↙","↚","↛","↜","↝","↞","↟","↠","↡","↢","↣","↤","↥","↦","↧","↨","↫","↬","↭","↮","↯","↰","↱","↲","↳","↴","↵","↶","↷","↸","↹","↺","↻","↼","↽","↾","↿","⇀","⇁","⇂","⇃","⇄","⇅","⇆","⇇","⇈","⇉","⇊","⇋","⇌","⇍","⇎","⇏","⇐","⇑","⇒","⇓","⇔","⇕","⇖","⇗","⇘","⇙","⇚","⇛","⇜","⇝","⇞","⇟","⇠","⇡","⇢","⇣","⇤","⇥","⇦","⇧","⇨","⇩","⇪","⇫","⇬","⇭","⇮","⇯","⇰","⇱","⇲","⇳","⇴","⇵","⇶","⇷","⇸","⇹","⇺","⇻","⇼","⇽","⇾","⇿"]},{key:"graph",label:"图形",children:["▢","▣","▤","▥","▦","▧","▨","▩","▭","▮","▯","▰","▱","▲","▷","▼","◁","◈","◉","◍","◐","◑","◒","◓","◔","◕","◧","◨","◩","◪","◫","◬","◭","◮"]}],xg=gg,Cg=Object(y["defineComponent"])({name:"symbol-panel",setup:function(){var e=Object(y["ref"])(xg[0].key),t=Object(y["computed"])((function(){var t=xg.find((function(t){return t.key===e.value}));return(null===t||void 0===t?void 0:t.children)||[]})),n=function(e){Cr.emit(za.RICH_TEXT_COMMAND,{command:"insert",value:e})};return{symbolPoolList:xg,symbolPool:t,selectedSymbolKey:e,selectSymbol:n}}});n("56b6");const kg=Gn()(Cg,[["render",yg],["__scopeId","data-v-6b8c5938"]]);var Eg=kg,wg=Object(y["defineComponent"])({name:"toolbar",setup:function(){var e=ae(),t=Object(g["c"])(e),n=t.activeElementIdList,o=t.handleElement,l=t.toolbarState,c=Object(y["computed"])((function(){var e;return"text"===(null===(e=o.value)||void 0===e?void 0:e.type)?[{label:"样式",value:C.EL_STYLE},{label:"符号",value:C.SYMBOL},{label:"位置",value:C.EL_POSITION},{label:"动画",value:C.EL_ANIMATION}]:[{label:"样式",value:C.EL_STYLE},{label:"位置",value:C.EL_POSITION},{label:"动画",value:C.EL_ANIMATION}]})),a=[{label:"设计",value:C.SLIDE_DESIGN},{label:"切换",value:C.SLIDE_ANIMATION},{label:"动画",value:C.EL_ANIMATION}],r=[{label:"位置",value:C.MULTI_POSITION},{label:"样式",value:C.EL_STYLE}],i=function(t){e.setToolbarState(t)},u=Object(y["computed"])((function(){return n.value.length?n.value.length>1?r:c.value:a}));Object(y["watch"])(u,(function(){var t=u.value.map((function(e){return e.value}));t.includes(l.value)||e.setToolbarState(t[0])}));var d=Object(y["computed"])((function(){var e,t=(e={},Object(fe["a"])(e,C.EL_STYLE,Qh),Object(fe["a"])(e,C.EL_POSITION,yj),Object(fe["a"])(e,C.EL_ANIMATION,Jj),Object(fe["a"])(e,C.SLIDE_DESIGN,Xy),Object(fe["a"])(e,C.SLIDE_ANIMATION,ng),Object(fe["a"])(e,C.MULTI_POSITION,bg),Object(fe["a"])(e,C.SYMBOL,Eg),e);return t[l.value]||null}));return{toolbarState:l,currentTabs:u,setToolbarState:i,currentPanelComponent:d}}});n("3b1d");const Ng=Gn()(wg,[["render",cp],["__scopeId","data-v-84601b0a"]]);var Ig=Ng,Vg={class:"remark"},Sg=["value"];function Bg(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Vg,[Object(y["createElementVNode"])("div",{class:"resize-handler",onMousedown:t[0]||(t[0]=function(t){return e.resize(t)})},null,32),Object(y["createElementVNode"])("textarea",{value:e.remark,placeholder:"点击输入演讲者备注",onInput:t[1]||(t[1]=function(t){return e.handleInput(t)})},null,40,Sg)])}var Lg=Object(y["defineComponent"])({name:"remark",emits:["update:height"],props:{height:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=ce(),l=Object(g["c"])(o),c=l.currentSlide,a=Object(y["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.updateSlide({remark:t})},i=function(t){var o=!0,l=t.pageY,c=e.height;document.onmousemove=function(e){if(o){var t=e.pageY,a=t-l,r=-a+c;r<40&&(r=40),r>120&&(r=120),n("update:height",r)}},document.onmouseup=function(){o=!1,document.onmousemove=null,document.onmouseup=null}};return{remark:a,handleInput:r,resize:i}}});n("6339");const Tg=Gn()(Lg,[["render",Bg],["__scopeId","data-v-7ed67bb3"]]);var Mg=Tg,_g=Object(y["defineComponent"])({name:"editor",components:{EditorHeader:Uc,Canvas:_s,CanvasTool:zb,Thumbnails:ep,Toolbar:Ig,Remark:Mg},setup:function(){var e=Object(y["ref"])(40);return gt(),xt(),{remarkHeight:e}}});n("1fec");const Dg=Gn()(_g,[["render",Ee],["__scopeId","data-v-55178b6a"]]);var zg=Dg,Ag={class:"pptist-screen"};function Fg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BaseView"),r=Object(y["resolveComponent"])("PresenterView");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ag,["base"===e.viewMode?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,changeViewMode:e.changeViewMode},null,8,["changeViewMode"])):"presenter"===e.viewMode?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:1,changeViewMode:e.changeViewMode},null,8,["changeViewMode"])):Object(y["createCommentVNode"])("",!0)])}var Rg={class:"tools-left"},Pg={class:"content"};function Hg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ScreenSlideList"),r=Object(y["resolveComponent"])("SlideThumbnails"),i=Object(y["resolveComponent"])("WritingBoardTool"),u=Object(y["resolveComponent"])("IconLeftTwo"),d=Object(y["resolveComponent"])("IconRightTwo"),s=Object(y["resolveComponent"])("IconWrite"),f=Object(y["resolveComponent"])("Tooltip"),b=Object(y["resolveComponent"])("IconMagic"),p=Object(y["resolveComponent"])("IconListView"),m=Object(y["resolveComponent"])("IconOffScreenOne"),v=Object(y["resolveComponent"])("IconFullScreenOne"),O=Object(y["resolveComponent"])("IconPower"),h=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["base-view",{"laser-pen":e.laserPen}])},[Object(y["withDirectives"])(Object(y["createVNode"])(a,{slideWidth:e.slideWidth,slideHeight:e.slideHeight,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen,onMousewheel:t[0]||(t[0]=function(t){return e.mousewheelListener(t)}),onTouchstart:t[1]||(t[1]=function(t){return e.touchStartListener(t)}),onTouchend:t[2]||(t[2]=function(t){return e.touchEndListener(t)})},null,8,["slideWidth","slideHeight","animationIndex","turnSlideToId","manualExitFullscreen"]),[[h,e.contextmenus]]),e.slideThumbnailModelVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,turnSlideToIndex:e.turnSlideToIndex,onClose:t[3]||(t[3]=function(t){return e.slideThumbnailModelVisible=!1})},null,8,["turnSlideToIndex"])):Object(y["createCommentVNode"])("",!0),e.writingBoardToolVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(i,{key:1,slideWidth:e.slideWidth,slideHeight:e.slideHeight,onClose:t[4]||(t[4]=function(t){return e.writingBoardToolVisible=!1})},null,8,["slideWidth","slideHeight"])):Object(y["createCommentVNode"])("",!0),Object(y["createElementVNode"])("div",Rg,[Object(y["createVNode"])(u,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[5]||(t[5]=function(t){return e.execPrev()})}),Object(y["createVNode"])(d,{class:"tool-btn",theme:"two-tone",fill:["#111","#fff"],onClick:t[6]||(t[6]=function(t){return e.execNext()})})]),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["tools-right",{visible:e.rightToolsVisible}]),onMouseleave:t[14]||(t[14]=function(t){return e.rightToolsVisible=!1}),onMouseenter:t[15]||(t[15]=function(t){return e.rightToolsVisible=!0})},[Object(y["createElementVNode"])("div",Pg,[Object(y["createElementVNode"])("div",{class:"tool-btn page-number",onClick:t[7]||(t[7]=function(t){return e.slideThumbnailModelVisible=!0})},"幻灯片 "+Object(y["toDisplayString"])(e.slideIndex+1)+" / "+Object(y["toDisplayString"])(e.slides.length),1),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"画笔工具"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(s,{class:"tool-btn",onClick:t[8]||(t[8]=function(t){return e.writingBoardToolVisible=!0})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"激光笔"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(b,{class:Object(y["normalizeClass"])(["tool-btn",{active:e.laserPen}]),onClick:t[9]||(t[9]=function(t){return e.laserPen=!e.laserPen})},null,8,["class"])]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"演讲者视图"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(p,{class:"tool-btn",onClick:t[10]||(t[10]=function(t){return e.changeViewMode("presenter")})})]})),_:1},8,["mouseEnterDelay"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:e.fullscreenState?"退出全屏":"进入全屏"},{default:Object(y["withCtx"])((function(){return[e.fullscreenState?(Object(y["openBlock"])(),Object(y["createBlock"])(m,{key:0,class:"tool-btn",onClick:t[11]||(t[11]=function(t){return e.manualExitFullscreen()})})):(Object(y["openBlock"])(),Object(y["createBlock"])(v,{key:1,class:"tool-btn",onClick:t[12]||(t[12]=function(t){return e.enterFullscreen()})}))]})),_:1},8,["mouseEnterDelay","title"]),Object(y["createVNode"])(f,{mouseLeaveDelay:0,mouseEnterDelay:.3,title:"结束放映"},{default:Object(y["withCtx"])((function(){return[Object(y["createVNode"])(O,{class:"tool-btn",onClick:t[13]||(t[13]=function(t){return e.exitScreening()})})]})),_:1},8,["mouseEnterDelay"])])],34)],2)}var qg=function(){var e=ce(),t=Object(g["c"])(e),n=t.slides,o=t.slideIndex,l=t.currentSlide,c=Object(y["computed"])((function(){return l.value.animations||[]})),a=Object(y["ref"])(0),r=function(){var e="animate__",t=c.value[a.value];a.value+=1;var n=document.querySelector("#screen-element-".concat(t.elId," [class^=base-element-]"));if(n){var o="".concat(e).concat(t.type);document.documentElement.style.setProperty("--animate-duration","".concat(t.duration,"ms")),n.classList.add("".concat(e,"animated"),o);var l=function(){document.documentElement.style.removeProperty("--animate-duration"),n.classList.remove("".concat(e,"animated"),o)};n.addEventListener("animationend",l,{once:!0})}},i=Object(y["ref"])(0),u=function(){i.value&&(clearInterval(i.value),i.value=0)};Object(y["onUnmounted"])(u);var d=Object(te["throttle"])((function(e){Se["a"].success(e)}),1e3,{leading:!0,trailing:!1}),s=function(){if(c.value.length&&a.value>0)a.value-=1;else if(o.value>0){e.updateSlideIndex(o.value-1);var t=c.value?c.value.length:0;a.value=t}else d("已经是第一页了")},f=function(){c.value.length&&a.value0&&f()}),500,{leading:!0,trailing:!1}),m=Object(y["ref"])(null),v=function(e){m.value={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY}},O=function(e){if(m.value){var t=Math.abs(m.value.x-e.changedTouches[0].pageX),n=e.changedTouches[0].pageY-m.value.y;Math.abs(n)>t&&Math.abs(n)>50&&(m.value=null,n>0?s():f())}},h=function(e){var t=e.key.toUpperCase();t===V.UP||t===V.LEFT?s():t!==V.DOWN&&t!==V.RIGHT&&t!==V.SPACE&&t!==V.ENTER||f()};Object(y["onMounted"])((function(){return document.addEventListener("keydown",h)})),Object(y["onUnmounted"])((function(){return document.removeEventListener("keydown",h)}));var j=function(){e.updateSlideIndex(o.value-1),a.value=0},x=function(){e.updateSlideIndex(o.value+1),a.value=0},C=function(t){e.updateSlideIndex(t),a.value=0},k=function(t){var o=n.value.findIndex((function(e){return e.id===t}));-1!==o&&(e.updateSlideIndex(o),a.value=0)};return{autoPlayTimer:i,autoPlay:b,closeAutoPlay:u,mousewheelListener:p,touchStartListener:v,touchEndListener:O,turnPrevSlide:j,turnNextSlide:x,turnSlideToIndex:C,turnSlideToId:k,execPrev:s,execNext:f,animationIndex:a}},Wg=function(e){var t=ce(),n=Object(g["c"])(t),o=n.viewportRatio,l=Object(y["ref"])(0),c=Object(y["ref"])(0),a=function(){var t,n,a=(null===e||void 0===e?void 0:e.value)||document.body,r=a.clientWidth,i=a.clientHeight;i/r===o.value?(t=r,n=i):i/r>o.value?(t=r,n=r*o.value):(t=i/o.value,n=i),l.value=t,c.value=n};return Object(y["onMounted"])((function(){a(),window.addEventListener("resize",a)})),Object(y["onUnmounted"])((function(){window.removeEventListener("resize",a)})),{slideWidth:l,slideHeight:c}},Gg=function(){var e=Object(y["ref"])(!0),t=Object(y["ref"])(!0),n=jt(),o=n.exitScreening,l=function(){e.value=ht(),!e.value&&t.value&&o(),t.value=!0};Object(y["onMounted"])((function(){e.value=ht(),window.addEventListener("resize",l)})),Object(y["onUnmounted"])((function(){return window.removeEventListener("resize",l)}));var c=function(){e.value&&(t.value=!1,Ot())};return{fullscreenState:e,manualExitFullscreen:c}},Ug={class:"screen-slide-list"};function Xg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ScreenSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Ug,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["slide-item","turning-mode-".concat(t.turningMode||"slideY"),{current:n===e.slideIndex,before:ne.slideIndex,hide:(n===e.slideIndex-1||n===e.slideIndex+1)&&t.turningMode!==e.currentSlide.turningMode}]),key:t.id},[Math.abs(e.slideIndex-n)<2?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:"slide-content",style:Object(y["normalizeStyle"])({width:e.slideWidth+"px",height:e.slideHeight+"px"})},[Object(y["createVNode"])(a,{slide:t,scale:e.scale,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen},null,8,["slide","scale","animationIndex","turnSlideToId","manualExitFullscreen"])],4)):Object(y["createCommentVNode"])("",!0)],2)})),128))])}function Zg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("ScreenElement");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"screen-slide",style:Object(y["normalizeStyle"])({width:e.VIEWPORT_SIZE+"px",height:e.VIEWPORT_SIZE*e.viewportRatio+"px",transform:"scale(".concat(e.scale,")")})},[Object(y["createElementVNode"])("div",{class:"background",style:Object(y["normalizeStyle"])(Object(L["a"])({},e.backgroundStyle))},null,4),(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slide.elements,(function(t,n){return Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:t.id,elementInfo:t,elementIndex:n+1,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen},null,8,["elementInfo","elementIndex","animationIndex","turnSlideToId","manualExitFullscreen"])})),128))],4)}var Yg=["id","title"];function Jg(e,t,n,o,l,c){var a;return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["screen-element",{link:e.elementInfo.link}]),id:"screen-element-".concat(e.elementInfo.id),style:Object(y["normalizeStyle"])({zIndex:e.elementIndex,color:e.theme.fontColor,fontFamily:e.theme.fontName,visibility:e.needWaitAnimation?"hidden":"visible"}),title:(null===(a=e.elementInfo.link)||void 0===a?void 0:a.target)||"",onClick:t[0]||(t[0]=function(t){return e.openLink()})},[(Object(y["openBlock"])(),Object(y["createBlock"])(Object(y["resolveDynamicComponent"])(e.currentElementComponent),{elementInfo:e.elementInfo},null,8,["elementInfo"]))],14,Yg)}function Qg(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("BaseChartElement");return Object(y["openBlock"])(),Object(y["createBlock"])(a,{class:"screen-element-chart",elementInfo:e.elementInfo,needScaleSize:!1},null,8,["elementInfo"])}var Kg=Object(y["defineComponent"])({name:"screen-element-chart",components:{BaseChartElement:tc},props:{elementInfo:{type:Object,required:!0}}});const $g=Gn()(Kg,[["render",Qg]]);var ex=$g,tx={class:"element-content"};function nx(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("VideoPlayer");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"screen-element-video",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["createElementVNode"])("div",tx,[e.inCurrentSlide?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:0,width:e.elementInfo.width,height:e.elementInfo.height,src:e.elementInfo.src,poster:e.elementInfo.poster,scale:e.scale},null,8,["width","height","src","poster","scale"])):Object(y["createCommentVNode"])("",!0)])],4)],4)}var ox=Object(y["defineComponent"])({name:"screen-element-video",components:{VideoPlayer:lu},props:{elementInfo:{type:Object,required:!0}},setup:function(){var e=Object(g["c"])(ce()),t=e.currentSlide,n=Object(y["inject"])(vo)||Object(y["ref"])(1),o=Object(y["inject"])(Oo)||Object(y["ref"])(""),l=Object(y["computed"])((function(){return t.value.id===o.value}));return{scale:n,inCurrentSlide:l}}});n("0419");const lx=Gn()(ox,[["render",nx],["__scopeId","data-v-0ef8b6c0"]]);var cx=lx,ax={class:"element-content"};function rx(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconVolumeNotice"),r=Object(y["resolveComponent"])("AudioPlayer");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"screen-element-audio",style:Object(y["normalizeStyle"])({top:e.elementInfo.top+"px",left:e.elementInfo.left+"px",width:e.elementInfo.width+"px",height:e.elementInfo.height+"px"})},[Object(y["createElementVNode"])("div",{class:"rotate-wrapper",style:Object(y["normalizeStyle"])({transform:"rotate(".concat(e.elementInfo.rotate,"deg)")})},[Object(y["createElementVNode"])("div",ax,[Object(y["createVNode"])(a,{class:"audio-icon",style:Object(y["normalizeStyle"])({fontSize:e.audioIconSize,color:e.elementInfo.color}),onClick:t[0]||(t[0]=function(t){return e.toggle()})},null,8,["style"]),e.inCurrentSlide?(Object(y["openBlock"])(),Object(y["createBlock"])(r,{key:0,class:"audio-player",ref:"audioPlayerRef",style:Object(y["normalizeStyle"])(Object(L["a"])({},e.audioPlayerPosition)),src:e.elementInfo.src,loop:e.elementInfo.loop,autoplay:e.elementInfo.autoplay,scale:e.scale},null,8,["style","src","loop","autoplay","scale"])):Object(y["createCommentVNode"])("",!0)])],4)],4)}var ix=Object(y["defineComponent"])({name:"screen-element-audio",components:{AudioPlayer:Bu},props:{elementInfo:{type:Object,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.viewportRatio,o=t.currentSlide,l=Object(y["inject"])(vo)||Object(y["ref"])(1),c=Object(y["inject"])(Oo)||Object(y["ref"])(""),a=Object(y["computed"])((function(){return o.value.id===c.value})),r=Object(y["computed"])((function(){return Math.min(e.elementInfo.width,e.elementInfo.height)+"px"})),i=Object(y["computed"])((function(){var t=nt,o=nt*n.value,c=280/l.value,a=50/l.value,r=e.elementInfo.width,i=e.elementInfo.height,u=e.elementInfo.left,d=e.elementInfo.top,s=0,f=i;return u+c>=t&&(s=r-c),d+i+a>=o&&(f=-a),{left:s+"px",top:f+"px"}})),u=Object(y["ref"])(),d=function(){u.value&&u.value.toggle()};return{scale:l,inCurrentSlide:a,audioIconSize:r,audioPlayerPosition:i,audioPlayerRef:u,toggle:d}}});n("a52e");const ux=Gn()(ix,[["render",rx],["__scopeId","data-v-1adba489"]]);var dx=ux,sx=Object(y["defineComponent"])({name:"screen-element",props:{elementInfo:{type:Object,required:!0},elementIndex:{type:Number,required:!0},animationIndex:{type:Number,default:-1},turnSlideToId:{type:Function,required:!0},manualExitFullscreen:{type:Function,required:!0}},setup:function(e){var t=Object(y["computed"])((function(){var t,n=(t={},Object(fe["a"])(t,Ne.IMAGE,tl),Object(fe["a"])(t,Ne.TEXT,fl),Object(fe["a"])(t,Ne.SHAPE,Bl),Object(fe["a"])(t,Ne.LINE,Gl),Object(fe["a"])(t,Ne.CHART,ex),Object(fe["a"])(t,Ne.TABLE,Oc),Object(fe["a"])(t,Ne.LATEX,Ec),Object(fe["a"])(t,Ne.VIDEO,cx),Object(fe["a"])(t,Ne.AUDIO,dx),t);return n[e.elementInfo.type]||null})),n=Object(g["c"])(ce()),o=n.currentSlide,l=n.theme,c=Object(y["computed"])((function(){var t=o.value.animations||[],n=t.findIndex((function(t){return t.elId===e.elementInfo.id}));return-1!==n&&n>=e.animationIndex})),a=function(){var t=e.elementInfo.link;t&&("web"===t.type?(e.manualExitFullscreen(),window.open(t.target)):"slide"===t.type&&e.turnSlideToId(t.target))};return{currentElementComponent:t,needWaitAnimation:c,theme:l,openLink:a}}});n("70bc");const fx=Gn()(sx,[["render",Jg],["__scopeId","data-v-360fef5f"]]);var bx=fx,px=Object(y["defineComponent"])({name:"screen-slide",components:{ScreenElement:bx},props:{slide:{type:Object,required:!0},scale:{type:Number,required:!0},animationIndex:{type:Number,default:-1},turnSlideToId:{type:Function,required:!0},manualExitFullscreen:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.viewportRatio,o=Object(y["computed"])((function(){return e.slide.background})),l=ho(o),c=l.backgroundStyle,a=Object(y["computed"])((function(){return e.slide.id}));return Object(y["provide"])(Oo,a),{backgroundStyle:c,VIEWPORT_SIZE:nt,viewportRatio:n}}});n("ad1c");const mx=Gn()(px,[["render",Zg],["__scopeId","data-v-30708559"]]);var vx=mx,Ox=Object(y["defineComponent"])({name:"screen-slide-list",components:{ScreenSlide:vx},props:{slideWidth:{type:Number,required:!0},slideHeight:{type:Number,required:!0},animationIndex:{type:Number,default:-1},turnSlideToId:{type:Function,required:!0},manualExitFullscreen:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.slides,o=t.slideIndex,l=t.currentSlide,c=Object(y["computed"])((function(){return e.slideWidth/nt}));return Object(y["provide"])(vo,c),{slides:n,slideIndex:o,currentSlide:l,scale:c}}});n("cc60");const hx=Gn()(Ox,[["render",Xg],["__scopeId","data-v-056764ac"]]);var jx=hx,yx={class:"slide-thumbnails"},gx={class:"return-button"},xx={class:"slide-thumbnails-content"},Cx=["onClick"];function kx(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconArrowCircleLeft"),r=Object(y["resolveComponent"])("ThumbnailSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",yx,[Object(y["createElementVNode"])("div",gx,[Object(y["createVNode"])(a,{class:"icon",onClick:t[0]||(t[0]=function(t){return e.close()})})]),Object(y["createElementVNode"])("div",xx,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["thumbnail",{active:n===e.slideIndex}]),key:t.id,onClick:function(t){return e.turnSlide(n)}},[Object(y["createVNode"])(r,{slide:t,size:150,visible:n=o?a:c-i/o*c,-1===r?n:1*n/3+2*r/3},C=function(t,n){var o=(new Date).getTime();if("pen"===e.model){var c=g(t,n),i=o-a,u=x(c,i);h(t,n,u),r=u}else"mark"===e.model?h(t,n,zx):j(t,n);l={x:t,y:n},a=(new Date).getTime()},k=function(e){if(!o.value)return[0,0];var t=e instanceof MouseEvent?e:e.changedTouches[0],n=o.value.getBoundingClientRect(),l=t.pageX-n.x,c=t.pageY-n.y;return[l,c]},E=function(e){var t=k(e),n=Object(He["a"])(t,2),o=n[0],r=n[1],d=o/f.value,s=r/b.value;c=!0,l={x:d,y:s},a=(new Date).getTime(),e instanceof TouchEvent&&(i.value={x:o,y:r},u.value=!0)},w=function(e){var t=k(e),n=Object(He["a"])(t,2),o=n[0],l=n[1],a=o/f.value,r=l/b.value;i.value={x:o,y:l},c&&C(a,r)},N=function(){c&&(c=!1)},I=function(){t&&o.value&&t.clearRect(0,0,o.value.width,o.value.height)};return{mouse:i,mouseInCanvas:u,penSize:_x,rubberSize:Dx,markSize:zx,writingBoardRef:n,canvasRef:o,canvasWidth:d,canvasHeight:s,handleMousedown:E,handleMousemove:w,handleMouseup:N,clearCanvas:I}}});n("7307");const Fx=Gn()(Ax,[["render",Mx],["__scopeId","data-v-3dfd4579"]]);var Rx=Fx,Px=["#000000","#ffffff","#1e497b","#4e81bb","#e2534d","#9aba60","#8165a0","#47acc5","#f9974c","#ffff3a"],Hx=Object(y["defineComponent"])({name:"writing-board-tool",emits:["close"],components:{WritingBoard:Rx},props:{slideWidth:{type:Number,required:!0},slideHeight:{type:Number,required:!0},position:{type:Object,default:function(){return{right:"5px",bottom:"5px"}}}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(),l=Object(y["ref"])("#e2534d"),c=Object(y["ref"])("pen"),a=Object(y["ref"])(!1),r=function(e){c.value=e},i=function(){o.value.clearCanvas()},u=function(e){"eraser"===c.value&&(c.value="pen"),l.value=e},d=function(){n("close")};return{writingBoardRef:o,writingBoardColors:Px,writingBoardColor:l,writingBoardModel:c,blackboard:a,changeModel:r,clearCanvas:i,changeColor:u,closeWritingBoard:d}}});n("beeb");const qx=Gn()(Hx,[["render",Bx],["__scopeId","data-v-19b10edd"]]);var Wx=qx,Gx=Object(y["defineComponent"])({name:"screen",components:{ScreenSlideList:jx,SlideThumbnails:Nx,WritingBoardTool:Wx},props:{changeViewMode:{type:Function,required:!0}},setup:function(e){var t=Object(g["c"])(ce()),n=t.slides,o=t.slideIndex,l=qg(),c=l.autoPlayTimer,a=l.autoPlay,r=l.closeAutoPlay,i=l.mousewheelListener,u=l.touchStartListener,d=l.touchEndListener,s=l.turnPrevSlide,f=l.turnNextSlide,b=l.turnSlideToIndex,p=l.turnSlideToId,m=l.execPrev,v=l.execNext,O=l.animationIndex,h=Wg(),j=h.slideWidth,x=h.slideHeight,C=jt(),k=C.exitScreening,E=Gg(),w=E.fullscreenState,N=E.manualExitFullscreen,I=Object(y["ref"])(!1),V=Object(y["ref"])(!1),S=Object(y["ref"])(!1),B=Object(y["ref"])(!1),L=function(){return[{text:"上一页",subText:"↑ ←",disable:o.value<=0,handler:function(){return s()}},{text:"下一页",subText:"↓ →",disable:o.value>=n.value.length-1,handler:function(){return f()}},{text:"第一页",disable:0===o.value,handler:function(){return b(0)}},{text:"最后一页",disable:o.value===n.value.length-1,handler:function(){return b(n.value.length-1)}},{divider:!0},{text:"显示工具栏",handler:function(){return I.value=!0}},{text:"查看所有幻灯片",handler:function(){return S.value=!0}},{text:"画笔工具",handler:function(){return V.value=!0}},{text:"演讲者视图",handler:function(){return e.changeViewMode("presenter")}},{divider:!0},{text:c.value?"取消自动放映":"自动放映",handler:c.value?r:a},{text:"结束放映",subText:"ESC",handler:k}]};return{slides:n,slideIndex:o,slideWidth:j,slideHeight:x,mousewheelListener:i,touchStartListener:u,touchEndListener:d,animationIndex:O,contextmenus:L,execPrev:m,execNext:v,turnSlideToIndex:b,turnSlideToId:p,slideThumbnailModelVisible:S,writingBoardToolVisible:V,rightToolsVisible:I,fullscreenState:w,exitScreening:k,enterFullscreen:vt,manualExitFullscreen:N,laserPen:B}}});n("03e7");const Ux=Gn()(Gx,[["render",Hg],["__scopeId","data-v-2ed6935e"]]);var Xx=Ux,Zx=function(e){return Object(y["pushScopeId"])("data-v-4887c6d4"),e=e(),Object(y["popScopeId"])(),e},Yx={class:"presenter-view"},Jx={class:"toolbar"},Qx=Zx((function(){return Object(y["createElementVNode"])("span",null,"普通视图",-1)})),Kx=Zx((function(){return Object(y["createElementVNode"])("span",null,"画笔",-1)})),$x=Zx((function(){return Object(y["createElementVNode"])("span",null,"激光笔",-1)})),eC=Zx((function(){return Object(y["createElementVNode"])("span",null,"结束放映",-1)})),tC={class:"content"},nC=["onClick"],oC={class:"remark"},lC={class:"header"},cC=Zx((function(){return Object(y["createElementVNode"])("span",null,"演讲者备注",-1)})),aC=["innerHTML"],rC={class:"remark-scale"};function iC(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("IconListView"),r=Object(y["resolveComponent"])("IconWrite"),i=Object(y["resolveComponent"])("IconMagic"),u=Object(y["resolveComponent"])("IconOffScreenOne"),d=Object(y["resolveComponent"])("Divider"),s=Object(y["resolveComponent"])("IconPower"),f=Object(y["resolveComponent"])("ScreenSlideList"),b=Object(y["resolveComponent"])("WritingBoardTool"),p=Object(y["resolveComponent"])("ThumbnailSlide"),m=Object(y["resolveComponent"])("IconMinus"),v=Object(y["resolveComponent"])("IconPlus"),O=Object(y["resolveDirective"])("contextmenu");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",Yx,[Object(y["createElementVNode"])("div",Jx,[Object(y["createElementVNode"])("div",{class:"tool-btn",onClick:t[0]||(t[0]=function(t){return e.changeViewMode("base")})},[Object(y["createVNode"])(a,{class:"tool-icon"}),Qx]),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["tool-btn",{active:e.writingBoardToolVisible}]),onClick:t[1]||(t[1]=function(t){return e.writingBoardToolVisible=!e.writingBoardToolVisible})},[Object(y["createVNode"])(r,{class:"tool-icon"}),Kx],2),Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["tool-btn",{active:e.laserPen}]),onClick:t[2]||(t[2]=function(t){return e.laserPen=!e.laserPen})},[Object(y["createVNode"])(i,{class:"tool-icon"}),$x],2),Object(y["createElementVNode"])("div",{class:"tool-btn",onClick:t[3]||(t[3]=function(){return e.fullscreenState?e.manualExitFullscreen():e.enterFullscreen()})},[e.fullscreenState?(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:0,class:"tool-icon"})):(Object(y["openBlock"])(),Object(y["createBlock"])(u,{key:1,class:"tool-icon"})),Object(y["createElementVNode"])("span",null,Object(y["toDisplayString"])(e.fullscreenState?"退出全屏":"全屏"),1)]),Object(y["createVNode"])(d,{class:"divider"}),Object(y["createElementVNode"])("div",{class:"tool-btn",onClick:t[4]||(t[4]=function(t){return e.exitScreening()})},[Object(y["createVNode"])(s,{class:"tool-icon"}),eC])]),Object(y["createElementVNode"])("div",tC,[Object(y["createElementVNode"])("div",{class:Object(y["normalizeClass"])(["slide-list-wrap",{"laser-pen":e.laserPen}]),ref:"slideListWrapRef"},[Object(y["withDirectives"])(Object(y["createVNode"])(f,{slideWidth:e.slideWidth,slideHeight:e.slideHeight,animationIndex:e.animationIndex,turnSlideToId:e.turnSlideToId,manualExitFullscreen:e.manualExitFullscreen,onMousewheel:t[5]||(t[5]=function(t){return e.mousewheelListener(t)}),onTouchstart:t[6]||(t[6]=function(t){return e.touchStartListener(t)}),onTouchend:t[7]||(t[7]=function(t){return e.touchEndListener(t)})},null,8,["slideWidth","slideHeight","animationIndex","turnSlideToId","manualExitFullscreen"]),[[O,e.contextmenus]]),e.writingBoardToolVisible?(Object(y["openBlock"])(),Object(y["createBlock"])(b,{key:0,slideWidth:e.slideWidth,slideHeight:e.slideHeight,position:{left:"75px",top:"5px"},onClose:t[8]||(t[8]=function(t){return e.writingBoardToolVisible=!1})},null,8,["slideWidth","slideHeight"])):Object(y["createCommentVNode"])("",!0)],2),Object(y["createElementVNode"])("div",{class:"thumbnails",ref:"thumbnailsRef",onMousewheel:t[9]||(t[9]=Object(y["withModifiers"])((function(t){return e.handleMousewheelThumbnails(t)}),["prevent"]))},[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:Object(y["normalizeClass"])(["thumbnail",{active:n===e.slideIndex}]),key:t.id,onClick:function(t){return e.turnSlideToIndex(n)}},[Object(y["createVNode"])(p,{slide:t,size:120/e.viewportRatio,visible:n40||(B.value=e)};Object(y["watch"])(o,(function(){Object(y["nextTick"])((function(){if(r.value){var e=r.value.querySelector(".thumbnail.active");if(e){var t=r.value.offsetWidth,n=e.offsetLeft;r.value.scrollTo({left:n-t/2,behavior:"smooth"})}}}))}));var _=function(){return[{text:"上一页",subText:"↑ ←",disable:o.value<=0,handler:function(){return p()}},{text:"下一页",subText:"↓ →",disable:o.value>=n.value.length-1,handler:function(){return m()}},{text:"第一页",disable:0===o.value,handler:function(){return v(0)}},{text:"最后一页",disable:o.value===n.value.length-1,handler:function(){return v(n.value.length-1)}},{divider:!0},{text:"画笔工具",handler:function(){return i.value=!0}},{text:"普通视图",handler:function(){return e.changeViewMode("base")}},{divider:!0},{text:"结束放映",subText:"ESC",handler:E}]};return{slides:n,slideIndex:o,viewportRatio:l,remarkFontSize:B,currentSlideRemark:L,setRemarkFontSize:M,slideListWrapRef:a,thumbnailsRef:r,slideWidth:x,slideHeight:C,animationIndex:h,turnSlideToId:O,mousewheelListener:s,touchStartListener:f,touchEndListener:b,turnSlideToIndex:v,contextmenus:_,slidesLoadLimit:N,handleMousewheelThumbnails:T,exitScreening:E,fullscreenState:V,enterFullscreen:vt,manualExitFullscreen:S,writingBoardToolVisible:i,laserPen:u}}});n("adc4");const dC=Gn()(uC,[["render",iC],["__scopeId","data-v-4887c6d4"]]);var sC=dC,fC=Object(y["defineComponent"])({name:"pptist-screen",components:{BaseView:Xx,PresenterView:sC},setup:function(){var e=Object(y["ref"])("base"),t=function(t){e.value=t},n=jt(),o=n.exitScreening,l=function(e){var t=e.key.toUpperCase();t===V.ESC&&o()};return Object(y["onMounted"])((function(){return document.addEventListener("keydown",l)})),Object(y["onUnmounted"])((function(){return document.removeEventListener("keydown",l)})),{viewMode:e,changeViewMode:t}}});n("953f");const bC=Gn()(fC,[["render",Fg],["__scopeId","data-v-18f794c8"]]);var pC=bC,mC={class:"mobile",ref:"mobileRef"},vC={class:"thumbnail-list"};function OC(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Alert"),r=Object(y["resolveComponent"])("ThumbnailSlide");return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",mC,[Object(y["createVNode"])(a,{class:"tip",message:"注意",description:"移动设备下仅支持预览,请在PC上进行编辑",type:"warning",closable:"","show-icon":""}),Object(y["createElementVNode"])("div",vC,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.slides,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"thumbnail-item",key:t.id},[Object(y["createVNode"])(r,{slide:t,size:e.slideWidth,visible:nl?1:Math.round(100*r/l)/100,o.value.a!==t&&n("colorChange",{r:o.value.r,g:o.value.g,b:o.value.b,a:t})}},r=function e(){window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",e)},i=function(e){a(e),window.addEventListener("mousemove",a),window.addEventListener("mouseup",r)};return Object(y["onUnmounted"])(r),{alphaRef:c,gradientColor:l,handleMouseDown:i,color:o}}});n("f418");const cw=Gn()(lw,[["render",JE],["__scopeId","data-v-6f2cb744"]]);var aw=cw,rw=function(e){return Object(y["pushScopeId"])("data-v-1766620e"),e=e(),Object(y["popScopeId"])(),e},iw={class:"hue"},uw=rw((function(){return Object(y["createElementVNode"])("div",{class:"hue-picker"},null,-1)})),dw=[uw];function sw(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",iw,[Object(y["createElementVNode"])("div",{class:"hue-container",ref:"hueRef",onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[Object(y["createElementVNode"])("div",{class:"hue-pointer",style:Object(y["normalizeStyle"])({left:e.pointerLeft})},dw,4)],544)])}var fw=Object(y["defineComponent"])({name:"hue",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["ref"])(0),l=Object(y["ref"])(""),c=Object(y["computed"])((function(){var t=ee()(e.value).toHsl();return-1!==e.hue&&(t.h=e.hue),t})),a=Object(y["computed"])((function(){return 0===c.value.h&&"right"===l.value?"100%":100*c.value.h/360+"%"}));Object(y["watch"])((function(){return e.value}),(function(){var t=ee()(e.value).toHsl(),n=0===t.s?e.hue:t.h;0!==n&&n-o.value>0&&(l.value="right"),0!==n&&n-o.value<0&&(l.value="left"),o.value=n}));var r=Object(y["ref"])(),i=function(t){if(t.preventDefault(),r.value){var o,l,a=r.value.clientWidth,i=r.value.getBoundingClientRect().left+window.pageXOffset,u=t.pageX-i;u<0?o=0:u>a?o=360:(l=100*u/a,o=360*l/100),-1!==e.hue&&c.value.h===o||n("colorChange",{h:o,l:c.value.l,s:c.value.s,a:c.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(y["onUnmounted"])(u),{hueRef:r,handleMouseDown:d,pointerLeft:a}}});n("468f");const bw=Gn()(fw,[["render",sw],["__scopeId","data-v-1766620e"]]);var pw=bw,mw=function(e){return Object(y["pushScopeId"])("data-v-8982eb4a"),e=e(),Object(y["popScopeId"])(),e},vw=mw((function(){return Object(y["createElementVNode"])("div",{class:"saturation-white"},null,-1)})),Ow=mw((function(){return Object(y["createElementVNode"])("div",{class:"saturation-black"},null,-1)})),hw=mw((function(){return Object(y["createElementVNode"])("div",{class:"saturation-circle"},null,-1)})),jw=[hw];function yw(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{class:"saturation",ref:"saturationRef",style:Object(y["normalizeStyle"])({background:e.bgColor}),onMousedown:t[0]||(t[0]=function(t){return e.handleMouseDown(t)})},[vw,Ow,Object(y["createElementVNode"])("div",{class:"saturation-pointer",style:Object(y["normalizeStyle"])({top:e.pointerTop,left:e.pointerLeft})},jw,4)],36)}var gw=Object(y["defineComponent"])({name:"saturation",emits:["colorChange"],props:{value:{type:Object,required:!0},hue:{type:Number,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["computed"])((function(){var t=ee()(e.value).toHsv();return-1!==e.hue&&(t.h=e.hue),t})),l=Object(y["computed"])((function(){return"hsl(".concat(o.value.h,", 100%, 50%)")})),c=Object(y["computed"])((function(){return-100*o.value.v+1+100+"%"})),a=Object(y["computed"])((function(){return 100*o.value.s+"%"})),r=Object(te["throttle"])((function(e){n("colorChange",e)}),20,{leading:!0,trailing:!1}),i=Object(y["ref"])(),u=function(e){if(e.preventDefault(),i.value){var t=i.value.clientWidth,n=i.value.clientHeight,l=i.value.getBoundingClientRect().left+window.pageXOffset,c=i.value.getBoundingClientRect().top+window.pageYOffset,a=Object(te["clamp"])(e.pageX-l,0,t),u=Object(te["clamp"])(e.pageY-c,0,n),d=a/t,s=Object(te["clamp"])(-u/n+1,0,1);r({h:o.value.h,s:d,v:s,a:o.value.a})}},d=function e(){window.removeEventListener("mousemove",u),window.removeEventListener("mouseup",e)},s=function(e){u(e),window.addEventListener("mousemove",u),window.addEventListener("mouseup",d)};return Object(y["onUnmounted"])(d),{saturationRef:i,bgColor:l,handleMouseDown:s,pointerTop:c,pointerLeft:a}}});n("a46e");const xw=Gn()(gw,[["render",yw],["__scopeId","data-v-8982eb4a"]]);var Cw=xw,kw={class:"editable-input"},Ew=["value"];function ww(e,t,n,o,l,c){return Object(y["openBlock"])(),Object(y["createElementBlock"])("div",kw,[Object(y["createElementVNode"])("input",{class:"input-content",value:e.val,onInput:t[0]||(t[0]=function(t){return e.handleInput(t)})},null,40,Ew)])}var Nw=Object(y["defineComponent"])({name:"editable-input",emits:["colorChange"],props:{value:{type:Object,required:!0}},setup:function(e,t){var n=t.emit,o=Object(y["computed"])((function(){var t="";return t=e.value.a<1?ee()(e.value).toHex8String().toUpperCase():ee()(e.value).toHexString().toUpperCase(),t.replace("#","")})),l=function(e){var t=e.target.value;t.length>=6&&n("colorChange",ee()(t).toRgb())};return{val:o,handleInput:l}}});n("933d");const Iw=Gn()(Nw,[["render",ww],["__scopeId","data-v-20bfe6b0"]]);var Vw=Iw,Sw="RECENT_COLORS",Bw=[["#7f7f7f","#f2f2f2"],["#0d0d0d","#808080"],["#1c1a10","#ddd8c3"],["#0e243d","#c6d9f0"],["#233f5e","#dae5f0"],["#632623","#f2dbdb"],["#4d602c","#eaf1de"],["#3f3150","#e6e0ec"],["#1e5867","#d9eef3"],["#99490f","#fee9da"]],Lw=function(e,t,n){for(var o=ee()(e).toRgb(),l=ee()(t).toRgb(),c=(l.r-o.r)/n,a=(l.g-o.g)/n,r=(l.b-o.b)/n,i=[],u=0;ut&&(l.value=l.value.slice(0,t))}}),300,{trailing:!0});Object(y["onMounted"])((function(){var e=localStorage.getItem(Sw);e&&(l.value=JSON.parse(e))})),Object(y["watch"])(l,(function(){var e=JSON.stringify(l.value);localStorage.setItem(Sw,e)}));var f=function(e){"h"in e?(o.value=e.h,c.value=ee()(e).toRgb()):(o.value=ee()(e).toHsl().h,c.value=e),s()},b=function(){var e=document.querySelector(".canvas");if(e){var t=document.createElement("div");t.style.cssText="position: fixed; top: 0; left: 0; bottom: 0; right: 0; z-index: 9999; cursor: wait;",document.body.appendChild(t);var n=document.createElement("div");n.style.cssText="position: absolute; top: -100px; left: -100px; width: 16px; height: 16px; border: 1px solid #000; z-index: 999",t.appendChild(n);var l=e.getBoundingClientRect(),a=l.left,r=l.top,i=function(e){return(!e.tagName||"FOREIGNOBJECT"!==e.tagName.toUpperCase())&&(!e.classList||!e.classList.contains("operate"))};Object(nn["a"])(e,{filter:i,fontEmbedCSS:""}).then((function(e){e.style.cssText="position: absolute; top: ".concat(r,"px; left: ").concat(a,"px; cursor: crosshair;"),t.style.cursor="default",t.appendChild(e);var l=e.getContext("2d");if(l){var i="",u=function(e){var t=e.x,o=e.y,c=t-a,u=o-r,d=Object(He["a"])(l.getImageData(c,u,1,1).data,4),s=d[0],f=d[1],b=d[2],p=d[3];i="rgba(".concat(s,", ").concat(f,", ").concat(b,", ").concat((p/255).toFixed(2),")"),n.style.left=t+10+"px",n.style.top=o+10+"px",n.style.backgroundColor=i},d=function(){i="",n.style.left="-100px",n.style.top="-100px",n.style.backgroundColor=""},f=function n(l){if(i&&0===l.button){var a=ee()(i);o.value=a.toHsl().h,c.value=a.toRgb(),s()}document.body.removeChild(t),e.removeEventListener("mousemove",u),e.removeEventListener("mouseleave",d),window.removeEventListener("mousedown",n)};e.addEventListener("mousemove",u),e.addEventListener("mouseleave",d),window.addEventListener("mousedown",f)}})).catch((function(){Se["a"].error("取色吸管初始化失败"),document.body.removeChild(t)}))}};return{themeColors:a,standardColors:r,presetColors:i,color:c,hue:o,currentColor:u,changeColor:f,selectPresetColor:d,recentColors:l,pickColor:b}}});n("dc9e");const _w=Gn()(Mw,[["render",WE],["__scopeId","data-v-05b64c90"]]);var Dw=_w,zw={key:0,class:"fullscreen-spin"};function Aw(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("Spin");return e.loading?(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",zw,[Object(y["createVNode"])(a,{tip:e.tip,size:"large"},null,8,["tip"])])):Object(y["createCommentVNode"])("",!0)}var Fw=Object(y["defineComponent"])({name:"fullscreen-spin",props:{loading:{type:Boolean,default:!1},tip:{type:String,default:""}}});n("1756");const Rw=Gn()(Fw,[["render",Aw],["__scopeId","data-v-5e77feb8"]]);var Pw=Rw,Hw={install:function(e){e.component("FileInput",OE),e.component("CheckboxButton",gE),e.component("CheckboxButtonGroup",wE),e.component("ColorPicker",Dw),e.component("FullscreenSpin",Pw)}};function qw(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("MenuContent");return Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],null,[Object(y["createElementVNode"])("div",{class:"mask",onContextmenu:t[0]||(t[0]=Object(y["withModifiers"])((function(t){return e.removeContextmenu()}),["prevent"])),onMousedown:t[1]||(t[1]=function(t){return e.removeContextmenu()})},null,32),Object(y["createElementVNode"])("div",{class:"contextmenu",style:Object(y["normalizeStyle"])({left:e.style.left+"px",top:e.style.top+"px"}),onContextmenu:t[2]||(t[2]=Object(y["withModifiers"])((function(){}),["prevent"]))},[Object(y["createVNode"])(a,{menus:e.menus,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])],36)],64)}var Ww={class:"menu-content"},Gw=["onClick"],Uw={class:"text"},Xw={key:0,class:"sub-text"};function Zw(e,t,n,o,l,c){var a=Object(y["resolveComponent"])("menu-content",!0);return Object(y["openBlock"])(),Object(y["createElementBlock"])("ul",Ww,[(Object(y["openBlock"])(!0),Object(y["createElementBlock"])(y["Fragment"],null,Object(y["renderList"])(e.menus,(function(t,n){return Object(y["openBlock"])(),Object(y["createElementBlock"])(y["Fragment"],{key:t.text||n},[t.hide?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])("li",{key:0,class:Object(y["normalizeClass"])(["menu-item",{divider:t.divider,disable:t.disable}]),onClick:Object(y["withModifiers"])((function(n){return e.handleClickMenuItem(t)}),["stop"])},[t.divider?Object(y["createCommentVNode"])("",!0):(Object(y["openBlock"])(),Object(y["createElementBlock"])("div",{key:0,class:Object(y["normalizeClass"])(["menu-item-content",{"has-children":t.children,"has-handler":t.handler}])},[Object(y["createElementVNode"])("span",Uw,Object(y["toDisplayString"])(t.text),1),t.subText&&!t.children?(Object(y["openBlock"])(),Object(y["createElementBlock"])("span",Xw,Object(y["toDisplayString"])(t.subText),1)):Object(y["createCommentVNode"])("",!0),t.children&&t.children.length?(Object(y["openBlock"])(),Object(y["createBlock"])(a,{key:1,class:"sub-menu",menus:t.children,handleClickMenuItem:e.handleClickMenuItem},null,8,["menus","handleClickMenuItem"])):Object(y["createCommentVNode"])("",!0)],2))],10,Gw))],64)})),128))])}var Yw=Object(y["defineComponent"])({name:"menu-content",props:{menus:{type:Array,required:!0},handleClickMenuItem:{type:Function,required:!0}}});n("0c74");const Jw=Gn()(Yw,[["render",Zw],["__scopeId","data-v-eb1555e8"]]);var Qw=Jw,Kw=Object(y["defineComponent"])({name:"contextmenu",components:{MenuContent:Qw},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(y["computed"])((function(){var t=170,n=30,o=11,l=5,c=e.axis,a=c.x,r=c.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*l,f=document.body.clientWidth,b=document.body.clientHeight;return{left:f<=a+d?a-d:a,top:b<=r+s?r-s:r}})),n=function(t){t.disable||t.children&&!t.handler||(t.handler&&t.handler(e.el),e.removeContextmenu())};return{style:t,handleClickMenuItem:n}}});n("b837");const $w=Gn()(Kw,[["render",qw]]);var eN=$w,tN="CTX_CONTEXTMENU_HANDLER",nN=function(e,t,n){t.stopPropagation(),t.preventDefault();var o=n.value(e);if(o){var l=null,c=function t(){l&&(document.body.removeChild(l),l=null),e.classList.remove("contextmenu-active"),document.body.removeEventListener("scroll",t),window.removeEventListener("resize",t)},a={axis:{x:t.x,y:t.y},el:e,menus:o,removeContextmenu:c};l=document.createElement("div");var r=Object(y["createVNode"])(eN,a,null);Object(y["render"])(r,l),document.body.appendChild(l),e.classList.add("contextmenu-active"),document.body.addEventListener("scroll",c),window.addEventListener("resize",c)}},oN={mounted:function(e,t){e[tN]=function(n){return nN(e,n,t)},e.addEventListener("contextmenu",e[tN])},unmounted:function(e){e&&e[tN]&&(e.removeEventListener("contextmenu",e[tN]),delete e[tN])}},lN=oN,cN="CTX_CLICK_OUTSIDE_HANDLER",aN=function(e,t,n){var o=n.value,l=t.composedPath(),c=l?l.indexOf(e)<0:!e.contains(t.target);c&&o(t)},rN={mounted:function(e,t){e[cN]=function(n){return aN(e,n,t)},setTimeout((function(){document.addEventListener("click",e[cN])}),0)},unmounted:function(e){e[cN]&&(document.removeEventListener("click",e[cN]),delete e[cN])}},iN=rN,uN={install:function(e){e.directive("contextmenu",lN),e.directive("click-outside",iN)}},dN=Object(y["createApp"])(CC);dN.component("InputNumber",j["a"]),dN.component("Divider",h["a"]),dN.component("Button",O["a"]),dN.component("ButtonGroup",O["a"].Group),dN.component("Tooltip",v["a"]),dN.component("Popover",m["a"]),dN.component("Slider",p["a"]),dN.component("Select",b["a"]),dN.component("SelectOption",b["a"].Option),dN.component("SelectOptGroup",b["a"].OptGroup),dN.component("Switch",f["a"]),dN.component("Radio",s["a"]),dN.component("RadioGroup",s["a"].Group),dN.component("RadioButton",s["a"].Button),dN.component("Input",d["a"]),dN.component("InputGroup",d["a"].Group),dN.component("TextArea",d["a"].TextArea),dN.component("Modal",u["a"]),dN.component("Dropdown",i["a"]),dN.component("Menu",r["a"]),dN.component("MenuItem",r["a"].Item),dN.component("Checkbox",a["a"]),dN.component("Drawer",c["a"]),dN.component("Spin",l["a"]),dN.component("Alert",o["a"]),dN.use(fE),dN.use(Hw),dN.use(uN),dN.use(Object(g["a"])()),dN.mount("#app")},d0e2:function(e,t,n){},d129:function(e,t,n){"use strict";n("1b9e")},d4d8:function(e,t,n){"use strict";n("41ca")},d65a:function(e,t,n){},d6d3:function(e,t,n){},d72c:function(e,t,n){},d783:function(e,t,n){},d7f8:function(e,t,n){},dab5:function(e,t,n){"use strict";n("6702")},dc5e:function(e,t,n){},dc9e:function(e,t,n){"use strict";n("090d")},ddc3:function(e,t,n){},de30:function(e,t,n){"use strict";n("ddc3")},de48:function(e,t,n){},de7e:function(e,t,n){"use strict";n("53cb")},de82:function(e,t,n){},e1f8:function(e,t,n){},e3df:function(e,t,n){"use strict";n("f0f3")},e4fe:function(e,t,n){},e5a8:function(e,t,n){"use strict";n("6532")},e5b9:function(e,t,n){},e6fd:function(e,t,n){},e7b8:function(e,t,n){"use strict";n("46ba")},e80d:function(e,t,n){},e98f:function(e,t,n){},e9e0:function(e,t,n){},eacc:function(e,t,n){"use strict";n("50c5")},eaff:function(e,t,n){},eb2c:function(e,t,n){"use strict";n("fa63")},eb6a:function(e,t,n){"use strict";n("6dfb")},ec9c:function(e,t,n){"use strict";n("b994")},edc2:function(e,t,n){"use strict";n("b0c3")},f0f3:function(e,t,n){},f10d:function(e,t,n){"use strict";n("4a74")},f208:function(e,t,n){"use strict";n("e6fd")},f33f:function(e,t,n){"use strict";n("a9ab")},f418:function(e,t,n){"use strict";n("0f92")},f50e:function(e,t,n){},f661:function(e,t,n){},fa63:function(e,t,n){},fb04:function(e,t,n){"use strict";n("d783")},fc12:function(e,t,n){"use strict";n("d72c")},fc7e:function(e,t,n){"use strict";n("9031")},fd3b:function(e,t,n){},fd5fa:function(e,t,n){},fe34:function(e,t,n){"use strict";n("078f")},ff8b:function(e,t,n){},ffb8:function(e,t,n){"use strict";n("3831")}}); -//# sourceMappingURL=app.90f175cd.js.map \ No newline at end of file