polotno-node 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -133,7 +133,9 @@ res.json({ url });
133
133
 
134
134
  ### `instance.run()`
135
135
 
136
- Run any Polotno store API directly inside web-page context
136
+ Run any Polotno store API directly inside web-page context.
137
+
138
+ **Warning: by default every `run` and every export function will create a new page with its own editor and context.** If you want to make and export after you use `instance.run()` you must do it inside the same `run` function.
137
139
 
138
140
  ```js
139
141
  // we can't directly use "json" variable inside the run function
@@ -152,6 +154,23 @@ const url = await instance.run(async (json) => {
152
154
  }, json);
153
155
  ```
154
156
 
157
+ ### `window.config` usage
158
+
159
+ `window.config` is a global object that has some functions from `polotno/config` module. You can use it to add custom fonts and customize some settings.
160
+ Not all options are supported yet. If you see anything missing, please create an issue. You can see all available options in `client.js` file.
161
+
162
+ You should be able to change config before you call `store.loadJSON` function and do you export.
163
+
164
+ ```js
165
+ const url = await instance.run(async (json) => {
166
+ // you can use global "config" object that has some functions from "polotno/config" module
167
+ window.config.unstable_setTextVerticalResizeEnabled(true);
168
+ // you can use global "store" object
169
+ store.loadJSON(json);
170
+ return store.toDataURL();
171
+ }, json);
172
+ ```
173
+
155
174
  ## Your own client
156
175
 
157
176
  By default `polotno-node` ships with the default Polotno Editor with its (hopefully) last version. If you use experimental API such as `unstable_registerShapeModel` and `unstable_registerShapeComponent`, the rendering may fail if you use unknow elements types.
@@ -219,11 +219,11 @@ var t;(t=t||{}).stringify=function(){var t={"visit_linear-gradient":function(i){
219
219
  },{"react":"HdMw","mobx-react-lite":"ZfSi","react-konva":"Sgug"}],"aH85":[function(require,module,exports) {
220
220
  "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.useMobile=exports.isMobile=exports.MOBILE_BREAKPOINT=void 0;const t=e(require("react"));exports.MOBILE_BREAKPOINT=500;const s=()=>window.innerWidth<=exports.MOBILE_BREAKPOINT;exports.isMobile=s;const o=()=>{const[e,s]=t.default.useState((0,exports.isMobile)());return t.default.useEffect(()=>{const e=()=>{s((0,exports.isMobile)())};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}},[]),e};exports.useMobile=o;
221
221
  },{"react":"HdMw"}],"Fpgh":[function(require,module,exports) {
222
- "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(n){if(n&&n.__esModule)return n;var r={};if(null!=n)for(var i in n)"default"!==i&&Object.prototype.hasOwnProperty.call(n,i)&&e(r,n,i);return t(r,n),r},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TextElement=exports.useTextColor=exports.getLineHeight=exports.useFontLoader=exports.getDir=exports.isRTLText=void 0;const i=r(require("react")),o=require("mobx-react-lite"),a=require("react-konva"),l=require("react-konva-utils"),s=require("mobx"),d=r(require("konva")),u=require("svg-round-corners"),c=require("../utils/loader"),f=require("../utils/fonts"),h=require("../utils/flags"),g=require("../utils/text"),p=n(require("../utils/gradient")),x=require("./apply-filters"),y=require("./use-fadein"),m=require("./highlighter"),w=require("../utils/screen"),v=document.createElement("style");v.type="text/css",document.head.appendChild(v);const b={border:"none",padding:"0px",overflow:"hidden",background:"none",outline:"none",resize:"none",overflowWrap:"break-word",whiteSpace:"pre-wrap",userSelect:"text",wordBreak:"normal"};function S(e){var t="֑-߿‏‫‮יִ-﷽ﹰ-ﻼ";return new RegExp("^[^"+t+"]*?["+t+"]").test(e)}function E(e){e=e.replace(/\s/g,"");let t=0;for(var n=0;n<e.length;n++)S(e[n])&&(t+=1);return t>e.length/2}function M(e){return E(e)?"rtl":"ltr"}exports.isRTLText=E,exports.getDir=M;const z=(0,o.observer)(({textNodeRef:e,element:t,onBlur:n,selectAll:r,cursorPosition:o})=>{const[a,s]=i.default.useState(b),d=e.current;i.default.useLayoutEffect(()=>{const e={};e.width=d.width()-2*d.padding()+"px",e.height=d.height()-2*d.padding()+10+"px",e.fontSize=d.fontSize()+"px",e.lineHeight=d.lineHeight()+.01,e.fontFamily=d.fontFamily(),e.textAlign=d.align(),e.color=d.fill(),e.fontWeight=t.fontWeight,e.fontStyle=t.fontStyle,e.letterSpacing=t.letterSpacing+"em";const n=`\n .polotno-input::placeholder {\n color: ${a.color};\n opacity: 0.6;\n }\n `;v.innerHTML="",v.appendChild(document.createTextNode(n)),JSON.stringify(e)!==JSON.stringify(a)&&s(e)});const u=i.default.useRef(null);i.default.useEffect(()=>{const e=setTimeout(()=>{var e;const t=u.current;if(!t)return;null===(e=u.current)||void 0===e||e.focus();const n=o||t.value.length;t.selectionStart=t.selectionEnd=n,r&&(null==t||t.select(),document.execCommand("selectAll",!1,null))});return()=>{clearTimeout(e)}},[]);let c=0;const f=d.textArr.length*d.lineHeight()*d.fontSize();return"middle"===t.verticalAlign&&(c=(t.height-f)/2),"bottom"===t.verticalAlign&&(c=t.height-f),i.default.createElement(l.Html,null,i.default.createElement("textarea",{className:"polotno-input",ref:u,dir:M(t.text),style:Object.assign(Object.assign(Object.assign({},b),a),{paddingTop:c+"px"}),value:t.text,onChange:e=>{t.set({text:e.target.value})},placeholder:t.placeholder,onBlur:n}))}),T=e=>{const[t,n]=i.default.useState(!1),r=i.default.useRef(!1);return i.default.useEffect(()=>{var t=!0;return setTimeout(()=>{t&&(e._editModeEnabled&&(r.current=!0),n(!0),setTimeout(()=>{r.current=!1},50))},50),()=>{t=!1}},[]),{editorEnabled:t&&e._editModeEnabled,selectAll:r.current}},L=(e,t)=>{const[n,r]=i.default.useState((0,f.isFontLoaded)(t));return i.default.useLayoutEffect(()=>{if((0,f.isFontLoaded)(t))return void r(!0);let i=!0;return(async()=>{n&&r(!1);const o=(0,c.incrementLoader)(`text ${t}`);await e.loadFont(t),d.default.Util.requestAnimFrame(o),i&&r(!0)})(),()=>{i=!1}},[t]),[n]};exports.useFontLoader=L;const O=({fontLoaded:e,fontFamily:t,fontSize:n,lineHeight:r})=>i.default.useMemo(()=>{if("number"==typeof r)return r;const e=document.createElement("div");e.style.fontFamily=t,e.style.fontSize=n+"px",e.style.lineHeight=r,e.innerText="Test text",document.body.appendChild(e);const i=e.offsetHeight;return document.body.removeChild(e),i/n},[e,t,n,r]);function k(e){var t=e.getAbsoluteTransform().copy();t.invert();var n=e.getStage().getPointerPosition();return t.point(n)}function A(e){var t;const n=e.target,r=k(n),i=n.textArr,o=Math.floor(r.y/(n.fontSize()*n.lineHeight())),a=i.slice(0,o).reduce((e,t)=>e+t.text.length,o),l=null!==(t=i[o])&&void 0!==t?t:i[0];let s=0;return"right"===n.align()?s=n.width()-l.width:"center"===n.align()&&(s=n.width()/2-l.width/2),a+Math.round((r.x-s)/l.width*l.text.length)}function F(e){const t=i.default.useRef(e),n=i.default.useRef(e);return i.default.useEffect(()=>{n.current=t.current,t.current=e},[e]),n.current}function $(e,t){const n=e.getAttrs(),r=(0,g.removeTags)(t.text);let i=t.fontSize;const o=Math.round(2*t.fontSize)-1;for(let a=1;a<o;a++){const n=t.height&&e.height()>t.height,o=r.split("\n").join(" ").split(" ");let a=e.textArr.map(e=>e.text).join(";");const l=o.find(e=>!a.includes(e)||(a=a.replace(e,""),!1));if(!n&&!l)break;i-=.5,e.fontSize(i)}return e.fontSize(n.fontSize),i}function _({lines:e,lineHeight:t,width:n,align:r="left",padding:i=0,cornerRadius:o=0}){var a;e.forEach((e,t)=>{e.cx=n/2,"right"===r?e.cx=n-e.width/2:"left"===r&&(e.cx=e.width/2),"justify"!==r||e.lastInParagraph||(e.width=n),"justify"===r&&(e.cx=e.width/2)});let l=`M ${null===(a=e[0])||void 0===a?void 0:a.cx} ${-i}`;e.forEach((n,r)=>{const{cx:o}=n,a=e[r-1];a&&a.width>n.width?l+=` L ${o+n.width/2+i} ${r*t+i}`:l+=` L ${o+n.width/2+i} ${r*t-i}`;const s=e[r+1];s&&s.width>n.width?l+=` L ${o+n.width/2+i} ${(r+1)*t-i}`:l+=` L ${o+n.width/2+i} ${(r+1)*t+i}`});for(var s=e.length-1;s>=0;s--){const n=e[s],{cx:r}=n,o=e[s+1];o&&o.width>n.width?l+=` L ${r-n.width/2-i} ${(s+1)*t-i}`:l+=` L ${r-n.width/2-i} ${(s+1)*t+i}`;const a=e[s-1];a&&a.width>n.width?l+=` L ${r-n.width/2-i} ${s*t+i}`:l+=` L ${r-n.width/2-i} ${s*t-i}`}l+=" Z";const d=(0,u.parsePath)(l);return(0,u.roundCommands)(d,o).path}exports.getLineHeight=O;const P=e=>i.default.useMemo(()=>{if(!p.isGradient(e.fill))return{fill:e.fill};const{stops:t,rotation:n}=p.parseColor(e.fill),r={x:e.width/2,y:e.height/2},i=Math.sqrt(Math.pow(r.x,2)+Math.pow(r.y,2)),o=d.default.Util.degToRad(n)-Math.PI/2,a=[];return t.forEach(({offset:e,color:t})=>{a.push(e,t)}),{fillLinearGradientStartPointX:r.x-i*Math.cos(o),fillLinearGradientStartPointY:r.y-i*Math.sin(o),fillLinearGradientColorStops:a,fillLinearGradientEndPointX:r.x+i*Math.cos(o),fillLinearGradientEndPointY:r.y+i*Math.sin(o),fill:t[1].color,fillPriority:"linear-gradient"}},[e.fill]);exports.useTextColor=P,exports.TextElement=(0,o.observer)(({element:e,store:t})=>{const n=i.default.useRef(null),r=i.default.useRef(null),{editorEnabled:o,selectAll:l}=T(e),[d,u]=i.default.useState(!1),[c,f]=i.default.useState(!1),p=i.default.useRef(e.height),v=t.selectedElements.indexOf(e)>=0,{textVerticalResizeEnabled:b}=h.flags,S=F(e.fontFamily),[E,M]=i.default.useState([]);i.default.useEffect(()=>{var e,t;const r=null!==(t=null===(e=n.current)||void 0===e?void 0:e.textArr)&&void 0!==t?t:[];JSON.stringify(r)!==JSON.stringify(E)&&M(r)}),i.default.useEffect(()=>{if(e.width)return;const t=n.current;t.width(600),e.set({width:1.4*t.getTextWidth()})},[]),i.default.useLayoutEffect(()=>(0,s.autorun)(()=>{const t=n.current;(0,x.applyFilter)(t,e)}));const[L]=(0,exports.useFontLoader)(t,e.fontFamily),O=(0,g.removeTags)(e.text),k=()=>{const e=n.current.clone({height:void 0}),t=Math.ceil(e.fontSize()*e.lineHeight()*e.textArr.length+1);return e.destroy(),t};i.default.useLayoutEffect(()=>{if(!L)return;const{textOverflow:r}=h.flags;if(e.height)if("change-font-size"!==r||c){if("resize"===r){const r=k();b&&e.height<r&&t.history.ignore(()=>{e.set({height:r}),n.current.height(r)}),b||e.height===r||t.history.ignore(()=>{e.set({height:r}),n.current.height(r)})}}else{const r=$(n.current,e);if(r!==e.fontSize)return void t.history.ignore(()=>{e.set({fontSize:r})});const i=k();e.height!==i&&t.history.ignore(()=>{e.set({height:i})})}else{const n=k();t.history.ignore(()=>{e.set({height:n})})}}),i.default.useLayoutEffect(()=>{const t=n.current;t&&(t.width(t.width()+1e-8),t._setTextData(),(0,x.applyFilter)(t,e))},[L]);const P=i.default.useRef(null),R=i.default.useRef(0),H=n=>{n.evt.preventDefault(),t.selectedElements.find(t=>t===e)&&e.contentEditable&&(R.current=A(n),e.toggleEditMode())},q=!O&&e.placeholder?.6:e.a.opacity;(0,y.useFadeIn)(n,q);const C=(0,exports.getLineHeight)({fontLoaded:L,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),j=e.selectable||"admin"===t.role,D=(0,exports.useTextColor)(e),W=i.default.useMemo(()=>e.backgroundEnabled?_({lines:E,cornerRadius:e.backgroundCornerRadius*(e.fontSize*C*.5),lineHeight:C*e.fontSize,padding:e.backgroundPadding*(e.fontSize*C*.5),width:e.width,align:e.align}):"",[e.backgroundEnabled,e.backgroundCornerRadius,e.fontSize,C,e.backgroundPadding,e.width,e.align,E]),X=(0,w.useMobile)();let Y=0;return"middle"===e.verticalAlign?Y=(e.height-E.length*C*e.fontSize)/2:"bottom"===e.verticalAlign&&(Y=e.height-E.length*C*e.fontSize),i.default.createElement(i.default.Fragment,null,i.default.createElement(a.Path,{ref:r,x:e.a.x,y:e.a.y,rotation:e.a.rotation,hideInExport:!e.showInExport||!O,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity,data:W,fill:e.backgroundColor,offsetY:-Y}),i.default.createElement(a.Text,Object.assign({ref:n,id:e.id,name:"element",hideInExport:!e.showInExport||!O,editModeEnabled:e._editModeEnabled,x:e.a.x,y:e.a.y,rotation:e.a.rotation,width:e.width,height:e.height,text:O||e.placeholder},D,{stroke:e.stroke,strokeWidth:e.strokeWidth,fillAfterStrokeEnabled:!0,fontSize:e.fontSize,fontFamily:`"${e.fontFamily}", "${S}"`,fontStyle:e.fontStyle+" "+e.fontWeight,textDecoration:e.textDecoration,align:e.align,verticalAlign:e.verticalAlign,draggable:X?e.draggable&&v:e.draggable,preventDefault:!X||v,opacity:q,visible:!e._editModeEnabled,ellipsis:"ellipsis"===h.flags.textOverflow,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,lineHeight:C,letterSpacing:e.letterSpacing*e.fontSize,listening:j,onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:n=>{e.set({x:n.target.x(),y:n.target.y()}),t.history.endTransaction()},onMouseEnter:()=>{u(!0)},onMouseLeave:()=>{u(!1)},onClick:H,onTap:H,onTransformStart:()=>{f(!0),t.history.startTransaction(),p.current=n.current.height()},onTransform:t=>{var n,i;const o=t.target;null===(n=r.current)||void 0===n||n.setAttrs({x:o.x(),y:o.y(),rotation:o.rotation(),scale:o.scale()});const a=(null===(i=o.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor();if("middle-left"===a||"middle-right"===a){const t=o.scaleX(),n=o.width()*t,r=e.fontSize;let i=n;n<r&&(i=r,P.current&&o.position(P.current)),o.width(i),o.scaleX(1),o.scaleY(1);const a=k();if("ellipsis"!==h.flags.textOverflow){const t=Math.max(a,p.current);o.height(t),e.set({height:o.height()})}e.set({x:o.x(),y:o.y(),width:o.width(),rotation:o.rotation()}),(0,x.applyFilter)(o,e)}if("top-center"===a||"bottom-center"===a){let n="resize"===h.flags.textOverflow?k():C*e.fontSize;t.target.height(Math.max(n,t.target.height()*t.target.scaleY())),t.target.scaleY(1)}t.target.strokeWidth(e.strokeWidth/t.target.scaleX()),P.current=t.target.position()},onTransformEnd:n=>{var i;f(!1);const o=n.target.scaleX();n.target.scaleX(1),n.target.scaleY(1),n.target.strokeWidth(e.strokeWidth),e.set({fontSize:Math.round(e.fontSize*o),width:Math.ceil(n.target.width()*o),x:n.target.x(),y:n.target.y(),rotation:n.target.rotation(),height:n.target.height()}),t.history.endTransaction(),null===(i=r.current)||void 0===i||i.setAttrs({scaleX:1,scaleY:1})}})),o&&i.default.createElement(a.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation},i.default.createElement(z,{textNodeRef:n,element:e,selectAll:l,cursorPosition:R.current,onBlur:()=>{e.toggleEditMode(!1)}})),!c&&(d||v)&&i.default.createElement(m.Highlighter,{element:e}))});
222
+ "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(n){if(n&&n.__esModule)return n;var r={};if(null!=n)for(var i in n)"default"!==i&&Object.prototype.hasOwnProperty.call(n,i)&&e(r,n,i);return t(r,n),r},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TextElement=exports.useTextColor=exports.getLineHeight=exports.useFontLoader=exports.getDir=exports.isRTLText=void 0;const i=r(require("react")),o=require("mobx-react-lite"),a=require("react-konva"),l=require("react-konva-utils"),s=require("mobx"),d=r(require("konva")),u=require("svg-round-corners"),c=require("../utils/loader"),f=require("../utils/fonts"),h=require("../utils/flags"),g=require("../utils/text"),p=n(require("../utils/gradient")),x=require("./apply-filters"),y=require("./use-fadein"),m=require("./highlighter"),w=require("../utils/screen"),v=document.createElement("style");v.type="text/css",document.head.appendChild(v);const b={border:"none",padding:"0px",overflow:"hidden",background:"none",outline:"none",resize:"none",overflowWrap:"break-word",whiteSpace:"pre-wrap",userSelect:"text",wordBreak:"normal"};function S(e){var t="֑-߿‏‫‮יִ-﷽ﹰ-ﻼ";return new RegExp("^[^"+t+"]*?["+t+"]").test(e)}function E(e){e=e.replace(/\s/g,"");let t=0;for(var n=0;n<e.length;n++)S(e[n])&&(t+=1);return t>e.length/2}function M(e){return E(e)?"rtl":"ltr"}exports.isRTLText=E,exports.getDir=M;const z=(0,o.observer)(({textNodeRef:e,element:t,onBlur:n,selectAll:r,cursorPosition:o})=>{const[a,s]=i.default.useState(b),d=e.current;i.default.useLayoutEffect(()=>{const e={};e.width=d.width()-2*d.padding()+"px",e.height=d.height()-2*d.padding()+10+"px",e.fontSize=d.fontSize()+"px",e.lineHeight=d.lineHeight()+.01,e.fontFamily=d.fontFamily(),e.textAlign=d.align(),e.color=d.fill(),e.fontWeight=t.fontWeight,e.fontStyle=t.fontStyle,e.letterSpacing=t.letterSpacing+"em";const n=`\n .polotno-input::placeholder {\n color: ${a.color};\n opacity: 0.6;\n }\n `;v.innerHTML="",v.appendChild(document.createTextNode(n)),JSON.stringify(e)!==JSON.stringify(a)&&s(e)});const u=i.default.useRef(null);i.default.useEffect(()=>{const e=setTimeout(()=>{var e;const t=u.current;if(!t)return;null===(e=u.current)||void 0===e||e.focus();const n=o||t.value.length;t.selectionStart=t.selectionEnd=n,r&&(null==t||t.select(),document.execCommand("selectAll",!1,null))});return()=>{clearTimeout(e)}},[]);let c=0;const f=d.textArr.length*d.lineHeight()*d.fontSize();return"middle"===t.verticalAlign&&(c=(t.height-f)/2),"bottom"===t.verticalAlign&&(c=t.height-f),i.default.createElement(l.Html,null,i.default.createElement("textarea",{className:"polotno-input",ref:u,dir:M(t.text),style:Object.assign(Object.assign(Object.assign({},b),a),{paddingTop:c+"px"}),value:t.text,onChange:e=>{t.set({text:e.target.value})},placeholder:t.placeholder,onBlur:n}))}),T=e=>{const[t,n]=i.default.useState(!1),r=i.default.useRef(!1);return i.default.useEffect(()=>{var t=!0;return setTimeout(()=>{t&&(e._editModeEnabled&&(r.current=!0),n(!0),setTimeout(()=>{r.current=!1},50))},50),()=>{t=!1}},[]),{editorEnabled:t&&e._editModeEnabled,selectAll:r.current}},L=(e,t)=>{const[n,r]=i.default.useState((0,f.isFontLoaded)(t));return i.default.useLayoutEffect(()=>{if((0,f.isFontLoaded)(t))return void r(!0);let i=!0;return(async()=>{n&&r(!1);const o=(0,c.incrementLoader)(`text ${t}`);await e.loadFont(t),d.default.Util.requestAnimFrame(o),i&&r(!0)})(),()=>{i=!1}},[t]),[n]};exports.useFontLoader=L;const O=({fontLoaded:e,fontFamily:t,fontSize:n,lineHeight:r})=>i.default.useMemo(()=>{if("number"==typeof r)return r;const e=document.createElement("div");e.style.fontFamily=t,e.style.fontSize=n+"px",e.style.lineHeight=r,e.innerText="Test text",document.body.appendChild(e);const i=e.offsetHeight;return document.body.removeChild(e),i/n},[e,t,n,r]);function k(e){var t=e.getAbsoluteTransform().copy();t.invert();var n=e.getStage().getPointerPosition();return t.point(n)}function A(e){var t;const n=e.target,r=k(n),i=n.textArr,o=Math.floor(r.y/(n.fontSize()*n.lineHeight())),a=i.slice(0,o).reduce((e,t)=>e+t.text.length,o),l=null!==(t=i[o])&&void 0!==t?t:i[0];let s=0;return"right"===n.align()?s=n.width()-l.width:"center"===n.align()&&(s=n.width()/2-l.width/2),a+Math.round((r.x-s)/l.width*l.text.length)}function F(e){const t=i.default.useRef(e),n=i.default.useRef(e);return i.default.useEffect(()=>{n.current=t.current,t.current=e},[e]),n.current}function $(e,t){const n=e.getAttrs(),r=(0,g.removeTags)(t.text);let i=t.fontSize;const o=Math.round(2*t.fontSize)-1;for(let a=1;a<o;a++){const n=t.height&&e.height()>t.height,o=r.split("\n").join(" ").split(" ");let a=e.textArr.map(e=>e.text).join(";");const l=o.find(e=>!a.includes(e)||(a=a.replace(e,""),!1));if(!n&&!l)break;i-=.5,e.fontSize(i)}return e.fontSize(n.fontSize),i}function _({lines:e,lineHeight:t,width:n,align:r="left",padding:i=0,cornerRadius:o=0}){var a;e.forEach((e,t)=>{e.cx=n/2,"right"===r?e.cx=n-e.width/2:"left"===r&&(e.cx=e.width/2),"justify"!==r||e.lastInParagraph||(e.width=n),"justify"===r&&(e.cx=e.width/2)});let l=`M ${null===(a=e[0])||void 0===a?void 0:a.cx} ${-i}`;e.forEach((n,r)=>{const{cx:o}=n,a=e[r-1];a&&a.width>n.width?l+=` L ${o+n.width/2+i} ${r*t+i}`:l+=` L ${o+n.width/2+i} ${r*t-i}`;const s=e[r+1];s&&s.width>n.width?l+=` L ${o+n.width/2+i} ${(r+1)*t-i}`:l+=` L ${o+n.width/2+i} ${(r+1)*t+i}`});for(var s=e.length-1;s>=0;s--){const n=e[s],{cx:r}=n,o=e[s+1];o&&o.width>n.width?l+=` L ${r-n.width/2-i} ${(s+1)*t-i}`:l+=` L ${r-n.width/2-i} ${(s+1)*t+i}`;const a=e[s-1];a&&a.width>n.width?l+=` L ${r-n.width/2-i} ${s*t+i}`:l+=` L ${r-n.width/2-i} ${s*t-i}`}l+=" Z";const d=(0,u.parsePath)(l);return(0,u.roundCommands)(d,o).path}exports.getLineHeight=O;const P=e=>i.default.useMemo(()=>{if(!p.isGradient(e.fill))return{fill:e.fill};const{stops:t,rotation:n}=p.parseColor(e.fill),r={x:e.width/2,y:e.height/2},i=Math.sqrt(Math.pow(r.x,2)+Math.pow(r.y,2)),o=d.default.Util.degToRad(n)-Math.PI/2,a=[];return t.forEach(({offset:e,color:t})=>{a.push(e,t)}),{fillLinearGradientStartPointX:r.x-i*Math.cos(o),fillLinearGradientStartPointY:r.y-i*Math.sin(o),fillLinearGradientColorStops:a,fillLinearGradientEndPointX:r.x+i*Math.cos(o),fillLinearGradientEndPointY:r.y+i*Math.sin(o),fill:t[1].color,fillPriority:"linear-gradient"}},[e.fill]);exports.useTextColor=P,exports.TextElement=(0,o.observer)(({element:e,store:t})=>{const n=i.default.useRef(null),r=i.default.useRef(null),{editorEnabled:o,selectAll:l}=T(e),[d,u]=i.default.useState(!1),[c,f]=i.default.useState(!1),p=i.default.useRef(e.height),v=t.selectedElements.indexOf(e)>=0,{textVerticalResizeEnabled:b}=h.flags,S=F(e.fontFamily),[E,M]=i.default.useState([]);i.default.useEffect(()=>{var e,t;const r=null!==(t=null===(e=n.current)||void 0===e?void 0:e.textArr)&&void 0!==t?t:[];JSON.stringify(r)!==JSON.stringify(E)&&M(r)}),i.default.useEffect(()=>{if(e.width)return;const t=n.current;t.width(600),e.set({width:1.4*t.getTextWidth()})},[]),i.default.useLayoutEffect(()=>(0,s.autorun)(()=>{const t=n.current;(0,x.applyFilter)(t,e)}));const[L]=(0,exports.useFontLoader)(t,e.fontFamily),O=(0,g.removeTags)(e.text),k=()=>{const e=n.current.clone({height:void 0}),t=Math.ceil(e.fontSize()*e.lineHeight()*e.textArr.length+1);return e.destroy(),t};i.default.useLayoutEffect(()=>{if(!L)return;const{textOverflow:r}=h.flags;if(e.height)if("change-font-size"!==r||c){if("resize"===r){const r=k();b&&e.height<r&&t.history.ignore(()=>{e.set({height:r}),n.current.height(r)}),b||e.height===r||t.history.ignore(()=>{e.set({height:r}),n.current.height(r)})}}else{const r=$(n.current,e);if(r!==e.fontSize)return void t.history.ignore(()=>{e.set({fontSize:r})});const i=k();e.height!==i&&t.history.ignore(()=>{e.set({height:i})})}else{const n=k();t.history.ignore(()=>{e.set({height:n})})}}),i.default.useLayoutEffect(()=>{const t=n.current;t&&(t.width(t.width()+1e-8),t._setTextData(),(0,x.applyFilter)(t,e))},[L]);const P=i.default.useRef(null),R=i.default.useRef(0),H=n=>{n.evt.preventDefault(),t.selectedElements.find(t=>t===e)&&e.contentEditable&&(R.current=A(n),e.toggleEditMode())},q=!O&&e.placeholder?.6:e.a.opacity;(0,y.useFadeIn)(n,q);const C=(0,exports.getLineHeight)({fontLoaded:L,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),j=e.selectable||"admin"===t.role,D=(0,exports.useTextColor)(e),W=i.default.useMemo(()=>e.backgroundEnabled?_({lines:E,cornerRadius:e.backgroundCornerRadius*(e.fontSize*C*.5),lineHeight:C*e.fontSize,padding:e.backgroundPadding*(e.fontSize*C*.5),width:e.width,align:e.align}):"",[e.backgroundEnabled,e.backgroundCornerRadius,e.fontSize,C,e.backgroundPadding,e.width,e.align,E]),X=(0,w.useMobile)();let Y=0;return"middle"===e.verticalAlign?Y=(e.height-E.length*C*e.fontSize)/2:"bottom"===e.verticalAlign&&(Y=e.height-E.length*C*e.fontSize),i.default.createElement(i.default.Fragment,null,i.default.createElement(a.Path,{ref:r,x:e.a.x,y:e.a.y,rotation:e.a.rotation,hideInExport:!e.showInExport||!O,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity,data:W,fill:e.backgroundColor,offsetY:-Y}),i.default.createElement(a.Text,Object.assign({ref:n,id:e.id,name:"element",hideInExport:!e.showInExport||!O,editModeEnabled:e._editModeEnabled,x:e.a.x,y:e.a.y,rotation:e.a.rotation,width:e.width,height:e.height,text:O||e.placeholder},D,{stroke:e.stroke,strokeWidth:e.strokeWidth,fillAfterStrokeEnabled:!0,fontSize:e.fontSize,fontFamily:`"${e.fontFamily}", "${S}"`,fontStyle:e.fontStyle+" "+e.fontWeight,textDecoration:e.textDecoration,align:e.align,verticalAlign:e.verticalAlign,draggable:X?e.draggable&&v:e.draggable,preventDefault:!X||v,opacity:q,visible:!e._editModeEnabled,ellipsis:"ellipsis"===h.flags.textOverflow,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,lineHeight:C,letterSpacing:e.letterSpacing*e.fontSize,listening:j,onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:n=>{e.set({x:n.target.x(),y:n.target.y()}),t.history.endTransaction()},onMouseEnter:()=>{u(!0)},onMouseLeave:()=>{u(!1)},onClick:H,onTap:H,onTransformStart:()=>{f(!0),t.history.startTransaction(),p.current=n.current.height()},onTransform:t=>{var n,i;const o=t.target;null===(n=r.current)||void 0===n||n.setAttrs({x:o.x(),y:o.y(),rotation:o.rotation(),scale:o.scale()});const a=(null===(i=o.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor();if("middle-left"===a||"middle-right"===a){const t=o.scaleX(),n=o.width()*t,r=e.fontSize;let i=n;n<r&&(i=r,P.current&&o.position(P.current)),o.width(i),o.scaleX(1),o.scaleY(1);const a=k();if("ellipsis"!==h.flags.textOverflow){const t=Math.max(a,p.current);o.height(t),e.set({height:o.height()})}e.set({x:o.x(),y:o.y(),width:o.width(),rotation:o.rotation()}),(0,x.applyFilter)(o,e)}if("top-center"===a||"bottom-center"===a){let n="resize"===h.flags.textOverflow?k():C*e.fontSize;t.target.height(Math.max(n,t.target.height()*t.target.scaleY())),t.target.scaleY(1)}t.target.strokeWidth(e.strokeWidth/t.target.scaleX()),P.current=t.target.position()},onTransformEnd:n=>{var i;f(!1);const o=n.target.scaleX();n.target.scaleX(1),n.target.scaleY(1),n.target.strokeWidth(e.strokeWidth),e.set({fontSize:Math.round(e.fontSize*o),width:Math.ceil(n.target.width()*o),x:n.target.x(),y:n.target.y(),rotation:n.target.rotation(),height:n.target.height()*o}),t.history.endTransaction(),null===(i=r.current)||void 0===i||i.setAttrs({scaleX:1,scaleY:1})}})),o&&i.default.createElement(a.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation},i.default.createElement(z,{textNodeRef:n,element:e,selectAll:l,cursorPosition:R.current,onBlur:()=>{e.toggleEditMode(!1)}})),!c&&(d||v)&&i.default.createElement(m.Highlighter,{element:e}))});
223
223
  },{"react":"HdMw","mobx-react-lite":"ZfSi","react-konva":"Sgug","react-konva-utils":"jXQU","mobx":"BzvP","konva":"aTGn","svg-round-corners":"NKfw","../utils/loader":"bN4e","../utils/fonts":"XXLd","../utils/flags":"IDY9","../utils/text":"rHBV","../utils/gradient":"V8he","./apply-filters":"SIWI","./use-fadein":"N3c2","./highlighter":"cEy1","../utils/screen":"aH85"}],"B1DI":[function(require,module,exports) {
224
224
  "use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.useSvgColors=exports.replaceColors=exports.sameColors=exports.fixSize=exports.getSvgSize=exports.svgToURL=exports.getColors=exports.urlToString=exports.urlToBase64=void 0;const e=t(require("konva")),r=t(require("react")),o=require("./gradient");function s(t){for(;t.parentNode;){if("defs"===t.nodeName)return!0;t=t.parentNode}return!1}function n(t){const e={fill:"",stroke:""};return t.getAttribute("fill")&&"none"!==t.getAttribute("fill")&&(e.fill=t.getAttribute("fill")),!e.fill&&t.style.fill&&"none"!==t.style.fill&&(e.fill=t.style.fill),t.getAttribute("stroke")&&(e.stroke=t.getAttribute("stroke")),!e.stroke&&t.style.stroke&&(e.stroke=t.style.stroke),e.stroke||e.fill||(e.fill="black"),e}const i=["path","rect","circle"];function l(t){for(var e=[],r=t.getElementsByTagName("*"),o=0,n=r.length;o<n;o++){const t=r[o];s(t)||(null!==t.getAttribute("fill")&&e.push(t),(null!==t.getAttribute("stroke")||t.style&&t.style.fill||i.indexOf(t.nodeName)>=0)&&e.push(t))}return e}async function a(t){const e=await fetch(t);return f(await e.text())}async function u(t){const e=await fetch(t,{mode:"cors"});return await e.text()}function c(t){const r=l((new DOMParser).parseFromString(t,"image/svg+xml")),o=[];return r.forEach(t=>{const{fill:r,stroke:s}=n(t);[r,s].forEach(t=>{t&&e.default.Util.colorToRGBA(t)&&-1===o.indexOf(t)&&o.push(t)})}),o}function f(t){return"data:image/svg+xml;base64,"+window.btoa(unescape(encodeURIComponent(t)))}async function p(t){const e=await u(t),r=(new DOMParser).parseFromString(e,"image/svg+xml").documentElement.getAttribute("viewBox"),[o,s,n,i]=(null==r?void 0:r.split(" "))||[];return{width:parseFloat(n),height:parseFloat(i)}}function d(t){var e=(new DOMParser).parseFromString(t,"image/svg+xml");const r=e.documentElement.getAttribute("viewBox"),[o,s,n,i]=(null==r?void 0:r.split(" "))||[],l=e.documentElement.getAttribute("width");!l&&e.documentElement.setAttribute("width",n+"px");const a=e.documentElement.getAttribute("height");if((!a||a.indexOf("%")>=0)&&e.documentElement.setAttribute("height",i+"px"),l&&l.indexOf("%")>=0&&a&&-1===a.indexOf("%")){const t=parseFloat(a)/parseFloat(i);e.documentElement.setAttribute("width",t*parseFloat(n)+"px")}if(a&&a.indexOf("%")>=0&&l&&-1===l.indexOf("%")){const t=parseFloat(l)/parseFloat(n);e.documentElement.setAttribute("height",t*parseFloat(i)+"px")}return(new XMLSerializer).serializeToString(e)}exports.urlToBase64=a,exports.urlToString=u,exports.getColors=c,exports.svgToURL=f,exports.getSvgSize=p,exports.fixSize=d;const g=(t,r)=>{if(!t||!r)return!1;const o=e.default.Util.colorToRGBA(t),s=e.default.Util.colorToRGBA(r);return o&&s?o.r===s.r&&o.g===s.g&&o.b===s.b&&o.a===s.a:void 0};function m(t,r,o,s){var n=t.namespaceURI,i=document.createElementNS(n,"linearGradient");const l=e.default.Util.degToRad(o+90),a=(Math.cos(l)+1)/2,u=(Math.sin(l)+1)/2,c=(Math.cos(l+Math.PI)+1)/2,f=(Math.sin(l+Math.PI)+1)/2;i.setAttribute("x1",100*a+"%"),i.setAttribute("y1",100*u+"%"),i.setAttribute("x2",100*c+"%"),i.setAttribute("y2",100*f+"%"),i.setAttribute("gradientUnits","userSpaceOnUse"),i.setAttribute("id",r);for(var p=0;p<s.length;p++){var d=s[p],g=document.createElementNS(n,"stop");for(var m in d)d.hasOwnProperty(m)&&g.setAttribute(m,d[m]);i.appendChild(g)}return(t.querySelector("defs")||t.insertBefore(document.createElementNS(n,"defs"),t.firstChild)).appendChild(i)}function x(t,e){var r=(new DOMParser).parseFromString(t,"image/svg+xml");const s=l(r),i=Array.from(e.keys());return s.forEach(t=>{const{fill:s,stroke:l}=n(t);[{prop:"fill",color:s},{prop:"stroke",color:l}].forEach(({prop:s,color:n})=>{const l=i.find(t=>(0,exports.sameColors)(t,n));if(l){const n=e.get(l);if((0,o.isGradient)(n)){const{rotation:e,stops:i}=(0,o.parseColor)(n),l=i.map(t=>({offset:100*t.offset+"%","stop-color":t.color})),a="color"+Math.round(1e8*Math.random());m(r.children[0],a,e,l),t.style[s]=null,t.setAttribute(s,`url('#${a}')`)}else t.style[s]=e.get(l)}})}),f((new XMLSerializer).serializeToString(r))}exports.sameColors=g,exports.replaceColors=x;const h=t=>{const[e,o]=r.default.useState([]);return r.default.useEffect(()=>{let e=!1;return(async()=>{o([]);const r=c(await u(t));e||o(r)})(),()=>{e=!0}},[t]),e};exports.useSvgColors=h;
225
225
  },{"konva":"aTGn","react":"HdMw","./gradient":"V8he"}],"VbEp":[function(require,module,exports) {
226
- "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,i)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var a={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(a,r,i);return t(a,r),a},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImageElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const i=a(require("react")),o=require("mobx-react-lite"),n=require("mobx"),h=require("react-konva"),d=a(require("use-image")),l=a(require("konva")),c=require("react-konva-utils"),s=require("./highlighter"),u=require("../utils/loader"),g=r(require("../utils/svg")),f=require("../utils/flags"),m=require("./apply-filters"),p=require("./use-fadein"),w=require("../utils/screen");function x(){return document.createElement("canvas")}async function y(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await g.urlToString(e),r=g.fixSize(t);return g.svgToURL(r)}const M=e=>{const[t,r]=i.default.useState(e);return i.default.useEffect(()=>{(async()=>{const a=await y(e);a!==t&&r(a)})()},[e]),t},b=(e,t,r)=>{const a=i.default.useMemo(()=>{var a,i;const{flipX:o,flipY:n}=e,h="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0,d=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;if(!(o||n||d&&h))return t;if(!t||!t.width||!t.height)return null;const l=x();let c=1;"svg"===e.type&&(c=Math.max(e.width/t.width*r,e.height/t.height*r)),l.width=Math.max(t.width*c,1),l.height=Math.max(t.height*c,1);let s=o?-l.width:0,u=n?-l.height:0;return null===(a=l.getContext("2d"))||void 0===a||a.scale(o?-1:1,n?-1:1),null===(i=l.getContext("2d"))||void 0===i||i.drawImage(t,s,u,l.width,l.height),l},[e.flipX,e.flipY,t,e.width,e.height,r]);return i.default.useEffect(()=>()=>{a&&"CANVAS"===a.nodeName&&l.default.Util.releaseCanvas(a)},[a]),a};function v(e,t){const r=t.width/t.height;let a,i;return r>=e.width/e.height?(a=e.width,i=e.width/r):(a=e.height*r,i=e.height),{x:(e.width-a)/2,y:(e.height-i)/2,width:a,height:i}}function E(e,t,r,a,i,o,n){for(var h=new ImageData(t,r),d=new Int32Array(e.data.buffer),l=e.width,c=new Int32Array(h.data.buffer),s=h.width,u=t/o,g=r/n,f=Math.round(1/u),m=Math.round(1/g),p=f*m,w=0;w<h.height;w++)for(var x=0;x<s;x++){for(var y=a+Math.round(x/u)+(i+Math.round(w/g))*l,M=0,b=0,v=0,E=0,I=0;I<m;I++)for(var S=0;S<f;S++){var _=d[y+S+I*l];M+=_<<24>>>24,b+=_<<16>>>24,v+=_<<8>>>24,E+=_>>>24}M=Math.round(M/p),b=Math.round(b/p),v=Math.round(v/p),E=Math.round(E/p),c[x+w*s]=E<<24|v<<16|b<<8|M}return h}function I(e,t){var r,a;const i=x();i.width=e.width,i.height=e.height,null===(r=i.getContext("2d"))||void 0===r||r.drawImage(e,0,0,i.width,i.height);const o=E(i.getContext("2d").getImageData(0,0,i.width,i.height),Math.floor(i.width*t),Math.floor(i.height*t),0,0,i.width,i.height);return i.width=Math.floor(i.width*t),i.height=Math.floor(i.height*t),null===(a=i.getContext("2d"))||void 0===a||a.putImageData(o,0,0),i}const S=(e,t)=>{const[r,a]=Y(e.maskSrc,"anonymous"),o=e.maskSrc?a:"loaded";return(0,exports.useImageLoader)(o,e.id+"-mask"),i.default.useMemo(()=>{if(!r)return t;if(!t||!t.width||!t.height)return t;const a=x();a.width=Math.max(t.width,1),a.height=Math.max(t.height,1);const i=a.getContext("2d");if(!i)return t;i.drawImage(t,0,0),i.globalCompositeOperation="source-in";const o=v(r,e);return i.drawImage(r,o.x,o.y,o.width,o.height,0,0,t.width,t.height),a},[t,r,e.width,e.height])},_=(e,t,r,a,o=0,n=!1)=>{const h=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(o*a,h/2,d/2),s=Math.max(e.width/r.width,e.height/r.height)*a,u=e.page._exporting&&f.flags.imageDownScalingEnabled&&s<1&&!n,g=i.default.useMemo(()=>{if(t&&t.width&&t.height)return 0!==r.x||0!==r.y||r.width!==t.width||r.height!==t.height||0!==c||u?x():void 0},[t]);return i.default.useLayoutEffect(()=>{if(!g||!t)return;g.width=h,g.height=d;const e=g.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(h-c,0),e.arc(h-c,c,c,3*Math.PI/2,0,!1),e.lineTo(h,d-c),e.arc(h-c,d-c,c,0,Math.PI/2,!1),e.lineTo(c,d),e.arc(c,d-c,c,Math.PI/2,Math.PI,!1),e.lineTo(0,c),e.arc(c,c,c,Math.PI,3*Math.PI/2,!1),e.clip());const a=u?I(t,s):t,i=u?{x:Math.floor(r.x*s),y:Math.floor(r.y*s),width:Math.floor(r.width*s),height:Math.floor(r.height*s)}:r;e.drawImage(a,i.x,i.y,i.width,i.height,0,0,g.width,g.height)},[g,e.width,e.height,r.x,r.y,r.width,r.height,o,a,n,e.page._exporting,u]),i.default.useEffect(()=>()=>{g&&"CANVAS"===g.nodeName&&l.default.Util.releaseCanvas(g)},[g]),g||t},R=(e,t,r,a)=>{const o=M(e.clipSrc||""),[n,h]=Y(o,"anonymous"),d=e.clipSrc?h:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=i.default.useMemo(()=>{if(t&&n)return x()},[t,n]);return i.default.useLayoutEffect(()=>{var a;if(!n)return;if(!t||!t.width||!t.height)return;if(!n||!n.width||!n.height)return;if(!c)return;const i=x(),o=Math.max(e.width/n.width*r,e.height/n.height*r);i.width=n.width*o,i.height=n.height*o,null===(a=i.getContext("2d"))||void 0===a||a.drawImage(n,0,0,i.width,i.height),c.width=Math.max(t.width,1),c.height=Math.max(t.height,1);const h=c.getContext("2d");h&&(h.save(),h.drawImage(i,0,0,t.width,t.height),l.default.Util.releaseCanvas(i),h.globalCompositeOperation="source-in",h.drawImage(t,0,0,c.width,c.height),h.restore())},[c,t,n,e.width,e.height,r,...a]),e.clipSrc&&n?c:t},C=x(),O=(0,o.observer)(({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=i.default.useRef(null);return i.default.useEffect(()=>{const e=r.current;if(!e)return;const t=new l.default.Animation(t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)},e.getLayer());return t.start(),()=>{t.stop()}}),i.default.createElement(h.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},i.default.createElement(h.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),i.default.createElement(h.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))}),X=(0,o.observer)(({element:e})=>{const t="Can not load the image...",r=Math.max(10,Math.min(30,e.width/t.length));return i.default.createElement(h.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},i.default.createElement(h.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),i.default.createElement(h.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))});let Y=d.default;const T=e=>{Y=e};exports.setImageLoaderHook=T;const L=(e,t)=>{const r=i.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};i.default.useEffect(()=>a,[]),i.default.useLayoutEffect(()=>{"loading"!==e||r.current||(r.current=(0,u.incrementLoader)(`image ${t}`)),"loading"!==e&&a(),"failed"===e&&(0,u.triggerLoadError)(`image ${t}`)},[e])};exports.useImageLoader=L;const W=({image:e,status:t,type:r})=>{const a=i.default.useRef();return i.default.useEffect(()=>{a.current=e||a.current},[e]),"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0},k=e=>{const[t,r]=i.default.useReducer(e=>e+1,0),a=i.default.useRef("loading"),o=i.default.useRef(e.src),n=i.default.useRef(e.src);return n.current!==e.src&&(n.current=e.src,a.current="loading"),i.default.useEffect(()=>{if("image"===e.type)return;if(!e.src)return;let t=!1;return(async()=>{a.current="loading",r();const i=await g.urlToString(e.src),n=g.fixSize(i),h=g.replaceColors(n,e.colorsReplace);t||(o.current=h,a.current="loaded",r())})(),()=>{t=!0}},[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[o.current,a.current]};exports.ImageElement=(0,o.observer)(({element:e,store:t})=>{var r;const[a,o]=i.default.useState(!1),d=i.default.useRef(null),l=i.default.useRef(null),[u,g]=i.default.useState(!1),f=t.selectedElements.indexOf(e)>=0,[x,y]=k(e),[M,v]=Y(x,"anonymous"),E="svg"!==e.type||"loaded"===y?v:"loading";(0,exports.useImageLoader)(E,e.id);const I=W({image:M,status:v,type:e.type}),T=S(e,b(e,M||I,t._elementsPixelRatio))||C;let{cropX:L,cropY:P,cropWidth:A,cropHeight:H}=e;"loaded"!==v&&(L=P=0,A=H=1);const D=T.width*A,q=T.height*H,z=e.width/e.height;let F,B;const j=D/q,N="svg"===e.type;N?(F=D,B=q):z>=j?(F=D,B=D/z):(F=q*z,B=q);const U={x:T.width*L,y:T.height*P,width:F,height:B},G=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let V=R(e,_(e,T,U,t._elementsPixelRatio,G,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[U,G,t._elementsPixelRatio]);const $=Math.max(e.width/F,e.height/B);i.default.useEffect(()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=d.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==l.current&&e.toggleCropMode(!1)}function i(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",i),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",i),document.body.removeEventListener("touchstart",i),null==r||r.off("click",a),null==r||r.off("click",a)}},[e._cropModeEnabled]),i.default.useLayoutEffect(()=>{if(!a&&!e._cropModeEnabled)return(0,m.applyFilter)(d.current,e),(0,n.autorun)(()=>{(0,m.applyFilter)(d.current,e)},{delay:100})},[T,a,A,H,e._cropModeEnabled]),i.default.useLayoutEffect(()=>{var t;a||e._cropModeEnabled?null===(t=d.current)||void 0===t||t.clearCache():(0,m.applyFilter)(d.current,e)},[a,e.width,e.height,e._cropModeEnabled]),i.default.useEffect(()=>{(0,m.applyFilter)(d.current,e)},[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const J=i.default.useRef(null),K=i.default.useRef(null),Q=i.default.useRef(null);i.default.useLayoutEffect(()=>{e._cropModeEnabled&&(K.current.nodes([J.current]),Q.current.nodes([l.current]))},[e._cropModeEnabled]);const Z=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),i=Math.min(1,F/r),o=Math.min(1,B/a),n=1-i,h=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),d=1-o,l=Math.min(d,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-h*T.width,y:-l*T.height,scaleX:1,scaleY:1}),e.set({cropX:h,cropY:l,cropWidth:i,cropHeight:o})},ee=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout(()=>{e.toggleCropMode(!0)})},te="svg"===e.type&&I,re="loading"===v&&!te,ae="failed"===v,ie=!re&&!ae,oe=i.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),ne=ie?e.a.opacity:0;(0,p.useFadeIn)(d,ne);const he=e.selectable||"admin"===t.role,de=(0,w.useMobile)();return i.default.createElement(i.default.Fragment,null,re&&i.default.createElement(O,{element:e}),ae&&i.default.createElement(X,{element:e}),i.default.createElement(h.Image,{ref:d,name:"element",id:e.id,image:V,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:ne,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:U,listening:he,draggable:de?e.draggable&&f:e.draggable,preventDefault:!de||f,hideInExport:!e.showInExport,onMouseEnter:()=>{g(!0)},onMouseLeave:()=>{g(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onDblClick:ee,onDblTap:ee,onTransformStart:()=>{o(!0),t.history.startTransaction(),oe.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,i=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),o=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),h=1-F/T.width,d=Math.min(h,Math.max(0,e.cropX)),l=1-B/T.height,c=Math.min(l,Math.max(0,e.cropY)),s=n.getActiveAnchor(),u=!(s.indexOf("middle")>=0||s.indexOf("center")>=0),g=!u&&i<1&&oe.current.cropHeight>B/T.height;let f=u?e.cropWidth:e.cropWidth*i;g&&(f=e.cropWidth);const m=!u&&o<1&&oe.current.cropWidth>F/T.width;let p=u?e.cropHeight:e.cropHeight*o;m&&(p=e.cropHeight),N&&(f=e.cropWidth,p=e.cropHeight),e.set({cropX:d,cropY:c,x:a.x(),y:a.y(),width:a.width()*i,height:a.height()*o,rotation:t.target.rotation(),cropWidth:Math.min(f,1-d),cropHeight:Math.min(p,1-c)})},onTransformEnd:r=>{const a=r.currentTarget;e.set({width:a.width(),height:a.height(),x:a.x(),y:a.y(),rotation:r.target.rotation(),cropWidth:F/T.width,cropHeight:B/T.height}),o(!1),t.history.endTransaction()}}),i.default.createElement(h.Rect,{x:e.x,y:e.y,width:Math.max(e.width-e.borderSize,0),height:Math.max(e.height-e.borderSize,0),opacity:ne,offsetX:-e.borderSize/2,offsetY:-e.borderSize/2,stroke:e.borderColor,strokeWidth:e.borderSize,listening:!1,visible:!!e.borderSize,rotation:e.rotation,cornerRadius:Math.max(0,G-e.borderSize),hideInExport:!e.showInExport}),e._cropModeEnabled&&i.default.createElement(c.Portal,{selector:".page-abs-container",enabled:!0},i.default.createElement(h.Rect,{x:-window.innerWidth/t.scale,y:-window.innerWidth/t.scale,width:window.innerWidth/t.scale*3,height:window.innerWidth/t.scale*3,fill:"rgba(0,0,0,0.3)"}),i.default.createElement(h.Image,{listening:!1,image:V,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),i.default.createElement(h.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:$,scaleY:$},i.default.createElement(h.Image,{image:T,ref:l,opacity:.4,draggable:!0,x:-e.cropX*T.width,y:-e.cropY*T.height,onDragMove:Z,onTransform:Z}),i.default.createElement(h.Transformer,{ref:Q,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),i.default.createElement(h.Rect,{width:F,height:B,ref:J,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*T.width-1e-9&&(t.target.x(-e.cropX*T.width),t.target.scaleX(1)),t.target.y()<-e.cropY*T.height-1e-9&&(t.target.y(-e.cropY*T.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/T.width)),a=Math.min(1,Math.max(0,t.target.y()/T.height+e.cropY)),i=t.target.width()*t.target.scaleX(),o=t.target.height()*t.target.scaleY(),n=Math.min(1-r,i/T.width),h=Math.min(1-a,o/T.height),d=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:d.x,y:d.y,cropX:r,cropY:a,cropWidth:n,cropHeight:h,width:Math.min(i*$,T.width*(1-r)*$),height:Math.min(o*$,T.height*(1-a)*$)})}}),i.default.createElement(h.Transformer,{ref:K,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,keepRatio:!1,rotateEnabled:!1,anchorFill:"rgb(240, 240, 240)",anchorStrokeWidth:2,borderStrokeWidth:2}))),(u||f)&&i.default.createElement(s.Highlighter,{element:e}))});
226
+ "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,i)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var a={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(a,r,i);return t(a,r),a},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImageElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const i=a(require("react")),o=require("mobx-react-lite"),n=require("mobx"),h=require("react-konva"),d=a(require("use-image")),l=a(require("konva")),c=require("react-konva-utils"),s=require("./highlighter"),u=require("../utils/loader"),g=r(require("../utils/svg")),f=require("../utils/flags"),m=require("./apply-filters"),p=require("./use-fadein"),w=require("../utils/screen");function x(){return document.createElement("canvas")}async function y(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await g.urlToString(e),r=g.fixSize(t);return g.svgToURL(r)}const M=e=>{const[t,r]=i.default.useState(e);return i.default.useEffect(()=>{(async()=>{const a=await y(e);a!==t&&r(a)})()},[e]),t},b=(e,t,r)=>{const a=i.default.useMemo(()=>{var a,i;const{flipX:o,flipY:n}=e,h="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0,d=navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&h||e.maskSrc;if(!o&&!n&&!d)return t;if(!t||!t.width||!t.height)return null;const l=x();let c=1;"svg"===e.type&&(c=Math.max(e.width/t.width*r,e.height/t.height*r)),l.width=Math.max(t.width*c,1),l.height=Math.max(t.height*c,1);let s=o?-l.width:0,u=n?-l.height:0;return null===(a=l.getContext("2d"))||void 0===a||a.scale(o?-1:1,n?-1:1),null===(i=l.getContext("2d"))||void 0===i||i.drawImage(t,s,u,l.width,l.height),l},[e.maskSrc,e.flipX,e.flipY,t,e.width,e.height,r]);return i.default.useEffect(()=>()=>{a&&"CANVAS"===a.nodeName&&l.default.Util.releaseCanvas(a)},[a]),a};function v(e,t){const r=t.width/t.height;let a,i;return r>=e.width/e.height?(a=e.width,i=e.width/r):(a=e.height*r,i=e.height),{x:(e.width-a)/2,y:(e.height-i)/2,width:a,height:i}}function E(e,t,r,a,i,o,n){for(var h=new ImageData(t,r),d=new Int32Array(e.data.buffer),l=e.width,c=new Int32Array(h.data.buffer),s=h.width,u=t/o,g=r/n,f=Math.round(1/u),m=Math.round(1/g),p=f*m,w=0;w<h.height;w++)for(var x=0;x<s;x++){for(var y=a+Math.round(x/u)+(i+Math.round(w/g))*l,M=0,b=0,v=0,E=0,I=0;I<m;I++)for(var S=0;S<f;S++){var _=d[y+S+I*l];M+=_<<24>>>24,b+=_<<16>>>24,v+=_<<8>>>24,E+=_>>>24}M=Math.round(M/p),b=Math.round(b/p),v=Math.round(v/p),E=Math.round(E/p),c[x+w*s]=E<<24|v<<16|b<<8|M}return h}function I(e,t){var r,a;const i=x();i.width=e.width,i.height=e.height,null===(r=i.getContext("2d"))||void 0===r||r.drawImage(e,0,0,i.width,i.height);const o=E(i.getContext("2d").getImageData(0,0,i.width,i.height),Math.floor(i.width*t),Math.floor(i.height*t),0,0,i.width,i.height);return i.width=Math.floor(i.width*t),i.height=Math.floor(i.height*t),null===(a=i.getContext("2d"))||void 0===a||a.putImageData(o,0,0),i}const S=(e,t)=>{const[r,a]=Y(e.maskSrc,"anonymous"),o=e.maskSrc?a:"loaded";return(0,exports.useImageLoader)(o,e.id+"-mask"),i.default.useMemo(()=>{if(!r)return t;if(!t||!t.width||!t.height)return t;const a=x();a.width=Math.max(t.width,1),a.height=Math.max(t.height,1);const i=a.getContext("2d");if(!i)return t;i.drawImage(t,0,0),i.globalCompositeOperation="source-in";const o=v(r,e);return i.drawImage(r,o.x,o.y,o.width,o.height,0,0,t.width,t.height),a},[t,r,e.width,e.height])},_=(e,t,r,a,o=0,n=!1)=>{const h=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(o*a,h/2,d/2),s=Math.max(e.width/r.width,e.height/r.height)*a,u=e.page._exporting&&f.flags.imageDownScalingEnabled&&s<1&&!n,g=0===r.x&&0===r.y&&r.width===(null==t?void 0:t.width)&&r.height===(null==t?void 0:t.height),m=i.default.useMemo(()=>{if(t&&t.width&&t.height)return g&&0===c&&!u?void 0:x()},[t,c,u,g]);return i.default.useLayoutEffect(()=>{if(!m||!t)return;m.width=h,m.height=d;const e=m.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(h-c,0),e.arc(h-c,c,c,3*Math.PI/2,0,!1),e.lineTo(h,d-c),e.arc(h-c,d-c,c,0,Math.PI/2,!1),e.lineTo(c,d),e.arc(c,d-c,c,Math.PI/2,Math.PI,!1),e.lineTo(0,c),e.arc(c,c,c,Math.PI,3*Math.PI/2,!1),e.clip());const a=u?I(t,s):t,i=u?{x:Math.floor(r.x*s),y:Math.floor(r.y*s),width:Math.floor(r.width*s),height:Math.floor(r.height*s)}:r;e.drawImage(a,i.x,i.y,i.width,i.height,0,0,m.width,m.height)},[m,e.width,e.height,r.x,r.y,r.width,r.height,o,a,n,e.page._exporting,u]),i.default.useEffect(()=>()=>{m&&"CANVAS"===m.nodeName&&l.default.Util.releaseCanvas(m)},[m]),m||t},R=(e,t,r,a)=>{const o=M(e.clipSrc||""),[n,h]=Y(o,"anonymous"),d=e.clipSrc?h:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=i.default.useMemo(()=>{if(t&&n)return x()},[t,n]);return i.default.useLayoutEffect(()=>{var a;if(!n)return;if(!t||!t.width||!t.height)return;if(!n||!n.width||!n.height)return;if(!c)return;const i=x(),o=Math.max(e.width/n.width*r,e.height/n.height*r);i.width=n.width*o,i.height=n.height*o,null===(a=i.getContext("2d"))||void 0===a||a.drawImage(n,0,0,i.width,i.height),c.width=Math.max(t.width,1),c.height=Math.max(t.height,1);const h=c.getContext("2d");h&&(h.save(),h.drawImage(i,0,0,t.width,t.height),l.default.Util.releaseCanvas(i),h.globalCompositeOperation="source-in",h.drawImage(t,0,0,c.width,c.height),h.restore())},[c,t,n,e.width,e.height,r,...a]),e.clipSrc&&n?c:t},C=x(),O=(0,o.observer)(({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=i.default.useRef(null);return i.default.useEffect(()=>{const e=r.current;if(!e)return;const t=new l.default.Animation(t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)},e.getLayer());return t.start(),()=>{t.stop()}}),i.default.createElement(h.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},i.default.createElement(h.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),i.default.createElement(h.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))}),X=(0,o.observer)(({element:e})=>{const t="Can not load the image...",r=Math.max(10,Math.min(30,e.width/t.length));return i.default.createElement(h.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},i.default.createElement(h.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),i.default.createElement(h.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))});let Y=d.default;const T=e=>{Y=e};exports.setImageLoaderHook=T;const k=(e,t)=>{const r=i.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};i.default.useEffect(()=>a,[]),i.default.useLayoutEffect(()=>{"loading"!==e||r.current||(r.current=(0,u.incrementLoader)(`image ${t}`)),"loading"!==e&&a(),"failed"===e&&(0,u.triggerLoadError)(`image ${t}`)},[e])};exports.useImageLoader=k;const L=({image:e,status:t,type:r})=>{const a=i.default.useRef();return i.default.useEffect(()=>{a.current=e||a.current},[e]),"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0},W=e=>{const[t,r]=i.default.useReducer(e=>e+1,0),a=i.default.useRef("loading"),o=i.default.useRef(e.src),n=i.default.useRef(e.src);return n.current!==e.src&&(n.current=e.src,a.current="loading"),i.default.useEffect(()=>{if("image"===e.type)return;if(!e.src)return;let t=!1;return(async()=>{a.current="loading",r();const i=await g.urlToString(e.src),n=g.fixSize(i),h=g.replaceColors(n,e.colorsReplace);t||(o.current=h,a.current="loaded",r())})(),()=>{t=!0}},[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[o.current,a.current]};exports.ImageElement=(0,o.observer)(({element:e,store:t})=>{var r;const[a,o]=i.default.useState(!1),d=i.default.useRef(null),l=i.default.useRef(null),[u,g]=i.default.useState(!1),f=t.selectedElements.indexOf(e)>=0,[x,y]=W(e),[M,v]=Y(x,"anonymous"),E="svg"!==e.type||"loaded"===y?v:"loading";(0,exports.useImageLoader)(E,e.id);const I=L({image:M,status:v,type:e.type}),T=S(e,b(e,M||I,t._elementsPixelRatio))||C;let{cropX:k,cropY:P,cropWidth:A,cropHeight:H}=e;"loaded"!==v&&(k=P=0,A=H=1);const D=T.width*A,q=T.height*H,z=e.width/e.height;let F,B;const j=D/q,N="svg"===e.type;N?(F=D,B=q):z>=j?(F=D,B=D/z):(F=q*z,B=q);const U={x:T.width*k,y:T.height*P,width:F,height:B},G=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let V=R(e,_(e,T,U,t._elementsPixelRatio,G,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[U,G,t._elementsPixelRatio]);const $=Math.max(e.width/F,e.height/B);i.default.useEffect(()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=d.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==l.current&&e.toggleCropMode(!1)}function i(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",i),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",i),document.body.removeEventListener("touchstart",i),null==r||r.off("click",a),null==r||r.off("click",a)}},[e._cropModeEnabled]),i.default.useLayoutEffect(()=>{if(!a&&!e._cropModeEnabled)return(0,m.applyFilter)(d.current,e),(0,n.autorun)(()=>{(0,m.applyFilter)(d.current,e)},{delay:100})},[T,a,A,H,e._cropModeEnabled]),i.default.useLayoutEffect(()=>{var t;a||e._cropModeEnabled?null===(t=d.current)||void 0===t||t.clearCache():(0,m.applyFilter)(d.current,e)},[a,e.width,e.height,e._cropModeEnabled]),i.default.useEffect(()=>{(0,m.applyFilter)(d.current,e)},[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const J=i.default.useRef(null),K=i.default.useRef(null),Q=i.default.useRef(null);i.default.useLayoutEffect(()=>{e._cropModeEnabled&&(K.current.nodes([J.current]),Q.current.nodes([l.current]))},[e._cropModeEnabled]);const Z=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),i=Math.min(1,F/r),o=Math.min(1,B/a),n=1-i,h=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),d=1-o,l=Math.min(d,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-h*T.width,y:-l*T.height,scaleX:1,scaleY:1}),e.set({cropX:h,cropY:l,cropWidth:i,cropHeight:o})},ee=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout(()=>{e.toggleCropMode(!0)})},te="svg"===e.type&&I,re="loading"===v&&!te,ae="failed"===v,ie=!re&&!ae,oe=i.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),ne=ie?e.a.opacity:0;(0,p.useFadeIn)(d,ne);const he=e.selectable||"admin"===t.role,de=(0,w.useMobile)();return i.default.createElement(i.default.Fragment,null,re&&i.default.createElement(O,{element:e}),ae&&i.default.createElement(X,{element:e}),i.default.createElement(h.Image,{ref:d,name:"element",id:e.id,image:V,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:ne,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:U,listening:he,draggable:de?e.draggable&&f:e.draggable,preventDefault:!de||f,hideInExport:!e.showInExport,onMouseEnter:()=>{g(!0)},onMouseLeave:()=>{g(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onDblClick:ee,onDblTap:ee,onTransformStart:()=>{o(!0),t.history.startTransaction(),oe.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,i=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),o=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),h=1-F/T.width,d=Math.min(h,Math.max(0,e.cropX)),l=1-B/T.height,c=Math.min(l,Math.max(0,e.cropY)),s=n.getActiveAnchor(),u=!(s.indexOf("middle")>=0||s.indexOf("center")>=0),g=!u&&i<1&&oe.current.cropHeight>B/T.height;let f=u?e.cropWidth:e.cropWidth*i;g&&(f=e.cropWidth);const m=!u&&o<1&&oe.current.cropWidth>F/T.width;let p=u?e.cropHeight:e.cropHeight*o;m&&(p=e.cropHeight),N&&(f=e.cropWidth,p=e.cropHeight),e.set({cropX:d,cropY:c,x:a.x(),y:a.y(),width:a.width()*i,height:a.height()*o,rotation:t.target.rotation(),cropWidth:Math.min(f,1-d),cropHeight:Math.min(p,1-c)})},onTransformEnd:r=>{const a=r.currentTarget;e.set({width:a.width(),height:a.height(),x:a.x(),y:a.y(),rotation:r.target.rotation(),cropWidth:F/T.width,cropHeight:B/T.height}),o(!1),t.history.endTransaction()}}),i.default.createElement(h.Rect,{x:e.x,y:e.y,width:Math.max(e.width-e.borderSize,0),height:Math.max(e.height-e.borderSize,0),opacity:ne,offsetX:-e.borderSize/2,offsetY:-e.borderSize/2,stroke:e.borderColor,strokeWidth:e.borderSize,listening:!1,visible:!!e.borderSize,rotation:e.rotation,cornerRadius:Math.max(0,G-e.borderSize),hideInExport:!e.showInExport}),e._cropModeEnabled&&i.default.createElement(c.Portal,{selector:".page-abs-container",enabled:!0},i.default.createElement(h.Rect,{x:-window.innerWidth/t.scale,y:-window.innerWidth/t.scale,width:window.innerWidth/t.scale*3,height:window.innerWidth/t.scale*3,fill:"rgba(0,0,0,0.3)"}),i.default.createElement(h.Image,{listening:!1,image:V,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),i.default.createElement(h.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:$,scaleY:$},i.default.createElement(h.Image,{image:T,ref:l,opacity:.4,draggable:!0,x:-e.cropX*T.width,y:-e.cropY*T.height,onDragMove:Z,onTransform:Z}),i.default.createElement(h.Transformer,{ref:Q,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),i.default.createElement(h.Rect,{width:F,height:B,ref:J,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*T.width-1e-9&&(t.target.x(-e.cropX*T.width),t.target.scaleX(1)),t.target.y()<-e.cropY*T.height-1e-9&&(t.target.y(-e.cropY*T.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/T.width)),a=Math.min(1,Math.max(0,t.target.y()/T.height+e.cropY)),i=t.target.width()*t.target.scaleX(),o=t.target.height()*t.target.scaleY(),n=Math.min(1-r,i/T.width),h=Math.min(1-a,o/T.height),d=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:d.x,y:d.y,cropX:r,cropY:a,cropWidth:n,cropHeight:h,width:Math.min(i*$,T.width*(1-r)*$),height:Math.min(o*$,T.height*(1-a)*$)})}}),i.default.createElement(h.Transformer,{ref:K,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,keepRatio:!1,rotateEnabled:!1,anchorFill:"rgb(240, 240, 240)",anchorStrokeWidth:2,borderStrokeWidth:2}))),(u||f)&&i.default.createElement(s.Highlighter,{element:e}))});
227
227
  },{"react":"HdMw","mobx-react-lite":"ZfSi","mobx":"BzvP","react-konva":"Sgug","use-image":"MJM3","konva":"aTGn","react-konva-utils":"jXQU","./highlighter":"cEy1","../utils/loader":"bN4e","../utils/svg":"B1DI","../utils/flags":"IDY9","./apply-filters":"SIWI","./use-fadein":"N3c2","../utils/screen":"aH85"}],"FRly":[function(require,module,exports) {
228
228
  "use strict";exports.byteLength=u,exports.toByteArray=i,exports.fromByteArray=d;for(var r=[],t=[],e="undefined"!=typeof Uint8Array?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,a=n.length;o<a;++o)r[o]=n[o],t[n.charCodeAt(o)]=o;function h(r){var t=r.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var e=r.indexOf("=");return-1===e&&(e=t),[e,e===t?0:4-e%4]}function u(r){var t=h(r),e=t[0],n=t[1];return 3*(e+n)/4-n}function c(r,t,e){return 3*(t+e)/4-e}function i(r){var n,o,a=h(r),u=a[0],i=a[1],f=new e(c(r,u,i)),A=0,d=i>0?u-4:u;for(o=0;o<d;o+=4)n=t[r.charCodeAt(o)]<<18|t[r.charCodeAt(o+1)]<<12|t[r.charCodeAt(o+2)]<<6|t[r.charCodeAt(o+3)],f[A++]=n>>16&255,f[A++]=n>>8&255,f[A++]=255&n;return 2===i&&(n=t[r.charCodeAt(o)]<<2|t[r.charCodeAt(o+1)]>>4,f[A++]=255&n),1===i&&(n=t[r.charCodeAt(o)]<<10|t[r.charCodeAt(o+1)]<<4|t[r.charCodeAt(o+2)]>>2,f[A++]=n>>8&255,f[A++]=255&n),f}function f(t){return r[t>>18&63]+r[t>>12&63]+r[t>>6&63]+r[63&t]}function A(r,t,e){for(var n,o=[],a=t;a<e;a+=3)n=(r[a]<<16&16711680)+(r[a+1]<<8&65280)+(255&r[a+2]),o.push(f(n));return o.join("")}function d(t){for(var e,n=t.length,o=n%3,a=[],h=0,u=n-o;h<u;h+=16383)a.push(A(t,h,h+16383>u?u:h+16383));return 1===o?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+"==")):2===o&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),a.join("")}t["-".charCodeAt(0)]=62,t["_".charCodeAt(0)]=63;
229
229
  },{}],"Quj6":[function(require,module,exports) {
@@ -303,13 +303,13 @@ var e;!function(t,n){void 0===t&&void 0!==window&&(t=window),"function"==typeof
303
303
  .ql-direction-rtl {
304
304
  direction: rtl;
305
305
  }
306
- `,E=({html:e,onBlur:t,onChange:i,element:n})=>{const r=o.default.useRef(null);o.default.useEffect(()=>{if(!r.current)return;const e=new l.default(r.current,{toolbar:!1,keyboard:!1,clipboard:{matchVisual:!1}});return exports.quillRef.editor.instance=e,window.__polotnoQuill=e,e.on("text-change",()=>{e.getSelection()&&(exports.quillRef.currentFormat=e.getFormat()),setTimeout(()=>{var e;i(null===(e=r.current)||void 0===e?void 0:e.childNodes[0].innerHTML)},10)}),e.setSelection(0,0,"api"),e.on("selection-change",i=>{i||t(),i&&(exports.quillRef.currentFormat=e.getFormat())}),r.current.childNodes[0].addEventListener("blur",e=>{var i;(null===(i=e.relatedTarget)||void 0===i?void 0:i.classList.contains("ql-clipboard"))||t()}),()=>{exports.quillRef.editor.instance=null,exports.quillRef.currentFormat={},delete window.__polotnoQuill}},[]),o.default.useEffect(()=>{var t;const i=exports.quillRef.editor.instance;if(!i)return;const o=i.getSelection();if((null===(t=r.current)||void 0===t?void 0:t.childNodes[0].innerHTML)!==n.text){var a=i.clipboard.convert("<div class='ql-editor' style='outline: none;'>"+e+"<p><br></p></div>");i.setContents(a),i.history.clear(),o&&(i.setSelection(o.index,o.length),exports.quillRef.currentFormat=i.getFormat())}},[n.text]);const a=(0,c.useTextColor)(n).fill;return o.default.createElement(S,{ref:r,style:{fontSize:n.fontSize,color:a,width:n.width,fontFamily:n.fontFamily,lineHeight:n.lineHeight,letterSpacing:n.letterSpacing+"rem",textAlign:n.align},dir:(0,c.getDir)((0,b.removeTags)(n.text))})};function q(e,t,i){return o.default.useMemo(()=>(0,h.detectSize)(e),[e,t.width,i])}function z(e,{fontFamily:t="",color:i="black"}={}){let n=`color: ${i||e.fill}`;return`<div style="white-space: unset; width: ${Math.round(e.width||100)}px; ${n}; font-size: ${e.fontSize}px; font-family: '${t}'; text-decoration: ${e.textDecoration}; text-align: ${e.align}; line-height: ${e.lineHeight}; letter-spacing: ${e.letterSpacing}rem; font-style: ${e.fontStyle}; font-weight: ${e.fontWeight}; -webkit-text-stroke: ${e.strokeWidth}px ${e.stroke};" contentEditable dir="${(0,c.getDir)((0,b.removeTags)(e.text))}">${e.text}</div>`}const F=e=>{let t=e.fontSize;for(let i=1;i<50;i++){const i=z(Object.assign(Object.assign({},e.toJSON()),{fontSize:t}),{fontFamily:e.fontFamily}),{height:n}=(0,h.detectSize)(i);if(!(e.height&&n>e.height))break;t-=.5}return t};exports.HTMLElement=(0,r.observer)(({element:e,store:t})=>{const i=o.default.useRef(null),[n,r]=o.default.useState(),[l,x]=o.default.useState(!1),[b,O]=o.default.useState(!0),[_,k]=o.default.useState(!1),[R,T]=o.default.useState(!1),M=o.default.useRef(e.height),$=t.selectedElements.indexOf(e)>=0,H=e.fontSize/4,{textVerticalResizeEnabled:L}=u.flags,[C]=(0,c.useFontLoader)(t,e.fontFamily);(0,g.useFadeIn)(i);const D=C?e.fontFamily:"Arial",P=(0,c.useTextColor)(e).fill,X=z(e,{fontFamily:D,color:P}),{width:Y,height:j}=q(X,e,C);o.default.useEffect(()=>{if(!C)return;if(!e.height)return void e.set({height:j});const{textOverflow:i}=u.flags;if("change-font-size"!==i||l)"resize"===i&&(L&&e.height<j&&t.history.ignore(()=>{e.set({height:j})}),L||e.height===j||t.history.ignore(()=>{e.set({height:j})}));else{const i=F(e);i!==e.fontSize?t.history.ignore(()=>{e.set({fontSize:i})}):e.height!==j&&t.history.ignore(()=>{e.set({height:j})})}});const I=o.default.useRef(0);o.default.useLayoutEffect(()=>{if(l||_)return;I.current++;const i=I.current,n=(0,p.incrementLoader)(`text ${e.id}`);O(!0),async function(){await new Promise(e=>setTimeout(e));const o=await(0,h.htmlToCanvas)({html:X,width:e.width||1,height:e.height||j||1,fontFamily:D,padding:H,font:t.fonts.find(e=>e.fontFamily===D)||w.globalFonts.find(e=>e.fontFamily===D)});i===I.current?(r(o),O(!1),s.default.Util.requestAnimFrame(n)):n()}()},[X,l,j,_,D,e.height]);const A=l||b;o.default.useLayoutEffect(()=>d.autorun(()=>{const t=i.current;(0,f.applyFilter)(t,e)}),[n,A,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);let B=0;"middle"===e.verticalAlign&&(B=(e.height-j)/2),"bottom"===e.verticalAlign&&(B=e.height-j);const N=(0,c.getLineHeight)({fontLoaded:C,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),V=(0,v.useMobile)();return o.default.createElement(o.default.Fragment,null,o.default.createElement(a.Rect,{x:e.x,y:e.y,offsetX:e.backgroundPadding*(e.fontSize*N*.5),offsetY:e.backgroundPadding*(e.fontSize*N*.5),rotation:e.rotation,hideInExport:!e.showInExport||!e.text,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity,fill:e.backgroundColor,width:e.width+e.backgroundPadding*(e.fontSize*N),height:e.height+e.backgroundPadding*(e.fontSize*N),cornerRadius:e.backgroundCornerRadius*(e.fontSize*N*.5)}),o.default.createElement(a.Rect,{ref:i,name:"element",x:e.x,y:e.y,listening:e.selectable,rotation:e.rotation,width:e.width,height:e.height,visible:!A,draggable:V?e.draggable&&$:e.draggable,preventDefault:!V||$,opacity:_?0:e.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{T(!0)},onMouseLeave:()=>{T(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:i=>{e.set({x:i.target.x(),y:i.target.y()}),t.history.endTransaction()},id:e.id,onDblClick:()=>{e.contentEditable&&k(!0)},onDblTap:()=>{e.contentEditable&&k(!0)},onTransformStart:t=>{x(!0),M.current=e.height},onTransform:t=>{var i;const n=t.target,o=(null===(i=n.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor(),r="middle-left"===o||"middle-right"===o,a="top-center"===o||"bottom-center"===o,l=n.scaleX();if(r){const t=n.scaleX(),i=Math.max(n.width()*t,e.fontSize);if(n.width(i),n.scaleX(1),u.flags.textVerticalResizeEnabled){const t=Math.max(j,M.current);e.set({height:t})}e.set({width:i,x:n.x(),y:n.y()})}else if(a){let i="resize"===u.flags.textOverflow?j:e.lineHeight*e.fontSize;const o=Math.max(i,t.target.height()*t.target.scaleY());n.scaleY(1),e.set({x:n.x(),y:n.y(),height:o,rotation:n.rotation()})}else n.scaleX(1),n.scaleY(1),e.set({fontSize:e.fontSize*l,width:n.width()*l,x:n.x(),y:n.y(),rotation:n.rotation(),height:n.height()*l})},onTransformEnd:t=>{x(!1),O(!0);const i=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({fontSize:e.fontSize*i,width:t.target.width()*i,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})}}),o.default.createElement(a.Image,{ref:i,image:n,x:e.x,y:e.y,offsetX:H,offsetY:H-B,listening:!1,rotation:e.rotation,width:e.width+2*H,height:e.height+2*H,visible:!A,opacity:_?0:e.opacity,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,hideInExport:!e.showInExport}),A&&o.default.createElement(a.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-B},o.default.createElement(y.Html,{divProps:{style:{pointerEvents:"none"}}},o.default.createElement(S,{dangerouslySetInnerHTML:{__html:X},style:{pointerEvents:"none",display:"inline-block"}}))),_&&o.default.createElement(a.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-B},o.default.createElement(y.Html,null,o.default.createElement(E,{html:X,element:e,onChange:t=>{e.set({text:t})},onBlur:e=>{k(!1)}}))),($||R)&&o.default.createElement(m.Highlighter,{element:e}))});
306
+ `,E=({html:e,onBlur:t,onChange:i,element:n})=>{const r=o.default.useRef(null);o.default.useEffect(()=>{if(!r.current)return;const e=new l.default(r.current,{toolbar:!1,keyboard:!1,clipboard:{matchVisual:!1},formats:["background","bold","color","font","italic","size","strike","underline","indent","align","direction"]});return exports.quillRef.editor.instance=e,window.__polotnoQuill=e,e.on("text-change",()=>{e.getSelection()&&(exports.quillRef.currentFormat=e.getFormat()),setTimeout(()=>{var e;i(null===(e=r.current)||void 0===e?void 0:e.childNodes[0].innerHTML)},10)}),e.setSelection(0,0,"api"),e.on("selection-change",i=>{i||t(),i&&(exports.quillRef.currentFormat=e.getFormat())}),r.current.childNodes[0].addEventListener("blur",e=>{var i;(null===(i=e.relatedTarget)||void 0===i?void 0:i.classList.contains("ql-clipboard"))||t()}),()=>{exports.quillRef.editor.instance=null,exports.quillRef.currentFormat={},delete window.__polotnoQuill}},[]),o.default.useEffect(()=>{var t;const i=exports.quillRef.editor.instance;if(!i)return;const o=i.getSelection();if((null===(t=r.current)||void 0===t?void 0:t.childNodes[0].innerHTML)!==n.text){var a=i.clipboard.convert("<div class='ql-editor' style='outline: none;'>"+e+"<p><br></p></div>");i.setContents(a),i.history.clear(),o&&(i.setSelection(o.index,o.length),exports.quillRef.currentFormat=i.getFormat())}},[n.text]);const a=(0,c.useTextColor)(n).fill;return o.default.createElement(S,{ref:r,style:{fontSize:n.fontSize,color:a,width:n.width,fontFamily:n.fontFamily,lineHeight:n.lineHeight,letterSpacing:n.letterSpacing+"rem",textAlign:n.align},dir:(0,c.getDir)((0,b.removeTags)(n.text))})};function q(e,t,i){return o.default.useMemo(()=>(0,h.detectSize)(e),[e,t.width,i])}function z(e,{fontFamily:t="",color:i="black"}={}){let n=`color: ${i||e.fill}`;return`<div style="white-space: unset; width: ${Math.round(e.width||100)}px; ${n}; font-size: ${e.fontSize}px; font-family: '${t}'; text-decoration: ${e.textDecoration}; text-align: ${e.align}; line-height: ${e.lineHeight}; letter-spacing: ${e.letterSpacing}rem; font-style: ${e.fontStyle}; font-weight: ${e.fontWeight}; -webkit-text-stroke: ${e.strokeWidth}px ${e.stroke};" contentEditable dir="${(0,c.getDir)((0,b.removeTags)(e.text))}">${e.text}</div>`}const F=e=>{let t=e.fontSize;for(let i=1;i<50;i++){const i=z(Object.assign(Object.assign({},e.toJSON()),{fontSize:t}),{fontFamily:e.fontFamily}),{height:n}=(0,h.detectSize)(i);if(!(e.height&&n>e.height))break;t-=.5}return t},O=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);exports.HTMLElement=(0,r.observer)(({element:e,store:t})=>{const i=o.default.useRef(null),[n,r]=o.default.useState(),[l,x]=o.default.useState(!1),[b,k]=o.default.useState(!0),[T,_]=o.default.useState(!1),[R,M]=o.default.useState(!1),$=o.default.useRef(e.height),H=t.selectedElements.indexOf(e)>=0,C=e.fontSize/4,{textVerticalResizeEnabled:D}=u.flags,[L]=(0,c.useFontLoader)(t,e.fontFamily);(0,g.useFadeIn)(i);const P=L?e.fontFamily:"Arial",X=(0,c.useTextColor)(e).fill,Y=z(e,{fontFamily:P,color:X}),{width:j,height:I}=q(Y,e,L);o.default.useEffect(()=>{if(!L)return;if(!e.height)return void e.set({height:I});const{textOverflow:i}=u.flags;if("change-font-size"!==i||l)"resize"===i&&(D&&e.height<I&&t.history.ignore(()=>{e.set({height:I})}),D||e.height===I||t.history.ignore(()=>{e.set({height:I})}));else{const i=F(e);i!==e.fontSize?t.history.ignore(()=>{e.set({fontSize:i})}):e.height!==I&&t.history.ignore(()=>{e.set({height:I})})}});const A=o.default.useRef(0),B=async()=>{A.current++;const i=A.current,n=(0,p.incrementLoader)(`text ${e.id}`);k(!0),await new Promise(e=>setTimeout(e,0));const o=await(0,h.htmlToCanvas)({html:Y,width:e.width||1,height:e.height||I||1,fontFamily:P,padding:C,font:t.fonts.find(e=>e.fontFamily===P)||w.globalFonts.find(e=>e.fontFamily===P)});i===A.current?(r(o),k(!1),s.default.Util.requestAnimFrame(n)):n()};o.default.useEffect(()=>{l||T||B()},[Y,l,I,T,P,e.height]),o.default.useEffect(()=>{if(!L)return;if(!O)return;const e=setTimeout(()=>{B()},50);return()=>clearTimeout(e)},[L]);const N=l||b;o.default.useEffect(()=>d.autorun(()=>{const t=i.current;(0,f.applyFilter)(t,e)}),[n,N,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);let V=0;"middle"===e.verticalAlign&&(V=(e.height-I)/2),"bottom"===e.verticalAlign&&(V=e.height-I);const G=(0,c.getLineHeight)({fontLoaded:L,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),Q=(0,v.useMobile)();return o.default.createElement(o.default.Fragment,null,o.default.createElement(a.Rect,{x:e.x,y:e.y,offsetX:e.backgroundPadding*(e.fontSize*G*.5),offsetY:e.backgroundPadding*(e.fontSize*G*.5),rotation:e.rotation,hideInExport:!e.showInExport||!e.text,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity,fill:e.backgroundColor,width:e.width+e.backgroundPadding*(e.fontSize*G),height:e.height+e.backgroundPadding*(e.fontSize*G),cornerRadius:e.backgroundCornerRadius*(e.fontSize*G*.5)}),o.default.createElement(a.Rect,{ref:i,name:"element",x:e.x,y:e.y,listening:e.selectable,rotation:e.rotation,width:e.width,height:e.height,visible:!N,draggable:Q?e.draggable&&H:e.draggable,preventDefault:!Q||H,opacity:T?0:e.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{M(!0)},onMouseLeave:()=>{M(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:i=>{e.set({x:i.target.x(),y:i.target.y()}),t.history.endTransaction()},id:e.id,onDblClick:()=>{e.contentEditable&&_(!0)},onDblTap:()=>{e.contentEditable&&_(!0)},onTransformStart:t=>{x(!0),$.current=e.height},onTransform:t=>{var i;const n=t.target,o=(null===(i=n.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor(),r="middle-left"===o||"middle-right"===o,a="top-center"===o||"bottom-center"===o,l=n.scaleX();if(r){const t=n.scaleX(),i=Math.max(n.width()*t,e.fontSize);if(n.width(i),n.scaleX(1),u.flags.textVerticalResizeEnabled){const t=Math.max(I,$.current);e.set({height:t})}e.set({width:i,x:n.x(),y:n.y()})}else if(a){let i="resize"===u.flags.textOverflow?I:e.lineHeight*e.fontSize;const o=Math.max(i,t.target.height()*t.target.scaleY());n.scaleY(1),e.set({x:n.x(),y:n.y(),height:o,rotation:n.rotation()})}else n.scaleX(1),n.scaleY(1),e.set({fontSize:e.fontSize*l,width:n.width()*l,x:n.x(),y:n.y(),rotation:n.rotation(),height:n.height()*l})},onTransformEnd:t=>{x(!1),k(!0);const i=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({fontSize:e.fontSize*i,width:t.target.width()*i,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})}}),o.default.createElement(a.Image,{ref:i,image:n,x:e.x,y:e.y,offsetX:C,offsetY:C-V,listening:!1,rotation:e.rotation,width:e.width+2*C,height:e.height+2*C,visible:!N,opacity:T?0:e.opacity,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,hideInExport:!e.showInExport}),N&&o.default.createElement(a.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-V},o.default.createElement(y.Html,{divProps:{style:{pointerEvents:"none"}}},o.default.createElement(S,{dangerouslySetInnerHTML:{__html:Y},style:{pointerEvents:"none",display:"inline-block"}}))),T&&o.default.createElement(a.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-V},o.default.createElement(y.Html,null,o.default.createElement(E,{html:Y,element:e,onChange:t=>{e.set({text:t})},onBlur:e=>{_(!1)}}))),(H||R)&&o.default.createElement(m.Highlighter,{element:e}))});
307
307
  },{"react":"HdMw","mobx-react-lite":"ZfSi","react-konva":"Sgug","quill/dist/quill":"qREC","konva":"aTGn","mobx":"BzvP","../utils/flags":"IDY9","./apply-filters":"SIWI","./text-element":"Fpgh","../utils/html2canvas":"vcNA","./use-fadein":"N3c2","./highlighter":"cEy1","react-konva-utils":"jXQU","../utils/styled":"PsiH","../utils/loader":"bN4e","../utils/text":"rHBV","../utils/fonts":"XXLd","../utils/screen":"aH85"}],"RXmf":[function(require,module,exports) {
308
308
  "use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getTotalClientRect=exports.getClientRect=void 0;const e=t(require("konva"));function a(t,e,a,n,i){const x=Math.sqrt(a*a+n*n);return i+=Math.atan2(n,a),{x:t+x*Math.cos(i),y:e+x*Math.sin(i)}}function n(t){const{x:n,y:i,width:x,height:m}=t,o=e.default.Util.degToRad(t.rotation),h=a(n,i,0,0,o),r=a(n,i,x,0,o),s=a(n,i,x,m,o),u=a(n,i,0,m,o),c=Math.min(h.x,r.x,s.x,u.x),M=Math.min(h.y,r.y,s.y,u.y),l=Math.max(h.x,r.x,s.x,u.x),y=Math.max(h.y,r.y,s.y,u.y);return{x:c,y:M,width:l-c,height:y-M,minX:c,minY:M,maxX:l,maxY:y}}function i(t){const e=t.map(t=>n(t)),a=Math.min(...e.map(t=>t.minX)),i=Math.min(...e.map(t=>t.minY)),x=Math.max(...e.map(t=>t.maxX)),m=Math.max(...e.map(t=>t.maxY));return{x:a,y:i,width:x-a,height:m-i,minX:a,minY:i,maxX:x,maxY:m}}exports.getClientRect=n,exports.getTotalClientRect=i;
309
309
  },{"konva":"aTGn"}],"F86d":[function(require,module,exports) {
310
310
  "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.useAnchorSnap=exports.useSnap=void 0;const t=e(require("react")),n=e(require("konva")),i=require("../utils/math");var r=5;function a(e){const t=e.__getNodeRect(),r=(0,i.getClientRect)(Object.assign(Object.assign({},t),{rotation:n.default.Util.radToDeg(t.rotation)})),a=e.getAbsolutePosition();return{vertical:[{guide:r.x,offset:a.x-r.x,snap:"start"},{guide:r.x+r.width/2,offset:a.x-r.x-r.width/2,snap:"center"},{guide:r.x+r.width,offset:a.x-r.x-r.width,snap:"end"}],horizontal:[{guide:r.y,offset:a.y-r.y,snap:"start"},{guide:r.y+r.height/2,offset:a.y-r.y-r.height/2,snap:"center"},{guide:r.y+r.height,offset:a.y-r.y-r.height,snap:"end"}]}}function o(e,t){var n=[],i=[];e.vertical.forEach(e=>{t.vertical.forEach(t=>{var i=Math.abs(e-t.guide);i<r&&n.push({lineGuide:e,diff:i,snap:t.snap,offset:t.offset})})}),e.horizontal.forEach(e=>{t.horizontal.forEach(t=>{var n=Math.abs(e-t.guide);n<r&&i.push({lineGuide:e,diff:n,snap:t.snap,offset:t.offset})})});var a=[];const o=n.sort((e,t)=>e.diff-t.diff),s=i.sort((e,t)=>e.diff-t.diff);var d=o[0],u=s[0];return d&&o.filter(e=>Math.abs(e.diff-d.diff)<.1).forEach(e=>{a.push(Object.assign({orientation:"V"},e))}),u&&s.filter(e=>Math.abs(e.diff-u.diff)<.1).forEach(e=>{a.push(Object.assign({orientation:"H"},e))}),a}function s(e){const i=e=>e.hasName("element")||e.hasName("page-background")||e.hasName("elements-area");function r(t){var n;const r=null===(n=e.current)||void 0===n?void 0:n.getStage();var a=[],o=[];return r.find(i).forEach(e=>{if(!(t.indexOf(e)>=0)){var n=e.getClientRect({skipShadow:!0,skipStroke:!0});a.push(n.x,n.x+n.width,n.x+n.width/2),o.push(n.y,n.y+n.height,n.y+n.height/2)}}),{vertical:a,horizontal:o}}function s(t){var i;const r=null===(i=e.current)||void 0===i?void 0:i.getLayer(),a=null==r?void 0:r.children.find(e=>"line-guides"===e.name());t.forEach(e=>{if("H"===e.orientation){var t=new n.default.Line({points:[-6e3,e.lineGuide,6e3,e.lineGuide],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t),r.batchDraw()}else"V"===e.orientation&&(t=new n.default.Line({points:[e.lineGuide,-6e3,e.lineGuide,6e3],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]}),null==a||a.add(t))})}const d=e=>{e.target.getLayer().children.find(e=>"line-guides"===e.name()).destroyChildren();var t=o(r(e.target.nodes()),a(e.target));if(!t.length)return;s(t);const n=e.target.getAbsolutePosition(),i=Object.assign({},n);t.forEach(e=>{switch(e.snap){case"start":case"center":case"end":switch(e.orientation){case"V":i.x=e.lineGuide+e.offset;break;case"H":i.y=e.lineGuide+e.offset}}});const d=i.x-n.x,u=i.y-n.y;e.evt.ctrlKey||e.evt.metaKey||e.target.nodes().forEach(e=>{const t=e.getAbsolutePosition();e.setAbsolutePosition({x:t.x+d,y:t.y+u})})},u=(t,n,i)=>{const a=e.current,d=a.getLayer();if(d.children.find(e=>"line-guides"===e.name()).destroyChildren(),"rotater"===a.getActiveAnchor())return n;if(Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2))>50)return n;if(!d)return n;var u=o(r(a.nodes()),{vertical:[{guide:n.x,offset:0,snap:"start"}],horizontal:[{guide:n.y,offset:0,snap:"start"}]});if(!u.length)return n;if(s(u),i.ctrlKey||i.metaKey)return n;let c=n.x,f=n.x;u.forEach(e=>{switch(e.orientation){case"V":c=e.lineGuide;break;case"H":f=e.lineGuide}});const l=Math.abs(n.x-c)<10,h=Math.abs(n.y-f)<10;return l&&!h?{x:c,y:t.y}:h&&!l?{x:t.x,y:f}:l&&h?{x:c,y:f}:n},c=e=>{if(!e.target)return;const t=e.target.getLayer();t.children.find(e=>"line-guides"===e.name()).destroyChildren(),t.batchDraw()};t.default.useEffect(()=>{e.current&&(e.current.anchorDragBoundFunc(u),e.current.on("dragstart",()=>{setTimeout(()=>{const e=[...n.default.DD._dragElements.entries()];e.reverse(),n.default.DD._dragElements.clear(),e.forEach(([e,t])=>{n.default.DD._dragElements.set(e,t)})})}),e.current.on("dragmove",d),e.current.on("dragend",c),e.current.on("transformend",c))},[])}function d(e){return{vertical:[{guide:e.absolutePosition().x,offset:0,snap:"center"}],horizontal:[{guide:e.absolutePosition().y,offset:0,snap:"center"}]}}function u(e,i,r){const a=e=>e.hasName("element")||e.hasName("line-anchor")||e.hasName("page-background")||e.hasName("elements-area"),s=t=>{t.target.getLayer().children.find(e=>"line-guides"===e.name()).destroyChildren();var r=o(function(t){var n;const i=null===(n=e.current)||void 0===n?void 0:n.getStage();var r=[],o=[];return i.find(a).forEach(e=>{if(!(t.indexOf(e)>=0)){var n=e.getClientRect({skipShadow:!0,skipStroke:!0});e.hasName("line-anchor")&&(n={x:e.absolutePosition().x,y:e.absolutePosition().y,width:0,height:0}),r.push(n.x,n.x+n.width,n.x+n.width/2),o.push(n.y,n.y+n.height,n.y+n.height/2)}}),{vertical:r,horizontal:o}}([t.target,...i.map(e=>e.current)]),d(t.target));if(!r.length)return;!function(t){var i;const r=null===(i=e.current)||void 0===i?void 0:i.getLayer(),a=null==r?void 0:r.children.find(e=>"line-guides"===e.name());t.forEach(e=>{if("H"===e.orientation){var t=new n.default.Line({points:[-6e3,e.lineGuide,6e3,e.lineGuide],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t),r.batchDraw()}else"V"===e.orientation&&(t=new n.default.Line({points:[e.lineGuide,-6e3,e.lineGuide,6e3],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]}),null==a||a.add(t))})}(r);const s=t.target.getAbsolutePosition(),u=Object.assign({},s);r.forEach(e=>{switch(e.snap){case"start":case"center":case"end":switch(e.orientation){case"V":u.x=e.lineGuide+e.offset;break;case"H":u.y=e.lineGuide+e.offset}}});const c=u.x-s.x,f=u.y-s.y;if(!t.evt.ctrlKey&&!t.evt.metaKey){const e=t.target.getAbsolutePosition();t.target.absolutePosition({x:e.x+c,y:e.y+f})}},u=e=>{if(!e.target)return;const t=e.target.getLayer();t.children.find(e=>"line-guides"===e.name()).destroyChildren(),t.batchDraw()};t.default.useEffect(()=>{e.current&&(e.current.on("dragmove",s),e.current.on("dragend",u))},r)}exports.useSnap=s,exports.useAnchorSnap=u;
311
311
  },{"react":"HdMw","konva":"aTGn","../utils/math":"RXmf"}],"JKBY":[function(require,module,exports) {
312
- "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LineElement=void 0;const t=e(require("react")),a=require("mobx-react-lite"),r=require("react-konva"),n=require("react-konva-utils"),o=require("./highlighter"),i=require("./use-transformer-snap"),s=require("../utils/screen");function h({x:e,y:t,width:a,height:r,rotation:n}){const o=n*Math.PI/180,i={x:e+r/2*Math.cos(o+Math.PI/2),y:t+r/2*Math.sin(o+Math.PI/2)};return{middleLeft:i,middleRight:{x:i.x+a*Math.cos(o),y:i.y+a*Math.sin(o)}}}function l(e,t,a){const r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),n=Math.atan2(t.y-e.y,t.x-e.x),o=180*n/Math.PI;return{x:e.x+Math.cos(n-Math.PI/2)*a/2,y:e.y+Math.sin(n-Math.PI/2)*a/2,width:r,height:a,rotation:o}}const d=(e,t)=>({offsetX:5/e,offsetY:5/e,width:10/e,height:10/e,fill:"white",stroke:"rgb(0, 161, 255)",strokeWidth:2,strokeScaleEnabled:!1,draggable:!0,dragDistance:0,onMouseEnter:e=>{e.target.getStage().container().style.cursor="crosshair"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onDragStart:e=>{t.history.startTransaction()},onDragEnd:e=>{t.history.endTransaction()}}),c=(0,a.observer)(({element:e,type:a})=>{const n={strokeWidth:e.height,stroke:e.a.color,lineCap:"round",lineJoin:"round",fill:e.a.color,opacity:e.a.opacity};return t.default.createElement(t.default.Fragment,null,"arrow"===a&&t.default.createElement(r.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height]},n)),"triangle"===a&&t.default.createElement(r.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height],closed:!0},n)),"bar"===a&&t.default.createElement(r.Line,Object.assign({points:[0,2*-e.height,0,2*e.height],closed:!0},n)),"square"===a&&t.default.createElement(r.Line,Object.assign({points:[0,2*-e.height,4*e.height,2*-e.height,4*e.height,2*e.height,0,2*e.height],closed:!0},n)),"circle"===a&&t.default.createElement(r.Circle,Object.assign({x:2*e.height,y:0,radius:2*e.height},n)))});exports.LineElement=(0,a.observer)(({element:e,store:a})=>{const g=t.default.useRef(null),u=t.default.useRef(null),f=t.default.useRef(null),y=e.selectable||"admin"===a.role,m=(0,s.useMobile)(),[x,p]=t.default.useState(!1),E=a.selectedElements.indexOf(e)>=0&&1===a.selectedElements.length,{middleLeft:w,middleRight:M}=h(e);return(0,i.useAnchorSnap)(u,[g],[E]),(0,i.useAnchorSnap)(f,[g],[E]),t.default.createElement(t.default.Fragment,null,t.default.createElement(r.Line,{ref:g,name:"element",id:e.id,x:e.a.x,y:e.a.y,points:[0,0,e.width,0],offsetY:-e.height/2,strokeWidth:e.height,hitStrokeWidth:Math.max(e.height,20),dash:e.dash.map(t=>t*e.height),stroke:e.a.color,rotation:e.a.rotation,opacity:e.animated("opacity"),shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,listening:y,draggable:m?e.draggable&&E:e.draggable,preventDefault:!m||E,hideInExport:!e.showInExport,onMouseEnter:()=>{p(!0)},onMouseLeave:()=>{p(!1)},onDragStart:()=>{a.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()}),a.history.endTransaction()},onTransformStart:()=>{a.history.startTransaction()},onTransform:t=>{const a=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({height:e.height*a,width:e.width*a,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})},onTransformEnd:e=>{a.history.endTransaction()}}),t.default.createElement(r.Group,{x:w.x,y:w.y,rotation:e.rotation},t.default.createElement(c,{element:e,type:e.startHead})),t.default.createElement(r.Group,{x:M.x,y:M.y,rotation:e.rotation+180},t.default.createElement(c,{element:e,type:e.endHead})),x&&!E&&t.default.createElement(o.Highlighter,{element:e}),E&&e.resizable&&t.default.createElement(n.Portal,{selector:".page-abs-container",enabled:!0},t.default.createElement(r.Group,{visible:E},t.default.createElement(r.Rect,Object.assign({x:w.x,y:w.y,ref:u,name:"line-anchor"},d(a.scale,a),{onDragMove:t=>{const a=l(t.target.position(),M,e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})),t.default.createElement(r.Rect,Object.assign({x:M.x,y:M.y,ref:f,name:"line-anchor"},d(a.scale,a),{onDragMove:t=>{const a=l(w,t.target.position(),e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})))))});
312
+ "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LineElement=exports.getLinePositionFromMiddlePoints=exports.getMiddlePoints=void 0;const t=e(require("react")),a=require("mobx-react-lite"),r=require("react-konva"),o=require("react-konva-utils"),n=require("./highlighter"),i=require("./use-transformer-snap"),s=require("../utils/screen");function h({x:e,y:t,width:a,height:r,rotation:o}){const n=o*Math.PI/180,i={x:e+r/2*Math.cos(n+Math.PI/2),y:t+r/2*Math.sin(n+Math.PI/2)};return{middleLeft:i,middleRight:{x:i.x+a*Math.cos(n),y:i.y+a*Math.sin(n)}}}function l(e,t,a){const r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),o=Math.atan2(t.y-e.y,t.x-e.x),n=180*o/Math.PI;return{x:e.x+Math.cos(o-Math.PI/2)*a/2,y:e.y+Math.sin(o-Math.PI/2)*a/2,width:r,height:a,rotation:n}}exports.getMiddlePoints=h,exports.getLinePositionFromMiddlePoints=l;const d=(e,t)=>({offsetX:5/e,offsetY:5/e,width:10/e,height:10/e,fill:"white",stroke:"rgb(0, 161, 255)",strokeWidth:2,strokeScaleEnabled:!1,draggable:!0,dragDistance:0,onMouseEnter:e=>{e.target.getStage().container().style.cursor="crosshair"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onDragStart:e=>{t.history.startTransaction()},onDragEnd:e=>{t.history.endTransaction()}}),c=(0,a.observer)(({element:e,type:a})=>{const o={strokeWidth:e.height,stroke:e.a.color,lineCap:"round",lineJoin:"round",fill:e.a.color,opacity:e.a.opacity};return t.default.createElement(t.default.Fragment,null,"arrow"===a&&t.default.createElement(r.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height]},o)),"triangle"===a&&t.default.createElement(r.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height],closed:!0},o)),"bar"===a&&t.default.createElement(r.Line,Object.assign({points:[0,2*-e.height,0,2*e.height],closed:!0},o)),"square"===a&&t.default.createElement(r.Line,Object.assign({points:[0,2*-e.height,4*e.height,2*-e.height,4*e.height,2*e.height,0,2*e.height],closed:!0},o)),"circle"===a&&t.default.createElement(r.Circle,Object.assign({x:2*e.height,y:0,radius:2*e.height},o)))});exports.LineElement=(0,a.observer)(({element:e,store:a})=>{const g=t.default.useRef(null),u=t.default.useRef(null),f=t.default.useRef(null),y=e.selectable||"admin"===a.role,m=(0,s.useMobile)(),[x,p]=t.default.useState(!1),E=a.selectedElements.indexOf(e)>=0&&1===a.selectedElements.length,{middleLeft:M,middleRight:w}=h(e);return(0,i.useAnchorSnap)(u,[g],[E]),(0,i.useAnchorSnap)(f,[g],[E]),t.default.createElement(t.default.Fragment,null,t.default.createElement(r.Line,{ref:g,name:"element",id:e.id,x:e.a.x,y:e.a.y,points:[0,0,e.width,0],offsetY:-e.height/2,strokeWidth:e.height,hitStrokeWidth:Math.max(e.height,20),dash:e.dash.map(t=>t*e.height),stroke:e.a.color,rotation:e.a.rotation,opacity:e.animated("opacity"),shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,listening:y,draggable:m?e.draggable&&E:e.draggable,preventDefault:!m||E,hideInExport:!e.showInExport,onMouseEnter:()=>{p(!0)},onMouseLeave:()=>{p(!1)},onDragStart:()=>{a.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()}),a.history.endTransaction()},onTransformStart:()=>{a.history.startTransaction()},onTransform:t=>{const a=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({height:e.height*a,width:e.width*a,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})},onTransformEnd:e=>{a.history.endTransaction()}}),t.default.createElement(r.Group,{x:M.x,y:M.y,rotation:e.rotation},t.default.createElement(c,{element:e,type:e.startHead})),t.default.createElement(r.Group,{x:w.x,y:w.y,rotation:e.rotation+180},t.default.createElement(c,{element:e,type:e.endHead})),x&&!E&&t.default.createElement(n.Highlighter,{element:e}),E&&e.resizable&&t.default.createElement(o.Portal,{selector:".page-abs-container",enabled:!0},t.default.createElement(r.Group,{visible:E},t.default.createElement(r.Rect,Object.assign({x:M.x,y:M.y,ref:u,name:"line-anchor"},d(a.scale,a),{onDragMove:t=>{const a=l(t.target.position(),w,e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})),t.default.createElement(r.Rect,Object.assign({x:w.x,y:w.y,ref:f,name:"line-anchor"},d(a.scale,a),{onDragMove:t=>{const a=l(M,t.target.position(),e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})))))});
313
313
  },{"react":"HdMw","mobx-react-lite":"ZfSi","react-konva":"Sgug","react-konva-utils":"jXQU","./highlighter":"cEy1","./use-transformer-snap":"F86d","../utils/screen":"aH85"}],"XEPK":[function(require,module,exports) {
314
314
  "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerShapeComponent=void 0;const t=e(require("react")),r=require("mobx-react-lite"),n=require("./text-element"),l=require("./image-element"),i=require("./html-element"),o=require("./line-element"),a=require("react-konva"),m=require("../utils/flags"),s=(0,r.observer)(e=>{const{element:r,store:n}=e,{children:l}=r,i=r.selectable||"admin"===n.role;return t.default.createElement(a.Group,{opacity:r.opacity,listening:i},l.map(r=>t.default.createElement(p,Object.assign({},e,{key:r.id,store:n,element:r}))))}),u={text:n.TextElement,image:l.ImageElement,svg:l.ImageElement,line:o.LineElement,group:s};function c(e,t){u[e]=t}exports.registerShapeComponent=c;const p=(0,r.observer)(e=>{let r=u[e.element.type];return"text"===e.element.type&&m.flags.htmlRenderEnabled&&(r=i.HTMLElement),e.element.visible?r?t.default.createElement(r,Object.assign({},e)):(console.error("Can not find component for "+e.element.type),null):null});exports.default=p;
315
315
  },{"react":"HdMw","mobx-react-lite":"ZfSi","./text-element":"Fpgh","./image-element":"VbEp","./html-element":"BLZX","./line-element":"JKBY","react-konva":"Sgug","../utils/flags":"IDY9"}],"hfHf":[function(require,module,exports) {
@@ -3251,7 +3251,7 @@ var e="undefined"!=typeof Element,r="function"==typeof Map,t="function"==typeof
3251
3251
  },{"mobx":"BzvP","./api":"Ic0q","./flags":"IDY9"}],"BUt3":[function(require,module,exports) {
3252
3252
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.pxToUnitString=exports.unitToPx=exports.pxToUnitRounded=exports.pxToUnit=void 0;const t=({px:t,unit:e="px",dpi:n})=>{switch(e){case"pt":default:return t;case"mm":return t/(n/25.4);case"cm":return t/(n/2.54);case"in":return t/n}};exports.pxToUnit=t;const e=({px:t,precious:e=2,dpi:n=72,unit:o="px"})=>parseFloat((0,exports.pxToUnit)({px:t,dpi:n,unit:o}).toFixed(e));exports.pxToUnitRounded=e;const n=({unitVal:t,dpi:e,unit:n})=>t/(0,exports.pxToUnit)({px:1,unit:n,dpi:e});exports.unitToPx=n;const o=t=>{const e=parseFloat((0,exports.pxToUnit)(t).toFixed(1));switch(t.unit){case"pt":return`${Math.round(e)}pt`;case"mm":return`${e}mm`;case"cm":return`${e}cm`;case"in":return`${e}in`;default:return`${Math.round(e)}px`}};exports.pxToUnitString=o;
3253
3253
  },{}],"Co9b":[function(require,module,exports) {
3254
- "use strict";var e=this&&this.__rest||function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerNextDomDrop=exports.registerTransformerAttrs=void 0;const n=t(require("react")),i=require("mobx-react-lite"),r=require("mobx"),l=require("react-konva"),o=t(require("use-image")),a=t(require("konva")),s=t(require("./element")),d=require("./use-transformer-snap"),c=require("./image-element"),u=require("../utils/crop"),m=require("./page-controls"),g=require("../utils/validate-key"),h=require("../utils/math"),f=require("../utils/unit"),p=require("../utils/flags"),b=require("../utils/screen"),x={enabledAnchors:["top-left","top-center","top-right","middle-left","bottom-left","bottom-right","bottom-center","middle-right"],borderEnabled:!0,rotateEnabled:!0,rotationSnaps:[0,45,90,135,180,225,270,315],ignoreStroke:!0,anchorStrokeWidth:2,borderStrokeWidth:2},v={text:{enabledAnchors:["top-left","top-right","middle-left","bottom-left","bottom-right","middle-right"]},svg:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},line:{enabledAnchors:[],borderEnabled:!1,rotateEnabled:!1},image:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},many:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},group:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]}};function y(e,t){v[e]=v[e]||t,Object.assign(v[e],t)}exports.registerTransformerAttrs=y;const E=e=>n.default.createElement(l.Rect,Object.assign({},e,{preventDefault:!1})),w=t=>{var{url:i}=t,r=e(t,["url"]);const[a,s]=(0,o.default)(i,"anonymous"),d=a?(0,u.getCrop)(a,{width:r.width,height:r.height},"center-middle"):{};return(0,c.useImageLoader)(s,"background"),n.default.createElement(l.Image,Object.assign({image:a},r,d))},X=e=>n.default.createElement(l.Rect,Object.assign({},e)),Y=t=>{const{background:i,scale:r,borderColor:o}=t,s=e(t,["background","scale","borderColor"]),d=n.default.useMemo(()=>!!a.default.Util.colorToRGBA(i),[i]),c=n.default.useMemo(()=>{const e=document.createElement("canvas"),t=30;e.width=60,e.height=60;const n=e.getContext("2d");return n&&(n.fillStyle="black",n.fillRect(t,0,t,t),n.fillRect(0,t,t,t)),e},[]);return n.default.createElement(n.default.Fragment,null,n.default.createElement(l.Rect,Object.assign({fillPatternImage:c},s,{opacity:.1,hideInExport:!0})),d?n.default.createElement(X,Object.assign({fill:i},s)):n.default.createElement(w,Object.assign({url:i},s)))},k=(0,i.observer)(({selection:e})=>e.visible?n.default.createElement(l.Rect,{name:"selection",x:Math.min(e.x1,e.x2),y:Math.min(e.y1,e.y2),width:Math.abs(e.x1-e.x2),height:Math.abs(e.y1-e.y2),fill:"rgba(0, 161, 255, 0.3)"}):null),A=(0,i.observer)(({x:e,y:t,width:i,height:r,rotation:o,anchor:s,store:d})=>{const c=(0,h.getClientRect)({x:e,y:t,width:i,height:r,rotation:a.default.Util.radToDeg(o)});if(void 0===s)return null;const u=(r/2+90)*Math.cos(o-Math.PI/2),m=(r/2+90)*Math.sin(o-Math.PI/2),g=(0,f.pxToUnitRounded)({unit:d.unit,dpi:d.dpi,px:i/d.scale,precious:"px"===d.unit?0:1})+" x "+(0,f.pxToUnitRounded)({unit:d.unit,dpi:d.dpi,px:r/d.scale,precious:"px"===d.unit?0:1})+("px"===d.unit?"":" "+d.unit);return n.default.createElement(n.default.Fragment,null,n.default.createElement(l.Label,{x:(c.minX+c.maxX)/2+u,y:(c.minY+c.maxY)/2+m,offsetX:14,offsetY:14,visible:"rotater"===s},n.default.createElement(l.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)"}),n.default.createElement(l.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:Math.round(a.default.Util.radToDeg(o)).toString()+"°"})),n.default.createElement(l.Label,{x:(c.minX+c.maxX)/2,y:c.maxY+20,visible:"rotater"!==s},n.default.createElement(l.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"up",pointerHeight:0,pointerWidth:0}),n.default.createElement(l.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:g})))}),O=(0,i.observer)(({elements:e,store:t})=>{const i=e.filter(e=>e.alwaysOnTop),r=e.filter(e=>!e.alwaysOnTop).concat(i);return n.default.createElement(n.default.Fragment,null,r.map(e=>n.default.createElement(s.default,{key:e.id,store:t,element:e,onClick:()=>{console.warn("Polotno warning: onClick callback is deprecated. Just stop using it. Polotno will do selection automatically.")}})))});let S=null;const P=e=>{S=e};exports.registerNextDomDrop=P,exports.default=(0,i.observer)(({store:e,page:t,width:o,height:s,pageControlsEnabled:c,backColor:u,pageBorderColor:y,activePageBorderColor:w,components:X,bleedColor:P})=>{const R=e.bleedVisible?t.bleed:0,T=t.computedWidth+2*R,I=t.computedHeight+2*R,C=(o-T*e.scale)/2,D=(s-I*e.scale)/2,M=n.default.useRef(null),L=n.default.useRef(null),j=n.default.useRef(null),q=null==c||c,[W,B]=n.default.useState(null),[_,G]=n.default.useState({}),U=e.selectedElements.find(e=>e._cropModeEnabled),H=e.selectedShapes.filter(e=>!e.resizable).length>0,N=e.selectedShapes.filter(e=>!e.draggable).length>0,K=e.selectedElements.filter(e=>!e.visible).length>0;n.default.useEffect(()=>{var t,n,i;if(!M.current)return;const r=M.current.getStage(),l=e.selectedShapes.map(e=>e._cropModeEnabled?null:r.findOne("#"+e.id)).filter(e=>e),o=1===e.selectedElements.length&&(null===(t=e.selectedElements[0])||void 0===t?void 0:t.type)||"many";v[o]?(M.current.setAttrs(Object.assign(Object.assign({},x),v[o])),"svg"!==o&&"image"!==o||e.selectedElements[0].keepRatio||M.current.setAttrs({enabledAnchors:x.enabledAnchors}),"text"===o&&p.flags.textVerticalResizeEnabled&&M.current.setAttrs({enabledAnchors:null===(n=v.text.enabledAnchors)||void 0===n?void 0:n.concat(["bottom-center"])})):M.current.setAttrs(x),H&&M.current.enabledAnchors([]),N&&M.current.rotateEnabled(!1),l.find(e=>null==e?void 0:e.isDragging())&&l.forEach(e=>{null==e||e.startDrag()}),M.current.nodes(l),null===(i=M.current.getLayer())||void 0===i||i.batchDraw()},[e.selectedElements,U,H,K,N]);const F=(0,i.useLocalObservable)(()=>({visible:!1,x1:0,y1:0,x2:0,y2:0})),z=n.default.useRef(!1),J=(0,b.useMobile)(),V=(0,r.action)(n=>{var i,r;if(J)return;z.current=!1,e.activePage!==t&&t.select();const l=n.target.findAncestor(".elements-container"),o=n.target.findAncestor("Transformer"),a=n.target.findAncestor(".page-abs-container");if(l||o||a)return;const s=null===(i=n.target.getStage())||void 0===i?void 0:i.getPointerPosition();s&&(F.visible=!0,F.x1=s.x,F.y1=s.y,F.x2=s.x,F.y2=s.y,(null===(r=n.target.getStage())||void 0===r?void 0:r.getPointersPositions().length)>=2&&(F.visible=!1))});n.default.useEffect(()=>{const t=(0,r.action)(e=>{var t,n;if(!F.visible)return;null===(t=L.current)||void 0===t||t.setPointersPositions(e);let i=(null===(n=L.current)||void 0===n?void 0:n.getPointerPosition())||{x:F.x2,y:F.y2};F.x2=i.x,F.y2=i.y}),n=(0,r.action)(()=>{if(!F.visible)return;if(!L.current)return;const t=L.current.findOne(".selection"),n=t?t.getClientRect():{width:0,height:0,x:0,y:0};if(n.width&&n.height){const t=[];L.current.find(".element").forEach(i=>{const r=i.getClientRect(),l=e.getElementById(i.id()),o=null==l?void 0:l.draggable,s=null==l?void 0:l.selectable;a.default.Util.haveIntersection(n,r)&&o&&s&&t.push(i.id())}),e.selectElements(t)}F.visible=!1,z.current=!0});return window.addEventListener("mousemove",t),window.addEventListener("touchmove",t),window.addEventListener("mouseup",n),window.addEventListener("touchend",n),()=>{window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",t),window.removeEventListener("mouseup",n),window.removeEventListener("touchend",n)}},[]);const Q=t=>{if(z.current)return;const n=t.evt.ctrlKey||t.evt.metaKey||t.evt.shiftKey,i=t.target.findAncestor(".elements-container"),r=t.target.findAncestor(".page-abs-container"),l=t.target.findAncestor("Transformer");if(!(n||i||l||r))return void e.selectElements([]);const o=t.target.findAncestor(".element",!0),a=e.getElementById(null==o?void 0:o.id()),s=null==a?void 0:a.top,d=null==s?void 0:s.id,c=e.selectedElementsIds.indexOf(d)>=0;d&&n&&!c&&e.selectElements(e.selectedElementsIds.concat([d])),d&&n&&c&&e.selectElements(e.selectedElementsIds.filter(e=>e!=e)),!d||n||c||e.selectElements([d])};(0,d.useSnap)(M);const Z=e.activePage===t,$=(null==X?void 0:X.PageControls)||m.PageControls,ee=1/e.scale,te=0/e.scale;return n.default.createElement("div",{ref:j,onDragOver:e=>e.preventDefault(),onDrop:t=>{if(t.preventDefault(),!L.current)return;L.current.setPointersPositions(t);const n=L.current.findOne(".elements-container").getRelativePointerPosition(),i=L.current.getPointerPosition(),r=L.current.getIntersection(i),l=r&&r.findAncestor(".element",!0),o=l?e.getElementById(l.id()):void 0;S&&(S(n,o),S=null)},style:{position:"relative",width:o+"px"},className:"polotno-page-container"+(Z?" active-page":"")},n.default.createElement(l.Stage,{ref:L,width:o,height:s,onClick:Q,onTap:Q,onMouseDown:V,onMouseMove:n=>{if(!n.evt.altKey&&W)return void B(null);if(!n.evt.altKey)return;const i=n.target.findAncestor(".element",!0),r=null==i?void 0:i.id();if(!e.selectedElements[0])return;if(e.selectedElementsIds.includes(r))return;const l=(0,h.getTotalClientRect)(e.selectedElements),o=r?e.getElementById(r):{x:0,y:0,width:t.computedWidth,height:t.computedHeight,rotation:0},a=(0,h.getClientRect)(o),s=[];l.minX>a.maxX&&s.push({distance:l.minX-a.maxX,box1:l,box2:a,points:[{x:l.minX,y:l.minY+l.height/2},{x:a.maxX,y:l.minY+l.height/2},{x:a.maxX,y:a.minY+a.height/2}]}),l.maxX<a.minX&&s.push({distance:a.minX-l.maxX,box1:l,box2:a,points:[{x:l.maxX,y:l.minY+l.height/2},{x:a.minX,y:l.minY+l.height/2},{x:a.minX,y:a.minY+a.height/2}]}),l.minY>a.maxY&&s.push({box1:l,box2:a,distance:l.minY-a.maxY,points:[{x:l.minX+l.width/2,y:l.minY},{x:l.minX+l.width/2,y:a.maxY},{x:a.minX+a.width/2,y:a.maxY}]}),l.maxY<a.minY&&s.push({box1:l,box2:a,distance:a.minY-l.maxY,points:[{x:l.minX+l.width/2,y:l.maxY},{x:l.minX+l.width/2,y:a.minY},{x:a.minX+a.width/2,y:a.minY}]}),l.minX>=a.minX&&l.maxX<=a.maxX&&l.minY>=a.minY&&l.maxY<=a.maxY&&(s.push({distance:l.minX-a.minX,box1:l,box2:a,points:[{x:l.minX,y:l.minY+l.height/2},{x:a.minX,y:l.minY+l.height/2},{x:a.minX,y:a.minY+a.height/2}]}),s.push({distance:a.maxX-l.maxX,box1:l,box2:a,points:[{x:l.maxX,y:l.minY+l.height/2},{x:a.maxX,y:l.minY+l.height/2},{x:a.maxX,y:a.minY+a.height/2}]}),s.push({box1:l,box2:a,distance:l.minY-a.minY,points:[{x:l.minX+l.width/2,y:l.minY},{x:l.minX+l.width/2,y:a.minY},{x:a.minX+a.width/2,y:a.minY}]}),s.push({box1:l,box2:a,distance:a.maxY-l.maxY,points:[{x:l.minX+l.width/2,y:l.maxY},{x:l.minX+l.width/2,y:a.maxY},{x:a.minX+a.width/2,y:a.maxY}]})),JSON.stringify(W)!==JSON.stringify(s)&&B(s)},onTouchStart:V,onDragStart:t=>{var n;const i=t.target.findAncestor(".element",!0);if(i){const r=e.getElementById(null==i?void 0:i.id()),l=null==r?void 0:r.top,o=null==l?void 0:l.id;!(e.selectedElementsIds.indexOf(o)>=0)&&o&&(e.selectElements([o]),null===(n=M.current)||void 0===n||n.startDrag(t))}W&&B(null)},pageId:t.id,style:{position:"relative"}},n.default.createElement(l.Layer,null,n.default.createElement(E,{width:o,height:s,fill:u}),n.default.createElement(l.Group,{x:C,y:D,scaleX:e.scale,scaleY:e.scale,name:"page-container"},n.default.createElement(l.Group,{name:"page-background-group",x:R,y:R},n.default.createElement(Y,{x:-t.bleed,y:-t.bleed,width:t.computedWidth+2*t.bleed,height:t.computedHeight+2*t.bleed,background:t.background,shadowBlur:10,shadowColor:"lightgrey",name:"page-background",preventDefault:!1,scale:e.scale})),n.default.createElement(l.Group,{x:R,y:R,name:"elements-container"},n.default.createElement(l.Rect,{name:"elements-area",width:t.computedWidth,height:t.computedHeight,listening:!1}),n.default.createElement(O,{elements:t.children,store:e})),n.default.createElement(l.Rect,{stroke:P,name:"bleed",strokeWidth:t.bleed,x:t.bleed/2,y:t.bleed/2,width:t.computedWidth+t.bleed,height:t.computedHeight+t.bleed,listening:!1,visible:t.bleed>0&&e.bleedVisible,hideInExport:!0})),n.default.createElement(l.Line,{name:"workspace-background",points:[0,0,o,0,o,s,0,s,0,0,C,D,C,s-D,o-C,s-D,o-C,D,C,D],listening:!1,closed:!0,fill:u}),n.default.createElement(l.Group,{x:C,y:D,scaleX:e.scale,scaleY:e.scale,name:"page-container"},n.default.createElement(l.Rect,{name:"page-highlight",hideInExport:!0,x:-ee/2-te,y:-ee/2-te,width:T+ee+2*te,height:I+ee+2*te,stroke:Z&&e.pages.length>1?w:y,strokeWidth:2,listening:!1,strokeScaleEnabled:!1})),n.default.createElement(l.Group,{x:C+R*e.scale,y:D+R*e.scale,scaleX:e.scale,scaleY:e.scale,name:"page-abs-container"},n.default.createElement(l.Transformer,{ref:M,boundBoxFunc:(e,t)=>{const n=t.width<1||t.height<1,i=e.width<1||e.height<1;return n&&!i?e:t},onTransform:e=>{var t,n;const i=null===(t=M.current)||void 0===t?void 0:t.__getNodeRect(),r=null===(n=M.current)||void 0===n?void 0:n.getActiveAnchor();G({anchor:r,x:i.x,y:i.y,rotation:i.rotation,width:i.width,height:i.height})},onTransformEnd:e=>{G({})}}),W&&W.map(({points:t,distance:i,box1:r,box2:o},a)=>n.default.createElement(l.Group,{name:"distances-container",hideInExport:!0,key:a,listening:!1},n.default.createElement(l.Rect,Object.assign({},r,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),n.default.createElement(l.Rect,Object.assign({},o,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),n.default.createElement(l.Line,{points:[t[0].x,t[0].y,t[1].x,t[1].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),n.default.createElement(l.Line,{points:[t[1].x,t[1].y,t[2].x,t[2].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),n.default.createElement(l.Label,{x:(t[0].x+t[1].x)/2,y:(t[0].y+t[1].y)/2,offsetY:-10,scaleX:1/e.scale,scaleY:1/e.scale},n.default.createElement(l.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"down"}),n.default.createElement(l.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:5,text:(0,f.pxToUnitString)({unit:e.unit,dpi:e.dpi,px:i})}))))),n.default.createElement(A,Object.assign({},_,{store:e})),n.default.createElement(k,{selection:F}),g.shouldShowCredit.value&&n.default.createElement(l.Text,{text:"Powered by polotno.dev",fontSize:14,fill:"rgba(0,0,0,0.6)",x:o-170,y:s-18,onMouseEnter:e=>{e.target.getStage().container().style.cursor="pointer"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onTouchStart:e=>{e.cancelBubble=!0},onMouseDown:e=>{e.cancelBubble=!0},onClick:()=>{window.open("https://polotno.dev")},onTap:()=>{window.open("https://polotno.dev")}}),n.default.createElement(l.Group,{name:"line-guides"}))),q&&Z&&n.default.createElement($,{store:e,page:t,xPadding:C,yPadding:D}))});
3254
+ "use strict";var e=this&&this.__rest||function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerNextDomDrop=exports.registerTransformerAttrs=void 0;const n=t(require("react")),i=require("mobx-react-lite"),r=require("mobx"),l=require("react-konva"),o=t(require("use-image")),a=t(require("konva")),s=t(require("./element")),d=require("./use-transformer-snap"),c=require("./image-element"),u=require("../utils/crop"),m=require("./page-controls"),g=require("../utils/validate-key"),h=require("../utils/math"),f=require("../utils/unit"),p=require("../utils/flags"),b=require("../utils/screen"),x={enabledAnchors:["top-left","top-center","top-right","middle-left","bottom-left","bottom-right","bottom-center","middle-right"],borderEnabled:!0,rotateEnabled:!0,rotationSnaps:[0,45,90,135,180,225,270,315],ignoreStroke:!0,anchorStrokeWidth:2,borderStrokeWidth:2},v={text:{enabledAnchors:["top-left","top-right","middle-left","bottom-left","bottom-right","middle-right"]},svg:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},line:{enabledAnchors:[],borderEnabled:!1,rotateEnabled:!1},image:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},many:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},group:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]}};function y(e,t){v[e]=v[e]||t,Object.assign(v[e],t)}exports.registerTransformerAttrs=y;const E=e=>n.default.createElement(l.Rect,Object.assign({},e,{preventDefault:!1})),w=t=>{var{url:i}=t,r=e(t,["url"]);const[a,s]=(0,o.default)(i,"anonymous"),d=a?(0,u.getCrop)(a,{width:r.width,height:r.height},"center-middle"):{};return(0,c.useImageLoader)(s,"background"),n.default.createElement(l.Image,Object.assign({image:a},r,d))},X=e=>n.default.createElement(l.Rect,Object.assign({},e)),Y=t=>{const{background:i,scale:r,borderColor:o}=t,s=e(t,["background","scale","borderColor"]),d=n.default.useMemo(()=>!!a.default.Util.colorToRGBA(i),[i]),c=n.default.useMemo(()=>{const e=document.createElement("canvas"),t=30;e.width=60,e.height=60;const n=e.getContext("2d");return n&&(n.fillStyle="black",n.fillRect(t,0,t,t),n.fillRect(0,t,t,t)),e},[]);return n.default.createElement(n.default.Fragment,null,n.default.createElement(l.Rect,Object.assign({fillPatternImage:c},s,{opacity:.1,hideInExport:!0})),d?n.default.createElement(X,Object.assign({fill:i},s)):n.default.createElement(w,Object.assign({url:i},s)))},k=(0,i.observer)(({selection:e})=>e.visible?n.default.createElement(l.Rect,{name:"selection",x:Math.min(e.x1,e.x2),y:Math.min(e.y1,e.y2),width:Math.abs(e.x1-e.x2),height:Math.abs(e.y1-e.y2),fill:"rgba(0, 161, 255, 0.3)"}):null),A=(0,i.observer)(({x:e,y:t,width:i,height:r,rotation:o,anchor:s,store:d})=>{const c=(0,h.getClientRect)({x:e,y:t,width:i,height:r,rotation:a.default.Util.radToDeg(o)});if(void 0===s)return null;const u=(r/2+90)*Math.cos(o-Math.PI/2),m=(r/2+90)*Math.sin(o-Math.PI/2),g=(0,f.pxToUnitRounded)({unit:d.unit,dpi:d.dpi,px:i/d.scale,precious:"px"===d.unit?0:1})+" x "+(0,f.pxToUnitRounded)({unit:d.unit,dpi:d.dpi,px:r/d.scale,precious:"px"===d.unit?0:1})+("px"===d.unit?"":" "+d.unit);return n.default.createElement(n.default.Fragment,null,n.default.createElement(l.Label,{x:(c.minX+c.maxX)/2+u,y:(c.minY+c.maxY)/2+m,offsetX:14,offsetY:14,visible:"rotater"===s},n.default.createElement(l.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)"}),n.default.createElement(l.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:Math.round(a.default.Util.radToDeg(o)).toString()+"°"})),n.default.createElement(l.Label,{x:(c.minX+c.maxX)/2,y:c.maxY+20,visible:"rotater"!==s},n.default.createElement(l.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"up",pointerHeight:0,pointerWidth:0}),n.default.createElement(l.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:g})))}),O=(0,i.observer)(({elements:e,store:t})=>{const i=e.filter(e=>e.alwaysOnTop),r=e.filter(e=>!e.alwaysOnTop).concat(i);return n.default.createElement(n.default.Fragment,null,r.map(e=>n.default.createElement(s.default,{key:e.id,store:t,element:e,onClick:()=>{console.warn("Polotno warning: onClick callback is deprecated. Just stop using it. Polotno will do selection automatically.")}})))});let S=null;const P=e=>{S=e};exports.registerNextDomDrop=P,exports.default=(0,i.observer)(({store:e,page:t,width:o,height:s,pageControlsEnabled:c,backColor:u,pageBorderColor:y,activePageBorderColor:w,components:X,bleedColor:P})=>{const R=e.bleedVisible?t.bleed:0,T=t.computedWidth+2*R,D=t.computedHeight+2*R,I=(o-T*e.scale)/2,C=(s-D*e.scale)/2,M=n.default.useRef(null),L=n.default.useRef(null),j=n.default.useRef(null),q=null==c||c,[W,B]=n.default.useState(null),[_,G]=n.default.useState({}),U=e.selectedElements.find(e=>e._cropModeEnabled),H=e.selectedShapes.filter(e=>!e.resizable).length>0,N=e.selectedShapes.filter(e=>!e.draggable).length>0,K=e.selectedElements.filter(e=>!e.visible).length>0;n.default.useLayoutEffect(()=>{var t,n,i;if(!M.current)return;const r=M.current.getStage(),l=e.selectedShapes.map(e=>e._cropModeEnabled?null:r.findOne("#"+e.id)).filter(e=>e),o=1===e.selectedElements.length&&(null===(t=e.selectedElements[0])||void 0===t?void 0:t.type)||"many";v[o]?(M.current.setAttrs(Object.assign(Object.assign({},x),v[o])),"svg"!==o&&"image"!==o||e.selectedElements[0].keepRatio||M.current.setAttrs({enabledAnchors:x.enabledAnchors}),"text"===o&&p.flags.textVerticalResizeEnabled&&M.current.setAttrs({enabledAnchors:null===(n=v.text.enabledAnchors)||void 0===n?void 0:n.concat(["bottom-center"])})):M.current.setAttrs(x),H&&M.current.enabledAnchors([]),N&&M.current.rotateEnabled(!1),l.find(e=>null==e?void 0:e.isDragging())&&l.forEach(e=>{null==e||e.startDrag()}),M.current.nodes(l),null===(i=M.current.getLayer())||void 0===i||i.batchDraw()},[e.selectedElements,U,H,K,N]);const F=(0,i.useLocalObservable)(()=>({visible:!1,x1:0,y1:0,x2:0,y2:0})),z=n.default.useRef(!1),J=(0,b.useMobile)(),V=(0,r.action)(n=>{var i,r;if(J)return;z.current=!1,e.activePage!==t&&t.select();const l=n.target.findAncestor(".elements-container"),o=n.target.findAncestor("Transformer"),a=n.target.findAncestor(".page-abs-container");if(l||o||a)return;const s=null===(i=n.target.getStage())||void 0===i?void 0:i.getPointerPosition();s&&(F.visible=!0,F.x1=s.x,F.y1=s.y,F.x2=s.x,F.y2=s.y,(null===(r=n.target.getStage())||void 0===r?void 0:r.getPointersPositions().length)>=2&&(F.visible=!1))});n.default.useEffect(()=>{const t=(0,r.action)(e=>{var t,n;if(!F.visible)return;null===(t=L.current)||void 0===t||t.setPointersPositions(e);let i=(null===(n=L.current)||void 0===n?void 0:n.getPointerPosition())||{x:F.x2,y:F.y2};F.x2=i.x,F.y2=i.y}),n=(0,r.action)(()=>{if(!F.visible)return;if(!L.current)return;const t=L.current.findOne(".selection"),n=t?t.getClientRect():{width:0,height:0,x:0,y:0};if(n.width&&n.height){const t=[];L.current.find(".element").forEach(i=>{const r=i.getClientRect(),l=e.getElementById(i.id()),o=null==l?void 0:l.draggable,s=null==l?void 0:l.selectable;a.default.Util.haveIntersection(n,r)&&o&&s&&t.push(i.id())}),e.selectElements(t)}F.visible=!1,z.current=!0});return window.addEventListener("mousemove",t),window.addEventListener("touchmove",t),window.addEventListener("mouseup",n),window.addEventListener("touchend",n),()=>{window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",t),window.removeEventListener("mouseup",n),window.removeEventListener("touchend",n)}},[]);const Q=t=>{if(z.current)return;const n=t.evt.ctrlKey||t.evt.metaKey||t.evt.shiftKey,i=t.target.findAncestor(".elements-container"),r=t.target.findAncestor(".page-abs-container"),l=t.target.findAncestor("Transformer");if(!(n||i||l||r))return void e.selectElements([]);const o=t.target.findAncestor(".element",!0),a=e.getElementById(null==o?void 0:o.id()),s=null==a?void 0:a.top,d=null==s?void 0:s.id,c=e.selectedElementsIds.indexOf(d)>=0;d&&n&&!c&&e.selectElements(e.selectedElementsIds.concat([d])),d&&n&&c&&e.selectElements(e.selectedElementsIds.filter(e=>e!=e)),!d||n||c||e.selectElements([d])};(0,d.useSnap)(M);const Z=e.activePage===t,$=(null==X?void 0:X.PageControls)||m.PageControls,ee=1/e.scale,te=0/e.scale;return n.default.createElement("div",{ref:j,onDragOver:e=>e.preventDefault(),onDrop:t=>{if(t.preventDefault(),!L.current)return;L.current.setPointersPositions(t);const n=L.current.findOne(".elements-container").getRelativePointerPosition(),i=L.current.getPointerPosition(),r=L.current.getIntersection(i),l=r&&r.findAncestor(".element",!0),o=l?e.getElementById(l.id()):void 0;S&&(S(n,o),S=null)},style:{position:"relative",width:o+"px"},className:"polotno-page-container"+(Z?" active-page":"")},n.default.createElement(l.Stage,{ref:L,width:o,height:s,onClick:Q,onTap:Q,onMouseDown:V,onMouseMove:n=>{if(!n.evt.altKey&&W)return void B(null);if(!n.evt.altKey)return;const i=n.target.findAncestor(".element",!0),r=null==i?void 0:i.id();if(!e.selectedElements[0])return;if(e.selectedElementsIds.includes(r))return;const l=(0,h.getTotalClientRect)(e.selectedElements),o=r?e.getElementById(r):{x:0,y:0,width:t.computedWidth,height:t.computedHeight,rotation:0},a=(0,h.getClientRect)(o),s=[];l.minX>a.maxX&&s.push({distance:l.minX-a.maxX,box1:l,box2:a,points:[{x:l.minX,y:l.minY+l.height/2},{x:a.maxX,y:l.minY+l.height/2},{x:a.maxX,y:a.minY+a.height/2}]}),l.maxX<a.minX&&s.push({distance:a.minX-l.maxX,box1:l,box2:a,points:[{x:l.maxX,y:l.minY+l.height/2},{x:a.minX,y:l.minY+l.height/2},{x:a.minX,y:a.minY+a.height/2}]}),l.minY>a.maxY&&s.push({box1:l,box2:a,distance:l.minY-a.maxY,points:[{x:l.minX+l.width/2,y:l.minY},{x:l.minX+l.width/2,y:a.maxY},{x:a.minX+a.width/2,y:a.maxY}]}),l.maxY<a.minY&&s.push({box1:l,box2:a,distance:a.minY-l.maxY,points:[{x:l.minX+l.width/2,y:l.maxY},{x:l.minX+l.width/2,y:a.minY},{x:a.minX+a.width/2,y:a.minY}]}),l.minX>=a.minX&&l.maxX<=a.maxX&&l.minY>=a.minY&&l.maxY<=a.maxY&&(s.push({distance:l.minX-a.minX,box1:l,box2:a,points:[{x:l.minX,y:l.minY+l.height/2},{x:a.minX,y:l.minY+l.height/2},{x:a.minX,y:a.minY+a.height/2}]}),s.push({distance:a.maxX-l.maxX,box1:l,box2:a,points:[{x:l.maxX,y:l.minY+l.height/2},{x:a.maxX,y:l.minY+l.height/2},{x:a.maxX,y:a.minY+a.height/2}]}),s.push({box1:l,box2:a,distance:l.minY-a.minY,points:[{x:l.minX+l.width/2,y:l.minY},{x:l.minX+l.width/2,y:a.minY},{x:a.minX+a.width/2,y:a.minY}]}),s.push({box1:l,box2:a,distance:a.maxY-l.maxY,points:[{x:l.minX+l.width/2,y:l.maxY},{x:l.minX+l.width/2,y:a.maxY},{x:a.minX+a.width/2,y:a.maxY}]})),JSON.stringify(W)!==JSON.stringify(s)&&B(s)},onTouchStart:V,onDragStart:t=>{var n;const i=t.target.findAncestor(".element",!0);if(i){const r=e.getElementById(null==i?void 0:i.id()),l=null==r?void 0:r.top,o=null==l?void 0:l.id;!(e.selectedElementsIds.indexOf(o)>=0)&&o&&(e.selectElements([o]),t.target.stopDrag(),t.target.startDrag(),null===(n=M.current)||void 0===n||n.startDrag(t))}W&&B(null)},pageId:t.id,style:{position:"relative"}},n.default.createElement(l.Layer,null,n.default.createElement(E,{width:o,height:s,fill:u}),n.default.createElement(l.Group,{x:I,y:C,scaleX:e.scale,scaleY:e.scale,name:"page-container"},n.default.createElement(l.Group,{name:"page-background-group",x:R,y:R},n.default.createElement(Y,{x:-t.bleed,y:-t.bleed,width:t.computedWidth+2*t.bleed,height:t.computedHeight+2*t.bleed,background:t.background,shadowBlur:10,shadowColor:"lightgrey",name:"page-background",preventDefault:!1,scale:e.scale})),n.default.createElement(l.Group,{x:R,y:R,name:"elements-container"},n.default.createElement(l.Rect,{name:"elements-area",width:t.computedWidth,height:t.computedHeight,listening:!1}),n.default.createElement(O,{elements:t.children,store:e})),n.default.createElement(l.Rect,{stroke:P,name:"bleed",strokeWidth:t.bleed,x:t.bleed/2,y:t.bleed/2,width:t.computedWidth+t.bleed,height:t.computedHeight+t.bleed,listening:!1,visible:t.bleed>0&&e.bleedVisible,hideInExport:!0})),n.default.createElement(l.Line,{name:"workspace-background",points:[0,0,o,0,o,s,0,s,0,0,I,C,I,s-C,o-I,s-C,o-I,C,I,C],listening:!1,closed:!0,fill:u}),n.default.createElement(l.Group,{x:I,y:C,scaleX:e.scale,scaleY:e.scale,name:"page-container"},n.default.createElement(l.Rect,{name:"page-highlight",hideInExport:!0,x:-ee/2-te,y:-ee/2-te,width:T+ee+2*te,height:D+ee+2*te,stroke:Z&&e.pages.length>1?w:y,strokeWidth:2,listening:!1,strokeScaleEnabled:!1})),n.default.createElement(l.Group,{x:I+R*e.scale,y:C+R*e.scale,scaleX:e.scale,scaleY:e.scale,name:"page-abs-container"},n.default.createElement(l.Transformer,{ref:M,boundBoxFunc:(e,t)=>{const n=t.width<1||t.height<1,i=e.width<1||e.height<1;return n&&!i?e:t},onTransform:e=>{var t,n;const i=null===(t=M.current)||void 0===t?void 0:t.__getNodeRect(),r=null===(n=M.current)||void 0===n?void 0:n.getActiveAnchor();G({anchor:r,x:i.x,y:i.y,rotation:i.rotation,width:i.width,height:i.height})},onTransformEnd:e=>{G({})}}),W&&W.map(({points:t,distance:i,box1:r,box2:o},a)=>n.default.createElement(l.Group,{name:"distances-container",hideInExport:!0,key:a,listening:!1},n.default.createElement(l.Rect,Object.assign({},r,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),n.default.createElement(l.Rect,Object.assign({},o,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),n.default.createElement(l.Line,{points:[t[0].x,t[0].y,t[1].x,t[1].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),n.default.createElement(l.Line,{points:[t[1].x,t[1].y,t[2].x,t[2].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),n.default.createElement(l.Label,{x:(t[0].x+t[1].x)/2,y:(t[0].y+t[1].y)/2,offsetY:-10,scaleX:1/e.scale,scaleY:1/e.scale},n.default.createElement(l.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"down"}),n.default.createElement(l.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:5,text:(0,f.pxToUnitString)({unit:e.unit,dpi:e.dpi,px:i})}))))),n.default.createElement(A,Object.assign({},_,{store:e})),n.default.createElement(k,{selection:F}),g.shouldShowCredit.value&&n.default.createElement(l.Text,{text:"Powered by polotno.dev",fontSize:14,fill:"rgba(0,0,0,0.6)",x:o-170,y:s-18,onMouseEnter:e=>{e.target.getStage().container().style.cursor="pointer"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onTouchStart:e=>{e.cancelBubble=!0},onMouseDown:e=>{e.cancelBubble=!0},onClick:()=>{window.open("https://polotno.dev")},onTap:()=>{window.open("https://polotno.dev")}}),n.default.createElement(l.Group,{name:"line-guides"}))),q&&Z&&n.default.createElement($,{store:e,page:t,xPadding:I,yPadding:C}))});
3255
3255
  },{"react":"HdMw","mobx-react-lite":"ZfSi","mobx":"BzvP","react-konva":"Sgug","use-image":"MJM3","konva":"aTGn","./element":"XEPK","./use-transformer-snap":"F86d","./image-element":"VbEp","../utils/crop":"hfHf","./page-controls":"smDv","../utils/validate-key":"zree","../utils/math":"RXmf","../utils/unit":"BUt3","../utils/flags":"IDY9","../utils/screen":"aH85"}],"s1Tm":[function(require,module,exports) {
3256
3256
  "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LeftRules=exports.TopRules=void 0;const t=e(require("react")),i=require("../utils/math"),o=require("../utils/unit"),l=require("mobx-react-lite"),r=[.1,.2,.5,1,2,5,10,20,25,50,100,200,500,1e3,2e3,5e3,1e4],d=30,n=e=>r.find(t=>e(t)>30)||1e4;function s(){return t.default.createElement("div",null,t.default.createElement("h1",null,"Top rules"))}exports.TopRules=(0,l.observer)(({store:e,width:l,height:d})=>{const n=t.default.useRef(null),s=e.activePage,a=(e.bleedVisible&&s.bleed,s.computedWidth*e.scale),p=s.computedHeight*e.scale,u=(l-a)/2,c=(f=(t=>(0,o.unitToPx)({unitVal:t,dpi:e.dpi,unit:e.unit})*e.scale),r.find(e=>f(e)>30)||1e4);var f;const x=(0,o.unitToPx)({unitVal:c,dpi:e.dpi,unit:e.unit})*e.scale,h=Math.round(a/x)+1,g=Math.round(p/x)+1,m=(0,i.getTotalClientRect)(e.selectedElements);return t.default.createElement("div",{style:{position:"absolute",top:0,left:0,pointerEvents:"none"},ref:n},t.default.createElement("div",{style:{width:l+"px",height:"14px",position:"sticky",fontSize:"8px",lineHeight:"14px",top:"0px",left:"0px",color:"grey",borderBottom:"1px solid grey",backgroundColor:"#e8e8e8",overflow:"hidden"}},[...Array(h)].map((i,o)=>t.default.createElement("div",{key:o,style:{position:"absolute",left:u+o*x+"px",borderLeft:"1px solid grey",paddingLeft:"2px",width:x+"px"}},"px"===e.unit||c>=1?Math.round(c*o):(c*o).toFixed(1))),!!e.selectedElements.length&&t.default.createElement("div",{style:{position:"absolute",left:u+m.x*e.scale+"px",height:"14px",width:m.width*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}})),e.pages.map((i,o)=>{var l;const r=i.computedHeight*e.scale,n=(d-r)/2;return t.default.createElement("div",{key:i.id,style:{left:"0px",width:"14px",height:d+"px",position:"sticky",fontSize:"8px",lineHeight:"14px",color:"grey",borderRight:"1px solid grey",backgroundColor:"#e8e8e8",overflow:"hidden"}},[...Array(g)].map((i,o)=>t.default.createElement("div",{key:o,style:{position:"absolute",left:"14px",top:n+o*x-14+"px",borderLeft:"1px solid grey",paddingLeft:"2px",transform:"rotate(90deg)",transformOrigin:"left top",width:x+"px",overflow:"hidden"}},"px"===e.unit||c>=1?Math.round(c*o):(c*o).toFixed(1))),(null===(l=e.selectedElements[0])||void 0===l?void 0:l.page)===i&&t.default.createElement("div",{style:{position:"absolute",top:n+m.y*e.scale-14+"px",width:"14px",height:m.height*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}}))}))}),exports.LeftRules=s;
3257
3257
  },{"react":"HdMw","../utils/math":"RXmf","../utils/unit":"BUt3","mobx-react-lite":"ZfSi"}],"NI5R":[function(require,module,exports) {
@@ -3280,7 +3280,7 @@ var e=require("process");Object.defineProperty(exports,"__esModule",{value:!0}),
3280
3280
  },{"./svg":"B1DI"}],"YsBD":[function(require,module,exports) {
3281
3281
  "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,o,i){void 0===i&&(i=o);var n=Object.getOwnPropertyDescriptor(t,o);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,i,n)}:function(e,t,o,i){void 0===i&&(i=o),e[i]=t[o]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(o){if(o&&o.__esModule)return o;var i={};if(null!=o)for(var n in o)"default"!==n&&Object.prototype.hasOwnProperty.call(o,n)&&e(i,o,n);return t(i,o),i};Object.defineProperty(exports,"__esModule",{value:!0}),exports.jsonToHTML=exports.jsonToDOM=exports.fixRatio=void 0;const i=require("./image"),n=o(require("./svg"));async function r(e,t){const o=await l(e),i=document.createElement("canvas");i.width=2*o.width,i.height=2*o.height,i.getContext("2d").drawImage(o,0,0,i.width,i.height);const n=document.createElement("canvas");n.width=t.width,n.height=t.height;const r=n.getContext("2d");let{cropX:s,cropY:a}=t;const c=i.width*t.cropWidth,h=i.height*t.cropHeight,d=t.width/t.height;let g,p;const u=c/h;return"svg"===t.type?(g=c,p=h):d>=u?(g=c,p=c/d):(g=h*d,p=h),r.drawImage(i,s*i.width,a*i.height,g,p,0,0,n.width,n.height),n.toDataURL("image/png")}const s=(e,t,...o)=>({type:e,props:t,children:o||[]});function a(e){var t=(new DOMParser).parseFromString(e,"image/svg+xml");return t.documentElement.setAttribute("preserveAspectRatio","none"),(new XMLSerializer).serializeToString(t)}exports.fixRatio=a;const l=e=>new Promise(t=>{const o=new window.Image;o.onload=(()=>{t(o)}),o.src=e,o.crossOrigin="anonymous"}),c=async({element:e,page:t,store:o})=>{let{src:i}=e;if("svg"===e.type){const t=await n.urlToString(i);i=n.replaceColors(t,new Map(Object.entries(e.colorsReplace)))}i=await r(i,e);let a="";return e.flipX&&(a+="scaleX(-1)"),e.flipY&&(a+="scaleY(-1)"),s("img",{src:i,width:"100%",height:"100%",style:{"border-radius":e.cornerRadius+"px",border:e.borderSize?`${e.borderSize}px solid ${e.borderColor}`:"none",transform:a}})},h=async({element:e,page:t,store:o})=>{let i={};return e.fill.indexOf("gradient")>=0&&(i=Object.assign(Object.assign({},i),{"background-color":e.fill,"background-image":e.fill,"background-clip":"text","text-fill-color":"transparent","-webkit-background-clip":"text","-webkit-text-fill-color":"transparent"})),s("div",{style:Object.assign(Object.assign({},i),{width:e.width+"px",color:e.fill,"white-space":"pre-wrap","font-size":e.fontSize+"px","text-align":e.align,"font-family":e.fontFamily,"text-decoration":e.textDecoration||"none","line-height":e.lineHeight,"letter-spacing":e.letterSpacing+"em","font-style":e.fontStyle,"font-weight":e.fontWeight,"-webkit-text-stroke":`${e.strokeWidth}px ${e.stroke}`,"text-stroke":`${e.strokeWidth}px ${e.stroke}`})},e.text.split("\n").join("<br />"))},d={image:c,svg:c,text:h};async function g({element:e,page:t,store:o,elementHook:i}){const n=await d[e.type]({element:e,page:t,store:o}),r=[];e.blurEnabled&&r.push(`blur(${e.blurRadius/2}px)`),e.brightnessEnabled&&r.push(`brightness(${100*e.brightness+100}%)`),e.sepiaEnabled&&r.push("sepia()"),e.grayscaleEnabled&&r.push("grayscale()"),e.shadowEnabled&&r.push(`drop-shadow(${e.shadowOffsetX}px ${e.shadowOffsetY}px ${e.shadowBlur}px ${e.shadowColor})`);const a=s("div",{style:{position:"absolute",left:e.x+"px",top:e.y+"px",width:e.width+"px",height:e.height+"px",transform:`rotate(${e.rotation}deg)`,"transform-origin":"top left",opacity:e.opacity,filter:r.join(" ")}},n);return i&&i({dom:a,element:e})||a}async function p({page:e,store:t,elementHook:o}){const n=await Promise.all(e.children.map(i=>g({element:i,page:e,store:t,elementHook:o})));let a={};if(e.background.indexOf("url")>=0||e.background.indexOf("http")>=0||e.background.indexOf(".jpg")>=0||e.background.indexOf(".png")>=0||e.background.indexOf(".jpeg")>=0){const o=await l(e.background);console.log((0,i.getCrop)({width:t.width,height:t.height},{width:o.width,height:o.height}));const n=await r(e.background,Object.assign({width:t.width,height:t.height,x:0,y:0},(0,i.getCrop)({width:t.width,height:t.height},{width:o.width,height:o.height})));a=Object.assign(Object.assign({},a),{"background-image":`url(${n})`})}return s("div",{className:"page",style:Object.assign(Object.assign({},a),{width:t.width+"px",height:t.height+"px",background:e.background,border:"1px solid grey",overflow:"hidden",position:"relative"})},...n)}async function u({json:e,elementHook:t}){const o=await Promise.all(e.pages.map(o=>p({page:o,store:e,elementHook:t}))),i=[];e.pages.forEach(e=>{e.children.forEach(e=>{"text"===e.type&&-1===i.indexOf(e.fontFamily)&&i.push(e.fontFamily)})});const n=i.map(t=>e.fonts.find(e=>e.fontFamily===t)?s("style",{},""):s("link",{href:`https://fonts.googleapis.com/css?family=${t}`,rel:"stylesheet"}));return s("div",{className:"design"},...n,...o)}exports.jsonToDOM=u;const f=(e,t)=>"object"==typeof t?`${e}="${Object.keys(t).map(e=>`${e}:${t[e]};`).join(" ")}"`:`${e}="${t}"`,b=({dom:e})=>"string"==typeof e?e:e?`<${e.type} ${Object.keys(e.props).map(t=>f(t,e.props[t])).join(" ")}>${e.children.map(e=>b({dom:e})).join("")}</${e.type}>`:"";async function m({json:e,elementHook:t}){const o=await u({json:e,elementHook:t});return b({dom:o})}exports.jsonToHTML=m;
3282
3282
  },{"./image":"GGhN","./svg":"B1DI"}],"GRkH":[function(require,module,exports) {
3283
- "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,o,n){void 0===n&&(n=o);var i=Object.getOwnPropertyDescriptor(t,o);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,n,i)}:function(e,t,o,n){void 0===n&&(n=o),e[n]=t[o]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(o){if(o&&o.__esModule)return o;var n={};if(null!=o)for(var i in o)"default"!==i&&Object.prototype.hasOwnProperty.call(o,i)&&e(n,o,i);return t(n,o),n},n=this&&this.__rest||function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(o[n[i]]=e[n[i]])}return o},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createStore=exports.Store=exports.Font=exports.Page=exports.GroupElement=exports.registerShapeModel=exports.SVGElement=exports.LineElement=exports.ImageElement=exports.TextElement=exports.Element=exports.Node=void 0;const s=require("mobx-state-tree"),a=require("./history"),r=require("nanoid"),l=i(require("konva")),d=require("../utils/download"),c=require("../utils/pdf"),p=require("../utils/validate-key"),g=o(require("../utils/fonts")),h=require("../utils/loader"),u=require("../utils/unit"),m=require("../utils/deep-equal"),f=require("../utils/wait"),y=require("../utils/html");(0,s.setLivelinessChecking)("ignore");const b=(e,t)=>{e.children&&e.children.forEach(e=>{t(e),b(e,t)})};exports.Node=s.types.model("Node",{id:s.types.identifier,type:"none",name:"",opacity:1,animations:s.types.array(s.types.frozen()),custom:s.types.frozen(),visible:!0,selectable:!0,removable:!0,alwaysOnTop:!1,showInExport:!0}).postProcessSnapshot(e=>{const t=Object.assign({},e),o={};for(var n in t)"_"!==n[0]&&(o[n]=e[n]);return o}).views(e=>({get locked(){return!(e.draggable||e.contentEditable||e.styleEditable||e.resizable)},get page(){return(0,s.getParentOfType)(e,exports.Page)},get store(){return(0,s.getParentOfType)(e,exports.Store)},get top(){let t=e;for(;;){if(!(0,s.hasParentOfType)(t,exports.GroupElement))return t;t=(0,s.getParentOfType)(t,exports.GroupElement)}},get parent(){return(0,s.hasParentOfType)(e,exports.GroupElement)?(0,s.getParentOfType)(e,exports.GroupElement):(0,s.hasParentOfType)(e,exports.Page)?(0,s.getParentOfType)(e,exports.Page):(0,s.hasParentOfType)(e,exports.Store)?(0,s.getParentOfType)(e,exports.Store):null}})).actions(e=>({toJSON:()=>Object.assign({},(0,s.getSnapshot)(e))})).actions(e=>({clone(t={}){const o=e.toJSON();return t.id=t.id||(0,r.nanoid)(10),b(o,e=>{e.id=(0,r.nanoid)(10)}),Object.assign(o,t),e.page.addElement(o)},set(t){Object.assign(e,t)},moveUp(){e.page.moveElementsUp([e.id])},moveTop(){e.page.moveElementsTop([e.id])},moveDown(){e.page.moveElementsDown([e.id])},moveBottom(){e.page.moveElementsBottom([e.id])},beforeDestroy(){e.store.history.endTransaction()}})),exports.Element=exports.Node.named("Element").props({x:0,y:0,width:100,height:100,rotation:0,opacity:1,blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,visible:!0,draggable:!0,resizable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot(e=>{const t=Object.assign(Object.assign({},e),{x:e.x||0,y:e.y||0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1,t.resizable=!1),t}).views(e=>({get a(){return e},animated:t=>e[t]})),exports.TextElement=exports.Element.named("Text").props({type:"text",text:"",placeholder:"",fontSize:14,fontFamily:"Roboto",fontStyle:"normal",fontWeight:"normal",textDecoration:"",fill:"black",align:"center",width:100,height:0,verticalAlign:"top",strokeWidth:0,stroke:"black",lineHeight:s.types.optional(s.types.union(s.types.number,s.types.string),1.2),letterSpacing:0,_editModeEnabled:!1,backgroundEnabled:!1,backgroundColor:"#7ED321",backgroundOpacity:1,backgroundCornerRadius:.5,backgroundPadding:.5}).preProcessSnapshot(e=>Object.assign({},e)).actions(e=>({toggleEditMode(t){e._editModeEnabled=null!=t?t:!e._editModeEnabled,e._editModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction()}})),exports.ImageElement=exports.Element.named("Image").props({type:"image",width:100,height:100,src:"",cropX:0,cropY:0,cropWidth:1,cropHeight:1,cornerRadius:0,flipX:!1,flipY:!1,clipSrc:"",borderColor:"black",borderSize:0,keepRatio:!1,_cropModeEnabled:!1}).actions(e=>({toggleCropMode(t){e._cropModeEnabled=null!=t?t:!e._cropModeEnabled,e._cropModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction()}})),exports.LineElement=exports.Element.named("Line").props({type:"line",width:400,height:10,color:"black",dash:s.types.array(s.types.number),startHead:"",endHead:""}).actions(e=>({})),exports.SVGElement=exports.Element.named("SVG").props({type:"svg",src:"",maskSrc:"",cropX:0,cropY:0,cropWidth:1,cropHeight:1,keepRatio:!0,flipX:!1,flipY:!1,width:100,height:100,borderColor:"black",borderSize:0,cornerRadius:0,colorsReplace:s.types.map(s.types.string)}).preProcessSnapshot(e=>Object.assign(Object.assign({},e),{src:e.src||e.svgSource})).actions(e=>({replaceColor(t,o){e.colorsReplace.set(t,o)}}));const E=[];function x(e){const t=e.type;if(!t)throw new Error('You must pass "type" attribute to custom model.');const o=exports.Element.named(t).props(e);O[t]=o,E.push(o)}exports.registerShapeModel=x;const w=[...new Array(20)].map((e,t)=>s.types.late(()=>E[t])),v=s.types.union({dispatcher:e=>{const t=O[e.type];if(!t)throw new Error(`Unknown element type: "${e.type}"`);return t}},exports.SVGElement,exports.TextElement,exports.ImageElement,exports.LineElement,s.types.late(()=>exports.GroupElement),...w);exports.GroupElement=exports.Node.named("Group").props({type:"group",children:s.types.array(v)}).views(e=>({get draggable(){let t=!0;return b(e,e=>{e.draggable||(t=!1)}),t},get resizable(){let t=!0;return b(e,e=>{e.resizable||(t=!1)}),t},get contentEditable(){let t=!0;return b(e,e=>{e.contentEditable||(t=!1)}),t},get styleEditable(){let t=!0;return b(e,e=>{e.styleEditable||(t=!1)}),t},get locked(){let t=!0;return b(e,e=>{e.locked||(t=!1)}),t}})).actions(e=>({set(t){var{draggable:o,contentEditable:i,styleEditable:s,resizable:a}=t,r=n(t,["draggable","contentEditable","styleEditable","resizable"]);void 0!==o&&b(e,e=>{e.set({draggable:o})}),void 0!==i&&b(e,e=>{e.set({contentEditable:i})}),void 0!==s&&b(e,e=>{e.set({styleEditable:s})}),void 0!==a&&b(e,e=>{e.set({resizable:a})}),Object.assign(e,r)}}));const O={svg:exports.SVGElement,text:exports.TextElement,image:exports.ImageElement,group:exports.GroupElement,line:exports.LineElement};function P({key:e,showCredit:t}={key:"",showCredit:!1}){const o=exports.Store.create();return(0,p.validateKey)(e,t),o}exports.Page=s.types.model("Page",{id:s.types.identifier,children:s.types.array(v),width:s.types.optional(s.types.union(s.types.number,s.types.literal("auto")),"auto"),height:s.types.optional(s.types.union(s.types.number,s.types.literal("auto")),"auto"),background:"white",bleed:0,custom:s.types.frozen(),_exporting:!1}).postProcessSnapshot(e=>{const t=Object.assign({},e),o={};for(var n in t)"_"!==n[0]&&(o[n]=e[n]);return o}).views(e=>({get store(){return(0,s.getParentOfType)(e,exports.Store)},get animatedChildren(){}})).views(e=>({get computedWidth(){return"auto"===e.width?e.store.width:e.width},get computedHeight(){return"auto"===e.height?e.store.height:e.height}})).actions(e=>({toJSON:()=>JSON.parse(JSON.stringify((0,s.getSnapshot)(e))),_forEachElementUp(t,o){const n=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));n.sort((e,t)=>t.index-e.index);for(const{index:i}of n){if(-1==i)continue;const n=i<e.children.length-1&&e.children[i+1],s=t.indexOf(null==n?void 0:n.id)>=0;i===e.children.length-1||s||o(i)}},_forEachElementDown(t,o){const n=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));n.sort((e,t)=>e.index-t.index);for(const{index:i}of n){if(-1==i)continue;const n=i>0&&e.children[i-1],s=t.indexOf(null==n?void 0:n.id)>=0;0===i||s||o(i)}return!1}})).actions(e=>({clone(t={}){const o=e.toJSON();o.children.forEach(e=>{e.id=(0,r.nanoid)(10),b(e,e=>{e.id=(0,r.nanoid)(10)})});const n=Object.assign(Object.assign(Object.assign({},o),{id:(0,r.nanoid)(10)}),t),i=e.store.addPage(n),s=e.store.pages.indexOf(e);i.setZIndex(s+1),i.select()},setZIndex(t){e.store.setPageZIndex(e.id,t)},set(t){Object.assign(e,t)},select(){e.store.selectPage(e.id)},addElement(t){const o=O[t.type];if(!o)return void console.error("Can not find model with type "+t.type);t.children&&t.children.forEach(e=>{e.id=(0,r.nanoid)(10)});const n=o.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.children.push(n),n.selectable&&e.store.selectElements([n.id]),n},canMoveElementsUp(t){let o=!1;return e._forEachElementUp(t,()=>{o=o||!0}),o},moveElementsUp(t){e._forEachElementUp(t,t=>{const o=e.children[t];(0,s.detach)(o),e.children.splice(t+1,0,o)})},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(t){const o=[],n=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)}),e.children.replace(n.concat(o))},canMoveElementsDown(t){let o=!1;return e._forEachElementDown(t,()=>{o=o||!0}),o},moveElementsDown(t){e._forEachElementDown(t,t=>{const o=e.children[t];(0,s.detach)(o),e.children.splice(t-1,0,o)})},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(t){const o=[],n=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)}),e.children.replace(o.concat(n))},setElementZIndex(t,o){const n=e.children.find(e=>e.id===t);n&&((0,s.detach)(n),e.children.remove(n),e.children.splice(o,0,n))},setSize({width:t,height:o},{useMagic:n}){e.width=t,e.height=o}})).actions(e=>({moveElementUp(t){console.warn("page.moveElementUp(id) is deprecated. Please use page.moveElementsUp([id1, id2]) instead."),e.moveElementsUp([t])},moveElementDown(t){console.warn("page.moveElementDown(id) is deprecated. Please use page.moveElementsDown([id1, id2]) instead."),e.moveElementsDown([t])},moveElementTop(t){console.warn("page.moveElementTop(id) is deprecated. Please use page.moveElementsTop([id1, id2]) instead."),e.moveElementsTop([t])},moveElementBottom(t){console.warn("page.moveElementBottom(id) is deprecated. Please use page.moveElementsBottom([id1, id2]) instead."),e.moveElementsBottom([t])}})),exports.Font=s.types.model("Font",{fontFamily:s.types.string,url:s.types.optional(s.types.string,""),styles:s.types.frozen()}).preProcessSnapshot(e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name})),exports.Store=s.types.model("Store",{role:"",pages:s.types.array(exports.Page),fonts:s.types.array(exports.Font),width:1080,height:1080,currentTime:0,scale:1,scaleToFit:1,unit:"px",dpi:72,bleedVisible:!1,rulesVisible:!1,openedSidePanel:"",selectedElementsIds:s.types.array(s.types.string),history:s.types.optional(a.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views(e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map(t=>{for(const o of e.pages)for(const e of o.children)if(e.id===t)return e}).filter(e=>!!e)},get selectedShapes(){const t=[];return e.selectedElementsIds.forEach(o=>{for(const n of e.pages)for(const e of n.children)e.id===o&&"group"!==e.type&&t.push(e),"group"===e.type&&e.id===o&&t.push(...e.children)}),t},get activePage(){return e.pages.slice().find(t=>t.id===e._activePageId)||(e.pages.length?e.pages[0]:null)}})).actions(e=>({afterCreate(){e.history.canUndo},setCurrentTime(t){e.currentTime=t},setUnit({unit:t,dpi:o}){e.unit=t||e.unit,e.dpi=o||e.dpi},setRole(t){e.role=t},getElementById(t){for(const o of e.pages)for(const e of o.children){if(e.id===t)return e;if("group"===e.type){const o=e.children.find(e=>e.id===t);if(o)return o}}},addPage(t){const o=exports.Page.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.pages.push(o),e._activePageId=o.id,o},selectPage(t){e._activePageId=t},selectElements(t){const o=t.map(t=>e.getElementById(t)).sort((e,t)=>e.page.children.indexOf(e)-e.page.children.indexOf(t)).filter(e=>!!e).map(e=>e.id);e.selectedElementsIds=(0,s.cast)(o)},toggleBleed(t){e.bleedVisible=null!=t?t:!e.bleedVisible},toggleRulers(t){e.rulesVisible=null!=t?t:!e.rulesVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,o,n){if(n){const n=t/e.width,i=o/e.height;for(const t of e.pages)for(const e of t.children)e.set({x:e.x*n,y:e.y*i}),"text"===e.type?e.set({fontSize:e.fontSize*n,width:Math.max(e.width*n,2)}):"image"===e.type?e.set({width:e.width*n,height:e.height*i}):"svg"===e.type&&e.set({width:Math.max(e.width*n,2),height:Math.max(e.height*n,2)})}e.width=t,e.height=o},setPageZIndex(t,o){const n=e.pages.find(e=>e.id===t);n&&((0,s.detach)(n),e.pages.remove(n),e.pages.splice(o,0,n))},deletePages(t){const o=e.pages.indexOf(e.activePage);t.forEach(t=>{const o=e.pages.find(e=>e.id===t);(0,s.destroy)(o)});const n=Math.min(e.pages.length-1,o),i=e.pages[n];i&&(e._activePageId=i.id),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},groupElements(t){const o=t.map(t=>e.getElementById(t));o.forEach(e=>{e&&(0,s.detach)(e)});const n=e.activePage,i=exports.GroupElement.create({id:(0,r.nanoid)(10),children:(0,s.cast)(o)});return n.children.push(i),e.selectedElementsIds=(0,s.cast)([i.id]),i},ungroupElements(t){const o=t.map(t=>e.getElementById(t)),n=[];o.forEach(e=>{if(e&&"group"===e.type){const t=e.page,o=t.children.indexOf(e);e.children.forEach(e=>{n.push(e.id)}),e.children.forEach(e=>{(0,s.detach)(e),t.children.push(e)}),t.children.splice(o,1)}}),e.selectedElementsIds=(0,s.cast)(n)},deleteElements(t){t.forEach(t=>{e.pages.forEach(e=>{const o=e.children.find(e=>e.id===t);o&&(0,s.destroy)(o)})}),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},on(t,o){if("change"===t){let t=e.toJSON();return(0,s.onSnapshot)(e,n=>{const i=e.toJSON();!(0,m.deepEqual)(t,i)&&(t=i,o(i))})}},async _toCanvas({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s}={}){var a;const r=t||1;n=n||(null===(a=e.pages[0])||void 0===a?void 0:a.id);const d=e.pages.find(e=>e.id===n);if(!d)throw new Error(`No page for export with id ${n}`);null==d||d.set({_exporting:!0});const c=await(0,f.waitTillAvailable)(()=>l.default.stages.find(e=>e.getAttr("pageId")===n));if(!c)throw new Error(`Export is failed. Can not find stage for page ${n}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);await e.waitLoading();const p=c.findOne(".page-container");c.find("Transformer").forEach(e=>e.visible(!1)),p.find(".page-background").forEach(e=>e.shadowEnabled(!1)),p.find(".page-background").forEach(e=>e.strokeEnabled(!1)),p.find(".highlighter").forEach(e=>e.visible(!1));const g=p.findOne(".page-background-group"),h=g.clip();g.clip({x:null,y:null,width:null,height:null});const u=p.findOne(".elements-container"),m=u.clip();u.clip({x:null,y:null,width:null,height:null});const y=p.find(e=>e.getAttr("hideInExport"));y.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.hide()});const b=p.find(e=>!e.visible()&&e.getAttr("editModeEnabled"));b.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.show()}),o&&p.find(".page-background").forEach(e=>e.hide());const E=s?d.bleed:0;let x=E;e.bleedVisible&&s?x=0:e.bleedVisible&&!s&&(x=-d.bleed);const w=document.createElement("canvas");w.width=(d.computedWidth+2*E)*r,w.height=(d.computedHeight+2*E)*r;const v=w.getContext("2d");"image/jpeg"===i&&(v.fillStyle="white",v.fillRect(0,0,w.width,w.height));const O=p.toCanvas({x:p.x()-x*p.scaleX(),y:p.y()-x*p.scaleY(),width:(d.computedWidth+2*E)*p.scaleX(),height:(d.computedHeight+2*E)*p.scaleY(),pixelRatio:1/p.scaleX()*r});return v.drawImage(O,0,0),l.default.Util.releaseCanvas(O),o&&p.find(".page-background").forEach(e=>e.show()),y.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),b.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),p.find(".page-background").forEach(e=>e.shadowEnabled(!0)),p.find(".page-background").forEach(e=>e.strokeEnabled(!0)),c.find("Transformer").forEach(e=>e.visible(!0)),p.find(".highlighter").forEach(e=>e.visible(!0)),g.clip(h),u.clip(m),null==d||d.set({_exporting:!1}),w},async toDataURL({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s}),d=r.toDataURL(i,a);return l.default.Util.releaseCanvas(r),d},async toBlob({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s}),d=new Promise(e=>{r.toBlob(e,i,a)});return l.default.Util.releaseCanvas(r),d},async saveAsImage(t={}){var{fileName:o}=t,i=n(t,["fileName"]);const s=i.mimeType||"image/png",a=s.split("/")[1];(0,d.downloadFile)(await e.toDataURL(i),o||"polotno."+a,s)},async _toPDF(t){const o=t.dpi||e.dpi,n=t.parallel||1,i=t.unit||("px"===e.unit?"mm":e.unit),s=t.pixelRatio||1,a=t.pageIds||e.pages.map(e=>e.id),r=e.pages.filter(e=>a.includes(e.id)),l=await(0,c.getJsPDF)(),d=e=>(0,u.pxToUnit)({px:e,unit:i,dpi:o}),p=r[0]||{},g=t.includeBleed?p.bleed:0,h=d(p.computedWidth+2*g),m=d(p.computedHeight+2*g);var f=new l({unit:i,orientation:h>m?"landscape":"portrait",format:[h,m],compress:!0,putOnlyUsedFonts:!0});f.deletePage(1);const y=e._elementsPixelRatio;e.setElementsPixelRatio(s),await new Promise(e=>setTimeout(e));const b=((e,t)=>{for(var o=[],n=0;n<e.length;n+=t)o.push(e.slice(n,n+t));return o})(r,n);for(const c of b){const o=c.map(async o=>{const n=t.includeBleed?o.bleed:0,i=d(o.computedWidth+2*n),a=d(o.computedHeight+2*n);let r=0,l=s;for(;r<10;){2===(r+=1)&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const n=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:o.id,pixelRatio:l}));if(n.length>20)return{url:n,width:i,height:a};l*=.8}});(await Promise.all(o)).forEach(({url:e,width:t,height:o})=>{f.addPage([t,o],t>o?"landscape":"portrait"),f.addImage(e,0,0,t,o,void 0,"FAST")})}return e.setElementsPixelRatio(y),f},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpeg"},t))).output("datauristring"),async toHTML(){const t=e.toJSON();return(0,y.jsonToHTML)({json:t})},async saveAsHTML({filename:t}={}){const o=await e.toHTML(),n="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(o)));(0,d.downloadFile)(n,t||"polotno.html")},async saveAsPDF(t={}){var{fileName:o}=t,i=n(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},i))).save(o||"polotno.pdf")},async waitLoading(){await new Promise(e=>setTimeout(e,50)),await(0,h.whenLoaded)()},toJSON:()=>({width:e.width,height:e.height,fonts:(0,s.getSnapshot)(e.fonts),pages:(0,s.getSnapshot)(e.pages),unit:e.unit,dpi:e.dpi}),loadJSON(t,o=!1){var n;const i=Object.assign({},t),a=e.pages.indexOf(e.activePage);let r=null===(n=i.pages[a]||i.pages[0])||void 0===n?void 0:n.id;i._activePageId=r;const l=Object.assign({},(0,s.getSnapshot)(e));Object.assign(l,i),l.history=o?e.history.toJSON():{history:[],undoIdx:-1},(0,s.applySnapshot)(e,l)},addFont(t){e.removeFont(t.fontFamily),e.fonts.push(t),e.loadFont(t.fontFamily)},removeFont(t){e.fonts.filter(e=>e.fontFamily===t).forEach(e=>(0,s.destroy)(e))},async loadFont(t){const o=e.fonts.find(e=>e.fontFamily===t)||g.globalFonts.find(e=>e.fontFamily===t);o?g.injectCustomFont(o):g.injectGoogleFont(t),await g.loadFont(t)}})),exports.createStore=P,exports.default=P;
3283
+ "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,o,n){void 0===n&&(n=o);var i=Object.getOwnPropertyDescriptor(t,o);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,n,i)}:function(e,t,o,n){void 0===n&&(n=o),e[n]=t[o]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(o){if(o&&o.__esModule)return o;var n={};if(null!=o)for(var i in o)"default"!==i&&Object.prototype.hasOwnProperty.call(o,i)&&e(n,o,i);return t(n,o),n},n=this&&this.__rest||function(e,t){var o={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(o[n[i]]=e[n[i]])}return o},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createStore=exports.Store=exports.Font=exports.Page=exports.GroupElement=exports.registerShapeModel=exports.SVGElement=exports.LineElement=exports.ImageElement=exports.TextElement=exports.Element=exports.Node=void 0;const s=require("mobx-state-tree"),a=require("./history"),r=require("nanoid"),l=i(require("konva")),d=require("../utils/download"),c=require("../utils/pdf"),p=require("../utils/validate-key"),g=o(require("../utils/fonts")),h=require("../utils/loader"),u=require("../utils/unit"),m=require("../utils/deep-equal"),f=require("../utils/wait"),b=require("../utils/html");(0,s.setLivelinessChecking)("ignore");const y=(e,t)=>{e.children&&e.children.forEach(e=>{t(e),y(e,t)})};exports.Node=s.types.model("Node",{id:s.types.identifier,type:"none",name:"",opacity:1,animations:s.types.array(s.types.frozen()),custom:s.types.frozen(),visible:!0,selectable:!0,removable:!0,alwaysOnTop:!1,showInExport:!0}).postProcessSnapshot(e=>{const t=Object.assign({},e),o={};for(var n in t)"_"!==n[0]&&(o[n]=e[n]);return o}).views(e=>({get locked(){return!(e.draggable||e.contentEditable||e.styleEditable||e.resizable)},get page(){return(0,s.getParentOfType)(e,exports.Page)},get store(){return(0,s.getParentOfType)(e,exports.Store)},get top(){let t=e;for(;;){if(!(0,s.hasParentOfType)(t,exports.GroupElement))return t;t=(0,s.getParentOfType)(t,exports.GroupElement)}},get parent(){return(0,s.hasParentOfType)(e,exports.GroupElement)?(0,s.getParentOfType)(e,exports.GroupElement):(0,s.hasParentOfType)(e,exports.Page)?(0,s.getParentOfType)(e,exports.Page):(0,s.hasParentOfType)(e,exports.Store)?(0,s.getParentOfType)(e,exports.Store):null}})).actions(e=>({toJSON:()=>Object.assign({},(0,s.getSnapshot)(e))})).actions(e=>({clone(t={}){const o=e.toJSON();return t.id=t.id||(0,r.nanoid)(10),y(o,e=>{e.id=(0,r.nanoid)(10)}),Object.assign(o,t),e.page.addElement(o)},set(t){Object.assign(e,t)},moveUp(){e.page.moveElementsUp([e.id])},moveTop(){e.page.moveElementsTop([e.id])},moveDown(){e.page.moveElementsDown([e.id])},moveBottom(){e.page.moveElementsBottom([e.id])},beforeDestroy(){e.store.history.endTransaction()}})),exports.Element=exports.Node.named("Element").props({x:0,y:0,width:100,height:100,rotation:0,opacity:1,blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,visible:!0,draggable:!0,resizable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot(e=>{const t=Object.assign(Object.assign({},e),{x:e.x||0,y:e.y||0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1,t.resizable=!1),t}).views(e=>({get a(){return e},animated:t=>e[t]})),exports.TextElement=exports.Element.named("Text").props({type:"text",text:"",placeholder:"",fontSize:14,fontFamily:"Roboto",fontStyle:"normal",fontWeight:"normal",textDecoration:"",fill:"black",align:"center",width:100,height:0,verticalAlign:"top",strokeWidth:0,stroke:"black",lineHeight:s.types.optional(s.types.union(s.types.number,s.types.string),1.2),letterSpacing:0,_editModeEnabled:!1,backgroundEnabled:!1,backgroundColor:"#7ED321",backgroundOpacity:1,backgroundCornerRadius:.5,backgroundPadding:.5}).preProcessSnapshot(e=>Object.assign({},e)).actions(e=>({toggleEditMode(t){e._editModeEnabled=null!=t?t:!e._editModeEnabled,e._editModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction()}})),exports.ImageElement=exports.Element.named("Image").props({type:"image",width:100,height:100,src:"",cropX:0,cropY:0,cropWidth:1,cropHeight:1,cornerRadius:0,flipX:!1,flipY:!1,clipSrc:"",borderColor:"black",borderSize:0,keepRatio:!1,_cropModeEnabled:!1}).actions(e=>({toggleCropMode(t){e._cropModeEnabled=null!=t?t:!e._cropModeEnabled,e._cropModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction()}})),exports.LineElement=exports.Element.named("Line").props({type:"line",width:400,height:10,color:"black",dash:s.types.array(s.types.number),startHead:"",endHead:""}).actions(e=>({})),exports.SVGElement=exports.Element.named("SVG").props({type:"svg",src:"",maskSrc:"",cropX:0,cropY:0,cropWidth:1,cropHeight:1,keepRatio:!0,flipX:!1,flipY:!1,width:100,height:100,borderColor:"black",borderSize:0,cornerRadius:0,colorsReplace:s.types.map(s.types.string)}).preProcessSnapshot(e=>Object.assign(Object.assign({},e),{src:e.src||e.svgSource})).actions(e=>({replaceColor(t,o){e.colorsReplace.set(t,o)}}));const E=[];function x(e){const t=e.type;if(!t)throw new Error('You must pass "type" attribute to custom model.');const o=exports.Element.named(t).props(e);O[t]=o,E.push(o)}exports.registerShapeModel=x;const w=[...new Array(20)].map((e,t)=>s.types.late(()=>E[t])),v=s.types.union({dispatcher:e=>{const t=O[e.type];if(!t)throw new Error(`Unknown element type: "${e.type}"`);return t}},exports.SVGElement,exports.TextElement,exports.ImageElement,exports.LineElement,s.types.late(()=>exports.GroupElement),...w);exports.GroupElement=exports.Node.named("Group").props({type:"group",children:s.types.array(v)}).views(e=>({get draggable(){let t=!0;return y(e,e=>{e.draggable||(t=!1)}),t},get resizable(){let t=!0;return y(e,e=>{e.resizable||(t=!1)}),t},get contentEditable(){let t=!0;return y(e,e=>{e.contentEditable||(t=!1)}),t},get styleEditable(){let t=!0;return y(e,e=>{e.styleEditable||(t=!1)}),t},get locked(){let t=!0;return y(e,e=>{e.locked||(t=!1)}),t}})).actions(e=>({set(t){var{draggable:o,contentEditable:i,styleEditable:s,resizable:a}=t,r=n(t,["draggable","contentEditable","styleEditable","resizable"]);void 0!==o&&y(e,e=>{e.set({draggable:o})}),void 0!==i&&y(e,e=>{e.set({contentEditable:i})}),void 0!==s&&y(e,e=>{e.set({styleEditable:s})}),void 0!==a&&y(e,e=>{e.set({resizable:a})}),Object.assign(e,r)}}));const O={svg:exports.SVGElement,text:exports.TextElement,image:exports.ImageElement,group:exports.GroupElement,line:exports.LineElement};function P({key:e,showCredit:t}={key:"",showCredit:!1}){const o=exports.Store.create();return(0,p.validateKey)(e,t),o}exports.Page=s.types.model("Page",{id:s.types.identifier,children:s.types.array(v),width:s.types.optional(s.types.union(s.types.number,s.types.literal("auto")),"auto"),height:s.types.optional(s.types.union(s.types.number,s.types.literal("auto")),"auto"),background:"white",bleed:0,custom:s.types.frozen(),_exporting:!1}).postProcessSnapshot(e=>{const t=Object.assign({},e),o={};for(var n in t)"_"!==n[0]&&(o[n]=e[n]);return o}).views(e=>({get store(){return(0,s.getParentOfType)(e,exports.Store)},get animatedChildren(){}})).views(e=>({get computedWidth(){return"auto"===e.width?e.store.width:e.width},get computedHeight(){return"auto"===e.height?e.store.height:e.height}})).actions(e=>({toJSON:()=>JSON.parse(JSON.stringify((0,s.getSnapshot)(e))),_forEachElementUp(t,o){const n=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));n.sort((e,t)=>t.index-e.index);for(const{index:i}of n){if(-1==i)continue;const n=i<e.children.length-1&&e.children[i+1],s=t.indexOf(null==n?void 0:n.id)>=0;i===e.children.length-1||s||o(i)}},_forEachElementDown(t,o){const n=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));n.sort((e,t)=>e.index-t.index);for(const{index:i}of n){if(-1==i)continue;const n=i>0&&e.children[i-1],s=t.indexOf(null==n?void 0:n.id)>=0;0===i||s||o(i)}return!1}})).actions(e=>({clone(t={}){const o=e.toJSON();o.children.forEach(e=>{e.id=(0,r.nanoid)(10),y(e,e=>{e.id=(0,r.nanoid)(10)})});const n=Object.assign(Object.assign(Object.assign({},o),{id:(0,r.nanoid)(10)}),t),i=e.store.addPage(n),s=e.store.pages.indexOf(e);i.setZIndex(s+1),i.select()},setZIndex(t){e.store.setPageZIndex(e.id,t)},set(t){Object.assign(e,t)},select(){e.store.selectPage(e.id)},addElement(t){const o=O[t.type];if(!o)return void console.error("Can not find model with type "+t.type);t.children&&t.children.forEach(e=>{e.id=(0,r.nanoid)(10)});const n=o.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.children.push(n),n.selectable&&e.store.selectElements([n.id]),n},canMoveElementsUp(t){let o=!1;return e._forEachElementUp(t,()=>{o=o||!0}),o},moveElementsUp(t){e._forEachElementUp(t,t=>{const o=e.children[t];(0,s.detach)(o),e.children.splice(t+1,0,o)})},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(t){const o=[],n=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)}),e.children.replace(n.concat(o))},canMoveElementsDown(t){let o=!1;return e._forEachElementDown(t,()=>{o=o||!0}),o},moveElementsDown(t){e._forEachElementDown(t,t=>{const o=e.children[t];(0,s.detach)(o),e.children.splice(t-1,0,o)})},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(t){const o=[],n=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)}),e.children.replace(o.concat(n))},setElementZIndex(t,o){const n=e.children.find(e=>e.id===t);n&&((0,s.detach)(n),e.children.remove(n),e.children.splice(o,0,n))},setSize({width:t,height:o,useMagic:n,softChange:i}){if(n){const n=t/e.computedWidth,i=o/e.computedHeight;for(const t of e.children)t.set({x:t.x*n,y:t.y*i}),"text"===t.type?t.set({fontSize:t.fontSize*n,width:Math.max(t.width*n,2)}):"image"===t.type?t.set({width:t.width*n,height:t.height*i}):"svg"===t.type&&t.set({width:Math.max(t.width*n,2),height:Math.max(t.height*n,2)})}"auto"!==e.width||i||(e.width=t),"auto"!==e.height||i||(e.height=o)}})).actions(e=>({moveElementUp(t){console.warn("page.moveElementUp(id) is deprecated. Please use page.moveElementsUp([id1, id2]) instead."),e.moveElementsUp([t])},moveElementDown(t){console.warn("page.moveElementDown(id) is deprecated. Please use page.moveElementsDown([id1, id2]) instead."),e.moveElementsDown([t])},moveElementTop(t){console.warn("page.moveElementTop(id) is deprecated. Please use page.moveElementsTop([id1, id2]) instead."),e.moveElementsTop([t])},moveElementBottom(t){console.warn("page.moveElementBottom(id) is deprecated. Please use page.moveElementsBottom([id1, id2]) instead."),e.moveElementsBottom([t])}})),exports.Font=s.types.model("Font",{fontFamily:s.types.string,url:s.types.optional(s.types.string,""),styles:s.types.frozen()}).preProcessSnapshot(e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name})),exports.Store=s.types.model("Store",{role:"",pages:s.types.array(exports.Page),fonts:s.types.array(exports.Font),width:1080,height:1080,currentTime:0,scale:1,scaleToFit:1,unit:"px",dpi:72,bleedVisible:!1,rulesVisible:!1,openedSidePanel:"",selectedElementsIds:s.types.array(s.types.string),history:s.types.optional(a.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views(e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map(t=>{for(const o of e.pages)for(const e of o.children)if(e.id===t)return e}).filter(e=>!!e)},get selectedShapes(){const t=[];return e.selectedElementsIds.forEach(o=>{for(const n of e.pages)for(const e of n.children)e.id===o&&"group"!==e.type&&t.push(e),"group"===e.type&&e.id===o&&t.push(...e.children)}),t},get activePage(){return e.pages.slice().find(t=>t.id===e._activePageId)||(e.pages.length?e.pages[0]:null)}})).actions(e=>({afterCreate(){e.history.canUndo},setCurrentTime(t){e.currentTime=t},setUnit({unit:t,dpi:o}){e.unit=t||e.unit,e.dpi=o||e.dpi},setRole(t){e.role=t},find(t){let o;return y({children:e.pages},e=>{!o&&t(e)&&(o=e)}),o},getElementById:t=>e.find(e=>e.id===t),addPage(t){const o=exports.Page.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.pages.push(o),e._activePageId=o.id,o},selectPage(t){e._activePageId=t},selectElements(t){const o=t.map(t=>e.getElementById(t)).sort((e,t)=>e.page.children.indexOf(e)-e.page.children.indexOf(t)).filter(e=>!!e).map(e=>e.id);e.selectedElementsIds=(0,s.cast)(o)},toggleBleed(t){e.bleedVisible=null!=t?t:!e.bleedVisible},toggleRulers(t){e.rulesVisible=null!=t?t:!e.rulesVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,o,n){e.pages.forEach(e=>{e.setSize({width:t,height:o,useMagic:n,softChange:!0})}),e.width=t,e.height=o},setPageZIndex(t,o){const n=e.pages.find(e=>e.id===t);n&&((0,s.detach)(n),e.pages.remove(n),e.pages.splice(o,0,n))},deletePages(t){const o=e.pages.indexOf(e.activePage);t.forEach(t=>{const o=e.pages.find(e=>e.id===t);(0,s.destroy)(o)});const n=Math.min(e.pages.length-1,o),i=e.pages[n];i&&(e._activePageId=i.id),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},groupElements(t){const o=t.map(t=>e.getElementById(t));o.forEach(e=>{e&&(0,s.detach)(e)});const n=e.activePage,i=exports.GroupElement.create({id:(0,r.nanoid)(10),children:(0,s.cast)(o)});return n.children.push(i),e.selectedElementsIds=(0,s.cast)([i.id]),i},ungroupElements(t){const o=t.map(t=>e.getElementById(t)),n=[];o.forEach(e=>{if(e&&"group"===e.type){const t=e.page,o=t.children.indexOf(e);e.children.forEach(e=>{n.push(e.id)}),e.children.forEach(e=>{(0,s.detach)(e),t.children.push(e)}),t.children.splice(o,1)}}),e.selectedElementsIds=(0,s.cast)(n)},deleteElements(t){t.forEach(t=>{e.pages.forEach(e=>{const o=e.children.find(e=>e.id===t);o&&(0,s.destroy)(o)})}),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},on(t,o){if("change"===t){let t=e.toJSON();return(0,s.onSnapshot)(e,n=>{const i=e.toJSON();!(0,m.deepEqual)(t,i)&&(t=i,o(i))})}},async _toCanvas({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s}={}){var a;const r=t||1;n=n||(null===(a=e.pages[0])||void 0===a?void 0:a.id);const d=e.pages.find(e=>e.id===n);if(!d)throw new Error(`No page for export with id ${n}`);null==d||d.set({_exporting:!0});const c=await(0,f.waitTillAvailable)(()=>l.default.stages.find(e=>e.getAttr("pageId")===n));if(!c)throw new Error(`Export is failed. Can not find stage for page ${n}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);await e.waitLoading();const p=c.findOne(".page-container");c.find("Transformer").forEach(e=>e.visible(!1)),p.find(".page-background").forEach(e=>e.shadowEnabled(!1)),p.find(".page-background").forEach(e=>e.strokeEnabled(!1)),p.find(".highlighter").forEach(e=>e.visible(!1));const g=p.findOne(".page-background-group"),h=g.clip();g.clip({x:null,y:null,width:null,height:null});const u=p.findOne(".elements-container"),m=u.clip();u.clip({x:null,y:null,width:null,height:null});const b=p.find(e=>e.getAttr("hideInExport"));b.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.hide()});const y=p.find(e=>!e.visible()&&e.getAttr("editModeEnabled"));y.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.show()}),o&&p.find(".page-background").forEach(e=>e.hide());const E=s?d.bleed:0;let x=E;e.bleedVisible&&s?x=0:e.bleedVisible&&!s&&(x=-d.bleed);const w=document.createElement("canvas");w.width=(d.computedWidth+2*E)*r,w.height=(d.computedHeight+2*E)*r;const v=w.getContext("2d");"image/jpeg"===i&&(v.fillStyle="white",v.fillRect(0,0,w.width,w.height));const O=p.toCanvas({x:p.x()-x*p.scaleX(),y:p.y()-x*p.scaleY(),width:(d.computedWidth+2*E)*p.scaleX(),height:(d.computedHeight+2*E)*p.scaleY(),pixelRatio:1/p.scaleX()*r});return v.drawImage(O,0,0),l.default.Util.releaseCanvas(O),o&&p.find(".page-background").forEach(e=>e.show()),b.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),y.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),p.find(".page-background").forEach(e=>e.shadowEnabled(!0)),p.find(".page-background").forEach(e=>e.strokeEnabled(!0)),c.find("Transformer").forEach(e=>e.visible(!0)),p.find(".highlighter").forEach(e=>e.visible(!0)),g.clip(h),u.clip(m),null==d||d.set({_exporting:!1}),w},async toDataURL({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s}),d=r.toDataURL(i,a);return l.default.Util.releaseCanvas(r),d},async toBlob({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:i,includeBleed:s}),d=new Promise(e=>{r.toBlob(e,i,a)});return l.default.Util.releaseCanvas(r),d},async saveAsImage(t={}){var{fileName:o}=t,i=n(t,["fileName"]);const s=i.mimeType||"image/png",a=s.split("/")[1];(0,d.downloadFile)(await e.toDataURL(i),o||"polotno."+a,s)},async _toPDF(t){const o=t.dpi||e.dpi,n=t.parallel||1,i=t.unit||("px"===e.unit?"mm":e.unit),s=t.pixelRatio||1,a=t.pageIds||e.pages.map(e=>e.id),r=e.pages.filter(e=>a.includes(e.id)),l=await(0,c.getJsPDF)(),d=e=>(0,u.pxToUnit)({px:e,unit:i,dpi:o}),p=r[0]||{},g=t.includeBleed?p.bleed:0,h=d(p.computedWidth+2*g),m=d(p.computedHeight+2*g);var f=new l({unit:i,orientation:h>m?"landscape":"portrait",format:[h,m],compress:!0,putOnlyUsedFonts:!0});f.deletePage(1);const b=e._elementsPixelRatio;e.setElementsPixelRatio(s),await new Promise(e=>setTimeout(e));const y=((e,t)=>{for(var o=[],n=0;n<e.length;n+=t)o.push(e.slice(n,n+t));return o})(r,n);for(const c of y){const o=c.map(async o=>{const n=t.includeBleed?o.bleed:0,i=d(o.computedWidth+2*n),a=d(o.computedHeight+2*n);let r=0,l=s;for(;r<10;){2===(r+=1)&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const n=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:o.id,pixelRatio:l}));if(n.length>20)return{url:n,width:i,height:a};l*=.8}});(await Promise.all(o)).forEach(({url:e,width:t,height:o})=>{f.addPage([t,o],t>o?"landscape":"portrait"),f.addImage(e,0,0,t,o,void 0,"FAST")})}return e.setElementsPixelRatio(b),f},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpeg"},t))).output("datauristring"),async toHTML(){const t=e.toJSON();return(0,b.jsonToHTML)({json:t})},async saveAsHTML({filename:t}={}){const o=await e.toHTML(),n="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(o)));(0,d.downloadFile)(n,t||"polotno.html")},async saveAsPDF(t={}){var{fileName:o}=t,i=n(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},i))).save(o||"polotno.pdf")},async waitLoading(){await new Promise(e=>setTimeout(e,50)),await(0,h.whenLoaded)()},toJSON:()=>({width:e.width,height:e.height,fonts:(0,s.getSnapshot)(e.fonts),pages:(0,s.getSnapshot)(e.pages),unit:e.unit,dpi:e.dpi}),loadJSON(t,o=!1){var n;const i=Object.assign({},t),a=e.pages.indexOf(e.activePage);let r=null===(n=i.pages[a]||i.pages[0])||void 0===n?void 0:n.id;i._activePageId=r;const l=Object.assign({},(0,s.getSnapshot)(e));Object.assign(l,i),l.history=o?e.history.toJSON():{history:[],undoIdx:-1},(0,s.applySnapshot)(e,l)},addFont(t){e.removeFont(t.fontFamily),e.fonts.push(t),e.loadFont(t.fontFamily)},removeFont(t){e.fonts.filter(e=>e.fontFamily===t).forEach(e=>(0,s.destroy)(e))},async loadFont(t){const o=e.fonts.find(e=>e.fontFamily===t)||g.globalFonts.find(e=>e.fontFamily===t);o?g.injectCustomFont(o):g.injectGoogleFont(t),await g.loadFont(t)}})),exports.createStore=P,exports.default=P;
3284
3284
  },{"mobx-state-tree":"pk4v","./history":"X9z9","nanoid":"iDyL","konva":"aTGn","../utils/download":"HWHW","../utils/pdf":"sptl","../utils/validate-key":"zree","../utils/fonts":"XXLd","../utils/loader":"bN4e","../utils/unit":"BUt3","../utils/deep-equal":"lHx4","../utils/wait":"uddG","../utils/html":"YsBD"}],"oiQN":[function(require,module,exports) {
3285
3285
  "use strict";async function e(e){return new Promise((o,r)=>{const t=new FileReader;t.readAsDataURL(e),t.onload=(()=>o(t.result)),t.onerror=(e=>r(e))})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.localFileToURL=void 0,exports.localFileToURL=e;
3286
3286
  },{}],"Tz78":[function(require,module,exports) {
@@ -4171,13 +4171,13 @@ var r=require("../lib").GenIcon;module.exports=function(t){return r({tag:"svg",a
4171
4171
  },{"../lib":"Lx0v"}],"HZV1":[function(require,module,exports) {
4172
4172
  var t=require("../lib").GenIcon;module.exports=function(r){return t({tag:"svg",attr:{version:"1.1",id:"mdi-format-vertical-align-bottom",viewBox:"0 0 24 24",fill:"currentColor"},child:[{tag:"path",attr:{d:"M16,13H13V3H11V13H8L12,17L16,13M4,19V21H20V19H4Z"}}]})(r)};
4173
4173
  },{"../lib":"Lx0v"}],"LDge":[function(require,module,exports) {
4174
- "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TextToolbar=exports.SpacingInput=exports.FontColorInput=exports.FontStyleGroup=exports.FontSizeInput=exports.FontFamilyInput=void 0;const t=e(require("react")),n=require("mobx-react-lite"),l=require("@blueprintjs/core"),o=require("@blueprintjs/popover2"),i=require("react-window"),a=e(require("swr")),r=require("../utils/fonts"),s=require("../utils/api"),c=require("../utils/use-api"),u=e(require("./color-picker")),d=e(require("./filters-picker")),f=require("./element-container"),m=e(require("@meronex/icons/mdc/MdcFormatLineSpacing")),h=e(require("../utils/styled")),p=e(require("@meronex/icons/mdc/MdcFormatVerticalAlignTop")),x=e(require("@meronex/icons/mdc/MdcFormatVerticalAlignCenter")),g=e(require("@meronex/icons/mdc/MdcFormatVerticalAlignBottom")),F=require("../utils/l10n"),E=require("../utils/flags"),y=(0,h.default)("img")`
4174
+ "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TextToolbar=exports.SpacingInput=exports.FontColorInput=exports.FontStyleGroup=exports.FontSizeInput=exports.FontFamilyInput=void 0;const t=e(require("react")),n=require("mobx-react-lite"),l=require("@blueprintjs/core"),o=require("@blueprintjs/popover2"),i=require("react-window"),a=e(require("swr")),r=require("../utils/fonts"),s=require("../utils/api"),c=require("../utils/use-api"),u=e(require("./color-picker")),d=e(require("./filters-picker")),f=require("./element-container"),m=e(require("@meronex/icons/mdc/MdcFormatLineSpacing")),p=e(require("../utils/styled")),h=e(require("@meronex/icons/mdc/MdcFormatVerticalAlignTop")),x=e(require("@meronex/icons/mdc/MdcFormatVerticalAlignCenter")),g=e(require("@meronex/icons/mdc/MdcFormatVerticalAlignBottom")),F=require("../utils/l10n"),E=require("../utils/flags"),y=(0,p.default)("img")`
4175
4175
  height: 20px;
4176
4176
 
4177
4177
  .bp4-dark & {
4178
4178
  filter: invert(1);
4179
4179
  }
4180
- `,S=(0,r.getFontsList)(),v=({fontFamily:e,handleClick:n,modifiers:o,store:i,isCustom:a})=>{const[r,c]=t.default.useState(!a);t.default.useEffect(()=>{r||i.loadFont(e)},[e,r]);const u=r?t.default.createElement(y,{src:(0,s.getGoogleFontImage)(e),alt:e,onError:()=>{c(!1)}}):e;return t.default.createElement(l.MenuItem,{text:u,active:o.active,disabled:o.disabled,onClick:n,style:{fontFamily:'"'+e+'"'}})},b=({onChange:e,defaultValue:n})=>{const o=t.default.useRef(null);return t.default.useEffect(()=>{o.current&&o.current.focus()},[]),t.default.createElement(l.InputGroup,{leftIcon:"search",inputRef:o,defaultValue:n,onChange:t=>e(t.target.value)})},T=({store:e,fonts:n,activeFont:a,activeFontLabel:s,onFontSelect:c})=>{const[u,d]=t.default.useState(""),f=n.filter(e=>e.toLowerCase().indexOf(u.toLowerCase())>=0);return t.default.createElement(o.Popover2,{content:t.default.createElement("div",null,t.default.createElement(b,{onChange:e=>d(e),defaultValue:u}),t.default.createElement("div",{style:{paddingTop:"5px"}},t.default.createElement(i.FixedSizeList,{innerElementType:t.default.forwardRef((e,n)=>t.default.createElement(l.Menu,Object.assign({ref:n},e))),height:Math.min(400,30*f.length)+10,width:210,itemCount:f.length,itemSize:30,children:({index:n,style:l})=>{const o=f[n];return t.default.createElement("div",{style:l},t.default.createElement(v,{key:o,fontFamily:o,modifiers:{active:a===o},handleClick:()=>c(o),store:e,isCustom:e.fonts.find(e=>e.fontFamily===o)||r.globalFonts.find(e=>e.fontFamily===o)}))}})))},t.default.createElement(l.Button,{text:s,rightIcon:"caret-down",minimal:!0,style:{marginRight:"5px",fontFamily:'"'+a+'"',overflow:"hidden",whiteSpace:"nowrap",maxHeight:"30px"}}))};exports.FontFamilyInput=(0,n.observer)(({elements:e,store:n})=>{const{data:l,mutate:o}=(0,a.default)((0,s.getGoogleFontsListAPI)(),c.fetcher,{isPaused:()=>(0,r.isGoogleFontChanged)(),fallbackData:[]});t.default.useEffect(()=>{o()},[(0,r.isGoogleFontChanged)()]);const i=n.fonts.concat(r.globalFonts).map(e=>e.fontFamily).concat((null==l?void 0:l.length)&&!(0,r.isGoogleFontChanged)()?l:S);let u=e[0].fontFamily;return u.length>15&&(u=u.slice(0,15)+"..."),t.default.createElement(T,{fonts:i,activeFont:e[0].fontFamily,activeFontLabel:u,store:n,onFontSelect:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({fontFamily:t})})})}})}),exports.FontSizeInput=(0,n.observer)(({elements:e,store:n})=>t.default.createElement(l.NumericInput,{onValueChange:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({fontSize:t,width:Math.max(t,e.width)})})})},value:Math.round(e[0].fontSize),style:{width:"50px"},min:5,max:4*n.height}));const C=["left","center","right","justify"],I=["top","middle","bottom"],q={top:t.default.createElement(p.default,null),middle:t.default.createElement(x.default,null),bottom:t.default.createElement(g.default,null)};exports.FontStyleGroup=(0,n.observer)(({elements:e,store:n})=>{const o=e[0];return t.default.createElement(l.ButtonGroup,null,t.default.createElement(l.Button,{minimal:!0,icon:"align-"+o.align,onClick:()=>{const t=(C.indexOf(o.align)+1+C.length)%C.length,l=C[t];n.history.transaction(()=>{e.forEach(e=>{e.set({align:l})})})}}),E.flags.textVerticalResizeEnabled&&t.default.createElement(l.Button,{minimal:!0,icon:q[o.verticalAlign],onClick:()=>{const t=(I.indexOf(o.verticalAlign)+1+I.length)%I.length,l=I[t];n.history.transaction(()=>{e.forEach(e=>{e.set({verticalAlign:l})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"bold",active:"bold"===o.fontWeight||"700"===o.fontWeight,onClick:()=>{const t="bold"===o.fontWeight||"700"===o.fontWeight;n.history.transaction(()=>{e.forEach(e=>{t?e.set({fontWeight:"normal"}):e.set({fontWeight:"bold"})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"italic",active:"italic"===o.fontStyle,onClick:()=>{const t="italic"===o.fontStyle;n.history.transaction(()=>{e.forEach(e=>{t?e.set({fontStyle:"normal"}):e.set({fontStyle:"italic"})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"underline",active:o.textDecoration.indexOf("underline")>=0,onClick:()=>{let t=o.textDecoration.split(" ");t.indexOf("underline")>=0?t=t.filter(e=>"underline"!==e):t.push("underline"),n.history.transaction(()=>{e.forEach(e=>{e.set({textDecoration:t.join(" ")})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"strikethrough",active:o.textDecoration.indexOf("line-through")>=0,onClick:()=>{let t=o.textDecoration.split(" ");t.indexOf("line-through")>=0?t=t.filter(e=>"line-through"!==e):t.push("line-through"),n.history.transaction(()=>{e.forEach(e=>{e.set({textDecoration:t.join(" ")})})})}}))}),exports.FontColorInput=(0,n.observer)(({elements:e,store:n})=>t.default.createElement(u.default,{value:e[0].fill,style:{marginRight:"5px"},gradientEnabled:!0,onChange:t=>n.history.transaction(()=>{e.forEach(e=>{e.set({fill:t})})}),store:n})),exports.SpacingInput=(0,n.observer)(({elements:e,store:n})=>{const i=e[0];return t.default.createElement(o.Popover2,{content:t.default.createElement("div",{style:{padding:"15px 25px",width:"200px"}},t.default.createElement("p",null,(0,F.t)("toolbar.lineHeight")),t.default.createElement(l.Slider,{value:"number"==typeof i.lineHeight?100*i.lineHeight:120,labelStepSize:50,onChange:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({lineHeight:t/100})})})},min:50,max:250,stepSize:10,showTrackFill:!0}),t.default.createElement("p",null,(0,F.t)("toolbar.letterSpacing")),t.default.createElement(l.Slider,{value:100*i.letterSpacing,labelStepSize:50,onChange:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({letterSpacing:t/100})})})},min:-50,max:250,stepSize:10,showTrackFill:!1})),position:l.Position.BOTTOM},t.default.createElement(l.Button,{icon:t.default.createElement(m.default,{className:"bp4-icon",style:{fontSize:"20px"}}),minimal:!0}))});const k={TextFontFamily:exports.FontFamilyInput,TextFontSize:exports.FontSizeInput,TextFontVariant:exports.FontStyleGroup,TextFilters:d.default,TextFill:exports.FontColorInput,TextSpacing:exports.SpacingInput};exports.TextToolbar=(0,n.observer)(({store:e,hideTextFontFamily:n,hideTextEffects:l,hideTextSpacing:o,hideTextBold:i,hideTextItalic:a,hideTextUnderline:r,components:s})=>{const c=e.selectedElements,u=["TextFill",!n&&"TextFontFamily","TextFontSize","TextFontVariant",!o&&"TextSpacing",!l&&"TextFilters"].filter(e=>!!e),d=(0,f.extendToolbar)({type:"text",usedItems:u,components:s});return t.default.createElement(f.ElementContainer,{items:d,itemRender:n=>{const l=s[n]||k[n];return t.default.createElement(l,{elements:c,element:c[0],store:e,key:n,hideTextBold:i,hideTextItalic:a,hideTextUnderline:r})}})}),exports.default=exports.TextToolbar;
4180
+ `,b=(0,r.getFontsList)(),S=({fontFamily:e,handleClick:n,modifiers:o,store:i,isCustom:a})=>{const[r,c]=t.default.useState(!a);t.default.useEffect(()=>{r||i.loadFont(e)},[e,r]);const u=r?t.default.createElement(y,{src:(0,s.getGoogleFontImage)(e),alt:e,onError:()=>{c(!1)}}):e;return t.default.createElement(l.MenuItem,{text:u,active:o.active,disabled:o.disabled,onClick:n,style:{fontFamily:'"'+e+'"'}})},v=({onChange:e,defaultValue:n})=>{const o=t.default.useRef(null);return t.default.useEffect(()=>{o.current&&o.current.focus()},[]),t.default.createElement(l.InputGroup,{leftIcon:"search",inputRef:o,defaultValue:n,onChange:t=>e(t.target.value)})},T=({store:e,fonts:n,activeFont:a,activeFontLabel:s,onFontSelect:c})=>{const[u,d]=t.default.useState(""),f=n.filter(e=>e.toLowerCase().indexOf(u.toLowerCase())>=0);return t.default.createElement(o.Popover2,{content:t.default.createElement("div",null,t.default.createElement(v,{onChange:e=>d(e),defaultValue:u}),t.default.createElement("div",{style:{paddingTop:"5px"}},t.default.createElement(i.FixedSizeList,{innerElementType:t.default.forwardRef((e,n)=>t.default.createElement(l.Menu,Object.assign({ref:n},e))),height:Math.min(400,30*f.length)+10,width:210,itemCount:f.length,itemSize:30,children:({index:n,style:l})=>{const o=f[n];return t.default.createElement("div",{style:l},t.default.createElement(S,{key:o,fontFamily:o,modifiers:{active:a===o},handleClick:()=>c(o),store:e,isCustom:e.fonts.find(e=>e.fontFamily===o)||r.globalFonts.find(e=>e.fontFamily===o)}))}})))},t.default.createElement(l.Button,{text:s,rightIcon:"caret-down",minimal:!0,style:{marginRight:"5px",fontFamily:'"'+a+'"',overflow:"hidden",whiteSpace:"nowrap",maxHeight:"30px"}}))};exports.FontFamilyInput=(0,n.observer)(({elements:e,store:n})=>{const{data:l,mutate:o}=(0,a.default)((0,s.getGoogleFontsListAPI)(),c.fetcher,{isPaused:()=>(0,r.isGoogleFontChanged)(),fallbackData:[]});t.default.useEffect(()=>{o()},[(0,r.isGoogleFontChanged)()]);const i=n.fonts.concat(r.globalFonts).map(e=>e.fontFamily).concat((null==l?void 0:l.length)&&!(0,r.isGoogleFontChanged)()?l:b);let u=e[0].fontFamily;return u.length>15&&(u=u.slice(0,15)+"..."),t.default.createElement(T,{fonts:i,activeFont:e[0].fontFamily,activeFontLabel:u,store:n,onFontSelect:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({fontFamily:t})})})}})}),exports.FontSizeInput=(0,n.observer)(({elements:e,store:n})=>t.default.createElement(l.NumericInput,{onValueChange:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({fontSize:t,width:Math.max(t,e.width)})})})},value:Math.round(e[0].fontSize),style:{width:"50px"},min:5,max:4*n.height}));const C=["left","center","right","justify"],I=["top","middle","bottom"],q={top:t.default.createElement("span",{className:"bp4-icon"},t.default.createElement(h.default,null)),middle:t.default.createElement("span",{className:"bp4-icon"},t.default.createElement(x.default,null)),bottom:t.default.createElement("span",{className:"bp4-icon"},t.default.createElement(g.default,null))};exports.FontStyleGroup=(0,n.observer)(({elements:e,store:n})=>{const o=e[0];return t.default.createElement(l.ButtonGroup,null,t.default.createElement(l.Button,{minimal:!0,icon:"align-"+o.align,onClick:()=>{const t=(C.indexOf(o.align)+1+C.length)%C.length,l=C[t];n.history.transaction(()=>{e.forEach(e=>{e.set({align:l})})})}}),E.flags.textVerticalResizeEnabled&&t.default.createElement(l.Button,{minimal:!0,icon:q[o.verticalAlign],onClick:()=>{const t=(I.indexOf(o.verticalAlign)+1+I.length)%I.length,l=I[t];n.history.transaction(()=>{e.forEach(e=>{e.set({verticalAlign:l})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"bold",active:"bold"===o.fontWeight||"700"===o.fontWeight,onClick:()=>{const t="bold"===o.fontWeight||"700"===o.fontWeight;n.history.transaction(()=>{e.forEach(e=>{t?e.set({fontWeight:"normal"}):e.set({fontWeight:"bold"})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"italic",active:"italic"===o.fontStyle,onClick:()=>{const t="italic"===o.fontStyle;n.history.transaction(()=>{e.forEach(e=>{t?e.set({fontStyle:"normal"}):e.set({fontStyle:"italic"})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"underline",active:o.textDecoration.indexOf("underline")>=0,onClick:()=>{let t=o.textDecoration.split(" ");t.indexOf("underline")>=0?t=t.filter(e=>"underline"!==e):t.push("underline"),n.history.transaction(()=>{e.forEach(e=>{e.set({textDecoration:t.join(" ")})})})}}),t.default.createElement(l.Button,{minimal:!0,icon:"strikethrough",active:o.textDecoration.indexOf("line-through")>=0,onClick:()=>{let t=o.textDecoration.split(" ");t.indexOf("line-through")>=0?t=t.filter(e=>"line-through"!==e):t.push("line-through"),n.history.transaction(()=>{e.forEach(e=>{e.set({textDecoration:t.join(" ")})})})}}))}),exports.FontColorInput=(0,n.observer)(({elements:e,store:n})=>t.default.createElement(u.default,{value:e[0].fill,style:{marginRight:"5px"},gradientEnabled:!0,onChange:t=>n.history.transaction(()=>{e.forEach(e=>{e.set({fill:t})})}),store:n})),exports.SpacingInput=(0,n.observer)(({elements:e,store:n})=>{const i=e[0];return t.default.createElement(o.Popover2,{content:t.default.createElement("div",{style:{padding:"15px 25px",width:"200px"}},t.default.createElement("p",null,(0,F.t)("toolbar.lineHeight")),t.default.createElement(l.Slider,{value:"number"==typeof i.lineHeight?100*i.lineHeight:120,labelStepSize:50,onChange:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({lineHeight:t/100})})})},min:50,max:250,stepSize:10,showTrackFill:!0}),t.default.createElement("p",null,(0,F.t)("toolbar.letterSpacing")),t.default.createElement(l.Slider,{value:100*i.letterSpacing,labelStepSize:50,onChange:t=>{n.history.transaction(()=>{e.forEach(e=>{e.set({letterSpacing:t/100})})})},min:-50,max:250,stepSize:10,showTrackFill:!1})),position:l.Position.BOTTOM},t.default.createElement(l.Button,{icon:t.default.createElement(m.default,{className:"bp4-icon",style:{fontSize:"20px"}}),minimal:!0}))});const k={TextFontFamily:exports.FontFamilyInput,TextFontSize:exports.FontSizeInput,TextFontVariant:exports.FontStyleGroup,TextFilters:d.default,TextFill:exports.FontColorInput,TextSpacing:exports.SpacingInput};exports.TextToolbar=(0,n.observer)(({store:e,hideTextFontFamily:n,hideTextEffects:l,hideTextSpacing:o,hideTextBold:i,hideTextItalic:a,hideTextUnderline:r,components:s})=>{const c=e.selectedElements,u=["TextFill",!n&&"TextFontFamily","TextFontSize","TextFontVariant",!o&&"TextSpacing",!l&&"TextFilters"].filter(e=>!!e),d=(0,f.extendToolbar)({type:"text",usedItems:u,components:s});return t.default.createElement(f.ElementContainer,{items:d,itemRender:n=>{const l=s[n]||k[n];return t.default.createElement(l,{elements:c,element:c[0],store:e,key:n,hideTextBold:i,hideTextItalic:a,hideTextUnderline:r})}})}),exports.default=exports.TextToolbar;
4181
4181
  },{"react":"HdMw","mobx-react-lite":"ZfSi","@blueprintjs/core":"Ydrz","@blueprintjs/popover2":"mZnF","react-window":"lmXC","swr":"kNI9","../utils/fonts":"XXLd","../utils/api":"Ic0q","../utils/use-api":"ZPqN","./color-picker":"zFB1","./filters-picker":"dy0S","./element-container":"IPaf","@meronex/icons/mdc/MdcFormatLineSpacing":"cXdM","../utils/styled":"PsiH","@meronex/icons/mdc/MdcFormatVerticalAlignTop":"hLKz","@meronex/icons/mdc/MdcFormatVerticalAlignCenter":"GYHp","@meronex/icons/mdc/MdcFormatVerticalAlignBottom":"HZV1","../utils/l10n":"FlVj","../utils/flags":"IDY9"}],"oJPe":[function(require,module,exports) {
4182
4182
  var r=require("../lib").GenIcon;module.exports=function(t){return r({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"currentColor"},child:[{tag:"path",attr:{d:"M10 10v5h2V4h2v11h2V4h2V2h-8C7.79 2 6 3.79 6 6s1.79 4 4 4zm-2 7v-3l-4 4 4 4v-3h12v-2H8z"}}]})(t)};
4183
4183
  },{"../lib":"Lx0v"}],"t9HB":[function(require,module,exports) {
@@ -4203,8 +4203,8 @@ var r=require("../lib").GenIcon;module.exports=function(t){return r({tag:"svg",a
4203
4203
  },{"react":"HdMw","mobx-react-lite":"ZfSi","@blueprintjs/core":"Ydrz","./element-container":"IPaf","../utils/styled":"PsiH","./filters-picker":"dy0S","./flip-button":"ml2Z","../utils/flags":"IDY9","./remove-background-button":"wwJC","../utils/l10n":"FlVj"}],"nsjL":[function(require,module,exports) {
4204
4204
  "use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var l=Object.getOwnPropertyDescriptor(t,r);l&&!("get"in l?!t.__esModule:l.writable||l.configurable)||(l={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,l)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var o={};if(null!=r)for(var l in r)"default"!==l&&Object.prototype.hasOwnProperty.call(r,l)&&e(o,r,l);return t(o,r),o},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.SvgToolbar=void 0;const l=o(require("react")),n=require("mobx-react-lite"),i=r(require("../utils/svg")),s=require("./element-container"),u=o(require("./filters-picker")),a=o(require("./color-picker")),c=o(require("./flip-button")),f=(0,n.observer)(({element:e,elements:t,store:r})=>{const o=i.useSvgColors(e.src);return l.default.createElement(l.default.Fragment,null,!e.maskSrc&&o.slice(0,5).map(t=>l.default.createElement(a.default,{key:t,value:e.colorsReplace.get(t)||t,style:{marginLeft:"5px"},onChange:r=>{e.replaceColor(t,r)},store:r,gradientEnabled:!0})))}),d={SvgFlip:c.default,SvgFilters:u.default,SvgColors:f};exports.SvgToolbar=(0,n.observer)(({store:e,hideSvgEffects:t,components:r})=>{const o=e.selectedElements,n=["SvgFlip",!t&&"SvgFilters","SvgColors"].filter(e=>!!e),i=(0,s.extendToolbar)({type:"svg",usedItems:n,components:r});return l.default.createElement(s.ElementContainer,{items:i,itemRender:t=>{const n=r[t]||d[t];return l.default.createElement(n,{elements:o,element:o[0],store:e,key:t})}})}),exports.default=exports.SvgToolbar;
4205
4205
  },{"react":"HdMw","mobx-react-lite":"ZfSi","../utils/svg":"B1DI","./element-container":"IPaf","./filters-picker":"dy0S","./color-picker":"zFB1","./flip-button":"ml2Z"}],"BSzA":[function(require,module,exports) {
4206
- "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LineToolbar=exports.LineHeads=exports.BasicHead=exports.LineColor=void 0;const t=e(require("react")),r=require("mobx-react-lite"),n=require("@blueprintjs/core"),a=require("@blueprintjs/popover2"),o=e(require("./color-picker")),l=require("./filters-picker"),s=require("./element-container"),i=require("../utils/l10n"),d=(0,r.observer)(({store:e,element:r})=>t.default.createElement(a.Popover2,{content:t.default.createElement(n.Menu,null,t.default.createElement(n.MenuItem,{shouldDismissPopover:!1,text:"thin",onClick:()=>{r.set({height:3})}}),t.default.createElement(n.MenuItem,{shouldDismissPopover:!1,text:"bold",onClick:()=>{r.set({height:20})}})),position:n.Position.BOTTOM},t.default.createElement(n.Button,{text:"height",minimal:!0}))),c=(0,r.observer)(({store:e,elements:r})=>{const o=t=>{e.history.transaction(()=>{r.forEach(e=>{e.set(t)})})};return t.default.createElement(a.Popover2,{content:t.default.createElement("div",{style:{padding:"15px",paddingTop:"15px",width:"230px"}},t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"5px"}},t.default.createElement("div",null,(0,i.t)("toolbar.lineSize")),t.default.createElement("div",null,t.default.createElement(l.NumberInput,{value:r[0].height,onValueChange:e=>{o({height:e})},style:{width:"50px"},min:1,max:100,buttonPosition:"none"}))),t.default.createElement(n.Slider,{value:r[0].height,onChange:e=>{o({height:e})},min:1,max:100,labelRenderer:!1}),t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"5px",paddingTop:"15px"}},t.default.createElement(n.Button,{onClick:()=>{o({dash:[]})},active:0===r[0].dash.length},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x2:"24",y1:"50%",y2:"50%",stroke:"currentColor",strokeWidth:"2"}))),t.default.createElement(n.Button,{onClick:()=>{o({dash:[4,1]})},active:4===r[0].dash[0]},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x1:"-1",x2:"25",y1:"50%",y2:"50%",stroke:"currentColor",strokeDasharray:"12 2",strokeWidth:"2"}))),t.default.createElement(n.Button,{onClick:()=>{o({dash:[2,1]})},active:2===r[0].dash[0]},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x1:"1",x2:"23",y1:"50%",y2:"50%",stroke:"currentColor",strokeDasharray:"6 2",strokeWidth:"2"}))),t.default.createElement(n.Button,{onClick:()=>{o({dash:[1,1]})},active:1===r[0].dash[0]},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x1:"1",x2:"23",y1:"50%",y2:"50%",stroke:"currentColor",strokeDasharray:"2 2",strokeWidth:"2"}))))),position:n.Position.BOTTOM},t.default.createElement(n.Button,{icon:"settings",minimal:!0}))});exports.LineColor=(0,r.observer)(({elements:e,store:r})=>t.default.createElement(o.default,{value:e[0].color,style:{marginRight:"5px"},gradientEnabled:!1,onChange:t=>r.history.transaction(()=>{e.forEach(e=>{e.set({color:t})})}),store:r}));const u=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 16 8"}))),m=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 8 3 L 1 8 L 8 13",fill:"none",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),p=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 8 3 L 1 8 L 8 13 Z",fill:"currentColor",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),h=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 3 L 1 13",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),f=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 4 L 9 4 L 9 12 L 1 12 Z",fill:"currentColor",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),E=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("circle",{cx:"4",cy:"8",r:"4",fill:"currentColor"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),g={"":u,arrow:m,triangle:p,bar:h,square:f,circle:E},k=({type:e,active:r,onClick:a,flipped:o})=>{const l=g[e];return t.default.createElement(n.Button,{icon:o?t.default.createElement("span",{style:{transform:"scaleX(-1)"}},l):l,minimal:!0,onClick:a,active:r})};exports.BasicHead=(0,r.observer)(({elements:e,store:r,property:o})=>{const l="endHead"===o,s=g[e[0][o]],i=l?t.default.createElement("span",{style:{transform:"scaleX(-1)"}},s):s,d=t=>{r.history.transaction(()=>{e.forEach(e=>{e.set({[o]:t})})})};return t.default.createElement(t.default.Fragment,null,t.default.createElement(a.Popover2,{content:t.default.createElement("div",{style:{width:"150px",padding:"10px"}},t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},["","arrow","triangle"].map(r=>t.default.createElement(k,{key:r,type:r,active:e[0][o]===r,onClick:()=>{d(r)},flipped:l}))),t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},["bar","square","circle"].map(r=>t.default.createElement(k,{key:r,type:r,active:e[0][o]===r,onClick:()=>{d(r)},flipped:l})))),position:n.Position.BOTTOM},t.default.createElement(n.Button,{icon:i,minimal:!0})))}),exports.LineHeads=(0,r.observer)(({elements:e,store:r})=>t.default.createElement(t.default.Fragment,null,t.default.createElement(exports.BasicHead,{elements:e,store:r,property:"startHead"}),t.default.createElement(exports.BasicHead,{elements:e,store:r,property:"endHead"})));const w={LineSettings:c,LineColor:exports.LineColor,LineHeads:exports.LineHeads};exports.LineToolbar=(0,r.observer)(({store:e,components:r})=>{const n=e.selectedElements[0],a=(0,s.extendToolbar)({type:"line",usedItems:["LineColor","LineSettings","LineHeads"],components:r});return t.default.createElement(s.ElementContainer,{items:a,itemRender:a=>{const o=r[a]||w[a];return t.default.createElement(o,{element:n,store:e,key:a,elements:e.selectedElements})}})}),exports.default=exports.LineToolbar;
4207
- },{"react":"HdMw","mobx-react-lite":"ZfSi","@blueprintjs/core":"Ydrz","@blueprintjs/popover2":"mZnF","./color-picker":"zFB1","./filters-picker":"dy0S","./element-container":"IPaf","../utils/l10n":"FlVj"}],"espJ":[function(require,module,exports) {
4206
+ "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LineToolbar=exports.LineHeads=exports.BasicHead=exports.LineColor=void 0;const t=e(require("react")),r=require("mobx-react-lite"),n=require("@blueprintjs/core"),a=require("@blueprintjs/popover2"),o=e(require("./color-picker")),l=require("./filters-picker"),i=require("./element-container"),s=require("../canvas/line-element"),d=require("../utils/l10n"),c=(0,r.observer)(({store:e,elements:r})=>{const o=t=>{e.history.transaction(()=>{r.forEach(e=>{e.set(t)})})},i=t=>{e.history.transaction(()=>{r.forEach(e=>{const{middleLeft:r,middleRight:n}=(0,s.getMiddlePoints)(e),{x:a,y:o,rotation:l}=(0,s.getLinePositionFromMiddlePoints)(r,n,t);e.set({x:a,y:o,rotation:l,height:t})})})};return t.default.createElement(a.Popover2,{content:t.default.createElement("div",{style:{padding:"15px",paddingTop:"15px",width:"230px"}},t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"5px"}},t.default.createElement("div",null,(0,d.t)("toolbar.lineSize")),t.default.createElement("div",null,t.default.createElement(l.NumberInput,{value:r[0].height,onValueChange:e=>{i(e)},style:{width:"50px"},min:1,max:100,buttonPosition:"none"}))),t.default.createElement(n.Slider,{value:r[0].height,onChange:e=>{i(e)},min:1,max:100,labelRenderer:!1}),t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"5px",paddingTop:"15px"}},t.default.createElement(n.Button,{onClick:()=>{o({dash:[]})},active:0===r[0].dash.length},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x2:"24",y1:"50%",y2:"50%",stroke:"currentColor",strokeWidth:"2"}))),t.default.createElement(n.Button,{onClick:()=>{o({dash:[4,1]})},active:4===r[0].dash[0]},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x1:"-1",x2:"25",y1:"50%",y2:"50%",stroke:"currentColor",strokeDasharray:"12 2",strokeWidth:"2"}))),t.default.createElement(n.Button,{onClick:()=>{o({dash:[2,1]})},active:2===r[0].dash[0]},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x1:"1",x2:"23",y1:"50%",y2:"50%",stroke:"currentColor",strokeDasharray:"6 2",strokeWidth:"2"}))),t.default.createElement(n.Button,{onClick:()=>{o({dash:[1,1]})},active:1===r[0].dash[0]},t.default.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},t.default.createElement("line",{x1:"1",x2:"23",y1:"50%",y2:"50%",stroke:"currentColor",strokeDasharray:"2 2",strokeWidth:"2"}))))),position:n.Position.BOTTOM},t.default.createElement(n.Button,{icon:"settings",minimal:!0}))});exports.LineColor=(0,r.observer)(({elements:e,store:r})=>t.default.createElement(o.default,{value:e[0].color,style:{marginRight:"5px"},gradientEnabled:!1,onChange:t=>r.history.transaction(()=>{e.forEach(e=>{e.set({color:t})})}),store:r}));const u=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 16 8"}))),m=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 8 3 L 1 8 L 8 13",fill:"none",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),p=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 8 3 L 1 8 L 8 13 Z",fill:"currentColor",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),h=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 3 L 1 13",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),f=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 4 L 9 4 L 9 12 L 1 12 Z",fill:"currentColor",strokeLinejoin:"round",strokeLinecap:"round"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),g=t.default.createElement("span",{"aria-hidden":"true",className:"bp4-icon"},t.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},t.default.createElement("circle",{cx:"4",cy:"8",r:"4",fill:"currentColor"}),t.default.createElement("path",{stroke:"currentColor",strokeWidth:"2",d:"M 1 8 L 15 8",strokeLinejoin:"round",strokeLinecap:"round"}))),E={"":u,arrow:m,triangle:p,bar:h,square:f,circle:g},w=({type:e,active:r,onClick:a,flipped:o})=>{const l=E[e];return t.default.createElement(n.Button,{icon:o?t.default.createElement("span",{style:{transform:"scaleX(-1)"}},l):l,minimal:!0,onClick:a,active:r})};exports.BasicHead=(0,r.observer)(({elements:e,store:r,property:o})=>{const l="endHead"===o,i=E[e[0][o]],s=l?t.default.createElement("span",{style:{transform:"scaleX(-1)"}},i):i,d=t=>{r.history.transaction(()=>{e.forEach(e=>{e.set({[o]:t})})})};return t.default.createElement(t.default.Fragment,null,t.default.createElement(a.Popover2,{content:t.default.createElement("div",{style:{width:"150px",padding:"10px"}},t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},["","arrow","triangle"].map(r=>t.default.createElement(w,{key:r,type:r,active:e[0][o]===r,onClick:()=>{d(r)},flipped:l}))),t.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},["bar","square","circle"].map(r=>t.default.createElement(w,{key:r,type:r,active:e[0][o]===r,onClick:()=>{d(r)},flipped:l})))),position:n.Position.BOTTOM},t.default.createElement(n.Button,{icon:s,minimal:!0})))}),exports.LineHeads=(0,r.observer)(({elements:e,store:r})=>t.default.createElement(t.default.Fragment,null,t.default.createElement(exports.BasicHead,{elements:e,store:r,property:"startHead"}),t.default.createElement(exports.BasicHead,{elements:e,store:r,property:"endHead"})));const k={LineSettings:c,LineColor:exports.LineColor,LineHeads:exports.LineHeads};exports.LineToolbar=(0,r.observer)(({store:e,components:r})=>{const n=e.selectedElements[0],a=(0,i.extendToolbar)({type:"line",usedItems:["LineColor","LineSettings","LineHeads"],components:r});return t.default.createElement(i.ElementContainer,{items:a,itemRender:a=>{const o=r[a]||k[a];return t.default.createElement(o,{element:n,store:e,key:a,elements:e.selectedElements})}})}),exports.default=exports.LineToolbar;
4207
+ },{"react":"HdMw","mobx-react-lite":"ZfSi","@blueprintjs/core":"Ydrz","@blueprintjs/popover2":"mZnF","./color-picker":"zFB1","./filters-picker":"dy0S","./element-container":"IPaf","../canvas/line-element":"JKBY","../utils/l10n":"FlVj"}],"espJ":[function(require,module,exports) {
4208
4208
  "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ManyToolbar=void 0;const t=e(require("react")),r=require("mobx-react-lite"),o=require("./element-container"),n={};exports.ManyToolbar=(0,r.observer)(({store:e,components:r})=>{const s=e.selectedElements,a=(0,o.extendToolbar)({type:"many",usedItems:[],components:r});return t.default.createElement(o.ElementContainer,{items:a,itemRender:o=>{const a=r[o]||n[o];return t.default.createElement(a,{elements:s,element:s[0],store:e,key:o})}})}),exports.default=exports.ManyToolbar;
4209
4209
  },{"react":"HdMw","mobx-react-lite":"ZfSi","./element-container":"IPaf"}],"hzA0":[function(require,module,exports) {
4210
4210
  "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DownloadButton=void 0;const t=e(require("react")),o=require("@blueprintjs/core"),a=require("@blueprintjs/popover2"),n=require("../utils/l10n"),r=({store:e})=>{const[r,l]=t.default.useState(!1);return t.default.createElement(a.Popover2,{content:t.default.createElement(o.Menu,null,t.default.createElement(o.MenuItem,{icon:"media",text:(0,n.t)("toolbar.saveAsImage"),onClick:async()=>{e.pages.forEach(t=>{e.saveAsImage({pageId:t.id})})}}),t.default.createElement(o.MenuItem,{icon:"document",text:(0,n.t)("toolbar.saveAsPDF"),onClick:async()=>{l(!0),await e.saveAsPDF(),l(!1)}})),position:o.Position.BOTTOM},t.default.createElement(o.Button,{icon:"import",text:(0,n.t)("toolbar.download"),minimal:!0,loading:r}))};exports.DownloadButton=r,exports.default=exports.DownloadButton;
@@ -4241,6 +4241,6 @@ var r=require("../lib").GenIcon;module.exports=function(t){return r({tag:"svg",a
4241
4241
  },{"react":"HdMw","mobx-react-lite":"ZfSi","@blueprintjs/core":"Ydrz","../utils/styled":"PsiH","./history-buttons":"APqM","./text-toolbar":"LDge","./html-toolbar":"JODo","./image-toolbar":"LcnJ","./svg-toolbar":"nsjL","./line-toolbar":"BSzA","./many-toolbar":"espJ","./download-button":"hzA0","./duplicate-button":"I7IM","./remove-button":"F6AQ","./lock-button":"xZD7","./position-picker":"Taqf","./opacity-picker":"tmro","./admin-button":"ccY3","./group-button":"wGhb","../utils/flags":"IDY9"}],"Otsg":[function(require,module,exports) {
4242
4242
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unstable_setTextVerticalResizeEnabled=exports.unstable_setTextOverflow=exports.unstable_setForceTextFit=exports.unstable_useHtmlTextRender=exports.unstable_setRemoveBackgroundEnabled=exports.useDownScaling=exports.setColorsPresetFunc=exports.setAPI=exports.getGoogleFontImage=exports.getGoogleFontsListAPI=exports.unstable_registerNextDomDrop=exports.getTranslations=exports.setTranslations=exports.onLoadError=exports.unstable_registerToolbarComponent=exports.unstable_registerTransformerAttrs=exports.unstable_registerShapeComponent=exports.unstable_registerShapeModel=exports.unstable_setImageLoaderHook=exports.toggleFadeInAnimation=exports.setUploadFunc=exports.replaceGlobalFonts=exports.removeGlobalFont=exports.addGlobalFont=exports.setGoogleFonts=void 0;var e=require("./utils/fonts");Object.defineProperty(exports,"setGoogleFonts",{enumerable:!0,get:function(){return e.setGoogleFonts}}),Object.defineProperty(exports,"addGlobalFont",{enumerable:!0,get:function(){return e.addGlobalFont}}),Object.defineProperty(exports,"removeGlobalFont",{enumerable:!0,get:function(){return e.removeGlobalFont}}),Object.defineProperty(exports,"replaceGlobalFonts",{enumerable:!0,get:function(){return e.replaceGlobalFonts}});var t=require("./side-panel/upload-panel");Object.defineProperty(exports,"setUploadFunc",{enumerable:!0,get:function(){return t.setUploadFunc}});var r=require("./canvas/use-fadein");Object.defineProperty(exports,"toggleFadeInAnimation",{enumerable:!0,get:function(){return r.toggleFadeInAnimation}});var o=require("./canvas/image-element");Object.defineProperty(exports,"unstable_setImageLoaderHook",{enumerable:!0,get:function(){return o.setImageLoaderHook}});var n=require("./model/store");Object.defineProperty(exports,"unstable_registerShapeModel",{enumerable:!0,get:function(){return n.registerShapeModel}});var s=require("./canvas/element");Object.defineProperty(exports,"unstable_registerShapeComponent",{enumerable:!0,get:function(){return s.registerShapeComponent}});var a=require("./canvas/page");Object.defineProperty(exports,"unstable_registerTransformerAttrs",{enumerable:!0,get:function(){return a.registerTransformerAttrs}});var u=require("./toolbar/toolbar");Object.defineProperty(exports,"unstable_registerToolbarComponent",{enumerable:!0,get:function(){return u.registerToolbarComponent}});var l=require("./utils/loader");Object.defineProperty(exports,"onLoadError",{enumerable:!0,get:function(){return l.onLoadError}});var i=require("./utils/l10n");Object.defineProperty(exports,"setTranslations",{enumerable:!0,get:function(){return i.setTranslations}}),Object.defineProperty(exports,"getTranslations",{enumerable:!0,get:function(){return i.getTranslations}});var p=require("./canvas/page");Object.defineProperty(exports,"unstable_registerNextDomDrop",{enumerable:!0,get:function(){return p.registerNextDomDrop}});var b=require("./utils/api");Object.defineProperty(exports,"getGoogleFontsListAPI",{enumerable:!0,get:function(){return b.getGoogleFontsListAPI}}),Object.defineProperty(exports,"getGoogleFontImage",{enumerable:!0,get:function(){return b.getGoogleFontImage}}),Object.defineProperty(exports,"setAPI",{enumerable:!0,get:function(){return b.setAPI}});var g=require("./toolbar/color-picker");Object.defineProperty(exports,"setColorsPresetFunc",{enumerable:!0,get:function(){return g.setColorsPresetFunc}});var c=require("./utils/flags");Object.defineProperty(exports,"useDownScaling",{enumerable:!0,get:function(){return c.useDownScaling}});var x=require("./utils/flags");Object.defineProperty(exports,"unstable_setRemoveBackgroundEnabled",{enumerable:!0,get:function(){return x.useRemoveBackground}});var d=require("./utils/flags");Object.defineProperty(exports,"unstable_useHtmlTextRender",{enumerable:!0,get:function(){return d.useHtmlTextRender}});var f=require("./utils/flags");Object.defineProperty(exports,"unstable_setForceTextFit",{enumerable:!0,get:function(){return f.setForceTextFit}});var m=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextOverflow",{enumerable:!0,get:function(){return m.setTextOverflow}});var v=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextVerticalResizeEnabled",{enumerable:!0,get:function(){return v.setTextVerticalResizeEnabled}});
4243
4243
  },{"./utils/fonts":"XXLd","./side-panel/upload-panel":"ioqf","./canvas/use-fadein":"N3c2","./canvas/image-element":"VbEp","./model/store":"GRkH","./canvas/element":"XEPK","./canvas/page":"Co9b","./toolbar/toolbar":"CetC","./utils/loader":"bN4e","./utils/l10n":"FlVj","./utils/api":"Ic0q","./toolbar/color-picker":"zFB1","./utils/flags":"IDY9"}],"IVsl":[function(require,module,exports) {
4244
- "use strict";var e=s(require("react")),o=s(require("react-dom/client")),r=require("polotno/canvas/workspace"),t=require("polotno/model/store"),n=require("polotno/canvas/use-fadein"),a=require("polotno/config"),l=require("polotno/utils/fonts");function s(e){return e&&e.__esModule?e:{default:e}}(0,n.toggleFadeInAnimation)(!1),(0,a.unstable_setTextOverflow)("change-font-size");var u=new URLSearchParams(location.search).get("key"),d=(0,t.createStore)({key:u});window.store=d,window.config={addGlobalFont:l.addGlobalFont,unstable_useHtmlTextRender:a.unstable_useHtmlTextRender,onLoadError:a.onLoadError};var i=o.default.createRoot(document.getElementById("root"));i.render(e.default.createElement(r.Workspace,{store:d}));
4244
+ "use strict";var e=s(require("react")),t=s(require("react-dom/client")),o=require("polotno/canvas/workspace"),r=require("polotno/model/store"),a=require("polotno/canvas/use-fadein"),n=require("polotno/config"),l=require("polotno/utils/fonts");function s(e){return e&&e.__esModule?e:{default:e}}(0,a.toggleFadeInAnimation)(!1),(0,n.unstable_setTextOverflow)("change-font-size");var u=new URLSearchParams(location.search).get("key"),i=(0,r.createStore)({key:u});window.store=i,window.config={addGlobalFont:l.addGlobalFont,unstable_useHtmlTextRender:n.unstable_useHtmlTextRender,unstable_setTextVerticalResizeEnabled:n.unstable_setTextVerticalResizeEnabled,unstable_setTextOverflow:n.unstable_setTextOverflow,onLoadError:n.onLoadError};var d=t.default.createRoot(document.getElementById("root"));d.render(e.default.createElement(o.Workspace,{store:i}));
4245
4245
  },{"react":"HdMw","react-dom/client":"U1bq","polotno/canvas/workspace":"twsc","polotno/model/store":"GRkH","polotno/canvas/use-fadein":"N3c2","polotno/config":"Otsg","polotno/utils/fonts":"XXLd"}]},{},["IVsl"], null)
4246
- //# sourceMappingURL=client.0ebb7c1e.js.map
4246
+ //# sourceMappingURL=client.a516c3ac.js.map
package/dist/client.html CHANGED
@@ -1 +1 @@
1
- <html><head><title>Canvas editor</title><style>body{padding:0;margin:0}</style><meta name="viewport" content="width=device-width, initial-scale=1"></head><body class="bp3-dark"> <div id="root"></div> <script src="client.0ebb7c1e.js"></script> </body></html>
1
+ <html><head><title>Canvas editor</title><style>body{padding:0;margin:0}</style><meta name="viewport" content="width=device-width, initial-scale=1"></head><body class="bp3-dark"> <div id="root"></div> <script src="client.a516c3ac.js"></script> </body></html>
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "polotno-node",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "Polotno workflow from NodeJS",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1",
8
- "build": "rm -rf ./dist && parcel build ./client.html --public-url ./ && rm ./dist/*js.map "
8
+ "build": "rm -rf ./dist && parcel build ./client.html --public-url ./ && rm ./dist/*js.map",
9
+ "dev": "parcel ./client.html"
9
10
  },
10
11
  "files": [
11
12
  "dist",
@@ -15,7 +16,7 @@
15
16
  ],
16
17
  "devDependencies": {
17
18
  "parcel-bundler": "^1.12.4",
18
- "polotno": "^1.7.1",
19
+ "polotno": "^1.7.5",
19
20
  "react": "^18.2.0",
20
21
  "react-dom": "^18.2.0"
21
22
  },