polotno 0.37.0 → 0.37.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/canvas/image-element.js +1 -1
  2. package/canvas/page.js +1 -1
  3. package/carota/src/carota.d.ts +10 -0
  4. package/carota/src/carota.js +1 -0
  5. package/carota/src/characters.d.ts +2 -0
  6. package/carota/src/characters.js +1 -0
  7. package/carota/src/codes.d.ts +5 -0
  8. package/carota/src/codes.js +1 -0
  9. package/carota/src/doc.d.ts +2 -0
  10. package/carota/src/doc.js +1 -0
  11. package/carota/src/dom.d.ts +6 -0
  12. package/carota/src/dom.js +1 -0
  13. package/carota/src/editor.d.ts +1 -0
  14. package/carota/src/editor.js +1 -0
  15. package/carota/src/frame.d.ts +2 -0
  16. package/carota/src/frame.js +1 -0
  17. package/carota/src/html.d.ts +1 -0
  18. package/carota/src/html.js +1 -0
  19. package/carota/src/line.d.ts +2 -0
  20. package/carota/src/line.js +1 -0
  21. package/carota/src/node.d.ts +27 -0
  22. package/carota/src/node.js +1 -0
  23. package/carota/src/part.d.ts +2 -0
  24. package/carota/src/part.js +1 -0
  25. package/carota/src/positionedword.d.ts +2 -0
  26. package/carota/src/positionedword.js +1 -0
  27. package/carota/src/range.d.ts +17 -0
  28. package/carota/src/range.js +1 -0
  29. package/carota/src/rect.d.ts +2 -0
  30. package/carota/src/rect.js +1 -0
  31. package/carota/src/runs.d.ts +27 -0
  32. package/carota/src/runs.js +1 -0
  33. package/carota/src/split.d.ts +2 -0
  34. package/carota/src/split.js +1 -0
  35. package/carota/src/text.d.ts +17 -0
  36. package/carota/src/text.js +1 -0
  37. package/carota/src/util.d.ts +5 -0
  38. package/carota/src/util.js +1 -0
  39. package/carota/src/word.d.ts +2 -0
  40. package/carota/src/word.js +1 -0
  41. package/carota/src/wrap.d.ts +2 -0
  42. package/carota/src/wrap.js +1 -0
  43. package/model/store.d.ts +1 -1
  44. package/model/store.js +1 -1
  45. package/package.json +2 -2
  46. package/polotno.bundle.js +1 -361
  47. package/rich-text-element.d.ts +11 -0
  48. package/rich-text-element.js +1 -0
  49. package/toolbar/filters-picker.d.ts +527 -2
  50. package/toolbar/filters-picker.js +1 -1
  51. package/toolbar/opacity-picker.js +1 -1
  52. package/toolbar/remove-background-button.js +1 -1
  53. package/toolbar/toolbar.js +1 -1
  54. package/utils/validate-key.d.ts +1 -1
  55. package/utils/validate-key.js +1 -1
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImageElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),svg=__importStar(require("../utils/svg")),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein");async function getFixedUrl(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await svg.urlToString(e),r=svg.fixSize(t);return svg.svgToURL(r)}const useSizeFixer=e=>{const[t,r]=react_1.default.useState(e);return react_1.default.useEffect((()=>{(async()=>{const a=await getFixedUrl(e);a!==t&&r(a)})()}),[e]),t},useFlip=(e,t,r)=>react_1.default.useMemo((()=>{var a,o;const{flipX:i,flipY:n}=e,h="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0;if(!i&&!n&&!h)return t;if(!t||!t.width||!t.height)return null;const c=document.createElement("canvas");let d=1;"svg"===e.type&&(d=Math.max(e.width/t.width*r,e.height/t.height*r)),c.width=Math.max(t.width*d,1),c.height=Math.max(t.height*d,1);let l=i?-c.width:0,u=n?-c.height:0;return null===(a=c.getContext("2d"))||void 0===a||a.scale(i?-1:1,n?-1:1),null===(o=c.getContext("2d"))||void 0===o||o.drawImage(t,l,u,c.width,c.height),c}),[e.flipX,e.flipY,t,e.width,e.height,r]);function getCrop(e,t){const r=t.width/t.height;let a,o;r>=e.width/e.height?(a=e.width,o=e.width/r):(a=e.height*r,o=e.height);return{x:(e.width-a)/2,y:(e.height-o)/2,width:a,height:o}}function downsample(e,t,r,a,o,i,n){for(var h=new ImageData(t,r),c=new Int32Array(e.data.buffer),d=e.width,l=new Int32Array(h.data.buffer),u=h.width,s=t/i,g=r/n,f=Math.round(1/s),m=Math.round(1/g),_=f*m,p=0;p<h.height;p++)for(var w=0;w<u;w++){for(var x=a+Math.round(w/s)+(o+Math.round(p/g))*d,v=0,M=0,y=0,E=0,b=0;b<m;b++)for(var k=0;k<f;k++){var I=c[x+k+b*d];v+=I<<24>>>24,M+=I<<16>>>24,y+=I<<8>>>24,E+=I>>>24}v=Math.round(v/_),M=Math.round(M/_),y=Math.round(y/_),E=Math.round(E/_),l[w+p*u]=E<<24|y<<16|M<<8|v}return h}function downScaleCanvas(e,t){var r,a;const o=document.createElement("canvas");o.width=e.width,o.height=e.height,null===(r=o.getContext("2d"))||void 0===r||r.drawImage(e,0,0,o.width,o.height);const i=downsample(o.getContext("2d").getImageData(0,0,o.width,o.height),Math.floor(o.width*t),Math.floor(o.height*t),0,0,o.width,o.height);return o.width=Math.floor(o.width*t),o.height=Math.floor(o.height*t),null===(a=o.getContext("2d"))||void 0===a||a.putImageData(i,0,0),o}const useMask=(e,t)=>{const[r,a]=useImageHook(e.maskSrc,"anonymous"),o=e.maskSrc?a:"loaded";return(0,exports.useImageLoader)(o),react_1.default.useMemo((()=>{if(!r)return t;if(!t||!t.width||!t.height)return t;const a=document.createElement("canvas");a.width=Math.max(t.width,1),a.height=Math.max(t.height,1);const o=a.getContext("2d");if(!o)return t;o.drawImage(t,0,0),o.globalCompositeOperation="source-in";const i=getCrop(r,e);return o.drawImage(r,i.x,i.y,i.width,i.height,0,0,t.width,t.height),a}),[t,r,e.width,e.height])},useCornerRadius=(e,t,r,a,o=0,i=!1)=>{const n=react_1.default.useMemo((()=>{if(t&&t.width&&t.height)return document.createElement("canvas")}),[t]);return react_1.default.useLayoutEffect((()=>{if(!n||!t)return;const h=Math.floor(Math.max(e.width*a,1)),c=Math.floor(Math.max(e.height*a,1));n.width=h,n.height=c;const d=n.getContext("2d");if(!d)return;const l=Math.min(o*a,h/2,c/2);l&&(d.beginPath(),d.moveTo(l,0),d.lineTo(h-l,0),d.arc(h-l,l,l,3*Math.PI/2,0,!1),d.lineTo(h,c-l),d.arc(h-l,c-l,l,0,Math.PI/2,!1),d.lineTo(l,c),d.arc(l,c-l,l,Math.PI/2,Math.PI,!1),d.lineTo(0,l),d.arc(l,l,l,Math.PI,3*Math.PI/2,!1),d.clip());const u=Math.max(e.width/r.width,e.height/r.height)*a,s=u<1&&!i,g=s?downScaleCanvas(t,u):t,f=s?{x:r.x*u,y:r.y*u,width:r.width*u,height:r.height*u}:r;d.drawImage(g,f.x,f.y,f.width,f.height,0,0,n.width,n.height)}),[n,e.width,e.height,r.x,r.y,r.width,r.height,o,a,i]),n},useClip=(e,t,r,a)=>{const o=useSizeFixer(e.clipSrc||""),[i]=useImageHook(o,"anonymous"),n=react_1.default.useMemo((()=>{if(t&&i)return document.createElement("canvas")}),[t,i]);react_1.default.useLayoutEffect((()=>{var a;if(!i)return;if(!t||!t.width||!t.height)return;if(!i||!i.width||!i.height)return;if(!n)return;const o=document.createElement("canvas"),h=Math.max(e.width/i.width*r,e.height/i.height*r);o.width=i.width*h,o.height=i.height*h,null===(a=o.getContext("2d"))||void 0===a||a.drawImage(i,0,0,o.width,o.height),n.width=Math.max(t.width,1),n.height=Math.max(t.height,1);const c=n.getContext("2d");c&&(c.save(),c.drawImage(o,0,0,t.width,t.height),c.globalCompositeOperation="source-in",c.drawImage(t,0,0,n.width,n.height),c.restore())}),[n,t,i,e.width,e.height,r,...a]);return e.clipSrc&&i?n:t},PLACEHOLDER_CANVAS=document.createElement("canvas"),LoadingPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=react_1.default.useRef(null);return react_1.default.useEffect((()=>{const e=r.current;if(!e)return;const t=new konva_1.default.Animation((t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)}),e.getLayer());return t.start(),()=>{t.stop()}})),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),react_1.default.createElement(react_konva_1.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))})),ErrorPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t="Can not load the image...",r=Math.max(10,Math.min(30,e.width/t.length));return react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),react_1.default.createElement(react_konva_1.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))}));let useImageHook=use_image_1.default;const setImageLoaderHook=e=>{useImageHook=e};exports.setImageLoaderHook=setImageLoaderHook;const usePreviousValue=e=>{const t=react_1.default.useRef(e);return react_1.default.useEffect((()=>{t.current=e}),[e]),t.current},useImageLoader=e=>{const t=usePreviousValue(e),r=react_1.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};react_1.default.useEffect((()=>a)),react_1.default.useLayoutEffect((()=>{"loading"===e&&(r.current&&setTimeout((()=>{throw console.log(t,e),new Error("Unexpected loader detected.")})),r.current=(0,loader_1.incrementLoader)()),"loading"!==t||"loaded"!==e&&"failed"!==e||a()}),[t,e])};exports.useImageLoader=useImageLoader;const usePreviousImage=({image:e,status:t,type:r})=>{const a=react_1.default.useRef();react_1.default.useEffect((()=>{a.current=e||a.current}),[e]);return"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0};exports.ImageElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,o]=react_1.default.useState(!1),i=react_1.default.useRef(null),n=react_1.default.useRef(null),[h,c]=react_1.default.useState(!1),d=t.selectedElements.indexOf(e)>=0,[l,u]=useImageHook(e.__finalSrc||e.src,"anonymous");(0,exports.useImageLoader)(u);const s="svg"!==e.type||e.__isLoaded?u:"loading";(0,exports.useImageLoader)(s);const g=usePreviousImage({image:l,status:u,type:e.type}),f=useMask(e,useFlip(e,l||g,t._elementsPixelRatio))||PLACEHOLDER_CANVAS;let{cropX:m,cropY:_,cropWidth:p,cropHeight:w}=e;"loaded"!==u&&(m=_=0,p=w=1);const x=f.width*p,v=f.height*w,M=e.width/e.height;let y,E;const b=x/v,k="svg"===e.type;k?(y=x,E=v):M>=b?(y=x,E=x/M):(y=v*M,E=v);const I={x:f.width*m,y:f.height*_,width:y,height:E},S=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let C=useClip(e,useCornerRadius(e,f,I,t._elementsPixelRatio,S,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[I,S,t._elementsPixelRatio]);const L=Math.max(e.width/y,e.height/E);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=i.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==n.current&&e.toggleCropMode(!1)}function o(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",o),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",o),document.body.removeEventListener("touchstart",o),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(i.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),{delay:100})}),[f,a,p,w,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=i.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(i.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),[e.shadowEnabled,e.shadowBlur]);const R=react_1.default.useRef(null),P=react_1.default.useRef(null),H=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(P.current.nodes([R.current]),H.current.nodes([n.current]))}),[e._cropModeEnabled]);const T=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),o=Math.min(1,y/r),i=Math.min(1,E/a),n=1-o,h=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),c=1-i,d=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-h*f.width,y:-d*f.height,scaleX:1,scaleY:1}),e.set({cropX:h,cropY:d,cropWidth:o,cropHeight:i})},X=()=>{"svg"!==e.type&&(e.locked||setTimeout((()=>{e.toggleCropMode(!0)})))},Y="svg"===e.type&&g,D="loading"===u&&!Y,A="failed"===u,O=!D&&!A,W=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),F=O?e.opacity:0;(0,use_fadein_1.useFadeIn)(i,F);const q=e.selectable||"admin"===t.role;return react_1.default.createElement(react_1.default.Fragment,null,D&&react_1.default.createElement(LoadingPlaceholder,{element:e}),A&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:i,name:"element",id:e.id,image:C,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:F,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,customCrop:I,listening:q,draggable:!e.locked,hideInExport:!e.showInExport,onMouseEnter:()=>{c(!0)},onMouseLeave:()=>{c(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onDblClick:X,onDblTap:X,onTransformStart:()=>{o(!0),t.history.startTransaction(),W.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,o=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),i=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),h=1-y/f.width,c=Math.min(h,Math.max(0,e.cropX)),d=1-E/f.height,l=Math.min(d,Math.max(0,e.cropY)),u=n.getActiveAnchor(),s=!(u.indexOf("middle")>=0||u.indexOf("center")>=0),g=!s&&o<1&&W.current.cropHeight>E/f.height;let m=s?e.cropWidth:e.cropWidth*o;g&&(m=e.cropWidth);const _=!s&&i<1&&W.current.cropWidth>y/f.width;let p=s?e.cropHeight:e.cropHeight*i;_&&(p=e.cropHeight),k&&(m=e.cropWidth,p=e.cropHeight),e.set({cropX:c,cropY:l,x:a.x(),y:a.y(),width:a.width()*o,height:a.height()*i,rotation:t.target.rotation(),cropWidth:Math.min(m,1-c),cropHeight:Math.min(p,1-l)})},onTransformEnd:r=>{const a=r.currentTarget;e.set({width:a.width(),height:a.height(),x:a.x(),y:a.y(),rotation:r.target.rotation(),cropWidth:y/f.width,cropHeight:E/f.height}),o(!1),t.history.endTransaction()}}),react_1.default.createElement(react_konva_1.Rect,{x:e.x,y:e.y,width:e.width-e.borderSize,height:e.height-e.borderSize,offsetX:-e.borderSize/2,offsetY:-e.borderSize/2,stroke:e.borderColor,strokeWidth:e.borderSize,listening:!1,visible:!!e.borderSize,rotation:e.rotation,cornerRadius:Math.max(0,S-e.borderSize),hideInExport:!e.showInExport}),e._cropModeEnabled&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Rect,{x:-1500,y:-1500,width:4500,height:4500,fill:"rgba(0,0,0,0.3)"}),react_1.default.createElement(react_konva_1.Image,{listening:!1,image:C,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:L,scaleY:L},react_1.default.createElement(react_konva_1.Image,{image:f,ref:n,opacity:.4,draggable:!0,x:-e.cropX*f.width,y:-e.cropY*f.height,onDragMove:T,onTransform:T}),react_1.default.createElement(react_konva_1.Transformer,{ref:H,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),react_1.default.createElement(react_konva_1.Rect,{width:y,height:E,ref:R,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*f.width-1e-9&&(t.target.x(-e.cropX*f.width),t.target.scaleX(1)),t.target.y()<-e.cropY*f.height-1e-9&&(t.target.y(-e.cropY*f.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/f.width)),a=Math.min(1,Math.max(0,t.target.y()/f.height+e.cropY)),o=t.target.width()*t.target.scaleX(),i=t.target.height()*t.target.scaleY(),n=Math.min(1-r,o/f.width),h=Math.min(1-a,i/f.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:n,cropHeight:h,width:Math.min(o*L,f.width*(1-r)*L),height:Math.min(i*L,f.height*(1-a)*L)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:P,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,keepRatio:!1,rotateEnabled:!1,anchorFill:"rgb(240, 240, 240)",anchorStrokeWidth:2,borderStrokeWidth:2}))),(h||d)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r),Object.defineProperty(e,a,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImageElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),svg=__importStar(require("../utils/svg")),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein");async function getFixedUrl(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await svg.urlToString(e),r=svg.fixSize(t);return svg.svgToURL(r)}const useSizeFixer=e=>{const[t,r]=react_1.default.useState(e);return react_1.default.useEffect((()=>{(async()=>{const a=await getFixedUrl(e);a!==t&&r(a)})()}),[e]),t},useFlip=(e,t,r)=>react_1.default.useMemo((()=>{var a,o;const{flipX:i,flipY:n}=e,h="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0;if(!i&&!n&&!h)return t;if(!t||!t.width||!t.height)return null;const c=document.createElement("canvas");let d=1;"svg"===e.type&&(d=Math.max(e.width/t.width*r,e.height/t.height*r)),c.width=Math.max(t.width*d,1),c.height=Math.max(t.height*d,1);let l=i?-c.width:0,u=n?-c.height:0;return null===(a=c.getContext("2d"))||void 0===a||a.scale(i?-1:1,n?-1:1),null===(o=c.getContext("2d"))||void 0===o||o.drawImage(t,l,u,c.width,c.height),c}),[e.flipX,e.flipY,t,e.width,e.height,r]);function getCrop(e,t){const r=t.width/t.height;let a,o;r>=e.width/e.height?(a=e.width,o=e.width/r):(a=e.height*r,o=e.height);return{x:(e.width-a)/2,y:(e.height-o)/2,width:a,height:o}}function downsample(e,t,r,a,o,i,n){for(var h=new ImageData(t,r),c=new Int32Array(e.data.buffer),d=e.width,l=new Int32Array(h.data.buffer),u=h.width,s=t/i,g=r/n,f=Math.round(1/s),m=Math.round(1/g),_=f*m,p=0;p<h.height;p++)for(var w=0;w<u;w++){for(var x=a+Math.round(w/s)+(o+Math.round(p/g))*d,v=0,M=0,y=0,E=0,b=0;b<m;b++)for(var k=0;k<f;k++){var I=c[x+k+b*d];v+=I<<24>>>24,M+=I<<16>>>24,y+=I<<8>>>24,E+=I>>>24}v=Math.round(v/_),M=Math.round(M/_),y=Math.round(y/_),E=Math.round(E/_),l[w+p*u]=E<<24|y<<16|M<<8|v}return h}function downScaleCanvas(e,t){var r,a;const o=document.createElement("canvas");o.width=e.width,o.height=e.height,null===(r=o.getContext("2d"))||void 0===r||r.drawImage(e,0,0,o.width,o.height);const i=downsample(o.getContext("2d").getImageData(0,0,o.width,o.height),Math.floor(o.width*t),Math.floor(o.height*t),0,0,o.width,o.height);return o.width=Math.floor(o.width*t),o.height=Math.floor(o.height*t),null===(a=o.getContext("2d"))||void 0===a||a.putImageData(i,0,0),o}const useMask=(e,t)=>{const[r,a]=useImageHook(e.maskSrc,"anonymous"),o=e.maskSrc?a:"loaded";return(0,exports.useImageLoader)(o),react_1.default.useMemo((()=>{if(!r)return t;if(!t||!t.width||!t.height)return t;const a=document.createElement("canvas");a.width=Math.max(t.width,1),a.height=Math.max(t.height,1);const o=a.getContext("2d");if(!o)return t;o.drawImage(t,0,0),o.globalCompositeOperation="source-in";const i=getCrop(r,e);return o.drawImage(r,i.x,i.y,i.width,i.height,0,0,t.width,t.height),a}),[t,r,e.width,e.height])},useCornerRadius=(e,t,r,a,o=0,i=!1)=>{const n=react_1.default.useMemo((()=>{if(t&&t.width&&t.height)return document.createElement("canvas")}),[t]);return react_1.default.useLayoutEffect((()=>{if(!n||!t)return;const h=Math.floor(Math.max(e.width*a,1)),c=Math.floor(Math.max(e.height*a,1));n.width=h,n.height=c;const d=n.getContext("2d");if(!d)return;const l=Math.min(o*a,h/2,c/2);l&&(d.beginPath(),d.moveTo(l,0),d.lineTo(h-l,0),d.arc(h-l,l,l,3*Math.PI/2,0,!1),d.lineTo(h,c-l),d.arc(h-l,c-l,l,0,Math.PI/2,!1),d.lineTo(l,c),d.arc(l,c-l,l,Math.PI/2,Math.PI,!1),d.lineTo(0,l),d.arc(l,l,l,Math.PI,3*Math.PI/2,!1),d.clip());const u=Math.max(e.width/r.width,e.height/r.height)*a,s=u<1&&!i,g=s?downScaleCanvas(t,u):t,f=s?{x:Math.floor(r.x*u),y:Math.floor(r.y*u),width:Math.floor(r.width*u),height:Math.floor(r.height*u)}:r;d.drawImage(g,f.x,f.y,f.width,f.height,0,0,n.width,n.height)}),[n,e.width,e.height,r.x,r.y,r.width,r.height,o,a,i]),n},useClip=(e,t,r,a)=>{const o=useSizeFixer(e.clipSrc||""),[i]=useImageHook(o,"anonymous"),n=react_1.default.useMemo((()=>{if(t&&i)return document.createElement("canvas")}),[t,i]);react_1.default.useLayoutEffect((()=>{var a;if(!i)return;if(!t||!t.width||!t.height)return;if(!i||!i.width||!i.height)return;if(!n)return;const o=document.createElement("canvas"),h=Math.max(e.width/i.width*r,e.height/i.height*r);o.width=i.width*h,o.height=i.height*h,null===(a=o.getContext("2d"))||void 0===a||a.drawImage(i,0,0,o.width,o.height),n.width=Math.max(t.width,1),n.height=Math.max(t.height,1);const c=n.getContext("2d");c&&(c.save(),c.drawImage(o,0,0,t.width,t.height),c.globalCompositeOperation="source-in",c.drawImage(t,0,0,n.width,n.height),c.restore())}),[n,t,i,e.width,e.height,r,...a]);return e.clipSrc&&i?n:t},PLACEHOLDER_CANVAS=document.createElement("canvas"),LoadingPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=react_1.default.useRef(null);return react_1.default.useEffect((()=>{const e=r.current;if(!e)return;const t=new konva_1.default.Animation((t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)}),e.getLayer());return t.start(),()=>{t.stop()}})),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),react_1.default.createElement(react_konva_1.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))})),ErrorPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t="Can not load the image...",r=Math.max(10,Math.min(30,e.width/t.length));return react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),react_1.default.createElement(react_konva_1.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))}));let useImageHook=use_image_1.default;const setImageLoaderHook=e=>{useImageHook=e};exports.setImageLoaderHook=setImageLoaderHook;const usePreviousValue=e=>{const t=react_1.default.useRef(e);return react_1.default.useEffect((()=>{t.current=e}),[e]),t.current},useImageLoader=e=>{const t=usePreviousValue(e),r=react_1.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};react_1.default.useEffect((()=>a)),react_1.default.useLayoutEffect((()=>{"loading"===e&&(r.current&&setTimeout((()=>{throw console.log(t,e),new Error("Unexpected loader detected.")})),r.current=(0,loader_1.incrementLoader)()),"loading"!==t||"loaded"!==e&&"failed"!==e||a()}),[t,e])};exports.useImageLoader=useImageLoader;const usePreviousImage=({image:e,status:t,type:r})=>{const a=react_1.default.useRef();react_1.default.useEffect((()=>{a.current=e||a.current}),[e]);return"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0};exports.ImageElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,o]=react_1.default.useState(!1),i=react_1.default.useRef(null),n=react_1.default.useRef(null),[h,c]=react_1.default.useState(!1),d=t.selectedElements.indexOf(e)>=0,[l,u]=useImageHook(e.__finalSrc||e.src,"anonymous");(0,exports.useImageLoader)(u);const s="svg"!==e.type||e.__isLoaded?u:"loading";(0,exports.useImageLoader)(s);const g=usePreviousImage({image:l,status:u,type:e.type}),f=useMask(e,useFlip(e,l||g,t._elementsPixelRatio))||PLACEHOLDER_CANVAS;let{cropX:m,cropY:_,cropWidth:p,cropHeight:w}=e;"loaded"!==u&&(m=_=0,p=w=1);const x=f.width*p,v=f.height*w,M=e.width/e.height;let y,E;const b=x/v,k="svg"===e.type;k?(y=x,E=v):M>=b?(y=x,E=x/M):(y=v*M,E=v);const I={x:f.width*m,y:f.height*_,width:y,height:E},S=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let C=useClip(e,useCornerRadius(e,f,I,t._elementsPixelRatio,S,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[I,S,t._elementsPixelRatio]);const L=Math.max(e.width/y,e.height/E);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=i.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==n.current&&e.toggleCropMode(!1)}function o(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",o),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",o),document.body.removeEventListener("touchstart",o),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(i.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),{delay:100})}),[f,a,p,w,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=i.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(i.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),[e.shadowEnabled,e.shadowBlur]);const R=react_1.default.useRef(null),P=react_1.default.useRef(null),H=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(P.current.nodes([R.current]),H.current.nodes([n.current]))}),[e._cropModeEnabled]);const T=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),o=Math.min(1,y/r),i=Math.min(1,E/a),n=1-o,h=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),c=1-i,d=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-h*f.width,y:-d*f.height,scaleX:1,scaleY:1}),e.set({cropX:h,cropY:d,cropWidth:o,cropHeight:i})},X=()=>{"svg"!==e.type&&(e.locked||setTimeout((()=>{e.toggleCropMode(!0)})))},Y="svg"===e.type&&g,D="loading"===u&&!Y,A="failed"===u,O=!D&&!A,W=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),F=O?e.opacity:0;(0,use_fadein_1.useFadeIn)(i,F);const q=e.selectable||"admin"===t.role;return react_1.default.createElement(react_1.default.Fragment,null,D&&react_1.default.createElement(LoadingPlaceholder,{element:e}),A&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:i,name:"element",id:e.id,image:C,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:F,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,customCrop:I,listening:q,draggable:!e.locked,hideInExport:!e.showInExport,onMouseEnter:()=>{c(!0)},onMouseLeave:()=>{c(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onDblClick:X,onDblTap:X,onTransformStart:()=>{o(!0),t.history.startTransaction(),W.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,o=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),i=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),h=1-y/f.width,c=Math.min(h,Math.max(0,e.cropX)),d=1-E/f.height,l=Math.min(d,Math.max(0,e.cropY)),u=n.getActiveAnchor(),s=!(u.indexOf("middle")>=0||u.indexOf("center")>=0),g=!s&&o<1&&W.current.cropHeight>E/f.height;let m=s?e.cropWidth:e.cropWidth*o;g&&(m=e.cropWidth);const _=!s&&i<1&&W.current.cropWidth>y/f.width;let p=s?e.cropHeight:e.cropHeight*i;_&&(p=e.cropHeight),k&&(m=e.cropWidth,p=e.cropHeight),e.set({cropX:c,cropY:l,x:a.x(),y:a.y(),width:a.width()*o,height:a.height()*i,rotation:t.target.rotation(),cropWidth:Math.min(m,1-c),cropHeight:Math.min(p,1-l)})},onTransformEnd:r=>{const a=r.currentTarget;e.set({width:a.width(),height:a.height(),x:a.x(),y:a.y(),rotation:r.target.rotation(),cropWidth:y/f.width,cropHeight:E/f.height}),o(!1),t.history.endTransaction()}}),react_1.default.createElement(react_konva_1.Rect,{x:e.x,y:e.y,width:e.width-e.borderSize,height:e.height-e.borderSize,offsetX:-e.borderSize/2,offsetY:-e.borderSize/2,stroke:e.borderColor,strokeWidth:e.borderSize,listening:!1,visible:!!e.borderSize,rotation:e.rotation,cornerRadius:Math.max(0,S-e.borderSize),hideInExport:!e.showInExport}),e._cropModeEnabled&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Rect,{x:-1500,y:-1500,width:4500,height:4500,fill:"rgba(0,0,0,0.3)"}),react_1.default.createElement(react_konva_1.Image,{listening:!1,image:C,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:L,scaleY:L},react_1.default.createElement(react_konva_1.Image,{image:f,ref:n,opacity:.4,draggable:!0,x:-e.cropX*f.width,y:-e.cropY*f.height,onDragMove:T,onTransform:T}),react_1.default.createElement(react_konva_1.Transformer,{ref:H,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),react_1.default.createElement(react_konva_1.Rect,{width:y,height:E,ref:R,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*f.width-1e-9&&(t.target.x(-e.cropX*f.width),t.target.scaleX(1)),t.target.y()<-e.cropY*f.height-1e-9&&(t.target.y(-e.cropY*f.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/f.width)),a=Math.min(1,Math.max(0,t.target.y()/f.height+e.cropY)),o=t.target.width()*t.target.scaleX(),i=t.target.height()*t.target.scaleY(),n=Math.min(1-r,o/f.width),h=Math.min(1-a,i/f.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:n,cropHeight:h,width:Math.min(o*L,f.width*(1-r)*L),height:Math.min(i*L,f.height*(1-a)*L)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:P,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,keepRatio:!1,rotateEnabled:!1,anchorFill:"rgb(240, 240, 240)",anchorStrokeWidth:2,borderStrokeWidth:2}))),(h||d)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
package/canvas/page.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __rest=this&&this.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerNextDomDrop=exports.registerTransformerAttrs=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),element_1=__importDefault(require("./element")),use_transformer_snap_1=require("./use-transformer-snap"),image_element_1=require("./image-element"),crop_1=require("../utils/crop"),page_controls_1=require("./page-controls"),validate_key_1=require("../utils/validate-key"),DEFAULT_TRANSFORMER_ATTRIBUTES={enabledAnchors:["top-left","top-center","top-right","middle-left","bottom-left","bottom-right","bottom-center","middle-right"],rotateEnabled:!0,rotationSnaps:[0,45,90,135,180,225,270,315],ignoreStroke:!0,anchorStrokeWidth:2,borderStrokeWidth:2},transformerAttributes={text:{enabledAnchors:["top-left","top-right","middle-left","bottom-left","bottom-right","middle-right"]},svg:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},many:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]}};function registerTransformerAttrs(e,t){transformerAttributes[e]=transformerAttributes[e]||t,Object.assign(transformerAttributes[e],t)}exports.registerTransformerAttrs=registerTransformerAttrs;const Background=e=>react_1.default.createElement(react_konva_1.Rect,Object.assign({},e,{preventDefault:!1})),ImageBackground=e=>{var{url:t}=e,r=__rest(e,["url"]);const[n,o]=(0,use_image_1.default)(t,"anonymous"),a=n?(0,crop_1.getCrop)(n,{width:r.width,height:r.height},"center-middle"):{};return(0,image_element_1.useImageLoader)(o),react_1.default.createElement(react_konva_1.Image,Object.assign({image:n},r,a))},ColorBackground=e=>react_1.default.createElement(react_konva_1.Rect,Object.assign({},e)),PageBackground=e=>{const{background:t,scale:r,borderColor:n}=e,o=__rest(e,["background","scale","borderColor"]),a=t.indexOf("http")>=0||t.indexOf(".png")>=0||t.indexOf(".jpg")>=0;return react_1.default.createElement(react_1.default.Fragment,null,a?react_1.default.createElement(ImageBackground,Object.assign({url:t},o)):react_1.default.createElement(ColorBackground,Object.assign({fill:t},o)))},Selection=(0,mobx_react_lite_1.observer)((({selection:e})=>e.visible?react_1.default.createElement(react_konva_1.Rect,{name:"selection",x:Math.min(e.x1,e.x2),y:Math.min(e.y1,e.y2),width:Math.abs(e.x1-e.x2),height:Math.abs(e.y1-e.y2),fill:"rgba(0, 161, 255, 0.3)"}):null)),Elements=(0,mobx_react_lite_1.observer)((({elements:e,store:t})=>{const r=e.filter((e=>e.alwaysOnTop)),n=e.filter((e=>!e.alwaysOnTop)).concat(r);return react_1.default.createElement(react_1.default.Fragment,null,n.map((e=>react_1.default.createElement(element_1.default,{key:e.id,store:t,element:e,onClick:()=>{console.warn("Polotno warning: onClick callback is deprecated. Just stop using it. Polotno will do selection automatically.")}}))))}));let onDomDrop=null;const registerNextDomDrop=e=>{onDomDrop=e};exports.registerNextDomDrop=registerNextDomDrop,exports.default=(0,mobx_react_lite_1.observer)((({store:e,page:t,width:r,height:n,pageControlsEnabled:o,backColor:a,pageBorderColor:l,activePageBorderColor:i,components:c})=>{const s=e._bleedVisible?t.bleed:0,d=t.computedWidth+2*s,u=t.computedHeight+2*s,m=(r-d*e.scale)/2,g=(n-u*e.scale)/2,_=react_1.default.useRef(null),f=react_1.default.useRef(null),p=react_1.default.useRef(null),h=null==o||o,b=e.selectedElements.find((e=>e._cropModeEnabled)),v=e.selectedElements.filter((e=>e.locked)).length>0,E=e.selectedElements.filter((e=>!e.visible)).length>0;react_1.default.useEffect((()=>{var t,r;if(!_.current)return;const n=_.current.getStage(),o=e.selectedElements.map((e=>e._cropModeEnabled?null:n.findOne("#"+e.id))).filter((e=>e)),a=1===e.selectedElements.length&&(null===(t=e.selectedElements[0])||void 0===t?void 0:t.type)||"many";v?(_.current.enabledAnchors([]),_.current.rotateEnabled(!1)):transformerAttributes[a]?(_.current.setAttrs(Object.assign(Object.assign({},DEFAULT_TRANSFORMER_ATTRIBUTES),transformerAttributes[a])),"svg"!==a||e.selectedElements[0].keepRatio||_.current.setAttrs({enabledAnchors:DEFAULT_TRANSFORMER_ATTRIBUTES.enabledAnchors})):_.current.setAttrs(DEFAULT_TRANSFORMER_ATTRIBUTES),_.current.nodes(o),null===(r=_.current.getLayer())||void 0===r||r.batchDraw()}),[e.selectedElements,b,v,E]);const x=(0,mobx_react_lite_1.useLocalObservable)((()=>({visible:!1,x1:0,y1:0,x2:0,y2:0}))),y=react_1.default.useRef(!1),k=(0,mobx_1.action)((r=>{var n,o;y.current=!1,e.activePage!==t&&t.select();const a=r.target.findAncestor(".elements-container"),l=r.target.findAncestor("Transformer"),i=r.target.findAncestor(".page-abs-container");if(a||l||i)return;const c=null===(n=r.target.getStage())||void 0===n?void 0:n.getPointerPosition();c&&(x.visible=!0,x.x1=c.x,x.y1=c.y,x.x2=c.x,x.y2=c.y,(null===(o=r.target.getStage())||void 0===o?void 0:o.getPointersPositions().length)>=2&&(x.visible=!1))}));react_1.default.useEffect((()=>{const t=(0,mobx_1.action)((e=>{var t,r;if(!x.visible)return;null===(t=f.current)||void 0===t||t.setPointersPositions(e);let n=(null===(r=f.current)||void 0===r?void 0:r.getPointerPosition())||{x:x.x2,y:x.y2};x.x2=n.x,x.y2=n.y})),r=(0,mobx_1.action)((()=>{if(!x.visible)return;if(!f.current)return;const t=f.current.findOne(".selection"),r=t?t.getClientRect():{width:0,height:0,x:0,y:0};if(r.width&&r.height){const t=[];f.current.find(".element").forEach((n=>{const o=n.getClientRect(),a=e.getElementById(n.id()),l=null==a?void 0:a.locked,i=null==a?void 0:a.selectable;konva_1.default.Util.haveIntersection(r,o)&&!l&&i&&t.push(n.id())})),e.selectElements(t)}x.visible=!1,y.current=!0}));return window.addEventListener("mousemove",t),window.addEventListener("touchmove",t),window.addEventListener("mouseup",r),window.addEventListener("touchend",r),()=>{window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",t),window.removeEventListener("mouseup",r),window.removeEventListener("touchend",r)}}),[]);const w=t=>{if(y.current)return;const r=t.evt.ctrlKey||t.evt.metaKey||t.evt.shiftKey,n=t.target.findAncestor(".elements-container"),o=t.target.findAncestor(".page-abs-container"),a=t.target.findAncestor("Transformer");if(!(r||n||a||o))return void e.selectElements([]);const l=t.target.findAncestor(".element",!0),i=e.selectedElementsIds.indexOf(null==l?void 0:l.id())>=0;l&&r&&!i&&e.selectElements(e.selectedElementsIds.concat([l.id()])),l&&r&&i&&e.selectElements(e.selectedElementsIds.filter((e=>e!==l.id()))),!l||r||i||e.selectElements([l.id()])};(0,use_transformer_snap_1.useSnap)(_);const A=e.activePage===t,D=(null==c?void 0:c.PageControls)||page_controls_1.PageControls;return console.log(c,(null==c?void 0:c.PageControls)===D,D===page_controls_1.PageControls),react_1.default.createElement("div",{ref:p,onDragOver:e=>e.preventDefault(),onDrop:t=>{if(t.preventDefault(),!f.current)return;f.current.setPointersPositions(t);const r=f.current.findOne(".elements-container").getRelativePointerPosition(),n=f.current.getPointerPosition(),o=f.current.getIntersection(n),a=o&&o.findAncestor(".element",!0),l=a?e.getElementById(a.id()):void 0;onDomDrop&&(onDomDrop(r,l),onDomDrop=null)},style:{position:"relative",width:r+"px"},className:"polotno-page-container"+(A?" active-page":"")},react_1.default.createElement(react_konva_1.Stage,{ref:f,width:r,height:n,onClick:w,onTap:w,onMouseDown:k,onDragStart:t=>{var r;if(t.target.hasName("element")){const n=t.target.id();!(e.selectedElementsIds.indexOf(n)>=0)&&n&&(e.selectElements([n]),null===(r=_.current)||void 0===r||r.startDrag(t))}},pageId:t.id,style:{position:"relative"}},react_1.default.createElement(react_konva_1.Layer,null,react_1.default.createElement(Background,{width:r,height:n,fill:a}),react_1.default.createElement(react_konva_1.Group,{x:m,y:g,scaleX:e.scale,scaleY:e.scale,name:"page-container"},react_1.default.createElement(react_konva_1.Rect,{name:"page-highlight",hideInExport:!0,x:-1.5/e.scale,y:-1.5/e.scale,width:d+3/e.scale,height:u+3/e.scale,stroke:A&&e.pages.length>1?i:l,strokeWidth:3,listening:!1,strokeScaleEnabled:!1}),react_1.default.createElement(react_konva_1.Group,{name:"page-background-group",x:s,y:s,clipX:-s,clipY:-s,clipWidth:t.computedWidth+2*s,clipHeight:t.computedHeight+2*s},react_1.default.createElement(PageBackground,{x:-t.bleed,y:-t.bleed,width:t.computedWidth+2*t.bleed,height:t.computedHeight+2*t.bleed,background:t.background,shadowBlur:10,shadowColor:"lightgrey",name:"page-background",preventDefault:!1,scale:e.scale})),react_1.default.createElement(react_konva_1.Group,{x:s,y:s,clipX:-s,clipY:-s,clipWidth:t.computedWidth+2*s,clipHeight:t.computedHeight+2*s,name:"elements-container"},react_1.default.createElement(react_konva_1.Rect,{name:"elements-area",width:t.computedWidth,height:t.computedHeight,listening:!1}),react_1.default.createElement(Elements,{elements:t.children,store:e})),react_1.default.createElement(react_konva_1.Rect,{stroke:"red",name:"bleed",strokeWidth:t.bleed,x:t.bleed/2,y:t.bleed/2,width:t.computedWidth+t.bleed,height:t.computedHeight+t.bleed,opacity:.1,listening:!1,visible:t.bleed>0&&e._bleedVisible,hideInExport:!0})),react_1.default.createElement(react_konva_1.Group,{x:m,y:g,scaleX:e.scale,scaleY:e.scale,name:"page-abs-container"},react_1.default.createElement(react_konva_1.Transformer,{ref:_,boundBoxFunc:(e,t)=>{const r=t.width<1||t.height<1,n=e.width<1||e.height<1;return r&&!n?e:t}})),react_1.default.createElement(Selection,{selection:x}),validate_key_1.shouldShowCredit.value&&react_1.default.createElement(react_konva_1.Text,{text:"Powered by polotno.dev",fontSize:14,fill:"rgba(0,0,0,0.6)",x:r-170,y:n-18,onMouseEnter:e=>{e.target.getStage().container().style.cursor="pointer"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onTouchStart:e=>{e.cancelBubble=!0},onMouseDown:e=>{e.cancelBubble=!0},onClick:()=>{window.open("https://polotno.dev")},onTap:()=>{window.open("https://polotno.dev")}}),react_1.default.createElement(react_konva_1.Group,{name:"line-guides"}))),h&&A&&react_1.default.createElement(D,{store:e,page:t,xPadding:m,yPadding:g}))}));
1
+ "use strict";var __rest=this&&this.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerNextDomDrop=exports.registerTransformerAttrs=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),element_1=__importDefault(require("./element")),use_transformer_snap_1=require("./use-transformer-snap"),image_element_1=require("./image-element"),crop_1=require("../utils/crop"),page_controls_1=require("./page-controls"),validate_key_1=require("../utils/validate-key"),DEFAULT_TRANSFORMER_ATTRIBUTES={enabledAnchors:["top-left","top-center","top-right","middle-left","bottom-left","bottom-right","bottom-center","middle-right"],rotateEnabled:!0,rotationSnaps:[0,45,90,135,180,225,270,315],ignoreStroke:!0,anchorStrokeWidth:2,borderStrokeWidth:2},transformerAttributes={text:{enabledAnchors:["top-left","top-right","middle-left","bottom-left","bottom-right","middle-right"]},svg:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},many:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]}};function registerTransformerAttrs(e,t){transformerAttributes[e]=transformerAttributes[e]||t,Object.assign(transformerAttributes[e],t)}exports.registerTransformerAttrs=registerTransformerAttrs;const Background=e=>react_1.default.createElement(react_konva_1.Rect,Object.assign({},e,{preventDefault:!1})),ImageBackground=e=>{var{url:t}=e,r=__rest(e,["url"]);const[n,o]=(0,use_image_1.default)(t,"anonymous"),a=n?(0,crop_1.getCrop)(n,{width:r.width,height:r.height},"center-middle"):{};return(0,image_element_1.useImageLoader)(o),react_1.default.createElement(react_konva_1.Image,Object.assign({image:n},r,a))},ColorBackground=e=>react_1.default.createElement(react_konva_1.Rect,Object.assign({},e)),PageBackground=e=>{const{background:t,scale:r,borderColor:n}=e,o=__rest(e,["background","scale","borderColor"]),a=t.indexOf("http")>=0||t.indexOf(".png")>=0||t.indexOf(".jpg")>=0;return react_1.default.createElement(react_1.default.Fragment,null,a?react_1.default.createElement(ImageBackground,Object.assign({url:t},o)):react_1.default.createElement(ColorBackground,Object.assign({fill:t},o)))},Selection=(0,mobx_react_lite_1.observer)((({selection:e})=>e.visible?react_1.default.createElement(react_konva_1.Rect,{name:"selection",x:Math.min(e.x1,e.x2),y:Math.min(e.y1,e.y2),width:Math.abs(e.x1-e.x2),height:Math.abs(e.y1-e.y2),fill:"rgba(0, 161, 255, 0.3)"}):null)),Elements=(0,mobx_react_lite_1.observer)((({elements:e,store:t})=>{const r=e.filter((e=>e.alwaysOnTop)),n=e.filter((e=>!e.alwaysOnTop)).concat(r);return react_1.default.createElement(react_1.default.Fragment,null,n.map((e=>react_1.default.createElement(element_1.default,{key:e.id,store:t,element:e,onClick:()=>{console.warn("Polotno warning: onClick callback is deprecated. Just stop using it. Polotno will do selection automatically.")}}))))}));let onDomDrop=null;const registerNextDomDrop=e=>{onDomDrop=e};exports.registerNextDomDrop=registerNextDomDrop,exports.default=(0,mobx_react_lite_1.observer)((({store:e,page:t,width:r,height:n,pageControlsEnabled:o,backColor:a,pageBorderColor:l,activePageBorderColor:i,components:c})=>{const s=e._bleedVisible?t.bleed:0,d=t.computedWidth+2*s,u=t.computedHeight+2*s,m=(r-d*e.scale)/2,g=(n-u*e.scale)/2,_=react_1.default.useRef(null),f=react_1.default.useRef(null),p=react_1.default.useRef(null),h=null==o||o,b=e.selectedElements.find((e=>e._cropModeEnabled)),v=e.selectedElements.filter((e=>e.locked)).length>0,E=e.selectedElements.filter((e=>!e.visible)).length>0;react_1.default.useEffect((()=>{var t,r;if(!_.current)return;const n=_.current.getStage(),o=e.selectedElements.map((e=>e._cropModeEnabled?null:n.findOne("#"+e.id))).filter((e=>e)),a=1===e.selectedElements.length&&(null===(t=e.selectedElements[0])||void 0===t?void 0:t.type)||"many";v?(_.current.enabledAnchors([]),_.current.rotateEnabled(!1)):transformerAttributes[a]?(_.current.setAttrs(Object.assign(Object.assign({},DEFAULT_TRANSFORMER_ATTRIBUTES),transformerAttributes[a])),"svg"!==a||e.selectedElements[0].keepRatio||_.current.setAttrs({enabledAnchors:DEFAULT_TRANSFORMER_ATTRIBUTES.enabledAnchors})):_.current.setAttrs(DEFAULT_TRANSFORMER_ATTRIBUTES),_.current.nodes(o),null===(r=_.current.getLayer())||void 0===r||r.batchDraw()}),[e.selectedElements,b,v,E]);const x=(0,mobx_react_lite_1.useLocalObservable)((()=>({visible:!1,x1:0,y1:0,x2:0,y2:0}))),y=react_1.default.useRef(!1),k=(0,mobx_1.action)((r=>{var n,o;y.current=!1,e.activePage!==t&&t.select();const a=r.target.findAncestor(".elements-container"),l=r.target.findAncestor("Transformer"),i=r.target.findAncestor(".page-abs-container");if(a||l||i)return;const c=null===(n=r.target.getStage())||void 0===n?void 0:n.getPointerPosition();c&&(x.visible=!0,x.x1=c.x,x.y1=c.y,x.x2=c.x,x.y2=c.y,(null===(o=r.target.getStage())||void 0===o?void 0:o.getPointersPositions().length)>=2&&(x.visible=!1))}));react_1.default.useEffect((()=>{const t=(0,mobx_1.action)((e=>{var t,r;if(!x.visible)return;null===(t=f.current)||void 0===t||t.setPointersPositions(e);let n=(null===(r=f.current)||void 0===r?void 0:r.getPointerPosition())||{x:x.x2,y:x.y2};x.x2=n.x,x.y2=n.y})),r=(0,mobx_1.action)((()=>{if(!x.visible)return;if(!f.current)return;const t=f.current.findOne(".selection"),r=t?t.getClientRect():{width:0,height:0,x:0,y:0};if(r.width&&r.height){const t=[];f.current.find(".element").forEach((n=>{const o=n.getClientRect(),a=e.getElementById(n.id()),l=null==a?void 0:a.locked,i=null==a?void 0:a.selectable;konva_1.default.Util.haveIntersection(r,o)&&!l&&i&&t.push(n.id())})),e.selectElements(t)}x.visible=!1,y.current=!0}));return window.addEventListener("mousemove",t),window.addEventListener("touchmove",t),window.addEventListener("mouseup",r),window.addEventListener("touchend",r),()=>{window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",t),window.removeEventListener("mouseup",r),window.removeEventListener("touchend",r)}}),[]);const w=t=>{if(y.current)return;const r=t.evt.ctrlKey||t.evt.metaKey||t.evt.shiftKey,n=t.target.findAncestor(".elements-container"),o=t.target.findAncestor(".page-abs-container"),a=t.target.findAncestor("Transformer");if(!(r||n||a||o))return void e.selectElements([]);const l=t.target.findAncestor(".element",!0),i=e.selectedElementsIds.indexOf(null==l?void 0:l.id())>=0;l&&r&&!i&&e.selectElements(e.selectedElementsIds.concat([l.id()])),l&&r&&i&&e.selectElements(e.selectedElementsIds.filter((e=>e!==l.id()))),!l||r||i||e.selectElements([l.id()])};(0,use_transformer_snap_1.useSnap)(_);const A=e.activePage===t,D=(null==c?void 0:c.PageControls)||page_controls_1.PageControls;return react_1.default.createElement("div",{ref:p,onDragOver:e=>e.preventDefault(),onDrop:t=>{if(t.preventDefault(),!f.current)return;f.current.setPointersPositions(t);const r=f.current.findOne(".elements-container").getRelativePointerPosition(),n=f.current.getPointerPosition(),o=f.current.getIntersection(n),a=o&&o.findAncestor(".element",!0),l=a?e.getElementById(a.id()):void 0;onDomDrop&&(onDomDrop(r,l),onDomDrop=null)},style:{position:"relative",width:r+"px"},className:"polotno-page-container"+(A?" active-page":"")},react_1.default.createElement(react_konva_1.Stage,{ref:f,width:r,height:n,onClick:w,onTap:w,onMouseDown:k,onDragStart:t=>{var r;if(t.target.hasName("element")){const n=t.target.id();!(e.selectedElementsIds.indexOf(n)>=0)&&n&&(e.selectElements([n]),null===(r=_.current)||void 0===r||r.startDrag(t))}},pageId:t.id,style:{position:"relative"}},react_1.default.createElement(react_konva_1.Layer,null,react_1.default.createElement(Background,{width:r,height:n,fill:a}),react_1.default.createElement(react_konva_1.Group,{x:m,y:g,scaleX:e.scale,scaleY:e.scale,name:"page-container"},react_1.default.createElement(react_konva_1.Rect,{name:"page-highlight",hideInExport:!0,x:-1.5/e.scale,y:-1.5/e.scale,width:d+3/e.scale,height:u+3/e.scale,stroke:A&&e.pages.length>1?i:l,strokeWidth:3,listening:!1,strokeScaleEnabled:!1}),react_1.default.createElement(react_konva_1.Group,{name:"page-background-group",x:s,y:s,clipX:-s,clipY:-s,clipWidth:t.computedWidth+2*s,clipHeight:t.computedHeight+2*s},react_1.default.createElement(PageBackground,{x:-t.bleed,y:-t.bleed,width:t.computedWidth+2*t.bleed,height:t.computedHeight+2*t.bleed,background:t.background,shadowBlur:10,shadowColor:"lightgrey",name:"page-background",preventDefault:!1,scale:e.scale})),react_1.default.createElement(react_konva_1.Group,{x:s,y:s,clipX:-s,clipY:-s,clipWidth:t.computedWidth+2*s,clipHeight:t.computedHeight+2*s,name:"elements-container"},react_1.default.createElement(react_konva_1.Rect,{name:"elements-area",width:t.computedWidth,height:t.computedHeight,listening:!1}),react_1.default.createElement(Elements,{elements:t.children,store:e})),react_1.default.createElement(react_konva_1.Rect,{stroke:"red",name:"bleed",strokeWidth:t.bleed,x:t.bleed/2,y:t.bleed/2,width:t.computedWidth+t.bleed,height:t.computedHeight+t.bleed,opacity:.1,listening:!1,visible:t.bleed>0&&e._bleedVisible,hideInExport:!0})),react_1.default.createElement(react_konva_1.Group,{x:m,y:g,scaleX:e.scale,scaleY:e.scale,name:"page-abs-container"},react_1.default.createElement(react_konva_1.Transformer,{ref:_,boundBoxFunc:(e,t)=>{const r=t.width<1||t.height<1,n=e.width<1||e.height<1;return r&&!n?e:t}})),react_1.default.createElement(Selection,{selection:x}),validate_key_1.shouldShowCredit.value&&react_1.default.createElement(react_konva_1.Text,{text:"Powered by polotno.dev",fontSize:14,fill:"rgba(0,0,0,0.6)",x:r-170,y:n-18,onMouseEnter:e=>{e.target.getStage().container().style.cursor="pointer"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onTouchStart:e=>{e.cancelBubble=!0},onMouseDown:e=>{e.cancelBubble=!0},onClick:()=>{window.open("https://polotno.dev")},onTap:()=>{window.open("https://polotno.dev")}}),react_1.default.createElement(react_konva_1.Group,{name:"line-guides"}))),h&&A&&react_1.default.createElement(D,{store:e,page:t,xPadding:m,yPadding:g}))}));
@@ -0,0 +1,10 @@
1
+ import node = require("./node");
2
+ import editor = require("./editor");
3
+ import doc = require("./doc");
4
+ import dom = require("./dom");
5
+ import runs = require("./runs");
6
+ import html = require("./html");
7
+ import frame = require("./frame");
8
+ import text = require("./text");
9
+ import rect = require("./rect");
10
+ export { node, editor, doc as document, dom, runs, html, frame, text, rect };
@@ -0,0 +1 @@
1
+ var node=require("./node"),editor=require("./editor"),doc=require("./doc"),dom=require("./dom"),runs=require("./runs"),html=require("./html"),frame=require("./frame"),text=require("./text"),rect=require("./rect"),bundle={node:node,editor:editor,document:doc,dom:dom,runs:runs,html:html,frame:frame,text:text,rect:rect};if(module.exports=bundle,"undefined"!=typeof window&&window.document){if(window.carota)throw new Error("Something else is called carota!");window.carota=bundle}
@@ -0,0 +1,2 @@
1
+ declare function _exports(runArray: any): (emit: any) => void;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var runs=require("./runs"),compatible=function(t,r){if(t._runs!==r._runs)throw new Error("Characters for different documents")},prototype={equals:function(t){return compatible(this,t),this._run===t._run&&this._offset===t._offset},cut:function(t){compatible(this,t);var r=this;return function(e){for(var n=r._run;n<=t._run;n++){var u=r._runs[n];if(u){var f=n===r._run?r._offset:0,o=n===t._run?t._offset:runs.getTextLength(u.text);f<o&&runs.getSubText((function(t){var r=Object.create(u);r.text=t,e(r)}),u.text,f,o-f)}}}}};function character(t,r,e){return Object.create(prototype,{_runs:{value:t},_run:{value:r},_offset:{value:e},char:{value:r>=t.length?null:runs.getTextChar(t[r].text,e)}})}function firstNonEmpty(t,r){for(;r<t.length;r++)if(0!=runs.getTextLength(t[r].text))return character(t,r,0);return character(t,t.length,0)}module.exports=function(t){return function(r){for(var e=firstNonEmpty(t,0);!r(e)&&null!==e.char;)e=e._offset+1<runs.getTextLength(t[e._run].text)?character(t,e._run,e._offset+1):firstNonEmpty(t,e._run+1)}};
@@ -0,0 +1,5 @@
1
+ declare function _exports(obj: any, number: any, allCodes: any): any;
2
+ declare namespace _exports {
3
+ function editFilter(doc: any): void;
4
+ }
5
+ export = _exports;
@@ -0,0 +1 @@
1
+ var text=require("./text"),frame=require("./frame"),node=require("./node"),rect=require("./rect"),util=require("./util"),inlineNodePrototype=node.derive({parent:function(){return this._parent},draw:function(e){this.inline.draw(e,this.left,this.baseline,this.measured.width,this.measured.ascent,this.measured.descent,this.formatting)},position:function(e,t,i){this.left=e,this.baseline=t,i&&(this._bounds=i)},bounds:function(){return this._bounds||rect(this.left,this.baseline-this.measured.ascent,this.measured.width,this.measured.ascent+this.measured.descent)},byCoordinate:function(e,t){return e<=this.bounds().center().x?this:this.next()}}),inlineNode=function(e,t,i,n,r){if(!e.draw||!e.measure)throw new Error;return Object.create(inlineNodePrototype,{inline:{value:e},_parent:{value:t},ordinal:{value:i},length:{value:n},formatting:{value:r},measured:{value:e.measure(r)}})},codes={number:function(e,t){var i=t+1+".";return{measure:function(e){return text.measure(i,e)},draw:function(e,t,n,r,s,u,o){text.draw(e,i,o,t,n,r,s,u)}}}},listTerminator=function(e){return util.derive(e,{eof:!0,measure:function(e){return{width:18,ascent:0,descent:0}},draw:function(e,t,i){}})};codes.listNext=codes.listEnd=listTerminator,codes.listStart=function(e,t,i){return util.derive(e,{block:function(t,n,r,s,u,o){var a,d,c,l=node.generic("list",u,t,n),h=function(e,u){a=node.generic("item",l);var o=i(e.marker||{$:"number"},l.children().length);(c=inlineNode(o,a,s,1,u)).block=!0,d=frame(t+50,n,r-50,s+1,a,(function(e){return"listEnd"===e.$}),c.measured.ascent)};return h(e,o),function(e){if(d?d((function(e){s=e.ordinal+e.length;var i=e.bounds(),r=e.first(),u=t+50-10-c.measured.width,o=rect(t,n,50,i.h);"baseline"in r?c.position(u,r.baseline,o):c.position(u,n+c.measured.ascent,o),n=i.t+i.h,a.children().push(c),a.children().push(e),a.finalize(),l.children().push(a),a=d=c=null}),e):s++,!d){var i=e.code();if(i){if("listEnd"==i.$)return l.finalize(),l;"listNext"==i.$&&h(i,e.codeFormatting())}}}}})},module.exports=exports=function(e,t,i){var n=codes[e.$];return n&&n(e,t,i)},exports.editFilter=function(e){var t=0;if(!e.words.some((function(i,n){var r=i.code();if(r)switch(r.$){case"listStart":t++;break;case"listNext":if(0===t)return e.spliceWordsWithRuns(n,1,[util.derive(i.codeFormatting(),{text:{$:"listStart",marker:r.marker}})]),!0;break;case"listEnd":0===t&&e.spliceWordsWithRuns(n,1,[]),t--}}))&&t>0){for(var i=[];t>0;)t--,i.push({text:{$:"listEnd"}});e.spliceWordsWithRuns(e.words.length-1,0,i)}};
@@ -0,0 +1,2 @@
1
+ declare function _exports(): any;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var per=require("per"),characters=require("./characters"),split=require("./split"),word=require("./word"),node=require("./node"),runs=require("./runs"),range=require("./range"),util=require("./util"),frame=require("./frame"),codes=require("./codes"),rect=require("./rect"),makeEditCommand=function(t,e,n,r){var i=t.selection.start,s=t.selection.end;return function(o){t._wordOrdinals=[];var a=Array.prototype.splice.apply(t.words,[e,n].concat(r));o(makeEditCommand(t,e,r.length,a)),t._nextSelection={start:i,end:s}}},makeTransaction=function(t){var e=[],n=function(t){e.push(t),n.length=e.length};return t(n),function(t){t(makeTransaction((function(t){for(;e.length;)e.pop()(t)})))}},isBreaker=function(t){if(t.isNewLine())return!0;var e=t.code();return!(!e||!e.block&&!e.eof)},prototype=node.derive({load:function(t,e){var n=this;this.undo=[],this.redo=[],this._wordOrdinals=[],this.words=per(characters(t)).per(split(n.codes)).map((function(t){return word(t,n.codes)})).all(),this.layout(),this.contentChanged.fire(),this.select(0,0,e)},layout:function(){this.frame=null;try{this.frame=per(this.words).per(frame(0,0,this._width,0,this)).first()}catch(t){console.error(t)}if(this.frame){if(this._nextSelection){var t=this._nextSelection;delete this._nextSelection,this.select(t.start,t.end)}}else console.error("A bug somewhere has produced an invalid state - rolling back"),this.performUndo()},range:function(t,e){return range(this,t,e)},documentRange:function(){return this.range(0,this.frame.length-1)},selectedRange:function(){return this.range(this.selection.start,this.selection.end)},save:function(){return this.documentRange().save()},paragraphRange:function(t,e){var n,r=this.wordContainingOrdinal(t);if(t=0,r&&!isBreaker(r.word))for(n=r.index;n>0;n--)if(isBreaker(this.words[n-1])){t=this.wordOrdinal(n);break}var i=this.wordContainingOrdinal(e);if(e=this.frame.length-1,i&&!isBreaker(i.word))for(n=i.index;n<this.words.length;n++)if(isBreaker(this.words[n])){e=this.wordOrdinal(n);break}return this.range(t,e)},insert:function(t,e){this.select(this.selection.end+this.selectedRange().setText(t),null,e)},modifyInsertFormatting:function(t,e){this.nextInsertFormatting[t]=e,this.notifySelectionChanged()},applyInsertFormatting:function(t){var e=this.nextInsertFormatting,n=Object.keys(e);n.length&&t.forEach((function(t){n.forEach((function(n){t[n]=e[n]}))}))},wordOrdinal:function(t){if(t<this.words.length){var e=this._wordOrdinals.length;if(e<t+1)for(var n=e>0?this._wordOrdinals[e-1]:0,r=e;r<=t;r++)this._wordOrdinals[r]=n,n+=this.words[r].length;return this._wordOrdinals[t]}},wordContainingOrdinal:function(t){var e,n=0;return this.words.some((function(r,i){if(t>=n&&t<n+r.length)return e={word:r,ordinal:n,index:i,offset:t-n},!0;n+=r.length})),e},runs:function(t,e){var n=this.wordContainingOrdinal(Math.max(0,e.start)),r=this.wordContainingOrdinal(Math.min(e.end,this.frame.length-1));if(n.index===r.index)n.word.runs(t,{start:n.offset,end:r.offset});else{n.word.runs(t,{start:n.offset});for(var i=n.index+1;i<r.index;i++)this.words[i].runs(t);r.word.runs(t,{end:r.offset})}},spliceWordsWithRuns:function(t,e,n){var r=this,i=per(characters(n)).per(split(r.codes)).truthy().map((function(t){return word(t,r.codes)})).all(),s=!1;if("_filtersRunning"in r)r._filtersRunning++;else{for(var o=0;o<e;o++)this.words[t+o].code()&&(s=!0);s||(s=i.some((function(t){return!!t.code()})))}this.transaction((function(n){if(makeEditCommand(r,t,e,i)(n),s){r._filtersRunning=0;try{for(;;){var o=r._filtersRunning;if(!r.editFilters.some((function(t){return t(r),o!==r._filtersRunning})))break}}finally{delete r._filtersRunning}}}))},splice:function(t,e,n){if("string"==typeof n){var r=Math.max(0,t-1),i=per({start:r,end:r+1}).per(this.runs,this).first();n=[i?Object.create(i,{text:{value:n}}):{text:n}]}else Array.isArray(n)||(n=[{text:n}]);this.applyInsertFormatting(n);var s,o,a=this.wordContainingOrdinal(t),d=this.wordContainingOrdinal(e);if(t===a.ordinal)if(a.index>0&&!isBreaker(this.words[a.index-1])){a.index--;var h=this.words[a.index];s=per({}).per(h.runs,h).all()}else s=[];else s=per({end:a.offset}).per(a.word.runs,a.word).all();e===d.ordinal?e===this.frame.length-1||isBreaker(d.word)?(o=[],d.index--):o=per({}).per(d.word.runs,d.word).all():o=per({start:d.offset}).per(d.word.runs,d.word).all();var l=this.frame.length;return this.spliceWordsWithRuns(a.index,d.index-a.index+1,per(s).concat(n).concat(o).per(runs.consolidate()).all()),this.frame?this.frame.length-l:0},registerEditFilter:function(t){this.editFilters.push(t)},width:function(t){if(0===arguments.length)return this._width;this._width=t,this.layout()},children:function(){return[this.frame]},toggleCaret:function(){var t=this.caretVisible;return this.selection.start===this.selection.end&&(this.selectionJustChanged?this.selectionJustChanged=!1:this.caretVisible=!this.caretVisible),this.caretVisible!==t},getCaretCoords:function(t){var e,n=this.byOrdinal(t);if(n){if(n.block&&t>0){var r=this.byOrdinal(t-1);if(r.newLine){var i=r.bounds(),s=r.parent().parent().bounds();e=rect(s.l,s.b,1,i.h)}else e=r.bounds(),e=rect(e.r,e.t,1,e.h)}else e=(e=n.bounds()).h?rect(e.l,e.t,1,e.h):rect(e.l,e.t,e.w,1);return e}},byCoordinate:function(t,e){for(var n=this.frame.byCoordinate(t,e).ordinal,r=this.getCaretCoords(n);r.b<=e&&n<this.frame.length-1;)n++,r=this.getCaretCoords(n);for(;r.t>=e&&n>0;)n--,r=this.getCaretCoords(n);return this.byOrdinal(n)},drawSelection:function(t,e){if(this.selection.end===this.selection.start){if(this.selectionJustChanged||e&&this.caretVisible){var n=this.getCaretCoords(this.selection.start);n&&(t.save(),t.fillStyle="black",n.fill(t),t.restore())}}else t.save(),t.fillStyle=e?"rgba(0, 100, 200, 0.3)":"rgba(160, 160, 160, 0.3)",this.selectedRange().parts((function(e){e.bounds(!0).fill(t)})),t.restore()},notifySelectionChanged:function(t){var e=null,n=this;this.selectionChanged.fire((function(){return e||(e=n.selectedRange().getFormatting()),e}),t)},select:function(t,e,n){this.frame&&(this.selection.start=Math.max(0,t),this.selection.end=Math.min("number"==typeof e?e:this.selection.start,this.frame.length-1),this.selectionJustChanged=!0,this.caretVisible=!0,this.nextInsertFormatting={},this.notifySelectionChanged(n))},performUndo:function(t){var e=t?this.redo:this.undo,n=t?this.undo:this.redo,r=e.pop();r&&(r((function(t){n.push(t)})),this.layout(),this.contentChanged.fire())},canUndo:function(t){return t?!!this.redo.length:!!this.undo.length},transaction:function(t){if(this._currentTransaction)t(this._currentTransaction);else{for(var e=this;this.undo.length>50;)e.undo.shift();this.redo.length=0;var n=!1;this.undo.push(makeTransaction((function(r){e._currentTransaction=r;try{t(r)}finally{n=r.length>0,e._currentTransaction=null}}))),n&&(e.layout(),e.contentChanged.fire())}},type:"document"});exports=module.exports=function(){var t=Object.create(prototype);return t._width=0,t.selection={start:0,end:0},t.caretVisible=!0,t.customCodes=function(t,e,n){},t.codes=function(e,n){return codes(e,n,t.codes)||t.customCodes(e,n,t.codes)},t.selectionChanged=util.event(),t.contentChanged=util.event(),t.editFilters=[codes.editFilter],t.load([]),t};
@@ -0,0 +1,6 @@
1
+ export function isAttached(element: any): boolean;
2
+ export function clear(element: any): void;
3
+ export function setText(element: any, text: any): void;
4
+ export function handleEvent(element: any, name: any, handler: any): void;
5
+ export function handleMouseEvent(element: any, name: any, handler: any): void;
6
+ export function effectiveStyle(element: any, name: any): string;
@@ -0,0 +1 @@
1
+ exports.isAttached=function(e){for(var t=e;t.parentNode;)t=t.parentNode;return!!t.body},exports.clear=function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},exports.setText=function(e,t){exports.clear(e),e.appendChild(document.createTextNode(t))},exports.handleEvent=function(e,t,n){e.addEventListener(t,(function(e){!1===n(e)&&e.preventDefault()}))},exports.handleMouseEvent=function(e,t,n){exports.handleEvent(e,t,(function(t){var o=e.getBoundingClientRect();return n(t,t.clientX-o.left,t.clientY-o.top)}))},exports.effectiveStyle=function(e,t){return document.defaultView.getComputedStyle(e).getPropertyValue(t)};
@@ -0,0 +1 @@
1
+ export function create(element: any): any;
@@ -0,0 +1 @@
1
+ var per=require("per"),carotaDoc=require("./doc"),dom=require("./dom"),rect=require("./rect");setInterval((function(){var e=document.querySelectorAll(".carotaEditorCanvas"),t=document.createEvent("Event");t.initEvent("carotaEditorSharedTimer",!0,!0);for(var a=0;a<e.length;a++)e[a].dispatchEvent(t)}),200),exports.create=function(e){"absolute"!==dom.effectiveStyle(e,"position")&&(e.style.position="relative"),e.innerHTML='<div class="carotaSpacer"><canvas width="100" height="100" class="carotaEditorCanvas" style="position: absolute;"></canvas></div><div class="carotaTextArea" style="overflow: hidden; position: absolute; height: 0;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; padding: 0px; width: 1000px; height: 1em; outline: none; font-size: 4px;"></textarea>';var t=e.querySelector("canvas"),a=e.querySelector(".carotaSpacer"),r=e.querySelector(".carotaTextArea"),n=e.querySelector("textarea"),l=carotaDoc(),o=0,i=null,c=null,s=null,d=null,u="",h=null,f=null,v={66:"bold",73:"italic",85:"underline",83:"strikeout"},g=function(e,t){return t<0?e<=0:e>=l.frame.length-1},m=function(e,t){return e.b<=t.t||t.b<=e.t},p=function(e,t){var a,r=l.getCaretCoords(e);for(c=null!==i?i:r.l;!g(e,t)&&(e+=t,a=l.getCaretCoords(e),!m(a,r)););for(r=a;!g(e,t)&&!(t>0&&a.l>=c||t<0&&a.l<=c);)if(e+=t,a=l.getCaretCoords(e),m(a,r)){e-=t;break}return e},b=function(e,t){for(var a,r=l.getCaretCoords(e);!g(e,t);)if(e+=t,a=l.getCaretCoords(e),m(a,r)){e-=t;break}return e},x=function(e,t,a){var r=l.selection.start,n=l.selection.end,s=l.frame.length-1,u=!1;if(c=null,t){if(!o)switch(e){case 37:case 38:case 36:case 33:o=-1;break;case 39:case 40:case 35:case 34:o=1}}else o=0;var g=1===o?n:r,m=!1;switch(e){case 37:if(t||r==n){if(g>0)if(a)g=(x=l.wordContainingOrdinal(g)).ordinal===g?x.index>0?l.wordOrdinal(x.index-1):0:x.ordinal;else g--}else g=r;m=!0;break;case 39:var x;if(t||r==n){if(g<s)if(a)g=(x=l.wordContainingOrdinal(g)).ordinal+x.word.length;else g++}else g=n;m=!0;break;case 40:g=p(g,1),m=!0;break;case 38:g=p(g,-1),m=!0;break;case 36:g=b(g,-1),m=!0;break;case 35:g=b(g,1),m=!0;break;case 33:g=0,m=!0;break;case 34:g=s,m=!0;break;case 8:r===n&&r>0&&(l.range(r-1,r).clear(),d=r-1,l.select(d,d),u=!0);break;case 46:r===n&&r<s&&(l.range(r,r+1).clear(),u=!0);break;case 90:a&&(u=!0,l.performUndo());break;case 89:a&&(u=!0,l.performUndo(!0));break;case 65:a&&(u=!0,l.select(0,s));break;case 67:case 88:a&&(h=l.selectedRange().save(),f=l.selectedRange().plainText())}var w=v[e];if(a&&w){var y=l.selectedRange();y.setFormatting(w,!0!==y.getFormatting()[w]),k(),u=!0}if(m){switch(o){case 0:r=n=g;break;case-1:r=g;break;case 1:n=g}if(r===n)o=0;else if(r>n){o=-o;var C=n;n=r,r=C}d=g,l.select(r,n),u=!0}return i=c,u};dom.handleEvent(n,"keydown",(function(e){if(x(e.keyCode,e.shiftKey,e.ctrlKey))return!1;console.log(e.which)}));var w="top";function y(){var t=l.frame.bounds().h;if(t<e.clientHeight)switch(w){case"middle":return(e.clientHeight-t)/2;case"bottom":return e.clientHeight-t}return 0}l.setVerticalAlignment=function(e){w=e,k()};var k=function(){var r=1*e.clientWidth;l.width()!==r&&l.width(r);var o=l.frame.bounds().h,i=Math.max(1,window.devicePixelRatio||1),c=Math.max(l.frame.actualWidth(),e.clientWidth),d=e.clientHeight;t.width=i*c,t.height=i*d,t.style.width=c+"px",t.style.height=d+"px",t.style.top=e.scrollTop+"px",a.style.width=c+"px",a.style.height=Math.max(o,e.clientHeight)+"px",o<e.clientHeight-50&&l.frame.actualWidth()<=r?e.style.overflow="hidden":e.style.overflow="auto";var u=t.getContext("2d");u.scale(i,i),u.clearRect(0,0,c,d),u.translate(0,y()-e.scrollTop),l.draw(u,rect(0,e.scrollTop,c,d)),l.drawSelection(u,s||document.activeElement===n)};dom.handleEvent(e,"scroll",k),dom.handleEvent(n,"input",(function(){var e=n.value;u!=e&&(u="",n.value="",e===f&&(e=h),l.insert(e))}));var C=function(){d=null===d?l.selection.end:d;var t=l.byOrdinal(d);if(d=null,t){var a=t.bounds();r.style.left=a.l+"px",r.style.top=a.t+"px",n.focus();var o=Math.max(0,a.t+a.h-(e.scrollTop+e.clientHeight));o&&(e.scrollTop+=o);var i=Math.max(0,e.scrollTop-a.t);i&&(e.scrollTop-=i);var c=Math.max(0,a.l-(e.scrollLeft+e.clientWidth));c&&(e.scrollLeft+=c);var s=Math.max(0,e.scrollLeft-a.l);s&&(e.scrollLeft-=s)}u=l.selectedRange().plainText(),n.value=u,n.select(),setTimeout((function(){n.focus()}),10)};function T(e,t){dom.handleMouseEvent(a,e,(function(e,a,r){t(l.byCoordinate(a,r-y()))}))}l.selectionChanged((function(e,t){k(),s||!1!==t&&C()})),T("mousedown",(function(e){s=e.ordinal,l.select(e.ordinal,e.ordinal),i=null})),T("dblclick",(function(e){(e=e.parent())&&l.select(e.ordinal,e.ordinal+(e.word?e.word.text.length:e.length))})),T("mousemove",(function(e){null!==s&&e&&(d=e.ordinal,s>e.ordinal?l.select(e.ordinal,s):l.select(s,e.ordinal))})),T("mouseup",(function(e){s=null,i=null,C(),n.focus()}));var E=(new Date).getTime(),H=!1,S=e.clientWidth,q=e.clientHeight,M=function(){var t=!1,a=document.activeElement===n;H!==a&&(H=a,t=!0);var r=(new Date).getTime();r>E&&(E=r+500,l.toggleCaret()&&(t=!0)),e.clientWidth===S&&e.clientHeight===q||(t=!0,S=e.clientWidth,q=e.clientHeight),t&&k()};return dom.handleEvent(t,"carotaEditorSharedTimer",M),M(),l.sendKey=x,l};
@@ -0,0 +1,2 @@
1
+ declare function _exports(left: any, top: any, width: any, ordinal: any, parent: any, includeTerminator: any, initialAscent: any, initialDescent: any): (emit: any, word: any) => true | undefined;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var node=require("./node"),wrap=require("./wrap"),rect=require("./rect"),prototype=node.derive({bounds:function(){if(!this._bounds){var t=0,e=0,n=0,r=0;if(this.lines.length){var i=this.lines[0].bounds();t=i.l,e=i.t,this.lines.forEach((function(t){var e=t.bounds();n=Math.max(n,e.l+e.w),r=Math.max(r,e.t+e.h)}))}this._bounds=rect(t,e,n-t,this.height||r-e)}return this._bounds},actualWidth:function(){if(!this._actualWidth){var t=0;this.lines.forEach((function(e){"number"==typeof e.actualWidth&&(t=Math.max(t,e.actualWidth))})),this._actualWidth=t}return this._actualWidth},children:function(){return this.lines},parent:function(){return this._parent},draw:function(t,e){var n=e?e.t:0,r=e?e.t+e.h:Number.MAX_VALUE;this.lines.some((function(i){var a=i.bounds();return!(a.t+a.h<n)&&(a.t>r||void i.draw(t,e))}))},type:"frame"});exports=module.exports=function(t,e,n,r,i,a,u,o){var h=[],s=Object.create(prototype,{lines:{value:h},_parent:{value:i},ordinal:{value:r}}),c=wrap(t,e,n,r,s,a,u,o),l=0,d=0;return function(t,e){if(c((function(t){"number"==typeof t?d=t:(l=t.ordinal+t.length-r,h.push(t))}),e))return Object.defineProperty(s,"length",{value:l}),Object.defineProperty(s,"height",{value:d}),t(s),!0}};
@@ -0,0 +1 @@
1
+ export function parse(html: any, classes: any): any[];
@@ -0,0 +1 @@
1
+ var runs=require("./runs"),per=require("per"),tag=function(e,t){return function(n,a){n.nodeName===e&&(a[t]=!0)}},value=function(e,t,n,a){return function(i,r){var l=i[e]&&i[e][t];l&&(a&&(l=a(l)),r[n]=l)}},attrValue=function(e,t,n){return value("attributes",e,t,n)},styleValue=function(e,t,n){return value("style",e,t,n)},styleFlag=function(e,t,n){return function(a,i){a.style&&a.style[e]===t&&(i[n]=!0)}},obsoleteFontSizes=[6,7,9,10,12,16,20,30],aligns={left:!0,center:!0,right:!0,justify:!0},checkAlign=function(e){return aligns[e]?e:"left"},fontName=function(e){var t=e.split(/\s*,\s*/g);if(0==t.length)return e;var n=(e=t[0]).match(/^"(.*)"$/);return n||(n=e.match(/^'(.*)'$/))?n[1].trim():e},headings={H1:30,H2:20,H3:16,H4:14,H5:12},handlers=[tag("B","bold"),tag("STRONG","bold"),tag("I","italic"),tag("EM","italic"),tag("U","underline"),tag("S","strikeout"),tag("STRIKE","strikeout"),tag("DEL","strikeout"),styleFlag("fontWeight","bold","bold"),styleFlag("fontStyle","italic","italic"),styleFlag("textDecoration","underline","underline"),styleFlag("textDecoration","line-through","strikeout"),styleValue("color","color"),styleValue("fontFamily","font",fontName),styleValue("fontSize","size",(function(e){var t=e.match(/^([\d\.]+)pt$/);return t?parseFloat(t[1]):10})),styleValue("textAlign","align",checkAlign),function(e,t){"SUB"===e.nodeName&&(t.script="sub")},function(e,t){"SUPER"===e.nodeName&&(t.script="super")},function(e,t){"CODE"===e.nodeName&&(t.font="monospace")},function(e,t){var n=headings[e.nodeName];n&&(t.size=n)},attrValue("color","color"),attrValue("face","font",fontName),attrValue("align","align",checkAlign),attrValue("size","size",(function(e){return obsoleteFontSizes[e]||10}))],newLines=["BR","P","H1","H2","H3","H4","H5"],isNewLine={};newLines.forEach((function(e){isNewLine[e]=!0})),exports.parse=function(e,t){var n=e;"string"==typeof n&&((n=document.createElement("div")).innerHTML=e);var a=[],i=!0,r=per(runs.consolidate()).into(a),l=function(e,t){r.submit(Object.create(t,{text:{value:e}}))};return function e(n,a){if(3==n.nodeType)!function(e,t){var n=(e=e.replace(/\n+\s*/g," ")).length;e=e.replace(/^\s+/,""),i?i=!1:n!==e.length&&(e=" "+e),(n=e.length)!==(e=e.replace(/\s+$/,"")).length&&(i=!0,e+=" "),l(e,t)}(n.nodeValue,a);else{a=Object.create(a);var r=n.attributes.class;if(r&&r.value.split(" ").forEach((function(e){(e=t[e])&&Object.keys(e).forEach((function(t){a[t]=e[t]}))})),handlers.forEach((function(e){e(n,a)})),n.childNodes)for(var o=0;o<n.childNodes.length;o++)e(n.childNodes[o],a);isNewLine[n.nodeName]&&(l("\n",a),i=!0)}}(n,{}),a};
@@ -0,0 +1,2 @@
1
+ declare function _exports(doc: any, left: any, width: any, baseline: any, ascent: any, descent: any, words: any, ordinal: any): any;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var positionedWord=require("./positionedword"),rect=require("./rect"),node=require("./node"),runs=require("./runs"),prototype=node.derive({bounds:function(e){if(e){var t=this.first().bounds(),i=this.last().bounds();return rect(t.l,this.baseline-this.ascent,i.l+i.w-t.l,this.ascent+this.descent)}return rect(this.left,this.baseline-this.ascent,this.width,this.ascent+this.descent)},parent:function(){return this.doc},children:function(){return this.positionedWords},type:"line"});module.exports=function(e,t,i,n,r,s,a,o){var d=a[0].align(),c=Object.create(prototype,{doc:{value:e},left:{value:t},width:{value:i},baseline:{value:n},ascent:{value:r},descent:{value:s},ordinal:{value:o},align:{value:d}}),l=0;a.forEach((function(e){l+=e.width})),l-=a[a.length-1].space.width;var u=0,h=0;if(l<i)switch(d){case"right":u=i-l;break;case"center":u=(i-l)/2;break;case"justify":a.length>1&&!a[a.length-1].isNewLine()&&(h=(i-l)/(a.length-1))}return Object.defineProperty(c,"positionedWords",{value:a.map((function(e){var t=u;u+=e.width+h;var i=o;return o+=e.text.length+e.space.length,positionedWord(e,c,t,i,e.width+h)}))}),Object.defineProperty(c,"actualWidth",{value:l}),Object.defineProperty(c,"length",{value:o-c.ordinal}),c};
@@ -0,0 +1,27 @@
1
+ export namespace prototype {
2
+ function children(): never[];
3
+ function parent(): null;
4
+ function first(): never;
5
+ function last(): never;
6
+ function next(): any;
7
+ function previous(): any;
8
+ function byOrdinal(index: any): {
9
+ children: () => never[];
10
+ parent: () => null;
11
+ first: () => never;
12
+ last: () => never;
13
+ next: () => any;
14
+ previous: () => any;
15
+ byOrdinal: (index: any) => any | null;
16
+ byCoordinate: (x: any, y: any) => any;
17
+ draw: (ctx: any, viewPort: any) => void;
18
+ parentOfType: (type: any) => null;
19
+ bounds: () => any;
20
+ } | null;
21
+ function byCoordinate(x: any, y: any): any;
22
+ function draw(ctx: any, viewPort: any): void;
23
+ function parentOfType(type: any): null;
24
+ function bounds(): any;
25
+ }
26
+ export function derive(methods: any): any;
27
+ export function generic(type: any, parent: any, left: any, top: any): any;
@@ -0,0 +1 @@
1
+ var per=require("per"),runs=require("./runs"),rect=require("./rect"),util=require("./util");exports.prototype={children:function(){return[]},parent:function(){return null},first:function(){return this.children()[0]},last:function(){return this.children()[this.children().length-1]},next:function(){for(var r=this;;){var n=r.parent();if(!n)return null;var e=n.children(),t=e[e.indexOf(r)+1];if(t){for(;;){var i=t.first();if(!i)break;t=i}return t}r=n}},previous:function(){var r=this.parent();if(!r)return null;var n=r.children(),e=n[n.indexOf(this)-1];if(e)return e;var t=r.previous();return t?t.last():null},byOrdinal:function(r){var n=null;return this.children().some((function(e){if(r>=e.ordinal&&r<e.ordinal+e.length&&(n=e.byOrdinal(r)))return!0}))?n:this},byCoordinate:function(r,n){var e;if(this.children().some((function(t){if(t.bounds().contains(r,n)&&(e=t.byCoordinate(r,n)))return!0})),!e){for(e=this.last();e;){var t=e.last();if(!t)break;e=t}var i=e.next();i&&i.block&&(e=i)}return e},draw:function(r,n){this.children().forEach((function(e){e.draw(r,n)}))},parentOfType:function(r){var n=this.parent();return n&&(n.type===r?n:n.parentOfType(r))},bounds:function(){var r=this._left,n=this._top,e=0,t=0;return this.children().forEach((function(i){var u=i.bounds();r=Math.min(r,u.l),n=Math.min(n,u.t),e=Math.max(e,u.l+u.w),t=Math.max(t,u.t+u.h)})),rect(r,n,e-r,t-n)}},exports.derive=function(r){return util.derive(exports.prototype,r)};var generic=exports.derive({children:function(){return this._children},parent:function(){return this._parent},finalize:function(r,n){var e=Number.MAX_VALUE,t=0;this._children.forEach((function(r){e=Math.min(e,r.ordinal),t=Math.max(t,r.ordinal+r.length)})),Object.defineProperty(this,"ordinal",{value:e-(r||0)}),Object.defineProperty(this,"length",{value:(n||0)+t-e})}});exports.generic=function(r,n,e,t){return Object.create(generic,{type:{value:r},_children:{value:[]},_parent:{value:n},_left:{value:"number"==typeof e?e:Number.MAX_VALUE},_top:{value:"number"==typeof t?t:Number.MAX_VALUE}})};
@@ -0,0 +1,2 @@
1
+ declare function _exports(run: any, codes: any): any;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var text=require("./text"),defaultInline={measure:function(t){var e=e.measure("?",t);return{width:e.width+4,ascent:e.width+2,descent:e.width+2}},draw:function(t,e,i,s,n,r){t.fillStyle="silver",t.fillRect(e,i-n,s,n+r),t.strokeRect(e,i-n,s,n+r),t.fillStyle="black",t.fillText("?",e+2,i)}},prototype={draw:function(t,e,i){"string"==typeof this.run.text?text.draw(t,this.run.text,this.run,e,i,this.width,this.ascent,this.descent):this.code&&this.code.draw&&(t.save(),this.code.draw(t,e,i,this.width,this.ascent,this.descent,this.run),t.restore())}};module.exports=function(t,e){var i,s,n;"string"==typeof t.text?(s=1===t.text.length&&"\n"===t.text[0],i=text.measure(s?text.nbsp:t.text,t)):i=(n=e(t.text)||defaultInline).measure?n.measure(t):{width:0,ascent:0,descent:0};var r=Object.create(prototype,{run:{value:t},isNewLine:{value:s},width:{value:s?0:i.width},ascent:{value:i.ascent},descent:{value:i.descent}});return n&&Object.defineProperty(r,"code",{value:n}),r};
@@ -0,0 +1,2 @@
1
+ declare function _exports(word: any, line: any, left: any, ordinal: any, width: any): any;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var rect=require("./rect"),part=require("./part"),text=require("./text"),node=require("./node"),word=require("./word"),runs=require("./runs"),newLineWidth=function(e){return text.measure(text.enter,e).width},positionedChar=node.derive({bounds:function(){var e=this.word.bounds(),t=this.word.word.isNewLine()?newLineWidth(this.word.word.run):this.width||this.part.width;return rect(e.l+this.left,e.t,t,e.h)},parent:function(){return this.word},byOrdinal:function(){return this},byCoordinate:function(e,t){return e<=this.bounds().center().x?this:this.next()},type:"character"}),prototype=node.derive({draw:function(e){this.word.draw(e,this.line.left+this.left,this.line.baseline)},bounds:function(){return rect(this.line.left+this.left,this.line.baseline-this.line.ascent,this.word.isNewLine()?newLineWidth(this.word.run):this.width,this.line.ascent+this.line.descent)},parts:function(e){this.word.text.parts.some(e)||this.word.space.parts.some(e)},realiseCharacters:function(){if(!this._characters){var e=[],t=0,r=this,i=this.ordinal,n=this.parentOfType("document").codes;this.parts((function(s){runs.pieceCharacters((function(h){var a=Object.create(s.run);a.text=h;var o=part(a,n);e.push(Object.create(positionedChar,{left:{value:t},part:{value:o},word:{value:r},ordinal:{value:i},length:{value:1}})),t+=o.width,i++}),s.run.text)}));var s=e[e.length-1];s&&(Object.defineProperty(s,"width",{value:this.width-s.left}),(this.word.isNewLine()||this.word.code()&&this.word.code().eof)&&Object.defineProperty(s,"newLine",{value:!0})),this._characters=e}},children:function(){return this.realiseCharacters(),this._characters},parent:function(){return this.line},type:"word"});module.exports=function(e,t,r,i,n){return Object.create(prototype,{word:{value:e},line:{value:t},left:{value:r},width:{value:n},ordinal:{value:i},length:{value:e.text.length+e.space.length}})};
@@ -0,0 +1,17 @@
1
+ declare function _exports(doc: any, start: any, end: any): Range;
2
+ export = _exports;
3
+ declare function Range(doc: any, start: any, end: any): void;
4
+ declare class Range {
5
+ constructor(doc: any, start: any, end: any);
6
+ doc: any;
7
+ start: any;
8
+ end: any;
9
+ parts(emit: any, list: any): void;
10
+ clear(): any;
11
+ setText(text: any): any;
12
+ runs(emit: any): void;
13
+ plainText(): any;
14
+ save(): any;
15
+ getFormatting(): any;
16
+ setFormatting(attribute: any, value: any): void;
17
+ }
@@ -0,0 +1 @@
1
+ var per=require("per"),runs=require("./runs");function Range(t,n,r){this.doc=t,this.start=n,this.end=r,n>r&&(this.start=r,this.end=n)}Range.prototype.parts=function(t,n){n=n||this.doc.children();var r=this;n.some((function(n){return!(n.ordinal+n.length<=r.start)&&(n.ordinal>=r.end||void(n.ordinal>=r.start&&n.ordinal+n.length<=r.end?t(n):r.parts(t,n.children())))}))},Range.prototype.clear=function(){return this.setText([])},Range.prototype.setText=function(t){return this.doc.splice(this.start,this.end,t)},Range.prototype.runs=function(t){this.doc.runs(t,this)},Range.prototype.plainText=function(){return per(this.runs,this).map(runs.getPlainText).all().join("")},Range.prototype.save=function(){return per(this.runs,this).per(runs.consolidate()).all()},Range.prototype.getFormatting=function(){var t=this;if(t.start===t.end){var n=t.start;n>0&&n--,t.start=n,t.end=n+1}return per(t.runs,t).reduce(runs.merge).last()||runs.defaultFormatting},Range.prototype.setFormatting=function(t,n){var r=this;if("align"===t&&(r=r.doc.paragraphRange(r.start,r.end)),r.start===r.end)r.doc.modifyInsertFormatting(t,n);else{var e=r.save(),s={};s[t]=n,runs.format(e,s),r.setText(e)}},module.exports=function(t,n,r){return new Range(t,n,r)};
@@ -0,0 +1,2 @@
1
+ declare function _exports(l: any, t: any, w: any, h: any): any;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var prototype={contains:function(t,i){return t>=this.l&&t<this.l+this.w&&i>=this.t&&i<this.t+this.h},stroke:function(t){t.strokeRect(this.l,this.t,this.w,this.h)},fill:function(t){t.fillRect(this.l,this.t,this.w,this.h)},offset:function(t,i){return rect(this.l+t,this.t+i,this.w,this.h)},equals:function(t){return this.l===t.l&&this.t===t.t&&this.w===t.w&&this.h===t.h},center:function(){return{x:this.l+this.w/2,y:this.t+this.h/2}}},rect=module.exports=function(t,i,h,s){return Object.create(prototype,{l:{value:t},t:{value:i},w:{value:h},h:{value:s},r:{value:t+h},b:{value:i+s}})};
@@ -0,0 +1,27 @@
1
+ export var formattingKeys: string[];
2
+ export namespace defaultFormatting {
3
+ const size: number;
4
+ const font: string;
5
+ const color: string;
6
+ const bold: boolean;
7
+ const italic: boolean;
8
+ const underline: boolean;
9
+ const strikeout: boolean;
10
+ const align: string;
11
+ const script: string;
12
+ }
13
+ export function sameFormatting(run1: any, run2: any): boolean;
14
+ export function clone(run: any): {
15
+ text: any;
16
+ };
17
+ export var multipleValues: {};
18
+ export function merge(run1: any, run2: any, ...args: any[]): any;
19
+ export function format(run: any, template: any): void;
20
+ export function consolidate(): (emit: any, run: any) => void;
21
+ export function getPlainText(run: any): any;
22
+ export function getPieceLength(piece: any): any;
23
+ export function getPiecePlainText(piece: any): any;
24
+ export function getTextLength(text: any): number;
25
+ export function getSubText(emit: any, text: any, start: any, count: any): void;
26
+ export function getTextChar(text: any, offset: any): undefined;
27
+ export function pieceCharacters(each: any, piece: any): void;
@@ -0,0 +1 @@
1
+ exports.formattingKeys=["bold","italic","underline","strikeout","color","font","size","align","script"],exports.defaultFormatting={size:10,font:"sans-serif",color:"black",bold:!1,italic:!1,underline:!1,strikeout:!1,align:"left",script:"normal"},exports.sameFormatting=function(t,e){return exports.formattingKeys.every((function(r){return t[r]===e[r]}))},exports.clone=function(t){var e={text:t.text};return exports.formattingKeys.forEach((function(r){var n=t[r];n&&n!=exports.defaultFormatting[r]&&(e[r]=n)})),e},exports.multipleValues={},exports.merge=function(t,e){if(1===arguments.length)return Array.isArray(t)?t.reduce(exports.merge):t;if(arguments.length>2)return exports.merge(Array.prototype.slice.call(arguments,0));var r={};return exports.formattingKeys.forEach((function(n){(n in t||n in e)&&(t[n]===e[n]?r[n]=t[n]:r[n]=exports.multipleValues)})),r},exports.format=function(t,e){Array.isArray(t)?t.forEach((function(t){exports.format(t,e)})):Object.keys(e).forEach((function(r){e[r]!==exports.multipleValues&&(t[r]=e[r])}))},exports.consolidate=function(){var t;return function(e,r){t&&exports.sameFormatting(t,r)&&"string"==typeof t.text&&"string"==typeof r.text?t.text+=r.text:e(t=exports.clone(r))}},exports.getPlainText=function(t){if("string"==typeof t.text)return t.text;if(Array.isArray(t.text)){var e=[];return t.text.forEach((function(t){e.push(exports.getPiecePlainText(t))})),e.join("")}return"_"},exports.getPieceLength=function(t){return t.length||1},exports.getPiecePlainText=function(t){return t.length?t:"_"},exports.getTextLength=function(t){if("string"==typeof t)return t.length;if(Array.isArray(t)){var e=0;return t.forEach((function(t){e+=exports.getPieceLength(t)})),e}return 1},exports.getSubText=function(t,e,r,n){if(0!==n)if("string"!=typeof e)if(Array.isArray(e)){var o=0;e.some((function(e){if(n<=0)return!0;var i=exports.getPieceLength(e);if(o+i>r)if(1===i)t(e),n-=1;else{var s=e.substr(Math.max(0,r-o),n);t(s),n-=s.length}o+=i}))}else t(e);else t(e.substr(r,n))},exports.getTextChar=function(t,e){var r;return exports.getSubText((function(t){r=t}),t,e,1),r},exports.pieceCharacters=function(t,e){if("string"==typeof e)for(var r=0;r<e.length;r++)t(e[r]);else t(e)};
@@ -0,0 +1,2 @@
1
+ declare function _exports(codes: any): (emit: any, inputChar: any) => false | undefined;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ module.exports=function(e){var l=null,r=null,a=!0;return function(n,u){var c;if(null===u.char)c=!0;else if(a&&(c=!0),"string"==typeof u.char)switch(u.char){case" ":r||(r=u);break;case"\n":c=!0,a=!0;break;default:r&&(c=!0)}else{var t=e(u.char);(t.block||t.eof)&&(c=!0,a=!0)}if(c){if(l&&!l.equals(u)){if(!1===n({text:l,spaces:r||u,end:u}))return!1;r=null}null===u.char&&n(null),l=u}}};
@@ -0,0 +1,17 @@
1
+ export function getFontString(run: any): string;
2
+ export function applyRunStyle(ctx: any, run: any): void;
3
+ export function prepareContext(ctx: any): void;
4
+ export function getRunStyle(run: any): string;
5
+ export var nbsp: string;
6
+ export { nbsp as enter };
7
+ export function measureText(text: any, style: any): {
8
+ ascent: number;
9
+ height: number;
10
+ descent: number;
11
+ width: number;
12
+ };
13
+ export function createCachedMeasureText(): (text: any, style: any) => any;
14
+ export function cachedMeasureText(text: any, style: any): any;
15
+ export function measure(str: any, formatting: any): any;
16
+ export function draw(ctx: any, str: any, formatting: any, left: any, baseline: any, width: any, ascent: any, descent: any): void;
17
+ declare var nbsp: string;
@@ -0,0 +1 @@
1
+ var runs=require("./runs"),getFontString=exports.getFontString=function(e){var t=e&&e.size||runs.defaultFormatting.size;if(e)switch(e.script){case"super":case"sub":t*=.8}return(e&&e.italic?"italic ":"")+(e&&e.bold?"bold ":"")+" "+t+"pt "+(e&&e.font||runs.defaultFormatting.font)};exports.applyRunStyle=function(e,t){e.fillStyle=t&&t.color||runs.defaultFormatting.color,e.font=getFontString(t)},exports.prepareContext=function(e){e.textAlign="left",e.textBaseline="alphabetic"},exports.getRunStyle=function(e){var t=["font: ",getFontString(e),"; color: ",e&&e.color||runs.defaultFormatting.color];if(e)switch(e.script){case"super":t.push("; vertical-align: super");break;case"sub":t.push("; vertical-align: sub")}return t.join("")};var nbsp=exports.nbsp=String.fromCharCode(160),enter=exports.enter=nbsp,measureText=exports.measureText=function(e,t){var r,n,s;r=document.createElement("span"),n=document.createElement("div"),s=document.createElement("div"),n.style.display="inline-block",n.style.width="1px",n.style.height="0",s.style.visibility="hidden",s.style.position="absolute",s.style.top="0",s.style.left="0",s.style.width="500px",s.style.height="200px",s.appendChild(r),s.appendChild(n),document.body.appendChild(s);try{r.setAttribute("style",t),r.innerHTML="",r.appendChild(document.createTextNode(e.replace(/\s/g,nbsp)));var i={};n.style.verticalAlign="baseline",i.ascent=n.offsetTop-r.offsetTop,n.style.verticalAlign="bottom",i.height=n.offsetTop-r.offsetTop,i.descent=i.height-i.ascent,i.width=r.offsetWidth}finally{s.parentNode.removeChild(s),s=null}return i},createCachedMeasureText=exports.createCachedMeasureText=function(){var e={};return function(t,r){var n=r+"<>!&%"+t,s=e[n];return s||(e[n]=s=measureText(t,r)),s}};exports.cachedMeasureText=createCachedMeasureText(),exports.measure=function(e,t){return exports.cachedMeasureText(e,exports.getRunStyle(t))},exports.draw=function(e,t,r,n,s,i,o,a){switch(exports.prepareContext(e),exports.applyRunStyle(e,r),r.script){case"super":s-=o*(1/3);break;case"sub":s+=a/2}e.fillText("\n"===t?exports.enter:t,n,s),r.underline&&e.fillRect(n,1+s,i,1),r.strikeout&&e.fillRect(n,1+s-o/2,i,1)};
@@ -0,0 +1,5 @@
1
+ export function event(): {
2
+ (handler: any): void;
3
+ fire(...args: any[]): void;
4
+ };
5
+ export function derive(prototype: any, methods: any): any;
@@ -0,0 +1 @@
1
+ exports.event=function(){var e=[],r=function(r){e.push(r)};return r.fire=function(){var r=Array.prototype.slice.call(arguments,0);e.forEach((function(e){e.apply(null,r)}))},r},exports.derive=function(e,r){var n={};return Object.keys(r).forEach((function(e){n[e]={value:r[e]}})),Object.create(e,n)};
@@ -0,0 +1,2 @@
1
+ declare function _exports(coords: any, codes: any): any;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var per=require("per"),part=require("./part"),runs=require("./runs"),prototype={isNewLine:function(){return 1==this.text.parts.length&&this.text.parts[0].isNewLine},code:function(){return 1==this.text.parts.length&&this.text.parts[0].code},codeFormatting:function(){return 1==this.text.parts.length&&this.text.parts[0].run},draw:function(t,e,n){per(this.text.parts).concat(this.space.parts).forEach((function(r){r.draw(t,e,n),e+=r.width}))},plainText:function(){return this.text.plainText+this.space.plainText},align:function(){var t=this.text.parts[0];return t?t.run.align:"left"},runs:function(t,e){var n=e&&e.start||0,r=e&&e.end;"number"!=typeof r&&(r=Number.MAX_VALUE),[this.text,this.space].forEach((function(e){e.parts.some((function(e){if(n>=r||r<=0)return!0;var a=e.run,s=a.text;if("string"==typeof s){if(n<=0&&r>=s.length)t(a);else if(n<s.length){var i=Object.create(a),c=Math.max(0,n);i.text=s.substr(c,Math.min(s.length,r-c)),t(i)}n-=s.length,r-=s.length}else n<=0&&r>=1&&t(a),n--,r--}))}))}},section=function(t,e){var n={parts:per(t).map((function(t){return part(t,e)})).all(),ascent:0,descent:0,width:0,length:0,plainText:""};return n.parts.forEach((function(t){n.ascent=Math.max(n.ascent,t.ascent),n.descent=Math.max(n.descent,t.descent),n.width+=t.width,n.length+=runs.getPieceLength(t.run.text),n.plainText+=runs.getPiecePlainText(t.run.text)})),n};module.exports=function(t,e){var n,r;t?(n=t.text.cut(t.spaces),r=t.spaces.cut(t.end)):(n=[{text:"\n"}],r=[]),n=section(n,e),r=section(r,e);var a=Object.create(prototype,{text:{value:n},space:{value:r},ascent:{value:Math.max(n.ascent,r.ascent)},descent:{value:Math.max(n.descent,r.descent)},width:{value:n.width+r.width,configurable:!0},length:{value:n.length+r.length}});return t||Object.defineProperty(a,"eof",{value:!0}),a};
@@ -0,0 +1,2 @@
1
+ declare function _exports(left: any, top: any, width: any, ordinal: any, parent: any, includeTerminator: any, initialAscent: any, initialDescent: any): (emit: any, inputWord: any) => any;
2
+ export = _exports;
@@ -0,0 +1 @@
1
+ var line=require("./line");module.exports=function(e,n,t,l,i,o,r,c){var a,h=[],u=0,d=r||0,f=c||0,s=0,g=n,v=function(e,n){h.push(e),u+=e.width,d=Math.max(d,e.ascent),f=Math.max(f,e.descent),e.isNewLine()&&(b(n),s=e.ascent+e.descent)},b=function(n){if(!a&&0!==h.length){var o=line(i,e,t,g+d,d,f,h,l);l+=o.length,a=n(o),g+=d+f,h.length=0,u=d=f=0}},m=null;return function(r,c){if(m){s=0;var d=m(c);d&&(m=null,l+=d.length,g+=d.bounds().h,Object.defineProperty(d,"block",{value:!0}),r(d))}else{var f=c.code();f&&f.block?(h.length?b(r):g+=s,m=f.block(e,g,t,l,i,c.codeFormatting()),s=0):f&&f.eof||c.eof?((!f||o&&o(f))&&v(c,r),h.length?(b(r),r(g-n)):r(g+s-n),a=!0):(s=0,h.length?(u+c.text.width>t&&b(r),v(c,r)):v(c,r))}return a}};
package/model/store.d.ts CHANGED
@@ -1141,7 +1141,7 @@ export declare const Store: import("mobx-state-tree").IModelType<{
1141
1141
  }): Promise<void>;
1142
1142
  _toPDF(exportProps: any): Promise<any>;
1143
1143
  toPDFDataURL(exportProps: any): Promise<any>;
1144
- saveAsPDF({ fileName, dpi, ...exportProps }?: ExportOptions & {
1144
+ saveAsPDF({ fileName, ...exportProps }?: ExportOptions & {
1145
1145
  fileName?: string | undefined;
1146
1146
  dpi?: number | undefined;
1147
1147
  }): Promise<void>;
package/model/store.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,o,s){void 0===s&&(s=o),Object.defineProperty(e,s,{enumerable:!0,get:function(){return t[o]}})}:function(e,t,o,s){void 0===s&&(s=o),e[s]=t[o]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)"default"!==o&&Object.prototype.hasOwnProperty.call(e,o)&&__createBinding(t,e,o);return __setModuleDefault(t,e),t},__rest=this&&this.__rest||function(e,t){var o={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(o[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(s=Object.getOwnPropertySymbols(e);r<s.length;r++)t.indexOf(s[r])<0&&Object.prototype.propertyIsEnumerable.call(e,s[r])&&(o[s[r]]=e[s[r]])}return o},__importDefault=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.registerShapeModel=exports.SVGElement=exports.ImageElement=exports.TextElement=exports.Element=void 0;const mobx_state_tree_1=require("mobx-state-tree"),undo_manager_1=require("./undo-manager"),nanoid_1=require("nanoid"),konva_1=__importDefault(require("konva")),download_1=require("../utils/download"),pdf_1=require("../utils/pdf"),validate_key_1=require("../utils/validate-key"),fonts=__importStar(require("../utils/fonts")),svg_1=require("../utils/svg"),loader_1=require("../utils/loader");(0,mobx_state_tree_1.setLivelinessChecking)("ignore"),exports.Element=mobx_state_tree_1.types.model("Element",{id:mobx_state_tree_1.types.identifier,type:"none",x:0,y:0,rotation:0,opacity:1,visible:!0,locked:!1,blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",custom:mobx_state_tree_1.types.frozen(),selectable:!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),t})).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var s in t)"_"!==s[0]&&(o[s]=e[s]);return o})).views((e=>({get page(){return(0,mobx_state_tree_1.getParentOfType)(e,exports.Page)},get store(){return(0,mobx_state_tree_1.getParentOfType)(e,exports.Store)}}))).actions((e=>({toJSON:()=>Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e))}))).actions((e=>({clone(t){const o=e.toJSON();return t.id=t.id||(0,nanoid_1.nanoid)(10),Object.assign(o,t),e.page.addElement(o)},set(t){Object.assign(e,t)},moveUp(){e.page.moveElementUp(e.id)},moveTop(){e.page.moveElementTop(e.id)},moveDown(){e.page.moveElementDown(e.id)},moveBottom(){e.page.moveElementBottom(e.id)},beforeDestroy(){e.store.history.endTransaction()}}))),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:14,strokeWidth:0,stroke:"black",lineHeight:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.string),1.2),letterSpacing:0,_editModeEnabled:!1}).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,_cropModeEnabled:!1}).actions((e=>({toggleCropMode(t){e._cropModeEnabled=null!=t?t:!e._cropModeEnabled,e._cropModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction()}}))),exports.SVGElement=exports.Element.named("SVG").props({type:"svg",src:"",maskSrc:"",__svgString:"",cropX:0,cropY:0,cropWidth:1,cropHeight:1,keepRatio:!0,flipX:!1,flipY:!1,width:100,height:100,borderColor:"black",borderSize:0,colorsReplace:mobx_state_tree_1.types.map(mobx_state_tree_1.types.string)}).preProcessSnapshot((e=>Object.assign(Object.assign({},e),{src:e.src||e.svgSource}))).views((e=>({get colors(){return e.__svgString?(0,svg_1.getColors)(e.__svgString):[]},get __finalSrc(){return e.__svgString?(0,svg_1.replaceColors)(e.__svgString,e.colorsReplace):this.src},get __isLoaded(){if(!e.__svgString)return!1;return!(Array.from(e.colorsReplace.keys()).length>0)||e.__finalSrc!==e.src}}))).actions((e=>{let t=()=>{};return{async _loadSVG(){if(!e.src)return;const t=await(0,svg_1.urlToString)(e.src);(0,mobx_state_tree_1.isAlive)(e)&&(0,mobx_state_tree_1.hasParent)(e)&&e.store.history.ignore((()=>{e.set({__svgString:(0,svg_1.fixSize)(t)})}))},async afterCreate(){e._loadSVG();let o=e.src;t=(0,mobx_state_tree_1.onSnapshot)(e,(t=>{t.src===o&&e.__svgString||(e._loadSVG(),o=e.src)}))},beforeDestroy(){t()},replaceColor(t,o){e.colorsReplace.set(t,o)}}}));const TYPES_MAP={svg:exports.SVGElement,text:exports.TextElement,image:exports.ImageElement},ADDITIONAL_TYPES=[];function registerShapeModel(e){const t=e.type;if(!t)throw new Error('You must pass "type" attribute to custom model.');const o=exports.Element.named(t).props(e);TYPES_MAP[t]=o,ADDITIONAL_TYPES.push(o)}exports.registerShapeModel=registerShapeModel;const additionalTypesUnion=[...new Array(20)].map(((e,t)=>mobx_state_tree_1.types.late((()=>ADDITIONAL_TYPES[t])))),ElementTypes=mobx_state_tree_1.types.union({dispatcher:e=>{const t=TYPES_MAP[e.type];if(!t)throw new Error(`Unknown element type: "${e.type}"`);return t}},exports.SVGElement,exports.TextElement,exports.ImageElement,...additionalTypesUnion);function createStore({key:e,showCredit:t}={key:"",showCredit:!1}){const o=exports.Store.create();return(0,validate_key_1.validateKey)(e,t),o}exports.Page=mobx_state_tree_1.types.model("Page",{id:mobx_state_tree_1.types.identifier,children:mobx_state_tree_1.types.array(ElementTypes),width:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.literal("auto")),"auto"),height:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.literal("auto")),"auto"),background:"white",bleed:0,custom:mobx_state_tree_1.types.frozen(),_exporting:!1}).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var s in t)"_"!==s[0]&&(o[s]=e[s]);return o})).views((e=>({get store(){return(0,mobx_state_tree_1.getParentOfType)(e,exports.Store)}}))).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:()=>Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e)),clone(t){const o=e.children.map((e=>{const t=e.toJSON();return t.id=(0,nanoid_1.nanoid)(10),t})),s=Object.assign({id:(0,nanoid_1.nanoid)(10),children:o,background:e.background,bleed:e.bleed},t),r=e.store.addPage(s),n=e.store.pages.indexOf(e);r.setZIndex(n+1),r.select()},setZIndex(t){e.store.setPageZIndex(e.id,t)},set(t){Object.assign(e,t)},select(){e.store.selectPage(e.id)},addElement(t){const o=TYPES_MAP[t.type];if(!o)return void console.error("Can not find model with type "+t.type);const s=o.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.children.push(s),s.selectable&&e.store.selectElements([s.id]),s},moveElementUp(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.splice(o+1,0,s)},moveElementDown(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.splice(o-1,0,s)},moveElementTop(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.push(s)},moveElementBottom(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.splice(0,0,s)}}))),exports.Font=mobx_state_tree_1.types.model("Font",{fontFamily:mobx_state_tree_1.types.string,url:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string,""),styles:mobx_state_tree_1.types.frozen()}).preProcessSnapshot((e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name}))),exports.Store=mobx_state_tree_1.types.model("Store",{role:"",pages:mobx_state_tree_1.types.array(exports.Page),fonts:mobx_state_tree_1.types.array(exports.Font),width:1080,height:1080,scale:1,scaleToFit:1,_bleedVisible:!1,openedSidePanel:"",selectedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),history:mobx_state_tree_1.types.optional(undo_manager_1.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views((e=>({get selectedElements(){return e.selectedElementsIds.map((t=>{for(const o of e.pages)for(const e of o.children)if(e.id===t)return e})).filter((e=>!!e))},get activePage(){return e.pages.slice().find((t=>t.id===e._activePageId))||(e.pages.length?e.pages[0]:null)}}))).actions((e=>({setRole(t){e.role=t},getElementById(t){for(const o of e.pages)for(const e of o.children)if(e.id===t)return e},addPage(t){const o=exports.Page.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.pages.push(o),e._activePageId=o.id,o},selectPage(t){e._activePageId=t},selectElements(t){e.selectedElementsIds=(0,mobx_state_tree_1.cast)(t)},_toggleBleed(t){e._bleedVisible=null!=t?t:!e._bleedVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,o,s){if(s){const s=t/e.width,r=o/e.height;for(const t of e.pages)for(const e of t.children)e.set({x:e.x*s,y:e.y*r}),"text"===e.type?e.set({fontSize:e.fontSize*s,width:Math.max(e.width*s,2)}):"image"===e.type?e.set({width:e.width*s,height:e.height*r}):"svg"===e.type&&e.set({width:Math.max(e.width*s,2),height:Math.max(e.height*s,2)})}e.width=t,e.height=o},setPageZIndex(t,o){const s=e.pages.find((e=>e.id===t));s&&((0,mobx_state_tree_1.detach)(s),e.pages.remove(s),e.pages.splice(o,0,s))},deletePages(t){const o=e.pages.indexOf(e.activePage);t.forEach((t=>{const o=e.pages.find((e=>e.id===t));(0,mobx_state_tree_1.destroy)(o)}));const s=Math.min(e.pages.length-1,o),r=e.pages[s];r&&(e._activePageId=r.id),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},deleteElements(t){t.forEach((t=>{e.pages.forEach((e=>{const o=e.children.find((e=>e.id===t));o&&(0,mobx_state_tree_1.destroy)(o)}))})),e.selectedElementsIds=(0,mobx_state_tree_1.cast)([])},on(t,o){if("change"===t){let t=e.toJSON();return(0,mobx_state_tree_1.onSnapshot)(e,(s=>{const r=e.toJSON();JSON.stringify(r)!==JSON.stringify(t)&&(t=r,o(r))}))}},async toDataURL({pixelRatio:t,ignoreBackground:o,pageId:s,mimeType:r,includeBleed:n}={}){var a;const i=t||1;s=s||(null===(a=e.pages[0])||void 0===a?void 0:a.id);const d=e.pages.find((e=>e.id===s));if(!d)throw new Error(`No page for export with id ${s}`);null==d||d.set({_exporting:!0}),await new Promise((e=>{setTimeout(e,0)})),await e.waitLoading();const l=konva_1.default.stages.find((e=>e.getAttr("pageId")===s));if(!l)throw new Error(`Export is failed. Can not find stage for page ${s}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);const c=l.findOne(".page-container");l.find("Transformer").forEach((e=>e.visible(!1))),c.findOne(".page-background").shadowEnabled(!1),c.findOne(".page-background").strokeEnabled(!1),c.find(".highlighter").forEach((e=>e.visible(!1)));const _=c.findOne(".page-background-group"),p=_.clip();_.clip({x:null,y:null,width:null,height:null});const g=c.find((e=>e.getAttr("hideInExport")));g.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.hide()})),o&&c.findOne(".page-background").hide();const m=n?d.bleed:0,h=c.toDataURL({x:c.x()-m*c.scaleX(),y:c.y()-m*c.scaleY(),width:(d.computedWidth+2*m)*c.scaleX(),height:(d.computedHeight+2*m)*c.scaleY(),pixelRatio:1/c.scaleX()*i,mimeType:r});return o&&c.findOne(".page-background").show(),g.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),c.findOne(".page-background").shadowEnabled(!0),c.findOne(".page-background").strokeEnabled(!0),l.find("Transformer").forEach((e=>e.visible(!0))),c.find(".highlighter").forEach((e=>e.visible(!0))),_.clip(p),null==d||d.set({_exporting:!1}),h},async saveAsImage(t={}){var{fileName:o}=t,s=__rest(t,["fileName"]);const r=s.mimeType||"image/png",n=r.split("/")[1];(0,download_1.downloadFile)(await e.toDataURL(s),o||"polotno."+n,r)},async _toPDF(t){const o=t.dpi||300,s=e=>.75*e;var r=new(await(0,pdf_1.getJsPDF)())({unit:"pt",orientation:e.width>e.height?"landscape":"portrait",format:[s(e.width),s(e.height)],compress:!0});r.deletePage(1);const n=e._elementsPixelRatio,a=o/72;e.setElementsPixelRatio(a),await new Promise((e=>setTimeout(e)));for(const o of e.pages){const n=t.includeBleed?o.bleed:0,i=s(o.computedWidth+n),d=s(o.computedHeight+n);r.addPage([i,d],i>d?"landscape":"portrait"),r.addImage(await e.toDataURL(Object.assign(Object.assign({},t),{pageId:o.id,pixelRatio:a})),0,0,i,d,void 0,"MEDIUM")}return e.setElementsPixelRatio(n),r},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpg"},t))).output("datauristring"),async saveAsPDF(t={}){var{fileName:o,dpi:s}=t,r=__rest(t,["fileName","dpi"]);(await e._toPDF(Object.assign({mimeType:"image/jpg"},r))).save(o||"polotno.pdf")},async waitLoading(){await(0,loader_1.whenLoaded)()},toJSON:()=>({width:e.width,height:e.height,fonts:(0,mobx_state_tree_1.getSnapshot)(e.fonts),pages:(0,mobx_state_tree_1.getSnapshot)(e.pages)}),loadJSON(t,o=!1){var s;e.pages.forEach((e=>e.children.forEach((e=>(0,mobx_state_tree_1.detach)(e))))),e.pages=(0,mobx_state_tree_1.cast)([]),t._activePageId=null===(s=t.pages[0])||void 0===s?void 0:s.id,t.scale=e.scale,t._isKeyValid=e._isKeyValid,t.openedSidePanel=e.openedSidePanel,t._bleedVisible=e._bleedVisible,o&&(t.history=e.history.toJSON()),(0,mobx_state_tree_1.applySnapshot)(e,t)},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,mobx_state_tree_1.destroy)(e)))},async loadFont(t){const o=e.fonts.find((e=>e.fontFamily===t))||fonts.globalFonts.find((e=>e.fontFamily===t));o?fonts.injectCustomFont(o):fonts.injectGoogleFont(t),await fonts.loadFont(t)}}))),exports.createStore=createStore,exports.default=createStore;
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,o,s){void 0===s&&(s=o),Object.defineProperty(e,s,{enumerable:!0,get:function(){return t[o]}})}:function(e,t,o,s){void 0===s&&(s=o),e[s]=t[o]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)"default"!==o&&Object.prototype.hasOwnProperty.call(e,o)&&__createBinding(t,e,o);return __setModuleDefault(t,e),t},__rest=this&&this.__rest||function(e,t){var o={};for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(o[s]=e[s]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(s=Object.getOwnPropertySymbols(e);r<s.length;r++)t.indexOf(s[r])<0&&Object.prototype.propertyIsEnumerable.call(e,s[r])&&(o[s[r]]=e[s[r]])}return o},__importDefault=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.registerShapeModel=exports.SVGElement=exports.ImageElement=exports.TextElement=exports.Element=void 0;const mobx_state_tree_1=require("mobx-state-tree"),undo_manager_1=require("./undo-manager"),nanoid_1=require("nanoid"),konva_1=__importDefault(require("konva")),download_1=require("../utils/download"),pdf_1=require("../utils/pdf"),validate_key_1=require("../utils/validate-key"),fonts=__importStar(require("../utils/fonts")),svg_1=require("../utils/svg"),loader_1=require("../utils/loader");(0,mobx_state_tree_1.setLivelinessChecking)("ignore"),exports.Element=mobx_state_tree_1.types.model("Element",{id:mobx_state_tree_1.types.identifier,type:"none",x:0,y:0,rotation:0,opacity:1,visible:!0,locked:!1,blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",custom:mobx_state_tree_1.types.frozen(),selectable:!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),t})).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var s in t)"_"!==s[0]&&(o[s]=e[s]);return o})).views((e=>({get page(){return(0,mobx_state_tree_1.getParentOfType)(e,exports.Page)},get store(){return(0,mobx_state_tree_1.getParentOfType)(e,exports.Store)}}))).actions((e=>({toJSON:()=>Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e))}))).actions((e=>({clone(t){const o=e.toJSON();return t.id=t.id||(0,nanoid_1.nanoid)(10),Object.assign(o,t),e.page.addElement(o)},set(t){Object.assign(e,t)},moveUp(){e.page.moveElementUp(e.id)},moveTop(){e.page.moveElementTop(e.id)},moveDown(){e.page.moveElementDown(e.id)},moveBottom(){e.page.moveElementBottom(e.id)},beforeDestroy(){e.store.history.endTransaction()}}))),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:14,strokeWidth:0,stroke:"black",lineHeight:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.string),1.2),letterSpacing:0,_editModeEnabled:!1}).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,_cropModeEnabled:!1}).actions((e=>({toggleCropMode(t){e._cropModeEnabled=null!=t?t:!e._cropModeEnabled,e._cropModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction()}}))),exports.SVGElement=exports.Element.named("SVG").props({type:"svg",src:"",maskSrc:"",__svgString:"",cropX:0,cropY:0,cropWidth:1,cropHeight:1,keepRatio:!0,flipX:!1,flipY:!1,width:100,height:100,borderColor:"black",borderSize:0,colorsReplace:mobx_state_tree_1.types.map(mobx_state_tree_1.types.string)}).preProcessSnapshot((e=>Object.assign(Object.assign({},e),{src:e.src||e.svgSource}))).views((e=>({get colors(){return e.__svgString?(0,svg_1.getColors)(e.__svgString):[]},get __finalSrc(){return e.__svgString?(0,svg_1.replaceColors)(e.__svgString,e.colorsReplace):this.src},get __isLoaded(){if(!e.__svgString)return!1;return!(Array.from(e.colorsReplace.keys()).length>0)||e.__finalSrc!==e.src}}))).actions((e=>{let t=()=>{};return{async _loadSVG(){if(!e.src)return;const t=await(0,svg_1.urlToString)(e.src);(0,mobx_state_tree_1.isAlive)(e)&&(0,mobx_state_tree_1.hasParent)(e)&&e.store.history.ignore((()=>{e.set({__svgString:(0,svg_1.fixSize)(t)})}))},async afterCreate(){e._loadSVG();let o=e.src;t=(0,mobx_state_tree_1.onSnapshot)(e,(t=>{t.src===o&&e.__svgString||(e._loadSVG(),o=e.src)}))},beforeDestroy(){t()},replaceColor(t,o){e.colorsReplace.set(t,o)}}}));const TYPES_MAP={svg:exports.SVGElement,text:exports.TextElement,image:exports.ImageElement},ADDITIONAL_TYPES=[];function registerShapeModel(e){const t=e.type;if(!t)throw new Error('You must pass "type" attribute to custom model.');const o=exports.Element.named(t).props(e);TYPES_MAP[t]=o,ADDITIONAL_TYPES.push(o)}exports.registerShapeModel=registerShapeModel;const additionalTypesUnion=[...new Array(20)].map(((e,t)=>mobx_state_tree_1.types.late((()=>ADDITIONAL_TYPES[t])))),ElementTypes=mobx_state_tree_1.types.union({dispatcher:e=>{const t=TYPES_MAP[e.type];if(!t)throw new Error(`Unknown element type: "${e.type}"`);return t}},exports.SVGElement,exports.TextElement,exports.ImageElement,...additionalTypesUnion);function createStore({key:e,showCredit:t}={key:"",showCredit:!1}){const o=exports.Store.create();return(0,validate_key_1.validateKey)(e,t),o}exports.Page=mobx_state_tree_1.types.model("Page",{id:mobx_state_tree_1.types.identifier,children:mobx_state_tree_1.types.array(ElementTypes),width:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.literal("auto")),"auto"),height:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.literal("auto")),"auto"),background:"white",bleed:0,custom:mobx_state_tree_1.types.frozen(),_exporting:!1}).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var s in t)"_"!==s[0]&&(o[s]=e[s]);return o})).views((e=>({get store(){return(0,mobx_state_tree_1.getParentOfType)(e,exports.Store)}}))).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,mobx_state_tree_1.getSnapshot)(e))),clone(t){const o=e.toJSON();o.children.forEach((e=>{e.id=(0,nanoid_1.nanoid)(10)}));const s=Object.assign(Object.assign(Object.assign({},o),{id:(0,nanoid_1.nanoid)(10)}),t),r=e.store.addPage(s),n=e.store.pages.indexOf(e);r.setZIndex(n+1),r.select()},setZIndex(t){e.store.setPageZIndex(e.id,t)},set(t){Object.assign(e,t)},select(){e.store.selectPage(e.id)},addElement(t){const o=TYPES_MAP[t.type];if(!o)return void console.error("Can not find model with type "+t.type);const s=o.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.children.push(s),s.selectable&&e.store.selectElements([s.id]),s},moveElementUp(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.splice(o+1,0,s)},moveElementDown(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.splice(o-1,0,s)},moveElementTop(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.push(s)},moveElementBottom(t){const o=e.children.findIndex((e=>e.id===t)),s=e.children[o];(0,mobx_state_tree_1.detach)(s),e.children.remove(s),e.children.splice(0,0,s)}}))),exports.Font=mobx_state_tree_1.types.model("Font",{fontFamily:mobx_state_tree_1.types.string,url:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string,""),styles:mobx_state_tree_1.types.frozen()}).preProcessSnapshot((e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name}))),exports.Store=mobx_state_tree_1.types.model("Store",{role:"",pages:mobx_state_tree_1.types.array(exports.Page),fonts:mobx_state_tree_1.types.array(exports.Font),width:1080,height:1080,scale:1,scaleToFit:1,_bleedVisible:!1,openedSidePanel:"",selectedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),history:mobx_state_tree_1.types.optional(undo_manager_1.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views((e=>({get selectedElements(){return e.selectedElementsIds.map((t=>{for(const o of e.pages)for(const e of o.children)if(e.id===t)return e})).filter((e=>!!e))},get activePage(){return e.pages.slice().find((t=>t.id===e._activePageId))||(e.pages.length?e.pages[0]:null)}}))).actions((e=>({setRole(t){e.role=t},getElementById(t){for(const o of e.pages)for(const e of o.children)if(e.id===t)return e},addPage(t){const o=exports.Page.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.pages.push(o),e._activePageId=o.id,o},selectPage(t){e._activePageId=t},selectElements(t){e.selectedElementsIds=(0,mobx_state_tree_1.cast)(t)},_toggleBleed(t){e._bleedVisible=null!=t?t:!e._bleedVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,o,s){if(s){const s=t/e.width,r=o/e.height;for(const t of e.pages)for(const e of t.children)e.set({x:e.x*s,y:e.y*r}),"text"===e.type?e.set({fontSize:e.fontSize*s,width:Math.max(e.width*s,2)}):"image"===e.type?e.set({width:e.width*s,height:e.height*r}):"svg"===e.type&&e.set({width:Math.max(e.width*s,2),height:Math.max(e.height*s,2)})}e.width=t,e.height=o},setPageZIndex(t,o){const s=e.pages.find((e=>e.id===t));s&&((0,mobx_state_tree_1.detach)(s),e.pages.remove(s),e.pages.splice(o,0,s))},deletePages(t){const o=e.pages.indexOf(e.activePage);t.forEach((t=>{const o=e.pages.find((e=>e.id===t));(0,mobx_state_tree_1.destroy)(o)}));const s=Math.min(e.pages.length-1,o),r=e.pages[s];r&&(e._activePageId=r.id),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},deleteElements(t){t.forEach((t=>{e.pages.forEach((e=>{const o=e.children.find((e=>e.id===t));o&&(0,mobx_state_tree_1.destroy)(o)}))})),e.selectedElementsIds=(0,mobx_state_tree_1.cast)([])},on(t,o){if("change"===t){let t=e.toJSON();return(0,mobx_state_tree_1.onSnapshot)(e,(s=>{const r=e.toJSON();JSON.stringify(r)!==JSON.stringify(t)&&(t=r,o(r))}))}},async toDataURL({pixelRatio:t,ignoreBackground:o,pageId:s,mimeType:r,includeBleed:n}={}){var a;const i=t||1;s=s||(null===(a=e.pages[0])||void 0===a?void 0:a.id);const l=e.pages.find((e=>e.id===s));if(!l)throw new Error(`No page for export with id ${s}`);null==l||l.set({_exporting:!0}),await new Promise((e=>{setTimeout(e,0)})),await e.waitLoading();const d=konva_1.default.stages.find((e=>e.getAttr("pageId")===s));if(!d)throw new Error(`Export is failed. Can not find stage for page ${s}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);const c=d.findOne(".page-container");d.find("Transformer").forEach((e=>e.visible(!1))),c.findOne(".page-background").shadowEnabled(!1),c.findOne(".page-background").strokeEnabled(!1),c.find(".highlighter").forEach((e=>e.visible(!1)));const _=c.findOne(".page-background-group"),p=_.clip();_.clip({x:null,y:null,width:null,height:null});const g=c.find((e=>e.getAttr("hideInExport")));g.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.hide()})),o&&c.findOne(".page-background").hide();const m=n?l.bleed:0;let h=m;e._bleedVisible&&n?h=0:e._bleedVisible&&!n&&(h=-l.bleed);const b=c.toDataURL({x:c.x()-h*c.scaleX(),y:c.y()-h*c.scaleY(),width:(l.computedWidth+2*m)*c.scaleX(),height:(l.computedHeight+2*m)*c.scaleY(),pixelRatio:1/c.scaleX()*i,mimeType:r});return o&&c.findOne(".page-background").show(),g.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),c.findOne(".page-background").shadowEnabled(!0),c.findOne(".page-background").strokeEnabled(!0),d.find("Transformer").forEach((e=>e.visible(!0))),c.find(".highlighter").forEach((e=>e.visible(!0))),_.clip(p),null==l||l.set({_exporting:!1}),b},async saveAsImage(t={}){var{fileName:o}=t,s=__rest(t,["fileName"]);const r=s.mimeType||"image/png",n=r.split("/")[1];(0,download_1.downloadFile)(await e.toDataURL(s),o||"polotno."+n,r)},async _toPDF(t){const o=t.dpi||300,s=e=>.75*e;var r=new(await(0,pdf_1.getJsPDF)())({unit:"pt",orientation:e.width>e.height?"landscape":"portrait",format:[s(e.width),s(e.height)],compress:!0});r.deletePage(1);const n=e._elementsPixelRatio,a=o/72;e.setElementsPixelRatio(a),await new Promise((e=>setTimeout(e)));for(const o of e.pages){const n=t.includeBleed?o.bleed:0,i=s(o.computedWidth+n),l=s(o.computedHeight+n);r.addPage([i,l],i>l?"landscape":"portrait"),r.addImage(await e.toDataURL(Object.assign(Object.assign({},t),{pageId:o.id,pixelRatio:a})),0,0,i,l,void 0,"MEDIUM")}return e.setElementsPixelRatio(n),r},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpg"},t))).output("datauristring"),async saveAsPDF(t={}){var{fileName:o}=t,s=__rest(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpg"},s))).save(o||"polotno.pdf")},async waitLoading(){await(0,loader_1.whenLoaded)()},toJSON:()=>({width:e.width,height:e.height,fonts:(0,mobx_state_tree_1.getSnapshot)(e.fonts),pages:(0,mobx_state_tree_1.getSnapshot)(e.pages)}),loadJSON(t,o=!1){var s;const r=Object.assign({},t);e.pages.forEach((e=>e.children.forEach((e=>(0,mobx_state_tree_1.detach)(e))))),e.pages=(0,mobx_state_tree_1.cast)([]),r._activePageId=null===(s=r.pages[0])||void 0===s?void 0:s.id,r.scale=e.scale,r.openedSidePanel=e.openedSidePanel,r._bleedVisible=e._bleedVisible,o&&(r.history=e.history.toJSON()),(0,mobx_state_tree_1.applySnapshot)(e,r)},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,mobx_state_tree_1.destroy)(e)))},async loadFont(t){const o=e.fonts.find((e=>e.fontFamily===t))||fonts.globalFonts.find((e=>e.fontFamily===t));o?fonts.injectCustomFont(o):fonts.injectGoogleFont(t),await fonts.loadFont(t)}}))),exports.createStore=createStore,exports.default=createStore;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polotno",
3
- "version": "0.37.0",
3
+ "version": "0.37.4",
4
4
  "description": "Design Editor Framework",
5
5
  "author": "Anton Lavrenov",
6
6
  "keywords": [
@@ -67,7 +67,7 @@
67
67
  "tsc": "tsc --outDir ./lib --removeComments --sourceMap false --module CommonJS || echo \"tsc faild for some file(s).\"",
68
68
  "minify": "uglifyjs-folder ./lib -eo ./lib -x .js",
69
69
  "build": "npm run clean && npm run tsc && npm run minify && npm run build:bundle && cp ./package.json ./lib && cp ./README.md ./lib && cp ./LICENSE.md ./lib",
70
- "build:bundle": "parcel build && rm ./lib/polotno.bundle.js.map",
70
+ "build:bundle": "parcel build && rm -f ./lib/polotno.bundle.js.map",
71
71
  "size": "npm run build && size-limit"
72
72
  },
73
73
  "license": "SEE LICENSE IN LICENSE.md"