polotno 2.17.3 → 2.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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=applyFilter;const konva_1=__importDefault(require("konva"));function applyFilter(e,t){var l;const s={filters:[]},a={};t.brightnessEnabled&&(s.filters.push(konva_1.default.Filters.Brighten),s.brightness=t.brightness),t.blurEnabled&&(s.filters.push(konva_1.default.Filters.Blur),s.blurRadius=t.blurRadius,"text"===t.type&&t.lineHeight<1&&(a.offset=t.fontSize)),t.sepiaEnabled&&s.filters.push(konva_1.default.Filters.Sepia),t.grayscaleEnabled&&s.filters.push(konva_1.default.Filters.Grayscale),e.setAttrs(s),s.filters.length?e.cache(Object.assign(Object.assign({},a),{pixelRatio:t.store._elementsPixelRatio})):e.clearCache(),null===(l=e.getLayer())||void 0===l||l.batchDraw()}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.applyFilter=applyFilter;const konva_1=__importDefault(require("konva")),shapeFilterToFilter={warm:t=>e=>{const a=e.data;for(let e=0;e<a.length;e+=4)a[e]=Math.min(a[e]+30*t,255),a[e+1]=Math.min(a[e+1]+15*t,255);return e},cold:t=>e=>{const a=e.data;for(let e=0;e<a.length;e+=4)a[e]=Math.min(a[e]-15*t,255),a[e+1]=Math.min(a[e+1]-10*t,255),a[e+2]=Math.min(a[e+2]+15*t,255);return e},natural:t=>e=>{const a=e.data;t=Math.max(0,Math.min(t,1));for(let e=0;e<a.length;e+=4){a[e]=Math.min(a[e]*(1+.1*t),255),a[e+1]=Math.min(a[e+1]*(1+.1*t),255),a[e+2]=Math.min(a[e+2]*(1+.1*t),255);const i=(a[e]+a[e+1]+a[e+2])/3;a[e]=Math.min((a[e]-i)*(1+.2*t)+i,255),a[e+1]=Math.min((a[e+1]-i)*(1+.2*t)+i,255),a[e+2]=Math.min((a[e+2]-i)*(1+.2*t)+i,255)}return e}};function applyFilter(t,e){var a;const i={filters:[]},r={};e.brightnessEnabled&&(i.filters.push(konva_1.default.Filters.Brighten),i.brightness=e.brightness),e.blurEnabled&&(i.filters.push(konva_1.default.Filters.Blur),i.blurRadius=e.blurRadius,"text"===e.type&&e.lineHeight<1&&(r.offset=e.fontSize)),e.sepiaEnabled&&i.filters.push(konva_1.default.Filters.Sepia),e.grayscaleEnabled&&i.filters.push(konva_1.default.Filters.Grayscale),e.filters.forEach(((t,e)=>{const a=shapeFilterToFilter[e];a&&i.filters.push(a(t.intensity))})),t.setAttrs(i),i.filters.length?t.cache(Object.assign(Object.assign({},r),{pixelRatio:e.store._elementsPixelRatio})):t.clearCache(),null===(a=t.getLayer())||void 0===a||a.batchDraw()}
package/canvas/audio.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { StoreType } from '../model/store';
2
+ import { AudioType } from '../model/audio-model';
2
3
  type Props = {
3
4
  store: StoreType;
4
- audio: any;
5
+ audio: AudioType;
5
6
  };
6
7
  export declare const AudioElement: (({ audio, store }: Props) => any) & {
7
8
  displayName: string;
package/canvas/audio.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.AudioElement=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite");function useAudio(e){const[t,r]=react_1.default.useState(null),[n,i]=react_1.default.useState("loading");return react_1.default.useEffect((()=>{const t=new Audio(e),n=()=>{i("loaded"),r(t)},u=()=>{i("failed"),r(null)};return t.addEventListener("canplay",n),t.addEventListener("error",u),()=>{t.removeEventListener("canplay",n),t.removeEventListener("error",u)}}),[e]),[t,n]}exports.AudioElement=(0,mobx_react_lite_1.observer)((({audio:e,store:t})=>{const[r,n]=useAudio(e.src);return react_1.default.useEffect((()=>{r&&t.history.ignore((()=>{e.set({duration:1e3*r.duration})}))}),[r,e,t.history]),react_1.default.useEffect((()=>{if(!r)return;t.isPlaying&&0===t.animatedElementsIds.length?(r.currentTime=e.startTime*e.duration,r.volume=e.volume,r.play()):r.pause();const n=()=>{r.currentTime=e.startTime*e.duration},i=()=>{r.currentTime>=e.endTime*e.duration&&(r.pause(),r.currentTime=e.startTime*e.duration)};return r.addEventListener("ended",n),r.addEventListener("timeupdate",i),()=>{r.pause(),r.removeEventListener("ended",n),r.removeEventListener("timeupdate",i)}}),[t.isPlaying,e.startTime,e.endTime,e.volume,r]),null}));
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AudioElement=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx");function useAudio(e){const[t,r]=react_1.default.useState(null),[n,i]=react_1.default.useState("loading");return react_1.default.useEffect((()=>{const t=new Audio(e),n=()=>{i("loaded"),r(t)},u=()=>{i("failed"),r(null)};return t.addEventListener("canplay",n),t.addEventListener("error",u),()=>{t.removeEventListener("canplay",n),t.removeEventListener("error",u)}}),[e]),[t,n]}exports.AudioElement=(0,mobx_react_lite_1.observer)((({audio:e,store:t})=>{const[r,n]=useAudio(e.src);return react_1.default.useEffect((()=>{r&&t.history.ignore((()=>{e.set({duration:1e3*r.duration})}))}),[r,e,t.history]),react_1.default.useEffect((()=>{if(!r)return;const n=()=>{r.currentTime=e.startTime*e.duration/1e3},i=()=>{const t=e.endTime*e.duration/1e3;r.currentTime>=t&&(r.pause(),r.currentTime=e.startTime*e.duration/1e3)};r.addEventListener("ended",n),r.addEventListener("timeupdate",i);const u=(0,mobx_1.autorun)((()=>{const n=t.animatedElementsIds;if(n.length&&!n.includes(e.id))return;const i=t.currentTime-e.delay,u=e.duration*(e.endTime-e.startTime),a=i>=0&&i<u;if(!(t.isPlaying&&0===t.animatedElementsIds.length&&a))return void r.pause();r.volume=e.volume,r.paused&&r.play();const o=i%u/1e3+e.startTime*e.duration/1e3,s=r.currentTime;Math.abs(s-o)>.5&&o!==s&&(r.currentTime=o)}));return()=>{r.pause(),r.removeEventListener("ended",n),r.removeEventListener("timeupdate",i),u()}}),[t.isPlaying,e.startTime,e.endTime,e.volume,r]),null}));
@@ -13,6 +13,7 @@ type ShapeProps = {
13
13
  element: TextElementType;
14
14
  onClick: Function;
15
15
  };
16
+ export declare const setQuillFormats: (formats: string[]) => void;
16
17
  export declare const createQuill: (node: any) => any;
17
18
  export declare const setQuillContent: (quill: any, html: any) => void;
18
19
  export declare const HTMLElement: (({ element, store }: ShapeProps) => React.JSX.Element) & {
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,r)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=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(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var i={};if(null!=t)for(var n=e(t),r=0;r<n.length;r++)"default"!==n[r]&&__createBinding(i,t,n[r]);return __setModuleDefault(i,t),i}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.HTMLElement=exports.setQuillContent=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)`
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(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var i={};if(null!=t)for(var r=e(t),n=0;n<r.length;n++)"default"!==r[n]&&__createBinding(i,t,r[n]);return __setModuleDefault(i,t),i}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.HTMLElement=exports.setQuillContent=exports.createQuill=exports.setQuillFormats=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:["bold","color","font","italic","size","strike","underline","indent","list","direction"]});exports.createQuill=createQuill;const setQuillContent=(e,t)=>{var i=e.clipboard.convert("<div class='ql-editor' style='outline: none;'>"+t+"<p><br></p></div>");e.setContents(i),e.history.clear()};exports.setQuillContent=setQuillContent;const RichEditor=({html:e,onBlur:t,onChange:i,element:n})=>{const r=react_1.default.useRef(null);react_1.default.useEffect((()=>{if(!r.current)return;const e=(0,exports.createQuill)(r.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;const t=null===(e=r.current)||void 0===e?void 0:e.childNodes[0];i(t.innerHTML)}),10)})),e.setSelection(0,0,"api"),e.on("selection-change",(i=>{i||t(),i&&mobx.runInAction((()=>{exports.quillRef.currentFormat=e.getFormat()}))})),r.current.childNodes[0].addEventListener("blur",(e=>{var i;(null===(i=e.relatedTarget)||void 0===i?void 0:i.classList.contains("ql-clipboard"))||t()})),()=>{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();(null===(t=r.current)||void 0===t?void 0:t.childNodes[0].innerHTML)===n.text||((0,exports.setQuillContent)(i,e),a&&(i.setSelection(a.index,a.length),mobx.runInAction((()=>{exports.quillRef.currentFormat=i.getFormat()}))))}),[n.text]);const a={color:n.fill};return n.fill.indexOf("gradient")>=0&&(a.backgroundColor=n.fill,a.backgroundImage=n.fill,a.backgroundSize="100% 100%",a.backgroundRepeat="repeat",a.webkitBackgroundClip="text",a.MozBackgroundClip="text",a.WebkitTextFillColor="transparent",a.MozTextFillColor="transparent"),react_1.default.createElement(RichTextContainer,{ref:r,style:Object.assign(Object.assign({},a),{fontSize:n.fontSize,width:n.a.width,fontFamily:n.fontFamily,lineHeight:n.lineHeight,letterSpacing:n.letterSpacing+"rem",textAlign:n.align}),dir:(0,text_element_1.getDir)((0,text_1.removeTags)(n.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 n=`color: ${i||e.fill}`;e.fill.indexOf("gradient")>=0&&(n=`\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 `);return`<div style="${["white-space: pre-wrap",`width: ${Math.round(e.width||100)}px`,n,`font-size: ${e.fontSize}px`,`font-family: '${t}'`,`text-align: ${e.align}`,e.textDecoration?`text-decoration: ${e.textDecoration}`:"",e.lineHeight?`line-height: ${e.lineHeight}`:"",e.letterSpacing?`letter-spacing: ${e.letterSpacing}rem`:"",e.fontStyle?`font-style: ${e.fontStyle}`:"",e.fontWeight?`font-weight: ${e.fontWeight}`:"",e.strokeWidth?`-webkit-text-stroke: ${e.strokeWidth}px ${e.stroke}`:"",e.strokeWidth?"paint-order: stroke fill":""].filter(Boolean).join("; ")}" 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:n}=(0,html2canvas_1.detectSize)(i),r=e.height&&n>e.height,a=(0,html2canvas_1.isContentWrapping)({html:i});if(!(r||a))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),[n,r]=react_1.default.useState(),[a,o]=react_1.default.useState(!1),[l,s]=react_1.default.useState(!0),[c,u]=react_1.default.useState(!1),d=react_1.default.useRef(e.height),f=t.selectedShapes.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,v=getHtml(e,{fontFamily:p,color:b}),{width:y,height:w}=useHtmlSize(v,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),k=react_1.default.useMemo((()=>{const e={lastArgs:null,lastResult:null};return async function(t){return e.lastArgs&&e.lastResult&&(i=e.lastArgs,n=t,JSON.stringify(i)===JSON.stringify(n))||(e.lastResult=await(0,html2canvas_1.htmlToCanvas)(t),e.lastArgs=Object.assign({},t)),e.lastResult;var i,n}}),[]);react_1.default.useEffect((()=>{a||x||(async()=>{S.current++;const i=S.current,n=(0,loader_1.incrementLoader)(`text ${e.id}`);s(!0);let a=null;const o=isSafari?5:1;for(let r=0;r<o;r++){const o=r>0?k:html2canvas_1.htmlToCanvas;if(a=await o({skipCache:r>0,html:v,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 n();isCanvasBlank(a)&&isSafari&&await new Promise((e=>setTimeout(e,50*(r+1))))}a?(r(a),s(!1),konva_1.default.Util.requestAnimFrame(n)):n()})()}),[v,a,w,x,p,e.height,t._elementsPixelRatio,m]);const z=a||l;react_1.default.useEffect((()=>mobx.autorun((()=>{const t=i.current;(0,apply_filters_1.applyFilter)(t,e)}))),[n,z,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 O=(0,text_element_1.getLineHeight)({fontLoaded:m,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),q=(0,screen_1.isTouchDevice)();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*O*.5),offsetY:e.backgroundPadding*(e.fontSize*O*.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*O),height:e.a.height+e.backgroundPadding*(e.fontSize*O),cornerRadius:e.backgroundCornerRadius*(e.fontSize*O*.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:!z,draggable:q?e.draggable&&f:e.draggable,preventDefault:!q||f,opacity:x?0:e.a.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{u(!0)},onMouseLeave:()=>{u(!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),d.current=e.height},onTransform:t=>{var i;const n=t.target,r=(null===(i=n.getStage())||void 0===i?void 0:i.findOne("Transformer")).getActiveAnchor(),a="middle-left"===r||"middle-right"===r,o="top-center"===r||"bottom-center"===r,l=n.scaleX();if(a){const t=n.scaleX(),i=Math.max(n.width()*t,e.fontSize);if(n.width(i),n.scaleX(1),flags_1.flags.textVerticalResizeEnabled){const t=Math.max(w,d.current);e.set({height:t})}e.set({width:i,x:n.x(),y:n.y()})}else if(o){let i="resize"===flags_1.flags.textOverflow?w:e.lineHeight*e.fontSize;const r=Math.max(i,t.target.height()*t.target.scaleY());n.scaleY(1),e.set({x:n.x(),y:n.y(),height:r,rotation:n.rotation()})}else n.scaleX(1),n.scaleY(1),e.set({fontSize:e.fontSize*l,width:n.width()*l,x:n.x(),y:n.y(),rotation:n.rotation(),height:n.height()*l})},onTransformEnd:t=>{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:n,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:!z,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}),z&&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:v},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:v,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}))}));
12
+ `;let quillFormats=["bold","color","font","italic","size","strike","underline","indent","list","direction"];const setQuillFormats=e=>{quillFormats=e};exports.setQuillFormats=setQuillFormats;const createQuill=e=>new quill_1.default(e,{toolbar:!1,keyboard:!1,clipboard:{matchVisual:!1},formats:quillFormats});exports.createQuill=createQuill;const setQuillContent=(e,t)=>{var i=e.clipboard.convert("<div class='ql-editor' style='outline: none;'>"+t+"<p><br></p></div>");e.setContents(i),e.history.clear()};exports.setQuillContent=setQuillContent;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;const t=null===(e=n.current)||void 0===e?void 0:e.childNodes[0];i(t.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 o=i.getSelection();(null===(t=n.current)||void 0===t?void 0:t.childNodes[0].innerHTML)===r.text||((0,exports.setQuillContent)(i,e),o&&(i.setSelection(o.index,o.length),mobx.runInAction((()=>{exports.quillRef.currentFormat=i.getFormat()}))))}),[r.text]);const o={color:r.fill};return r.fill.indexOf("gradient")>=0&&(o.backgroundColor=r.fill,o.backgroundImage=r.fill,o.backgroundSize="100% 100%",o.backgroundRepeat="repeat",o.webkitBackgroundClip="text",o.MozBackgroundClip="text",o.WebkitTextFillColor="transparent",o.MozTextFillColor="transparent"),react_1.default.createElement(RichTextContainer,{ref:n,style:Object.assign(Object.assign({},o),{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}`;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 `);return`<div style="${["white-space: pre-wrap",`width: ${Math.round(e.width||100)}px`,r,`font-size: ${e.fontSize}px`,`font-family: '${t}'`,`text-align: ${e.align}`,e.textDecoration?`text-decoration: ${e.textDecoration}`:"",e.lineHeight?`line-height: ${e.lineHeight}`:"",e.letterSpacing?`letter-spacing: ${e.letterSpacing}rem`:"",e.fontStyle?`font-style: ${e.fontStyle}`:"",e.fontWeight?`font-weight: ${e.fontWeight}`:"",e.strokeWidth?`-webkit-text-stroke: ${e.strokeWidth}px ${e.stroke}`:"",e.strokeWidth?"paint-order: stroke fill":""].filter(Boolean).join("; ")}" 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),n=e.height&&r>e.height,o=(0,html2canvas_1.isContentWrapping)({html:i});if(!(n||o))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(),[o,a]=react_1.default.useState(!1),[l,s]=react_1.default.useState(!0),[c,u]=react_1.default.useState(!1),d=react_1.default.useRef(e.height),f=t.selectedShapes.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,v=getHtml(e,{fontFamily:p,color:b}),{width:y,height:w}=useHtmlSize(v,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||o)"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),k=react_1.default.useMemo((()=>{const e={lastArgs:null,lastResult:null};return async function(t){return e.lastArgs&&e.lastResult&&(i=e.lastArgs,r=t,JSON.stringify(i)===JSON.stringify(r))||(e.lastResult=await(0,html2canvas_1.htmlToCanvas)(t),e.lastArgs=Object.assign({},t)),e.lastResult;var i,r}}),[]);react_1.default.useEffect((()=>{o||x||(async()=>{S.current++;const i=S.current,r=(0,loader_1.incrementLoader)(`text ${e.id}`);s(!0);let o=null;const a=isSafari?5:1;for(let n=0;n<a;n++){const a=n>0?k:html2canvas_1.htmlToCanvas;if(o=await a({skipCache:n>0,html:v,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(o)&&isSafari&&await new Promise((e=>setTimeout(e,50*(n+1))))}o?(n(o),s(!1),konva_1.default.Util.requestAnimFrame(r)):r()})()}),[v,o,w,x,p,e.height,t._elementsPixelRatio,m]);const z=o||l;react_1.default.useEffect((()=>mobx.autorun((()=>{const t=i.current;(0,apply_filters_1.applyFilter)(t,e)}))),[r,z,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 F=(0,text_element_1.getLineHeight)({fontLoaded:m,fontFamily:e.fontFamily,fontSize:e.fontSize,lineHeight:e.lineHeight}),q=(0,screen_1.isTouchDevice)();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*F*.5),offsetY:e.backgroundPadding*(e.fontSize*F*.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*F),height:e.a.height+e.backgroundPadding*(e.fontSize*F),cornerRadius:e.backgroundCornerRadius*(e.fontSize*F*.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:!z,draggable:q?e.draggable&&f:e.draggable,preventDefault:!q||f,opacity:x?0:e.a.opacity,hideInExport:!e.showInExport,onMouseEnter:()=>{u(!0)},onMouseLeave:()=>{u(!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=>{a(!0),d.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(),o="middle-left"===n||"middle-right"===n,a="top-center"===n||"bottom-center"===n,l=r.scaleX();if(o){const t=r.scaleX(),i=Math.max(r.width()*t,e.fontSize);if(r.width(i),r.scaleX(1),flags_1.flags.textVerticalResizeEnabled){const t=Math.max(w,d.current);e.set({height:t})}e.set({width:i,x:r.x(),y:r.y()})}else if(a){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=>{a(!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:!z,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}),z&&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:v},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:v,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 __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,n)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(null!=t)for(var a=e(t),n=0;n<a.length;n++)"default"!==a[n]&&__createBinding(r,t,a[n]);return __setModuleDefault(r,t),r}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.VideoElement=exports.useLoader=exports.setVideoLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),svg=__importStar(require("../utils/svg")),flags_1=require("../utils/flags"),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein"),screen_1=require("../utils/screen");function createCanvas(){return document.createElement("canvas")}async function getFixedUrl(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await svg.urlToString(e),r=svg.fixSize(t);return svg.svgToURL(r)}const useSizeFixer=e=>{const[t,r]=react_1.default.useState(e);return react_1.default.useEffect((()=>{(async()=>{const a=await getFixedUrl(e);a!==t&&r(a)})()}),[e]),t},playIcon=new window.Image;playIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" fill="white"/>\n <path d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const pauseIcon=new window.Image;pauseIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" fill="white"/>\n <path opacity="0.6" d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" fill="white"/>\n <path d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const useFlip=(e,t,r)=>{const a=react_1.default.useMemo((()=>{var a,n;const{flipX:o,flipY:i}=e,d="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0,c=navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&d||e.maskSrc;if(!o&&!i&&!c)return t;if(!t||!t.width||!t.height)return null;const l=createCanvas();let h=1;"svg"===e.type&&(h=Math.max(e.width/t.width*r,e.height/t.height*r)),l.width=Math.max(t.width*h,1),l.height=Math.max(t.height*h,1);let u=o?-l.width:0,s=i?-l.height:0;return null===(a=l.getContext("2d"))||void 0===a||a.scale(o?-1:1,i?-1:1),null===(n=l.getContext("2d"))||void 0===n||n.drawImage(t,u,s,l.width,l.height),l}),[e.maskSrc,e.flipX,e.flipY,t,e.width,e.height,r]);return react_1.default.useEffect((()=>()=>{a&&"CANVAS"===a.nodeName&&konva_1.default.Util.releaseCanvas(a)}),[a]),a};function downsample(e,t,r,a,n,o,i){for(var d=new ImageData(t,r),c=new Int32Array(e.data.buffer),l=e.width,h=new Int32Array(d.data.buffer),u=d.width,s=t/o,g=r/i,f=Math.round(1/s),p=Math.round(1/g),_=f*p,m=0;m<d.height;m++)for(var v=0;v<u;v++){for(var w=a+Math.round(v/s)+(n+Math.round(m/g))*l,x=0,y=0,M=0,E=0,b=0;b<p;b++)for(var L=0;L<f;L++){var C=c[w+L+b*l];x+=C<<24>>>24,y+=C<<16>>>24,M+=C<<8>>>24,E+=C>>>24}x=Math.round(x/_),y=Math.round(y/_),M=Math.round(M/_),E=Math.round(E/_),h[v+m*u]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const n=createCanvas();n.width=e.width,n.height=e.height,null===(r=n.getContext("2d"))||void 0===r||r.drawImage(e,0,0,n.width,n.height);const o=downsample(n.getContext("2d").getImageData(0,0,n.width,n.height),Math.floor(n.width*t),Math.floor(n.height*t),0,0,n.width,n.height);return n.width=Math.floor(n.width*t),n.height=Math.floor(n.height*t),null===(a=n.getContext("2d"))||void 0===a||a.putImageData(o,0,0),n}const useCornerRadiusAndCrop=(e,t,r,a,n=0,o=!1)=>{const i=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(n*a,i/2,d/2),l=Math.max(e.width/r.width,e.height/r.height)*a,h=e.page._exportingOrRendering&&flags_1.flags.imageDownScalingEnabled&&l<1&&!o,u=0===r.x&&0===r.y&&r.width===(null==t?void 0:t.width)&&r.height===(null==t?void 0:t.height),s=react_1.default.useMemo((()=>{if(!t||!t.width||!t.height)return;return u&&0===c&&!h?void 0:createCanvas()}),[t,c,h,u]),g=()=>{if(!s||!t)return;s.width=i,s.height=d;const e=s.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(i-c,0),e.arc(i-c,c,c,3*Math.PI/2,0,!1),e.lineTo(i,d-c),e.arc(i-c,d-c,c,0,Math.PI/2,!1),e.lineTo(c,d),e.arc(c,d-c,c,Math.PI/2,Math.PI,!1),e.lineTo(0,c),e.arc(c,c,c,Math.PI,3*Math.PI/2,!1),e.clip());const a=h?downScaleCanvas(t,l):t,n=h?{x:Math.floor(r.x*l),y:Math.floor(r.y*l),width:Math.floor(r.width*l),height:Math.floor(r.height*l)}:r;e.drawImage(a,n.x,n.y,n.width,n.height,0,0,s.width,s.height)};return react_1.default.useLayoutEffect((()=>{g()}),[s,e.width,e.height,r.x,r.y,r.width,r.height,n,a,o,e.page._exportingOrRendering,h]),react_1.default.useEffect((()=>()=>{s&&"CANVAS"===s.nodeName&&konva_1.default.Util.releaseCanvas(s)}),[s]),[s||t,g]},useClip=(e,t,r,a)=>{const n=useSizeFixer(e.clipSrc||""),[o,i]=(0,use_image_1.default)(n,"anonymous"),d=e.clipSrc?i:"loaded";(0,exports.useLoader)(d,e.clipSrc,e.id);const c=react_1.default.useMemo((()=>{if(t&&o)return createCanvas()}),[t,o]);function l(){var a;if(!o)return;if(!t||!t.width||!t.height)return;if(!o||!o.width||!o.height)return;if(!c)return;const n=createCanvas(),i=Math.max(e.width/o.width*r,e.height/o.height*r);n.width=o.width*i,n.height=o.height*i,null===(a=n.getContext("2d"))||void 0===a||a.drawImage(o,0,0,n.width,n.height),c.width=Math.max(t.width,1),c.height=Math.max(t.height,1);const d=c.getContext("2d");d&&(d.save(),d.drawImage(n,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(n),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}react_1.default.useLayoutEffect((()=>{l()}),[c,t,o,e.width,e.height,r,...a]);return[e.clipSrc&&o?c:t,l]},PLACEHOLDER_CANVAS=createCanvas(),LoadingPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=react_1.default.useRef(null);return react_1.default.useEffect((()=>{const e=r.current;if(!e)return;const t=new konva_1.default.Animation((t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)}),e.getLayer());return t.start(),()=>{t.stop()}})),react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),react_1.default.createElement(react_konva_1.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))})),ErrorPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t="Can not load the video...",r=Math.max(10,Math.min(30,e.width/25));return react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),react_1.default.createElement(react_konva_1.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))}));function useVideo(e,t,r){const a=react_1.default.useRef("loading"),n=react_1.default.useRef(null),[o,i]=react_1.default.useState(0),d=react_1.default.useRef(),c=react_1.default.useRef(),l=react_1.default.useRef();return d.current===e&&c.current===t&&l.current===r||(a.current="loading",n.current=void 0,d.current=e,c.current=t,l.current=r),react_1.default.useLayoutEffect((function(){if(e){var o=document.createElement("video");return o.addEventListener("canplay",d),o.addEventListener("error",c),t&&(o.crossOrigin=t),r&&(o.referrerpolicy=r),o.src=e,o.load(),function(){o.removeEventListener("canplay",d),o.removeEventListener("error",c)}}function d(){a.current="loaded",n.current=o,n.current.currentTime=0,i(Math.random()),n.current.removeEventListener("canplay",d)}function c(e){a.current="failed",n.current=void 0,i(Math.random())}}),[e,t,r]),[n.current,a.current]}let useVideoHook=useVideo;const setVideoLoaderHook=e=>{useVideoHook=e};exports.setVideoLoaderHook=setVideoLoaderHook;const useLoader=(e,t,r)=>{const a=react_1.default.useRef(),n=()=>{var e;null===(e=a.current)||void 0===e||e.call(a),a.current=void 0};react_1.default.useEffect((()=>n),[]),react_1.default.useLayoutEffect((()=>{const o=t.slice(0,200),i=`video with id ${r} url: ${o}`;"loading"!==e||a.current||(a.current=(0,loader_1.incrementLoader)(i)),"loading"!==e&&n(),"failed"===e&&(0,loader_1.triggerLoadError)(i)}),[e])};exports.useLoader=useLoader,exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,n]=react_1.default.useState(!1),o=react_1.default.useRef(null),i=react_1.default.useRef(null),[d,c]=react_1.default.useState(!1),l=t.selectedShapes.indexOf(e)>=0,[h,u]=react_1.default.useState(!1),[s,g]=useVideoHook(e.src,"anonymous"),f=t.activePage===e.page;(0,exports.useLoader)(g,e.src,e.id),s&&(s.width=s.videoWidth,s.height=s.videoHeight,s.playsInline=!0);const p=s||PLACEHOLDER_CANVAS;react_1.default.useEffect((()=>{s&&t.history.ignore((()=>{e.set({duration:1e3*s.duration})}))}),[s]),react_1.default.useEffect((()=>{var r;if(!s)return;const a=t.animatedElementsIds,n=(!a.length||a.includes(e.id))&&t.isPlaying,i=f&&(n||h);if(!i)return void s.pause();i&&(s.currentTime=e.startTime*s.duration,s.play());const d=new konva_1.default.Animation((()=>{X()}),null===(r=o.current)||void 0===r?void 0:r.getLayer());d.start();const c=()=>{u(!1),s.currentTime=e.startTime*s.duration},l=()=>{s.currentTime>=e.endTime*s.duration&&(s.pause(),s.currentTime=e.startTime*s.duration,u(!1))};return s.addEventListener("ended",c),s.addEventListener("timeupdate",l),()=>{s.pause(),d.stop(),s.removeEventListener("ended",c),s.removeEventListener("timeupdate",l)}}),[s,h,t.isPlaying,f]),react_1.default.useEffect((()=>{s&&(s.volume=e.volume)}),[s,e.volume]);const _=react_1.default.useRef();react_1.default.useEffect((()=>{const r=(0,mobx_1.autorun)((()=>{var r,a;if(s){const n=t.animatedElementsIds;if(n.length&&!n.includes(e.id))return;const i=(t.currentTime-e.page.startTime)%e.duration;if(Math.abs(1e3*s.currentTime-i)>500||!t.isPlaying){const r=i/1e3;r!==s.currentTime&&(s.currentTime=r);4!==s.readyState&&!t.isPlaying&&!_.current&&(_.current=(0,loader_1.incrementLoader)(`video ${e.id}`))}X(),null===(a=null===(r=o.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw()}}));return()=>{r(),_.current&&(_.current(),_.current=null)}}),[t,s]),react_1.default.useEffect((()=>{if(!s)return;const t=()=>{var t,r;4!==s.readyState&&e.page._exportingOrRendering||_.current&&(X(),null===(r=null===(t=o.current)||void 0===t?void 0:t.getLayer())||void 0===r||r.batchDraw(),_.current(),_.current=null)};let r;return e.page._exportingOrRendering&&(r=setInterval(t,50)),s.addEventListener("timeupdate",t),s.addEventListener("canplay",t),()=>{clearInterval(r),s.removeEventListener("timeupdate",t),s.removeEventListener("canplay",t)}}),[e.page._exportingOrRendering,s,e.id,loader_1.incrementLoader]);let{cropX:m,cropY:v,cropWidth:w,cropHeight:x}=e;"loaded"!==g&&(m=v=0,w=x=1);const y=p.width*w,M=p.height*x,E=e.width/e.height;let b,L;const C=y/M,k="svg"===e.type;k?(b=y,L=M):E>=C?(b=y,L=y/E):(b=M*E,L=M);const I={x:p.width*m,y:p.height*v,width:b,height:L},S=null!==(r=e.cornerRadius)&&void 0!==r?r:0,[R,O]=useCornerRadiusAndCrop(e,p,I,t._elementsPixelRatio,S,a||e._cropModeEnabled||"svg"===e.type);let[T,P]=useClip(e,R,t._elementsPixelRatio,[I,S,t._elementsPixelRatio]);function X(){O(),P()}const Y=Math.max(e.width/b,e.height/L);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=o.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==i.current&&e.toggleCropMode(!1)}function n(t){e._cropModeEnabled&&t.target.parentNode!==r.content&&e.toggleCropMode(!1)}return document.body.addEventListener("click",n),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",n),document.body.removeEventListener("touchstart",n),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(o.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(o.current,e)}),{delay:100})}),[p,a,w,x,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=o.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(o.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(o.current,e)}),[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const A=react_1.default.useRef(null),D=react_1.default.useRef(null),H=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(D.current.nodes([A.current]),H.current.nodes([i.current]))}),[e._cropModeEnabled]);const W=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),n=Math.min(1,b/r),o=Math.min(1,L/a),i=1-n,d=Math.min(i,Math.max(0,Math.round(-t.target.x())/r)),c=1-o,l=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-d*p.width,y:-l*p.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:l,cropWidth:n,cropHeight:o})},V=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},q="loading"===g,F="failed"===g,z=!q&&!F,B=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),j=z?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(o,j);const N=e.selectable||"admin"===t.role,U=(0,screen_1.isTouchDevice)();return react_1.default.createElement(react_1.default.Fragment,null,q&&react_1.default.createElement(LoadingPlaceholder,{element:e}),F&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:o,name:"element",id:e.id,image:T,x:e.a.x,y:e.a.y,width:e.a.width||1,height:e.a.height||1,rotation:e.a.rotation,opacity:j,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:I,listening:N,draggable:U?e.draggable&&l:e.draggable,preventDefault:!U||l,hideInExport:!e.showInExport,onMouseEnter:()=>{c(!0)},onMouseLeave:()=>{c(!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()})},onDblClick:V,onDblTap:V,onTransformStart:()=>{n(!0),B.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,n=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),o=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const i=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-b/p.width,c=Math.min(d,Math.max(0,e.cropX)),l=1-L/p.height,h=Math.min(l,Math.max(0,e.cropY)),u=i.getActiveAnchor(),s=!(u.indexOf("middle")>=0||u.indexOf("center")>=0),g=!s&&n<1&&B.current.cropHeight>L/p.height;let f=s?e.cropWidth:e.cropWidth*n;g&&(f=e.cropWidth);const _=!s&&o<1&&B.current.cropWidth>b/p.width;let m=s?e.cropHeight:e.cropHeight*o;_&&(m=e.cropHeight),k&&(f=e.cropWidth,m=e.cropHeight),e.set({cropX:c,cropY:h,x:a.x(),y:a.y(),width:a.width()*n,height:a.height()*o,rotation:t.target.rotation(),cropWidth:Math.min(f,1-c),cropHeight:Math.min(m,1-h)})},onTransformEnd:t=>{const r=t.currentTarget;e.set({width:r.width(),height:r.height(),x:r.x(),y:r.y(),rotation:t.target.rotation(),cropWidth:b/p.width,cropHeight:L/p.height}),n(!1)}}),react_1.default.createElement(react_konva_1.Rect,{x:e.a.x,y:e.a.y,width:Math.max(e.a.width-e.borderSize,0),height:Math.max(e.a.height-e.borderSize,0),opacity:j,offsetX:-e.borderSize/2,offsetY:-e.borderSize/2,stroke:e.borderColor,strokeWidth:e.borderSize,listening:!1,visible:!!e.borderSize,rotation:e.rotation,cornerRadius:Math.max(0,S-e.borderSize),hideInExport:!e.showInExport}),!t.isPlaying&&react_1.default.createElement(react_konva_1.Image,{image:h?pauseIcon:playIcon,x:e.a.x,y:e.a.y,offsetX:-e.a.width/2+15/t.scale,offsetY:-e.a.height/2+15/t.scale,rotation:e.a.rotation,width:30/t.scale,height:30/t.scale,hideInExport:!0,onClick:()=>u(!h),onTap:()=>u(!h)}),e._cropModeEnabled&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Rect,{x:-window.innerWidth/t.scale,y:-window.innerWidth/t.scale,width:window.innerWidth/t.scale*3,height:window.innerWidth/t.scale*3,fill:"rgba(0,0,0,0.3)"}),react_1.default.createElement(react_konva_1.Image,{listening:!1,image:T,x:e.a.x,y:e.a.y,width:e.a.width,height:e.a.height,rotation:e.a.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation,scaleX:Y,scaleY:Y},react_1.default.createElement(react_konva_1.Image,{image:p,ref:i,opacity:.4,draggable:!0,x:-e.cropX*p.width,y:-e.cropY*p.height,onDragMove:W,onTransform:W}),react_1.default.createElement(react_konva_1.Transformer,{ref:H,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),react_1.default.createElement(react_konva_1.Rect,{width:b,height:L,ref:A,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*p.width-1e-9&&(t.target.x(-e.cropX*p.width),t.target.scaleX(1)),t.target.y()<-e.cropY*p.height-1e-9&&(t.target.y(-e.cropY*p.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/p.width)),a=Math.min(1,Math.max(0,t.target.y()/p.height+e.cropY)),n=t.target.width()*t.target.scaleX(),o=t.target.height()*t.target.scaleY(),i=Math.min(1-r,n/p.width),d=Math.min(1-a,o/p.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:i,cropHeight:d,width:Math.min(n*Y,p.width*(1-r)*Y),height:Math.min(o*Y,p.height*(1-a)*Y)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:D,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,keepRatio:!1,rotateEnabled:!1,anchorFill:"rgb(240, 240, 240)",anchorStrokeWidth:2,borderStrokeWidth:2}))),(d||l)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,n)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(null!=t)for(var a=e(t),n=0;n<a.length;n++)"default"!==a[n]&&__createBinding(r,t,a[n]);return __setModuleDefault(r,t),r}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.VideoElement=exports.useLoader=exports.setVideoLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),svg=__importStar(require("../utils/svg")),flags_1=require("../utils/flags"),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein"),screen_1=require("../utils/screen");function createCanvas(){return document.createElement("canvas")}async function getFixedUrl(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await svg.urlToString(e),r=svg.fixSize(t);return svg.svgToURL(r)}const useSizeFixer=e=>{const[t,r]=react_1.default.useState(e);return react_1.default.useEffect((()=>{(async()=>{const a=await getFixedUrl(e);a!==t&&r(a)})()}),[e]),t},playIcon=new window.Image;playIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" fill="white"/>\n <path d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const pauseIcon=new window.Image;pauseIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" fill="white"/>\n <path opacity="0.6" d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" fill="white"/>\n <path d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const useFlip=(e,t,r)=>{const a=react_1.default.useMemo((()=>{var a,n;const{flipX:o,flipY:i}=e,d="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0,c=navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&d||e.maskSrc;if(!o&&!i&&!c)return t;if(!t||!t.width||!t.height)return null;const l=createCanvas();let h=1;"svg"===e.type&&(h=Math.max(e.width/t.width*r,e.height/t.height*r)),l.width=Math.max(t.width*h,1),l.height=Math.max(t.height*h,1);let u=o?-l.width:0,s=i?-l.height:0;return null===(a=l.getContext("2d"))||void 0===a||a.scale(o?-1:1,i?-1:1),null===(n=l.getContext("2d"))||void 0===n||n.drawImage(t,u,s,l.width,l.height),l}),[e.maskSrc,e.flipX,e.flipY,t,e.width,e.height,r]);return react_1.default.useEffect((()=>()=>{a&&"CANVAS"===a.nodeName&&konva_1.default.Util.releaseCanvas(a)}),[a]),a};function downsample(e,t,r,a,n,o,i){for(var d=new ImageData(t,r),c=new Int32Array(e.data.buffer),l=e.width,h=new Int32Array(d.data.buffer),u=d.width,s=t/o,g=r/i,f=Math.round(1/s),p=Math.round(1/g),_=f*p,m=0;m<d.height;m++)for(var v=0;v<u;v++){for(var w=a+Math.round(v/s)+(n+Math.round(m/g))*l,x=0,y=0,M=0,E=0,b=0;b<p;b++)for(var L=0;L<f;L++){var C=c[w+L+b*l];x+=C<<24>>>24,y+=C<<16>>>24,M+=C<<8>>>24,E+=C>>>24}x=Math.round(x/_),y=Math.round(y/_),M=Math.round(M/_),E=Math.round(E/_),h[v+m*u]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const n=createCanvas();n.width=e.width,n.height=e.height,null===(r=n.getContext("2d"))||void 0===r||r.drawImage(e,0,0,n.width,n.height);const o=downsample(n.getContext("2d").getImageData(0,0,n.width,n.height),Math.floor(n.width*t),Math.floor(n.height*t),0,0,n.width,n.height);return n.width=Math.floor(n.width*t),n.height=Math.floor(n.height*t),null===(a=n.getContext("2d"))||void 0===a||a.putImageData(o,0,0),n}const useCornerRadiusAndCrop=(e,t,r,a,n=0,o=!1)=>{const i=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(n*a,i/2,d/2),l=Math.max(e.width/r.width,e.height/r.height)*a,h=e.page._exportingOrRendering&&flags_1.flags.imageDownScalingEnabled&&l<1&&!o,u=0===r.x&&0===r.y&&r.width===(null==t?void 0:t.width)&&r.height===(null==t?void 0:t.height),s=react_1.default.useMemo((()=>{if(!t||!t.width||!t.height)return;return u&&0===c&&!h?void 0:createCanvas()}),[t,c,h,u]),g=()=>{if(!s||!t)return;s.width=i,s.height=d;const e=s.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(i-c,0),e.arc(i-c,c,c,3*Math.PI/2,0,!1),e.lineTo(i,d-c),e.arc(i-c,d-c,c,0,Math.PI/2,!1),e.lineTo(c,d),e.arc(c,d-c,c,Math.PI/2,Math.PI,!1),e.lineTo(0,c),e.arc(c,c,c,Math.PI,3*Math.PI/2,!1),e.clip());const a=h?downScaleCanvas(t,l):t,n=h?{x:Math.floor(r.x*l),y:Math.floor(r.y*l),width:Math.floor(r.width*l),height:Math.floor(r.height*l)}:r;e.drawImage(a,n.x,n.y,n.width,n.height,0,0,s.width,s.height)};return react_1.default.useLayoutEffect((()=>{g()}),[s,e.width,e.height,r.x,r.y,r.width,r.height,n,a,o,e.page._exportingOrRendering,h]),react_1.default.useEffect((()=>()=>{s&&"CANVAS"===s.nodeName&&konva_1.default.Util.releaseCanvas(s)}),[s]),[s||t,g]},useClip=(e,t,r,a)=>{const n=useSizeFixer(e.clipSrc||""),[o,i]=(0,use_image_1.default)(n,"anonymous"),d=e.clipSrc?i:"loaded";(0,exports.useLoader)(d,e.clipSrc,e.id);const c=react_1.default.useMemo((()=>{if(t&&o)return createCanvas()}),[t,o]);function l(){var a;if(!o)return;if(!t||!t.width||!t.height)return;if(!o||!o.width||!o.height)return;if(!c)return;const n=createCanvas(),i=Math.max(e.width/o.width*r,e.height/o.height*r);n.width=o.width*i,n.height=o.height*i,null===(a=n.getContext("2d"))||void 0===a||a.drawImage(o,0,0,n.width,n.height),c.width=Math.max(t.width,1),c.height=Math.max(t.height,1);const d=c.getContext("2d");d&&(d.save(),d.drawImage(n,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(n),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}react_1.default.useLayoutEffect((()=>{l()}),[c,t,o,e.width,e.height,r,...a]);return[e.clipSrc&&o?c:t,l]},PLACEHOLDER_CANVAS=createCanvas(),LoadingPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=react_1.default.useRef(null);return react_1.default.useEffect((()=>{const e=r.current;if(!e)return;const t=new konva_1.default.Animation((t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)}),e.getLayer());return t.start(),()=>{t.stop()}})),react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),react_1.default.createElement(react_konva_1.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))})),ErrorPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t="Can not load the video...",r=Math.max(10,Math.min(30,e.width/25));return react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),react_1.default.createElement(react_konva_1.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))}));function useVideo(e,t,r){const a=react_1.default.useRef("loading"),n=react_1.default.useRef(null),[o,i]=react_1.default.useState(0),d=react_1.default.useRef(),c=react_1.default.useRef(),l=react_1.default.useRef();return d.current===e&&c.current===t&&l.current===r||(a.current="loading",n.current=void 0,d.current=e,c.current=t,l.current=r),react_1.default.useLayoutEffect((function(){if(e){var o=document.createElement("video");return o.addEventListener("canplay",d),o.addEventListener("error",c),t&&(o.crossOrigin=t),r&&(o.referrerpolicy=r),o.src=e,o.load(),function(){o.removeEventListener("canplay",d),o.removeEventListener("error",c)}}function d(){a.current="loaded",n.current=o,n.current.currentTime=0,i(Math.random()),n.current.removeEventListener("canplay",d)}function c(e){a.current="failed",n.current=void 0,i(Math.random())}}),[e,t,r]),[n.current,a.current]}let useVideoHook=useVideo;const setVideoLoaderHook=e=>{useVideoHook=e};exports.setVideoLoaderHook=setVideoLoaderHook;const useLoader=(e,t,r)=>{const a=react_1.default.useRef(),n=()=>{var e;null===(e=a.current)||void 0===e||e.call(a),a.current=void 0};react_1.default.useEffect((()=>n),[]),react_1.default.useLayoutEffect((()=>{const o=t.slice(0,200),i=`video with id ${r} url: ${o}`;"loading"!==e||a.current||(a.current=(0,loader_1.incrementLoader)(i)),"loading"!==e&&n(),"failed"===e&&(0,loader_1.triggerLoadError)(i)}),[e])};exports.useLoader=useLoader,exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,n]=react_1.default.useState(!1),o=react_1.default.useRef(null),i=react_1.default.useRef(null),[d,c]=react_1.default.useState(!1),l=t.selectedShapes.indexOf(e)>=0,[h,u]=react_1.default.useState(!1),[s,g]=useVideoHook(e.src,"anonymous"),f=t.activePage===e.page;(0,exports.useLoader)(g,e.src,e.id),s&&(s.width=s.videoWidth,s.height=s.videoHeight,s.playsInline=!0);const p=s||PLACEHOLDER_CANVAS;react_1.default.useEffect((()=>{s&&t.history.ignore((()=>{e.set({duration:1e3*s.duration})}))}),[s]),react_1.default.useEffect((()=>{var r;if(!s)return;const a=t.animatedElementsIds,n=(!a.length||a.includes(e.id))&&t.isPlaying,i=f&&(n||h);if(!i)return void s.pause();i&&(s.currentTime=e.startTime*s.duration,s.play());const d=new konva_1.default.Animation((()=>{X()}),null===(r=o.current)||void 0===r?void 0:r.getLayer());d.start();const c=()=>{u(!1),s.currentTime=e.startTime*s.duration},l=()=>{s.currentTime>=e.endTime*s.duration&&(s.pause(),s.currentTime=e.startTime*s.duration,u(!1))};return s.addEventListener("ended",c),s.addEventListener("timeupdate",l),()=>{s.pause(),d.stop(),s.removeEventListener("ended",c),s.removeEventListener("timeupdate",l)}}),[s,h,t.isPlaying,f]),react_1.default.useEffect((()=>{s&&(s.volume=e.volume)}),[s,e.volume]);const _=react_1.default.useRef();react_1.default.useEffect((()=>{const r=(0,mobx_1.autorun)((()=>{var r,a;if(s){const n=t.animatedElementsIds;if(n.length&&!n.includes(e.id))return;const i=(t.currentTime-e.page.startTime)%e.duration;if(Math.abs(1e3*s.currentTime-i)>500||!t.isPlaying){const r=i/1e3;r!==s.currentTime&&(s.currentTime=r);4!==s.readyState&&!t.isPlaying&&!_.current&&(_.current=(0,loader_1.incrementLoader)(`video ${e.id}`))}X(),null===(a=null===(r=o.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw()}}));return()=>{r(),_.current&&(_.current(),_.current=null)}}),[t,s]),react_1.default.useEffect((()=>{if(!s)return;const t=()=>{var t,r;4!==s.readyState&&e.page._exportingOrRendering||_.current&&(X(),null===(r=null===(t=o.current)||void 0===t?void 0:t.getLayer())||void 0===r||r.batchDraw(),_.current(),_.current=null)};let r;return e.page._exportingOrRendering&&(r=setInterval(t,50)),s.addEventListener("timeupdate",t),s.addEventListener("canplay",t),()=>{clearInterval(r),s.removeEventListener("timeupdate",t),s.removeEventListener("canplay",t)}}),[e.page._exportingOrRendering,s,e.id,loader_1.incrementLoader]);let{cropX:m,cropY:v,cropWidth:w,cropHeight:x}=e;"loaded"!==g&&(m=v=0,w=x=1);const y=p.width*w,M=p.height*x,E=e.width/e.height;let b,L;const C=y/M,k="svg"===e.type;k?(b=y,L=M):E>=C?(b=y,L=y/E):(b=M*E,L=M);const I={x:p.width*m,y:p.height*v,width:b,height:L},S=null!==(r=e.cornerRadius)&&void 0!==r?r:0,[R,O]=useCornerRadiusAndCrop(e,p,I,t._elementsPixelRatio,S,a||e._cropModeEnabled||"svg"===e.type);let[T,P]=useClip(e,R,t._elementsPixelRatio,[I,S,t._elementsPixelRatio]);function X(){O(),P()}const Y=Math.max(e.width/b,e.height/L);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=o.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==i.current&&e.toggleCropMode(!1)}function n(t){e._cropModeEnabled&&t.target.parentNode!==r.content&&e.toggleCropMode(!1)}return document.body.addEventListener("click",n),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",n),document.body.removeEventListener("touchstart",n),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(o.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(o.current,e)}),{delay:100})}),[p,a,w,x,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=o.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(o.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(o.current,e)}),[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const A=react_1.default.useRef(null),D=react_1.default.useRef(null),H=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(D.current.nodes([A.current]),H.current.nodes([i.current]))}),[e._cropModeEnabled]);const W=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),n=Math.min(1,b/r),o=Math.min(1,L/a),i=1-n,d=Math.min(i,Math.max(0,Math.round(-t.target.x())/r)),c=1-o,l=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-d*p.width,y:-l*p.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:l,cropWidth:n,cropHeight:o})},V=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},q="loading"===g,F="failed"===g,z=!q&&!F,B=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),j=z?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(o,j);const N=e.selectable||"admin"===t.role,U=(0,screen_1.isTouchDevice)();return react_1.default.createElement(react_1.default.Fragment,null,q&&react_1.default.createElement(LoadingPlaceholder,{element:e}),F&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:o,name:"element",id:e.id,image:T,x:e.a.x,y:e.a.y,width:e.a.width||1,height:e.a.height||1,rotation:e.a.rotation,opacity:j,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:I,listening:N,draggable:U?e.draggable&&l:e.draggable,preventDefault:!U||l,hideInExport:!e.showInExport,onMouseEnter:()=>{c(!0)},onMouseLeave:()=>{c(!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()})},onDblClick:V,onDblTap:V,onTransformStart:()=>{n(!0),B.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,n=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),o=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const i=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-b/p.width,c=Math.min(d,Math.max(0,e.cropX)),l=1-L/p.height,h=Math.min(l,Math.max(0,e.cropY)),u=i.getActiveAnchor(),s=!(u.indexOf("middle")>=0||u.indexOf("center")>=0),g=!s&&n<1&&B.current.cropHeight>L/p.height;let f=s?e.cropWidth:e.cropWidth*n;g&&(f=e.cropWidth);const _=!s&&o<1&&B.current.cropWidth>b/p.width;let m=s?e.cropHeight:e.cropHeight*o;_&&(m=e.cropHeight),k&&(f=e.cropWidth,m=e.cropHeight),e.set({cropX:c,cropY:h,x:a.x(),y:a.y(),width:a.width()*n,height:a.height()*o,rotation:t.target.rotation(),cropWidth:Math.min(f,1-c),cropHeight:Math.min(m,1-h)})},onTransformEnd:t=>{const r=t.currentTarget;e.set({width:r.width(),height:r.height(),x:r.x(),y:r.y(),rotation:t.target.rotation(),cropWidth:b/p.width,cropHeight:L/p.height}),n(!1)}}),react_1.default.createElement(react_konva_1.Rect,{x:e.a.x,y:e.a.y,width:Math.max(e.a.width-e.borderSize,0),height:Math.max(e.a.height-e.borderSize,0),opacity:j,offsetX:-e.borderSize/2,offsetY:-e.borderSize/2,stroke:e.borderColor,strokeWidth:e.borderSize,listening:!1,visible:!!e.borderSize,rotation:e.rotation,cornerRadius:Math.max(0,S-e.borderSize),hideInExport:!e.showInExport}),!t.isPlaying&&react_1.default.createElement(react_konva_1.Image,{image:h?pauseIcon:playIcon,x:e.a.x,y:e.a.y,offsetX:-e.a.width/2+15/t.scale,offsetY:-e.a.height/2+15/t.scale,rotation:e.a.rotation,width:30/t.scale,height:30/t.scale,hideInExport:!0,onClick:()=>u(!h),onTap:()=>u(!h)}),e._cropModeEnabled&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Rect,{x:-window.innerWidth/t.scale,y:-window.innerWidth/t.scale,width:window.innerWidth/t.scale*3,height:window.innerWidth/t.scale*3,fill:"rgba(0,0,0,0.3)"}),react_1.default.createElement(react_konva_1.Image,{listening:!1,image:T,x:e.a.x,y:e.a.y,width:e.a.width,height:e.a.height,rotation:e.a.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.a.x,y:e.a.y,rotation:e.a.rotation,scaleX:Y,scaleY:Y},react_1.default.createElement(react_konva_1.Image,{image:p,ref:i,opacity:.4,draggable:!0,x:-e.cropX*p.width,y:-e.cropY*p.height,onDragMove:W,onTransform:W}),react_1.default.createElement(react_konva_1.Transformer,{ref:H,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),react_1.default.createElement(react_konva_1.Rect,{width:b,height:L,ref:A,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*p.width-1e-9&&(t.target.x(-e.cropX*p.width),t.target.scaleX(1)),t.target.y()<-e.cropY*p.height-1e-9&&(t.target.y(-e.cropY*p.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/p.width)),a=Math.min(1,Math.max(0,t.target.y()/p.height+e.cropY)),n=t.target.width()*t.target.scaleX(),o=t.target.height()*t.target.scaleY(),i=Math.min(1-r,n/p.width),d=Math.min(1-a,o/p.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:i,cropHeight:d,width:Math.min(n*Y,p.width*(1-r)*Y),height:Math.min(o*Y,p.height*(1-a)*Y)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:D,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,keepRatio:!1,rotateEnabled:!1,anchorFill:"rgb(240, 240, 240)",anchorStrokeWidth:2,borderStrokeWidth:2,visible:e.resizable}))),(d||l)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
package/config.d.ts CHANGED
@@ -14,6 +14,7 @@ export { setTranslations, getTranslations } from './utils/l10n';
14
14
  export { registerNextDomDrop as unstable_registerNextDomDrop } from './canvas/page';
15
15
  export { getGoogleFontsListAPI, getGoogleFontImage, setAPI } from './utils/api';
16
16
  export { setColorsPresetFunc } from './toolbar/color-picker';
17
+ export { setQuillFormats as unstable_setQuillFormats } from './canvas/html-element';
17
18
  export { useDownScaling } from './utils/flags';
18
19
  export { useRemoveBackground as unstable_setRemoveBackgroundEnabled } from './utils/flags';
19
20
  export { useHtmlTextRender as unstable_useHtmlTextRender } from './utils/flags';
package/config.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unstable_setAnimationsEnabled=exports.unstable_setTextVerticalResizeEnabled=exports.unstable_setTextOverflow=exports.unstable_setTextSplitAllowed=exports.unstable_setForceTextFit=exports.unstable_useHtmlTextRender=exports.unstable_setRemoveBackgroundEnabled=exports.useDownScaling=exports.setColorsPresetFunc=exports.setAPI=exports.getGoogleFontImage=exports.getGoogleFontsListAPI=exports.unstable_registerNextDomDrop=exports.getTranslations=exports.setTranslations=exports.unstable_setSnapFilterFunc=exports.setFontLoadTimeout=exports.setAssetLoadTimeout=exports.onLoadError=exports.unstable_registerToolbarComponent=exports.unstable_registerTransformerAttrs=exports.unstable_registerShapeComponent=exports.unstable_registerShapeModel=exports.unstable_setImageLoaderHook=exports.setTransformerStyle=exports.setHighlighterStyle=exports.toggleFadeInAnimation=exports.setUploadFunc=exports.setGoogleFontsVariants=exports.replaceGlobalFonts=exports.removeGlobalFont=exports.addGlobalFont=exports.setGoogleFonts=void 0;var fonts_1=require("./utils/fonts");Object.defineProperty(exports,"setGoogleFonts",{enumerable:!0,get:function(){return fonts_1.setGoogleFonts}}),Object.defineProperty(exports,"addGlobalFont",{enumerable:!0,get:function(){return fonts_1.addGlobalFont}}),Object.defineProperty(exports,"removeGlobalFont",{enumerable:!0,get:function(){return fonts_1.removeGlobalFont}}),Object.defineProperty(exports,"replaceGlobalFonts",{enumerable:!0,get:function(){return fonts_1.replaceGlobalFonts}}),Object.defineProperty(exports,"setGoogleFontsVariants",{enumerable:!0,get:function(){return fonts_1.setGoogleFontsVariants}});var upload_panel_1=require("./side-panel/upload-panel");Object.defineProperty(exports,"setUploadFunc",{enumerable:!0,get:function(){return upload_panel_1.setUploadFunc}});var use_fadein_1=require("./canvas/use-fadein");Object.defineProperty(exports,"toggleFadeInAnimation",{enumerable:!0,get:function(){return use_fadein_1.toggleFadeInAnimation}});var highlighter_1=require("./canvas/highlighter");Object.defineProperty(exports,"setHighlighterStyle",{enumerable:!0,get:function(){return highlighter_1.setHighlighterStyle}});var page_1=require("./canvas/page");Object.defineProperty(exports,"setTransformerStyle",{enumerable:!0,get:function(){return page_1.setTransformerStyle}});var image_element_1=require("./canvas/image-element");Object.defineProperty(exports,"unstable_setImageLoaderHook",{enumerable:!0,get:function(){return image_element_1.setImageLoaderHook}});var group_model_1=require("./model/group-model");Object.defineProperty(exports,"unstable_registerShapeModel",{enumerable:!0,get:function(){return group_model_1.registerShapeModel}});var element_1=require("./canvas/element");Object.defineProperty(exports,"unstable_registerShapeComponent",{enumerable:!0,get:function(){return element_1.registerShapeComponent}});var page_2=require("./canvas/page");Object.defineProperty(exports,"unstable_registerTransformerAttrs",{enumerable:!0,get:function(){return page_2.registerTransformerAttrs}});var toolbar_1=require("./toolbar/toolbar");Object.defineProperty(exports,"unstable_registerToolbarComponent",{enumerable:!0,get:function(){return toolbar_1.registerToolbarComponent}});var loader_1=require("./utils/loader");Object.defineProperty(exports,"onLoadError",{enumerable:!0,get:function(){return loader_1.onLoadError}}),Object.defineProperty(exports,"setAssetLoadTimeout",{enumerable:!0,get:function(){return loader_1.setAssetLoadTimeout}}),Object.defineProperty(exports,"setFontLoadTimeout",{enumerable:!0,get:function(){return loader_1.setFontLoadTimeout}});var use_transformer_snap_1=require("./canvas/use-transformer-snap");Object.defineProperty(exports,"unstable_setSnapFilterFunc",{enumerable:!0,get:function(){return use_transformer_snap_1.setSnapFilterFunc}});var l10n_1=require("./utils/l10n");Object.defineProperty(exports,"setTranslations",{enumerable:!0,get:function(){return l10n_1.setTranslations}}),Object.defineProperty(exports,"getTranslations",{enumerable:!0,get:function(){return l10n_1.getTranslations}});var page_3=require("./canvas/page");Object.defineProperty(exports,"unstable_registerNextDomDrop",{enumerable:!0,get:function(){return page_3.registerNextDomDrop}});var api_1=require("./utils/api");Object.defineProperty(exports,"getGoogleFontsListAPI",{enumerable:!0,get:function(){return api_1.getGoogleFontsListAPI}}),Object.defineProperty(exports,"getGoogleFontImage",{enumerable:!0,get:function(){return api_1.getGoogleFontImage}}),Object.defineProperty(exports,"setAPI",{enumerable:!0,get:function(){return api_1.setAPI}});var color_picker_1=require("./toolbar/color-picker");Object.defineProperty(exports,"setColorsPresetFunc",{enumerable:!0,get:function(){return color_picker_1.setColorsPresetFunc}});var flags_1=require("./utils/flags");Object.defineProperty(exports,"useDownScaling",{enumerable:!0,get:function(){return flags_1.useDownScaling}});var flags_2=require("./utils/flags");Object.defineProperty(exports,"unstable_setRemoveBackgroundEnabled",{enumerable:!0,get:function(){return flags_2.useRemoveBackground}});var flags_3=require("./utils/flags");Object.defineProperty(exports,"unstable_useHtmlTextRender",{enumerable:!0,get:function(){return flags_3.useHtmlTextRender}});var flags_4=require("./utils/flags");Object.defineProperty(exports,"unstable_setForceTextFit",{enumerable:!0,get:function(){return flags_4.setForceTextFit}});var flags_5=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextSplitAllowed",{enumerable:!0,get:function(){return flags_5.setTextSplitAllowed}});var flags_6=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextOverflow",{enumerable:!0,get:function(){return flags_6.setTextOverflow}});var flags_7=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextVerticalResizeEnabled",{enumerable:!0,get:function(){return flags_7.setTextVerticalResizeEnabled}});var flags_8=require("./utils/flags");Object.defineProperty(exports,"unstable_setAnimationsEnabled",{enumerable:!0,get:function(){return flags_8.setAnimationsEnabled}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unstable_setAnimationsEnabled=exports.unstable_setTextVerticalResizeEnabled=exports.unstable_setTextOverflow=exports.unstable_setTextSplitAllowed=exports.unstable_setForceTextFit=exports.unstable_useHtmlTextRender=exports.unstable_setRemoveBackgroundEnabled=exports.useDownScaling=exports.unstable_setQuillFormats=exports.setColorsPresetFunc=exports.setAPI=exports.getGoogleFontImage=exports.getGoogleFontsListAPI=exports.unstable_registerNextDomDrop=exports.getTranslations=exports.setTranslations=exports.unstable_setSnapFilterFunc=exports.setFontLoadTimeout=exports.setAssetLoadTimeout=exports.onLoadError=exports.unstable_registerToolbarComponent=exports.unstable_registerTransformerAttrs=exports.unstable_registerShapeComponent=exports.unstable_registerShapeModel=exports.unstable_setImageLoaderHook=exports.setTransformerStyle=exports.setHighlighterStyle=exports.toggleFadeInAnimation=exports.setUploadFunc=exports.setGoogleFontsVariants=exports.replaceGlobalFonts=exports.removeGlobalFont=exports.addGlobalFont=exports.setGoogleFonts=void 0;var fonts_1=require("./utils/fonts");Object.defineProperty(exports,"setGoogleFonts",{enumerable:!0,get:function(){return fonts_1.setGoogleFonts}}),Object.defineProperty(exports,"addGlobalFont",{enumerable:!0,get:function(){return fonts_1.addGlobalFont}}),Object.defineProperty(exports,"removeGlobalFont",{enumerable:!0,get:function(){return fonts_1.removeGlobalFont}}),Object.defineProperty(exports,"replaceGlobalFonts",{enumerable:!0,get:function(){return fonts_1.replaceGlobalFonts}}),Object.defineProperty(exports,"setGoogleFontsVariants",{enumerable:!0,get:function(){return fonts_1.setGoogleFontsVariants}});var upload_panel_1=require("./side-panel/upload-panel");Object.defineProperty(exports,"setUploadFunc",{enumerable:!0,get:function(){return upload_panel_1.setUploadFunc}});var use_fadein_1=require("./canvas/use-fadein");Object.defineProperty(exports,"toggleFadeInAnimation",{enumerable:!0,get:function(){return use_fadein_1.toggleFadeInAnimation}});var highlighter_1=require("./canvas/highlighter");Object.defineProperty(exports,"setHighlighterStyle",{enumerable:!0,get:function(){return highlighter_1.setHighlighterStyle}});var page_1=require("./canvas/page");Object.defineProperty(exports,"setTransformerStyle",{enumerable:!0,get:function(){return page_1.setTransformerStyle}});var image_element_1=require("./canvas/image-element");Object.defineProperty(exports,"unstable_setImageLoaderHook",{enumerable:!0,get:function(){return image_element_1.setImageLoaderHook}});var group_model_1=require("./model/group-model");Object.defineProperty(exports,"unstable_registerShapeModel",{enumerable:!0,get:function(){return group_model_1.registerShapeModel}});var element_1=require("./canvas/element");Object.defineProperty(exports,"unstable_registerShapeComponent",{enumerable:!0,get:function(){return element_1.registerShapeComponent}});var page_2=require("./canvas/page");Object.defineProperty(exports,"unstable_registerTransformerAttrs",{enumerable:!0,get:function(){return page_2.registerTransformerAttrs}});var toolbar_1=require("./toolbar/toolbar");Object.defineProperty(exports,"unstable_registerToolbarComponent",{enumerable:!0,get:function(){return toolbar_1.registerToolbarComponent}});var loader_1=require("./utils/loader");Object.defineProperty(exports,"onLoadError",{enumerable:!0,get:function(){return loader_1.onLoadError}}),Object.defineProperty(exports,"setAssetLoadTimeout",{enumerable:!0,get:function(){return loader_1.setAssetLoadTimeout}}),Object.defineProperty(exports,"setFontLoadTimeout",{enumerable:!0,get:function(){return loader_1.setFontLoadTimeout}});var use_transformer_snap_1=require("./canvas/use-transformer-snap");Object.defineProperty(exports,"unstable_setSnapFilterFunc",{enumerable:!0,get:function(){return use_transformer_snap_1.setSnapFilterFunc}});var l10n_1=require("./utils/l10n");Object.defineProperty(exports,"setTranslations",{enumerable:!0,get:function(){return l10n_1.setTranslations}}),Object.defineProperty(exports,"getTranslations",{enumerable:!0,get:function(){return l10n_1.getTranslations}});var page_3=require("./canvas/page");Object.defineProperty(exports,"unstable_registerNextDomDrop",{enumerable:!0,get:function(){return page_3.registerNextDomDrop}});var api_1=require("./utils/api");Object.defineProperty(exports,"getGoogleFontsListAPI",{enumerable:!0,get:function(){return api_1.getGoogleFontsListAPI}}),Object.defineProperty(exports,"getGoogleFontImage",{enumerable:!0,get:function(){return api_1.getGoogleFontImage}}),Object.defineProperty(exports,"setAPI",{enumerable:!0,get:function(){return api_1.setAPI}});var color_picker_1=require("./toolbar/color-picker");Object.defineProperty(exports,"setColorsPresetFunc",{enumerable:!0,get:function(){return color_picker_1.setColorsPresetFunc}});var html_element_1=require("./canvas/html-element");Object.defineProperty(exports,"unstable_setQuillFormats",{enumerable:!0,get:function(){return html_element_1.setQuillFormats}});var flags_1=require("./utils/flags");Object.defineProperty(exports,"useDownScaling",{enumerable:!0,get:function(){return flags_1.useDownScaling}});var flags_2=require("./utils/flags");Object.defineProperty(exports,"unstable_setRemoveBackgroundEnabled",{enumerable:!0,get:function(){return flags_2.useRemoveBackground}});var flags_3=require("./utils/flags");Object.defineProperty(exports,"unstable_useHtmlTextRender",{enumerable:!0,get:function(){return flags_3.useHtmlTextRender}});var flags_4=require("./utils/flags");Object.defineProperty(exports,"unstable_setForceTextFit",{enumerable:!0,get:function(){return flags_4.setForceTextFit}});var flags_5=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextSplitAllowed",{enumerable:!0,get:function(){return flags_5.setTextSplitAllowed}});var flags_6=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextOverflow",{enumerable:!0,get:function(){return flags_6.setTextOverflow}});var flags_7=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextVerticalResizeEnabled",{enumerable:!0,get:function(){return flags_7.setTextVerticalResizeEnabled}});var flags_8=require("./utils/flags");Object.defineProperty(exports,"unstable_setAnimationsEnabled",{enumerable:!0,get:function(){return flags_8.setAnimationsEnabled}});
@@ -31,6 +31,9 @@ export declare const FigureElement: import("mobx-state-tree").IModelType<{
31
31
  brightness: import("mobx-state-tree").IType<number, number, number>;
32
32
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
33
33
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
34
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
35
+ intensity: import("mobx-state-tree").IType<number, number, number>;
36
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
34
37
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
35
38
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
36
39
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -120,6 +123,7 @@ export declare const FigureElement: import("mobx-state-tree").IModelType<{
120
123
  animated(attr: any): any;
121
124
  } & {
122
125
  setAnimation(type: any, attrs: any): void;
126
+ setFilter(type: any, value: any): void;
123
127
  }, import("mobx-state-tree").ModelCreationType<{
124
128
  id: string;
125
129
  type: string;
@@ -61,6 +61,9 @@ export declare const TYPES_MAP: {
61
61
  brightness: import("mobx-state-tree").IType<number, number, number>;
62
62
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
63
63
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
64
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
65
+ intensity: import("mobx-state-tree").IType<number, number, number>;
66
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
64
67
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
65
68
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
66
69
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -159,6 +162,7 @@ export declare const TYPES_MAP: {
159
162
  animated(attr: any): any;
160
163
  } & {
161
164
  setAnimation(type: any, attrs: any): void;
165
+ setFilter(type: any, value: any): void;
162
166
  } & {
163
167
  replaceColor(oldColor: any, newColor: any): void;
164
168
  }, any, {}>;
@@ -194,6 +198,9 @@ export declare const TYPES_MAP: {
194
198
  brightness: import("mobx-state-tree").IType<number, number, number>;
195
199
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
196
200
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
201
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
202
+ intensity: import("mobx-state-tree").IType<number, number, number>;
203
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
197
204
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
198
205
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
199
206
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -299,6 +306,7 @@ export declare const TYPES_MAP: {
299
306
  animated(attr: any): any;
300
307
  } & {
301
308
  setAnimation(type: any, attrs: any): void;
309
+ setFilter(type: any, value: any): void;
302
310
  } & {
303
311
  toggleEditMode(editing?: boolean): void;
304
312
  }, import("mobx-state-tree").ModelCreationType<{
@@ -345,6 +353,9 @@ export declare const TYPES_MAP: {
345
353
  brightness: import("mobx-state-tree").IType<number, number, number>;
346
354
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
347
355
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
356
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
357
+ intensity: import("mobx-state-tree").IType<number, number, number>;
358
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
348
359
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
349
360
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
350
361
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -443,6 +454,7 @@ export declare const TYPES_MAP: {
443
454
  animated(attr: any): any;
444
455
  } & {
445
456
  setAnimation(type: any, attrs: any): void;
457
+ setFilter(type: any, value: any): void;
446
458
  } & {
447
459
  toggleCropMode(flag?: boolean): void;
448
460
  beforeDestroy(): void;
@@ -491,6 +503,9 @@ export declare const TYPES_MAP: {
491
503
  brightness: import("mobx-state-tree").IType<number, number, number>;
492
504
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
493
505
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
506
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
507
+ intensity: import("mobx-state-tree").IType<number, number, number>;
508
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
494
509
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
495
510
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
496
511
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -580,6 +595,7 @@ export declare const TYPES_MAP: {
580
595
  animated(attr: any): any;
581
596
  } & {
582
597
  setAnimation(type: any, attrs: any): void;
598
+ setFilter(type: any, value: any): void;
583
599
  }, import("mobx-state-tree").ModelCreationType<{
584
600
  id: string;
585
601
  type: string;
@@ -624,6 +640,9 @@ export declare const TYPES_MAP: {
624
640
  brightness: import("mobx-state-tree").IType<number, number, number>;
625
641
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
626
642
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
643
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
644
+ intensity: import("mobx-state-tree").IType<number, number, number>;
645
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
627
646
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
628
647
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
629
648
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -728,6 +747,7 @@ export declare const TYPES_MAP: {
728
747
  animated(attr: any): any;
729
748
  } & {
730
749
  setAnimation(type: any, attrs: any): void;
750
+ setFilter(type: any, value: any): void;
731
751
  } & {
732
752
  toggleCropMode(flag?: boolean): void;
733
753
  beforeDestroy(): void;
@@ -775,6 +795,9 @@ export declare const TYPES_MAP: {
775
795
  brightness: import("mobx-state-tree").IType<number, number, number>;
776
796
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
777
797
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
798
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
799
+ intensity: import("mobx-state-tree").IType<number, number, number>;
800
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
778
801
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
779
802
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
780
803
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -864,6 +887,7 @@ export declare const TYPES_MAP: {
864
887
  animated(attr: any): any;
865
888
  } & {
866
889
  setAnimation(type: any, attrs: any): void;
890
+ setFilter(type: any, value: any): void;
867
891
  }, import("mobx-state-tree").ModelCreationType<{
868
892
  id: string;
869
893
  type: string;
@@ -31,6 +31,9 @@ export declare const ImageElement: import("mobx-state-tree").IModelType<{
31
31
  brightness: import("mobx-state-tree").IType<number, number, number>;
32
32
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
33
33
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
34
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
35
+ intensity: import("mobx-state-tree").IType<number, number, number>;
36
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
34
37
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
35
38
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
36
39
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -129,6 +132,7 @@ export declare const ImageElement: import("mobx-state-tree").IModelType<{
129
132
  animated(attr: any): any;
130
133
  } & {
131
134
  setAnimation(type: any, attrs: any): void;
135
+ setFilter(type: any, value: any): void;
132
136
  } & {
133
137
  toggleCropMode(flag?: boolean): void;
134
138
  beforeDestroy(): void;
@@ -31,6 +31,9 @@ export declare const LineElement: import("mobx-state-tree").IModelType<{
31
31
  brightness: import("mobx-state-tree").IType<number, number, number>;
32
32
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
33
33
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
34
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
35
+ intensity: import("mobx-state-tree").IType<number, number, number>;
36
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
34
37
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
35
38
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
36
39
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -120,6 +123,7 @@ export declare const LineElement: import("mobx-state-tree").IModelType<{
120
123
  animated(attr: any): any;
121
124
  } & {
122
125
  setAnimation(type: any, attrs: any): void;
126
+ setFilter(type: any, value: any): void;
123
127
  }, import("mobx-state-tree").ModelCreationType<{
124
128
  id: string;
125
129
  type: string;
@@ -8,6 +8,9 @@ export declare const Animation: import("mobx-state-tree").IModelType<{
8
8
  data: import("mobx-state-tree").IType<{}, {}, {}>;
9
9
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
10
10
  export declare const getDiff: (obj1: Record<string, any>, obj2: Record<string, any>) => Record<string, any>;
11
+ export declare const ShapeFilter: import("mobx-state-tree").IModelType<{
12
+ intensity: import("mobx-state-tree").IType<number, number, number>;
13
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
11
14
  export declare const Shape: import("mobx-state-tree").IModelType<{
12
15
  id: import("mobx-state-tree").ISimpleType<string>;
13
16
  type: import("mobx-state-tree").IType<string, string, string>;
@@ -40,6 +43,9 @@ export declare const Shape: import("mobx-state-tree").IModelType<{
40
43
  brightness: import("mobx-state-tree").IType<number, number, number>;
41
44
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
42
45
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
46
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
47
+ intensity: import("mobx-state-tree").IType<number, number, number>;
48
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
43
49
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
44
50
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
45
51
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -121,6 +127,7 @@ export declare const Shape: import("mobx-state-tree").IModelType<{
121
127
  animated(attr: any): any;
122
128
  } & {
123
129
  setAnimation(type: any, attrs: any): void;
130
+ setFilter(type: any, value: any): void;
124
131
  }, import("mobx-state-tree").ModelCreationType<{
125
132
  id: string;
126
133
  type: string;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Shape=exports.getDiff=exports.Animation=void 0;const mobx_state_tree_1=require("mobx-state-tree"),animations_1=require("../utils/animations"),mobx_1=require("mobx"),node_model_1=require("./node-model");exports.Animation=mobx_state_tree_1.types.model("Animation",{delay:0,duration:500,enabled:!0,type:mobx_state_tree_1.types.enumeration("Type",["enter","exit","loop"]),name:"none",data:mobx_state_tree_1.types.frozen({})});const getDiff=(e,t)=>{const i={};for(const n in t)if("number"==typeof e[n]&&"number"==typeof t[n]){const o=t[n]-e[n];0!==o&&(i[n]=o)}return i};exports.getDiff=getDiff,exports.Shape=node_model_1.Node.named("Shape").props({x:0,y:0,width:100,height:100,rotation:0,opacity:1,animations:mobx_state_tree_1.types.array(exports.Animation),blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,visible:!0,draggable:!0,resizable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot((e=>{const t=Object.assign(Object.assign({},e),{x:e.x||0,y:e.y||0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1,t.resizable=!1,t.removable=!1),t})).views((e=>{const t=(0,mobx_1.observable)({x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,opacity:e.opacity,color:e.color,fontSize:e.fontSize}),i=(0,mobx_1.action)((e=>{Object.assign(t,e)})),n=(0,mobx_1.action)((e=>{for(const i in e)"number"==typeof t[i]&&(t[i]=t[i]+e[i])}));return{get a(){const{currentTime:o}=e.store;if(i({x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,opacity:e.opacity,color:e.color,fontSize:e.fontSize}),0===o)return t;const a=o-e.page.startTime;if(a>e.page.duration)return t;if(a<0)return t;const s=e.store.animatedElementsIds;if(s.length&&!s.includes(e.id))return t;const r=e.animations.find((e=>"enter"===e.type)),d=(null==r?void 0:r.enabled)&&a<r.delay;d&&i({opacity:0});const l=(null==r?void 0:r.enabled)&&a>=r.delay&&a<=r.delay+r.duration;if(l){const t=a-r.delay,i=(0,animations_1.animate)({element:e,animation:r,dTime:t}),o=(0,exports.getDiff)(e,i);n(o)}const m=e.animations.find((e=>"exit"===e.type));if(!d&&!l&&(null==m?void 0:m.enabled)&&a>=e.page.duration-m.duration-m.delay&&a<=e.page.duration-m.delay){const t=a-(e.page.duration-m.duration-m.delay),i=(0,animations_1.animate)({element:e,animation:m,dTime:t}),o=(0,exports.getDiff)(e,i);n(o)}(null==m?void 0:m.enabled)&&a>=e.page.duration-m.delay&&i({opacity:0});const p=e.animations.find((e=>"loop"===e.type));if(null==p?void 0:p.enabled){const t=a,i=(0,animations_1.animate)({element:e,animation:p,dTime:t}),o=(0,exports.getDiff)(e,i);n(o)}return t},animated:t=>e.a[t]}})).actions((e=>({setAnimation(t,i){const n=e.animations.find((e=>e.type===t));n?Object.assign(n,i):e.animations.push(Object.assign({type:t},i))}})));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Shape=exports.ShapeFilter=exports.getDiff=exports.Animation=void 0;const mobx_state_tree_1=require("mobx-state-tree"),animations_1=require("../utils/animations"),mobx_1=require("mobx"),node_model_1=require("./node-model");exports.Animation=mobx_state_tree_1.types.model("Animation",{delay:0,duration:500,enabled:!0,type:mobx_state_tree_1.types.enumeration("Type",["enter","exit","loop"]),name:"none",data:mobx_state_tree_1.types.frozen({})});const getDiff=(e,t)=>{const i={};for(const n in t)if("number"==typeof e[n]&&"number"==typeof t[n]){const o=t[n]-e[n];0!==o&&(i[n]=o)}return i};exports.getDiff=getDiff,exports.ShapeFilter=mobx_state_tree_1.types.model("ShapeFilter",{intensity:1}),exports.Shape=node_model_1.Node.named("Shape").props({x:0,y:0,width:100,height:100,rotation:0,opacity:1,animations:mobx_state_tree_1.types.array(exports.Animation),blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,filters:mobx_state_tree_1.types.map(exports.ShapeFilter),shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,visible:!0,draggable:!0,resizable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot((e=>{const t=Object.assign(Object.assign({},e),{x:e.x||0,y:e.y||0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1,t.resizable=!1,t.removable=!1),t})).views((e=>{const t=(0,mobx_1.observable)({x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,opacity:e.opacity,color:e.color,fontSize:e.fontSize}),i=(0,mobx_1.action)((e=>{Object.assign(t,e)})),n=(0,mobx_1.action)((e=>{for(const i in e)"number"==typeof t[i]&&(t[i]=t[i]+e[i])}));return{get a(){const{currentTime:o}=e.store;if(i({x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,opacity:e.opacity,color:e.color,fontSize:e.fontSize}),0===o)return t;const a=o-e.page.startTime;if(a>e.page.duration)return t;if(a<0)return t;const s=e.store.animatedElementsIds;if(s.length&&!s.includes(e.id))return t;const r=e.animations.find((e=>"enter"===e.type)),d=(null==r?void 0:r.enabled)&&a<r.delay;d&&i({opacity:0});const l=(null==r?void 0:r.enabled)&&a>=r.delay&&a<=r.delay+r.duration;if(l){const t=a-r.delay,i=(0,animations_1.animate)({element:e,animation:r,dTime:t}),o=(0,exports.getDiff)(e,i);n(o)}const p=e.animations.find((e=>"exit"===e.type));if(!d&&!l&&(null==p?void 0:p.enabled)&&a>=e.page.duration-p.duration-p.delay&&a<=e.page.duration-p.delay){const t=a-(e.page.duration-p.duration-p.delay),i=(0,animations_1.animate)({element:e,animation:p,dTime:t}),o=(0,exports.getDiff)(e,i);n(o)}(null==p?void 0:p.enabled)&&a>=e.page.duration-p.delay&&i({opacity:0});const m=e.animations.find((e=>"loop"===e.type));if(null==m?void 0:m.enabled){const t=a,i=(0,animations_1.animate)({element:e,animation:m,dTime:t}),o=(0,exports.getDiff)(e,i);n(o)}return t},animated:t=>e.a[t]}})).actions((e=>({setAnimation(t,i){const n=e.animations.find((e=>e.type===t));n?Object.assign(n,i):e.animations.push(Object.assign({type:t},i))},setFilter(t,i){e.filters.clear(),0!==i&&e.filters.set(t,{intensity:i})}})));
package/model/store.d.ts CHANGED
@@ -317,6 +317,9 @@ export declare const Store: import("mobx-state-tree").IModelType<{
317
317
  brightness: import("mobx-state-tree").IType<number, number, number>;
318
318
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
319
319
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
320
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
321
+ intensity: import("mobx-state-tree").IType<number, number, number>;
322
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
320
323
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
321
324
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
322
325
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -398,6 +401,7 @@ export declare const Store: import("mobx-state-tree").IModelType<{
398
401
  animated(attr: any): any;
399
402
  } & {
400
403
  setAnimation(type: any, attrs: any): void;
404
+ setFilter(type: any, value: any): void;
401
405
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
402
406
  id: import("mobx-state-tree").ISimpleType<string>;
403
407
  type: import("mobx-state-tree").IType<string, string, string>;
@@ -430,6 +434,9 @@ export declare const Store: import("mobx-state-tree").IModelType<{
430
434
  brightness: import("mobx-state-tree").IType<number, number, number>;
431
435
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
432
436
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
437
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
438
+ intensity: import("mobx-state-tree").IType<number, number, number>;
439
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
433
440
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
434
441
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
435
442
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -511,6 +518,7 @@ export declare const Store: import("mobx-state-tree").IModelType<{
511
518
  animated(attr: any): any;
512
519
  } & {
513
520
  setAnimation(type: any, attrs: any): void;
521
+ setFilter(type: any, value: any): void;
514
522
  }, import("mobx-state-tree").ModelCreationType<{
515
523
  id: string;
516
524
  type: string;
@@ -31,6 +31,9 @@ export declare const SVGElement: import("mobx-state-tree").IModelType<{
31
31
  brightness: import("mobx-state-tree").IType<number, number, number>;
32
32
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
33
33
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
34
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
35
+ intensity: import("mobx-state-tree").IType<number, number, number>;
36
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
34
37
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
35
38
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
36
39
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -129,6 +132,7 @@ export declare const SVGElement: import("mobx-state-tree").IModelType<{
129
132
  animated(attr: any): any;
130
133
  } & {
131
134
  setAnimation(type: any, attrs: any): void;
135
+ setFilter(type: any, value: any): void;
132
136
  } & {
133
137
  replaceColor(oldColor: any, newColor: any): void;
134
138
  }, any, {}>;
@@ -31,6 +31,9 @@ export declare const TextElement: import("mobx-state-tree").IModelType<{
31
31
  brightness: import("mobx-state-tree").IType<number, number, number>;
32
32
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
33
33
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
34
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
35
+ intensity: import("mobx-state-tree").IType<number, number, number>;
36
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
34
37
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
35
38
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
36
39
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -136,6 +139,7 @@ export declare const TextElement: import("mobx-state-tree").IModelType<{
136
139
  animated(attr: any): any;
137
140
  } & {
138
141
  setAnimation(type: any, attrs: any): void;
142
+ setFilter(type: any, value: any): void;
139
143
  } & {
140
144
  toggleEditMode(editing?: boolean): void;
141
145
  }, import("mobx-state-tree").ModelCreationType<{
@@ -31,6 +31,9 @@ export declare const VideoElement: import("mobx-state-tree").IModelType<{
31
31
  brightness: import("mobx-state-tree").IType<number, number, number>;
32
32
  sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
33
33
  grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
34
+ filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
35
+ intensity: import("mobx-state-tree").IType<number, number, number>;
36
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
34
37
  shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
35
38
  shadowBlur: import("mobx-state-tree").IType<number, number, number>;
36
39
  shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
@@ -135,6 +138,7 @@ export declare const VideoElement: import("mobx-state-tree").IModelType<{
135
138
  animated(attr: any): any;
136
139
  } & {
137
140
  setAnimation(type: any, attrs: any): void;
141
+ setFilter(type: any, value: any): void;
138
142
  } & {
139
143
  toggleCropMode(flag?: boolean): void;
140
144
  beforeDestroy(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polotno",
3
- "version": "2.17.3",
3
+ "version": "2.19.0",
4
4
  "description": "Design Editor Framework",
5
5
  "author": "Anton Lavrenov",
6
6
  "keywords": [