polotno 2.9.7 → 2.9.8

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 (56) hide show
  1. package/canvas/apply-filters.js +1 -1
  2. package/canvas/element.js +1 -1
  3. package/canvas/hotkeys.js +1 -1
  4. package/canvas/html-element/quill-paste-smart.d.ts +1 -9
  5. package/canvas/html-element/quill-paste-smart.js +1 -1
  6. package/canvas/html-element.d.ts +0 -1
  7. package/canvas/html-element.js +2 -2
  8. package/canvas/line-element.js +1 -1
  9. package/canvas/page.js +1 -1
  10. package/canvas/rules.js +2 -2
  11. package/canvas/text-element/max-font-size.js +1 -1
  12. package/canvas/text-element.js +1 -1
  13. package/canvas/use-fadein.js +1 -1
  14. package/canvas/use-transformer-snap.js +1 -1
  15. package/model/group-model.d.ts +9 -1
  16. package/model/group-model.js +1 -1
  17. package/model/page-model.d.ts +1 -53
  18. package/model/store.d.ts +1 -512
  19. package/model/store.js +1 -1
  20. package/package.json +3 -4
  21. package/pages-timeline/pages-timeline.js +1 -1
  22. package/polotno-app.d.ts +1 -1019
  23. package/polotno-app.js +2 -2
  24. package/polotno.bundle.js +60 -60
  25. package/side-panel/animations-panel.js +1 -1
  26. package/side-panel/effects-panel.js +1 -1
  27. package/side-panel/elements-panel.js +2 -2
  28. package/side-panel/side-panel.d.ts +1 -1019
  29. package/side-panel/upload-panel.js +1 -1
  30. package/toolbar/color-picker.js +2 -2
  31. package/toolbar/duplicate-button.js +1 -1
  32. package/toolbar/html-toolbar.js +1 -1
  33. package/toolbar/image-remove-background-button.js +1 -1
  34. package/toolbar/toolbar.js +2 -2
  35. package/utils/api.d.ts +2 -2
  36. package/utils/api.js +1 -1
  37. package/utils/crop.js +1 -1
  38. package/utils/download.js +1 -1
  39. package/utils/figure-to-svg.js +1 -1
  40. package/utils/file.js +1 -1
  41. package/utils/flags.d.ts +1 -1
  42. package/utils/fonts.js +1 -1
  43. package/utils/gif-lib.js +1 -1
  44. package/utils/goober.js +1 -1
  45. package/utils/html.js +1 -1
  46. package/utils/html2canvas.js +1 -1
  47. package/utils/image.js +1 -1
  48. package/utils/loader.js +1 -1
  49. package/utils/math.js +1 -1
  50. package/utils/pdf.js +1 -1
  51. package/utils/svg.js +1 -1
  52. package/utils/text.js +1 -1
  53. package/utils/to-svg.js +1 -1
  54. package/utils/validate-key.js +1 -1
  55. package/utils/video.js +1 -1
  56. package/utils/wait.js +1 -1
@@ -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.applyFilter=void 0;const konva_1=__importDefault(require("konva"));function applyFilter(e,t){var l;const r={filters:[]};t.brightnessEnabled&&(r.filters.push(konva_1.default.Filters.Brighten),r.brightness=t.brightness),t.blurEnabled&&(r.filters.push(konva_1.default.Filters.Blur),r.blurRadius=t.blurRadius),t.sepiaEnabled&&r.filters.push(konva_1.default.Filters.Sepia),t.grayscaleEnabled&&r.filters.push(konva_1.default.Filters.Grayscale),e.setAttrs(r),r.filters.length?e.cache({pixelRatio:t.store._elementsPixelRatio}):e.clearCache(),null===(l=e.getLayer())||void 0===l||l.batchDraw()}exports.applyFilter=applyFilter;
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.applyFilter=applyFilter;const konva_1=__importDefault(require("konva"));function applyFilter(e,t){var l;const r={filters:[]};t.brightnessEnabled&&(r.filters.push(konva_1.default.Filters.Brighten),r.brightness=t.brightness),t.blurEnabled&&(r.filters.push(konva_1.default.Filters.Blur),r.blurRadius=t.blurRadius),t.sepiaEnabled&&r.filters.push(konva_1.default.Filters.Sepia),t.grayscaleEnabled&&r.filters.push(konva_1.default.Filters.Grayscale),e.setAttrs(r),r.filters.length?e.cache({pixelRatio:t.store._elementsPixelRatio}):e.clearCache(),null===(l=e.getLayer())||void 0===l||l.batchDraw()}
package/canvas/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.registerShapeComponent=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),text_element_1=require("./text-element"),image_element_1=require("./image-element"),html_element_1=require("./html-element"),line_element_1=require("./line-element"),video_element_1=require("./video-element"),figure_element_1=require("./figure-element"),react_konva_1=require("react-konva"),flags_1=require("../utils/flags"),GroupElement=(0,mobx_react_lite_1.observer)((e=>{const{element:t,store:n}=e,{children:r}=t,l=t.selectable||"admin"===n.role;return react_1.default.createElement(react_konva_1.Group,{opacity:t.opacity,listening:l,hideInExport:!t.showInExport},r.map((t=>react_1.default.createElement(Element,Object.assign({},e,{key:t.id,store:n,element:t})))))})),SHAPES_TYPES={text:text_element_1.TextElement,image:image_element_1.ImageElement,svg:image_element_1.ImageElement,line:line_element_1.LineElement,video:video_element_1.VideoElement,figure:figure_element_1.FigureElement,group:GroupElement};function registerShapeComponent(e,t){SHAPES_TYPES[e]=t}exports.registerShapeComponent=registerShapeComponent;const Element=(0,mobx_react_lite_1.observer)((e=>{let t=SHAPES_TYPES[e.element.type];return"text"===e.element.type&&flags_1.flags.htmlRenderEnabled&&(t=html_element_1.HTMLElement),e.element.visible?t?react_1.default.createElement(t,Object.assign({},e)):(console.error("Can not find component for "+e.element.type),null):null}));exports.default=Element;
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerShapeComponent=registerShapeComponent;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),text_element_1=require("./text-element"),image_element_1=require("./image-element"),html_element_1=require("./html-element"),line_element_1=require("./line-element"),video_element_1=require("./video-element"),figure_element_1=require("./figure-element"),react_konva_1=require("react-konva"),flags_1=require("../utils/flags"),GroupElement=(0,mobx_react_lite_1.observer)((e=>{const{element:t,store:n}=e,{children:l}=t,r=t.selectable||"admin"===n.role;return react_1.default.createElement(react_konva_1.Group,{opacity:t.opacity,listening:r,hideInExport:!t.showInExport},l.map((t=>react_1.default.createElement(Element,Object.assign({},e,{key:t.id,store:n,element:t})))))})),SHAPES_TYPES={text:text_element_1.TextElement,image:image_element_1.ImageElement,svg:image_element_1.ImageElement,line:line_element_1.LineElement,video:video_element_1.VideoElement,figure:figure_element_1.FigureElement,group:GroupElement};function registerShapeComponent(e,t){SHAPES_TYPES[e]=t}const Element=(0,mobx_react_lite_1.observer)((e=>{let t=SHAPES_TYPES[e.element.type];return"text"===e.element.type&&flags_1.flags.htmlRenderEnabled&&(t=html_element_1.HTMLElement),e.element.visible?t?react_1.default.createElement(t,Object.assign({},e)):(console.error("Can not find component for "+e.element.type),null):null}));exports.default=Element;
package/canvas/hotkeys.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.handleHotkey=void 0;const group_model_1=require("../model/group-model");let _LOCAL_CLIPBOARD=[],copyPage="";const KEY="polotno_clipboard",setClipBoard=e=>{_LOCAL_CLIPBOARD=JSON.parse(JSON.stringify(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 _LOCAL_CLIPBOARD};function handleHotkey(e,t){var o,l,d,a,r,i,n,c;if("INPUT"===(null===(o=document.activeElement)||void 0===o?void 0:o.tagName)||"TEXTAREA"===(null===(l=document.activeElement)||void 0===l?void 0:l.tagName)||"true"===(null===(d=document.activeElement)||void 0===d?void 0:d.contentEditable))return;const s=t.selectedElements.filter((e=>e.removable)),v=s.map((e=>e.id));46!==e.keyCode&&8!==e.keyCode||t.deleteElements(v);const p=e.ctrlKey||e.metaKey,u=e.shiftKey;if(p&&!u&&"KeyZ"===e.code&&(e.preventDefault(),t.history.undo()),p&&u&&"KeyZ"===e.code&&(e.preventDefault(),t.history.redo()),p&&"KeyA"===e.code){e.preventDefault();const o=null===(a=t.activePage)||void 0===a?void 0:a.children.filter((e=>e.selectable)),l=(null==o?void 0:o.map((e=>e.id)))||[];t.selectElements(l)}if(p&&"KeyC"===e.code&&(e.preventDefault(),copyPage=null===(r=t.activePage)||void 0===r?void 0:r.id,setClipBoard(t.selectedElements.map((e=>e.toJSON())))),p&&"KeyX"===e.code&&(e.preventDefault(),copyPage=null===(i=t.activePage)||void 0===i?void 0:i.id,setClipBoard(t.selectedElements.map((e=>e.toJSON()))),t.deleteElements(s)),p&&"KeyV"===e.code){e.preventDefault();let o=0;copyPage===(null===(n=t.activePage)||void 0===n?void 0:n.id)&&(o=t.width/20),copyPage=null===(c=t.activePage)||void 0===c?void 0:c.id,t.history.transaction((()=>{const e=[],l=getClipBoard();(0,group_model_1.forEveryChild)({children:l},(e=>{delete e.id,"group"!==e.type&&(e.x+=o,e.y+=o)})),l.forEach((o=>{var l;const d=null===(l=t.activePage)||void 0===l?void 0:l.addElement(o);d&&e.push(d.id)})),setClipBoard(l),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;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.handleHotkey=handleHotkey;const group_model_1=require("../model/group-model");let _LOCAL_CLIPBOARD=[],copyPage="";const KEY="polotno_clipboard",setClipBoard=e=>{_LOCAL_CLIPBOARD=JSON.parse(JSON.stringify(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 _LOCAL_CLIPBOARD};function handleHotkey(e,t){var o,l,d,a,r,i,n,c;if("INPUT"===(null===(o=document.activeElement)||void 0===o?void 0:o.tagName)||"TEXTAREA"===(null===(l=document.activeElement)||void 0===l?void 0:l.tagName)||"true"===(null===(d=document.activeElement)||void 0===d?void 0:d.contentEditable))return;const s=t.selectedElements.filter((e=>e.removable)),v=s.map((e=>e.id));46!==e.keyCode&&8!==e.keyCode||t.deleteElements(v);const p=e.ctrlKey||e.metaKey,u=e.shiftKey;if(p&&!u&&"KeyZ"===e.code&&(e.preventDefault(),t.history.undo()),p&&u&&"KeyZ"===e.code&&(e.preventDefault(),t.history.redo()),p&&"KeyA"===e.code){e.preventDefault();const o=null===(a=t.activePage)||void 0===a?void 0:a.children.filter((e=>e.selectable)),l=(null==o?void 0:o.map((e=>e.id)))||[];t.selectElements(l)}if(p&&"KeyC"===e.code&&(e.preventDefault(),copyPage=null===(r=t.activePage)||void 0===r?void 0:r.id,setClipBoard(t.selectedElements.map((e=>e.toJSON())))),p&&"KeyX"===e.code&&(e.preventDefault(),copyPage=null===(i=t.activePage)||void 0===i?void 0:i.id,setClipBoard(t.selectedElements.map((e=>e.toJSON()))),t.deleteElements(s)),p&&"KeyV"===e.code){e.preventDefault();let o=0;copyPage===(null===(n=t.activePage)||void 0===n?void 0:n.id)&&(o=t.width/20),copyPage=null===(c=t.activePage)||void 0===c?void 0:c.id,t.history.transaction((()=>{const e=[],l=getClipBoard();(0,group_model_1.forEveryChild)({children:l},(e=>{delete e.id,"group"!==e.type&&(e.x+=o,e.y+=o)})),l.forEach((o=>{var l;const d=null===(l=t.activePage)||void 0===l?void 0:l.addElement(o);d&&e.push(d.id)})),setClipBoard(l),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})})))}
@@ -1,9 +1 @@
1
- declare const Clipboard: any;
2
- declare class QuillPasteSmart extends Clipboard {
3
- constructor(quill: any, options: any);
4
- onCapturePaste(e: any): void;
5
- getDOMPurifyOptions(): {};
6
- substitute(html: any, DOMPurifyOptions: any): HTMLBodyElement;
7
- isURL(str: any): boolean;
8
- }
9
- export default QuillPasteSmart;
1
+ export declare function registerQuillPasteSmart(quill: any): void;
@@ -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});const quill_1=__importDefault(require("quill")),dompurify_1=__importDefault(require("dompurify")),Clipboard=quill_1.default.import("modules/clipboard"),Delta=quill_1.default.import("delta");class QuillPasteSmart extends Clipboard{constructor(e,t){super(e,t),this.allowed=t.allowed,this.keepSelection=t.keepSelection,this.substituteBlockElements=t.substituteBlockElements,this.magicPasteLinks=t.magicPasteLinks,this.hooks=t.hooks}onCapturePaste(e){var t,i,o,a,s,l,n,u,d,r,h;e.preventDefault();const f=this.quill.getSelection();let p,c,L;e.clipboardData&&e.clipboardData.getData||!window.clipboardData||!window.clipboardData.getData?(p=e.clipboardData.getData("text/plain"),c=e.clipboardData.getData("text/html"),L=null===(i=null===(t=e.clipboardData)||void 0===t?void 0:t.items)||void 0===i?void 0:i[0]):p=window.clipboardData.getData("Text");let A=(new Delta).retain(f.index).delete(f.length);const S=this.getDOMPurifyOptions();let _=!1,T=p;if(!c&&S.ALLOWED_TAGS.includes("a")&&this.isURL(p)&&f.length>0&&this.magicPasteLinks)T=this.quill.getText(f.index,f.length),A=A.insert(T,{link:p});else if(!c&&S.ALLOWED_TAGS.includes("img")&&L&&"file"===L.kind&&L.type.match(/^image\//i)){const e=L.getAsFile(),t=new FileReader;t.onload=e=>{this.quill.insertEmbed(f.index,"image",e.target.result),this.keepSelection||this.quill.setSelection(f.index+1)},t.readAsDataURL(e)}else c||(_=!0,c=T),"function"==typeof(null===(o=this.hooks)||void 0===o?void 0:o.beforeSanitizeElements)&&dompurify_1.default.addHook("beforeSanitizeElements",this.hooks.beforeSanitizeElements),"function"==typeof(null===(a=this.hooks)||void 0===a?void 0:a.uponSanitizeElement)&&dompurify_1.default.addHook("uponSanitizeElement",this.hooks.uponSanitizeElement),"function"==typeof(null===(s=this.hooks)||void 0===s?void 0:s.afterSanitizeElements)&&dompurify_1.default.addHook("afterSanitizeElements",this.hooks.afterSanitizeElements),"function"==typeof(null===(l=this.hooks)||void 0===l?void 0:l.beforeSanitizeAttributes)&&dompurify_1.default.addHook("beforeSanitizeAttributes",this.hooks.beforeSanitizeAttributes),"function"==typeof(null===(n=this.hooks)||void 0===n?void 0:n.uponSanitizeAttribute)&&dompurify_1.default.addHook("uponSanitizeAttribute",this.hooks.uponSanitizeAttribute),"function"==typeof(null===(u=this.hooks)||void 0===u?void 0:u.afterSanitizeAttributes)&&dompurify_1.default.addHook("afterSanitizeAttributes",this.hooks.afterSanitizeAttributes),"function"==typeof(null===(d=this.hooks)||void 0===d?void 0:d.beforeSanitizeShadowDOM)&&dompurify_1.default.addHook("beforeSanitizeShadowDOM",this.hooks.beforeSanitizeShadowDOM),"function"==typeof(null===(r=this.hooks)||void 0===r?void 0:r.uponSanitizeShadowNode)&&dompurify_1.default.addHook("uponSanitizeShadowNode",this.hooks.uponSanitizeShadowNode),"function"==typeof(null===(h=this.hooks)||void 0===h?void 0:h.afterSanitizeShadowDOM)&&dompurify_1.default.addHook("afterSanitizeShadowDOM",this.hooks.afterSanitizeShadowDOM),_?(T=dompurify_1.default.sanitize(c,S),A=A.insert(T)):(!1!==this.substituteBlockElements?(c=this.substitute(c,S),T=c.innerHTML):T=dompurify_1.default.sanitize(c,S),A=A.concat(this.convert({html:T})));this.quill.updateContents(A,quill_1.default.sources.USER),_||(A=this.convert({html:T})),this.keepSelection?this.quill.setSelection(f.index,A.length(),quill_1.default.sources.SILENT):this.quill.setSelection(f.index+A.length(),quill_1.default.sources.SILENT),this.quill.scrollSelectionIntoView(),dompurify_1.default.removeAllHooks()}getDOMPurifyOptions(){var e,t,i;let o={};if((null===(e=this.allowed)||void 0===e?void 0:e.tags)&&(o.ALLOWED_TAGS=this.allowed.tags),(null===(t=this.allowed)||void 0===t?void 0:t.attributes)&&(o.ALLOWED_ATTR=this.allowed.attributes),void 0===o.ALLOWED_TAGS||void 0===o.ALLOWED_ATTR){let e=!1;void 0===o.ALLOWED_TAGS&&(e=!0,o.ALLOWED_TAGS=["p","br","span"]);let t=!1;void 0===o.ALLOWED_ATTR&&(t=!0,o.ALLOWED_ATTR=["class"]);const a=this.quill.getModule("toolbar");null===(i=null==a?void 0:a.controls)||void 0===i||i.forEach((i=>{switch(i[0]){case"bold":e&&(o.ALLOWED_TAGS.push("b"),o.ALLOWED_TAGS.push("strong"));break;case"italic":e&&(o.ALLOWED_TAGS.push("i"),o.ALLOWED_TAGS.push("em"));break;case"underline":e&&o.ALLOWED_TAGS.push("u");break;case"strike":e&&o.ALLOWED_TAGS.push("s");break;case"color":case"background":t&&o.ALLOWED_ATTR.push("style");break;case"script":e&&("super"===i[1].value?o.ALLOWED_TAGS.push("sup"):"sub"===i[1].value&&o.ALLOWED_TAGS.push("sub"));break;case"header":if(e){const e=e=>{"1"===e?o.ALLOWED_TAGS.push("h1"):"2"===e?o.ALLOWED_TAGS.push("h2"):"3"===e?o.ALLOWED_TAGS.push("h3"):"4"===e?o.ALLOWED_TAGS.push("h4"):"5"===e?o.ALLOWED_TAGS.push("h5"):"6"===e&&o.ALLOWED_TAGS.push("h6")};i[1].value?e(i[1].value):i[1].options&&i[1].options.length&&[].forEach.call(i[1].options,(t=>{t.value&&e(t.value)}))}break;case"code-block":e&&o.ALLOWED_TAGS.push("pre"),t&&o.ALLOWED_ATTR.push("spellcheck");break;case"list":e&&("ordered"===i[1].value?o.ALLOWED_TAGS.push("ol"):"bullet"===i[1].value&&o.ALLOWED_TAGS.push("ul"),o.ALLOWED_TAGS.push("li"));break;case"link":e&&o.ALLOWED_TAGS.push("a"),t&&(o.ALLOWED_ATTR.push("href"),o.ALLOWED_ATTR.push("target"),o.ALLOWED_ATTR.push("rel"));break;case"image":e&&o.ALLOWED_TAGS.push("img"),t&&(o.ALLOWED_ATTR.push("src"),o.ALLOWED_ATTR.push("title"),o.ALLOWED_ATTR.push("alt"));break;case"video":e&&o.ALLOWED_TAGS.push("iframe"),t&&(o.ALLOWED_ATTR.push("frameborder"),o.ALLOWED_ATTR.push("allowfullscreen"),o.ALLOWED_ATTR.push("src"));break;case"blockquote":e&&o.ALLOWED_TAGS.push(i[0])}}))}return o}substitute(e,t){let i;const o=["h1","h2","h3","h4","h5","h6"],a=["p","div","section","article","fieldset","address","aside","blockquote","canvas","dl","figcaption","figure","footer","form","header","main","nav","noscript","ol","pre","table","tfoot","ul","video"],s=["li","dt","dd","hr"];dompurify_1.default.addHook("uponSanitizeElement",((e,l,n)=>{let u=0;for(;!i&&u<3;)t.ALLOWED_TAGS.includes(a[u])&&(i=a[u]),++u;if(i&&e.tagName&&!t.ALLOWED_TAGS.includes(e.tagName.toLowerCase())){const t=e.tagName.toLowerCase();o.includes(t)?e.innerHTML=`<${i}><b>${e.innerHTML}</b></${i}>`:a.includes(t)?e.innerHTML=`<${i}>${e.innerHTML}</${i}>`:s.includes(t)&&(e.innerHTML=`${e.innerHTML}<br>`)}})),e=dompurify_1.default.sanitize(e,Object.assign(Object.assign({},t),{RETURN_DOM:!0,WHOLE_DOCUMENT:!1})),dompurify_1.default.removeAllHooks();const l=e=>{const t=document.createElement(e.tagName.toLowerCase()),i=e.attributes;return i.length&&Array.from(i).forEach((e=>t.setAttribute(e.nodeName,e.value))),t};let n=0;const u=(e,t)=>{for(t(e,n),e=n<=1?e.firstChild:void 0;e;)++n,u(e,t),e=e.nextSibling;--n};let d;const r=document.createElement("body");return u(e,((e,t)=>{if(1===t)if(e.tagName&&a.includes(e.tagName.toLowerCase())){d&&(d=void 0);const t=l(e);t.innerHTML=e.innerHTML,r.appendChild(t)}else if(void 0===d&&(d=document.createElement(i),r.appendChild(d)),e.tagName){const t=l(e);e.innerHTML&&(t.innerHTML=e.innerHTML),d.appendChild(t)}else{const t=document.createTextNode(e.textContent);d.appendChild(t)}})),r}isURL(e){return!!/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/isu.test(e)}}quill_1.default.register("modules/clipboard",QuillPasteSmart,!0),exports.default=QuillPasteSmart;
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerQuillPasteSmart=registerQuillPasteSmart;const quill_1=__importDefault(require("quill")),dompurify_1=__importDefault(require("dompurify")),Clipboard=quill_1.default.import("modules/clipboard"),Delta=quill_1.default.import("delta");class QuillPasteSmart extends Clipboard{constructor(e,t){super(e,t),this.allowed=t.allowed,this.keepSelection=t.keepSelection,this.substituteBlockElements=t.substituteBlockElements,this.magicPasteLinks=t.magicPasteLinks,this.hooks=t.hooks}onCapturePaste(e){var t,i,o,a,s,l,n,u,d,r,h;e.preventDefault();const f=this.quill.getSelection();let p,c,L;e.clipboardData&&e.clipboardData.getData||!window.clipboardData||!window.clipboardData.getData?(p=e.clipboardData.getData("text/plain"),c=e.clipboardData.getData("text/html"),L=null===(i=null===(t=e.clipboardData)||void 0===t?void 0:t.items)||void 0===i?void 0:i[0]):p=window.clipboardData.getData("Text");let A=(new Delta).retain(f.index).delete(f.length);const S=this.getDOMPurifyOptions();let _=!1,m=p;if(!c&&S.ALLOWED_TAGS.includes("a")&&this.isURL(p)&&f.length>0&&this.magicPasteLinks)m=this.quill.getText(f.index,f.length),A=A.insert(m,{link:p});else if(!c&&S.ALLOWED_TAGS.includes("img")&&L&&"file"===L.kind&&L.type.match(/^image\//i)){const e=L.getAsFile(),t=new FileReader;t.onload=e=>{this.quill.insertEmbed(f.index,"image",e.target.result),this.keepSelection||this.quill.setSelection(f.index+1)},t.readAsDataURL(e)}else c||(_=!0,c=m),"function"==typeof(null===(o=this.hooks)||void 0===o?void 0:o.beforeSanitizeElements)&&dompurify_1.default.addHook("beforeSanitizeElements",this.hooks.beforeSanitizeElements),"function"==typeof(null===(a=this.hooks)||void 0===a?void 0:a.uponSanitizeElement)&&dompurify_1.default.addHook("uponSanitizeElement",this.hooks.uponSanitizeElement),"function"==typeof(null===(s=this.hooks)||void 0===s?void 0:s.afterSanitizeElements)&&dompurify_1.default.addHook("afterSanitizeElements",this.hooks.afterSanitizeElements),"function"==typeof(null===(l=this.hooks)||void 0===l?void 0:l.beforeSanitizeAttributes)&&dompurify_1.default.addHook("beforeSanitizeAttributes",this.hooks.beforeSanitizeAttributes),"function"==typeof(null===(n=this.hooks)||void 0===n?void 0:n.uponSanitizeAttribute)&&dompurify_1.default.addHook("uponSanitizeAttribute",this.hooks.uponSanitizeAttribute),"function"==typeof(null===(u=this.hooks)||void 0===u?void 0:u.afterSanitizeAttributes)&&dompurify_1.default.addHook("afterSanitizeAttributes",this.hooks.afterSanitizeAttributes),"function"==typeof(null===(d=this.hooks)||void 0===d?void 0:d.beforeSanitizeShadowDOM)&&dompurify_1.default.addHook("beforeSanitizeShadowDOM",this.hooks.beforeSanitizeShadowDOM),"function"==typeof(null===(r=this.hooks)||void 0===r?void 0:r.uponSanitizeShadowNode)&&dompurify_1.default.addHook("uponSanitizeShadowNode",this.hooks.uponSanitizeShadowNode),"function"==typeof(null===(h=this.hooks)||void 0===h?void 0:h.afterSanitizeShadowDOM)&&dompurify_1.default.addHook("afterSanitizeShadowDOM",this.hooks.afterSanitizeShadowDOM),_?(m=dompurify_1.default.sanitize(c,S),A=A.insert(m)):(!1!==this.substituteBlockElements?(c=this.substitute(c,S),m=c.innerHTML):m=dompurify_1.default.sanitize(c,S),A=A.concat(this.convert({html:m})));this.quill.updateContents(A,quill_1.default.sources.USER),_||(A=this.convert({html:m})),this.keepSelection?this.quill.setSelection(f.index,A.length(),quill_1.default.sources.SILENT):this.quill.setSelection(f.index+A.length(),quill_1.default.sources.SILENT),this.quill.scrollSelectionIntoView(),dompurify_1.default.removeAllHooks()}getDOMPurifyOptions(){var e,t,i;let o={};if((null===(e=this.allowed)||void 0===e?void 0:e.tags)&&(o.ALLOWED_TAGS=this.allowed.tags),(null===(t=this.allowed)||void 0===t?void 0:t.attributes)&&(o.ALLOWED_ATTR=this.allowed.attributes),void 0===o.ALLOWED_TAGS||void 0===o.ALLOWED_ATTR){let e=!1;void 0===o.ALLOWED_TAGS&&(e=!0,o.ALLOWED_TAGS=["p","br","span"]);let t=!1;void 0===o.ALLOWED_ATTR&&(t=!0,o.ALLOWED_ATTR=["class"]);const a=this.quill.getModule("toolbar");null===(i=null==a?void 0:a.controls)||void 0===i||i.forEach((i=>{switch(i[0]){case"bold":e&&(o.ALLOWED_TAGS.push("b"),o.ALLOWED_TAGS.push("strong"));break;case"italic":e&&(o.ALLOWED_TAGS.push("i"),o.ALLOWED_TAGS.push("em"));break;case"underline":e&&o.ALLOWED_TAGS.push("u");break;case"strike":e&&o.ALLOWED_TAGS.push("s");break;case"color":case"background":t&&o.ALLOWED_ATTR.push("style");break;case"script":e&&("super"===i[1].value?o.ALLOWED_TAGS.push("sup"):"sub"===i[1].value&&o.ALLOWED_TAGS.push("sub"));break;case"header":if(e){const e=e=>{"1"===e?o.ALLOWED_TAGS.push("h1"):"2"===e?o.ALLOWED_TAGS.push("h2"):"3"===e?o.ALLOWED_TAGS.push("h3"):"4"===e?o.ALLOWED_TAGS.push("h4"):"5"===e?o.ALLOWED_TAGS.push("h5"):"6"===e&&o.ALLOWED_TAGS.push("h6")};i[1].value?e(i[1].value):i[1].options&&i[1].options.length&&[].forEach.call(i[1].options,(t=>{t.value&&e(t.value)}))}break;case"code-block":e&&o.ALLOWED_TAGS.push("pre"),t&&o.ALLOWED_ATTR.push("spellcheck");break;case"list":e&&("ordered"===i[1].value?o.ALLOWED_TAGS.push("ol"):"bullet"===i[1].value&&o.ALLOWED_TAGS.push("ul"),o.ALLOWED_TAGS.push("li"));break;case"link":e&&o.ALLOWED_TAGS.push("a"),t&&(o.ALLOWED_ATTR.push("href"),o.ALLOWED_ATTR.push("target"),o.ALLOWED_ATTR.push("rel"));break;case"image":e&&o.ALLOWED_TAGS.push("img"),t&&(o.ALLOWED_ATTR.push("src"),o.ALLOWED_ATTR.push("title"),o.ALLOWED_ATTR.push("alt"));break;case"video":e&&o.ALLOWED_TAGS.push("iframe"),t&&(o.ALLOWED_ATTR.push("frameborder"),o.ALLOWED_ATTR.push("allowfullscreen"),o.ALLOWED_ATTR.push("src"));break;case"blockquote":e&&o.ALLOWED_TAGS.push(i[0])}}))}return o}substitute(e,t){let i;const o=["h1","h2","h3","h4","h5","h6"],a=["p","div","section","article","fieldset","address","aside","blockquote","canvas","dl","figcaption","figure","footer","form","header","main","nav","noscript","ol","pre","table","tfoot","ul","video"],s=["li","dt","dd","hr"];dompurify_1.default.addHook("uponSanitizeElement",((e,l,n)=>{let u=0;for(;!i&&u<3;)t.ALLOWED_TAGS.includes(a[u])&&(i=a[u]),++u;if(i&&e.tagName&&!t.ALLOWED_TAGS.includes(e.tagName.toLowerCase())){const t=e.tagName.toLowerCase();o.includes(t)?e.innerHTML=`<${i}><b>${e.innerHTML}</b></${i}>`:a.includes(t)?e.innerHTML=`<${i}>${e.innerHTML}</${i}>`:s.includes(t)&&(e.innerHTML=`${e.innerHTML}<br>`)}})),e=dompurify_1.default.sanitize(e,Object.assign(Object.assign({},t),{RETURN_DOM:!0,WHOLE_DOCUMENT:!1})),dompurify_1.default.removeAllHooks();const l=e=>{const t=document.createElement(e.tagName.toLowerCase()),i=e.attributes;return i.length&&Array.from(i).forEach((e=>t.setAttribute(e.nodeName,e.value))),t};let n=0;const u=(e,t)=>{for(t(e,n),e=n<=1?e.firstChild:void 0;e;)++n,u(e,t),e=e.nextSibling;--n};let d;const r=document.createElement("body");return u(e,((e,t)=>{if(1===t)if(e.tagName&&a.includes(e.tagName.toLowerCase())){d&&(d=void 0);const t=l(e);t.innerHTML=e.innerHTML,r.appendChild(t)}else if(void 0===d&&(d=document.createElement(i),r.appendChild(d)),e.tagName){const t=l(e);e.innerHTML&&(t.innerHTML=e.innerHTML),d.appendChild(t)}else{const t=document.createTextNode(e.textContent);d.appendChild(t)}})),r}isURL(e){return!!/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/isu.test(e)}}function registerQuillPasteSmart(e){e.register("modules/clipboard",QuillPasteSmart,!0)}
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import 'quill-paste-smart';
3
2
  import { StoreType } from '../model/store';
4
3
  import { TextElementType } from '../model/text-model';
5
4
  export declare const quillRef: {
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var a=Object.getOwnPropertyDescriptor(t,i);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,a)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),__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 i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&__createBinding(t,e,i);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.HTMLElement=exports.createQuill=exports.quillRef=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),quill_1=__importDefault(require("quill/dist/quill"));require("quill-paste-smart");const konva_1=__importDefault(require("konva")),mobx=__importStar(require("mobx")),flags_1=require("../utils/flags"),apply_filters_1=require("./apply-filters"),text_element_1=require("./text-element"),use_color_1=require("./use-color"),html2canvas_1=require("../utils/html2canvas"),use_fadein_1=require("./use-fadein"),highlighter_1=require("./highlighter"),react_konva_utils_1=require("react-konva-utils"),styled_1=__importDefault(require("../utils/styled")),loader_1=require("../utils/loader"),text_1=require("../utils/text"),fonts=__importStar(require("../utils/fonts")),screen_1=require("../utils/screen"),max_font_size_1=require("./text-element/max-font-size");exports.quillRef=mobx.observable({enabled:!1,currentFormat:{},editor:mobx.observable.object({instance:null},{},{deep:!1})});const RichTextContainer=(0,styled_1.default)("div",react_1.default.forwardRef)`
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),__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 i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&__createBinding(t,e,i);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.HTMLElement=exports.createQuill=exports.quillRef=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),quill_1=__importDefault(require("quill")),konva_1=__importDefault(require("konva")),mobx=__importStar(require("mobx")),flags_1=require("../utils/flags"),apply_filters_1=require("./apply-filters"),text_element_1=require("./text-element"),use_color_1=require("./use-color"),html2canvas_1=require("../utils/html2canvas"),use_fadein_1=require("./use-fadein"),highlighter_1=require("./highlighter"),react_konva_utils_1=require("react-konva-utils"),styled_1=__importDefault(require("../utils/styled")),loader_1=require("../utils/loader"),text_1=require("../utils/text"),fonts=__importStar(require("../utils/fonts")),screen_1=require("../utils/screen"),max_font_size_1=require("./text-element/max-font-size");exports.quillRef=mobx.observable({enabled:!1,currentFormat:{},editor:mobx.observable.object({instance:null},{},{deep:!1})});const RichTextContainer=(0,styled_1.default)("div",react_1.default.forwardRef)`
2
2
  .ql-editor {
3
3
  outline: none;
4
4
  }
@@ -9,4 +9,4 @@
9
9
  .ql-direction-rtl {
10
10
  direction: rtl;
11
11
  }
12
- `,createQuill=e=>new quill_1.default(e,{toolbar:!1,keyboard:!1,clipboard:{matchVisual:!1},formats:["background","bold","color","font","italic","size","strike","underline","indent","list","direction"]});exports.createQuill=createQuill;const 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=(0,exports.createQuill)(a.current);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;if(!i)return;const n=i.getSelection();if(!((null===(t=a.current)||void 0===t?void 0:t.childNodes[0].innerHTML)===r.text)){var o=i.clipboard.convert("<div class='ql-editor' style='outline: none;'>"+e+"<p><br></p></div>");i.setContents(o),i.history.clear(),n&&(i.setSelection(n.index,n.length),exports.quillRef.currentFormat=i.getFormat())}}),[r.text]);const n={color:r.fill};return r.fill.indexOf("gradient")>=0&&(n["background-color"]=r.fill,n["background-image"]=r.fill,n["background-size"]="100% 100%",n["background-repeat"]="repeat",n["-webkit-background-clip"]="text",n["-moz-background-clip"]="text",n["-webkit-text-fill-color"]="transparent",n["-moz-text-fill-color"]="transparent"),react_1.default.createElement(RichTextContainer,{ref:a,style:Object.assign(Object.assign({},n),{fontSize:r.fontSize,width:r.a.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 hasNonTransparentPixel(e){const t=e.getContext("2d").getImageData(0,0,e.width,e.height).data;for(let e=0;e<t.length;e+=4)if(0!==t[e+3])return!0;return!1}function isCanvasBlank(e){return!hasNonTransparentPixel(e)}function getHtml(e,{fontFamily:t="",color:i="black"}={}){let r=`color: ${i||e.fill}`;return e.fill.indexOf("gradient")>=0&&(r=`\n background-color: ${i};\n background-image: ${e.fill};\n background-size: 100% 100%;\n background-repeat: repeat;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n `),`<div style="white-space: unset; width: ${Math.round(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.replaceAll("\n","</br>")}</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},isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);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(),[n,o]=react_1.default.useState(!1),[l,s]=react_1.default.useState(!0),[c,d]=react_1.default.useState(!1),f=react_1.default.useRef(e.height),u=t.selectedElements.indexOf(e)>=0,h=e.fontSize/3,{textVerticalResizeEnabled:g}=flags_1.flags,_=(0,text_element_1.usePrevious)(e.fontFamily),[m]=(0,text_element_1.useFontLoader)(t,e.fontFamily),x=e._editModeEnabled;(0,use_fadein_1.useFadeIn)(i);const p=m?e.fontFamily:_!==e.fontFamily?_:"Arial",b=(0,use_color_1.useColor)(e).fill,y=getHtml(e,{fontFamily:p,color:b}),{width:v,height:w}=useHtmlSize(y,e,m);react_1.default.useEffect((()=>{if(!m)return;if(!e.height)return void e.set({height:w});const{textOverflow:i}=flags_1.flags;if("change-font-size"!==i||n)"resize"===i&&(g&&e.height<w&&t.history.ignore((()=>{e.set({height:w})})),g||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&&(g&&e.height<w?t.history.ignore((()=>{e.set({height:w})})):g||t.history.ignore((()=>{e.set({height:w})})))}}));const k=react_1.default.useRef(0);react_1.default.useEffect((()=>{n||x||(async()=>{k.current++;const i=k.current,r=(0,loader_1.incrementLoader)(`text ${e.id}`);s(!0);let n=null;const o=isSafari?5:1;for(let a=0;a<o;a++){if(n=await(0,html2canvas_1.htmlToCanvas)({html:y,width:e.width||1,height:e.height||w||1,fontFamily:p,padding:h,pixelRatio:t._elementsPixelRatio,font:t.fonts.find((e=>e.fontFamily===p))||fonts.globalFonts.find((e=>e.fontFamily===p))}),i!==k.current)return void r();isCanvasBlank(n)&&isSafari&&await new Promise((e=>setTimeout(e,50*(a+1))))}n?(a(n),s(!1),konva_1.default.Util.requestAnimFrame(r)):r()})()}),[y,n,w,x,p,e.height,t._elementsPixelRatio]);const S=n||l;react_1.default.useEffect((()=>mobx.autorun((()=>{const t=i.current;(0,apply_filters_1.applyFilter)(t,e)}))),[r,S,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);let E=0;"middle"===e.verticalAlign&&(E=(e.height-w)/2),"bottom"===e.verticalAlign&&(E=e.height-w);const z=(0,text_element_1.getLineHeight)({fontLoaded:m,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),q=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,{x:e.a.x,y:e.a.y,offsetX:e.backgroundPadding*(e.fontSize*z*.5),offsetY:e.backgroundPadding*(e.fontSize*z*.5),rotation:e.a.rotation,hideInExport:!e.showInExport,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity*e.a.opacity,fill:e.backgroundColor,width:e.a.width+e.backgroundPadding*(e.fontSize*z),height:e.a.height+e.backgroundPadding*(e.fontSize*z),cornerRadius:e.backgroundCornerRadius*(e.fontSize*z*.5)}),react_1.default.createElement(react_konva_1.Rect,{ref:i,name:"element",x:e.a.x,y:e.a.y,listening:e.selectable,rotation:e.a.rotation,width:e.a.width,height:e.a.height,visible:!S,draggable:q?e.draggable&&u:e.draggable,preventDefault:!q||u,opacity:x?0:e.a.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{d(!0)},onMouseLeave:()=>{d(!1)},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()})},id:e.id,onDblClick:()=>{e.contentEditable&&e.toggleEditMode(!0)},onDblTap:()=>{e.contentEditable&&e.toggleEditMode(!0)},onTransformStart:t=>{o(!0),f.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(),n="middle-left"===a||"middle-right"===a,o="top-center"===a||"bottom-center"===a,l=r.scaleX();if(n){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,f.current);e.set({height:t})}e.set({width:i,x:r.x(),y:r.y()})}else if(o){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(),height:r.height()*l})},onTransformEnd:t=>{o(!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(),shadowBlur:e.shadowBlur*i,shadowOffsetX:e.shadowOffsetX*i,shadowOffsetY:e.shadowOffsetY*i,strokeWidth:e.strokeWidth*i})}}),react_1.default.createElement(react_konva_1.Image,{ref:i,image:r,x:e.a.x,y:e.a.y,offsetX:h,offsetY:h-E,listening:!1,rotation:e.rotation,width:e.a.width+2*h,height:e.a.height+2*h,visible:!S,opacity:x?0:e.a.opacity,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,hideInExport:!e.showInExport}),S&&react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.rotation,offsetY:-E},react_1.default.createElement(react_konva_utils_1.Html,{divProps:{style:{pointerEvents:"none"}}},react_1.default.createElement(RichTextContainer,{dangerouslySetInnerHTML:{__html:y},style:{pointerEvents:"none",display:"inline-block"}}))),x&&react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.rotation,offsetY:-E},react_1.default.createElement(react_konva_utils_1.Html,null,react_1.default.createElement(RichEditor,{html:y,element:e,onChange:t=>{const i=(0,max_font_size_1.getLimitedFontSize)({oldText:(0,text_1.removeTags)(e.text),newText:(0,text_1.removeTags)(t),element:e});e.set({text:t,fontSize:i})},onBlur:t=>{e.toggleEditMode(!1)}}))),(u||c)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
12
+ `,createQuill=e=>new quill_1.default(e,{toolbar:!1,keyboard:!1,clipboard:{matchVisual:!1},formats:["bold","color","font","italic","size","strike","underline","indent","list","direction"]});exports.createQuill=createQuill;const RichEditor=({html:e,onBlur:t,onChange:i,element:r})=>{const n=react_1.default.useRef(null);react_1.default.useEffect((()=>{if(!n.current)return;const e=(0,exports.createQuill)(n.current);return mobx.runInAction((()=>{exports.quillRef.editor.instance=e})),window.__polotnoQuill=e,e.on("text-change",(()=>{e.getSelection()&&mobx.runInAction((()=>{exports.quillRef.currentFormat=e.getFormat()})),setTimeout((()=>{var e;i(null===(e=n.current)||void 0===e?void 0:e.childNodes[0].innerHTML)}),10)})),e.setSelection(0,0,"api"),e.on("selection-change",(i=>{i||t(),i&&mobx.runInAction((()=>{exports.quillRef.currentFormat=e.getFormat()}))})),n.current.childNodes[0].addEventListener("blur",(e=>{var i;(null===(i=e.relatedTarget)||void 0===i?void 0:i.classList.contains("ql-clipboard"))||t()})),()=>{mobx.runInAction((()=>{exports.quillRef.editor.instance=null,exports.quillRef.currentFormat={}})),delete window.__polotnoQuill}}),[]),react_1.default.useEffect((()=>{var t;const i=exports.quillRef.editor.instance;if(!i)return;const a=i.getSelection();if(!((null===(t=n.current)||void 0===t?void 0:t.childNodes[0].innerHTML)===r.text)){var o=i.clipboard.convert("<div class='ql-editor' style='outline: none;'>"+e+"<p><br></p></div>");i.setContents(o),i.history.clear(),a&&(i.setSelection(a.index,a.length),mobx.runInAction((()=>{exports.quillRef.currentFormat=i.getFormat()})))}}),[r.text]);const a={color:r.fill};return r.fill.indexOf("gradient")>=0&&(a["background-color"]=r.fill,a["background-image"]=r.fill,a["background-size"]="100% 100%",a["background-repeat"]="repeat",a["-webkit-background-clip"]="text",a["-moz-background-clip"]="text",a["-webkit-text-fill-color"]="transparent",a["-moz-text-fill-color"]="transparent"),react_1.default.createElement(RichTextContainer,{ref:n,style:Object.assign(Object.assign({},a),{fontSize:r.fontSize,width:r.a.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 hasNonTransparentPixel(e){const t=e.getContext("2d").getImageData(0,0,e.width,e.height).data;for(let e=0;e<t.length;e+=4)if(0!==t[e+3])return!0;return!1}function isCanvasBlank(e){return!hasNonTransparentPixel(e)}function getHtml(e,{fontFamily:t="",color:i="black"}={}){let r=`color: ${i||e.fill}`;return e.fill.indexOf("gradient")>=0&&(r=`\n background-color: ${i};\n background-image: ${e.fill};\n background-size: 100% 100%;\n background-repeat: repeat;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n `),`<div style="white-space: unset; width: ${Math.round(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.replaceAll("\n","</br>")}</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},isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);exports.HTMLElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const i=react_1.default.useRef(null),[r,n]=react_1.default.useState(),[a,o]=react_1.default.useState(!1),[l,s]=react_1.default.useState(!0),[c,d]=react_1.default.useState(!1),u=react_1.default.useRef(e.height),f=t.selectedElements.indexOf(e)>=0,h=e.fontSize/3,{textVerticalResizeEnabled:g}=flags_1.flags,_=(0,text_element_1.usePrevious)(e.fontFamily),[m]=(0,text_element_1.useFontLoader)(t,e.fontFamily),x=e._editModeEnabled;(0,use_fadein_1.useFadeIn)(i);const p=m?e.fontFamily:_!==e.fontFamily?_:"Arial",b=(0,use_color_1.useColor)(e).fill,y=getHtml(e,{fontFamily:p,color:b}),{width:v,height:w}=useHtmlSize(y,e,m);react_1.default.useEffect((()=>{if(!m)return;if(!e.height)return void e.set({height:w});const{textOverflow:i}=flags_1.flags;if("change-font-size"!==i||a)"resize"===i&&(g&&e.height<w&&t.history.ignore((()=>{e.set({height:w})})),g||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&&(g&&e.height<w?t.history.ignore((()=>{e.set({height:w})})):g||t.history.ignore((()=>{e.set({height:w})})))}}));const S=react_1.default.useRef(0);react_1.default.useEffect((()=>{a||x||(async()=>{S.current++;const i=S.current,r=(0,loader_1.incrementLoader)(`text ${e.id}`);s(!0);let a=null;const o=isSafari?5:1;for(let n=0;n<o;n++){if(a=await(0,html2canvas_1.htmlToCanvas)({html:y,width:e.width||1,height:e.height||w||1,fontFamily:p,padding:h,pixelRatio:t._elementsPixelRatio,font:t.fonts.find((e=>e.fontFamily===p))||fonts.globalFonts.find((e=>e.fontFamily===p))}),i!==S.current)return void r();isCanvasBlank(a)&&isSafari&&await new Promise((e=>setTimeout(e,50*(n+1))))}a?(n(a),s(!1),konva_1.default.Util.requestAnimFrame(r)):r()})()}),[y,a,w,x,p,e.height,t._elementsPixelRatio]);const k=a||l;react_1.default.useEffect((()=>mobx.autorun((()=>{const t=i.current;(0,apply_filters_1.applyFilter)(t,e)}))),[r,k,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);let E=0;"middle"===e.verticalAlign&&(E=(e.height-w)/2),"bottom"===e.verticalAlign&&(E=e.height-w);const z=(0,text_element_1.getLineHeight)({fontLoaded:m,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),q=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,{x:e.a.x,y:e.a.y,offsetX:e.backgroundPadding*(e.fontSize*z*.5),offsetY:e.backgroundPadding*(e.fontSize*z*.5),rotation:e.a.rotation,hideInExport:!e.showInExport,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity*e.a.opacity,fill:e.backgroundColor,width:e.a.width+e.backgroundPadding*(e.fontSize*z),height:e.a.height+e.backgroundPadding*(e.fontSize*z),cornerRadius:e.backgroundCornerRadius*(e.fontSize*z*.5)}),react_1.default.createElement(react_konva_1.Rect,{ref:i,name:"element",x:e.a.x,y:e.a.y,listening:e.selectable,rotation:e.a.rotation,width:e.a.width,height:e.a.height,visible:!k,draggable:q?e.draggable&&f:e.draggable,preventDefault:!q||f,opacity:x?0:e.a.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{d(!0)},onMouseLeave:()=>{d(!1)},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()})},id:e.id,onDblClick:()=>{e.contentEditable&&e.toggleEditMode(!0)},onDblTap:()=>{e.contentEditable&&e.toggleEditMode(!0)},onTransformStart:t=>{o(!0),u.current=e.height},onTransform:t=>{var i;const r=t.target,n=(null===(i=r.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor(),a="middle-left"===n||"middle-right"===n,o="top-center"===n||"bottom-center"===n,l=r.scaleX();if(a){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,u.current);e.set({height:t})}e.set({width:i,x:r.x(),y:r.y()})}else if(o){let i="resize"===flags_1.flags.textOverflow?w:e.lineHeight*e.fontSize;const n=Math.max(i,t.target.height()*t.target.scaleY());r.scaleY(1),e.set({x:r.x(),y:r.y(),height:n,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(),height:r.height()*l})},onTransformEnd:t=>{o(!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(),shadowBlur:e.shadowBlur*i,shadowOffsetX:e.shadowOffsetX*i,shadowOffsetY:e.shadowOffsetY*i,strokeWidth:e.strokeWidth*i})}}),react_1.default.createElement(react_konva_1.Image,{ref:i,image:r,x:e.a.x,y:e.a.y,offsetX:h,offsetY:h-E,listening:!1,rotation:e.rotation,width:e.a.width+2*h,height:e.a.height+2*h,visible:!k,opacity:x?0:e.a.opacity,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,hideInExport:!e.showInExport}),k&&react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.rotation,offsetY:-E},react_1.default.createElement(react_konva_utils_1.Html,{divProps:{style:{pointerEvents:"none"}}},react_1.default.createElement(RichTextContainer,{dangerouslySetInnerHTML:{__html:y},style:{pointerEvents:"none",display:"inline-block"}}))),x&&react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.rotation,offsetY:-E},react_1.default.createElement(react_konva_utils_1.Html,null,react_1.default.createElement(RichEditor,{html:y,element:e,onChange:t=>{const i=(0,max_font_size_1.getLimitedFontSize)({oldText:(0,text_1.removeTags)(e.text),newText:(0,text_1.removeTags)(t),element:e});e.set({text:t,fontSize:i})},onBlur:t=>{e.toggleEditMode(!1)}}))),(f||c)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
@@ -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.LineElement=exports.getLinePositionFromMiddlePoints=exports.getMiddlePoints=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),use_color_1=require("./use-color"),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),use_transformer_snap_1=require("./use-transformer-snap"),screen_1=require("../utils/screen");function getMiddlePoints(e){const{x:t,y:a,width:r,height:o,rotation:n}=e.a,i=n*Math.PI/180,s={x:t+o/2*Math.cos(i+Math.PI/2),y:a+o/2*Math.sin(i+Math.PI/2)};return{middleLeft:s,middleRight:{x:s.x+r*Math.cos(i),y:s.y+r*Math.sin(i)}}}function getLinePositionFromMiddlePoints(e,t,a){const r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),o=Math.atan2(t.y-e.y,t.x-e.x),n=180*o/Math.PI;return{x:e.x+Math.cos(o-Math.PI/2)*a/2,y:e.y+Math.sin(o-Math.PI/2)*a/2,width:r,height:a,rotation:n}}exports.getMiddlePoints=getMiddlePoints,exports.getLinePositionFromMiddlePoints=getLinePositionFromMiddlePoints;const getAnchorAttrs=(e,t)=>({offsetX:5/e,offsetY:5/e,width:10/e,height:10/e,fill:"white",stroke:"rgb(0, 161, 255)",strokeWidth:2,strokeScaleEnabled:!1,draggable:!0,dragDistance:0,onMouseEnter:e=>{e.target.getStage().container().style.cursor="crosshair"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onDragStart:e=>{t.history.startTransaction()},onDragEnd:e=>{t.history.endTransaction()}}),Head=(0,mobx_react_lite_1.observer)((({element:e,type:t})=>{const a=(0,use_color_1.useColor)(e,e.a.color,"fill"),r=(0,use_color_1.useColor)(e,e.a.color,"stroke"),o=Object.assign(Object.assign(Object.assign({strokeWidth:e.height,lineCap:"round",lineJoin:"round"},r),a),{opacity:e.a.opacity,hideInExport:!e.showInExport});return react_1.default.createElement(react_1.default.Fragment,null,"arrow"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height]},o)),"triangle"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height],closed:!0},o)),"bar"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[0,2*-e.height,0,2*e.height],closed:!0},o)),"square"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[0,2*-e.height,4*e.height,2*-e.height,4*e.height,2*e.height,0,2*e.height],closed:!0},o)),"circle"===t&&react_1.default.createElement(react_konva_1.Circle,Object.assign({x:2*e.height,y:0,radius:2*e.height},o)))}));exports.LineElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const a=react_1.default.useRef(null),r=react_1.default.useRef(null),o=react_1.default.useRef(null),n=e.selectable||"admin"===t.role,i=(0,screen_1.useMobile)(),[s,l]=react_1.default.useState(!1),c=t.selectedElements.indexOf(e)>=0&&1===t.selectedElements.length,{middleLeft:h,middleRight:d}=getMiddlePoints(e);(0,use_transformer_snap_1.useAnchorSnap)(r,[a],[c]),(0,use_transformer_snap_1.useAnchorSnap)(o,[a],[c]);const g=(0,use_color_1.useColor)(e,e.a.color,"stroke");return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Line,Object.assign({ref:a,name:"element",id:e.id,x:e.a.x,y:e.a.y,points:[0,0,e.a.width,0],offsetY:-e.a.height/2,strokeWidth:e.a.height,hitStrokeWidth:Math.max(e.a.height,20),dash:e.dash.map((t=>t*e.a.height))},g,{rotation:e.a.rotation,opacity:e.animated("opacity"),shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,listening:n,draggable:i?e.draggable&&c:e.draggable,preventDefault:!i||c,hideInExport:!e.showInExport,onMouseEnter:()=>{l(!0)},onMouseLeave:()=>{l(!1)},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()})},onTransform:t=>{const a=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({height:e.height*a,width:e.width*a,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})}})),react_1.default.createElement(react_konva_1.Group,{x:h.x,y:h.y,rotation:e.rotation,hideInExport:!e.showInExport},react_1.default.createElement(Head,{element:e,type:e.startHead})),react_1.default.createElement(react_konva_1.Group,{x:d.x,y:d.y,rotation:e.rotation+180},react_1.default.createElement(Head,{element:e,type:e.endHead})),s&&!c&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}),c&&e.resizable&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Group,{visible:c},react_1.default.createElement(react_konva_1.Rect,Object.assign({x:h.x,y:h.y,ref:r,name:"line-anchor"},getAnchorAttrs(t.scale,t),{onDragMove:t=>{const a=getLinePositionFromMiddlePoints(t.target.position(),d,e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})),react_1.default.createElement(react_konva_1.Rect,Object.assign({x:d.x,y:d.y,ref:o,name:"line-anchor"},getAnchorAttrs(t.scale,t),{onDragMove:t=>{const a=getLinePositionFromMiddlePoints(h,t.target.position(),e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})))))}));
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LineElement=void 0,exports.getMiddlePoints=getMiddlePoints,exports.getLinePositionFromMiddlePoints=getLinePositionFromMiddlePoints;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),use_color_1=require("./use-color"),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),use_transformer_snap_1=require("./use-transformer-snap"),screen_1=require("../utils/screen");function getMiddlePoints(e){const{x:t,y:a,width:r,height:o,rotation:n}=e.a,i=n*Math.PI/180,s={x:t+o/2*Math.cos(i+Math.PI/2),y:a+o/2*Math.sin(i+Math.PI/2)};return{middleLeft:s,middleRight:{x:s.x+r*Math.cos(i),y:s.y+r*Math.sin(i)}}}function getLinePositionFromMiddlePoints(e,t,a){const r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),o=Math.atan2(t.y-e.y,t.x-e.x),n=180*o/Math.PI;return{x:e.x+Math.cos(o-Math.PI/2)*a/2,y:e.y+Math.sin(o-Math.PI/2)*a/2,width:r,height:a,rotation:n}}const getAnchorAttrs=(e,t)=>({offsetX:5/e,offsetY:5/e,width:10/e,height:10/e,fill:"white",stroke:"rgb(0, 161, 255)",strokeWidth:2,strokeScaleEnabled:!1,draggable:!0,dragDistance:0,onMouseEnter:e=>{e.target.getStage().container().style.cursor="crosshair"},onMouseLeave:e=>{e.target.getStage().container().style.cursor=""},onDragStart:e=>{t.history.startTransaction()},onDragEnd:e=>{t.history.endTransaction()}}),Head=(0,mobx_react_lite_1.observer)((({element:e,type:t})=>{const a=(0,use_color_1.useColor)(e,e.a.color,"fill"),r=(0,use_color_1.useColor)(e,e.a.color,"stroke"),o=Object.assign(Object.assign(Object.assign({strokeWidth:e.height,lineCap:"round",lineJoin:"round"},r),a),{opacity:e.a.opacity,hideInExport:!e.showInExport});return react_1.default.createElement(react_1.default.Fragment,null,"arrow"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height]},o)),"triangle"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[3*e.height,2*-e.height,0,0,3*e.height,2*e.height],closed:!0},o)),"bar"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[0,2*-e.height,0,2*e.height],closed:!0},o)),"square"===t&&react_1.default.createElement(react_konva_1.Line,Object.assign({points:[0,2*-e.height,4*e.height,2*-e.height,4*e.height,2*e.height,0,2*e.height],closed:!0},o)),"circle"===t&&react_1.default.createElement(react_konva_1.Circle,Object.assign({x:2*e.height,y:0,radius:2*e.height},o)))}));exports.LineElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const a=react_1.default.useRef(null),r=react_1.default.useRef(null),o=react_1.default.useRef(null),n=e.selectable||"admin"===t.role,i=(0,screen_1.useMobile)(),[s,l]=react_1.default.useState(!1),c=t.selectedElements.indexOf(e)>=0&&1===t.selectedElements.length,{middleLeft:h,middleRight:d}=getMiddlePoints(e);(0,use_transformer_snap_1.useAnchorSnap)(r,[a],[c]),(0,use_transformer_snap_1.useAnchorSnap)(o,[a],[c]);const g=(0,use_color_1.useColor)(e,e.a.color,"stroke");return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Line,Object.assign({ref:a,name:"element",id:e.id,x:e.a.x,y:e.a.y,points:[0,0,e.a.width,0],offsetY:-e.a.height/2,strokeWidth:e.a.height,hitStrokeWidth:Math.max(e.a.height,20),dash:e.dash.map((t=>t*e.a.height))},g,{rotation:e.a.rotation,opacity:e.animated("opacity"),shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,listening:n,draggable:i?e.draggable&&c:e.draggable,preventDefault:!i||c,hideInExport:!e.showInExport,onMouseEnter:()=>{l(!0)},onMouseLeave:()=>{l(!1)},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()})},onTransform:t=>{const a=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({height:e.height*a,width:e.width*a,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})}})),react_1.default.createElement(react_konva_1.Group,{x:h.x,y:h.y,rotation:e.rotation,hideInExport:!e.showInExport},react_1.default.createElement(Head,{element:e,type:e.startHead})),react_1.default.createElement(react_konva_1.Group,{x:d.x,y:d.y,rotation:e.rotation+180},react_1.default.createElement(Head,{element:e,type:e.endHead})),s&&!c&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}),c&&e.resizable&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Group,{visible:c},react_1.default.createElement(react_konva_1.Rect,Object.assign({x:h.x,y:h.y,ref:r,name:"line-anchor"},getAnchorAttrs(t.scale,t),{onDragMove:t=>{const a=getLinePositionFromMiddlePoints(t.target.position(),d,e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})),react_1.default.createElement(react_konva_1.Rect,Object.assign({x:d.x,y:d.y,ref:o,name:"line-anchor"},getAnchorAttrs(t.scale,t),{onDragMove:t=>{const a=getLinePositionFromMiddlePoints(h,t.target.position(),e.height);e.set({x:a.x,y:a.y,width:a.width,rotation:a.rotation})}})))))}));
package/canvas/page.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __rest=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerNextDomDrop=exports.registerTransformerAttrs=exports.setTransformerStyle=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"),validate_key_1=require("../utils/validate-key"),math_1=require("../utils/math"),unit_1=require("../utils/unit"),flags_1=require("../utils/flags"),screen_1=require("../utils/screen"),nativeDrag=konva_1.default.DD._drag;window.removeEventListener("mousemove",nativeDrag),konva_1.default.DD._drag=function(e){(0,mobx_1.runInAction)((()=>{nativeDrag.call(this,e)}))},window.addEventListener("mousemove",konva_1.default.DD._drag);const rotateFillGroup=new konva_1.default.Group,rotateFillSize=20;rotateFillGroup.add(new konva_1.default.Rect({width:20,height:20,fill:"white"})),rotateFillGroup.add(new konva_1.default.Path({scaleX:20/24,scaleY:20/24,data:"M4.98313549,11.0001422 C5.49589839,10.9914935 5.92501998,11.3703506 5.99116425,11.8666444 L5.99985778,11.9831355 L6.00348884,12.2068855 C6.11245031,15.4321748 8.76323537,17.9999971 11.9999971,17.9999971 C12.1869612,17.9999971 12.3726725,17.9914753 12.5567465,17.9745765 L12.2928932,17.7071068 C11.9023689,17.3165825 11.9023689,16.6834175 12.2928932,16.2928932 C12.6834175,15.9023689 13.3165825,15.9023689 13.7071068,16.2928932 L15.7071068,18.2928932 C16.0976311,18.6834175 16.0976311,19.3165825 15.7071068,19.7071068 L13.7071068,21.7071068 C13.3165825,22.0976311 12.6834175,22.0976311 12.2928932,21.7071068 C11.9023689,21.3165825 11.9023689,20.6834175 12.2928932,20.2928932 L12.6111505,19.9769552 C12.4086045,19.9922816 12.2047796,19.9999971 11.9999971,19.9999971 C7.7687005,19.9999971 4.28886152,16.7094374 4.01666425,12.5105203 L4.00420123,12.2575143 L4.00014222,12.0168645 C3.9908282,11.4646583 4.43092928,11.0094562 4.98313549,11.0001422 Z M11.7071068,2.29289322 C12.0675907,2.65337718 12.0953203,3.22060824 11.7902954,3.61289944 L11.7071068,3.70710678 L11.3891629,4.0230186 C11.5916051,4.00770767 11.7953244,4 12,4 C16.418278,4 20,7.581722 20,12 C20,12.5522847 19.5522847,13 19,13 C18.4477153,13 18,12.5522847 18,12 C18,8.6862915 15.3137085,6 12,6 C11.8129339,6 11.6271216,6.00853145 11.4429483,6.02544919 L11.7071068,6.29289322 C12.0976311,6.68341751 12.0976311,7.31658249 11.7071068,7.70710678 C11.3466228,8.06759074 10.7793918,8.09532028 10.3871006,7.79029539 L10.2928932,7.70710678 L8.29289322,5.70710678 C7.93240926,5.34662282 7.90467972,4.77939176 8.20970461,4.38710056 L8.29289322,4.29289322 L10.2928932,2.29289322 C10.6834175,1.90236893 11.3165825,1.90236893 11.7071068,2.29289322 Z",fill:"black"}));const rotaterFill=rotateFillGroup.toCanvas({pixelRatio:2,width:20,height:20}),TRANSFORMER_STYLE={enabledAnchors:["top-left","top-center","top-right","middle-left","bottom-left","bottom-right","bottom-center","middle-right"],borderEnabled:!0,rotateEnabled:!0,rotationSnaps:[0,45,90,135,180,225,270,315],ignoreStroke:!0,flipEnabled:!1,anchorStrokeWidth:2,borderStrokeWidth:2,rotateAnchorOffset:30,anchorStyleFunc:e=>{if(e.hasName("rotater")){const t=20;e.setAttrs({width:t,height:t,cornerRadius:t/2,offsetX:t/2,offsetY:t/2,fillPatternImage:rotaterFill,fillPatternScaleX:t/20/2,fillPatternScaleY:t/20/2,fillPriority:"pattern",fillPatternRepeat:"no-repeat"})}}},setTransformerStyle=e=>{Object.assign(TRANSFORMER_STYLE,e)};exports.setTransformerStyle=setTransformerStyle;const 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"]},line:{enabledAnchors:[],borderEnabled:!1,rotateEnabled:!1},image:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},many:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},group:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]}};function 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,n=__rest(e,["url"]);const[r,a]=(0,use_image_1.default)(t,"anonymous"),o=r?(0,crop_1.getCrop)(r,{width:n.width,height:n.height},"center-middle"):{};return(0,image_element_1.useImageLoader)(a,"background"),react_1.default.createElement(react_konva_1.Image,Object.assign({image:r},n,o))},ColorBackground=e=>react_1.default.createElement(react_konva_1.Rect,Object.assign({},e)),PageBackground=e=>{const{background:t,scale:n,borderColor:r}=e,a=__rest(e,["background","scale","borderColor"]),o=react_1.default.useMemo((()=>!!konva_1.default.Util.colorToRGBA(t)),[t]),i=react_1.default.useMemo((()=>{const e=document.createElement("canvas"),t=30;e.width=60,e.height=60;const n=e.getContext("2d");return n&&(n.fillStyle="black",n.fillRect(t,0,t,t),n.fillRect(0,t,t,t)),e}),[]);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,Object.assign({fillPatternImage:i},a,{opacity:.1,hideInExport:!0})),o?react_1.default.createElement(ColorBackground,Object.assign({fill:t},a)):react_1.default.createElement(ImageBackground,Object.assign({url:t},a)))},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)),TransformLabels=(0,mobx_react_lite_1.observer)((({x:e,y:t,width:n,height:r,rotation:a,anchor:o,store:i})=>{const l=(0,math_1.getClientRect)({x:e,y:t,width:n,height:r,rotation:konva_1.default.Util.radToDeg(a)});if(void 0===o)return null;const c=(r/2+70)*Math.cos(a-Math.PI/2),s=(r/2+70)*Math.sin(a-Math.PI/2),d=(0,unit_1.pxToUnitRounded)({unit:i.unit,dpi:i.dpi,px:n/i.scale,precious:"px"===i.unit?0:1})+" x "+(0,unit_1.pxToUnitRounded)({unit:i.unit,dpi:i.dpi,px:r/i.scale,precious:"px"===i.unit?0:1})+("px"===i.unit?"":" "+i.unit);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Label,{x:(l.minX+l.maxX)/2+c,y:(l.minY+l.maxY)/2+s,offsetX:14,offsetY:14,visible:"rotater"===o},react_1.default.createElement(react_konva_1.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)"}),react_1.default.createElement(react_konva_1.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:Math.round(konva_1.default.Util.radToDeg(a)).toString()+"°"})),react_1.default.createElement(react_konva_1.Label,{x:(l.minX+l.maxX)/2,y:l.maxY+20,visible:"rotater"!==o},react_1.default.createElement(react_konva_1.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"up",pointerHeight:0,pointerWidth:0}),react_1.default.createElement(react_konva_1.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:d})))})),Elements=(0,mobx_react_lite_1.observer)((({elements:e,store:t})=>{const n=e.filter((e=>e.alwaysOnTop)),r=e.filter((e=>!e.alwaysOnTop)).concat(n);return react_1.default.createElement(react_1.default.Fragment,null,r.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:n,height:r,pageControlsEnabled:a,backColor:o,pageBorderColor:i,activePageBorderColor:l,components:c,bleedColor:s,altCloneEnabled:d})=>{const u=e.bleedVisible?t.bleed:0,m=t.computedWidth+2*u,g=t.computedHeight+2*u,h=(n-m*e.scale)/2,_=(r-g*e.scale)/2,f=react_1.default.useRef(null),p=react_1.default.useRef(null),b=react_1.default.useRef(null),x=null==a||a,[v,E]=react_1.default.useState(null),[y,k]=react_1.default.useState({}),w=e.selectedElements.find((e=>e._cropModeEnabled)),S=e.selectedShapes.filter((e=>!e.resizable)).length>0,Y=e.selectedShapes.filter((e=>!e.draggable)).length>0,D=e.selectedElements.filter((e=>!e.visible)).length>0;react_1.default.useLayoutEffect((()=>{var t,n,r;if(!f.current)return;const a=f.current.getStage(),o=e.selectedShapes.map((e=>e._cropModeEnabled?null:a.findOne("#"+e.id))).filter((e=>e)),i=1===e.selectedElements.length&&(null===(t=e.selectedElements[0])||void 0===t?void 0:t.type)||"many";transformerAttributes[i]?(f.current.setAttrs(Object.assign(Object.assign({},TRANSFORMER_STYLE),transformerAttributes[i])),"svg"!==i&&"image"!==i||e.selectedElements[0].keepRatio||f.current.setAttrs({enabledAnchors:TRANSFORMER_STYLE.enabledAnchors}),"text"===i&&flags_1.flags.textVerticalResizeEnabled&&f.current.setAttrs({enabledAnchors:null===(n=transformerAttributes.text.enabledAnchors)||void 0===n?void 0:n.concat(["bottom-center"])})):f.current.setAttrs(TRANSFORMER_STYLE),S&&f.current.enabledAnchors([]),Y&&f.current.rotateEnabled(!1);o.find((e=>null==e?void 0:e.isDragging()))&&o.forEach((e=>{e.isDragging()||null==e||e.startDrag()})),f.current.nodes(o),null===(r=f.current.getLayer())||void 0===r||r.batchDraw()}),[e.selectedElements,w,S,D,Y]);const A=(0,mobx_react_lite_1.useLocalObservable)((()=>({visible:!1,x1:0,y1:0,x2:0,y2:0}))),R=react_1.default.useRef(!1),T=(0,screen_1.useMobile)(),X=(0,mobx_1.action)((e=>{var t,n;if(T)return;R.current=!1;const r=e.target.findAncestor(".elements-container"),a=e.target.findAncestor("Transformer"),o=e.target.findAncestor(".page-abs-container");if(r||a||o)return;const i=null===(t=e.target.getStage())||void 0===t?void 0:t.getPointerPosition();i&&(A.visible=!0,A.x1=i.x,A.y1=i.y,A.x2=i.x,A.y2=i.y,(null===(n=e.target.getStage())||void 0===n?void 0:n.getPointersPositions().length)>=2&&(A.visible=!1))}));react_1.default.useEffect((()=>{const t=(0,mobx_1.action)((e=>{var t,n;if(!A.visible)return;null===(t=p.current)||void 0===t||t.setPointersPositions(e);let r=(null===(n=p.current)||void 0===n?void 0:n.getPointerPosition())||{x:A.x2,y:A.y2};A.x2=r.x,A.y2=r.y})),n=(0,mobx_1.action)((()=>{if(!A.visible)return;if(!p.current)return;const t=p.current.findOne(".selection"),n=t?t.getClientRect():{width:0,height:0,x:0,y:0};if(n.width&&n.height){const t=[];p.current.find(".element").forEach((r=>{const a=r.getClientRect(),o=e.getElementById(r.id()),i=null==o?void 0:o.draggable,l=null==o?void 0:o.selectable;konva_1.default.Util.haveIntersection(n,a)&&i&&l&&t.push(o.top.id)}));const r=[...new Set(t)];e.selectElements(r)}A.visible=!1,R.current=!0}));return window.addEventListener("mousemove",t),window.addEventListener("touchmove",t),window.addEventListener("mouseup",n),window.addEventListener("touchend",n),()=>{window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",t),window.removeEventListener("mouseup",n),window.removeEventListener("touchend",n)}}),[]);const C=n=>{if(e.activePage!==t&&t.select(),R.current)return;const r=n.evt.ctrlKey||n.evt.metaKey||n.evt.shiftKey,a=n.target.findAncestor(".elements-container"),o=n.target.findAncestor(".page-abs-container"),i=n.target.findAncestor("Transformer");if(!(r||a||i||o))return void e.selectElements([]);const l=n.target.findAncestor(".element",!0),c=e.getElementById(null==l?void 0:l.id()),s=null==c?void 0:c.top,d=null==s?void 0:s.id,u=e.selectedElementsIds.indexOf(d)>=0;d&&r&&!u?e.selectElements(e.selectedElementsIds.concat([d])):d&&r&&u?e.selectElements(e.selectedElementsIds.filter((e=>e!==d))):!d||r||u||e.selectElements([d])};(0,use_transformer_snap_1.useSnap)(f,e);const L=e.activePage===t,O=null==c?void 0:c.PageControls,P=null==c?void 0:c.Tooltip,M=1/e.scale,I=0/e.scale;return react_1.default.createElement("div",{ref:b,onDragOver:e=>e.preventDefault(),onDrop:n=>{if(n.preventDefault(),!p.current)return;p.current.setPointersPositions(n);const r=p.current.findOne(".elements-container").getRelativePointerPosition(),a=p.current.getPointerPosition(),o=p.current.getAllIntersections(a).map((e=>e.findAncestor(".element",!0))).filter(Boolean),i=[...new Set(o.reverse())].map((t=>e.getElementById(t.id()))),l=i[0];onDomDrop&&(onDomDrop(r,l,{elements:i,page:t}),onDomDrop=null)},style:{position:"relative",width:n+"px"},className:"polotno-page-container"+(L?" active-page":"")},react_1.default.createElement(react_konva_1.Stage,{ref:p,width:Math.min(n,4*window.innerWidth),height:Math.min(r,4*window.innerHeight),onClick:C,onTap:C,onMouseDown:X,onMouseMove:n=>{if(!n.evt.altKey&&v)return void E(null);if(!n.evt.altKey)return;const r=n.target.findAncestor(".element",!0),a=null==r?void 0:r.id();if(!e.selectedElements[0])return;if(e.selectedElementsIds.includes(a))return;const o=(0,math_1.getTotalClientRect)(e.selectedShapes),i=a?e.getElementById(a):{x:0,y:0,width:t.computedWidth,height:t.computedHeight,rotation:0},l=(0,math_1.getClientRect)(i),c=[];o.minX>l.maxX&&c.push({distance:o.minX-l.maxX,box1:o,box2:l,points:[{x:o.minX,y:o.minY+o.height/2},{x:l.maxX,y:o.minY+o.height/2},{x:l.maxX,y:l.minY+l.height/2}]}),o.maxX<l.minX&&c.push({distance:l.minX-o.maxX,box1:o,box2:l,points:[{x:o.maxX,y:o.minY+o.height/2},{x:l.minX,y:o.minY+o.height/2},{x:l.minX,y:l.minY+l.height/2}]}),o.minY>l.maxY&&c.push({box1:o,box2:l,distance:o.minY-l.maxY,points:[{x:o.minX+o.width/2,y:o.minY},{x:o.minX+o.width/2,y:l.maxY},{x:l.minX+l.width/2,y:l.maxY}]}),o.maxY<l.minY&&c.push({box1:o,box2:l,distance:l.minY-o.maxY,points:[{x:o.minX+o.width/2,y:o.maxY},{x:o.minX+o.width/2,y:l.minY},{x:l.minX+l.width/2,y:l.minY}]});o.minX>=l.minX&&o.maxX<=l.maxX&&o.minY>=l.minY&&o.maxY<=l.maxY&&(c.push({distance:o.minX-l.minX,box1:o,box2:l,points:[{x:o.minX,y:o.minY+o.height/2},{x:l.minX,y:o.minY+o.height/2},{x:l.minX,y:l.minY+l.height/2}]}),c.push({distance:l.maxX-o.maxX,box1:o,box2:l,points:[{x:o.maxX,y:o.minY+o.height/2},{x:l.maxX,y:o.minY+o.height/2},{x:l.maxX,y:l.minY+l.height/2}]}),c.push({box1:o,box2:l,distance:o.minY-l.minY,points:[{x:o.minX+o.width/2,y:o.minY},{x:o.minX+o.width/2,y:l.minY},{x:l.minX+l.width/2,y:l.minY}]}),c.push({box1:o,box2:l,distance:l.maxY-o.maxY,points:[{x:o.minX+o.width/2,y:o.maxY},{x:o.minX+o.width/2,y:l.maxY},{x:l.minX+l.width/2,y:l.maxY}]})),JSON.stringify(v)!==JSON.stringify(c)&&E(c)},onTouchStart:X,onDragStart:t=>{var n;const r=t.target.findAncestor(".element",!0);if(r){const a=e.getElementById(null==r?void 0:r.id()),o=null==a?void 0:a.top,i=null==o?void 0:o.id;!(e.selectedElementsIds.indexOf(i)>=0)&&i&&(e.selectElements([i]),t.target.stopDrag(),t.target.startDrag(t),null===(n=f.current)||void 0===n||n.startDrag(t))}v&&E(null)},pageId:t.id,style:{position:"relative"}},react_1.default.createElement(react_konva_1.Layer,null,react_1.default.createElement(Background,{width:n,height:r,fill:o}),react_1.default.createElement(react_konva_1.Group,{x:h,y:_,scaleX:e.scale,scaleY:e.scale,name:"page-container"},react_1.default.createElement(react_konva_1.Group,{name:"page-container-2"},react_1.default.createElement(react_konva_1.Group,{name:"page-background-group",x:u,y:u},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,name:"page-background",preventDefault:!1,scale:e.scale})),react_1.default.createElement(react_konva_1.Group,{x:u,y:u,name:"elements-container",listening:!e.isPlaying},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:s,name:"bleed",strokeWidth:t.bleed,x:t.bleed/2,y:t.bleed/2,width:t.computedWidth+t.bleed,height:t.computedHeight+t.bleed,listening:!1,visible:t.bleed>0&&e.bleedVisible,hideInExport:!0}))),react_1.default.createElement(react_konva_1.Line,{name:"workspace-background",points:[0,0,n,0,n,r,0,r,0,0,h,_,h,r-_,n-h,r-_,n-h,_,h,_],listening:!1,closed:!0,fill:o}),react_1.default.createElement(react_konva_1.Group,{x:h,y:_,scaleX:e.scale,scaleY:e.scale},react_1.default.createElement(react_konva_1.Rect,{name:"page-highlight",hideInExport:!0,x:-M/2-I,y:-M/2-I,width:m+M+2*I,height:g+M+2*I,stroke:L&&e.pages.length>1?l:i,strokeWidth:2,listening:!1,strokeScaleEnabled:!1})),react_1.default.createElement(react_konva_1.Group,{x:h+u*e.scale,y:_+u*e.scale,scaleX:e.scale,scaleY:e.scale,name:"page-abs-container"},react_1.default.createElement(react_konva_1.Transformer,{ref:f,onDragStart:n=>{var r;(null===(r=n.evt)||void 0===r?void 0:r.altKey)&&d&&e.selectedElements.forEach((e=>{const n=e.clone({},{skipSelect:!0}),r=t.children.indexOf(e);t.setElementZIndex(n.id,r)})),e.history.startTransaction()},onDragEnd:()=>{e.history.endTransaction()},onTransformStart:()=>{e.history.startTransaction()},boundBoxFunc:(e,t)=>{const n=Math.abs(t.width)<1||Math.abs(t.height)<1,r=Math.abs(e.width)<1||Math.abs(e.height)<1;return n&&!r?e:t},onTransform:e=>{var t,n;const r=f.current.nodes(),a=r[r.length-1];if(!(e.target===a))return;const o=null===(t=f.current)||void 0===t?void 0:t.__getNodeRect(),i=null===(n=f.current)||void 0===n?void 0:n.getActiveAnchor();k({anchor:i,x:o.x,y:o.y,rotation:o.rotation,width:o.width,height:o.height})},onTransformEnd:t=>{k({}),e.history.endTransaction()},visible:!e.isPlaying}),v&&v.map((({points:t,distance:n,box1:r,box2:a},o)=>react_1.default.createElement(react_konva_1.Group,{name:"distances-container",hideInExport:!0,key:o,listening:!1},react_1.default.createElement(react_konva_1.Rect,Object.assign({},r,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),react_1.default.createElement(react_konva_1.Rect,Object.assign({},a,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),react_1.default.createElement(react_konva_1.Line,{points:[t[0].x,t[0].y,t[1].x,t[1].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),react_1.default.createElement(react_konva_1.Line,{points:[t[1].x,t[1].y,t[2].x,t[2].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),react_1.default.createElement(react_konva_1.Label,{x:(t[0].x+t[1].x)/2,y:(t[0].y+t[1].y)/2,offsetY:-10,scaleX:1/e.scale,scaleY:1/e.scale},react_1.default.createElement(react_konva_1.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"down"}),react_1.default.createElement(react_konva_1.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:5,text:(0,unit_1.pxToUnitString)({unit:e.unit,dpi:e.dpi,px:n})}))))),t._rendering&&react_1.default.createElement(react_konva_1.Group,null,react_1.default.createElement(react_konva_1.Rect,{width:m,height:g,fill:"rgba(255,255,255,0.9)"}),react_1.default.createElement(react_konva_1.Text,{text:"Rendering...",fontSize:60,width:m,height:g,align:"center",verticalAlign:"middle"})),P&&react_1.default.createElement(P,{components:c,store:e,page:t,stageRef:p})),react_1.default.createElement(TransformLabels,Object.assign({},y,{store:e})),react_1.default.createElement(Selection,{selection:A}),validate_key_1.shouldShowCredit.value&&react_1.default.createElement(react_konva_1.Text,{text:"Powered by polotno.com",fontSize:14,fill:"rgba(0,0,0,0.6)",x:n-170,y:r-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.com")},onTap:()=>{window.open("https://polotno.com")}}),react_1.default.createElement(react_konva_1.Group,{name:"line-guides"}))),x&&L&&O&&react_1.default.createElement(O,{store:e,page:t,xPadding:h,yPadding:_}))}));
1
+ "use strict";var __rest=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerNextDomDrop=exports.setTransformerStyle=void 0,exports.registerTransformerAttrs=registerTransformerAttrs;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"),validate_key_1=require("../utils/validate-key"),math_1=require("../utils/math"),unit_1=require("../utils/unit"),flags_1=require("../utils/flags"),screen_1=require("../utils/screen"),nativeDrag=konva_1.default.DD._drag;window.removeEventListener("mousemove",nativeDrag),konva_1.default.DD._drag=function(e){(0,mobx_1.runInAction)((()=>{nativeDrag.call(this,e)}))},window.addEventListener("mousemove",konva_1.default.DD._drag);const rotateFillGroup=new konva_1.default.Group,rotateFillSize=20;rotateFillGroup.add(new konva_1.default.Rect({width:20,height:20,fill:"white"})),rotateFillGroup.add(new konva_1.default.Path({scaleX:20/24,scaleY:20/24,data:"M4.98313549,11.0001422 C5.49589839,10.9914935 5.92501998,11.3703506 5.99116425,11.8666444 L5.99985778,11.9831355 L6.00348884,12.2068855 C6.11245031,15.4321748 8.76323537,17.9999971 11.9999971,17.9999971 C12.1869612,17.9999971 12.3726725,17.9914753 12.5567465,17.9745765 L12.2928932,17.7071068 C11.9023689,17.3165825 11.9023689,16.6834175 12.2928932,16.2928932 C12.6834175,15.9023689 13.3165825,15.9023689 13.7071068,16.2928932 L15.7071068,18.2928932 C16.0976311,18.6834175 16.0976311,19.3165825 15.7071068,19.7071068 L13.7071068,21.7071068 C13.3165825,22.0976311 12.6834175,22.0976311 12.2928932,21.7071068 C11.9023689,21.3165825 11.9023689,20.6834175 12.2928932,20.2928932 L12.6111505,19.9769552 C12.4086045,19.9922816 12.2047796,19.9999971 11.9999971,19.9999971 C7.7687005,19.9999971 4.28886152,16.7094374 4.01666425,12.5105203 L4.00420123,12.2575143 L4.00014222,12.0168645 C3.9908282,11.4646583 4.43092928,11.0094562 4.98313549,11.0001422 Z M11.7071068,2.29289322 C12.0675907,2.65337718 12.0953203,3.22060824 11.7902954,3.61289944 L11.7071068,3.70710678 L11.3891629,4.0230186 C11.5916051,4.00770767 11.7953244,4 12,4 C16.418278,4 20,7.581722 20,12 C20,12.5522847 19.5522847,13 19,13 C18.4477153,13 18,12.5522847 18,12 C18,8.6862915 15.3137085,6 12,6 C11.8129339,6 11.6271216,6.00853145 11.4429483,6.02544919 L11.7071068,6.29289322 C12.0976311,6.68341751 12.0976311,7.31658249 11.7071068,7.70710678 C11.3466228,8.06759074 10.7793918,8.09532028 10.3871006,7.79029539 L10.2928932,7.70710678 L8.29289322,5.70710678 C7.93240926,5.34662282 7.90467972,4.77939176 8.20970461,4.38710056 L8.29289322,4.29289322 L10.2928932,2.29289322 C10.6834175,1.90236893 11.3165825,1.90236893 11.7071068,2.29289322 Z",fill:"black"}));const rotaterFill=rotateFillGroup.toCanvas({pixelRatio:2,width:20,height:20}),TRANSFORMER_STYLE={enabledAnchors:["top-left","top-center","top-right","middle-left","bottom-left","bottom-right","bottom-center","middle-right"],borderEnabled:!0,rotateEnabled:!0,rotationSnaps:[0,45,90,135,180,225,270,315],ignoreStroke:!0,flipEnabled:!1,anchorStrokeWidth:2,borderStrokeWidth:2,rotateAnchorOffset:30,anchorStyleFunc:e=>{if(e.hasName("rotater")){const t=20;e.setAttrs({width:t,height:t,cornerRadius:t/2,offsetX:t/2,offsetY:t/2,fillPatternImage:rotaterFill,fillPatternScaleX:t/20/2,fillPatternScaleY:t/20/2,fillPriority:"pattern",fillPatternRepeat:"no-repeat"})}}},setTransformerStyle=e=>{Object.assign(TRANSFORMER_STYLE,e)};exports.setTransformerStyle=setTransformerStyle;const 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"]},line:{enabledAnchors:[],borderEnabled:!1,rotateEnabled:!1},image:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},many:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]},group:{enabledAnchors:["top-left","top-right","bottom-left","bottom-right"]}};function registerTransformerAttrs(e,t){transformerAttributes[e]=transformerAttributes[e]||t,Object.assign(transformerAttributes[e],t)}const Background=e=>react_1.default.createElement(react_konva_1.Rect,Object.assign({},e,{preventDefault:!1})),ImageBackground=e=>{var{url:t}=e,n=__rest(e,["url"]);const[r,a]=(0,use_image_1.default)(t,"anonymous"),o=r?(0,crop_1.getCrop)(r,{width:n.width,height:n.height},"center-middle"):{};return(0,image_element_1.useImageLoader)(a,"background"),react_1.default.createElement(react_konva_1.Image,Object.assign({image:r},n,o))},ColorBackground=e=>react_1.default.createElement(react_konva_1.Rect,Object.assign({},e)),PageBackground=e=>{const{background:t,scale:n,borderColor:r}=e,a=__rest(e,["background","scale","borderColor"]),o=react_1.default.useMemo((()=>!!konva_1.default.Util.colorToRGBA(t)),[t]),i=react_1.default.useMemo((()=>{const e=document.createElement("canvas"),t=30;e.width=60,e.height=60;const n=e.getContext("2d");return n&&(n.fillStyle="black",n.fillRect(t,0,t,t),n.fillRect(0,t,t,t)),e}),[]);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,Object.assign({fillPatternImage:i},a,{opacity:.1,hideInExport:!0})),o?react_1.default.createElement(ColorBackground,Object.assign({fill:t},a)):react_1.default.createElement(ImageBackground,Object.assign({url:t},a)))},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)),TransformLabels=(0,mobx_react_lite_1.observer)((({x:e,y:t,width:n,height:r,rotation:a,anchor:o,store:i})=>{const l=(0,math_1.getClientRect)({x:e,y:t,width:n,height:r,rotation:konva_1.default.Util.radToDeg(a)});if(void 0===o)return null;const c=(r/2+70)*Math.cos(a-Math.PI/2),s=(r/2+70)*Math.sin(a-Math.PI/2),d=(0,unit_1.pxToUnitRounded)({unit:i.unit,dpi:i.dpi,px:n/i.scale,precious:"px"===i.unit?0:1})+" x "+(0,unit_1.pxToUnitRounded)({unit:i.unit,dpi:i.dpi,px:r/i.scale,precious:"px"===i.unit?0:1})+("px"===i.unit?"":" "+i.unit);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Label,{x:(l.minX+l.maxX)/2+c,y:(l.minY+l.maxY)/2+s,offsetX:14,offsetY:14,visible:"rotater"===o},react_1.default.createElement(react_konva_1.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)"}),react_1.default.createElement(react_konva_1.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:Math.round(konva_1.default.Util.radToDeg(a)).toString()+"°"})),react_1.default.createElement(react_konva_1.Label,{x:(l.minX+l.maxX)/2,y:l.maxY+20,visible:"rotater"!==o},react_1.default.createElement(react_konva_1.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"up",pointerHeight:0,pointerWidth:0}),react_1.default.createElement(react_konva_1.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:8,text:d})))})),Elements=(0,mobx_react_lite_1.observer)((({elements:e,store:t})=>{const n=e.filter((e=>e.alwaysOnTop)),r=e.filter((e=>!e.alwaysOnTop)).concat(n);return react_1.default.createElement(react_1.default.Fragment,null,r.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:n,height:r,pageControlsEnabled:a,backColor:o,pageBorderColor:i,activePageBorderColor:l,components:c,bleedColor:s,altCloneEnabled:d})=>{const u=e.bleedVisible?t.bleed:0,m=t.computedWidth+2*u,g=t.computedHeight+2*u,h=(n-m*e.scale)/2,_=(r-g*e.scale)/2,f=react_1.default.useRef(null),p=react_1.default.useRef(null),b=react_1.default.useRef(null),x=null==a||a,[v,E]=react_1.default.useState(null),[y,k]=react_1.default.useState({}),w=e.selectedElements.find((e=>e._cropModeEnabled)),S=e.selectedShapes.filter((e=>!e.resizable)).length>0,Y=e.selectedShapes.filter((e=>!e.draggable)).length>0,D=e.selectedElements.filter((e=>!e.visible)).length>0;react_1.default.useLayoutEffect((()=>{var t,n,r;if(!f.current)return;const a=f.current.getStage(),o=e.selectedShapes.map((e=>e._cropModeEnabled?null:a.findOne("#"+e.id))).filter((e=>e)),i=1===e.selectedElements.length&&(null===(t=e.selectedElements[0])||void 0===t?void 0:t.type)||"many";transformerAttributes[i]?(f.current.setAttrs(Object.assign(Object.assign({},TRANSFORMER_STYLE),transformerAttributes[i])),"svg"!==i&&"image"!==i||e.selectedElements[0].keepRatio||f.current.setAttrs({enabledAnchors:TRANSFORMER_STYLE.enabledAnchors}),"text"===i&&flags_1.flags.textVerticalResizeEnabled&&f.current.setAttrs({enabledAnchors:null===(n=transformerAttributes.text.enabledAnchors)||void 0===n?void 0:n.concat(["bottom-center"])})):f.current.setAttrs(TRANSFORMER_STYLE),S&&f.current.enabledAnchors([]),Y&&f.current.rotateEnabled(!1);o.find((e=>null==e?void 0:e.isDragging()))&&o.forEach((e=>{e.isDragging()||null==e||e.startDrag()})),f.current.nodes(o),null===(r=f.current.getLayer())||void 0===r||r.batchDraw()}),[e.selectedElements,w,S,D,Y]);const A=(0,mobx_react_lite_1.useLocalObservable)((()=>({visible:!1,x1:0,y1:0,x2:0,y2:0}))),R=react_1.default.useRef(!1),X=(0,screen_1.useMobile)(),T=(0,mobx_1.action)((e=>{var t,n;if(X)return;R.current=!1;const r=e.target.findAncestor(".elements-container"),a=e.target.findAncestor("Transformer"),o=e.target.findAncestor(".page-abs-container");if(r||a||o)return;const i=null===(t=e.target.getStage())||void 0===t?void 0:t.getPointerPosition();i&&(A.visible=!0,A.x1=i.x,A.y1=i.y,A.x2=i.x,A.y2=i.y,(null===(n=e.target.getStage())||void 0===n?void 0:n.getPointersPositions().length)>=2&&(A.visible=!1))}));react_1.default.useEffect((()=>{const t=(0,mobx_1.action)((e=>{var t,n;if(!A.visible)return;null===(t=p.current)||void 0===t||t.setPointersPositions(e);let r=(null===(n=p.current)||void 0===n?void 0:n.getPointerPosition())||{x:A.x2,y:A.y2};A.x2=r.x,A.y2=r.y})),n=(0,mobx_1.action)((()=>{if(!A.visible)return;if(!p.current)return;const t=p.current.findOne(".selection"),n=t?t.getClientRect():{width:0,height:0,x:0,y:0};if(n.width&&n.height){const t=[];p.current.find(".element").forEach((r=>{const a=r.getClientRect(),o=e.getElementById(r.id()),i=null==o?void 0:o.draggable,l=null==o?void 0:o.selectable;konva_1.default.Util.haveIntersection(n,a)&&i&&l&&t.push(o.top.id)}));const r=[...new Set(t)];e.selectElements(r)}A.visible=!1,R.current=!0}));return window.addEventListener("mousemove",t),window.addEventListener("touchmove",t),window.addEventListener("mouseup",n),window.addEventListener("touchend",n),()=>{window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",t),window.removeEventListener("mouseup",n),window.removeEventListener("touchend",n)}}),[]);const C=n=>{if(e.activePage!==t&&t.select(),R.current)return;const r=n.evt.ctrlKey||n.evt.metaKey||n.evt.shiftKey,a=n.target.findAncestor(".elements-container"),o=n.target.findAncestor(".page-abs-container"),i=n.target.findAncestor("Transformer");if(!(r||a||i||o))return void e.selectElements([]);const l=n.target.findAncestor(".element",!0),c=e.getElementById(null==l?void 0:l.id()),s=null==c?void 0:c.top,d=null==s?void 0:s.id,u=e.selectedElementsIds.indexOf(d)>=0;d&&r&&!u?e.selectElements(e.selectedElementsIds.concat([d])):d&&r&&u?e.selectElements(e.selectedElementsIds.filter((e=>e!==d))):!d||r||u||e.selectElements([d])};(0,use_transformer_snap_1.useSnap)(f,e);const L=e.activePage===t,O=null==c?void 0:c.PageControls,P=null==c?void 0:c.Tooltip,M=1/e.scale,I=0/e.scale;return react_1.default.createElement("div",{ref:b,onDragOver:e=>e.preventDefault(),onDrop:n=>{if(n.preventDefault(),!p.current)return;p.current.setPointersPositions(n);const r=p.current.findOne(".elements-container").getRelativePointerPosition(),a=p.current.getPointerPosition(),o=p.current.getAllIntersections(a).map((e=>e.findAncestor(".element",!0))).filter(Boolean),i=[...new Set(o.reverse())].map((t=>e.getElementById(t.id()))),l=i[0];onDomDrop&&(onDomDrop(r,l,{elements:i,page:t}),onDomDrop=null)},style:{position:"relative",width:n+"px"},className:"polotno-page-container"+(L?" active-page":"")},react_1.default.createElement(react_konva_1.Stage,{ref:p,width:Math.min(n,4*window.innerWidth),height:Math.min(r,4*window.innerHeight),onClick:C,onTap:C,onMouseDown:T,onMouseMove:n=>{if(!n.evt.altKey&&v)return void E(null);if(!n.evt.altKey)return;const r=n.target.findAncestor(".element",!0),a=null==r?void 0:r.id();if(!e.selectedElements[0])return;if(e.selectedElementsIds.includes(a))return;const o=(0,math_1.getTotalClientRect)(e.selectedShapes),i=a?e.getElementById(a):{x:0,y:0,width:t.computedWidth,height:t.computedHeight,rotation:0},l=(0,math_1.getClientRect)(i),c=[];o.minX>l.maxX&&c.push({distance:o.minX-l.maxX,box1:o,box2:l,points:[{x:o.minX,y:o.minY+o.height/2},{x:l.maxX,y:o.minY+o.height/2},{x:l.maxX,y:l.minY+l.height/2}]}),o.maxX<l.minX&&c.push({distance:l.minX-o.maxX,box1:o,box2:l,points:[{x:o.maxX,y:o.minY+o.height/2},{x:l.minX,y:o.minY+o.height/2},{x:l.minX,y:l.minY+l.height/2}]}),o.minY>l.maxY&&c.push({box1:o,box2:l,distance:o.minY-l.maxY,points:[{x:o.minX+o.width/2,y:o.minY},{x:o.minX+o.width/2,y:l.maxY},{x:l.minX+l.width/2,y:l.maxY}]}),o.maxY<l.minY&&c.push({box1:o,box2:l,distance:l.minY-o.maxY,points:[{x:o.minX+o.width/2,y:o.maxY},{x:o.minX+o.width/2,y:l.minY},{x:l.minX+l.width/2,y:l.minY}]});o.minX>=l.minX&&o.maxX<=l.maxX&&o.minY>=l.minY&&o.maxY<=l.maxY&&(c.push({distance:o.minX-l.minX,box1:o,box2:l,points:[{x:o.minX,y:o.minY+o.height/2},{x:l.minX,y:o.minY+o.height/2},{x:l.minX,y:l.minY+l.height/2}]}),c.push({distance:l.maxX-o.maxX,box1:o,box2:l,points:[{x:o.maxX,y:o.minY+o.height/2},{x:l.maxX,y:o.minY+o.height/2},{x:l.maxX,y:l.minY+l.height/2}]}),c.push({box1:o,box2:l,distance:o.minY-l.minY,points:[{x:o.minX+o.width/2,y:o.minY},{x:o.minX+o.width/2,y:l.minY},{x:l.minX+l.width/2,y:l.minY}]}),c.push({box1:o,box2:l,distance:l.maxY-o.maxY,points:[{x:o.minX+o.width/2,y:o.maxY},{x:o.minX+o.width/2,y:l.maxY},{x:l.minX+l.width/2,y:l.maxY}]})),JSON.stringify(v)!==JSON.stringify(c)&&E(c)},onTouchStart:T,onDragStart:t=>{var n;const r=t.target.findAncestor(".element",!0);if(r){const a=e.getElementById(null==r?void 0:r.id()),o=null==a?void 0:a.top,i=null==o?void 0:o.id;!(e.selectedElementsIds.indexOf(i)>=0)&&i&&(e.selectElements([i]),t.target.stopDrag(),t.target.startDrag(t),null===(n=f.current)||void 0===n||n.startDrag(t))}v&&E(null)},pageId:t.id,style:{position:"relative"}},react_1.default.createElement(react_konva_1.Layer,null,react_1.default.createElement(Background,{width:n,height:r,fill:o}),react_1.default.createElement(react_konva_1.Group,{x:h,y:_,scaleX:e.scale,scaleY:e.scale,name:"page-container"},react_1.default.createElement(react_konva_1.Group,{name:"page-container-2"},react_1.default.createElement(react_konva_1.Group,{name:"page-background-group",x:u,y:u},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,name:"page-background",preventDefault:!1,scale:e.scale})),react_1.default.createElement(react_konva_1.Group,{x:u,y:u,name:"elements-container",listening:!e.isPlaying},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:s,name:"bleed",strokeWidth:t.bleed,x:t.bleed/2,y:t.bleed/2,width:t.computedWidth+t.bleed,height:t.computedHeight+t.bleed,listening:!1,visible:t.bleed>0&&e.bleedVisible,hideInExport:!0}))),react_1.default.createElement(react_konva_1.Line,{name:"workspace-background",points:[0,0,n,0,n,r,0,r,0,0,h,_,h,r-_,n-h,r-_,n-h,_,h,_],listening:!1,closed:!0,fill:o}),react_1.default.createElement(react_konva_1.Group,{x:h,y:_,scaleX:e.scale,scaleY:e.scale},react_1.default.createElement(react_konva_1.Rect,{name:"page-highlight",hideInExport:!0,x:-M/2-I,y:-M/2-I,width:m+M+2*I,height:g+M+2*I,stroke:L&&e.pages.length>1?l:i,strokeWidth:2,listening:!1,strokeScaleEnabled:!1})),react_1.default.createElement(react_konva_1.Group,{x:h+u*e.scale,y:_+u*e.scale,scaleX:e.scale,scaleY:e.scale,name:"page-abs-container"},react_1.default.createElement(react_konva_1.Transformer,{ref:f,onDragStart:n=>{var r;(null===(r=n.evt)||void 0===r?void 0:r.altKey)&&d&&e.selectedElements.forEach((e=>{const n=e.clone({},{skipSelect:!0}),r=t.children.indexOf(e);t.setElementZIndex(n.id,r)})),e.history.startTransaction()},onDragEnd:()=>{e.history.endTransaction()},onTransformStart:()=>{e.history.startTransaction()},boundBoxFunc:(e,t)=>{const n=Math.abs(t.width)<1||Math.abs(t.height)<1,r=Math.abs(e.width)<1||Math.abs(e.height)<1;return n&&!r?e:t},onTransform:e=>{var t,n;const r=f.current.nodes(),a=r[r.length-1];if(!(e.target===a))return;const o=null===(t=f.current)||void 0===t?void 0:t.__getNodeRect(),i=null===(n=f.current)||void 0===n?void 0:n.getActiveAnchor();k({anchor:i,x:o.x,y:o.y,rotation:o.rotation,width:o.width,height:o.height})},onTransformEnd:t=>{k({}),e.history.endTransaction()},visible:!e.isPlaying}),v&&v.map((({points:t,distance:n,box1:r,box2:a},o)=>react_1.default.createElement(react_konva_1.Group,{name:"distances-container",hideInExport:!0,key:o,listening:!1},react_1.default.createElement(react_konva_1.Rect,Object.assign({},r,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),react_1.default.createElement(react_konva_1.Rect,Object.assign({},a,{stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1})),react_1.default.createElement(react_konva_1.Line,{points:[t[0].x,t[0].y,t[1].x,t[1].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),react_1.default.createElement(react_konva_1.Line,{points:[t[1].x,t[1].y,t[2].x,t[2].y],stroke:"rgb(0, 161, 255)",strokeWidth:1,strokeScaleEnabled:!1}),react_1.default.createElement(react_konva_1.Label,{x:(t[0].x+t[1].x)/2,y:(t[0].y+t[1].y)/2,offsetY:-10,scaleX:1/e.scale,scaleY:1/e.scale},react_1.default.createElement(react_konva_1.Tag,{cornerRadius:5,fill:"rgb(0, 161, 255)",pointerDirection:"down"}),react_1.default.createElement(react_konva_1.Text,{align:"center",verticalAlign:"middle",fill:"white",padding:5,text:(0,unit_1.pxToUnitString)({unit:e.unit,dpi:e.dpi,px:n})}))))),t._rendering&&react_1.default.createElement(react_konva_1.Group,null,react_1.default.createElement(react_konva_1.Rect,{width:m,height:g,fill:"rgba(255,255,255,0.9)"}),react_1.default.createElement(react_konva_1.Text,{text:"Rendering...",fontSize:60,width:m,height:g,align:"center",verticalAlign:"middle"})),P&&react_1.default.createElement(P,{components:c,store:e,page:t,stageRef:p})),react_1.default.createElement(TransformLabels,Object.assign({},y,{store:e})),react_1.default.createElement(Selection,{selection:A}),validate_key_1.shouldShowCredit.value&&react_1.default.createElement(react_konva_1.Text,{text:"Powered by polotno.com",fontSize:14,fill:"rgba(0,0,0,0.6)",x:n-170,y:r-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.com")},onTap:()=>{window.open("https://polotno.com")}}),react_1.default.createElement(react_konva_1.Group,{name:"line-guides"}))),x&&L&&O&&react_1.default.createElement(O,{store:e,page:t,xPadding:h,yPadding:_}))}));
package/canvas/rules.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LeftRules=exports.TopRules=void 0;const react_1=__importDefault(require("react")),math_1=require("../utils/math"),unit_1=require("../utils/unit"),mobx_react_lite_1=require("mobx-react-lite"),goober_1=require("../utils/goober"),RulersContainer=(0,goober_1.styled)("div",react_1.default.forwardRef)`
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TopRules=void 0,exports.LeftRules=LeftRules;const react_1=__importDefault(require("react")),math_1=require("../utils/math"),unit_1=require("../utils/unit"),mobx_react_lite_1=require("mobx-react-lite"),goober_1=require("../utils/goober"),RulersContainer=(0,goober_1.styled)("div",react_1.default.forwardRef)`
2
2
  position: absolute;
3
3
  top: 0;
4
4
  left: 0;
@@ -36,4 +36,4 @@
36
36
  transform: rotate(90deg);
37
37
  transform-origin: left top;
38
38
  overflow: hidden;
39
- `,realMetricsSteps=[.1,.2,.5,1,2,5,10,20,25,50,100,200,500,1e3,2e3,5e3,1e4],MIN_SECTION_WIDTH=30,findSplitSize=e=>realMetricsSteps.find((t=>e(t)>30))||1e4;function LeftRules(){return react_1.default.createElement("div",null,react_1.default.createElement("h1",null,"Top rules"))}exports.TopRules=(0,mobx_react_lite_1.observer)((({store:e,width:t,height:r})=>{const o=react_1.default.useRef(null);if(!e.activePage)return null;const l=e.activePage,i=(e.bleedVisible&&l.bleed,l.computedWidth*e.scale),a=l.computedHeight*e.scale,s=(t-i)/2,d=(n=t=>(0,unit_1.unitToPx)({unitVal:t,dpi:e.dpi,unit:e.unit})*e.scale,realMetricsSteps.find((e=>n(e)>30))||1e4);var n;const u=(0,unit_1.unitToPx)({unitVal:d,dpi:e.dpi,unit:e.unit})*e.scale,c=Math.round(i/u)+1,p=Math.round(a/u)+1,f=(0,math_1.getTotalClientRect)(e.selectedShapes);return react_1.default.createElement(RulersContainer,{ref:o,className:"polotno-rulers"},react_1.default.createElement(TopRuler,{style:{width:t+"px"},className:"polotno-x-ruler"},[...Array(c)].map(((t,r)=>react_1.default.createElement(SectionX,{key:r,style:{left:s+r*u+"px",width:u+"px"}},"px"===e.unit||d>=1?Math.round(d*r):(d*r).toFixed(1)))),!!e.selectedShapes.length&&react_1.default.createElement("div",{style:{position:"absolute",left:s+f.x*e.scale+"px",height:"14px",width:f.width*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}})),e.pages.map(((t,o)=>{var l;const i=t.computedHeight*e.scale,a=(r-i)/2;return react_1.default.createElement(LeftRuler,{key:t.id,style:{height:r+"px"},className:"polotno-y-ruler"},[...Array(p)].map(((t,r)=>react_1.default.createElement(SectionY,{key:r,style:{top:a+r*u-14+"px",width:u+"px"}},"px"===e.unit||d>=1?Math.round(d*r):(d*r).toFixed(1)))),(null===(l=e.selectedShapes[0])||void 0===l?void 0:l.page)===t&&react_1.default.createElement("div",{style:{position:"absolute",top:a+f.y*e.scale-14+"px",width:"14px",height:f.height*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}}))})))})),exports.LeftRules=LeftRules;
39
+ `,realMetricsSteps=[.1,.2,.5,1,2,5,10,20,25,50,100,200,500,1e3,2e3,5e3,1e4],MIN_SECTION_WIDTH=30,findSplitSize=e=>realMetricsSteps.find((t=>e(t)>30))||1e4;function LeftRules(){return react_1.default.createElement("div",null,react_1.default.createElement("h1",null,"Top rules"))}exports.TopRules=(0,mobx_react_lite_1.observer)((({store:e,width:t,height:r})=>{const o=react_1.default.useRef(null);if(!e.activePage)return null;const l=e.activePage,i=(e.bleedVisible&&l.bleed,l.computedWidth*e.scale),a=l.computedHeight*e.scale,d=(t-i)/2,s=(n=t=>(0,unit_1.unitToPx)({unitVal:t,dpi:e.dpi,unit:e.unit})*e.scale,realMetricsSteps.find((e=>n(e)>30))||1e4);var n;const u=(0,unit_1.unitToPx)({unitVal:s,dpi:e.dpi,unit:e.unit})*e.scale,c=Math.round(i/u)+1,p=Math.round(a/u)+1,f=(0,math_1.getTotalClientRect)(e.selectedShapes);return react_1.default.createElement(RulersContainer,{ref:o,className:"polotno-rulers"},react_1.default.createElement(TopRuler,{style:{width:t+"px"},className:"polotno-x-ruler"},[...Array(c)].map(((t,r)=>react_1.default.createElement(SectionX,{key:r,style:{left:d+r*u+"px",width:u+"px"}},"px"===e.unit||s>=1?Math.round(s*r):(s*r).toFixed(1)))),!!e.selectedShapes.length&&react_1.default.createElement("div",{style:{position:"absolute",left:d+f.x*e.scale+"px",height:"14px",width:f.width*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}})),e.pages.map(((t,o)=>{var l;const i=t.computedHeight*e.scale,a=(r-i)/2;return react_1.default.createElement(LeftRuler,{key:t.id,style:{height:r+"px"},className:"polotno-y-ruler"},[...Array(p)].map(((t,r)=>react_1.default.createElement(SectionY,{key:r,style:{top:a+r*u-14+"px",width:u+"px"}},"px"===e.unit||s>=1?Math.round(s*r):(s*r).toFixed(1)))),(null===(l=e.selectedShapes[0])||void 0===l?void 0:l.page)===t&&react_1.default.createElement("div",{style:{position:"absolute",top:a+f.y*e.scale-14+"px",width:"14px",height:f.height*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}}))})))}));
@@ -1 +1 @@
1
- "use strict";function getLimitedFontSize({oldText:t,newText:e,element:i}){if(!(e.length/Math.max(20,t.length)>=4))return i.fontSize;const n=i.width*i.page.computedHeight/e.length,o=1.5*Math.sqrt(n),r=i.fontSize;return Math.min(r,Math.max(5,Math.round(o)))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getLimitedFontSize=void 0,exports.getLimitedFontSize=getLimitedFontSize;
1
+ "use strict";function getLimitedFontSize({oldText:t,newText:e,element:i}){if(!(e.length/Math.max(20,t.length)>=4))return i.fontSize;const n=i.width*i.page.computedHeight/e.length,o=1.5*Math.sqrt(n),r=i.fontSize;return Math.min(r,Math.max(5,Math.round(o)))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getLimitedFontSize=getLimitedFontSize;
@@ -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.usePrevious=exports.getLineHeight=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")),svg_round_corners_1=require("svg-round-corners"),use_color_1=require("./use-color"),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"),screen_1=require("../utils/screen"),mobx_state_tree_1=require("mobx-state-tree"),max_font_size_1=require("./text-element/max-font-size");konva_1.default._fixTextRendering=!0;const 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){var t="֑-߿‏‫‮יִ-﷽ﹰ-ﻼ";return new RegExp("^[^"+t+"]*?["+t+"]").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:i})=>{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()+l.fontSize()*l.lineHeight()+"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,e.letterSpacing=t.letterSpacing+"em";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=i||t.value.length;t.selectionStart=t.selectionEnd=r,n&&(null==t||t.select(),document.execCommand("selectAll",!1,null))}));return()=>{clearTimeout(e)}}),[]),react_1.default.useEffect((()=>{window.addEventListener("blur",r);const e=e=>{var t;(null===(t=s.current)||void 0===t?void 0:t.contains(e.target))||r()};return window.addEventListener("touchstart",e),()=>{window.removeEventListener("blur",r),window.removeEventListener("touchstart",e)}}),[]);let u=0;const d=l.textArr.length*l.lineHeight()*l.fontSize();"middle"===t.verticalAlign&&(u=(t.a.height-d)/2),"bottom"===t.verticalAlign&&(u=t.a.height-d);const c=(0,text_1.removeTags)(t.text);return react_1.default.createElement(react_konva_utils_1.Html,null,react_1.default.createElement("textarea",{className:"polotno-input",ref:s,dir:getDir(c),style:Object.assign(Object.assign(Object.assign({},initialStyles),o),{paddingTop:u+"px"}),value:c,onChange:e=>{const r=(0,max_font_size_1.getLimitedFontSize)({oldText:t.text,newText:e.target.value,element:t});t.set({text:e.target.value,fontSize:r})},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.useReducer((e=>e+1),0),i=react_1.default.useRef((0,fonts_1.isFontLoaded)(t));return react_1.default.useLayoutEffect((()=>{if(i.current=(0,fonts_1.isFontLoaded)(t),i.current)return;let r=!0;return(async()=>{i.current=!1,n();const o=(0,loader_1.incrementLoader)(`text ${t}`);await e.loadFont(t),setTimeout(o,100),r&&(i.current=!0,n())})(),()=>{r=!1}}),[t]),[i.current]};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 i=e.offsetHeight;return document.body.removeChild(e),i/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),i=r.textArr,o=Math.floor(n.y/(r.fontSize()*r.lineHeight())),a=i.slice(0,o).reduce(((e,t)=>e+t.text.length),o),l=null!==(t=i[o])&&void 0!==t?t:i[0];let s=0;"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.useMemo((()=>{r.current=t.current,t.current=e}),[e]),r.current}function isNonSpaceSeparatedLanguage(e){return/[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\uAC00-\uD7AF]/.test(e)}function findFitFontSize(e,t){const r=e.fontSize(),n=e.height(),i=(0,text_1.removeTags)(t.text);let o=t.a.fontSize;e.height(void 0);const a=Math.round(2*t.a.fontSize)-1;for(let r=1;r<a;r++){const r=t.a.height&&e.height()>t.a.height;let n=i.split("\n").join(" ").split(/[\s-]+/).reduce(((e,t)=>isNonSpaceSeparatedLanguage(t)?e.concat(t.split("")):e.concat(t)),[]),a=e.textArr.map((e=>e.text)).join(";");const l=n.find((e=>!a.includes(e)||(a=a.replace(e,""),!1)));if(!(r||l))break;o-=.5,e.fontSize(o)}return e.fontSize(r),e.height(n),o}function generateBackgroundShape({lines:e,lineHeight:t,width:r,align:n="left",padding:i=0,cornerRadius:o=0}){var a;e.forEach(((e,t)=>{e.cx=r/2,"right"===n?e.cx=r-e.width/2:"left"===n&&(e.cx=e.width/2),"justify"!==n||e.lastInParagraph||(e.width=r),"justify"===n&&(e.cx=e.width/2)}));let l=`M ${null===(a=e[0])||void 0===a?void 0:a.cx} ${-i}`;e.forEach(((r,n)=>{const{cx:o}=r,a=e[n-1];a&&a.width>r.width?l+=` L ${o+r.width/2+i} ${n*t+i}`:l+=` L ${o+r.width/2+i} ${n*t-i}`;const s=e[n+1];s&&s.width>r.width?l+=` L ${o+r.width/2+i} ${(n+1)*t-i}`:l+=` L ${o+r.width/2+i} ${(n+1)*t+i}`}));for(var s=e.length-1;s>=0;s--){const r=e[s],{cx:n}=r,o=e[s+1];o&&o.width>r.width?l+=` L ${n-r.width/2-i} ${(s+1)*t-i}`:l+=` L ${n-r.width/2-i} ${(s+1)*t+i}`;const a=e[s-1];a&&a.width>r.width?l+=` L ${n-r.width/2-i} ${s*t+i}`:l+=` L ${n-r.width/2-i} ${s*t-i}`}l+=" Z";const u=(0,svg_round_corners_1.parsePath)(l);return(0,svg_round_corners_1.roundCommands)(u,o).path}exports.getLineHeight=getLineHeight,exports.usePrevious=usePrevious,exports.TextElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const r=react_1.default.useRef(null),n=react_1.default.useRef(null),{editorEnabled:i,selectAll:o}=useEditor(e),[a,l]=react_1.default.useState(!1),[s,u]=react_1.default.useState(!1),d=react_1.default.useRef(e.a.height),c=t.selectedElements.indexOf(e)>=0,{textVerticalResizeEnabled:f}=flags_1.flags,h=usePrevious(e.fontFamily),[g,_]=react_1.default.useState([]);react_1.default.useEffect((()=>{var e,t;const n=null!==(t=null===(e=r.current)||void 0===e?void 0:e.textArr)&&void 0!==t?t:[];JSON.stringify(n)!==JSON.stringify(g)&&_(n)})),react_1.default.useEffect((()=>{if(e.a.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[x]=(0,exports.useFontLoader)(t,e.fontFamily),p=(0,text_1.removeTags)(e.text),m=()=>{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(!x)return;const{textOverflow:n}=flags_1.flags;if(e.a.height)if("change-font-size"!==n||s||t.isPlaying){if("resize"===n){const n=m();f&&e.a.height<n&&t.history.ignore((()=>{var t;(0,mobx_state_tree_1.isAlive)(e)&&e.set({height:n}),null===(t=r.current)||void 0===t||t.height(n)}),!1,!0),f||e.a.height===n||t.history.ignore((()=>{var t;(0,mobx_state_tree_1.isAlive)(e)&&e.set({height:n}),null===(t=r.current)||void 0===t||t.height(n)}),!1,!0)}}else{const n=findFitFontSize(r.current,e);if(n!==e.a.fontSize)return void t.history.ignore((()=>{e.set({fontSize:n})}),!1,!0);const i=m();e.a.height===i||f||t.history.ignore((()=>{e.set({height:i})}),!1,!0)}else{const r=m();t.history.ignore((()=>{e.set({height:r})}),!1,!0)}})),react_1.default.useLayoutEffect((()=>{const t=r.current;t&&(t.width(t.width()+1e-8),t._setTextData(),(0,apply_filters_1.applyFilter)(t,e))}),[x]);const v=react_1.default.useRef(null),w=react_1.default.useRef(0),y=r=>{r.evt.preventDefault();const n=t.selectedShapes.find((t=>t===e));n&&e.contentEditable&&(w.current=getCursorPosition(r),e.toggleEditMode())},S=!p&&e.placeholder?.6:e.a.opacity;(0,use_fadein_1.useFadeIn)(r,S);const b=(0,exports.getLineHeight)({fontLoaded:x,fontFamily:e.fontFamily,fontSize:e.a.fontSize,lineHeight:e.lineHeight}),E=e.selectable||"admin"===t.role,L=(0,use_color_1.useColor)(e),z=react_1.default.useMemo((()=>e.backgroundEnabled?generateBackgroundShape({lines:JSON.parse(JSON.stringify(g)),cornerRadius:e.backgroundCornerRadius*(e.a.fontSize*b*.5),lineHeight:b*e.a.fontSize,padding:e.backgroundPadding*(e.a.fontSize*b*.5),width:e.a.width,align:e.align}):""),[e.backgroundEnabled,e.backgroundCornerRadius,e.a.fontSize,b,e.backgroundPadding,e.a.width,e.align,g]),T=(0,screen_1.useMobile)();let F=0;return"middle"===e.verticalAlign?F=(e.a.height-g.length*b*e.a.fontSize)/2:"bottom"===e.verticalAlign&&(F=e.a.height-g.length*b*e.a.fontSize),react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Path,{ref:n,x:e.a.x,y:e.a.y,rotation:e.a.rotation,hideInExport:!e.showInExport,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity*S,data:z,fill:e.backgroundColor,offsetY:-F}),react_1.default.createElement(react_konva_1.Text,Object.assign({ref:r,id:e.id,name:"element",hideInExport:!e.showInExport,editModeEnabled:e._editModeEnabled,x:e.a.x,y:e.a.y,rotation:e.a.rotation,width:e.a.width,height:e.a.height,text:p||e.placeholder},L,{stroke:e.stroke,lineJoin:"round",strokeWidth:e.strokeWidth,fillAfterStrokeEnabled:!0,fontSize:e.a.fontSize,fontFamily:`"${e.fontFamily}", "${h}"`,fontStyle:e.fontStyle+" "+e.fontWeight,textDecoration:e.textDecoration,align:e.align,verticalAlign:e.verticalAlign,draggable:T?e.draggable&&c:e.draggable,preventDefault:!T||c,opacity:S,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:b,letterSpacing:e.letterSpacing*e.a.fontSize,listening:E,onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()})},onMouseEnter:()=>{l(!0)},onMouseLeave:()=>{l(!1)},onClick:y,onTap:y,onTransformStart:()=>{u(!0),d.current=r.current.height()},onTransform:t=>{var r,i;const o=t.target;null===(r=n.current)||void 0===r||r.setAttrs({x:o.x(),y:o.y(),rotation:o.rotation(),scale:o.scale()});const a=(null===(i=o.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor();if("middle-left"===a||"middle-right"===a){const t=o.scaleX(),r=o.width()*t,n=e.a.fontSize;let i=r;r<n&&(i=n,v.current&&o.position(v.current)),o.width(i),o.scaleX(1),o.scaleY(1);const a=m();if("ellipsis"!==flags_1.flags.textOverflow){const t=Math.max(a,d.current);o.height(t),e.set({height:o.height()})}e.set({x:o.x(),y:o.y(),width:o.width(),rotation:o.rotation()}),(0,apply_filters_1.applyFilter)(o,e)}if("top-center"===a||"bottom-center"===a){let r="resize"===flags_1.flags.textOverflow?m():b*e.a.fontSize;t.target.height(Math.max(r,t.target.height()*t.target.scaleY())),t.target.scaleY(1)}v.current=t.target.position()},onTransformEnd:t=>{var r;const i=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({fontSize:Math.round(e.a.fontSize*i),width:Math.ceil(t.target.width()*i),x:t.target.x(),y:t.target.y(),rotation:t.target.rotation(),height:t.target.height()*i,shadowBlur:e.shadowBlur*i,shadowOffsetX:e.shadowOffsetX*i,shadowOffsetY:e.shadowOffsetY*i,strokeWidth:e.strokeWidth*i}),null===(r=n.current)||void 0===r||r.setAttrs({scaleX:1,scaleY:1}),u(!1)}})),i&&react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation},react_1.default.createElement(TextInput,{textNodeRef:r,element:e,selectAll:o,cursorPosition:w.current,onBlur:()=>{e.toggleEditMode(!1)}})),!s&&(a||c)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
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.getLineHeight=exports.useFontLoader=void 0,exports.isRTLText=isRTLText,exports.getDir=getDir,exports.usePrevious=usePrevious;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")),svg_round_corners_1=require("svg-round-corners"),use_color_1=require("./use-color"),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"),screen_1=require("../utils/screen"),mobx_state_tree_1=require("mobx-state-tree"),max_font_size_1=require("./text-element/max-font-size");konva_1.default._fixTextRendering=!0;const 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){var t="֑-߿‏‫‮יִ-﷽ﹰ-ﻼ";return new RegExp("^[^"+t+"]*?["+t+"]").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"}const TextInput=(0,mobx_react_lite_1.observer)((({textNodeRef:e,element:t,onBlur:r,selectAll:n,cursorPosition:i})=>{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()+l.fontSize()*l.lineHeight()+"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,e.letterSpacing=t.letterSpacing+"em";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=i||t.value.length;t.selectionStart=t.selectionEnd=r,n&&(null==t||t.select(),document.execCommand("selectAll",!1,null))}));return()=>{clearTimeout(e)}}),[]),react_1.default.useEffect((()=>{window.addEventListener("blur",r);const e=e=>{var t;(null===(t=s.current)||void 0===t?void 0:t.contains(e.target))||r()};return window.addEventListener("touchstart",e),()=>{window.removeEventListener("blur",r),window.removeEventListener("touchstart",e)}}),[]);let u=0;const d=l.textArr.length*l.lineHeight()*l.fontSize();"middle"===t.verticalAlign&&(u=(t.a.height-d)/2),"bottom"===t.verticalAlign&&(u=t.a.height-d);const c=(0,text_1.removeTags)(t.text);return react_1.default.createElement(react_konva_utils_1.Html,null,react_1.default.createElement("textarea",{className:"polotno-input",ref:s,dir:getDir(c),style:Object.assign(Object.assign(Object.assign({},initialStyles),o),{paddingTop:u+"px"}),value:c,onChange:e=>{const r=(0,max_font_size_1.getLimitedFontSize)({oldText:t.text,newText:e.target.value,element:t});t.set({text:e.target.value,fontSize:r})},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.useReducer((e=>e+1),0),i=react_1.default.useRef((0,fonts_1.isFontLoaded)(t));return react_1.default.useLayoutEffect((()=>{if(i.current=(0,fonts_1.isFontLoaded)(t),i.current)return;let r=!0;return(async()=>{i.current=!1,n();const o=(0,loader_1.incrementLoader)(`text ${t}`);await e.loadFont(t),setTimeout(o,100),r&&(i.current=!0,n())})(),()=>{r=!1}}),[t]),[i.current]};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 i=e.offsetHeight;return document.body.removeChild(e),i/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),i=r.textArr,o=Math.floor(n.y/(r.fontSize()*r.lineHeight())),a=i.slice(0,o).reduce(((e,t)=>e+t.text.length),o),l=null!==(t=i[o])&&void 0!==t?t:i[0];let s=0;"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.useMemo((()=>{r.current=t.current,t.current=e}),[e]),r.current}function isNonSpaceSeparatedLanguage(e){return/[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\uAC00-\uD7AF]/.test(e)}function findFitFontSize(e,t){const r=e.fontSize(),n=e.height(),i=(0,text_1.removeTags)(t.text);let o=t.a.fontSize;e.height(void 0);const a=Math.round(2*t.a.fontSize)-1;for(let r=1;r<a;r++){const r=t.a.height&&e.height()>t.a.height;let n=i.split("\n").join(" ").split(/[\s-]+/).reduce(((e,t)=>isNonSpaceSeparatedLanguage(t)?e.concat(t.split("")):e.concat(t)),[]),a=e.textArr.map((e=>e.text)).join(";");const l=n.find((e=>!a.includes(e)||(a=a.replace(e,""),!1)));if(!(r||l))break;o-=.5,e.fontSize(o)}return e.fontSize(r),e.height(n),o}function generateBackgroundShape({lines:e,lineHeight:t,width:r,align:n="left",padding:i=0,cornerRadius:o=0}){var a;e.forEach(((e,t)=>{e.cx=r/2,"right"===n?e.cx=r-e.width/2:"left"===n&&(e.cx=e.width/2),"justify"!==n||e.lastInParagraph||(e.width=r),"justify"===n&&(e.cx=e.width/2)}));let l=`M ${null===(a=e[0])||void 0===a?void 0:a.cx} ${-i}`;e.forEach(((r,n)=>{const{cx:o}=r,a=e[n-1];a&&a.width>r.width?l+=` L ${o+r.width/2+i} ${n*t+i}`:l+=` L ${o+r.width/2+i} ${n*t-i}`;const s=e[n+1];s&&s.width>r.width?l+=` L ${o+r.width/2+i} ${(n+1)*t-i}`:l+=` L ${o+r.width/2+i} ${(n+1)*t+i}`}));for(var s=e.length-1;s>=0;s--){const r=e[s],{cx:n}=r,o=e[s+1];o&&o.width>r.width?l+=` L ${n-r.width/2-i} ${(s+1)*t-i}`:l+=` L ${n-r.width/2-i} ${(s+1)*t+i}`;const a=e[s-1];a&&a.width>r.width?l+=` L ${n-r.width/2-i} ${s*t+i}`:l+=` L ${n-r.width/2-i} ${s*t-i}`}l+=" Z";const u=(0,svg_round_corners_1.parsePath)(l);return(0,svg_round_corners_1.roundCommands)(u,o).path}exports.getLineHeight=getLineHeight,exports.TextElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const r=react_1.default.useRef(null),n=react_1.default.useRef(null),{editorEnabled:i,selectAll:o}=useEditor(e),[a,l]=react_1.default.useState(!1),[s,u]=react_1.default.useState(!1),d=react_1.default.useRef(e.a.height),c=t.selectedElements.indexOf(e)>=0,{textVerticalResizeEnabled:f}=flags_1.flags,h=usePrevious(e.fontFamily),[g,_]=react_1.default.useState([]);react_1.default.useEffect((()=>{var e,t;const n=null!==(t=null===(e=r.current)||void 0===e?void 0:e.textArr)&&void 0!==t?t:[];JSON.stringify(n)!==JSON.stringify(g)&&_(n)})),react_1.default.useEffect((()=>{if(e.a.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[x]=(0,exports.useFontLoader)(t,e.fontFamily),p=(0,text_1.removeTags)(e.text),m=()=>{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(!x)return;const{textOverflow:n}=flags_1.flags;if(e.a.height)if("change-font-size"!==n||s||t.isPlaying){if("resize"===n){const n=m();f&&e.a.height<n&&t.history.ignore((()=>{var t;(0,mobx_state_tree_1.isAlive)(e)&&e.set({height:n}),null===(t=r.current)||void 0===t||t.height(n)}),!1,!0),f||e.a.height===n||t.history.ignore((()=>{var t;(0,mobx_state_tree_1.isAlive)(e)&&e.set({height:n}),null===(t=r.current)||void 0===t||t.height(n)}),!1,!0)}}else{const n=findFitFontSize(r.current,e);if(n!==e.a.fontSize)return void t.history.ignore((()=>{e.set({fontSize:n})}),!1,!0);const i=m();e.a.height===i||f||t.history.ignore((()=>{e.set({height:i})}),!1,!0)}else{const r=m();t.history.ignore((()=>{e.set({height:r})}),!1,!0)}})),react_1.default.useLayoutEffect((()=>{const t=r.current;t&&(t.width(t.width()+1e-8),t._setTextData(),(0,apply_filters_1.applyFilter)(t,e))}),[x]);const v=react_1.default.useRef(null),w=react_1.default.useRef(0),y=r=>{r.evt.preventDefault();const n=t.selectedShapes.find((t=>t===e));n&&e.contentEditable&&(w.current=getCursorPosition(r),e.toggleEditMode())},S=!p&&e.placeholder?.6:e.a.opacity;(0,use_fadein_1.useFadeIn)(r,S);const b=(0,exports.getLineHeight)({fontLoaded:x,fontFamily:e.fontFamily,fontSize:e.a.fontSize,lineHeight:e.lineHeight}),E=e.selectable||"admin"===t.role,L=(0,use_color_1.useColor)(e),z=react_1.default.useMemo((()=>e.backgroundEnabled?generateBackgroundShape({lines:JSON.parse(JSON.stringify(g)),cornerRadius:e.backgroundCornerRadius*(e.a.fontSize*b*.5),lineHeight:b*e.a.fontSize,padding:e.backgroundPadding*(e.a.fontSize*b*.5),width:e.a.width,align:e.align}):""),[e.backgroundEnabled,e.backgroundCornerRadius,e.a.fontSize,b,e.backgroundPadding,e.a.width,e.align,g]),F=(0,screen_1.useMobile)();let T=0;return"middle"===e.verticalAlign?T=(e.a.height-g.length*b*e.a.fontSize)/2:"bottom"===e.verticalAlign&&(T=e.a.height-g.length*b*e.a.fontSize),react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Path,{ref:n,x:e.a.x,y:e.a.y,rotation:e.a.rotation,hideInExport:!e.showInExport,listening:!1,visible:e.backgroundEnabled,opacity:e.backgroundOpacity*S,data:z,fill:e.backgroundColor,offsetY:-T}),react_1.default.createElement(react_konva_1.Text,Object.assign({ref:r,id:e.id,name:"element",hideInExport:!e.showInExport,editModeEnabled:e._editModeEnabled,x:e.a.x,y:e.a.y,rotation:e.a.rotation,width:e.a.width,height:e.a.height,text:p||e.placeholder},L,{stroke:e.stroke,lineJoin:"round",strokeWidth:e.strokeWidth,fillAfterStrokeEnabled:!0,fontSize:e.a.fontSize,fontFamily:`"${e.fontFamily}", "${h}"`,fontStyle:e.fontStyle+" "+e.fontWeight,textDecoration:e.textDecoration,align:e.align,verticalAlign:e.verticalAlign,draggable:F?e.draggable&&c:e.draggable,preventDefault:!F||c,opacity:S,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:b,letterSpacing:e.letterSpacing*e.a.fontSize,listening:E,onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()})},onMouseEnter:()=>{l(!0)},onMouseLeave:()=>{l(!1)},onClick:y,onTap:y,onTransformStart:()=>{u(!0),d.current=r.current.height()},onTransform:t=>{var r,i;const o=t.target;null===(r=n.current)||void 0===r||r.setAttrs({x:o.x(),y:o.y(),rotation:o.rotation(),scale:o.scale()});const a=(null===(i=o.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor();if("middle-left"===a||"middle-right"===a){const t=o.scaleX(),r=o.width()*t,n=e.a.fontSize;let i=r;r<n&&(i=n,v.current&&o.position(v.current)),o.width(i),o.scaleX(1),o.scaleY(1);const a=m();if("ellipsis"!==flags_1.flags.textOverflow){const t=Math.max(a,d.current);o.height(t),e.set({height:o.height()})}e.set({x:o.x(),y:o.y(),width:o.width(),rotation:o.rotation()}),(0,apply_filters_1.applyFilter)(o,e)}if("top-center"===a||"bottom-center"===a){let r="resize"===flags_1.flags.textOverflow?m():b*e.a.fontSize;t.target.height(Math.max(r,t.target.height()*t.target.scaleY())),t.target.scaleY(1)}v.current=t.target.position()},onTransformEnd:t=>{var r;const i=t.target.scaleX();t.target.scaleX(1),t.target.scaleY(1),e.set({fontSize:Math.round(e.a.fontSize*i),width:Math.ceil(t.target.width()*i),x:t.target.x(),y:t.target.y(),rotation:t.target.rotation(),height:t.target.height()*i,shadowBlur:e.shadowBlur*i,shadowOffsetX:e.shadowOffsetX*i,shadowOffsetY:e.shadowOffsetY*i,strokeWidth:e.strokeWidth*i}),null===(r=n.current)||void 0===r||r.setAttrs({scaleX:1,scaleY:1}),u(!1)}})),i&&react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation},react_1.default.createElement(TextInput,{textNodeRef:r,element:e,selectAll:o,cursorPosition:w.current,onBlur:()=>{e.toggleEditMode(!1)}})),!s&&(a||c)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
@@ -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.useFadeIn=exports.isAnimationUsed=exports.toggleFadeInAnimation=void 0;const react_1=__importDefault(require("react")),konva_1=__importDefault(require("konva"));let fadeInEnabled=!1;const toggleFadeInAnimation=(e=!fadeInEnabled)=>{fadeInEnabled=e};exports.toggleFadeInAnimation=toggleFadeInAnimation;const isAnimationUsed=()=>fadeInEnabled;function useFadeIn(e,t){const n=react_1.default.useRef();react_1.default.useLayoutEffect((()=>{n.current&&n.current.destroy()}),[t]),react_1.default.useLayoutEffect((()=>{if(!fadeInEnabled)return;const t=e.current.opacity();return t?(e.current.opacity(0),n.current=new konva_1.default.Tween({node:e.current,opacity:t,onFinish:()=>{var e;null===(e=n.current)||void 0===e||e.destroy()}}),n.current.play(),()=>{var e;null===(e=n.current)||void 0===e||e.destroy()}):void 0}),[])}exports.isAnimationUsed=isAnimationUsed,exports.useFadeIn=useFadeIn;
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.isAnimationUsed=exports.toggleFadeInAnimation=void 0,exports.useFadeIn=useFadeIn;const react_1=__importDefault(require("react")),konva_1=__importDefault(require("konva"));let fadeInEnabled=!1;const toggleFadeInAnimation=(e=!fadeInEnabled)=>{fadeInEnabled=e};exports.toggleFadeInAnimation=toggleFadeInAnimation;const isAnimationUsed=()=>fadeInEnabled;function useFadeIn(e,t){const n=react_1.default.useRef();react_1.default.useLayoutEffect((()=>{n.current&&n.current.destroy()}),[t]),react_1.default.useLayoutEffect((()=>{if(!fadeInEnabled)return;const t=e.current.opacity();return t?(e.current.opacity(0),n.current=new konva_1.default.Tween({node:e.current,opacity:t,onFinish:()=>{var e;null===(e=n.current)||void 0===e||e.destroy()}}),n.current.play(),()=>{var e;null===(e=n.current)||void 0===e||e.destroy()}):void 0}),[])}exports.isAnimationUsed=isAnimationUsed;
@@ -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.useAnchorSnap=exports.useSnap=void 0;const react_1=__importDefault(require("react")),konva_1=__importDefault(require("konva")),math_1=require("../utils/math");var GUIDELINE_OFFSET=5;function getObjectSnappingEdges(e){const t=e.__getNodeRect(),n=(0,math_1.getClientRect)(Object.assign(Object.assign({},t),{rotation:konva_1.default.Util.radToDeg(t.rotation)})),r=e.getAbsolutePosition();return{vertical:[{guide:n.x,offset:r.x-n.x,snap:"start"},{guide:n.x+n.width/2,offset:r.x-n.x-n.width/2,snap:"center"},{guide:n.x+n.width,offset:r.x-n.x-n.width,snap:"end"}],horizontal:[{guide:n.y,offset:r.y-n.y,snap:"start"},{guide:n.y+n.height/2,offset:r.y-n.y-n.height/2,snap:"center"},{guide:n.y+n.height,offset:r.y-n.y-n.height,snap:"end"}]}}function getGuides(e,t){var n=[],r=[];e.vertical.forEach((e=>{t.vertical.forEach((t=>{var r=Math.abs(e-t.guide);r<GUIDELINE_OFFSET&&n.push({lineGuide:e,diff:r,snap:t.snap,offset:t.offset})}))})),e.horizontal.forEach((e=>{t.horizontal.forEach((t=>{var n=Math.abs(e-t.guide);n<GUIDELINE_OFFSET&&r.push({lineGuide:e,diff:n,snap:t.snap,offset:t.offset})}))}));var a=[];const i=n.sort(((e,t)=>e.diff-t.diff)),o=r.sort(((e,t)=>e.diff-t.diff));var s=i[0],d=o[0];if(s){i.filter((e=>Math.abs(e.diff-s.diff)<.1)).forEach((e=>{a.push(Object.assign({orientation:"V"},e))}))}if(d){o.filter((e=>Math.abs(e.diff-d.diff)<.1)).forEach((e=>{a.push(Object.assign({orientation:"H"},e))}))}return a}function useSnap(e,t){const n=react_1.default.useRef(),r=e=>e.hasName("element")||e.hasName("page-background")||!n.current&&e.hasName("elements-area");function a(t){var n;const a=null===(n=e.current)||void 0===n?void 0:n.getStage();var i=[],o=[];return a.find(r).forEach((e=>{if(!(t.indexOf(e)>=0)){var n=e.getClientRect({skipShadow:!0,skipStroke:!0});i.push(n.x,n.x+n.width,n.x+n.width/2),o.push(n.y,n.y+n.height,n.y+n.height/2)}})),{vertical:i,horizontal:o}}function i(t){var n;const r=null===(n=e.current)||void 0===n?void 0:n.getLayer(),a=null==r?void 0:r.children.find((e=>"line-guides"===e.name()));t.forEach((e=>{if("H"===e.orientation){var t=new konva_1.default.Line({points:[-6e3,e.lineGuide,6e3,e.lineGuide],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t),r.batchDraw()}else if("V"===e.orientation){t=new konva_1.default.Line({points:[e.lineGuide,-6e3,e.lineGuide,6e3],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t)}}))}const o=e=>{e.target.getLayer().children.find((e=>"line-guides"===e.name())).destroyChildren();var t=getGuides(a(e.target.nodes()),getObjectSnappingEdges(e.target));if(!t.length)return;i(t);const n=e.target.getAbsolutePosition(),r=Object.assign({},n);t.forEach((e=>{switch(e.snap){case"start":case"center":case"end":switch(e.orientation){case"V":r.x=e.lineGuide+e.offset;break;case"H":r.y=e.lineGuide+e.offset}}}));const o=r.x-n.x,s=r.y-n.y;e.evt.ctrlKey||e.evt.metaKey||e.target.nodes().forEach((e=>{const t=e.getAbsolutePosition();e.setAbsolutePosition({x:t.x+o,y:t.y+s})}))},s=(t,n,r)=>{const o=e.current,s=o.getLayer();if(s.children.find((e=>"line-guides"===e.name())).destroyChildren(),"rotater"===o.getActiveAnchor())return n;if(Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2))>50)return n;if(!s)return n;var d=getGuides(a(o.nodes()),{vertical:[{guide:n.x,offset:0,snap:"start"}],horizontal:[{guide:n.y,offset:0,snap:"start"}]});if(!d.length)return n;i(d);if(r.ctrlKey||r.metaKey)return n;let u=n.x,c=n.x;d.forEach((e=>{switch(e.orientation){case"V":u=e.lineGuide;break;case"H":c=e.lineGuide}}));const l=Math.abs(n.x-u)<10,f=Math.abs(n.y-c)<10;return l&&!f?{x:u,y:t.y}:f&&!l?{x:t.x,y:c}:l&&f?{x:u,y:c}:n},d=e=>{if(n.current=!1,!e.target)return;const t=e.target.getLayer();t.children.find((e=>"line-guides"===e.name())).destroyChildren(),t.batchDraw()},u=()=>{const r=e.current.nodes().map((e=>e.id())),a=t.getElementById(r[0]);n.current="image"===(null==a?void 0:a.type)};react_1.default.useEffect((()=>{e.current&&(e.current.anchorDragBoundFunc(s),e.current.on("dragstart",(()=>{setTimeout((()=>{const e=[...konva_1.default.DD._dragElements.entries()];e.reverse(),konva_1.default.DD._dragElements.clear(),e.forEach((([e,t])=>{konva_1.default.DD._dragElements.set(e,t)}))})),u()})),e.current.on("dragmove",o),e.current.on("dragend",d),e.current.on("transformstart",(()=>{u()})),e.current.on("transformend",d),e.current.on("transform",(t=>{var n,r;t.evt.ctrlKey||t.evt.metaKey?null===(n=e.current)||void 0===n||n.rotationSnapTolerance(0):null===(r=e.current)||void 0===r||r.rotationSnapTolerance(5)})))}),[])}function getAnchorSnappingEdges(e){return{vertical:[{guide:e.absolutePosition().x,offset:0,snap:"center"}],horizontal:[{guide:e.absolutePosition().y,offset:0,snap:"center"}]}}function useAnchorSnap(e,t,n){const r=e=>e.hasName("element")||e.hasName("line-anchor")||e.hasName("page-background")||e.hasName("elements-area");const a=n=>{n.target.getLayer().children.find((e=>"line-guides"===e.name())).destroyChildren();var a=getGuides(function(t){var n;const a=null===(n=e.current)||void 0===n?void 0:n.getStage();var i=[],o=[];return a.find(r).forEach((e=>{if(!(t.indexOf(e)>=0)){var n=e.getClientRect({skipShadow:!0,skipStroke:!0});e.hasName("line-anchor")&&(n={x:e.absolutePosition().x,y:e.absolutePosition().y,width:0,height:0}),i.push(n.x,n.x+n.width,n.x+n.width/2),o.push(n.y,n.y+n.height,n.y+n.height/2)}})),{vertical:i,horizontal:o}}([n.target,...t.map((e=>e.current))]),getAnchorSnappingEdges(n.target));if(!a.length)return;!function(t){var n;const r=null===(n=e.current)||void 0===n?void 0:n.getLayer(),a=null==r?void 0:r.children.find((e=>"line-guides"===e.name()));t.forEach((e=>{if("H"===e.orientation){var t=new konva_1.default.Line({points:[-6e3,e.lineGuide,6e3,e.lineGuide],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t),r.batchDraw()}else"V"===e.orientation&&(t=new konva_1.default.Line({points:[e.lineGuide,-6e3,e.lineGuide,6e3],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]}),null==a||a.add(t))}))}(a);const i=n.target.getAbsolutePosition(),o=Object.assign({},i);a.forEach((e=>{switch(e.snap){case"start":case"center":case"end":switch(e.orientation){case"V":o.x=e.lineGuide+e.offset;break;case"H":o.y=e.lineGuide+e.offset}}}));const s=o.x-i.x,d=o.y-i.y;if(!(n.evt.ctrlKey||n.evt.metaKey)){const e=n.target.getAbsolutePosition();n.target.absolutePosition({x:e.x+s,y:e.y+d})}},i=e=>{if(!e.target)return;const t=e.target.getLayer();t.children.find((e=>"line-guides"===e.name())).destroyChildren(),t.batchDraw()};react_1.default.useEffect((()=>{e.current&&(e.current.on("dragmove",a),e.current.on("dragend",i))}),n)}exports.useSnap=useSnap,exports.useAnchorSnap=useAnchorSnap;
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.useSnap=useSnap,exports.useAnchorSnap=useAnchorSnap;const react_1=__importDefault(require("react")),konva_1=__importDefault(require("konva")),math_1=require("../utils/math");var GUIDELINE_OFFSET=5;function getObjectSnappingEdges(e){const t=e.__getNodeRect(),n=(0,math_1.getClientRect)(Object.assign(Object.assign({},t),{rotation:konva_1.default.Util.radToDeg(t.rotation)})),r=e.getAbsolutePosition();return{vertical:[{guide:n.x,offset:r.x-n.x,snap:"start"},{guide:n.x+n.width/2,offset:r.x-n.x-n.width/2,snap:"center"},{guide:n.x+n.width,offset:r.x-n.x-n.width,snap:"end"}],horizontal:[{guide:n.y,offset:r.y-n.y,snap:"start"},{guide:n.y+n.height/2,offset:r.y-n.y-n.height/2,snap:"center"},{guide:n.y+n.height,offset:r.y-n.y-n.height,snap:"end"}]}}function getGuides(e,t){var n=[],r=[];e.vertical.forEach((e=>{t.vertical.forEach((t=>{var r=Math.abs(e-t.guide);r<GUIDELINE_OFFSET&&n.push({lineGuide:e,diff:r,snap:t.snap,offset:t.offset})}))})),e.horizontal.forEach((e=>{t.horizontal.forEach((t=>{var n=Math.abs(e-t.guide);n<GUIDELINE_OFFSET&&r.push({lineGuide:e,diff:n,snap:t.snap,offset:t.offset})}))}));var a=[];const i=n.sort(((e,t)=>e.diff-t.diff)),o=r.sort(((e,t)=>e.diff-t.diff));var s=i[0],d=o[0];if(s){i.filter((e=>Math.abs(e.diff-s.diff)<.1)).forEach((e=>{a.push(Object.assign({orientation:"V"},e))}))}if(d){o.filter((e=>Math.abs(e.diff-d.diff)<.1)).forEach((e=>{a.push(Object.assign({orientation:"H"},e))}))}return a}function useSnap(e,t){const n=react_1.default.useRef(),r=e=>e.hasName("element")||e.hasName("page-background")||!n.current&&e.hasName("elements-area");function a(t){var n;const a=null===(n=e.current)||void 0===n?void 0:n.getStage();var i=[],o=[];return a.find(r).forEach((e=>{if(!(t.indexOf(e)>=0)){var n=e.getClientRect({skipShadow:!0,skipStroke:!0});i.push(n.x,n.x+n.width,n.x+n.width/2),o.push(n.y,n.y+n.height,n.y+n.height/2)}})),{vertical:i,horizontal:o}}function i(t){var n;const r=null===(n=e.current)||void 0===n?void 0:n.getLayer(),a=null==r?void 0:r.children.find((e=>"line-guides"===e.name()));t.forEach((e=>{if("H"===e.orientation){var t=new konva_1.default.Line({points:[-6e3,e.lineGuide,6e3,e.lineGuide],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t),r.batchDraw()}else if("V"===e.orientation){t=new konva_1.default.Line({points:[e.lineGuide,-6e3,e.lineGuide,6e3],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t)}}))}const o=e=>{e.target.getLayer().children.find((e=>"line-guides"===e.name())).destroyChildren();var t=getGuides(a(e.target.nodes()),getObjectSnappingEdges(e.target));if(!t.length)return;i(t);const n=e.target.getAbsolutePosition(),r=Object.assign({},n);t.forEach((e=>{switch(e.snap){case"start":case"center":case"end":switch(e.orientation){case"V":r.x=e.lineGuide+e.offset;break;case"H":r.y=e.lineGuide+e.offset}}}));const o=r.x-n.x,s=r.y-n.y;e.evt.ctrlKey||e.evt.metaKey||e.target.nodes().forEach((e=>{const t=e.getAbsolutePosition();e.setAbsolutePosition({x:t.x+o,y:t.y+s})}))},s=(t,n,r)=>{const o=e.current,s=o.getLayer();if(s.children.find((e=>"line-guides"===e.name())).destroyChildren(),"rotater"===o.getActiveAnchor())return n;if(Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2))>50)return n;if(!s)return n;var d=getGuides(a(o.nodes()),{vertical:[{guide:n.x,offset:0,snap:"start"}],horizontal:[{guide:n.y,offset:0,snap:"start"}]});if(!d.length)return n;i(d);if(r.ctrlKey||r.metaKey)return n;let u=n.x,c=n.x;d.forEach((e=>{switch(e.orientation){case"V":u=e.lineGuide;break;case"H":c=e.lineGuide}}));const l=Math.abs(n.x-u)<10,f=Math.abs(n.y-c)<10;return l&&!f?{x:u,y:t.y}:f&&!l?{x:t.x,y:c}:l&&f?{x:u,y:c}:n},d=e=>{if(n.current=!1,!e.target)return;const t=e.target.getLayer();t.children.find((e=>"line-guides"===e.name())).destroyChildren(),t.batchDraw()},u=()=>{const r=e.current.nodes().map((e=>e.id())),a=t.getElementById(r[0]);n.current="image"===(null==a?void 0:a.type)};react_1.default.useEffect((()=>{e.current&&(e.current.anchorDragBoundFunc(s),e.current.on("dragstart",(()=>{setTimeout((()=>{const e=[...konva_1.default.DD._dragElements.entries()];e.reverse(),konva_1.default.DD._dragElements.clear(),e.forEach((([e,t])=>{konva_1.default.DD._dragElements.set(e,t)}))})),u()})),e.current.on("dragmove",o),e.current.on("dragend",d),e.current.on("transformstart",(()=>{u()})),e.current.on("transformend",d),e.current.on("transform",(t=>{var n,r;t.evt.ctrlKey||t.evt.metaKey?null===(n=e.current)||void 0===n||n.rotationSnapTolerance(0):null===(r=e.current)||void 0===r||r.rotationSnapTolerance(5)})))}),[])}function getAnchorSnappingEdges(e){return{vertical:[{guide:e.absolutePosition().x,offset:0,snap:"center"}],horizontal:[{guide:e.absolutePosition().y,offset:0,snap:"center"}]}}function useAnchorSnap(e,t,n){const r=e=>e.hasName("element")||e.hasName("line-anchor")||e.hasName("page-background")||e.hasName("elements-area");const a=n=>{n.target.getLayer().children.find((e=>"line-guides"===e.name())).destroyChildren();var a=getGuides(function(t){var n;const a=null===(n=e.current)||void 0===n?void 0:n.getStage();var i=[],o=[];return a.find(r).forEach((e=>{if(!(t.indexOf(e)>=0)){var n=e.getClientRect({skipShadow:!0,skipStroke:!0});e.hasName("line-anchor")&&(n={x:e.absolutePosition().x,y:e.absolutePosition().y,width:0,height:0}),i.push(n.x,n.x+n.width,n.x+n.width/2),o.push(n.y,n.y+n.height,n.y+n.height/2)}})),{vertical:i,horizontal:o}}([n.target,...t.map((e=>e.current))]),getAnchorSnappingEdges(n.target));if(!a.length)return;!function(t){var n;const r=null===(n=e.current)||void 0===n?void 0:n.getLayer(),a=null==r?void 0:r.children.find((e=>"line-guides"===e.name()));t.forEach((e=>{if("H"===e.orientation){var t=new konva_1.default.Line({points:[-6e3,e.lineGuide,6e3,e.lineGuide],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]});null==a||a.add(t),r.batchDraw()}else"V"===e.orientation&&(t=new konva_1.default.Line({points:[e.lineGuide,-6e3,e.lineGuide,6e3],stroke:"rgb(0, 161, 255)",strokeWidth:1,name:"guid-line",dash:[4,6]}),null==a||a.add(t))}))}(a);const i=n.target.getAbsolutePosition(),o=Object.assign({},i);a.forEach((e=>{switch(e.snap){case"start":case"center":case"end":switch(e.orientation){case"V":o.x=e.lineGuide+e.offset;break;case"H":o.y=e.lineGuide+e.offset}}}));const s=o.x-i.x,d=o.y-i.y;if(!(n.evt.ctrlKey||n.evt.metaKey)){const e=n.target.getAbsolutePosition();n.target.absolutePosition({x:e.x+s,y:e.y+d})}},i=e=>{if(!e.target)return;const t=e.target.getLayer();t.children.find((e=>"line-guides"===e.name())).destroyChildren(),t.batchDraw()};react_1.default.useEffect((()=>{e.current&&(e.current.on("dragmove",a),e.current.on("dragend",i))}),n)}
@@ -2,6 +2,14 @@ import { Instance } from 'mobx-state-tree';
2
2
  export declare const forEveryChild: (node: any, cb: any) => void;
3
3
  export declare const ElementTypes: import("mobx-state-tree").ITypeUnion<any, any, any>;
4
4
  export declare const GroupElement: any;
5
- export declare const TYPES_MAP: any;
5
+ export declare const TYPES_MAP: {
6
+ svg: any;
7
+ text: any;
8
+ image: any;
9
+ group: any;
10
+ line: any;
11
+ video: any;
12
+ figure: any;
13
+ };
6
14
  export declare function registerShapeModel(defaultAttributes: any, extendFunc?: any): void;
7
15
  export type GroupElementType = Instance<typeof GroupElement>;
@@ -1 +1 @@
1
- "use strict";var __rest=this&&this.__rest||function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(o=Object.getOwnPropertySymbols(e);l<o.length;l++)t.indexOf(o[l])<0&&Object.prototype.propertyIsEnumerable.call(e,o[l])&&(r[o[l]]=e[o[l]])}return r};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerShapeModel=exports.TYPES_MAP=exports.GroupElement=exports.ElementTypes=exports.forEveryChild=void 0;const mobx_state_tree_1=require("mobx-state-tree"),nanoid_1=require("nanoid"),node_model_1=require("./node-model"),shape_model_1=require("./shape-model"),text_model_1=require("./text-model"),image_model_1=require("./image-model"),video_model_1=require("./video-model"),line_model_1=require("./line-model"),svg_model_1=require("./svg-model"),figure_model_1=require("./figure-model"),forEveryChild=(e,t)=>{if(e.children)for(const r of e.children){if(!0===t(r))break;(0,exports.forEveryChild)(r,t)}};exports.forEveryChild=forEveryChild;const additionalTypesUnion=[...new Array(20)].map(((e,t)=>mobx_state_tree_1.types.late((()=>ADDITIONAL_TYPES[t]))));exports.ElementTypes=mobx_state_tree_1.types.union({dispatcher:e=>{const t=exports.TYPES_MAP[e.type];if(!t)throw new Error(`Unknown element type: "${e.type}"`);return t}},svg_model_1.SVGElement,text_model_1.TextElement,image_model_1.ImageElement,line_model_1.LineElement,video_model_1.VideoElement,figure_model_1.FigureElement,mobx_state_tree_1.types.late((()=>exports.GroupElement)),...additionalTypesUnion),exports.GroupElement=node_model_1.Node.named("Group").props({type:"group",children:mobx_state_tree_1.types.array(exports.ElementTypes)}).views((e=>({get draggable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.draggable||(t=!1)})),t},get resizable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.resizable||(t=!1)})),t},get contentEditable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.contentEditable||(t=!1)})),t},get styleEditable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.styleEditable||(t=!1)})),t},get locked(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.locked||(t=!1)})),t}}))).actions((e=>({set(t){var{draggable:r,contentEditable:o,styleEditable:l,resizable:i}=t,n=__rest(t,["draggable","contentEditable","styleEditable","resizable"]);void 0!==r&&(0,exports.forEveryChild)(e,(e=>{e.set({draggable:r})})),void 0!==o&&(0,exports.forEveryChild)(e,(e=>{e.set({contentEditable:o})})),void 0!==l&&(0,exports.forEveryChild)(e,(e=>{e.set({styleEditable:l})})),void 0!==i&&(0,exports.forEveryChild)(e,(e=>{e.set({resizable:i})})),Object.assign(e,n)},addElement(t,{skipSelect:r=!1}={}){const o=exports.TYPES_MAP[t.type];if(!o)return void console.error("Can not find model with type "+t.type);t.children&&t.children.forEach((e=>{e.id=(0,nanoid_1.nanoid)(10)}));const l=o.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.children.push(l),l.selectable&&!r&&e.store.selectElements([l.id]),l},setElementZIndex(t,r){const o=e.children.find((e=>e.id===t));o&&((0,mobx_state_tree_1.detach)(o),e.children.remove(o),e.children.splice(r,0,o))}})));const ADDITIONAL_TYPES=[];function registerShapeModel(e,t){const r=e.type;if(!r)throw new Error('You must pass "type" attribute to custom model.');let o=shape_model_1.Shape.named(r).props(e);t&&(o=t(o)),exports.TYPES_MAP[r]=o,ADDITIONAL_TYPES.push(o)}exports.TYPES_MAP={svg:svg_model_1.SVGElement,text:text_model_1.TextElement,image:image_model_1.ImageElement,group:exports.GroupElement,line:line_model_1.LineElement,video:video_model_1.VideoElement,figure:figure_model_1.FigureElement},exports.registerShapeModel=registerShapeModel;
1
+ "use strict";var __rest=this&&this.__rest||function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(o=Object.getOwnPropertySymbols(e);l<o.length;l++)t.indexOf(o[l])<0&&Object.prototype.propertyIsEnumerable.call(e,o[l])&&(r[o[l]]=e[o[l]])}return r};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TYPES_MAP=exports.GroupElement=exports.ElementTypes=exports.forEveryChild=void 0,exports.registerShapeModel=registerShapeModel;const mobx_state_tree_1=require("mobx-state-tree"),nanoid_1=require("nanoid"),node_model_1=require("./node-model"),shape_model_1=require("./shape-model"),text_model_1=require("./text-model"),image_model_1=require("./image-model"),video_model_1=require("./video-model"),line_model_1=require("./line-model"),svg_model_1=require("./svg-model"),figure_model_1=require("./figure-model"),forEveryChild=(e,t)=>{if(e.children)for(const r of e.children){if(!0===t(r))break;(0,exports.forEveryChild)(r,t)}};exports.forEveryChild=forEveryChild;const additionalTypesUnion=[...new Array(20)].map(((e,t)=>mobx_state_tree_1.types.late((()=>ADDITIONAL_TYPES[t]))));exports.ElementTypes=mobx_state_tree_1.types.union({dispatcher:e=>{const t=exports.TYPES_MAP[e.type];if(!t)throw new Error(`Unknown element type: "${e.type}"`);return t}},svg_model_1.SVGElement,text_model_1.TextElement,image_model_1.ImageElement,line_model_1.LineElement,video_model_1.VideoElement,figure_model_1.FigureElement,mobx_state_tree_1.types.late((()=>exports.GroupElement)),...additionalTypesUnion),exports.GroupElement=node_model_1.Node.named("Group").props({type:"group",children:mobx_state_tree_1.types.array(exports.ElementTypes)}).views((e=>({get draggable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.draggable||(t=!1)})),t},get resizable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.resizable||(t=!1)})),t},get contentEditable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.contentEditable||(t=!1)})),t},get styleEditable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.styleEditable||(t=!1)})),t},get locked(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.locked||(t=!1)})),t}}))).actions((e=>({set(t){var{draggable:r,contentEditable:o,styleEditable:l,resizable:i}=t,n=__rest(t,["draggable","contentEditable","styleEditable","resizable"]);void 0!==r&&(0,exports.forEveryChild)(e,(e=>{e.set({draggable:r})})),void 0!==o&&(0,exports.forEveryChild)(e,(e=>{e.set({contentEditable:o})})),void 0!==l&&(0,exports.forEveryChild)(e,(e=>{e.set({styleEditable:l})})),void 0!==i&&(0,exports.forEveryChild)(e,(e=>{e.set({resizable:i})})),Object.assign(e,n)},addElement(t,{skipSelect:r=!1}={}){const o=exports.TYPES_MAP[t.type];if(!o)return void console.error("Can not find model with type "+t.type);t.children&&t.children.forEach((e=>{e.id=(0,nanoid_1.nanoid)(10)}));const l=o.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.children.push(l),l.selectable&&!r&&e.store.selectElements([l.id]),l},setElementZIndex(t,r){const o=e.children.find((e=>e.id===t));o&&((0,mobx_state_tree_1.detach)(o),e.children.remove(o),e.children.splice(r,0,o))}})));const ADDITIONAL_TYPES=[];function registerShapeModel(e,t){const r=e.type;if(!r)throw new Error('You must pass "type" attribute to custom model.');let o=shape_model_1.Shape.named(r).props(e);t&&(o=t(o)),exports.TYPES_MAP[r]=o,ADDITIONAL_TYPES.push(o)}exports.TYPES_MAP={svg:svg_model_1.SVGElement,text:text_model_1.TextElement,image:image_model_1.ImageElement,group:exports.GroupElement,line:line_model_1.LineElement,video:video_model_1.VideoElement,figure:figure_model_1.FigureElement};
@@ -1,55 +1,3 @@
1
1
  import { Instance } from 'mobx-state-tree';
2
- import { NodeType } from './node-model';
3
- export declare const Page: import("mobx-state-tree").IModelType<{
4
- id: import("mobx-state-tree").ISimpleType<string>;
5
- children: import("mobx-state-tree").IArrayType<import("mobx-state-tree").ITypeUnion<any, any, any>>;
6
- width: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ITypeUnion<number | "auto", number | "auto", number | "auto">, [undefined]>;
7
- height: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ITypeUnion<number | "auto", number | "auto", number | "auto">, [undefined]>;
8
- background: import("mobx-state-tree").IType<string, string, string>;
9
- bleed: import("mobx-state-tree").IType<number, number, number>;
10
- custom: import("mobx-state-tree").IType<any, any, any>;
11
- duration: import("mobx-state-tree").IType<number, number, number>;
12
- _exporting: import("mobx-state-tree").IType<boolean, boolean, boolean>;
13
- _rendering: import("mobx-state-tree").IType<boolean, boolean, boolean>;
14
- }, {
15
- readonly store: any;
16
- readonly startTime: number;
17
- readonly _exportingOrRendering: boolean;
18
- } & {
19
- readonly computedWidth: any;
20
- readonly computedHeight: any;
21
- } & {
22
- toJSON(): any;
23
- _forEachElementUp(ids: Array<string>, callback: Function): void;
24
- _forEachElementDown(ids: Array<string>, callback: Function): false;
25
- } & {
26
- clone(attrs?: {}): any;
27
- setZIndex(zIndex: any): void;
28
- set(attrs: any): void;
29
- select(): void;
30
- addElement(attrs: any, { skipSelect }?: {
31
- skipSelect?: boolean;
32
- }): NodeType | undefined;
33
- canMoveElementsUp(ids: Array<string>): false;
34
- moveElementsUp(ids: Array<string>): void;
35
- canMoveElementsTop(ids: Array<string>): any;
36
- moveElementsTop(ids: Array<string>): void;
37
- canMoveElementsDown(ids: Array<string>): false;
38
- moveElementsDown(ids: Array<string>): void;
39
- canMoveElementsBottom(ids: Array<string>): any;
40
- moveElementsBottom(ids: Array<string>): void;
41
- setElementZIndex(id: any, zIndex: any): void;
42
- setSize({ width, height, useMagic, softChange, }: {
43
- width: number;
44
- height: number;
45
- useMagic?: boolean;
46
- softChange?: boolean;
47
- }): void;
48
- } & {
49
- moveElementUp(id: any): void;
50
- moveElementDown(id: any): void;
51
- moveElementTop(id: any): void;
52
- moveElementBottom(id: any): void;
53
- play(): void;
54
- }, import("mobx-state-tree")._NotCustomized, {}>;
2
+ export declare const Page: any;
55
3
  export type PageType = Instance<typeof Page>;