polotno 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/canvas/hotkeys.js +1 -1
- package/canvas/html-element.js +1 -1
- package/canvas/text-element.d.ts +17 -0
- package/canvas/text-element.js +1 -1
- package/model/store.d.ts +38 -1
- package/model/store.js +1 -1
- package/package.json +1 -1
- package/polotno-app.d.ts +68 -2
- package/polotno.bundle.js +43 -43
- package/side-panel/background-panel.js +1 -1
- package/side-panel/size-panel.js +1 -1
- package/toolbar/duplicate-button.js +1 -1
- package/toolbar/filters-picker.js +1 -1
- package/toolbar/lock-button.js +1 -1
- package/toolbar/opacity-picker.js +1 -1
- package/toolbar/remove-button.js +1 -1
- package/toolbar/text-toolbar.js +1 -1
package/canvas/hotkeys.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.handleHotkey=void 0;let clipBoard=[];function handleHotkey(e,t){var l,o,d,n;if("INPUT"===(null===(l=document.activeElement)||void 0===l?void 0:l.tagName)||"TEXTAREA"===(null===(o=document.activeElement)||void 0===o?void 0:o.tagName)||"true"===(null===(d=document.activeElement)||void 0===d?void 0:d.contentEditable))return;46!==e.keyCode&&8!==e.keyCode||t.deleteElements(t.selectedElementsIds);const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.handleHotkey=void 0;let clipBoard=[];const KEY="polotno_clipboard",setClipBoard=e=>{clipBoard=e;try{localStorage.setItem(KEY,JSON.stringify(e))}catch(e){}},getClipBoard=()=>{try{const e=localStorage.getItem(KEY);if(e)return JSON.parse(e)}catch(e){}return clipBoard};function handleHotkey(e,t){var l,o,d,n;if("INPUT"===(null===(l=document.activeElement)||void 0===l?void 0:l.tagName)||"TEXTAREA"===(null===(o=document.activeElement)||void 0===o?void 0:o.tagName)||"true"===(null===(d=document.activeElement)||void 0===d?void 0:d.contentEditable))return;46!==e.keyCode&&8!==e.keyCode||t.deleteElements(t.selectedElementsIds);const r=e.ctrlKey||e.metaKey,a=e.shiftKey;if(r&&"KeyZ"===e.code&&(e.preventDefault(),t.history.undo()),r&&a&&"KeyZ"===e.code&&(e.preventDefault(),t.history.redo()),r&&"KeyA"===e.code){e.preventDefault();const l=null===(n=t.activePage)||void 0===n?void 0:n.children.filter((e=>e.selectable)),o=(null==l?void 0:l.map((e=>e.id)))||[];t.selectElements(o)}if(r&&"KeyC"===e.code&&(e.preventDefault(),setClipBoard(t.selectedElements.map((e=>e.toJSON())))),r&&"KeyX"===e.code&&(e.preventDefault(),setClipBoard(t.selectedElements.map((e=>e.toJSON()))),t.deleteElements(t.selectedElementsIds)),r&&"KeyV"===e.code){e.preventDefault();const l=t.width/20;t.history.transaction((()=>{const e=[],o=getClipBoard();o.forEach((o=>{var d;delete o.id,o.x+=l,o.y+=l;const n=null===(d=t.activePage)||void 0===d?void 0:d.addElement(o);e.push(null==n?void 0:n.id)})),setClipBoard(o),t.selectElements(e)}))}"ArrowDown"===e.code&&(e.preventDefault(),t.selectedElements.forEach((e=>{e.set({y:e.y+1})}))),"ArrowUp"===e.code&&(e.preventDefault(),t.selectedElements.forEach((e=>{e.set({y:e.y-1})}))),"ArrowLeft"===e.code&&(e.preventDefault(),t.selectedElements.forEach((e=>{e.set({x:e.x-1})}))),"ArrowRight"===e.code&&(e.preventDefault(),t.selectedElements.forEach((e=>{e.set({x:e.x+1})})))}exports.handleHotkey=handleHotkey;
|
package/canvas/html-element.js
CHANGED
|
@@ -16,4 +16,4 @@
|
|
|
16
16
|
.ql-direction-rtl {
|
|
17
17
|
direction: rtl;
|
|
18
18
|
}
|
|
19
|
-
`,RichEditor=({html:e,onBlur:t,onChange:i,element:r})=>{const a=react_1.default.useRef(null);
|
|
19
|
+
`,RichEditor=({html:e,onBlur:t,onChange:i,element:r})=>{const a=react_1.default.useRef(null);react_1.default.useEffect((()=>{if(!a.current)return;const e=new quill_1.default(a.current,{toolbar:!1,keyboard:!1,clipboard:{matchVisual:!1}});return exports.quillRef.editor.instance=e,window.__polotnoQuill=e,e.on("text-change",(()=>{e.getSelection()&&(exports.quillRef.currentFormat=e.getFormat()),setTimeout((()=>{var e;i(null===(e=a.current)||void 0===e?void 0:e.childNodes[0].innerHTML)}),10)})),e.setSelection(0,0,"api"),e.on("selection-change",(i=>{i||t(),i&&(exports.quillRef.currentFormat=e.getFormat())})),a.current.childNodes[0].addEventListener("blur",(e=>{var i;(null===(i=e.relatedTarget)||void 0===i?void 0:i.classList.contains("ql-clipboard"))||t()})),()=>{exports.quillRef.editor.instance=null,exports.quillRef.currentFormat={},delete window.__polotnoQuill}}),[]),react_1.default.useEffect((()=>{var t;const i=exports.quillRef.editor.instance,o=i.getSelection();if(!((null===(t=a.current)||void 0===t?void 0:t.childNodes[0].innerHTML)===r.text)){var n=i.clipboard.convert("<div class='ql-editor' style='outline: none;'>"+e+"<p><br></p></div>");i.setContents(n),i.history.clear(),o&&(i.setSelection(o.index,o.length),exports.quillRef.currentFormat=i.getFormat())}}),[r.text]);const o=(0,text_element_1.useTextColor)(r).fill;return react_1.default.createElement(RichTextContainer,{ref:a,style:{fontSize:r.fontSize,color:o,width:r.width,fontFamily:r.fontFamily,lineHeight:r.lineHeight,letterSpacing:r.letterSpacing+"rem",textAlign:r.align},dir:(0,text_element_1.getDir)((0,text_1.removeTags)(r.text))})};function useHtmlSize(e,t,i){return react_1.default.useMemo((()=>(0,html2canvas_1.detectSize)(e)),[e,t.width,i])}function getHtml(e,{fontFamily:t="",color:i="black"}={}){let r=`color: ${i||e.fill}`;return`<div style="white-space: pre-wrap; width: ${e.width||100}px; ${r}; font-size: ${e.fontSize}px; font-family: '${t}'; text-decoration: ${e.textDecoration}; text-align: ${e.align}; line-height: ${e.lineHeight}; letter-spacing: ${e.letterSpacing}rem; font-style: ${e.fontStyle}; font-weight: ${e.fontWeight}; -webkit-text-stroke: ${e.strokeWidth}px ${e.stroke};" contentEditable dir="${(0,text_element_1.getDir)((0,text_1.removeTags)(e.text))}">${e.text}</div>`}const findFitFontSize=e=>{let t=e.fontSize;for(let i=1;i<50;i++){const i=getHtml(Object.assign(Object.assign({},e.toJSON()),{fontSize:t}),{fontFamily:e.fontFamily}),{height:r}=(0,html2canvas_1.detectSize)(i);if(!(e.height&&r>e.height))break;t-=.5}return t};exports.HTMLElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const i=react_1.default.useRef(null),[r,a]=react_1.default.useState(),[o,n]=react_1.default.useState(!1),[l,s]=react_1.default.useState(!0),[c,u]=react_1.default.useState(!1),[f,d]=react_1.default.useState(!1),h=react_1.default.useRef(e.height),_=t.selectedElements.indexOf(e)>=0,g=e.fontSize/4,{textVerticalResizeEnabled:m}=flags_1.flags,[x]=(0,text_element_1.useFontLoader)(t,e.fontFamily);(0,use_fadein_1.useFadeIn)(i);const p=x?e.fontFamily:"Arial",y=(0,text_element_1.useTextColor)(e).fill,v=getHtml(e,{fontFamily:p,color:y}),{width:b,height:w}=useHtmlSize(v,e,x);react_1.default.useEffect((()=>{if(!x)return;if(!e.height)return void e.set({height:w});const{textOverflow:i}=flags_1.flags;if("change-font-size"!==i||o)"resize"===i&&(m&&e.height<w&&t.history.ignore((()=>{e.set({height:w})})),m||e.height===w||t.history.ignore((()=>{e.set({height:w})})));else{const i=findFitFontSize(e);i!==e.fontSize?t.history.ignore((()=>{e.set({fontSize:i})})):e.height!==w&&t.history.ignore((()=>{e.set({height:w})}))}}));const S=react_1.default.useRef(0);react_1.default.useLayoutEffect((()=>{if(o||c)return;S.current++;const i=S.current,r=(0,loader_1.incrementLoader)(`text ${e.id}`);s(!0),async function(){await new Promise((e=>setTimeout(e)));const o=await(0,html2canvas_1.htmlToCanvas)({html:v,width:e.width||1,height:e.height||w||1,fontFamily:p,padding:g,font:t.fonts.find((e=>e.fontFamily===p))||fonts.globalFonts.find((e=>e.fontFamily===p))});i===S.current?(a(o),s(!1),konva_1.default.Util.requestAnimFrame(r)):r()}()}),[v,o,w,c,p]);const E=o||l;react_1.default.useLayoutEffect((()=>mobx.autorun((()=>{const t=i.current;(0,apply_filters_1.applyFilter)(t,e)}))),[r,E,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);let q=0;return"middle"===e.verticalAlign&&(q=(e.height-w)/2),"bottom"===e.verticalAlign&&(q=e.height-w),react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,{ref:i,name:"element",x:e.x,y:e.y,listening:e.selectable,rotation:e.rotation,width:e.width,height:e.height,visible:!E,draggable:e.draggable,opacity:c?0:e.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{d(!0)},onMouseLeave:()=>{d(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:i=>{e.set({x:i.target.x(),y:i.target.y()}),t.history.endTransaction()},id:e.id,onDblClick:()=>{e.contentEditable&&u(!0)},onDblTap:()=>{e.contentEditable&&u(!0)},onTransformStart:t=>{n(!0),h.current=e.height},onTransform:t=>{var i;const r=t.target,a=(null===(i=r.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor(),o="middle-left"===a||"middle-right"===a,n="top-center"===a||"bottom-center"===a,l=r.scaleX();if(o){const t=r.scaleX(),i=Math.max(r.width()*t,e.fontSize);if(r.width(i),r.scaleX(1),flags_1.flags.textVerticalResizeEnabled){const t=Math.max(w,h.current);e.set({height:t})}e.set({width:i,x:r.x()})}else if(n){let i="resize"===flags_1.flags.textOverflow?w:e.lineHeight*e.fontSize;const a=Math.max(i,t.target.height()*t.target.scaleY());r.scaleY(1),e.set({x:r.x(),y:r.y(),height:a,rotation:r.rotation()})}else r.scaleX(1),r.scaleY(1),e.set({fontSize:e.fontSize*l,width:r.width()*l,x:r.x(),y:r.y(),rotation:r.rotation()})},onTransformEnd:t=>{n(!1),s(!0);const i=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({fontSize:e.fontSize*i,width:t.target.width()*i,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})}}),react_1.default.createElement(react_konva_1.Image,{ref:i,image:r,x:e.x,y:e.y,offsetX:g,offsetY:g-q,listening:!1,rotation:e.rotation,width:e.width+2*g,height:e.height+2*g,visible:!E,opacity:c?0:e.opacity,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,hideInExport:!e.showInExport}),E&&react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-q},react_1.default.createElement(react_konva_utils_1.Html,{divProps:{style:{pointerEvents:"none"}}},react_1.default.createElement(RichTextContainer,{dangerouslySetInnerHTML:{__html:v},style:{pointerEvents:"none",display:"inline-block"}}))),c&&react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,offsetY:-q},react_1.default.createElement(react_konva_utils_1.Html,null,react_1.default.createElement(RichEditor,{html:v,element:e,onChange:t=>{e.set({text:t})},onBlur:e=>{u(!1)}}))),(_||f)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
|
package/canvas/text-element.d.ts
CHANGED
|
@@ -7,6 +7,23 @@ declare type ShapeProps = {
|
|
|
7
7
|
export declare function isRTLText(string: string): boolean;
|
|
8
8
|
export declare function getDir(string: string): "ltr" | "rtl";
|
|
9
9
|
export declare const useFontLoader: (store: StoreType, fontFamily: string) => any[];
|
|
10
|
+
export declare const useTextColor: (element: TextElementType) => {
|
|
11
|
+
fill: string;
|
|
12
|
+
fillLinearGradientStartPointX?: undefined;
|
|
13
|
+
fillLinearGradientStartPointY?: undefined;
|
|
14
|
+
fillLinearGradientColorStops?: undefined;
|
|
15
|
+
fillLinearGradientEndPointX?: undefined;
|
|
16
|
+
fillLinearGradientEndPointY?: undefined;
|
|
17
|
+
fillPriority?: undefined;
|
|
18
|
+
} | {
|
|
19
|
+
fillLinearGradientStartPointX: number;
|
|
20
|
+
fillLinearGradientStartPointY: number;
|
|
21
|
+
fillLinearGradientColorStops: any[];
|
|
22
|
+
fillLinearGradientEndPointX: number;
|
|
23
|
+
fillLinearGradientEndPointY: number;
|
|
24
|
+
fill: any;
|
|
25
|
+
fillPriority: string;
|
|
26
|
+
};
|
|
10
27
|
export declare const TextElement: (({ element, store }: ShapeProps) => JSX.Element) & {
|
|
11
28
|
displayName: string;
|
|
12
29
|
};
|
package/canvas/text-element.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TextElement=exports.useFontLoader=exports.getDir=exports.isRTLText=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),react_konva_utils_1=require("react-konva-utils"),mobx_1=require("mobx"),konva_1=__importDefault(require("konva")),loader_1=require("../utils/loader"),fonts_1=require("../utils/fonts"),flags_1=require("../utils/flags"),text_1=require("../utils/text"),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein"),highlighter_1=require("./highlighter"),styleNode=document.createElement("style");styleNode.type="text/css",document.head.appendChild(styleNode);const initialStyles={border:"none",padding:"0px",overflow:"hidden",background:"none",outline:"none",resize:"none",overflowWrap:"break-word",whiteSpace:"pre-wrap",userSelect:"text",wordBreak:"normal"};function isRTL(e){return new RegExp("^[^֑-߿יִ-﷽ﹰ-ﻼ]*?[֑-߿יִ-﷽ﹰ-ﻼ]").test(e)}function isRTLText(e){e=e.replace(/\s/g,"");let t=0;for(var r=0;r<e.length;r++){isRTL(e[r])&&(t+=1)}return t>e.length/2}function getDir(e){return isRTLText(e)?"rtl":"ltr"}exports.isRTLText=isRTLText,exports.getDir=getDir;const TextInput=(0,mobx_react_lite_1.observer)((({textNodeRef:e,element:t,onBlur:r,selectAll:n,cursorPosition:o})=>{const[i,a]=react_1.default.useState(initialStyles),l=e.current;react_1.default.useLayoutEffect((()=>{const e={};e.width=l.width()-2*l.padding()+"px",e.height=l.height()-2*l.padding()+10+"px",e.fontSize=l.fontSize()+"px",e.lineHeight=l.lineHeight()+.01,e.fontFamily=l.fontFamily(),e.textAlign=l.align(),e.color=l.fill(),e.fontWeight=t.fontWeight,e.fontStyle=t.fontStyle;const r=`\n .polotno-input::placeholder {\n color: ${i.color};\n opacity: 0.6;\n }\n `;styleNode.innerHTML="",styleNode.appendChild(document.createTextNode(r)),JSON.stringify(e)!==JSON.stringify(i)&&a(e)}));const s=react_1.default.useRef(null);react_1.default.useEffect((()=>{const e=setTimeout((()=>{var e;const t=s.current;if(!t)return;null===(e=s.current)||void 0===e||e.focus();const r=o||t.value.length;t.selectionStart=t.selectionEnd=r,n&&(null==t||t.select(),document.execCommand("selectAll",!1,null))}));return()=>{clearTimeout(e)}}),[]);let c=0;const u=l.textArr.length*l.lineHeight()*l.fontSize();return"middle"===t.verticalAlign&&(c=(t.height-u)/2),"bottom"===t.verticalAlign&&(c=t.height-u),react_1.default.createElement(react_konva_utils_1.Html,null,react_1.default.createElement("textarea",{className:"polotno-input",ref:s,dir:getDir(t.text),style:Object.assign(Object.assign(Object.assign({},initialStyles),i),{paddingTop:c+"px"}),value:t.text,onChange:e=>{t.set({text:e.target.value})},placeholder:t.placeholder,onBlur:r}))})),useEditor=e=>{const[t,r]=react_1.default.useState(!1),n=react_1.default.useRef(!1);return react_1.default.useEffect((()=>{var t=!0;return setTimeout((()=>{t&&(e._editModeEnabled&&(n.current=!0),r(!0),setTimeout((()=>{n.current=!1}),50))}),50),()=>{t=!1}}),[]),{editorEnabled:t&&e._editModeEnabled,selectAll:n.current}},useFontLoader=(e,t)=>{const[r,n]=react_1.default.useState((0,fonts_1.isFontLoaded)(t));return react_1.default.useLayoutEffect((()=>{if((0,fonts_1.isFontLoaded)(t))return void n(!0);let o=!0;return(async()=>{r&&n(!1);const i=(0,loader_1.incrementLoader)(`text ${t}`);await e.loadFont(t),konva_1.default.Util.requestAnimFrame(i),o&&n(!0)})(),()=>{o=!1}}),[t]),[r]};exports.useFontLoader=useFontLoader;const getLineHeight=({fontLoaded:e,fontFamily:t,fontSize:r,lineHeight:n})=>react_1.default.useMemo((()=>{if("number"==typeof n)return n;const e=document.createElement("div");e.style.fontFamily=t,e.style.fontSize=r+"px",e.style.lineHeight=n,e.innerText="Test text",document.body.appendChild(e);const o=e.offsetHeight;return document.body.removeChild(e),o/r}),[e,t,r,n]);function getRelativePointerPosition(e){var t=e.getAbsoluteTransform().copy();t.invert();var r=e.getStage().getPointerPosition();return t.point(r)}function getCursorPosition(e){var t;const r=e.target,n=getRelativePointerPosition(r),o=r.textArr,i=Math.floor(n.y/(r.fontSize()*r.lineHeight())),a=o.slice(0,i).reduce(((e,t)=>e+t.text.length),i),l=null!==(t=o[i])&&void 0!==t?t:o[0];let s=0;"right"===r.align()?s=r.width()-l.width:"center"===r.align()&&(s=r.width()/2-l.width/2);return a+Math.round((n.x-s)/l.width*l.text.length)}function usePrevious(e){const t=react_1.default.useRef(e),r=react_1.default.useRef(e);return react_1.default.useEffect((()=>{r.current=t.current,t.current=e}),[e]),r.current}function findFitFontSize(e,t){const r=e.getAttrs(),n=(0,text_1.removeTags)(t.text);let o=t.fontSize;const i=Math.round(2*t.fontSize)-1;for(let r=1;r<i;r++){const r=t.height&&e.height()>t.height,i=n.split("\n").join(" ").split(" ");let a=e.textArr.map((e=>e.text)).join(";");const l=i.find((e=>!a.includes(e)||(a=a.replace(e,""),!1)));if(!(r||l))break;o-=.5,e.fontSize(o)}return e.fontSize(r.fontSize),o}exports.TextElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const r=react_1.default.useRef(null),{editorEnabled:n,selectAll:o}=useEditor(e),[i,a]=react_1.default.useState(!1),[l,s]=react_1.default.useState(!1),c=react_1.default.useRef(e.height),u=t.selectedElements.indexOf(e)>=0,{textVerticalResizeEnabled:d}=flags_1.flags,f=usePrevious(e.fontFamily);react_1.default.useEffect((()=>{if(e.width)return;const t=r.current;t.width(600),e.set({width:1.4*t.getTextWidth()})}),[]),react_1.default.useLayoutEffect((()=>(0,mobx_1.autorun)((()=>{const t=r.current;(0,apply_filters_1.applyFilter)(t,e)}))));const[h]=(0,exports.useFontLoader)(t,e.fontFamily),g=(0,text_1.removeTags)(e.text),_=()=>{const e=r.current.clone({height:void 0}),t=Math.ceil(e.fontSize()*e.lineHeight()*e.textArr.length+1);return e.destroy(),t};react_1.default.useLayoutEffect((()=>{if(!h)return;const{textOverflow:n}=flags_1.flags;if(e.height)if("change-font-size"!==n||l){if("resize"===n){const n=_();d&&e.height<n&&t.history.ignore((()=>{e.set({height:n}),r.current.height(n)})),d||e.height===n||t.history.ignore((()=>{e.set({height:n}),r.current.height(n)}))}}else{const n=findFitFontSize(r.current,e);if(n!==e.fontSize)return void t.history.ignore((()=>{e.set({fontSize:n})}));const o=_();e.height!==o&&t.history.ignore((()=>{e.set({height:o})}))}else{const r=_();t.history.ignore((()=>{e.set({height:r})}))}})),react_1.default.useLayoutEffect((()=>{const t=r.current;t&&(t.width(t.width()+1e-8),t._setTextData(),(0,apply_filters_1.applyFilter)(t,e))}),[h]);const p=react_1.default.useRef(null),x=react_1.default.useRef(0),m=r=>{const n=t.selectedElements.find((t=>t===e));n&&e.contentEditable&&(x.current=getCursorPosition(r),e.toggleEditMode())},y=!g&&e.placeholder,v=e._editModeEnabled?0:y?.6:e.opacity;(0,use_fadein_1.useFadeIn)(r,v);const S=getLineHeight({fontLoaded:h,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),w=e.selectable||"admin"===t.role;return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Text,{ref:r,id:e.id,name:"element",hideInExport:!e.showInExport,x:e.x,y:e.y,rotation:e.rotation,width:e.width,height:e.height,text:g||e.placeholder,fill:e.fill,stroke:e.stroke,strokeWidth:e.strokeWidth,fillAfterStrokeEnabled:!0,fontSize:e.fontSize,fontFamily:`"${e.fontFamily}", "${f}"`,fontStyle:e.fontStyle+" "+e.fontWeight,textDecoration:e.textDecoration,align:e.align,verticalAlign:e.verticalAlign,draggable:e.draggable,opacity:v,ellipsis:"ellipsis"===flags_1.flags.textOverflow,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,lineHeight:S,letterSpacing:e.letterSpacing*e.fontSize,listening:w,onDragStart:()=>{t.history.startTransaction()},hideInExport:!e.showInExport,onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onMouseEnter:()=>{a(!0)},onMouseLeave:()=>{a(!1)},onClick:m,onTap:m,onTransformStart:()=>{s(!0),t.history.startTransaction(),c.current=r.current.height()},onTransform:t=>{var r;const n=t.target,o=(null===(r=n.getStage())||void 0===r?void 0:r.findOne("Transformer")).getActiveAnchor();if("middle-left"===o||"middle-right"===o){const t=n.scaleX(),r=n.width()*t,o=e.fontSize;let i=r;r<o&&(i=o,p.current&&n.position(p.current)),n.width(i),n.scaleX(1),n.scaleY(1);const a=_();if("ellipsis"!==flags_1.flags.textOverflow){const t=Math.max(a,c.current);n.height(t),e.set({height:n.height()})}e.set({x:n.x(),y:n.y(),width:n.width(),rotation:n.rotation()}),(0,apply_filters_1.applyFilter)(n,e)}if("top-center"===o||"bottom-center"===o){let r="resize"===flags_1.flags.textOverflow?_():S*e.fontSize;t.target.height(Math.max(r,t.target.height()*t.target.scaleY())),t.target.scaleY(1)}t.target.strokeWidth(e.strokeWidth/t.target.scaleX()),p.current=t.target.position()},onTransformEnd:r=>{s(!1);const n=r.target.scaleX();r.target.scaleX(1),r.target.scaleY(1),r.target.strokeWidth(e.strokeWidth),e.set({fontSize:Math.round(e.fontSize*n),width:Math.ceil(r.target.width()*n),x:r.target.x(),y:r.target.y(),rotation:r.target.rotation(),height:r.target.height()}),t.history.endTransaction()}}),n&&react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation},react_1.default.createElement(TextInput,{textNodeRef:r,element:e,selectAll:o,cursorPosition:x.current,onBlur:()=>{e.toggleEditMode(!1)}})),!l&&(i||u)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=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.TextElement=exports.useTextColor=exports.useFontLoader=exports.getDir=exports.isRTLText=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),react_konva_utils_1=require("react-konva-utils"),mobx_1=require("mobx"),konva_1=__importDefault(require("konva")),loader_1=require("../utils/loader"),fonts_1=require("../utils/fonts"),flags_1=require("../utils/flags"),text_1=require("../utils/text"),gradient=__importStar(require("../utils/gradient")),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein"),highlighter_1=require("./highlighter"),styleNode=document.createElement("style");styleNode.type="text/css",document.head.appendChild(styleNode);const initialStyles={border:"none",padding:"0px",overflow:"hidden",background:"none",outline:"none",resize:"none",overflowWrap:"break-word",whiteSpace:"pre-wrap",userSelect:"text",wordBreak:"normal"};function isRTL(e){return new RegExp("^[^֑-߿יִ-﷽ﹰ-ﻼ]*?[֑-߿יִ-﷽ﹰ-ﻼ]").test(e)}function isRTLText(e){e=e.replace(/\s/g,"");let t=0;for(var r=0;r<e.length;r++){isRTL(e[r])&&(t+=1)}return t>e.length/2}function getDir(e){return isRTLText(e)?"rtl":"ltr"}exports.isRTLText=isRTLText,exports.getDir=getDir;const TextInput=(0,mobx_react_lite_1.observer)((({textNodeRef:e,element:t,onBlur:r,selectAll:i,cursorPosition:n})=>{const[o,a]=react_1.default.useState(initialStyles),l=e.current;react_1.default.useLayoutEffect((()=>{const e={};e.width=l.width()-2*l.padding()+"px",e.height=l.height()-2*l.padding()+10+"px",e.fontSize=l.fontSize()+"px",e.lineHeight=l.lineHeight()+.01,e.fontFamily=l.fontFamily(),e.textAlign=l.align(),e.color=l.fill(),e.fontWeight=t.fontWeight,e.fontStyle=t.fontStyle;const r=`\n .polotno-input::placeholder {\n color: ${o.color};\n opacity: 0.6;\n }\n `;styleNode.innerHTML="",styleNode.appendChild(document.createTextNode(r)),JSON.stringify(e)!==JSON.stringify(o)&&a(e)}));const s=react_1.default.useRef(null);react_1.default.useEffect((()=>{const e=setTimeout((()=>{var e;const t=s.current;if(!t)return;null===(e=s.current)||void 0===e||e.focus();const r=n||t.value.length;t.selectionStart=t.selectionEnd=r,i&&(null==t||t.select(),document.execCommand("selectAll",!1,null))}));return()=>{clearTimeout(e)}}),[]);let c=0;const u=l.textArr.length*l.lineHeight()*l.fontSize();return"middle"===t.verticalAlign&&(c=(t.height-u)/2),"bottom"===t.verticalAlign&&(c=t.height-u),react_1.default.createElement(react_konva_utils_1.Html,null,react_1.default.createElement("textarea",{className:"polotno-input",ref:s,dir:getDir(t.text),style:Object.assign(Object.assign(Object.assign({},initialStyles),o),{paddingTop:c+"px"}),value:t.text,onChange:e=>{t.set({text:e.target.value})},placeholder:t.placeholder,onBlur:r}))})),useEditor=e=>{const[t,r]=react_1.default.useState(!1),i=react_1.default.useRef(!1);return react_1.default.useEffect((()=>{var t=!0;return setTimeout((()=>{t&&(e._editModeEnabled&&(i.current=!0),r(!0),setTimeout((()=>{i.current=!1}),50))}),50),()=>{t=!1}}),[]),{editorEnabled:t&&e._editModeEnabled,selectAll:i.current}},useFontLoader=(e,t)=>{const[r,i]=react_1.default.useState((0,fonts_1.isFontLoaded)(t));return react_1.default.useLayoutEffect((()=>{if((0,fonts_1.isFontLoaded)(t))return void i(!0);let n=!0;return(async()=>{r&&i(!1);const o=(0,loader_1.incrementLoader)(`text ${t}`);await e.loadFont(t),konva_1.default.Util.requestAnimFrame(o),n&&i(!0)})(),()=>{n=!1}}),[t]),[r]};exports.useFontLoader=useFontLoader;const getLineHeight=({fontLoaded:e,fontFamily:t,fontSize:r,lineHeight:i})=>react_1.default.useMemo((()=>{if("number"==typeof i)return i;const e=document.createElement("div");e.style.fontFamily=t,e.style.fontSize=r+"px",e.style.lineHeight=i,e.innerText="Test text",document.body.appendChild(e);const n=e.offsetHeight;return document.body.removeChild(e),n/r}),[e,t,r,i]);function getRelativePointerPosition(e){var t=e.getAbsoluteTransform().copy();t.invert();var r=e.getStage().getPointerPosition();return t.point(r)}function getCursorPosition(e){var t;const r=e.target,i=getRelativePointerPosition(r),n=r.textArr,o=Math.floor(i.y/(r.fontSize()*r.lineHeight())),a=n.slice(0,o).reduce(((e,t)=>e+t.text.length),o),l=null!==(t=n[o])&&void 0!==t?t:n[0];let s=0;"right"===r.align()?s=r.width()-l.width:"center"===r.align()&&(s=r.width()/2-l.width/2);return a+Math.round((i.x-s)/l.width*l.text.length)}function usePrevious(e){const t=react_1.default.useRef(e),r=react_1.default.useRef(e);return react_1.default.useEffect((()=>{r.current=t.current,t.current=e}),[e]),r.current}function findFitFontSize(e,t){const r=e.getAttrs(),i=(0,text_1.removeTags)(t.text);let n=t.fontSize;const o=Math.round(2*t.fontSize)-1;for(let r=1;r<o;r++){const r=t.height&&e.height()>t.height,o=i.split("\n").join(" ").split(" ");let a=e.textArr.map((e=>e.text)).join(";");const l=o.find((e=>!a.includes(e)||(a=a.replace(e,""),!1)));if(!(r||l))break;n-=.5,e.fontSize(n)}return e.fontSize(r.fontSize),n}const useTextColor=e=>react_1.default.useMemo((()=>{if(!gradient.isGradient(e.fill))return{fill:e.fill};const t=gradient.parseColor(e.fill),r={x:e.width/2,y:e.height/2},i=Math.sqrt(Math.pow(r.x,2)+Math.pow(r.y,2)),n=konva_1.default.Util.degToRad(t[0])-Math.PI/2;return{fillLinearGradientStartPointX:r.x-i*Math.cos(n),fillLinearGradientStartPointY:r.y-i*Math.sin(n),fillLinearGradientColorStops:[0,t[1],1,t[2]],fillLinearGradientEndPointX:r.x+i*Math.cos(n),fillLinearGradientEndPointY:r.y+i*Math.sin(n),fill:t[1],fillPriority:"linear-gradient"}}),[e.fill]);exports.useTextColor=useTextColor,exports.TextElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const r=react_1.default.useRef(null),{editorEnabled:i,selectAll:n}=useEditor(e),[o,a]=react_1.default.useState(!1),[l,s]=react_1.default.useState(!1),c=react_1.default.useRef(e.height),u=t.selectedElements.indexOf(e)>=0,{textVerticalResizeEnabled:d}=flags_1.flags,f=usePrevious(e.fontFamily);react_1.default.useEffect((()=>{if(e.width)return;const t=r.current;t.width(600),e.set({width:1.4*t.getTextWidth()})}),[]),react_1.default.useLayoutEffect((()=>(0,mobx_1.autorun)((()=>{const t=r.current;(0,apply_filters_1.applyFilter)(t,e)}))));const[h]=(0,exports.useFontLoader)(t,e.fontFamily),g=(0,text_1.removeTags)(e.text),_=()=>{const e=r.current.clone({height:void 0}),t=Math.ceil(e.fontSize()*e.lineHeight()*e.textArr.length+1);return e.destroy(),t};react_1.default.useLayoutEffect((()=>{if(!h)return;const{textOverflow:i}=flags_1.flags;if(e.height)if("change-font-size"!==i||l){if("resize"===i){const i=_();d&&e.height<i&&t.history.ignore((()=>{e.set({height:i}),r.current.height(i)})),d||e.height===i||t.history.ignore((()=>{e.set({height:i}),r.current.height(i)}))}}else{const i=findFitFontSize(r.current,e);if(i!==e.fontSize)return void t.history.ignore((()=>{e.set({fontSize:i})}));const n=_();e.height!==n&&t.history.ignore((()=>{e.set({height:n})}))}else{const r=_();t.history.ignore((()=>{e.set({height:r})}))}})),react_1.default.useLayoutEffect((()=>{const t=r.current;t&&(t.width(t.width()+1e-8),t._setTextData(),(0,apply_filters_1.applyFilter)(t,e))}),[h]);const p=react_1.default.useRef(null),x=react_1.default.useRef(0),y=r=>{const i=t.selectedElements.find((t=>t===e));i&&e.contentEditable&&(x.current=getCursorPosition(r),e.toggleEditMode())},m=!g&&e.placeholder?.6:e.opacity;(0,use_fadein_1.useFadeIn)(r,m);const v=getLineHeight({fontLoaded:h,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),S=e.selectable||"admin"===t.role,w=(0,exports.useTextColor)(e);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Text,Object.assign({ref:r,id:e.id,name:"element",hideInExport:!e.showInExport||!g,editModeEnabled:e._editModeEnabled,x:e.x,y:e.y,rotation:e.rotation,width:e.width,height:e.height,text:g||e.placeholder},w,{stroke:e.stroke,strokeWidth:e.strokeWidth,fillAfterStrokeEnabled:!0,fontSize:e.fontSize,fontFamily:`"${e.fontFamily}", "${f}"`,fontStyle:e.fontStyle+" "+e.fontWeight,textDecoration:e.textDecoration,align:e.align,verticalAlign:e.verticalAlign,draggable:e.draggable,opacity:m,visible:!e._editModeEnabled,ellipsis:"ellipsis"===flags_1.flags.textOverflow,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,lineHeight:v,letterSpacing:e.letterSpacing*e.fontSize,listening:S,onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onMouseEnter:()=>{a(!0)},onMouseLeave:()=>{a(!1)},onClick:y,onTap:y,onTransformStart:()=>{s(!0),t.history.startTransaction(),c.current=r.current.height()},onTransform:t=>{var r;const i=t.target,n=(null===(r=i.getStage())||void 0===r?void 0:r.findOne("Transformer")).getActiveAnchor();if("middle-left"===n||"middle-right"===n){const t=i.scaleX(),r=i.width()*t,n=e.fontSize;let o=r;r<n&&(o=n,p.current&&i.position(p.current)),i.width(o),i.scaleX(1),i.scaleY(1);const a=_();if("ellipsis"!==flags_1.flags.textOverflow){const t=Math.max(a,c.current);i.height(t),e.set({height:i.height()})}e.set({x:i.x(),y:i.y(),width:i.width(),rotation:i.rotation()}),(0,apply_filters_1.applyFilter)(i,e)}if("top-center"===n||"bottom-center"===n){let r="resize"===flags_1.flags.textOverflow?_():v*e.fontSize;t.target.height(Math.max(r,t.target.height()*t.target.scaleY())),t.target.scaleY(1)}t.target.strokeWidth(e.strokeWidth/t.target.scaleX()),p.current=t.target.position()},onTransformEnd:r=>{s(!1);const i=r.target.scaleX();r.target.scaleX(1),r.target.scaleY(1),r.target.strokeWidth(e.strokeWidth),e.set({fontSize:Math.round(e.fontSize*i),width:Math.ceil(r.target.width()*i),x:r.target.x(),y:r.target.y(),rotation:r.target.rotation(),height:r.target.height()}),t.history.endTransaction()}})),i&&react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation},react_1.default.createElement(TextInput,{textNodeRef:r,element:e,selectAll:n,cursorPosition:x.current,onBlur:()=>{e.toggleEditMode(!1)}})),!l&&(o||u)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
|
package/model/store.d.ts
CHANGED
|
@@ -586,6 +586,7 @@ export declare const SVGElement: import("mobx-state-tree").IModelType<{
|
|
|
586
586
|
height: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
587
587
|
borderColor: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
588
588
|
borderSize: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
589
|
+
cornerRadius: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
589
590
|
colorsReplace: import("mobx-state-tree").IMapType<import("mobx-state-tree").ISimpleType<string>>;
|
|
590
591
|
}, {
|
|
591
592
|
readonly locked: boolean;
|
|
@@ -735,6 +736,12 @@ export declare const Page: import("mobx-state-tree").IModelType<{
|
|
|
735
736
|
canMoveElementsBottom(ids: Array<string>): any;
|
|
736
737
|
moveElementsBottom(ids: Array<string>): void;
|
|
737
738
|
setElementZIndex(id: any, zIndex: any): void;
|
|
739
|
+
setSize({ width, height }: {
|
|
740
|
+
width: any;
|
|
741
|
+
height: any;
|
|
742
|
+
}, { useMagic }: {
|
|
743
|
+
useMagic: any;
|
|
744
|
+
}): void;
|
|
738
745
|
} & {
|
|
739
746
|
moveElementUp(id: any): void;
|
|
740
747
|
moveElementDown(id: any): void;
|
|
@@ -796,6 +803,12 @@ export declare const Store: import("mobx-state-tree").IModelType<{
|
|
|
796
803
|
canMoveElementsBottom(ids: Array<string>): any;
|
|
797
804
|
moveElementsBottom(ids: Array<string>): void;
|
|
798
805
|
setElementZIndex(id: any, zIndex: any): void;
|
|
806
|
+
setSize({ width, height }: {
|
|
807
|
+
width: any;
|
|
808
|
+
height: any;
|
|
809
|
+
}, { useMagic }: {
|
|
810
|
+
useMagic: any;
|
|
811
|
+
}): void;
|
|
799
812
|
} & {
|
|
800
813
|
moveElementUp(id: any): void;
|
|
801
814
|
moveElementDown(id: any): void;
|
|
@@ -1180,6 +1193,12 @@ export declare const Store: import("mobx-state-tree").IModelType<{
|
|
|
1180
1193
|
canMoveElementsBottom(ids: Array<string>): any;
|
|
1181
1194
|
moveElementsBottom(ids: Array<string>): void;
|
|
1182
1195
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1196
|
+
setSize({ width, height }: {
|
|
1197
|
+
width: any;
|
|
1198
|
+
height: any;
|
|
1199
|
+
}, { useMagic }: {
|
|
1200
|
+
useMagic: any;
|
|
1201
|
+
}): void;
|
|
1183
1202
|
} & {
|
|
1184
1203
|
moveElementUp(id: any): void;
|
|
1185
1204
|
moveElementDown(id: any): void;
|
|
@@ -1218,6 +1237,12 @@ export declare const Store: import("mobx-state-tree").IModelType<{
|
|
|
1218
1237
|
canMoveElementsBottom(ids: Array<string>): any;
|
|
1219
1238
|
moveElementsBottom(ids: Array<string>): void;
|
|
1220
1239
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1240
|
+
setSize({ width, height }: {
|
|
1241
|
+
width: any;
|
|
1242
|
+
height: any;
|
|
1243
|
+
}, { useMagic }: {
|
|
1244
|
+
useMagic: any;
|
|
1245
|
+
}): void;
|
|
1221
1246
|
} & {
|
|
1222
1247
|
moveElementUp(id: any): void;
|
|
1223
1248
|
moveElementDown(id: any): void;
|
|
@@ -1265,6 +1290,12 @@ export declare const Store: import("mobx-state-tree").IModelType<{
|
|
|
1265
1290
|
canMoveElementsBottom(ids: Array<string>): any;
|
|
1266
1291
|
moveElementsBottom(ids: Array<string>): void;
|
|
1267
1292
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1293
|
+
setSize({ width, height }: {
|
|
1294
|
+
width: any;
|
|
1295
|
+
height: any;
|
|
1296
|
+
}, { useMagic }: {
|
|
1297
|
+
useMagic: any;
|
|
1298
|
+
}): void;
|
|
1268
1299
|
} & {
|
|
1269
1300
|
moveElementUp(id: any): void;
|
|
1270
1301
|
moveElementDown(id: any): void;
|
|
@@ -1303,6 +1334,12 @@ export declare const Store: import("mobx-state-tree").IModelType<{
|
|
|
1303
1334
|
canMoveElementsBottom(ids: Array<string>): any;
|
|
1304
1335
|
moveElementsBottom(ids: Array<string>): void;
|
|
1305
1336
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1337
|
+
setSize({ width, height }: {
|
|
1338
|
+
width: any;
|
|
1339
|
+
height: any;
|
|
1340
|
+
}, { useMagic }: {
|
|
1341
|
+
useMagic: any;
|
|
1342
|
+
}): void;
|
|
1306
1343
|
} & {
|
|
1307
1344
|
moveElementUp(id: any): void;
|
|
1308
1345
|
moveElementDown(id: any): void;
|
|
@@ -1317,7 +1354,7 @@ export declare const Store: import("mobx-state-tree").IModelType<{
|
|
|
1317
1354
|
setScale(scale: number): void;
|
|
1318
1355
|
_setScaleToFit(scale: number): void;
|
|
1319
1356
|
setElementsPixelRatio(ratio: number): void;
|
|
1320
|
-
setSize(width: number, height: number,
|
|
1357
|
+
setSize(width: number, height: number, useMagic?: boolean): void;
|
|
1321
1358
|
setPageZIndex(id: any, zIndex: any): void;
|
|
1322
1359
|
deletePages(ids: Array<string>): void;
|
|
1323
1360
|
deleteElements(ids: Array<string>): void;
|
package/model/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,o,n){void 0===n&&(n=o);var s=Object.getOwnPropertyDescriptor(t,o);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,n,s)}:function(e,t,o,n){void 0===n&&(n=o),e[n]=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(e);s<n.length;s++)t.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(e,n[s])&&(o[n[s]]=e[n[s]])}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"),history_1=require("./history"),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")),loader_1=require("../utils/loader"),unit_1=require("../utils/unit");(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",name:"",x:0,y:0,rotation:0,opacity:1,blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,custom:mobx_state_tree_1.types.frozen(),visible:!0,draggable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot((e=>{const t=Object.assign(Object.assign({},e),{x:e.x||0,y:e.y||0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1),t})).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var n in t)"_"!==n[0]&&(o[n]=e[n]);return o})).views((e=>({get locked(){return!e.draggable&&!e.contentEditable&&!e.styleEditable},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.moveElementsUp([e.id])},moveTop(){e.page.moveElementsTop([e.id])},moveDown(){e.page.moveElementsDown([e.id])},moveBottom(){e.page.moveElementsBottom([e.id])},beforeDestroy(){e.store.history.endTransaction()}}))),exports.TextElement=exports.Element.named("Text").props({type:"text",text:"",placeholder:"",fontSize:14,fontFamily:"Roboto",fontStyle:"normal",fontWeight:"normal",textDecoration:"",fill:"black",align:"center",width:100,height:0,verticalAlign:"top",strokeWidth:0,stroke:"black",lineHeight: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}))).actions((e=>({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 n in t)"_"!==n[0]&&(o[n]=e[n]);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))),_forEachElementUp(t,o){const n=t.map((t=>({id:t,index:e.children.findIndex((e=>e.id===t))})));n.sort(((e,t)=>t.index-e.index));for(const{index:s}of n){if(-1==s)continue;const n=s<e.children.length-1&&e.children[s+1],i=t.indexOf(null==n?void 0:n.id)>=0;s===e.children.length-1||i||o(s)}},_forEachElementDown(t,o){const n=t.map((t=>({id:t,index:e.children.findIndex((e=>e.id===t))})));n.sort(((e,t)=>e.index-t.index));for(const{index:s}of n){if(-1==s)continue;const n=s>0&&e.children[s-1],i=t.indexOf(null==n?void 0:n.id)>=0;0===s||i||o(s)}return!1}}))).actions((e=>({clone(t){const o=e.toJSON();o.children.forEach((e=>{e.id=(0,nanoid_1.nanoid)(10)}));const n=Object.assign(Object.assign(Object.assign({},o),{id:(0,nanoid_1.nanoid)(10)}),t),s=e.store.addPage(n),i=e.store.pages.indexOf(e);s.setZIndex(i+1),s.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 n=o.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.children.push(n),n.selectable&&e.store.selectElements([n.id]),n},canMoveElementsUp(t){let o=!1;return e._forEachElementUp(t,(()=>{o=o||!0})),o},moveElementsUp(t){e._forEachElementUp(t,(t=>{const o=e.children[t];(0,mobx_state_tree_1.detach)(o),e.children.splice(t+1,0,o)}))},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(t){const o=[],n=[];e.children.forEach((e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)})),e.children.replace(n.concat(o))},canMoveElementsDown(t){let o=!1;return e._forEachElementDown(t,(()=>{o=o||!0})),o},moveElementsDown(t){e._forEachElementDown(t,(t=>{const o=e.children[t];(0,mobx_state_tree_1.detach)(o),e.children.splice(t-1,0,o)}))},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(t){const o=[],n=[];e.children.forEach((e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)})),e.children.replace(o.concat(n))},setElementZIndex(t,o){const n=e.children.find((e=>e.id===t));n&&((0,mobx_state_tree_1.detach)(n),e.children.remove(n),e.children.splice(o,0,n))}}))).actions((e=>({moveElementUp(t){console.warn("page.moveElementUp(id) is deprecated. Please use page.moveElementsUp([id1, id2]) instead."),e.moveElementsUp([t])},moveElementDown(t){console.warn("page.moveElementDown(id) is deprecated. Please use page.moveElementsDown([id1, id2]) instead."),e.moveElementsDown([t])},moveElementTop(t){console.warn("page.moveElementTop(id) is deprecated. Please use page.moveElementsTop([id1, id2]) instead."),e.moveElementsTop([t])},moveElementBottom(t){console.warn("page.moveElementBottom(id) is deprecated. Please use page.moveElementsBottom([id1, id2]) instead."),e.moveElementsBottom([t])}}))),exports.Font=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,unit:"px",dpi:72,bleedVisible:!1,rulesVisible:!1,openedSidePanel:"",selectedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),history:mobx_state_tree_1.types.optional(history_1.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views((e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map((t=>{for(const o of e.pages)for(const e of o.children)if(e.id===t)return e})).filter((e=>!!e))},get activePage(){return e.pages.slice().find((t=>t.id===e._activePageId))||(e.pages.length?e.pages[0]:null)}}))).actions((e=>({afterCreate(){e.history.canUndo},setUnit({unit:t,dpi:o}){e.unit=t||e.unit,e.dpi=o||e.dpi},setRole(t){e.role=t},getElementById(t){for(const o of e.pages)for(const e of o.children)if(e.id===t)return e},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},toggleRulers(t){e.rulesVisible=null!=t?t:!e.rulesVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,o,n){if(n){const n=t/e.width,s=o/e.height;for(const t of e.pages)for(const e of t.children)e.set({x:e.x*n,y:e.y*s}),"text"===e.type?e.set({fontSize:e.fontSize*n,width:Math.max(e.width*n,2)}):"image"===e.type?e.set({width:e.width*n,height:e.height*s}):"svg"===e.type&&e.set({width:Math.max(e.width*n,2),height:Math.max(e.height*n,2)})}e.width=t,e.height=o},setPageZIndex(t,o){const n=e.pages.find((e=>e.id===t));n&&((0,mobx_state_tree_1.detach)(n),e.pages.remove(n),e.pages.splice(o,0,n))},deletePages(t){const o=e.pages.indexOf(e.activePage);t.forEach((t=>{const o=e.pages.find((e=>e.id===t));(0,mobx_state_tree_1.destroy)(o)}));const n=Math.min(e.pages.length-1,o),s=e.pages[n];s&&(e._activePageId=s.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)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},on(t,o){if("change"===t){let t=e.toJSON();return(0,mobx_state_tree_1.onSnapshot)(e,(n=>{const s=e.toJSON();JSON.stringify(s)!==JSON.stringify(t)&&(t=s,o(s))}))}},async toDataURL({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:s,includeBleed:i,quality:a}={}){var r;const l=t||1;n=n||(null===(r=e.pages[0])||void 0===r?void 0:r.id);const d=e.pages.find((e=>e.id===n));if(!d)throw new Error(`No page for export with id ${n}`);null==d||d.set({_exporting:!0}),await e.waitLoading();const c=konva_1.default.stages.find((e=>e.getAttr("pageId")===n));if(!c)throw new Error(`Export is failed. Can not find stage for page ${n}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);const p=c.findOne(".page-container");c.find("Transformer").forEach((e=>e.visible(!1))),p.find(".page-background").forEach((e=>e.shadowEnabled(!1))),p.find(".page-background").forEach((e=>e.strokeEnabled(!1))),p.find(".highlighter").forEach((e=>e.visible(!1)));const m=p.findOne(".page-background-group"),_=m.clip();m.clip({x:null,y:null,width:null,height:null});const g=p.findOne(".elements-container"),h=g.clip();g.clip({x:null,y:null,width:null,height:null});const u=p.find((e=>e.getAttr("hideInExport")));u.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.hide()})),o&&p.find(".page-background").forEach((e=>e.hide()));const f=i?d.bleed:0;let b=f;e.bleedVisible&&i?b=0:e.bleedVisible&&!i&&(b=-d.bleed);const x=document.createElement("canvas");x.width=(d.computedWidth+2*f)*l,x.height=(d.computedHeight+2*f)*l;const y=x.getContext("2d");"image/jpeg"===s&&(y.fillStyle="white",y.fillRect(0,0,x.width,x.height));const E=p.toCanvas({x:p.x()-b*p.scaleX(),y:p.y()-b*p.scaleY(),width:(d.computedWidth+2*f)*p.scaleX(),height:(d.computedHeight+2*f)*p.scaleY(),pixelRatio:1/p.scaleX()*l});y.drawImage(E,0,0);const v=x.toDataURL(s,a);return o&&p.find(".page-background").forEach((e=>e.show())),u.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),p.find(".page-background").forEach((e=>e.shadowEnabled(!0))),p.find(".page-background").forEach((e=>e.strokeEnabled(!0))),c.find("Transformer").forEach((e=>e.visible(!0))),p.find(".highlighter").forEach((e=>e.visible(!0))),m.clip(_),g.clip(h),null==d||d.set({_exporting:!1}),v},async saveAsImage(t={}){var{fileName:o}=t,n=__rest(t,["fileName"]);const s=n.mimeType||"image/png",i=s.split("/")[1];(0,download_1.downloadFile)(await e.toDataURL(n),o||"polotno."+i,s)},async _toPDF(t){const o=t.dpi||e.dpi,n=t.parallel||1,s=t.unit||("px"===e.unit?"mm":e.unit),i=t.pixelRatio||1,a=await(0,pdf_1.getJsPDF)(),r=e=>(0,unit_1.pxToUnit)({px:e,unit:s,dpi:o}),l=e.pages[0]||{},d=t.includeBleed?l.bleed:0,c=r(l.computedWidth+2*d),p=r(l.computedHeight+2*d);var m=new a({unit:s,orientation:c>p?"landscape":"portrait",format:[c,p],compress:!0});m.deletePage(1);const _=e._elementsPixelRatio;e.setElementsPixelRatio(i),await new Promise((e=>setTimeout(e)));const g=((e,t)=>{for(var o=[],n=0;n<e.length;n+=t)o.push(e.slice(n,n+t));return o})(e.pages,n);for(const o of g){const n=o.map((async o=>{const n=t.includeBleed?o.bleed:0,s=r(o.computedWidth+2*n),a=r(o.computedHeight+2*n);let l=0,d=i;for(;l<10;){l+=1,2===l&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const n=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:o.id,pixelRatio:d}));if(n.length>20)return{url:n,width:s,height:a};d*=.8}}));(await Promise.all(n)).forEach((({url:e,width:t,height:o})=>{m.addPage([t,o],t>o?"landscape":"portrait"),m.addImage(e,0,0,t,o,void 0,"FAST")}))}return e.setElementsPixelRatio(_),m},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpeg"},t))).output("datauristring"),async saveAsPDF(t={}){var{fileName:o}=t,n=__rest(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},n))).save(o||"polotno.pdf")},async waitLoading(){await new Promise((e=>setTimeout(e,100))),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),unit:e.unit,dpi:e.dpi}),loadJSON(t,o=!1){var n;const s=Object.assign({},t),i=e.pages.indexOf(e.activePage);let a=null===(n=s.pages[i]||s.pages[0])||void 0===n?void 0:n.id;s._activePageId=a;const r=Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e));Object.assign(r,s),r.history=o?e.history.toJSON():{history:[],undoIdx:-1},(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;
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,o,n){void 0===n&&(n=o);var s=Object.getOwnPropertyDescriptor(t,o);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,n,s)}:function(e,t,o,n){void 0===n&&(n=o),e[n]=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(o[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(e);s<n.length;s++)t.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(e,n[s])&&(o[n[s]]=e[n[s]])}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"),history_1=require("./history"),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")),loader_1=require("../utils/loader"),unit_1=require("../utils/unit");(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",name:"",x:0,y:0,rotation:0,opacity:1,blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,custom:mobx_state_tree_1.types.frozen(),visible:!0,draggable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot((e=>{const t=Object.assign(Object.assign({},e),{x:e.x||0,y:e.y||0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1),t})).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var n in t)"_"!==n[0]&&(o[n]=e[n]);return o})).views((e=>({get locked(){return!e.draggable&&!e.contentEditable&&!e.styleEditable},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.moveElementsUp([e.id])},moveTop(){e.page.moveElementsTop([e.id])},moveDown(){e.page.moveElementsDown([e.id])},moveBottom(){e.page.moveElementsBottom([e.id])},beforeDestroy(){e.store.history.endTransaction()}}))),exports.TextElement=exports.Element.named("Text").props({type:"text",text:"",placeholder:"",fontSize:14,fontFamily:"Roboto",fontStyle:"normal",fontWeight:"normal",textDecoration:"",fill:"black",align:"center",width:100,height:0,verticalAlign:"top",strokeWidth:0,stroke:"black",lineHeight: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,cornerRadius: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}))).actions((e=>({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 n in t)"_"!==n[0]&&(o[n]=e[n]);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))),_forEachElementUp(t,o){const n=t.map((t=>({id:t,index:e.children.findIndex((e=>e.id===t))})));n.sort(((e,t)=>t.index-e.index));for(const{index:s}of n){if(-1==s)continue;const n=s<e.children.length-1&&e.children[s+1],i=t.indexOf(null==n?void 0:n.id)>=0;s===e.children.length-1||i||o(s)}},_forEachElementDown(t,o){const n=t.map((t=>({id:t,index:e.children.findIndex((e=>e.id===t))})));n.sort(((e,t)=>e.index-t.index));for(const{index:s}of n){if(-1==s)continue;const n=s>0&&e.children[s-1],i=t.indexOf(null==n?void 0:n.id)>=0;0===s||i||o(s)}return!1}}))).actions((e=>({clone(t){const o=e.toJSON();o.children.forEach((e=>{e.id=(0,nanoid_1.nanoid)(10)}));const n=Object.assign(Object.assign(Object.assign({},o),{id:(0,nanoid_1.nanoid)(10)}),t),s=e.store.addPage(n),i=e.store.pages.indexOf(e);s.setZIndex(i+1),s.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 n=o.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.children.push(n),n.selectable&&e.store.selectElements([n.id]),n},canMoveElementsUp(t){let o=!1;return e._forEachElementUp(t,(()=>{o=o||!0})),o},moveElementsUp(t){e._forEachElementUp(t,(t=>{const o=e.children[t];(0,mobx_state_tree_1.detach)(o),e.children.splice(t+1,0,o)}))},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(t){const o=[],n=[];e.children.forEach((e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)})),e.children.replace(n.concat(o))},canMoveElementsDown(t){let o=!1;return e._forEachElementDown(t,(()=>{o=o||!0})),o},moveElementsDown(t){e._forEachElementDown(t,(t=>{const o=e.children[t];(0,mobx_state_tree_1.detach)(o),e.children.splice(t-1,0,o)}))},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(t){const o=[],n=[];e.children.forEach((e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)})),e.children.replace(o.concat(n))},setElementZIndex(t,o){const n=e.children.find((e=>e.id===t));n&&((0,mobx_state_tree_1.detach)(n),e.children.remove(n),e.children.splice(o,0,n))},setSize({width:t,height:o},{useMagic:n}){e.width=t,e.height=o}}))).actions((e=>({moveElementUp(t){console.warn("page.moveElementUp(id) is deprecated. Please use page.moveElementsUp([id1, id2]) instead."),e.moveElementsUp([t])},moveElementDown(t){console.warn("page.moveElementDown(id) is deprecated. Please use page.moveElementsDown([id1, id2]) instead."),e.moveElementsDown([t])},moveElementTop(t){console.warn("page.moveElementTop(id) is deprecated. Please use page.moveElementsTop([id1, id2]) instead."),e.moveElementsTop([t])},moveElementBottom(t){console.warn("page.moveElementBottom(id) is deprecated. Please use page.moveElementsBottom([id1, id2]) instead."),e.moveElementsBottom([t])}}))),exports.Font=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,unit:"px",dpi:72,bleedVisible:!1,rulesVisible:!1,openedSidePanel:"",selectedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),history:mobx_state_tree_1.types.optional(history_1.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views((e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map((t=>{for(const o of e.pages)for(const e of o.children)if(e.id===t)return e})).filter((e=>!!e))},get activePage(){return e.pages.slice().find((t=>t.id===e._activePageId))||(e.pages.length?e.pages[0]:null)}}))).actions((e=>({afterCreate(){e.history.canUndo},setUnit({unit:t,dpi:o}){e.unit=t||e.unit,e.dpi=o||e.dpi},setRole(t){e.role=t},getElementById(t){for(const o of e.pages)for(const e of o.children)if(e.id===t)return e},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){const o=t.map((t=>e.getElementById(t))).sort(((e,t)=>e.page.children.indexOf(e)-e.page.children.indexOf(t))).filter((e=>!!e)).map((e=>e.id));e.selectedElementsIds=(0,mobx_state_tree_1.cast)(o)},toggleBleed(t){e.bleedVisible=null!=t?t:!e.bleedVisible},toggleRulers(t){e.rulesVisible=null!=t?t:!e.rulesVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,o,n){if(n){const n=t/e.width,s=o/e.height;for(const t of e.pages)for(const e of t.children)e.set({x:e.x*n,y:e.y*s}),"text"===e.type?e.set({fontSize:e.fontSize*n,width:Math.max(e.width*n,2)}):"image"===e.type?e.set({width:e.width*n,height:e.height*s}):"svg"===e.type&&e.set({width:Math.max(e.width*n,2),height:Math.max(e.height*n,2)})}e.width=t,e.height=o},setPageZIndex(t,o){const n=e.pages.find((e=>e.id===t));n&&((0,mobx_state_tree_1.detach)(n),e.pages.remove(n),e.pages.splice(o,0,n))},deletePages(t){const o=e.pages.indexOf(e.activePage);t.forEach((t=>{const o=e.pages.find((e=>e.id===t));(0,mobx_state_tree_1.destroy)(o)}));const n=Math.min(e.pages.length-1,o),s=e.pages[n];s&&(e._activePageId=s.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)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},on(t,o){if("change"===t){let t=e.toJSON();return(0,mobx_state_tree_1.onSnapshot)(e,(n=>{const s=e.toJSON();JSON.stringify(s)!==JSON.stringify(t)&&(t=s,o(s))}))}},async toDataURL({pixelRatio:t,ignoreBackground:o,pageId:n,mimeType:s,includeBleed:i,quality:a}={}){var r;const l=t||1;n=n||(null===(r=e.pages[0])||void 0===r?void 0:r.id);const d=e.pages.find((e=>e.id===n));if(!d)throw new Error(`No page for export with id ${n}`);null==d||d.set({_exporting:!0}),await e.waitLoading();const c=konva_1.default.stages.find((e=>e.getAttr("pageId")===n));if(!c)throw new Error(`Export is failed. Can not find stage for page ${n}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);const p=c.findOne(".page-container");c.find("Transformer").forEach((e=>e.visible(!1))),p.find(".page-background").forEach((e=>e.shadowEnabled(!1))),p.find(".page-background").forEach((e=>e.strokeEnabled(!1))),p.find(".highlighter").forEach((e=>e.visible(!1)));const m=p.findOne(".page-background-group"),g=m.clip();m.clip({x:null,y:null,width:null,height:null});const _=p.findOne(".elements-container"),h=_.clip();_.clip({x:null,y:null,width:null,height:null});const u=p.find((e=>e.getAttr("hideInExport")));u.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.hide()}));const f=p.find((e=>!e.visible()&&e.getAttr("editModeEnabled")));f.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.show()})),o&&p.find(".page-background").forEach((e=>e.hide()));const b=i?d.bleed:0;let x=b;e.bleedVisible&&i?x=0:e.bleedVisible&&!i&&(x=-d.bleed);const y=document.createElement("canvas");y.width=(d.computedWidth+2*b)*l,y.height=(d.computedHeight+2*b)*l;const E=y.getContext("2d");"image/jpeg"===s&&(E.fillStyle="white",E.fillRect(0,0,y.width,y.height));const v=p.toCanvas({x:p.x()-x*p.scaleX(),y:p.y()-x*p.scaleY(),width:(d.computedWidth+2*b)*p.scaleX(),height:(d.computedHeight+2*b)*p.scaleY(),pixelRatio:1/p.scaleX()*l});E.drawImage(v,0,0);const w=y.toDataURL(s,a);return o&&p.find(".page-background").forEach((e=>e.show())),u.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),f.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),p.find(".page-background").forEach((e=>e.shadowEnabled(!0))),p.find(".page-background").forEach((e=>e.strokeEnabled(!0))),c.find("Transformer").forEach((e=>e.visible(!0))),p.find(".highlighter").forEach((e=>e.visible(!0))),m.clip(g),_.clip(h),null==d||d.set({_exporting:!1}),w},async saveAsImage(t={}){var{fileName:o}=t,n=__rest(t,["fileName"]);const s=n.mimeType||"image/png",i=s.split("/")[1];(0,download_1.downloadFile)(await e.toDataURL(n),o||"polotno."+i,s)},async _toPDF(t){const o=t.dpi||e.dpi,n=t.parallel||1,s=t.unit||("px"===e.unit?"mm":e.unit),i=t.pixelRatio||1,a=await(0,pdf_1.getJsPDF)(),r=e=>(0,unit_1.pxToUnit)({px:e,unit:s,dpi:o}),l=e.pages[0]||{},d=t.includeBleed?l.bleed:0,c=r(l.computedWidth+2*d),p=r(l.computedHeight+2*d);var m=new a({unit:s,orientation:c>p?"landscape":"portrait",format:[c,p],compress:!0});m.deletePage(1);const g=e._elementsPixelRatio;e.setElementsPixelRatio(i),await new Promise((e=>setTimeout(e)));const _=((e,t)=>{for(var o=[],n=0;n<e.length;n+=t)o.push(e.slice(n,n+t));return o})(e.pages,n);for(const o of _){const n=o.map((async o=>{const n=t.includeBleed?o.bleed:0,s=r(o.computedWidth+2*n),a=r(o.computedHeight+2*n);let l=0,d=i;for(;l<10;){l+=1,2===l&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const n=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:o.id,pixelRatio:d}));if(n.length>20)return{url:n,width:s,height:a};d*=.8}}));(await Promise.all(n)).forEach((({url:e,width:t,height:o})=>{m.addPage([t,o],t>o?"landscape":"portrait"),m.addImage(e,0,0,t,o,void 0,"FAST")}))}return e.setElementsPixelRatio(g),m},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpeg"},t))).output("datauristring"),async saveAsPDF(t={}){var{fileName:o}=t,n=__rest(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},n))).save(o||"polotno.pdf")},async waitLoading(){await new Promise((e=>setTimeout(e,100))),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),unit:e.unit,dpi:e.dpi}),loadJSON(t,o=!1){var n;const s=Object.assign({},t),i=e.pages.indexOf(e.activePage);let a=null===(n=s.pages[i]||s.pages[0])||void 0===n?void 0:n.id;s._activePageId=a;const r=Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e));Object.assign(r,s),r.history=o?e.history.toJSON():{history:[],undoIdx:-1},(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
package/polotno-app.d.ts
CHANGED
|
@@ -47,6 +47,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
47
47
|
canMoveElementsBottom(ids: string[]): any;
|
|
48
48
|
moveElementsBottom(ids: string[]): void;
|
|
49
49
|
setElementZIndex(id: any, zIndex: any): void;
|
|
50
|
+
setSize({ width, height }: {
|
|
51
|
+
width: any;
|
|
52
|
+
height: any;
|
|
53
|
+
}, { useMagic }: {
|
|
54
|
+
useMagic: any;
|
|
55
|
+
}): void;
|
|
50
56
|
} & {
|
|
51
57
|
moveElementUp(id: any): void;
|
|
52
58
|
moveElementDown(id: any): void;
|
|
@@ -85,6 +91,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
85
91
|
canMoveElementsBottom(ids: string[]): any;
|
|
86
92
|
moveElementsBottom(ids: string[]): void;
|
|
87
93
|
setElementZIndex(id: any, zIndex: any): void;
|
|
94
|
+
setSize({ width, height }: {
|
|
95
|
+
width: any;
|
|
96
|
+
height: any;
|
|
97
|
+
}, { useMagic }: {
|
|
98
|
+
useMagic: any;
|
|
99
|
+
}): void;
|
|
88
100
|
} & {
|
|
89
101
|
moveElementUp(id: any): void;
|
|
90
102
|
moveElementDown(id: any): void;
|
|
@@ -493,6 +505,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
493
505
|
canMoveElementsBottom(ids: string[]): any;
|
|
494
506
|
moveElementsBottom(ids: string[]): void;
|
|
495
507
|
setElementZIndex(id: any, zIndex: any): void;
|
|
508
|
+
setSize({ width, height }: {
|
|
509
|
+
width: any;
|
|
510
|
+
height: any;
|
|
511
|
+
}, { useMagic }: {
|
|
512
|
+
useMagic: any;
|
|
513
|
+
}): void;
|
|
496
514
|
} & {
|
|
497
515
|
moveElementUp(id: any): void;
|
|
498
516
|
moveElementDown(id: any): void;
|
|
@@ -531,6 +549,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
531
549
|
canMoveElementsBottom(ids: string[]): any;
|
|
532
550
|
moveElementsBottom(ids: string[]): void;
|
|
533
551
|
setElementZIndex(id: any, zIndex: any): void;
|
|
552
|
+
setSize({ width, height }: {
|
|
553
|
+
width: any;
|
|
554
|
+
height: any;
|
|
555
|
+
}, { useMagic }: {
|
|
556
|
+
useMagic: any;
|
|
557
|
+
}): void;
|
|
534
558
|
} & {
|
|
535
559
|
moveElementUp(id: any): void;
|
|
536
560
|
moveElementDown(id: any): void;
|
|
@@ -882,6 +906,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
882
906
|
canMoveElementsBottom(ids: string[]): any;
|
|
883
907
|
moveElementsBottom(ids: string[]): void;
|
|
884
908
|
setElementZIndex(id: any, zIndex: any): void;
|
|
909
|
+
setSize({ width, height }: {
|
|
910
|
+
width: any;
|
|
911
|
+
height: any;
|
|
912
|
+
}, { useMagic }: {
|
|
913
|
+
useMagic: any;
|
|
914
|
+
}): void;
|
|
885
915
|
} & {
|
|
886
916
|
moveElementUp(id: any): void;
|
|
887
917
|
moveElementDown(id: any): void;
|
|
@@ -920,6 +950,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
920
950
|
canMoveElementsBottom(ids: string[]): any;
|
|
921
951
|
moveElementsBottom(ids: string[]): void;
|
|
922
952
|
setElementZIndex(id: any, zIndex: any): void;
|
|
953
|
+
setSize({ width, height }: {
|
|
954
|
+
width: any;
|
|
955
|
+
height: any;
|
|
956
|
+
}, { useMagic }: {
|
|
957
|
+
useMagic: any;
|
|
958
|
+
}): void;
|
|
923
959
|
} & {
|
|
924
960
|
moveElementUp(id: any): void;
|
|
925
961
|
moveElementDown(id: any): void;
|
|
@@ -934,7 +970,7 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
934
970
|
setScale(scale: number): void;
|
|
935
971
|
_setScaleToFit(scale: number): void;
|
|
936
972
|
setElementsPixelRatio(ratio: number): void;
|
|
937
|
-
setSize(width: number, height: number,
|
|
973
|
+
setSize(width: number, height: number, useMagic?: boolean | undefined): void;
|
|
938
974
|
setPageZIndex(id: any, zIndex: any): void;
|
|
939
975
|
deletePages(ids: string[]): void;
|
|
940
976
|
deleteElements(ids: string[]): void;
|
|
@@ -1004,6 +1040,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
1004
1040
|
canMoveElementsBottom(ids: string[]): any;
|
|
1005
1041
|
moveElementsBottom(ids: string[]): void;
|
|
1006
1042
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1043
|
+
setSize({ width, height }: {
|
|
1044
|
+
width: any;
|
|
1045
|
+
height: any;
|
|
1046
|
+
}, { useMagic }: {
|
|
1047
|
+
useMagic: any;
|
|
1048
|
+
}): void;
|
|
1007
1049
|
} & {
|
|
1008
1050
|
moveElementUp(id: any): void;
|
|
1009
1051
|
moveElementDown(id: any): void;
|
|
@@ -1388,6 +1430,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
1388
1430
|
canMoveElementsBottom(ids: string[]): any;
|
|
1389
1431
|
moveElementsBottom(ids: string[]): void;
|
|
1390
1432
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1433
|
+
setSize({ width, height }: {
|
|
1434
|
+
width: any;
|
|
1435
|
+
height: any;
|
|
1436
|
+
}, { useMagic }: {
|
|
1437
|
+
useMagic: any;
|
|
1438
|
+
}): void;
|
|
1391
1439
|
} & {
|
|
1392
1440
|
moveElementUp(id: any): void;
|
|
1393
1441
|
moveElementDown(id: any): void;
|
|
@@ -1426,6 +1474,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
1426
1474
|
canMoveElementsBottom(ids: string[]): any;
|
|
1427
1475
|
moveElementsBottom(ids: string[]): void;
|
|
1428
1476
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1477
|
+
setSize({ width, height }: {
|
|
1478
|
+
width: any;
|
|
1479
|
+
height: any;
|
|
1480
|
+
}, { useMagic }: {
|
|
1481
|
+
useMagic: any;
|
|
1482
|
+
}): void;
|
|
1429
1483
|
} & {
|
|
1430
1484
|
moveElementUp(id: any): void;
|
|
1431
1485
|
moveElementDown(id: any): void;
|
|
@@ -1777,6 +1831,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
1777
1831
|
canMoveElementsBottom(ids: string[]): any;
|
|
1778
1832
|
moveElementsBottom(ids: string[]): void;
|
|
1779
1833
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1834
|
+
setSize({ width, height }: {
|
|
1835
|
+
width: any;
|
|
1836
|
+
height: any;
|
|
1837
|
+
}, { useMagic }: {
|
|
1838
|
+
useMagic: any;
|
|
1839
|
+
}): void;
|
|
1780
1840
|
} & {
|
|
1781
1841
|
moveElementUp(id: any): void;
|
|
1782
1842
|
moveElementDown(id: any): void;
|
|
@@ -1815,6 +1875,12 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
1815
1875
|
canMoveElementsBottom(ids: string[]): any;
|
|
1816
1876
|
moveElementsBottom(ids: string[]): void;
|
|
1817
1877
|
setElementZIndex(id: any, zIndex: any): void;
|
|
1878
|
+
setSize({ width, height }: {
|
|
1879
|
+
width: any;
|
|
1880
|
+
height: any;
|
|
1881
|
+
}, { useMagic }: {
|
|
1882
|
+
useMagic: any;
|
|
1883
|
+
}): void;
|
|
1818
1884
|
} & {
|
|
1819
1885
|
moveElementUp(id: any): void;
|
|
1820
1886
|
moveElementDown(id: any): void;
|
|
@@ -1829,7 +1895,7 @@ export declare function createPolotnoApp({ container, key, showCredit }: {
|
|
|
1829
1895
|
setScale(scale: number): void;
|
|
1830
1896
|
_setScaleToFit(scale: number): void;
|
|
1831
1897
|
setElementsPixelRatio(ratio: number): void;
|
|
1832
|
-
setSize(width: number, height: number,
|
|
1898
|
+
setSize(width: number, height: number, useMagic?: boolean | undefined): void;
|
|
1833
1899
|
setPageZIndex(id: any, zIndex: any): void;
|
|
1834
1900
|
deletePages(ids: string[]): void;
|
|
1835
1901
|
deleteElements(ids: string[]): void;
|