polotno-node 2.0.5 → 2.0.6
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 +3 -1
- package/dist/{client.b8d33380.js → client.51dfa0bd.js} +8 -8
- package/dist/client.html +1 -1
- package/instance.js +18 -0
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -173,12 +173,14 @@ const url = await instance.run(async (json) => {
|
|
|
173
173
|
|
|
174
174
|
## Your own client
|
|
175
175
|
|
|
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
|
|
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 unknown elements types.
|
|
177
177
|
|
|
178
178
|
In that case you can use your own client editor. You need to create a public html page with `store` as global variable and mount just `<Workspace />` component from `polotno/canvas` module. Take a look into `client.html` file and `client.js` file in this repo as a demo. In your own version of the Editor you can use experimental API to define custom components.
|
|
179
179
|
|
|
180
180
|
Pass `url` option to `createInstance` function with public url of your client editor.
|
|
181
181
|
|
|
182
|
+
**Note: you will have to maintain the last version of your client editor by yourself. Better to keep using the last **
|
|
183
|
+
|
|
182
184
|
```js
|
|
183
185
|
const { createInstance } = require('polotno-node');
|
|
184
186
|
|
|
@@ -201,7 +201,7 @@ var e=require("react");module.exports=function(r,n,t){const u=e.useRef("loading"
|
|
|
201
201
|
},{"./utils.js":"Qid2"}],"N3c2":[function(require,module,exports) {
|
|
202
202
|
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.useFadeIn=exports.isAnimationUsed=exports.toggleFadeInAnimation=void 0;const t=e(require("react")),r=e(require("konva"));let n=!1;const o=(e=!n)=>{n=e};exports.toggleFadeInAnimation=o;const u=()=>n;function s(e,o){const u=t.default.useRef();t.default.useLayoutEffect(()=>{u.current&&u.current.destroy()},[o]),t.default.useLayoutEffect(()=>{if(!n)return;const t=e.current.opacity();return t?(e.current.opacity(0),u.current=new r.default.Tween({node:e.current,opacity:t,onFinish:()=>{var e;null===(e=u.current)||void 0===e||e.destroy()}}),u.current.play(),()=>{var e;null===(e=u.current)||void 0===e||e.destroy()}):void 0},[])}exports.isAnimationUsed=u,exports.useFadeIn=s;
|
|
203
203
|
},{"react":"HdMw","konva":"aTGn"}],"bN4e":[function(require,module,exports) {
|
|
204
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.triggerLoadError=exports.onLoadError=exports.whenLoaded=exports.decrementLoader=exports.incrementLoader=void 0;const e=require("../canvas/use-fadein");let o=0,r=[];function
|
|
204
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.triggerLoadError=exports.onLoadError=exports.whenLoaded=exports.decrementLoader=exports.incrementLoader=exports.setAssetLoadTimeout=void 0;const e=require("../canvas/use-fadein");let o=0,r=[],t=3e4;const s=e=>{t=e};function n(e){o+=1;let r=!1;Date.now();const s=setTimeout(()=>{r||(m(`Timeout loading image ${e}`),console.error("Timeout triggered for loader. Some assets may not have loaded.",e),r=!0,i())},t);return()=>{r||(clearTimeout(s),i())}}function i(){0===(o-=1)&&(r.forEach(e=>e()),r=[])}function a(e){0===o?e():r.push(e)}function d(){return new Promise(o=>a(()=>{(0,e.isAnimationUsed)()?setTimeout(o,300):o(!0)}))}exports.setAssetLoadTimeout=s,exports.incrementLoader=n,exports.decrementLoader=i,exports.whenLoaded=d;let u=[];function c(e){u.push(e)}function m(e){u.forEach(o=>o(e))}exports.onLoadError=c,exports.triggerLoadError=m;
|
|
205
205
|
},{"../canvas/use-fadein":"N3c2"}],"XXLd":[function(require,module,exports) {
|
|
206
206
|
"use strict";var t=this&&this.__createBinding||(Object.create?function(t,e,o,n){void 0===n&&(n=o);var r=Object.getOwnPropertyDescriptor(e,o);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[o]}}),Object.defineProperty(t,n,r)}:function(t,e,o,n){void 0===n&&(n=o),t[n]=e[o]}),e=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),o=this&&this.__importStar||function(o){if(o&&o.__esModule)return o;var n={};if(null!=o)for(var r in o)"default"!==r&&Object.prototype.hasOwnProperty.call(o,r)&&t(n,o,r);return e(n,o),n};Object.defineProperty(exports,"__esModule",{value:!0}),exports.injectCustomFont=exports.injectGoogleFont=exports.loadFont=exports.isFontLoaded=exports.replaceGlobalFonts=exports.removeGlobalFont=exports.addGlobalFont=exports.globalFonts=exports.getFontsList=exports.setGoogleFonts=exports.isGoogleFontChanged=void 0;const n=o(require("mobx")),r=require("./loader");let s=n.observable(["Roboto","Amatic SC","Press Start 2P","Marck Script","Rubik Mono One"]),l=n.observable({value:!1});function a(){return l.value}function i(t){"default"!==t?(l.value=!0,s.splice(0,s.length),s.push(...t)):l.value=!1}function c(){return s}function u(t){exports.globalFonts.push(t)}function f(t){const e=exports.globalFonts.findIndex(e=>e.fontFamily===t);-1!==e&&exports.globalFonts.splice(e,1)}function p(t){exports.globalFonts.replace(t)}exports.isGoogleFontChanged=a,exports.setGoogleFonts=i,exports.getFontsList=c,exports.globalFonts=n.observable([]),exports.addGlobalFont=u,exports.removeGlobalFont=f,exports.replaceGlobalFonts=p;var d="Some test text;?#D-ПРИВЕТ!1230o9u8i7y6t5r4e3w2q1",m=document.createElement("canvas");function g(){return b("Arial")}function x(){return b("Times","Times")}function b(t,e="Arial"){var o=m.getContext("2d");return o.font=`normal 40px '${t}', ${e}`,o.measureText(d).width}const F=100,v={Arial:!0},y=t=>v[t];async function h(t){var e;if(v[t])return;const o=!!(null===(e=document.fonts)||void 0===e?void 0:e.load),n=g();if(o)try{if(await document.fonts.load(`16px '${t}'`),n!==b(t))return void(v[t]=!0)}catch(t){}const s=x(),l=b(t);for(let r=0;r<100;r++){const e=b(t,"Arial"),o=b(t,"Times");if(e!==l||e!==n||o!==s)return void(v[t]=!0);await new Promise(t=>setTimeout(t,60))}console.warn(`Timeout for loading font "${t}". Looks like polotno can't load it. Is it a correct font family?`),(0,r.triggerLoadError)(`Timeout for loading font "${t}"`)}exports.isFontLoaded=y,exports.loadFont=h;const G={};function _(t){if(G[t])return;const e=`https://fonts.googleapis.com/css?family=${t.replace(/ /g,"+")}`,o=document.createElement("link");o.type="text/css",o.href=e,o.rel="stylesheet",document.getElementsByTagName("head")[0].appendChild(o),G[t]=!0}exports.injectGoogleFont=_;const j={};function $(t){const e=t.fontFamily;if(j[e])return;if(!t.url&&!t.styles)return;const o=document.createElement("style");o.type="text/css";const n=t.styles||(t.url?[{src:`url("${t.url}")`}]:[]);let r="";n.forEach(t=>{r+=`\n @font-face {\n font-family: '${e}';\n src: ${t.src};\n font-style: ${t.fontStyle||"normal"};\n font-weight: ${t.fontWeight||"normal"};\n }\n `}),o.innerHTML=r,document.getElementsByTagName("head")[0].appendChild(o),j[t.fontFamily]=!0}exports.injectCustomFont=$;
|
|
207
207
|
},{"mobx":"BzvP","./loader":"bN4e"}],"IDY9":[function(require,module,exports) {
|
|
@@ -219,7 +219,7 @@ 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 T=(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();"middle"===t.verticalAlign&&(c=(t.height-f)/2),"bottom"===t.verticalAlign&&(c=t.height-f);const h=(0,g.removeTags)(t.text);return i.default.createElement(l.Html,null,i.default.createElement("textarea",{className:"polotno-input",ref:u,dir:M(h),style:Object.assign(Object.assign(Object.assign({},b),a),{paddingTop:c+"px"}),value:h,onChange:e=>{t.set({text:e.target.value})},placeholder:t.placeholder,onBlur:n}))}),z=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}=z(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(T,{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,r,n){void 0===n&&(n=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,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=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 n={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(n,r,i);return t(n,r),n},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TextElement=exports.useTextColor=exports.usePrevious=exports.getLineHeight=exports.useFontLoader=exports.getDir=exports.isRTLText=void 0;const i=n(require("react")),o=require("mobx-react-lite"),a=require("react-konva"),l=require("react-konva-utils"),s=require("mobx"),d=n(require("konva")),u=require("svg-round-corners"),c=require("../utils/loader"),f=require("../utils/fonts"),h=require("../utils/flags"),g=require("../utils/text"),p=r(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 r=0;r<e.length;r++)S(e[r])&&(t+=1);return t>e.length/2}function M(e){return E(e)?"rtl":"ltr"}exports.isRTLText=E,exports.getDir=M;const T=(0,o.observer)(({textNodeRef:e,element:t,onBlur:r,selectAll:n,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 r=`\n .polotno-input::placeholder {\n color: ${a.color};\n opacity: 0.6;\n }\n `;v.innerHTML="",v.appendChild(document.createTextNode(r)),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 r=o||t.value.length;t.selectionStart=t.selectionEnd=r,n&&(null==t||t.select(),document.execCommand("selectAll",!1,null))});return()=>{clearTimeout(e)}},[]);let c=0;const f=d.textArr.length*d.lineHeight()*d.fontSize();"middle"===t.verticalAlign&&(c=(t.height-f)/2),"bottom"===t.verticalAlign&&(c=t.height-f);const h=(0,g.removeTags)(t.text);return i.default.createElement(l.Html,null,i.default.createElement("textarea",{className:"polotno-input",ref:u,dir:M(h),style:Object.assign(Object.assign(Object.assign({},b),a),{paddingTop:c+"px"}),value:h,onChange:e=>{t.set({text:e.target.value})},placeholder:t.placeholder,onBlur:r}))}),z=e=>{const[t,r]=i.default.useState(!1),n=i.default.useRef(!1);return i.default.useEffect(()=>{var t=!0;return setTimeout(()=>{t&&(e._editModeEnabled&&(n.current=!0),r(!0),setTimeout(()=>{n.current=!1},50))},50),()=>{t=!1}},[]),{editorEnabled:t&&e._editModeEnabled,selectAll:n.current}},L=(e,t)=>{const[r,n]=i.default.useReducer(e=>e+1,0),o=i.default.useRef(!1);return o.current=!!(0,f.isFontLoaded)(t),i.default.useLayoutEffect(()=>{if(o.current)return;let r=!0;return(async()=>{o.current=!1,n();const i=(0,c.incrementLoader)(`text ${t}`);await e.loadFont(t),d.default.Util.requestAnimFrame(i),r&&(o.current=!0,n())})(),()=>{r=!1}},[t]),[o.current]};exports.useFontLoader=L;const O=({fontLoaded:e,fontFamily:t,fontSize:r,lineHeight:n})=>i.default.useMemo(()=>{if("number"==typeof n)return n;const e=document.createElement("div");e.style.fontFamily=t,e.style.fontSize=r+"px",e.style.lineHeight=n,e.innerText="Test text",document.body.appendChild(e);const i=e.offsetHeight;return document.body.removeChild(e),i/r},[e,t,r,n]);function k(e){var t=e.getAbsoluteTransform().copy();t.invert();var r=e.getStage().getPointerPosition();return t.point(r)}function A(e){var t;const r=e.target,n=k(r),i=r.textArr,o=Math.floor(n.y/(r.fontSize()*r.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"===r.align()?s=r.width()-l.width:"center"===r.align()&&(s=r.width()/2-l.width/2),a+Math.round((n.x-s)/l.width*l.text.length)}function P(e){const t=i.default.useRef(e),r=i.default.useRef(e);return i.default.useMemo(()=>{r.current=t.current,t.current=e},[e]),r.current}function R(e,t){const r=e.getAttrs(),n=(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 r=t.height&&e.height()>t.height,o=n.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(!r&&!l)break;i-=.5,e.fontSize(i)}return e.fontSize(r.fontSize),i}function $({lines:e,lineHeight:t,width:r,align:n="left",padding:i=0,cornerRadius:o=0}){var a;e.forEach((e,t)=>{e.cx=r/2,"right"===n?e.cx=r-e.width/2:"left"===n&&(e.cx=e.width/2),"justify"!==n||e.lastInParagraph||(e.width=r),"justify"===n&&(e.cx=e.width/2)});let l=`M ${null===(a=e[0])||void 0===a?void 0:a.cx} ${-i}`;e.forEach((r,n)=>{const{cx:o}=r,a=e[n-1];a&&a.width>r.width?l+=` L ${o+r.width/2+i} ${n*t+i}`:l+=` L ${o+r.width/2+i} ${n*t-i}`;const s=e[n+1];s&&s.width>r.width?l+=` L ${o+r.width/2+i} ${(n+1)*t-i}`:l+=` L ${o+r.width/2+i} ${(n+1)*t+i}`});for(var s=e.length-1;s>=0;s--){const r=e[s],{cx:n}=r,o=e[s+1];o&&o.width>r.width?l+=` L ${n-r.width/2-i} ${(s+1)*t-i}`:l+=` L ${n-r.width/2-i} ${(s+1)*t+i}`;const a=e[s-1];a&&a.width>r.width?l+=` L ${n-r.width/2-i} ${s*t+i}`:l+=` L ${n-r.width/2-i} ${s*t-i}`}l+=" Z";const d=(0,u.parsePath)(l);return(0,u.roundCommands)(d,o).path}exports.getLineHeight=O,exports.usePrevious=P;const F=e=>i.default.useMemo(()=>{if(!p.isGradient(e.fill))return{fill:e.fill};const{stops:t,rotation:r}=p.parseColor(e.fill),n={x:e.width/2,y:e.height/2},i=Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2)),o=d.default.Util.degToRad(r)-Math.PI/2,a=[];return t.forEach(({offset:e,color:t})=>{a.push(e,t)}),{fillLinearGradientStartPointX:n.x-i*Math.cos(o),fillLinearGradientStartPointY:n.y-i*Math.sin(o),fillLinearGradientColorStops:a,fillLinearGradientEndPointX:n.x+i*Math.cos(o),fillLinearGradientEndPointY:n.y+i*Math.sin(o),fill:t[1].color,fillPriority:"linear-gradient"}},[e.fill]);exports.useTextColor=F,exports.TextElement=(0,o.observer)(({element:e,store:t})=>{const r=i.default.useRef(null),n=i.default.useRef(null),{editorEnabled:o,selectAll:l}=z(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=P(e.fontFamily),[E,M]=i.default.useState([]);i.default.useEffect(()=>{var e,t;const n=null!==(t=null===(e=r.current)||void 0===e?void 0:e.textArr)&&void 0!==t?t:[];JSON.stringify(n)!==JSON.stringify(E)&&M(n)}),i.default.useEffect(()=>{if(e.width)return;const t=r.current;t.width(600),e.set({width:1.4*t.getTextWidth()})},[]),i.default.useLayoutEffect(()=>(0,s.autorun)(()=>{const t=r.current;(0,x.applyFilter)(t,e)}));const[L]=(0,exports.useFontLoader)(t,e.fontFamily),O=(0,g.removeTags)(e.text),k=()=>{const e=r.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:n}=h.flags;if(e.height)if("change-font-size"!==n||c){if("resize"===n){const n=k();b&&e.height<n&&t.history.ignore(()=>{e.set({height:n}),r.current.height(n)}),b||e.height===n||t.history.ignore(()=>{e.set({height:n}),r.current.height(n)})}}else{const n=R(r.current,e);if(n!==e.fontSize)return void t.history.ignore(()=>{e.set({fontSize:n})});const i=k();e.height!==i&&t.history.ignore(()=>{e.set({height:i})})}else{const r=k();t.history.ignore(()=>{e.set({height:r})})}}),i.default.useLayoutEffect(()=>{const t=r.current;t&&(t.width(t.width()+1e-8),t._setTextData(),(0,x.applyFilter)(t,e))},[L]);const F=i.default.useRef(null),_=i.default.useRef(0),H=r=>{r.evt.preventDefault(),t.selectedShapes.find(t=>t===e)&&e.contentEditable&&(_.current=A(r),e.toggleEditMode())},q=!O&&e.placeholder?.6:e.a.opacity;(0,y.useFadeIn)(r,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:n,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:r,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:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onMouseEnter:()=>{u(!0)},onMouseLeave:()=>{u(!1)},onClick:H,onTap:H,onTransformStart:()=>{f(!0),t.history.startTransaction(),p.current=r.current.height()},onTransform:t=>{var r,i;const o=t.target;null===(r=n.current)||void 0===r||r.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(),r=o.width()*t,n=e.fontSize;let i=r;r<n&&(i=n,F.current&&o.position(F.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 r="resize"===h.flags.textOverflow?k():C*e.fontSize;t.target.height(Math.max(r,t.target.height()*t.target.scaleY())),t.target.scaleY(1)}t.target.strokeWidth(e.strokeWidth/t.target.scaleX()),F.current=t.target.position()},onTransformEnd:r=>{var i;f(!1);const o=r.target.scaleX();r.target.scaleX(1),r.target.scaleY(1),r.target.strokeWidth(e.strokeWidth),e.set({fontSize:Math.round(e.fontSize*o),width:Math.ceil(r.target.width()*o),x:r.target.x(),y:r.target.y(),rotation:r.target.rotation(),height:r.target.height()*o}),t.history.endTransaction(),null===(i=n.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(T,{textNodeRef:r,element:e,selectAll:l,cursorPosition:_.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) {
|
|
@@ -303,7 +303,7 @@ 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},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
|
|
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){const t=e.getContext("2d").getImageData(0,0,e.width,e.height).data;for(let i=0;i<t.length;i+=4)if(0!==t[i+3])return!0;return!1}function F(e){return!z(e)}function O(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 _=e=>{let t=e.fontSize;for(let i=1;i<50;i++){const i=O(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},R=/^((?!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,y]=o.default.useState(!1),[b,z]=o.default.useState(!0),[k,T]=o.default.useState(!1),[M,$]=o.default.useState(!1),H=o.default.useRef(e.height),P=t.selectedElements.indexOf(e)>=0,C=e.fontSize/3,{textVerticalResizeEnabled:D}=u.flags,L=(0,c.usePrevious)(e.fontFamily),[X]=(0,c.useFontLoader)(t,e.fontFamily);(0,g.useFadeIn)(i);const Y=X?e.fontFamily:L!==e.fontFamily?L:"Arial",j=(0,c.useTextColor)(e).fill,I=O(e,{fontFamily:Y,color:j}),{width:A,height:B}=q(I,e,X);o.default.useEffect(()=>{if(!X)return;if(!e.height)return void e.set({height:B});const{textOverflow:i}=u.flags;if("change-font-size"!==i||l)"resize"===i&&(D&&e.height<B&&t.history.ignore(()=>{e.set({height:B})}),D||e.height===B||t.history.ignore(()=>{e.set({height:B})}));else{const i=_(e);i!==e.fontSize?t.history.ignore(()=>{e.set({fontSize:i})}):e.height!==B&&t.history.ignore(()=>{e.set({height:B})})}});const N=o.default.useRef(0);o.default.useEffect(()=>{l||k||(async()=>{N.current++;const i=N.current,n=(0,p.incrementLoader)(`text ${e.id}`);z(!0);let o=null;const a=R?5:1;for(let r=0;r<a;r++){if(o=await(0,h.htmlToCanvas)({html:I,width:e.width||1,height:e.height||B||1,fontFamily:Y,padding:C,pixelRatio:t._elementsPixelRatio,font:t.fonts.find(e=>e.fontFamily===Y)||w.globalFonts.find(e=>e.fontFamily===Y)}),i!==N.current)return void n();F(o)&&R&&await new Promise(e=>setTimeout(e,50*(r+1)))}o?(r(o),z(!1),s.default.Util.requestAnimFrame(n)):n()})()},[I,l,B,k,Y,e.height,t._elementsPixelRatio]);const V=l||b;o.default.useEffect(()=>d.autorun(()=>{const t=i.current;(0,f.applyFilter)(t,e)}),[n,V,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);let G=0;"middle"===e.verticalAlign&&(G=(e.height-B)/2),"bottom"===e.verticalAlign&&(G=e.height-B);const Q=(0,c.getLineHeight)({fontLoaded:X,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),W=(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*Q*.5),offsetY:e.backgroundPadding*(e.fontSize*Q*.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*Q),height:e.height+e.backgroundPadding*(e.fontSize*Q),cornerRadius:e.backgroundCornerRadius*(e.fontSize*Q*.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:!V,draggable:W?e.draggable&&P:e.draggable,preventDefault:!W||P,opacity:k?0:e.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{$(!0)},onMouseLeave:()=>{$(!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&&T(!0)},onDblTap:()=>{e.contentEditable&&T(!0)},onTransformStart:t=>{y(!0),H.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(B,H.current);e.set({height:t})}e.set({width:i,x:n.x(),y:n.y()})}else if(a){let i="resize"===u.flags.textOverflow?B: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=>{y(!1),z(!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-G,listening:!1,rotation:e.rotation,width:e.width+2*C,height:e.height+2*C,visible:!V,opacity:k?0:e.opacity,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,hideInExport:!e.showInExport}),V&&o.default.createElement(a.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-G},o.default.createElement(x.Html,{divProps:{style:{pointerEvents:"none"}}},o.default.createElement(S,{dangerouslySetInnerHTML:{__html:I},style:{pointerEvents:"none",display:"inline-block"}}))),k&&o.default.createElement(a.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-G},o.default.createElement(x.Html,null,o.default.createElement(E,{html:I,element:e,onChange:t=>{e.set({text:t})},onBlur:e=>{T(!1)}}))),(P||M)&&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) {
|
|
@@ -3280,9 +3280,9 @@ var e=require("process");Object.defineProperty(exports,"__esModule",{value:!0}),
|
|
|
3280
3280
|
},{}],"GGhN":[function(require,module,exports) {
|
|
3281
3281
|
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getCrop=exports.getImageSize=void 0;const t=require("./svg");function e(e){return new Promise(i=>{const h=document.createElement("img");h.onload=(async()=>{0===h.width||0===h.height?i(await(0,t.getSvgSize)(e)):i({width:h.width,height:h.height})}),h.src=e})}function i(t,e){const{width:i,height:h}=t,o=i/h;let r,g;o>=e.width/e.height?(r=e.width,g=e.width/o):(r=e.height*o,g=e.height);const c=(e.width-r)/2,d=(e.height-g)/2;return{cropX:c/e.width,cropY:d/e.height,cropWidth:r/e.width,cropHeight:g/e.height}}exports.getImageSize=e,exports.getCrop=i;
|
|
3282
3282
|
},{"./svg":"B1DI"}],"YsBD":[function(require,module,exports) {
|
|
3283
|
-
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,i,o){void 0===o&&(o=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,o,n)}:function(e,t,i,o){void 0===o&&(o=i),e[o]=t[i]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(null!=i)for(var n in i)"default"!==n&&Object.prototype.hasOwnProperty.call(i,n)&&e(o,i,n);return t(o,i),o};Object.defineProperty(exports,"__esModule",{value:!0}),exports.jsonToHTML=exports.jsonToDOM=exports.fixRatio=void 0;const o=require("./image"),n=i(require("./svg"));async function r(e,t){const i=await l(e),o=document.createElement("canvas");o.width=2*i.width,o.height=2*i.height,o.getContext("2d").drawImage(i,0,0,o.width,o.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 h=o.width*t.cropWidth,c=o.height*t.cropHeight,g=t.width/t.height;let p,d;const u=h/c;return"svg"===t.type?(p=h,d=c):g>=u?(p=h,d=h/g):(p=c*g,d=c),r.drawImage(o,s*o.width,a*o.height,p,d,0,0,n.width,n.height),n.toDataURL("image/png")}const s=(e,t,...i)=>({type:e,props:t,children:i||[]});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 i=new window.Image;i.onload=(()=>{t(i)}),i.src=e,i.crossOrigin="anonymous"}),h=async({element:e,page:t,store:i})=>{let{src:o}=e;if("svg"===e.type){const t=await n.urlToString(o);o=n.replaceColors(t,new Map(Object.entries(e.colorsReplace)))}o=await r(o,e);let a="";return e.flipX&&(a+="scaleX(-1)"),e.flipY&&(a+="scaleY(-1)"),s("img",{src:o,width:"100%",height:"100%",style:{"border-radius":e.cornerRadius+"px",border:e.borderSize?`${e.borderSize}px solid ${e.borderColor}`:"none",transform:a}})},c=async({element:e,page:t,store:i})=>{let o={};
|
|
3283
|
+
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,i,o){void 0===o&&(o=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,o,n)}:function(e,t,i,o){void 0===o&&(o=i),e[o]=t[i]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(null!=i)for(var n in i)"default"!==n&&Object.prototype.hasOwnProperty.call(i,n)&&e(o,i,n);return t(o,i),o};Object.defineProperty(exports,"__esModule",{value:!0}),exports.jsonToHTML=exports.jsonToDOM=exports.fixRatio=void 0;const o=require("./image"),n=i(require("./svg"));async function r(e,t){const i=await l(e),o=document.createElement("canvas");o.width=2*i.width,o.height=2*i.height,o.getContext("2d").drawImage(i,0,0,o.width,o.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 h=o.width*t.cropWidth,c=o.height*t.cropHeight,g=t.width/t.height;let p,d;const u=h/c;return"svg"===t.type?(p=h,d=c):g>=u?(p=h,d=h/g):(p=c*g,d=c),r.drawImage(o,s*o.width,a*o.height,p,d,0,0,n.width,n.height),n.toDataURL("image/png")}const s=(e,t,...i)=>({type:e,props:t,children:i||[]});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 i=new window.Image;i.onload=(()=>{t(i)}),i.src=e,i.crossOrigin="anonymous"}),h=async({element:e,page:t,store:i})=>{let{src:o}=e;if("svg"===e.type){const t=await n.urlToString(o);o=n.replaceColors(t,new Map(Object.entries(e.colorsReplace)))}o=await r(o,e);let a="";return e.flipX&&(a+="scaleX(-1)"),e.flipY&&(a+="scaleY(-1)"),s("img",{src:o,width:"100%",height:"100%",style:Object.assign(Object.assign({},{}),{"border-radius":e.cornerRadius+"px",border:e.borderSize?`${e.borderSize}px solid ${e.borderColor}`:"none",transform:a})})},c=async({element:e,page:t,store:i})=>{let o={};e.fill.indexOf("gradient")>=0&&(o=Object.assign(Object.assign({},o),{"background-color":e.fill,"background-image":e.fill,"background-clip":"text","text-fill-color":"transparent","-webkit-background-clip":"text","-webkit-text-fill-color":"transparent"}));const n=e.backgroundPadding*(e.fontSize*e.lineHeight),r=s("div",{style:{position:"absolute",top:-n/2+"px",left:-n/2+"px",display:e.backgroundEnabled?"block":"none",width:e.width+n+"px",height:e.height+n+"px","background-color":e.backgroundColor,"border-radius":e.backgroundCornerRadius*(e.fontSize*e.lineHeight*.5)+"px"}}),a=s("div",{style:Object.assign(Object.assign({},o),{position:"absolute",top:0,left:0,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 />"));return s("div",{style:{position:"relative"}},r,a)},g=({element:e,type:t})=>{const i={"stroke-width":e.height,stroke:e.color,"line-cap":"round","stroke-linejoin":"round",opacity:e.opacity};return"arrow"===t||"triangle"===t?s("polyline",Object.assign({points:`${3*e.height},${2*-e.height} 0,0 ${3*e.height},${2*e.height}`},i)):"bar"===t?s("polyline",Object.assign({points:`0,${2*-e.height} 0,${2*e.height}`},i)):"circle"===t?s("circle",Object.assign({r:e.height},i)):"square"===t?s("polyline",Object.assign({points:`${-e.height},${-e.height} ${-e.height},${e.height} ${e.height},${e.height} ${e.height},${-e.height}`},i)):null},p=async({element:e,page:t,store:i})=>s("svg",{style:{width:"100%",height:"100%",contain:"layout style size",overflow:"visible"}},s("rect",{x:0,y:0,width:e.width,height:e.height,fill:e.color}),s("g",{transform:`translate(0 ${e.height/2})`},g({element:e,type:e.startHead})),s("g",{transform:`translate(${e.width} ${e.height/2}) rotate(180)`},g({element:e,type:e.endHead}))),d=async({element:e,page:t,store:i,elementHook:o})=>{const n=await Promise.all(e.children.map(e=>f({element:e,page:t,store:i,elementHook:o}))),r=s("div",{style:{"transform-origin":"top left",opacity:e.opacity}},...n);return o&&o({dom:r,element:e})||r},u={image:h,svg:h,text:c,line:p,group:d};async function f({element:e,page:t,store:i,elementHook:o}){let n=await u[e.type];n||(n=(()=>s("div",{})),console.error(`HTML export does not support ${e.type} type...`));const r=await n({element:e,page:t,store:i}),a=[];e.blurEnabled&&a.push(`blur(${e.blurRadius/2}px)`),e.brightnessEnabled&&a.push(`brightness(${100*e.brightness+100}%)`),e.sepiaEnabled&&a.push("sepia()"),e.grayscaleEnabled&&a.push("grayscale()"),e.shadowEnabled&&a.push(`drop-shadow(${e.shadowOffsetX}px ${e.shadowOffsetY}px ${e.shadowBlur}px ${e.shadowColor})`);const l=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:a.join(" ")}},r);return o&&o({dom:l,element:e})||l}async function b({page:e,store:t,elementHook:i}){const n=await Promise.all(e.children.map(o=>f({element:o,page:e,store:t,elementHook:i})));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 i=await l(e.background),n=await r(e.background,Object.assign({width:t.width,height:t.height,x:0,y:0},(0,o.getCrop)({width:t.width,height:t.height},{width:i.width,height:i.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 m({json:e,elementHook:t}){const i=await Promise.all(e.pages.map(i=>b({page:i,store:e,elementHook:t}))),o=[];e.pages.forEach(e=>{e.children.forEach(e=>{"text"===e.type&&-1===o.indexOf(e.fontFamily)&&o.push(e.fontFamily)})});const n=o.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,...i)}exports.jsonToDOM=m;const y=(e,t)=>"object"==typeof t?`${e}="${Object.keys(t).map(e=>`${e}:${t[e]};`).join(" ")}"`:`${e}="${t}"`,w=({dom:e})=>"string"==typeof e?e:e?`<${e.type} ${Object.keys(e.props).map(t=>y(t,e.props[t])).join(" ")}>${e.children.map(e=>w({dom:e})).join("")}</${e.type}>`:"";async function x({json:e,elementHook:t}){const i=await m({json:e,elementHook:t});return w({dom:i})}exports.jsonToHTML=x;
|
|
3284
3284
|
},{"./image":"GGhN","./svg":"B1DI"}],"GRkH":[function(require,module,exports) {
|
|
3285
|
-
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=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,o,i)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=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 o={};if(null!=n)for(var i in n)"default"!==i&&Object.prototype.hasOwnProperty.call(n,i)&&e(o,n,i);return t(o,n),o},o=this&&this.__rest||function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(o=Object.getOwnPropertySymbols(e);i<o.length;i++)t.indexOf(o[i])<0&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(n[o[i]]=e[o[i]])}return n},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.VideoElement=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=n(require("../utils/fonts")),h=require("../utils/loader"),m=require("../utils/unit"),u=require("../utils/deep-equal"),f=require("../utils/wait"),y=require("../utils/html");(0,s.setLivelinessChecking)("ignore");const E=(e,t)=>{e.children&&e.children.forEach(e=>{t(e),E(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),n={};for(var o in t)"_"!==o[0]&&(n[o]=e[o]);return n}).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 n=e.toJSON();return t.id=t.id||(0,r.nanoid)(10),E(n,e=>{e.id=(0,r.nanoid)(10)}),Object.assign(n,t),e.page.addElement(n)},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.VideoElement=exports.ImageElement.named("Video").props({type:"video",duration:0}),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,n){e.colorsReplace.set(t,n)}}));const b=[];function x(e){const t=e.type;if(!t)throw new Error('You must pass "type" attribute to custom model.');const n=exports.Element.named(t).props(e);O[t]=n,b.push(n)}exports.registerShapeModel=x;const v=[...new Array(20)].map((e,t)=>s.types.late(()=>b[t])),w=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,exports.VideoElement,s.types.late(()=>exports.GroupElement),...v);exports.GroupElement=exports.Node.named("Group").props({type:"group",children:s.types.array(w)}).views(e=>({get draggable(){let t=!0;return E(e,e=>{e.draggable||(t=!1)}),t},get resizable(){let t=!0;return E(e,e=>{e.resizable||(t=!1)}),t},get contentEditable(){let t=!0;return E(e,e=>{e.contentEditable||(t=!1)}),t},get styleEditable(){let t=!0;return E(e,e=>{e.styleEditable||(t=!1)}),t},get locked(){let t=!0;return E(e,e=>{e.locked||(t=!1)}),t}})).actions(e=>({set(t){var{draggable:n,contentEditable:i,styleEditable:s,resizable:a}=t,r=o(t,["draggable","contentEditable","styleEditable","resizable"]);void 0!==n&&E(e,e=>{e.set({draggable:n})}),void 0!==i&&E(e,e=>{e.set({contentEditable:i})}),void 0!==s&&E(e,e=>{e.set({styleEditable:s})}),void 0!==a&&E(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,video:exports.VideoElement};function P({key:e,showCredit:t}={key:"",showCredit:!1}){const n=exports.Store.create();return(0,p.validateKey)(e,t),n}exports.Page=s.types.model("Page",{id:s.types.identifier,children:s.types.array(w),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),n={};for(var o in t)"_"!==o[0]&&(n[o]=e[o]);return n}).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,n){const o=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));o.sort((e,t)=>t.index-e.index);for(const{index:i}of o){if(-1==i)continue;const o=i<e.children.length-1&&e.children[i+1],s=t.indexOf(null==o?void 0:o.id)>=0;i===e.children.length-1||s||n(i)}},_forEachElementDown(t,n){const o=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));o.sort((e,t)=>e.index-t.index);for(const{index:i}of o){if(-1==i)continue;const o=i>0&&e.children[i-1],s=t.indexOf(null==o?void 0:o.id)>=0;0===i||s||n(i)}return!1}})).actions(e=>({clone(t={}){const n=e.toJSON();n.children.forEach(e=>{e.id=(0,r.nanoid)(10),E(e,e=>{e.id=(0,r.nanoid)(10)})});const o=Object.assign(Object.assign(Object.assign({},n),{id:(0,r.nanoid)(10)}),t),i=e.store.addPage(o),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 n=O[t.type];if(!n)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 o=n.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.children.push(o),o.selectable&&e.store.selectElements([o.id]),o},canMoveElementsUp(t){let n=!1;return e._forEachElementUp(t,()=>{n=n||!0}),n},moveElementsUp(t){e._forEachElementUp(t,t=>{const n=e.children[t];(0,s.detach)(n),e.children.splice(t+1,0,n)})},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(t){const n=[],o=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?n.push(e):o.push(e)}),e.children.replace(o.concat(n))},canMoveElementsDown(t){let n=!1;return e._forEachElementDown(t,()=>{n=n||!0}),n},moveElementsDown(t){e._forEachElementDown(t,t=>{const n=e.children[t];(0,s.detach)(n),e.children.splice(t-1,0,n)})},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(t){const n=[],o=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?n.push(e):o.push(e)}),e.children.replace(n.concat(o))},setElementZIndex(t,n){const o=e.children.find(e=>e.id===t);o&&((0,s.detach)(o),e.children.remove(o),e.children.splice(n,0,o))},setSize({width:t,height:n,useMagic:o,softChange:i}){if(o){const o=t/e.computedWidth,i=n/e.computedHeight;for(const t of e.children)t.set({x:t.x*o,y:t.y*i}),"text"===t.type?t.set({fontSize:t.fontSize*o,width:Math.max(t.width*o,2)}):"image"===t.type?t.set({width:t.width*o,height:t.height*i}):"svg"===t.type&&t.set({width:Math.max(t.width*o,2),height:Math.max(t.height*o,2)})}"auto"!==e.width||i||(e.width=t),"auto"!==e.height||i||(e.height=n)}})).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,isPlaying:!1,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 n of e.pages)for(const e of n.children)if(e.id===t)return e}).filter(e=>!!e)},get children(){return e.pages},get selectedShapes(){const t=[];return e.selectedElementsIds.forEach(n=>{for(const o of e.pages)for(const e of o.children)e.id===n&&"group"!==e.type&&t.push(e),"group"===e.type&&e.id===n&&t.push(...e.children)}),t},get activePage(){return e.pages.slice().find(t=>t.id===e._activePageId)||(e.pages.length?e.pages[0]:null)},get duration(){let t=0;return E(e,e=>{"video"===e.type&&(t=Math.max(t,e.duration))}),t}})).actions(e=>({afterCreate(){e.history.canUndo},setCurrentTime(t){e.currentTime=t},play(){e.currentTime=0,e.isPlaying=!0,requestAnimationFrame(e.seek)},seek(){e.currentTime+=1e3/60,e.isPlaying&&e.currentTime<e.duration?requestAnimationFrame(e.seek):e.stop()},stop(){e.isPlaying=!1,e.currentTime=0},setUnit({unit:t,dpi:n}){e.unit=t||e.unit,e.dpi=n||e.dpi},setRole(t){e.role=t},find(t){let n;return E({children:e.pages},e=>{!n&&t(e)&&(n=e)}),n},getElementById:t=>e.find(e=>e.id===t),addPage(t){const n=exports.Page.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.pages.push(n),e._activePageId=n.id,n},selectPage(t){e._activePageId=t},selectElements(t){const n=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)(n)},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,n,o){e.pages.forEach(e=>{e.setSize({width:t,height:n,useMagic:o,softChange:!0})}),e.width=t,e.height=n},setPageZIndex(t,n){const o=e.pages.find(e=>e.id===t);o&&((0,s.detach)(o),e.pages.remove(o),e.pages.splice(n,0,o))},deletePages(t){const n=e.pages.indexOf(e.activePage);t.forEach(t=>{const n=e.pages.find(e=>e.id===t);(0,s.destroy)(n)});const o=Math.min(e.pages.length-1,n),i=e.pages[o];i&&(e._activePageId=i.id),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},groupElements(t){const n=t.map(t=>e.getElementById(t));n.forEach(e=>{e&&(0,s.detach)(e)});const o=e.activePage,i=exports.GroupElement.create({id:(0,r.nanoid)(10),children:(0,s.cast)(n)});return o.children.push(i),e.selectedElementsIds=(0,s.cast)([i.id]),i},ungroupElements(t){const n=t.map(t=>e.getElementById(t)),o=[];n.forEach(e=>{if(e&&"group"===e.type){const t=e.page,n=t.children.indexOf(e);e.children.forEach(e=>{o.push(e.id)}),e.children.forEach(e=>{(0,s.detach)(e),t.children.push(e)}),t.children.splice(n,1)}}),e.selectedElementsIds=(0,s.cast)(o)},deleteElements(t){t.forEach(t=>{e.pages.forEach(e=>{const n=e.children.find(e=>e.id===t);n&&(0,s.destroy)(n)})}),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},on(t,n){if("change"===t){let t=e.toJSON();return(0,s.onSnapshot)(e,o=>{const i=e.toJSON();!(0,u.deepEqual)(t,i)&&(t=i,n(i))})}},async _toCanvas({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s}={}){var a;const r=t||1;o=o||(null===(a=e.pages[0])||void 0===a?void 0:a.id);const d=e.pages.find(e=>e.id===o);if(!d)throw new Error(`No page for export with id ${o}`);null==d||d.set({_exporting:!0});const c=await(0,f.waitTillAvailable)(()=>l.default.stages.find(e=>e.getAttr("pageId")===o));if(!c)throw new Error(`Export is failed. Can not find stage for page ${o}. 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 m=p.findOne(".elements-container"),u=m.clip();m.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 E=p.find(e=>!e.visible()&&e.getAttr("editModeEnabled"));E.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.show()}),n&&p.find(".page-background").forEach(e=>e.hide());const b=s?d.bleed:0;let x=b;e.bleedVisible&&s?x=0:e.bleedVisible&&!s&&(x=-d.bleed);const v=document.createElement("canvas");v.width=(d.computedWidth+2*b)*r,v.height=(d.computedHeight+2*b)*r;const w=v.getContext("2d");"image/jpeg"===i&&(w.fillStyle="white",w.fillRect(0,0,v.width,v.height));const O=p.toCanvas({x:p.x()-x*p.scaleX(),y:p.y()-x*p.scaleY(),width:(d.computedWidth+2*b)*p.scaleX(),height:(d.computedHeight+2*b)*p.scaleY(),pixelRatio:1/p.scaleX()*r});return w.drawImage(O,0,0),l.default.Util.releaseCanvas(O),n&&p.find(".page-background").forEach(e=>e.show()),y.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),E.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),m.clip(u),null==d||d.set({_exporting:!1}),v},async toDataURL({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s}),d=r.toDataURL(i,a);return l.default.Util.releaseCanvas(r),d},async toBlob({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:n,pageId:o,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:n}=t,i=o(t,["fileName"]);const s=i.mimeType||"image/png",a=s.split("/")[1];(0,d.downloadFile)(await e.toDataURL(i),n||"polotno."+a,s)},async _toPDF(t){const n=t.dpi||e.dpi,o=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,m.pxToUnit)({px:e,unit:i,dpi:n}),p=r[0]||{},g=t.includeBleed?p.bleed:0,h=d(p.computedWidth+2*g),u=d(p.computedHeight+2*g);var f=new l({unit:i,orientation:h>u?"landscape":"portrait",format:[h,u],compress:!0,putOnlyUsedFonts:!0});f.deletePage(1);const y=e._elementsPixelRatio;e.setElementsPixelRatio(s),await new Promise(e=>setTimeout(e));const E=((e,t)=>{for(var n=[],o=0;o<e.length;o+=t)n.push(e.slice(o,o+t));return n})(r,o);for(const c of E){const n=c.map(async n=>{const o=t.includeBleed?n.bleed:0,i=d(n.computedWidth+2*o),a=d(n.computedHeight+2*o);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 o=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:n.id,pixelRatio:l}));if(o.length>20)return{url:o,width:i,height:a};l*=.8}});(await Promise.all(n)).forEach(({url:e,width:t,height:n})=>{f.addPage([t,n],t>n?"landscape":"portrait"),f.addImage(e,0,0,t,n,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 n=await e.toHTML(),o="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(n)));(0,d.downloadFile)(o,t||"polotno.html")},async saveAsPDF(t={}){var{fileName:n}=t,i=o(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},i))).save(n||"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,n=!1){var o;const i=Object.assign({},t),a=e.pages.indexOf(e.activePage);let r=null===(o=i.pages[a]||i.pages[0])||void 0===o?void 0:o.id;i._activePageId=r;const l=Object.assign({},(0,s.getSnapshot)(e));Object.assign(l,i),l.history=n?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 n=e.fonts.find(e=>e.fontFamily===t)||g.globalFonts.find(e=>e.fontFamily===t);n?g.injectCustomFont(n):g.injectGoogleFont(t),await g.loadFont(t)}})),exports.createStore=P,exports.default=P;
|
|
3285
|
+
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=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,o,i)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=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 o={};if(null!=n)for(var i in n)"default"!==i&&Object.prototype.hasOwnProperty.call(n,i)&&e(o,n,i);return t(o,n),o},o=this&&this.__rest||function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(o=Object.getOwnPropertySymbols(e);i<o.length;i++)t.indexOf(o[i])<0&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(n[o[i]]=e[o[i]])}return n},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.VideoElement=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=n(require("../utils/fonts")),h=require("../utils/loader"),m=require("../utils/unit"),u=require("../utils/deep-equal"),f=require("../utils/wait"),y=require("../utils/html");(0,s.setLivelinessChecking)("ignore");const E=(e,t)=>{e.children&&e.children.forEach(e=>{t(e),E(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),n={};for(var o in t)"_"!==o[0]&&(n[o]=e[o]);return n}).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 n=e.toJSON();return t.id=t.id||(0,r.nanoid)(10),E(n,e=>{e.id=(0,r.nanoid)(10)}),Object.assign(n,t),e.page.addElement(n)},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.VideoElement=exports.ImageElement.named("Video").props({type:"video",duration:0}),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,n){e.colorsReplace.set(t,n)}}));const b=[];function x(e){const t=e.type;if(!t)throw new Error('You must pass "type" attribute to custom model.');const n=exports.Element.named(t).props(e);O[t]=n,b.push(n)}exports.registerShapeModel=x;const w=[...new Array(20)].map((e,t)=>s.types.late(()=>b[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,exports.VideoElement,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 E(e,e=>{e.draggable||(t=!1)}),t},get resizable(){let t=!0;return E(e,e=>{e.resizable||(t=!1)}),t},get contentEditable(){let t=!0;return E(e,e=>{e.contentEditable||(t=!1)}),t},get styleEditable(){let t=!0;return E(e,e=>{e.styleEditable||(t=!1)}),t},get locked(){let t=!0;return E(e,e=>{e.locked||(t=!1)}),t}})).actions(e=>({set(t){var{draggable:n,contentEditable:i,styleEditable:s,resizable:a}=t,r=o(t,["draggable","contentEditable","styleEditable","resizable"]);void 0!==n&&E(e,e=>{e.set({draggable:n})}),void 0!==i&&E(e,e=>{e.set({contentEditable:i})}),void 0!==s&&E(e,e=>{e.set({styleEditable:s})}),void 0!==a&&E(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,video:exports.VideoElement};function P({key:e,showCredit:t}={key:"",showCredit:!1}){const n=exports.Store.create();return(0,p.validateKey)(e,t),n}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),n={};for(var o in t)"_"!==o[0]&&(n[o]=e[o]);return n}).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,n){const o=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));o.sort((e,t)=>t.index-e.index);for(const{index:i}of o){if(-1==i)continue;const o=i<e.children.length-1&&e.children[i+1],s=t.indexOf(null==o?void 0:o.id)>=0;i===e.children.length-1||s||n(i)}},_forEachElementDown(t,n){const o=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));o.sort((e,t)=>e.index-t.index);for(const{index:i}of o){if(-1==i)continue;const o=i>0&&e.children[i-1],s=t.indexOf(null==o?void 0:o.id)>=0;0===i||s||n(i)}return!1}})).actions(e=>({clone(t={}){const n=e.toJSON();n.children.forEach(e=>{e.id=(0,r.nanoid)(10),E(e,e=>{e.id=(0,r.nanoid)(10)})});const o=Object.assign(Object.assign(Object.assign({},n),{id:(0,r.nanoid)(10)}),t),i=e.store.addPage(o),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 n=O[t.type];if(!n)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 o=n.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.children.push(o),o.selectable&&e.store.selectElements([o.id]),o},canMoveElementsUp(t){let n=!1;return e._forEachElementUp(t,()=>{n=n||!0}),n},moveElementsUp(t){e._forEachElementUp(t,t=>{const n=e.children[t];(0,s.detach)(n),e.children.splice(t+1,0,n)})},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(t){const n=[],o=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?n.push(e):o.push(e)}),e.children.replace(o.concat(n))},canMoveElementsDown(t){let n=!1;return e._forEachElementDown(t,()=>{n=n||!0}),n},moveElementsDown(t){e._forEachElementDown(t,t=>{const n=e.children[t];(0,s.detach)(n),e.children.splice(t-1,0,n)})},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(t){const n=[],o=[];e.children.forEach(e=>{t.indexOf(e.id)>=0?n.push(e):o.push(e)}),e.children.replace(n.concat(o))},setElementZIndex(t,n){const o=e.children.find(e=>e.id===t);o&&((0,s.detach)(o),e.children.remove(o),e.children.splice(n,0,o))},setSize({width:t,height:n,useMagic:o,softChange:i}){if(o){const o=t/e.computedWidth,i=n/e.computedHeight;for(const t of e.children)t.set({x:t.x*o,y:t.y*i}),"text"===t.type?t.set({fontSize:t.fontSize*o,width:Math.max(t.width*o,2)}):"image"===t.type?t.set({width:t.width*o,height:t.height*i}):"svg"===t.type&&t.set({width:Math.max(t.width*o,2),height:Math.max(t.height*o,2)})}"auto"!==e.width||i||(e.width=t),"auto"!==e.height||i||(e.height=n)}})).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,isPlaying:!1,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 n of e.pages)for(const e of n.children)if(e.id===t)return e}).filter(e=>!!e)},get children(){return e.pages},get selectedShapes(){const t=[];return e.selectedElementsIds.forEach(n=>{for(const o of e.pages)for(const e of o.children)e.id===n&&"group"!==e.type&&t.push(e),"group"===e.type&&e.id===n&&t.push(...e.children)}),t},get activePage(){return e.pages.slice().find(t=>t.id===e._activePageId)||(e.pages.length?e.pages[0]:null)},get duration(){let t=0;return E(e,e=>{"video"===e.type&&(t=Math.max(t,e.duration))}),t}})).actions(e=>({afterCreate(){e.history.canUndo},setCurrentTime(t){e.currentTime=t},play(){e.currentTime=0,e.isPlaying=!0,requestAnimationFrame(e.seek)},seek(){e.currentTime+=1e3/60,e.isPlaying&&e.currentTime<e.duration?requestAnimationFrame(e.seek):e.stop()},stop(){e.isPlaying=!1,e.currentTime=0},setUnit({unit:t,dpi:n}){e.unit=t||e.unit,e.dpi=n||e.dpi},setRole(t){e.role=t},find(t){let n;return E({children:e.pages},e=>{!n&&t(e)&&(n=e)}),n},getElementById:t=>e.find(e=>e.id===t),addPage(t){const n=exports.Page.create(Object.assign({id:(0,r.nanoid)(10)},t));return e.pages.push(n),e._activePageId=n.id,n},selectPage(t){e._activePageId=t},selectElements(t){const n=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)(n)},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,n,o){e.pages.forEach(e=>{e.setSize({width:t,height:n,useMagic:o,softChange:!0})}),e.width=t,e.height=n},setPageZIndex(t,n){const o=e.pages.find(e=>e.id===t);o&&((0,s.detach)(o),e.pages.remove(o),e.pages.splice(n,0,o))},deletePages(t){const n=e.pages.indexOf(e.activePage);t.forEach(t=>{const n=e.pages.find(e=>e.id===t);(0,s.destroy)(n)});const o=Math.min(e.pages.length-1,n),i=e.pages[o];i&&(e._activePageId=i.id),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},groupElements(t){const n=t.map(t=>e.getElementById(t));n.forEach(e=>{e&&(0,s.detach)(e)});const o=e.activePage,i=exports.GroupElement.create({id:(0,r.nanoid)(10),children:(0,s.cast)(n)});return o.children.push(i),e.selectedElementsIds=(0,s.cast)([i.id]),i},ungroupElements(t){const n=t.map(t=>e.getElementById(t)),o=[];n.forEach(e=>{if(e&&"group"===e.type){const t=e.page,n=t.children.indexOf(e);e.children.forEach(e=>{o.push(e.id)}),e.children.forEach(e=>{(0,s.detach)(e),t.children.push(e)}),t.children.splice(n,1)}}),e.selectedElementsIds=(0,s.cast)(o)},deleteElements(t){t.forEach(t=>{e.pages.forEach(e=>{const n=e.children.find(e=>e.id===t);n&&(0,s.destroy)(n)})}),e.selectedElementsIds=(0,s.cast)(e.selectedElementsIds.filter(t=>e.getElementById(t)))},on(t,n){if("change"===t){let t=e.toJSON();return(0,s.onSnapshot)(e,o=>{const i=e.toJSON();!(0,u.deepEqual)(t,i)&&(t=i,n(i))})}},async _toCanvas({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s}={}){var a;const r=t||1;o=o||(null===(a=e.pages[0])||void 0===a?void 0:a.id);const d=e.pages.find(e=>e.id===o);if(!d)throw new Error(`No page for export with id ${o}`);null==d||d.set({_exporting:!0});const c=await(0,f.waitTillAvailable)(()=>l.default.stages.find(e=>e.getAttr("pageId")===o));if(!c)throw new Error(`Export is failed. Can not find stage for page ${o}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);const p=!!c.findOne(".page-container");await e.waitLoading();const g=c.findOne(".page-container");if(!g)throw new Error(`Export is failed. Can't find page container. ${p}`);c.find("Transformer").forEach(e=>e.visible(!1)),g.find(".page-background").forEach(e=>e.shadowEnabled(!1)),g.find(".page-background").forEach(e=>e.strokeEnabled(!1)),g.find(".highlighter").forEach(e=>e.visible(!1));const h=g.findOne(".page-background-group"),m=h.clip();h.clip({x:null,y:null,width:null,height:null});const u=g.findOne(".elements-container"),y=u.clip();u.clip({x:null,y:null,width:null,height:null});const E=g.find(e=>e.getAttr("hideInExport"));E.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.hide()});const b=g.find(e=>!e.visible()&&e.getAttr("editModeEnabled"));b.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.show()}),n&&g.find(".page-background").forEach(e=>e.hide());const x=s?d.bleed:0;let w=x;e.bleedVisible&&s?w=0:e.bleedVisible&&!s&&(w=-d.bleed);const v=document.createElement("canvas");v.width=(d.computedWidth+2*x)*r,v.height=(d.computedHeight+2*x)*r;const O=v.getContext("2d");"image/jpeg"===i&&(O.fillStyle="white",O.fillRect(0,0,v.width,v.height));const P=g.toCanvas({x:g.x()-w*g.scaleX(),y:g.y()-w*g.scaleY(),width:(d.computedWidth+2*x)*g.scaleX(),height:(d.computedHeight+2*x)*g.scaleY(),pixelRatio:1/g.scaleX()*r});return O.drawImage(P,0,0),l.default.Util.releaseCanvas(P),n&&g.find(".page-background").forEach(e=>e.show()),E.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),b.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),g.find(".page-background").forEach(e=>e.shadowEnabled(!0)),g.find(".page-background").forEach(e=>e.strokeEnabled(!0)),c.find("Transformer").forEach(e=>e.visible(!0)),g.find(".highlighter").forEach(e=>e.visible(!0)),h.clip(m),u.clip(y),null==d||d.set({_exporting:!1}),v},async toDataURL({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s}),d=r.toDataURL(i,a);return l.default.Util.releaseCanvas(r),d},async toBlob({pixelRatio:t,ignoreBackground:n,pageId:o,mimeType:i,includeBleed:s,quality:a}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:n,pageId:o,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:n}=t,i=o(t,["fileName"]);const s=i.mimeType||"image/png",a=s.split("/")[1];(0,d.downloadFile)(await e.toDataURL(i),n||"polotno."+a,s)},async _toPDF(t){const n=t.dpi||e.dpi,o=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,m.pxToUnit)({px:e,unit:i,dpi:n}),p=r[0]||{},g=t.includeBleed?p.bleed:0,h=d(p.computedWidth+2*g),u=d(p.computedHeight+2*g);var f=new l({unit:i,orientation:h>u?"landscape":"portrait",format:[h,u],compress:!0,putOnlyUsedFonts:!0});f.deletePage(1);const y=e._elementsPixelRatio;e.setElementsPixelRatio(s),await new Promise(e=>setTimeout(e));const E=((e,t)=>{for(var n=[],o=0;o<e.length;o+=t)n.push(e.slice(o,o+t));return n})(r,o);for(const c of E){const n=c.map(async n=>{const o=t.includeBleed?n.bleed:0,i=d(n.computedWidth+2*o),a=d(n.computedHeight+2*o);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 o=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:n.id,pixelRatio:l}));if(o.length>20)return{url:o,width:i,height:a};l*=.8}});(await Promise.all(n)).forEach(({url:e,width:t,height:n})=>{f.addPage([t,n],t>n?"landscape":"portrait"),f.addImage(e,0,0,t,n,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 n=await e.toHTML(),o="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(n)));(0,d.downloadFile)(o,t||"polotno.html")},async saveAsPDF(t={}){var{fileName:n}=t,i=o(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},i))).save(n||"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,n=!1){var o;const i=Object.assign({},t),a=e.pages.indexOf(e.activePage);let r=null===(o=i.pages[a]||i.pages[0])||void 0===o?void 0:o.id;i._activePageId=r;const l=Object.assign({},(0,s.getSnapshot)(e));Object.assign(l,i),l.history=n?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 n=e.fonts.find(e=>e.fontFamily===t)||g.globalFonts.find(e=>e.fontFamily===t);n?g.injectCustomFont(n):g.injectGoogleFont(t),await g.loadFont(t)}})),exports.createStore=P,exports.default=P;
|
|
3286
3286
|
},{"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) {
|
|
3287
3287
|
"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;
|
|
3288
3288
|
},{}],"Tz78":[function(require,module,exports) {
|
|
@@ -4241,8 +4241,8 @@ var r=require("../lib").GenIcon;module.exports=function(t){return r({tag:"svg",a
|
|
|
4241
4241
|
}
|
|
4242
4242
|
`;exports.Toolbar=(0,o.observer)(({store:e,downloadButtonEnabled:o,hideTextFontFamily:r,hideTextSpacing:a,hideTextEffects:d,hideImageFlip:u,hideImageEffects:s,hideImageCrop:c,hideImageFit:T,hideImageRemoveBackground:F,hideSvgEffects:k,hidePosition:w,hideOpacity:B,hideDuplicate:P,hideLock:R,hideRemove:S,components:D={}})=>{const _=1===new Set(e.selectedElements.map(e=>e.type)).size,C=1===e.selectedElements.length,L=e.selectedElements[0],O=e.selectedElements.every(e=>e.styleEditable);let A=O&&C&&y[L.type];_&&"text"===(null==L?void 0:L.type)?A=y[L.type]:e.selectedElements.length>1&&(A=y.many),C&&"text"===L.type&&x.flags.htmlRenderEnabled&&(A=n.HtmlToolbar);const G=C&&L._cropModeEnabled,H=(null==D?void 0:D.ActionControls)||(o?m.DownloadButton:null),M=(null==D?void 0:D.Position)||g.PositionPicker,j=(null==D?void 0:D.Opacity)||b.OpacityPicker,N=(null==D?void 0:D.Lock)||f.LockButton,z=(null==D?void 0:D.Duplicate)||p.DuplicateButton,$=(null==D?void 0:D.Remove)||h.RemoveButton,J=(null==D?void 0:D.Group)||E.GroupButton,K=(null==D?void 0:D.History)||l.HistoryButtons,Q=[r,a,d,u,s,c,T,F,k,w,B,P,R,S],U=["hideTextFontFamily","hideTextSpacing","hideTextEffects","hideImageFlip","hideImageEffects","hideImageCrop","hideImageFit","hideImageRemoveBackground","hideSvgEffects","hidePosition","hideOpacity","hideDuplicate","hideLock","hideRemove"];return t.default.useEffect(()=>{const e=[];Q.forEach((t,o)=>{void 0!==t&&e.push(o)}),e.length>0&&console.warn(`Toolbar props ${e.map(e=>U[e]).join(", ")} are deprecated. Please use components API instead instead. See https://polotno.com/docs/toolbar`)},Q),t.default.createElement(q,{className:"bp4-navbar"},t.default.createElement(I,null,!G&&t.default.createElement(K,{store:e}),A&&O&&t.default.createElement(A,{store:e,hideTextFontFamily:r,hideTextSpacing:a,hideTextEffects:d,hideImageFlip:u,hideImageEffects:s,hideImageCrop:c,hideImageFit:T,hideSvgEffects:k,hideImageRemoveBackground:F,components:D}),!G&&t.default.createElement(i.Navbar.Group,{align:i.Alignment.RIGHT},"admin"===e.role&&t.default.createElement(v.AdminButton,{store:e}),t.default.createElement(J,{store:e}),!w&&t.default.createElement(M,{store:e}),!B&&O&&t.default.createElement(j,{store:e}),!R&&t.default.createElement(N,{store:e}),!P&&t.default.createElement(z,{store:e}),!S&&t.default.createElement($,{store:e}),H&&t.default.createElement(t.default.Fragment,null,t.default.createElement(i.Divider,{style:{height:"100%",margin:"0 15px"}}),t.default.createElement(H,{store:e})))))}),exports.default=exports.Toolbar;
|
|
4243
4243
|
},{"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) {
|
|
4244
|
-
"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
|
|
4244
|
+
"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.setAssetLoadTimeout=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}}),Object.defineProperty(exports,"setAssetLoadTimeout",{enumerable:!0,get:function(){return l.setAssetLoadTimeout}});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 d=require("./utils/flags");Object.defineProperty(exports,"unstable_setRemoveBackgroundEnabled",{enumerable:!0,get:function(){return d.useRemoveBackground}});var x=require("./utils/flags");Object.defineProperty(exports,"unstable_useHtmlTextRender",{enumerable:!0,get:function(){return x.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 P=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextVerticalResizeEnabled",{enumerable:!0,get:function(){return P.setTextVerticalResizeEnabled}});
|
|
4245
4245
|
},{"./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) {
|
|
4246
|
-
"use strict";var e=
|
|
4246
|
+
"use strict";var e=l(require("react")),t=l(require("react-dom/client")),o=require("polotno/canvas/workspace"),r=require("polotno/model/store"),a=require("polotno/canvas/use-fadein"),n=require("polotno/config"),s=require("polotno/utils/fonts");function l(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:s.addGlobalFont,unstable_useHtmlTextRender:n.unstable_useHtmlTextRender,unstable_setTextVerticalResizeEnabled:n.unstable_setTextVerticalResizeEnabled,unstable_setTextOverflow:n.unstable_setTextOverflow,onLoadError:n.onLoadError,setAssetLoadTimeout:n.setAssetLoadTimeout};var d=t.default.createRoot(document.getElementById("root"));d.render(e.default.createElement(o.Workspace,{store:i}));
|
|
4247
4247
|
},{"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)
|
|
4248
|
-
//# sourceMappingURL=client.
|
|
4248
|
+
//# sourceMappingURL=client.51dfa0bd.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.
|
|
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.51dfa0bd.js"></script> </body></html>
|
package/instance.js
CHANGED
|
@@ -81,7 +81,25 @@ module.exports.createInstance = async ({
|
|
|
81
81
|
: firstPage;
|
|
82
82
|
|
|
83
83
|
try {
|
|
84
|
+
if (args[1]?.assetLoadTimeout) {
|
|
85
|
+
await page.evaluate((timeout) => {
|
|
86
|
+
if (window.config && window.config.setAssetLoadTimeout) {
|
|
87
|
+
window.config.setAssetLoadTimeout(timeout);
|
|
88
|
+
}
|
|
89
|
+
}, args[1].assetLoadTimeout);
|
|
90
|
+
}
|
|
91
|
+
await page.evaluate(() => {
|
|
92
|
+
if (window.config?.onLoadError) {
|
|
93
|
+
window.config.onLoadError((error) => {
|
|
94
|
+
window._polotnoError = error;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
84
98
|
const result = await page.evaluate(func, ...args);
|
|
99
|
+
const error = await page.evaluate(() => window._polotnoError);
|
|
100
|
+
if (error) {
|
|
101
|
+
throw new Error(error);
|
|
102
|
+
}
|
|
85
103
|
if (useParallelPages) {
|
|
86
104
|
await page.close();
|
|
87
105
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polotno-node",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"description": "Polotno workflow from NodeJS",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"test": "
|
|
7
|
+
"test": "ava",
|
|
8
8
|
"build": "rm -rf ./dist && parcel build ./client.html --public-url ./ && rm ./dist/*js.map",
|
|
9
9
|
"dev": "parcel ./client.html"
|
|
10
10
|
},
|
|
@@ -15,8 +15,11 @@
|
|
|
15
15
|
"README.md"
|
|
16
16
|
],
|
|
17
17
|
"devDependencies": {
|
|
18
|
+
"ava": "^5.2.0",
|
|
18
19
|
"parcel-bundler": "^1.12.4",
|
|
19
|
-
"
|
|
20
|
+
"pixelmatch": "^5.3.0",
|
|
21
|
+
"pngjs": "^7.0.0",
|
|
22
|
+
"polotno": "^1.8.5",
|
|
20
23
|
"react": "^18.2.0",
|
|
21
24
|
"react-dom": "^18.2.0"
|
|
22
25
|
},
|