polotno 2.2.1 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/canvas/figure-element.js +1 -1
- package/canvas/video-element.js +1 -1
- package/canvas/workspace-canvas.js +1 -1
- package/model/figure-model.js +1 -1
- package/model/history.js +1 -1
- package/package.json +2 -1
- package/polotno.bundle.js +74 -70
- package/side-panel/images-grid.js +1 -1
- package/toolbar/figure-toolbar.d.ts +2 -2
- package/toolbar/figure-toolbar.js +1 -1
- package/toolbar/video-toolbar.js +1 -1
- package/utils/video.d.ts +1 -0
- package/utils/video.js +1 -1
package/canvas/figure-element.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FigureElement=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),highlighter_1=require("./highlighter"),screen_1=require("../utils/screen"),RectSubType=(0,mobx_react_lite_1.observer)((({element:e,fillProps:t,strokeProps:a})=>react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,Object.assign({},t)),react_1.default.createElement(react_konva_1.Rect,Object.assign({},a))))),CircleSubType=(0,mobx_react_lite_1.observer)((({element:e,fillProps:t,strokeProps:a})=>react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"transparent"}),react_1.default.createElement(react_konva_1.Ellipse,Object.assign({},t,{offsetX:-e.width/2,offsetY:-e.height/2})),react_1.default.createElement(react_konva_1.Ellipse,Object.assign({},a,{offsetX:-e.width/2,offsetY:-e.height/2,x:0,y:0})))));function generateStarPath(e,t,a=0){const r=e/2,l=t/2,
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FigureElement=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),react_konva_1=require("react-konva"),highlighter_1=require("./highlighter"),screen_1=require("../utils/screen"),RectSubType=(0,mobx_react_lite_1.observer)((({element:e,fillProps:t,strokeProps:a})=>react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,Object.assign({},t)),react_1.default.createElement(react_konva_1.Rect,Object.assign({},a))))),CircleSubType=(0,mobx_react_lite_1.observer)((({element:e,fillProps:t,strokeProps:a})=>react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"transparent"}),react_1.default.createElement(react_konva_1.Ellipse,Object.assign({},t,{offsetX:-e.width/2,offsetY:-e.height/2})),react_1.default.createElement(react_konva_1.Ellipse,Object.assign({},a,{offsetX:-e.width/2,offsetY:-e.height/2,x:0,y:0})))));function generateStarPath(e,t,a=0){const r=e/2,l=t/2,n=e/2-a,i=t/2-a,o=n/2,c=i/2;let s="",h=Math.PI/5;for(let e=0;e<10;e++){const t=e%2==0?i:c,a=r+(e%2==0?n:o)*Math.sin(e*h),d=l-t*Math.cos(e*h);0===e?s=`M ${a} ${d}`:s+=` L ${a} ${d}`}return s+" Z"}const StarSubType=(0,mobx_react_lite_1.observer)((({element:e,fillProps:t,strokeProps:a})=>{const r=react_1.default.useRef(null);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"transparent"}),react_1.default.createElement(react_konva_1.Path,Object.assign({},t,{data:generateStarPath(e.width,e.height),ref:r})),react_1.default.createElement(react_konva_1.Group,{clipFunc:e=>{const t=r.current;t&&t.drawScene.call(t,e.canvas,t)}},react_1.default.createElement(react_konva_1.Path,Object.assign({},a,{x:0,y:0,data:generateStarPath(e.width,e.height,0)}))))})),SUB_TYPES={rect:RectSubType,circle:CircleSubType,star:StarSubType};exports.FigureElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{const a=e.selectable||"admin"===t.role,r=(0,screen_1.useMobile)(),[l,n]=react_1.default.useState(!1),i=t.selectedElements.indexOf(e)>=0&&1===t.selectedElements.length,o=Math.min(e.strokeWidth,e.width/2,e.height/2),c=Math.max(0,Math.min(e.width/2,e.height/2,e.cornerRadius)),s={width:e.a.width,height:e.a.height,fill:e.fill,cornerRadius:c,opacity:e.animated("opacity"),shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,listening:a,preventDefault:!r||i,hideInExport:!e.showInExport},h={visible:o>0,x:o/2,y:o/2,width:e.a.width-o,height:e.a.height-o,stroke:e.stroke,strokeWidth:o,cornerRadius:Math.max(0,c-o),dash:e.dash.map((e=>e*o)),opacity:e.animated("opacity"),hideInExport:!e.showInExport,listening:!1},d=SUB_TYPES[e.subType]||react_konva_1.Group;return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(react_konva_1.Group,{id:e.id,x:e.a.x,y:e.a.y,rotation:e.a.rotation,opacity:e.a.opacity,draggable:r?e.draggable&&i:e.draggable,name:"element",onMouseEnter:()=>{n(!0)},onMouseLeave:()=>{n(!1)},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:t=>{e.set({x:t.target.x(),y:t.target.y()})},onTransform:t=>{const a=t.target.scale();t.target.scaleX(1),t.target.scaleY(1),e.set({width:e.width*a.x,height:e.height*a.y,x:t.target.x(),y:t.target.y(),rotation:t.target.rotation()})}},react_1.default.createElement(d,{element:e,fillProps:s,strokeProps:h})),l&&!i&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
|
package/canvas/video-element.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,o)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.VideoElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),svg=__importStar(require("../utils/svg")),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,o;const{flipX:i,flipY:n}=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(!i&&!n&&!c)return t;if(!t||!t.width||!t.height)return null;const h=createCanvas();let l=1;"svg"===e.type&&(l=Math.max(e.width/t.width*r,e.height/t.height*r)),h.width=Math.max(t.width*l,1),h.height=Math.max(t.height*l,1);let u=i?-h.width:0,s=n?-h.height:0;return null===(a=h.getContext("2d"))||void 0===a||a.scale(i?-1:1,n?-1:1),null===(o=h.getContext("2d"))||void 0===o||o.drawImage(t,u,s,h.width,h.height),h}),[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 getCrop(e,t){const r=t.width/t.height;let a,o;r>=e.width/e.height?(a=e.width,o=e.width/r):(a=e.height*r,o=e.height);return{x:(e.width-a)/2,y:(e.height-o)/2,width:a,height:o}}function downsample(e,t,r,a,o,i,n){for(var d=new ImageData(t,r),c=new Int32Array(e.data.buffer),h=e.width,l=new Int32Array(d.data.buffer),u=d.width,s=t/i,g=r/n,f=Math.round(1/s),p=Math.round(1/g),_=f*p,m=0;m<d.height;m++)for(var w=0;w<u;w++){for(var v=a+Math.round(w/s)+(o+Math.round(m/g))*h,x=0,y=0,M=0,E=0,b=0;b<p;b++)for(var C=0;C<f;C++){var L=c[v+C+b*h];x+=L<<24>>>24,y+=L<<16>>>24,M+=L<<8>>>24,E+=L>>>24}x=Math.round(x/_),y=Math.round(y/_),M=Math.round(M/_),E=Math.round(E/_),l[w+m*u]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const o=createCanvas();o.width=e.width,o.height=e.height,null===(r=o.getContext("2d"))||void 0===r||r.drawImage(e,0,0,o.width,o.height);const i=downsample(o.getContext("2d").getImageData(0,0,o.width,o.height),Math.floor(o.width*t),Math.floor(o.height*t),0,0,o.width,o.height);return o.width=Math.floor(o.width*t),o.height=Math.floor(o.height*t),null===(a=o.getContext("2d"))||void 0===a||a.putImageData(i,0,0),o}const useCornerRadiusAndCrop=(e,t,r,a,o=0,i=!1)=>{const n=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(o*a,n/2,d/2),h=Math.max(e.width/r.width,e.height/r.height)*a,l=e.page._exporting&&flags_1.flags.imageDownScalingEnabled&&h<1&&!i,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&&!l?void 0:createCanvas()}),[t,c,l,u]);return react_1.default.useLayoutEffect((()=>{if(!s||!t)return;s.width=n,s.height=d;const e=s.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(n-c,0),e.arc(n-c,c,c,3*Math.PI/2,0,!1),e.lineTo(n,d-c),e.arc(n-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=l?downScaleCanvas(t,h):t,o=l?{x:Math.floor(r.x*h),y:Math.floor(r.y*h),width:Math.floor(r.width*h),height:Math.floor(r.height*h)}:r;e.drawImage(a,o.x,o.y,o.width,o.height,0,0,s.width,s.height)}),[s,e.width,e.height,r.x,r.y,r.width,r.height,o,a,i,e.page._exporting,l]),react_1.default.useEffect((()=>()=>{s&&"CANVAS"===s.nodeName&&konva_1.default.Util.releaseCanvas(s)}),[s]),s||t},useClip=(e,t,r,a)=>{const o=useSizeFixer(e.clipSrc||""),[i,n]=useImageHook(o,"anonymous"),d=e.clipSrc?n:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=react_1.default.useMemo((()=>{if(t&&i)return createCanvas()}),[t,i]);react_1.default.useLayoutEffect((()=>{var a;if(!i)return;if(!t||!t.width||!t.height)return;if(!i||!i.width||!i.height)return;if(!c)return;const o=createCanvas(),n=Math.max(e.width/i.width*r,e.height/i.height*r);o.width=i.width*n,o.height=i.height*n,null===(a=o.getContext("2d"))||void 0===a||a.drawImage(i,0,0,o.width,o.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(o,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(o),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}),[c,t,i,e.width,e.height,r,...a]);return e.clipSrc&&i?c:t},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.x,y:e.y,rotation:e.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.x,y:e.y,rotation:e.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}))}));let useImageHook=use_image_1.default;const setImageLoaderHook=e=>{useImageHook=e};exports.setImageLoaderHook=setImageLoaderHook;const useImageLoader=(e,t)=>{const r=react_1.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};react_1.default.useEffect((()=>a),[]),react_1.default.useLayoutEffect((()=>{"loading"!==e||r.current||(r.current=(0,loader_1.incrementLoader)(`video ${t}`)),"loading"!==e&&a(),"failed"===e&&(0,loader_1.triggerLoadError)(`video ${t}`)}),[e])};exports.useImageLoader=useImageLoader;const usePreviousImage=({image:e,status:t,type:r})=>{const a=react_1.default.useRef();react_1.default.useEffect((()=>{a.current=e||a.current}),[e]);return"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0};function isBuffered(e,t){for(var r=e.buffered,a=0;a<r.length;a++)if(t>=r.start(a)&&t<=r.end(a))return!0;return!1}const useImageSource=e=>{const[t,r]=react_1.default.useReducer((e=>e+1),0),a=react_1.default.useRef("loading"),o=react_1.default.useRef(e.src),i=react_1.default.useRef(e.src);return i.current!==e.src&&(i.current=e.src,a.current="loading"),react_1.default.useEffect((()=>{if("image"===e.type)return;if(!e.src)return;let t=!1;return(async()=>{a.current="loading",r();const i=await svg.urlToString(e.src),n=svg.fixSize(i),d=svg.replaceColors(n,e.colorsReplace);t||(o.current=d,a.current="loaded",r())})(),()=>{t=!0}}),[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[o.current,a.current]};function useVideo(e,t,r){const a=react_1.default.useRef("loading"),o=react_1.default.useRef(),[i,n]=react_1.default.useState(0),d=react_1.default.useRef(),c=react_1.default.useRef(),h=react_1.default.useRef();return d.current===e&&c.current===t&&h.current===r||(a.current="loading",o.current=void 0,d.current=e,c.current=t,h.current=r),react_1.default.useLayoutEffect((function(){if(e){var i=document.createElement("video");return i.addEventListener("canplay",d),i.addEventListener("error",c),t&&(i.crossOrigin=t),r&&(i.referrerpolicy=r),i.src=e,function(){i.removeEventListener("canplay",d),i.removeEventListener("error",c)}}function d(){a.current="loaded",o.current=i,n(Math.random())}function c(e){a.current="failed",o.current=void 0,n(Math.random())}}),[e,t,r]),[o.current,a.current]}exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,o]=react_1.default.useState(!1),i=react_1.default.useRef(null),n=react_1.default.useRef(null),[d,c]=react_1.default.useState(!1),h=t.selectedElements.indexOf(e)>=0,[l,u]=react_1.default.useState(!1),[s,g]=useVideo(e.src,"anonymous");(0,exports.useImageLoader)(g,e.id+"-video"),s&&(s.muted=!0,s.width=s.videoWidth,s.height=s.videoHeight);const f=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.isPlaying||l;if(!a)return void s.pause();a&&(s.currentTime=e.startTime*s.duration,s.play());const o=new konva_1.default.Animation((()=>{}),null===(r=i.current)||void 0===r?void 0:r.getLayer());o.start();const n=()=>{u(!1),s.currentTime=e.startTime*s.duration},d=()=>{s.currentTime>=e.endTime*s.duration&&(s.pause(),s.currentTime=e.startTime*s.duration,u(!1))};return s.addEventListener("ended",n),s.addEventListener("timeupdate",d),()=>{o.stop(),s.removeEventListener("ended",n),s.removeEventListener("timeupdate",d)}}),[s,l,t.isPlaying]),react_1.default.useEffect((()=>(0,mobx_1.autorun)((()=>{var r,a;if(s){const o=(t.currentTime-e.page.startTime)%e.duration;s.currentTime=o/1e3,null===(a=null===(r=i.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw()}}))),[t,s]),react_1.default.useEffect((()=>{if(!s)return;let t=null;const r=()=>{isBuffered(s,s.currentTime)||(t&&console.error("finish already exists"),t=(0,loader_1.incrementLoader)(`video ${e.id}`))},a=()=>{t&&(t(),t=null)};return s.addEventListener("timeupdate",r),s.addEventListener("canplay",a),()=>{s.removeEventListener("timeupdate",r),s.removeEventListener("canplay",a)}}),[s,e.id,loader_1.incrementLoader]);let{cropX:p,cropY:_,cropWidth:m,cropHeight:w}=e;"loaded"!==g&&(p=_=0,m=w=1);const v=f.width*m,x=f.height*w,y=e.width/e.height;let M,E;const b=v/x,C="svg"===e.type;C?(M=v,E=x):y>=b?(M=v,E=v/y):(M=x*y,E=x);const L={x:f.width*p,y:f.height*_,width:M,height:E},k=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let I=useClip(e,useCornerRadiusAndCrop(e,f,L,t._elementsPixelRatio,k,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[L,k,t._elementsPixelRatio]);const S=Math.max(e.width/M,e.height/E);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=i.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==n.current&&e.toggleCropMode(!1)}function o(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",o),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",o),document.body.removeEventListener("touchstart",o),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(i.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),{delay:100})}),[f,a,m,w,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=i.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(i.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const R=react_1.default.useRef(null),T=react_1.default.useRef(null),O=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(T.current.nodes([R.current]),O.current.nodes([n.current]))}),[e._cropModeEnabled]);const P=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),o=Math.min(1,M/r),i=Math.min(1,E/a),n=1-o,d=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),c=1-i,h=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-d*f.width,y:-h*f.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:h,cropWidth:o,cropHeight:i})},X=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},Y="loading"===g,A="failed"===g,H=!Y&&!A,W=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),D=H?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(i,D);const q=e.selectable||"admin"===t.role,B=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,Y&&react_1.default.createElement(LoadingPlaceholder,{element:e}),A&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:i,name:"element",id:e.id,image:f,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:D,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:L,listening:q,cropX:L.x,cropY:L.y,cropWidth:L.width,cropHeight:L.height,draggable:B?e.draggable&&h:e.draggable,preventDefault:!B||h,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:X,onDblTap:X,onTransformStart:()=>{o(!0),W.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,o=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),i=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-M/f.width,c=Math.min(d,Math.max(0,e.cropX)),h=1-E/f.height,l=Math.min(h,Math.max(0,e.cropY)),u=n.getActiveAnchor(),s=!(u.indexOf("middle")>=0||u.indexOf("center")>=0),g=!s&&o<1&&W.current.cropHeight>E/f.height;let p=s?e.cropWidth:e.cropWidth*o;g&&(p=e.cropWidth);const _=!s&&i<1&&W.current.cropWidth>M/f.width;let m=s?e.cropHeight:e.cropHeight*i;_&&(m=e.cropHeight),C&&(p=e.cropWidth,m=e.cropHeight),e.set({cropX:c,cropY:l,x:a.x(),y:a.y(),width:a.width()*o,height:a.height()*i,rotation:t.target.rotation(),cropWidth:Math.min(p,1-c),cropHeight:Math.min(m,1-l)})},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:M/f.width,cropHeight:E/f.height}),o(!1)}}),react_1.default.createElement(react_konva_1.Rect,{x:e.x,y:e.y,width:Math.max(e.width-e.borderSize,0),height:Math.max(e.height-e.borderSize,0),opacity:D,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,k-e.borderSize),hideInExport:!e.showInExport}),!l&&react_1.default.createElement(react_konva_1.Image,{image:playIcon,x:e.x+e.width/2-20,y:e.y+e.height/2-20,width:40,height:40,hideInExport:!0,onClick:()=>{u(!0)}}),l&&react_1.default.createElement(react_konva_1.Image,{image:pauseIcon,x:e.x+e.width/2-20,y:e.y+e.height/2-20,width:40,height:40,hideInExport:!0,onClick:()=>{u(!1)}}),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:I,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:S,scaleY:S},react_1.default.createElement(react_konva_1.Image,{image:f,ref:n,opacity:.4,draggable:!0,x:-e.cropX*f.width,y:-e.cropY*f.height,onDragMove:P,onTransform:P}),react_1.default.createElement(react_konva_1.Transformer,{ref:O,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:M,height:E,ref:R,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*f.width-1e-9&&(t.target.x(-e.cropX*f.width),t.target.scaleX(1)),t.target.y()<-e.cropY*f.height-1e-9&&(t.target.y(-e.cropY*f.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/f.width)),a=Math.min(1,Math.max(0,t.target.y()/f.height+e.cropY)),o=t.target.width()*t.target.scaleX(),i=t.target.height()*t.target.scaleY(),n=Math.min(1-r,o/f.width),d=Math.min(1-a,i/f.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:n,cropHeight:d,width:Math.min(o*S,f.width*(1-r)*S),height:Math.min(i*S,f.height*(1-a)*S)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:T,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||h)&&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 o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,o)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.VideoElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),svg=__importStar(require("../utils/svg")),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,o;const{flipX:i,flipY:n}=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(!i&&!n&&!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=i?-l.width:0,s=n?-l.height:0;return null===(a=l.getContext("2d"))||void 0===a||a.scale(i?-1:1,n?-1:1),null===(o=l.getContext("2d"))||void 0===o||o.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 getCrop(e,t){const r=t.width/t.height;let a,o;r>=e.width/e.height?(a=e.width,o=e.width/r):(a=e.height*r,o=e.height);return{x:(e.width-a)/2,y:(e.height-o)/2,width:a,height:o}}function downsample(e,t,r,a,o,i,n){for(var 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/i,g=r/n,f=Math.round(1/s),p=Math.round(1/g),_=f*p,m=0;m<d.height;m++)for(var w=0;w<u;w++){for(var v=a+Math.round(w/s)+(o+Math.round(m/g))*l,x=0,y=0,M=0,E=0,b=0;b<p;b++)for(var C=0;C<f;C++){var L=c[v+C+b*l];x+=L<<24>>>24,y+=L<<16>>>24,M+=L<<8>>>24,E+=L>>>24}x=Math.round(x/_),y=Math.round(y/_),M=Math.round(M/_),E=Math.round(E/_),h[w+m*u]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const o=createCanvas();o.width=e.width,o.height=e.height,null===(r=o.getContext("2d"))||void 0===r||r.drawImage(e,0,0,o.width,o.height);const i=downsample(o.getContext("2d").getImageData(0,0,o.width,o.height),Math.floor(o.width*t),Math.floor(o.height*t),0,0,o.width,o.height);return o.width=Math.floor(o.width*t),o.height=Math.floor(o.height*t),null===(a=o.getContext("2d"))||void 0===a||a.putImageData(i,0,0),o}const useCornerRadiusAndCrop=(e,t,r,a,o=0,i=!1)=>{const n=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(o*a,n/2,d/2),l=Math.max(e.width/r.width,e.height/r.height)*a,h=e.page._exporting&&flags_1.flags.imageDownScalingEnabled&&l<1&&!i,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]);return react_1.default.useLayoutEffect((()=>{if(!s||!t)return;s.width=n,s.height=d;const e=s.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(n-c,0),e.arc(n-c,c,c,3*Math.PI/2,0,!1),e.lineTo(n,d-c),e.arc(n-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,o=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,o.x,o.y,o.width,o.height,0,0,s.width,s.height)}),[s,e.width,e.height,r.x,r.y,r.width,r.height,o,a,i,e.page._exporting,h]),react_1.default.useEffect((()=>()=>{s&&"CANVAS"===s.nodeName&&konva_1.default.Util.releaseCanvas(s)}),[s]),s||t},useClip=(e,t,r,a)=>{const o=useSizeFixer(e.clipSrc||""),[i,n]=useImageHook(o,"anonymous"),d=e.clipSrc?n:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=react_1.default.useMemo((()=>{if(t&&i)return createCanvas()}),[t,i]);react_1.default.useLayoutEffect((()=>{var a;if(!i)return;if(!t||!t.width||!t.height)return;if(!i||!i.width||!i.height)return;if(!c)return;const o=createCanvas(),n=Math.max(e.width/i.width*r,e.height/i.height*r);o.width=i.width*n,o.height=i.height*n,null===(a=o.getContext("2d"))||void 0===a||a.drawImage(i,0,0,o.width,o.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(o,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(o),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}),[c,t,i,e.width,e.height,r,...a]);return e.clipSrc&&i?c:t},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.x,y:e.y,rotation:e.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.x,y:e.y,rotation:e.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}))}));let useImageHook=use_image_1.default;const setImageLoaderHook=e=>{useImageHook=e};exports.setImageLoaderHook=setImageLoaderHook;const useImageLoader=(e,t)=>{const r=react_1.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};react_1.default.useEffect((()=>a),[]),react_1.default.useLayoutEffect((()=>{"loading"!==e||r.current||(r.current=(0,loader_1.incrementLoader)(`video ${t}`)),"loading"!==e&&a(),"failed"===e&&(0,loader_1.triggerLoadError)(`video ${t}`)}),[e])};exports.useImageLoader=useImageLoader;const usePreviousImage=({image:e,status:t,type:r})=>{const a=react_1.default.useRef();react_1.default.useEffect((()=>{a.current=e||a.current}),[e]);return"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0};function isBuffered(e,t){for(var r=e.buffered,a=0;a<r.length;a++)if(t>=r.start(a)&&t<=r.end(a))return!0;return!1}const useImageSource=e=>{const[t,r]=react_1.default.useReducer((e=>e+1),0),a=react_1.default.useRef("loading"),o=react_1.default.useRef(e.src),i=react_1.default.useRef(e.src);return i.current!==e.src&&(i.current=e.src,a.current="loading"),react_1.default.useEffect((()=>{if("image"===e.type)return;if(!e.src)return;let t=!1;return(async()=>{a.current="loading",r();const i=await svg.urlToString(e.src),n=svg.fixSize(i),d=svg.replaceColors(n,e.colorsReplace);t||(o.current=d,a.current="loaded",r())})(),()=>{t=!0}}),[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[o.current,a.current]};function useVideo(e,t,r){const a=react_1.default.useRef("loading"),o=react_1.default.useRef(),[i,n]=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",o.current=void 0,d.current=e,c.current=t,l.current=r),react_1.default.useLayoutEffect((function(){if(e){var i=document.createElement("video");return i.addEventListener("canplay",d),i.addEventListener("error",c),t&&(i.crossOrigin=t),r&&(i.referrerpolicy=r),i.src=e,function(){i.removeEventListener("canplay",d),i.removeEventListener("error",c)}}function d(){a.current="loaded",o.current=i,n(Math.random())}function c(e){a.current="failed",o.current=void 0,n(Math.random())}}),[e,t,r]),[o.current,a.current]}exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,o]=react_1.default.useState(!1),i=react_1.default.useRef(null),n=react_1.default.useRef(null),[d,c]=react_1.default.useState(!1),l=t.selectedElements.indexOf(e)>=0,[h,u]=react_1.default.useState(!1),[s,g]=useVideo(e.src,"anonymous");(0,exports.useImageLoader)(g,e.id+"-video"),s&&(s.muted=!0,s.width=s.videoWidth,s.height=s.videoHeight);const f=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.isPlaying||h;if(!a)return void s.pause();a&&(s.currentTime=e.startTime*s.duration,s.play());const o=new konva_1.default.Animation((()=>{}),null===(r=i.current)||void 0===r?void 0:r.getLayer());o.start();const n=()=>{u(!1),s.currentTime=e.startTime*s.duration},d=()=>{s.currentTime>=e.endTime*s.duration&&(s.pause(),s.currentTime=e.startTime*s.duration,u(!1))};return s.addEventListener("ended",n),s.addEventListener("timeupdate",d),()=>{o.stop(),s.removeEventListener("ended",n),s.removeEventListener("timeupdate",d)}}),[s,h,t.isPlaying]),react_1.default.useEffect((()=>(0,mobx_1.autorun)((()=>{var r,a;if(s){const o=(t.currentTime-e.page.startTime)%e.duration;s.currentTime=o/1e3,null===(a=null===(r=i.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw()}}))),[t,s]),react_1.default.useEffect((()=>{if(!s)return;let t=null;const r=()=>{isBuffered(s,s.currentTime)||(t&&console.error("finish already exists"),t=(0,loader_1.incrementLoader)(`video ${e.id}`))},a=()=>{t&&(t(),t=null)};return s.addEventListener("timeupdate",r),s.addEventListener("canplay",a),()=>{s.removeEventListener("timeupdate",r),s.removeEventListener("canplay",a)}}),[s,e.id,loader_1.incrementLoader]);let{cropX:p,cropY:_,cropWidth:m,cropHeight:w}=e;"loaded"!==g&&(p=_=0,m=w=1);const v=f.width*m,x=f.height*w,y=e.width/e.height;let M,E;const b=v/x,C="svg"===e.type;C?(M=v,E=x):y>=b?(M=v,E=v/y):(M=x*y,E=x);const L={x:f.width*p,y:f.height*_,width:M,height:E},k=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let I=useClip(e,useCornerRadiusAndCrop(e,f,L,t._elementsPixelRatio,k,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[L,k,t._elementsPixelRatio]);const S=Math.max(e.width/M,e.height/E);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=i.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==n.current&&e.toggleCropMode(!1)}function o(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",o),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",o),document.body.removeEventListener("touchstart",o),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(i.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),{delay:100})}),[f,a,m,w,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=i.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(i.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const R=react_1.default.useRef(null),T=react_1.default.useRef(null),O=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(T.current.nodes([R.current]),O.current.nodes([n.current]))}),[e._cropModeEnabled]);const P=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),o=Math.min(1,M/r),i=Math.min(1,E/a),n=1-o,d=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),c=1-i,l=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-d*f.width,y:-l*f.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:l,cropWidth:o,cropHeight:i})},X=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},Y="loading"===g,A="failed"===g,H=!Y&&!A,W=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),D=H?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(i,D);const q=e.selectable||"admin"===t.role,B=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,Y&&react_1.default.createElement(LoadingPlaceholder,{element:e}),A&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:i,name:"element",id:e.id,image:f,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:D,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:L,listening:q,cropX:L.x,cropY:L.y,cropWidth:L.width,cropHeight:L.height,draggable:B?e.draggable&&l:e.draggable,preventDefault:!B||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:X,onDblTap:X,onTransformStart:()=>{o(!0),W.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,o=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),i=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-M/f.width,c=Math.min(d,Math.max(0,e.cropX)),l=1-E/f.height,h=Math.min(l,Math.max(0,e.cropY)),u=n.getActiveAnchor(),s=!(u.indexOf("middle")>=0||u.indexOf("center")>=0),g=!s&&o<1&&W.current.cropHeight>E/f.height;let p=s?e.cropWidth:e.cropWidth*o;g&&(p=e.cropWidth);const _=!s&&i<1&&W.current.cropWidth>M/f.width;let m=s?e.cropHeight:e.cropHeight*i;_&&(m=e.cropHeight),C&&(p=e.cropWidth,m=e.cropHeight),e.set({cropX:c,cropY:h,x:a.x(),y:a.y(),width:a.width()*o,height:a.height()*i,rotation:t.target.rotation(),cropWidth:Math.min(p,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:M/f.width,cropHeight:E/f.height}),o(!1)}}),react_1.default.createElement(react_konva_1.Rect,{x:e.x,y:e.y,width:Math.max(e.width-e.borderSize,0),height:Math.max(e.height-e.borderSize,0),opacity:D,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,k-e.borderSize),hideInExport:!e.showInExport}),!h&&react_1.default.createElement(react_konva_1.Image,{image:playIcon,x:e.x+e.width/2-15/t.scale,y:e.y+e.height/2-15/t.scale,width:30/t.scale,height:30/t.scale,hideInExport:!0,onClick:()=>{u(!0)}}),h&&react_1.default.createElement(react_konva_1.Image,{image:pauseIcon,x:e.x+e.width/2-15/t.scale,y:e.y+e.height/2-15/t.scale,width:30/t.scale,height:30/t.scale,hideInExport:!0,onClick:()=>{u(!1)}}),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:I,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:S,scaleY:S},react_1.default.createElement(react_konva_1.Image,{image:f,ref:n,opacity:.4,draggable:!0,x:-e.cropX*f.width,y:-e.cropY*f.height,onDragMove:P,onTransform:P}),react_1.default.createElement(react_konva_1.Transformer,{ref:O,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:M,height:E,ref:R,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*f.width-1e-9&&(t.target.x(-e.cropX*f.width),t.target.scaleX(1)),t.target.y()<-e.cropY*f.height-1e-9&&(t.target.y(-e.cropY*f.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/f.width)),a=Math.min(1,Math.max(0,t.target.y()/f.height+e.cropY)),o=t.target.width()*t.target.scaleX(),i=t.target.height()*t.target.scaleY(),n=Math.min(1-r,o/f.width),d=Math.min(1-a,i/f.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:n,cropHeight:d,width:Math.min(o*S,f.width*(1-r)*S),height:Math.min(i*S,f.height*(1-a)*S)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:T,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 +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.WorkspaceCanvas=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),page_1=__importDefault(require("./page")),rules_1=require("./rules"),hotkeys_1=require("./hotkeys"),l10n_1=require("../utils/l10n"),limit=(e,t,r)=>Math.max(t,Math.min(r,e)),ZERO_SIZE_WARNING="Polotno warning: <Workspace /> component can not automatically detect its size.\nWidth or height of parent elements is equal 0.\nPlease make sure it has non-zero size. You may need to adjust it with your styles. <Workspace /> will automatically fit into parent container.\nFor simpler debugging here is the log of the parent element:",useSaveScrollOnScaleChange=(e,t,r,a,n,l)=>{const o=react_1.default.useRef({width:t,height:r}),c=react_1.default.useRef({top:0,left:0}),s=react_1.default.useRef(!1),i=react_1.default.useRef(n.pages.length);s.current=i.current!==n.pages.length,i.current=n.pages.length,react_1.default.useEffect((()=>{const t=e.current,r=e=>{c.current={top:t.scrollTop,left:t.scrollLeft}};return t.addEventListener("scroll",r),()=>{t.removeEventListener("scroll",r)}}),[]),react_1.default.useLayoutEffect((()=>{if(!e.current)return;if(s.current)return;const a=e.current,n=(c.current.left+a.offsetWidth/2)/o.current.width,i=(c.current.top+a.offsetHeight/2)/o.current.height;l.current=!0,a.scrollLeft=n*t-a.offsetWidth/2,a.scrollTop=i*r-a.offsetHeight/2,o.current={width:t,height:r}}),[a,t,r])},useScrollOnActiveChange=(e,t,r,a,n)=>{const l=react_1.default.useRef(!1),o=react_1.default.useRef(null);react_1.default.useEffect((()=>{const t=e.current,r=()=>{n.current};return t.addEventListener("scroll",r),()=>{t.removeEventListener("scroll",r)}}),[]);const c=r.pages.indexOf(r.activePage);react_1.default.useLayoutEffect((()=>{if(!r.activePage)return;if(!e.current)return;if(l.current)return;const a=e.current,o=r.pages.indexOf(r.activePage)*t;Math.abs(o-a.scrollTop)>.5*t&&(n.current=!0,a.scrollTop=o)}),[r.activePage,c]);return{handleScroll:e=>{if(n.current)return void(n.current=!1);l.current=!0,clearTimeout(o.current),o.current=setTimeout((()=>{l.current=!1}),300);const t=e.currentTarget.childNodes[0].offsetHeight,c=e.currentTarget.scrollTop,s=Math.floor((c+a.height/3)/t),i=r.pages[s];i&&i.select()}}},NoPages=({store:e})=>react_1.default.createElement("div",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",textAlign:"center"}},react_1.default.createElement("p",null,(0,l10n_1.t)("workspace.noPages")),react_1.default.createElement("button",{onClick:()=>{e.addPage()}},(0,l10n_1.t)("workspace.addPage")));exports.WorkspaceCanvas=(0,mobx_react_lite_1.observer)((({store:e,pageControlsEnabled:t,backgroundColor:r,pageBorderColor:a,activePageBorderColor:n,bleedColor:l,components:o,onKeyDown:c,paddingX:s,paddingY:i})=>{const u=null!=s?s:20,d=null!=i?i:55,[h,
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkspaceCanvas=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),page_1=__importDefault(require("./page")),rules_1=require("./rules"),hotkeys_1=require("./hotkeys"),l10n_1=require("../utils/l10n"),limit=(e,t,r)=>Math.max(t,Math.min(r,e)),ZERO_SIZE_WARNING="Polotno warning: <Workspace /> component can not automatically detect its size.\nWidth or height of parent elements is equal 0.\nPlease make sure it has non-zero size. You may need to adjust it with your styles. <Workspace /> will automatically fit into parent container.\nFor simpler debugging here is the log of the parent element:",useSaveScrollOnScaleChange=(e,t,r,a,n,l)=>{const o=react_1.default.useRef({width:t,height:r}),c=react_1.default.useRef({top:0,left:0}),s=react_1.default.useRef(!1),i=react_1.default.useRef(n.pages.length);s.current=i.current!==n.pages.length,i.current=n.pages.length,react_1.default.useEffect((()=>{const t=e.current,r=e=>{c.current={top:t.scrollTop,left:t.scrollLeft}};return t.addEventListener("scroll",r),()=>{t.removeEventListener("scroll",r)}}),[]),react_1.default.useLayoutEffect((()=>{if(!e.current)return;if(s.current)return;const a=e.current,n=(c.current.left+a.offsetWidth/2)/o.current.width,i=(c.current.top+a.offsetHeight/2)/o.current.height;l.current=!0,a.scrollLeft=n*t-a.offsetWidth/2,a.scrollTop=i*r-a.offsetHeight/2,o.current={width:t,height:r}}),[a,t,r])},useScrollOnActiveChange=(e,t,r,a,n)=>{const l=react_1.default.useRef(!1),o=react_1.default.useRef(null);react_1.default.useEffect((()=>{const t=e.current,r=()=>{n.current};return t.addEventListener("scroll",r),()=>{t.removeEventListener("scroll",r)}}),[]);const c=r.pages.indexOf(r.activePage);react_1.default.useLayoutEffect((()=>{if(!r.activePage)return;if(!e.current)return;if(l.current)return;const a=e.current,o=r.pages.indexOf(r.activePage)*t;Math.abs(o-a.scrollTop)>.5*t&&(n.current=!0,a.scrollTop=o)}),[r.activePage,c]);return{handleScroll:e=>{if(n.current)return void(n.current=!1);l.current=!0,clearTimeout(o.current),o.current=setTimeout((()=>{l.current=!1}),300);const t=e.currentTarget.childNodes[0].offsetHeight,c=e.currentTarget.scrollTop,s=Math.floor((c+a.height/3)/t),i=r.pages[s];i&&i.select()}}},NoPages=({store:e})=>react_1.default.createElement("div",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",textAlign:"center"}},react_1.default.createElement("p",null,(0,l10n_1.t)("workspace.noPages")),react_1.default.createElement("button",{onClick:()=>{e.addPage()}},(0,l10n_1.t)("workspace.addPage"))),PagePlaceholder=({width:e,height:t,xPadding:r,yPadding:a,backgroundColor:n})=>react_1.default.createElement("div",{style:{width:e+"px",height:t+"px",backgroundColor:n,paddingLeft:r+"px",paddingRight:r+"px",paddingTop:a+"px",paddingBottom:a+"px"}},react_1.default.createElement("div",{style:{width:" 100%",height:"100%",backgroundColor:"white"}}));exports.WorkspaceCanvas=(0,mobx_react_lite_1.observer)((({store:e,pageControlsEnabled:t,backgroundColor:r,pageBorderColor:a,activePageBorderColor:n,bleedColor:l,components:o,onKeyDown:c,paddingX:s,paddingY:i})=>{const u=null!=s?s:20,d=null!=i?i:55,[h,g]=react_1.default.useState({width:100,height:100}),f=react_1.default.useRef(h),p=react_1.default.useRef(null),_=react_1.default.useRef(null),m=e.bleedVisible?Math.max(0,...e.pages.map((e=>e.bleed))):0,v=Math.max(...e.pages.map((e=>e.computedWidth))),w=Math.max(...e.pages.map((e=>e.computedHeight))),b=v+2*m,x=w+2*m,E=()=>{if(null===p.current)return;const t=p.current.getBoundingClientRect();0!==t.width&&0!==t.height||(console.warn(ZERO_SIZE_WARNING),console.log(p.current));const r=_.current.clientWidth||t.width,a={width:r,height:t.height};(f.current.width!==a.width||f.current.height!==a.height)&&(g(a),f.current=a);const n=(r-2*u)/b,l=(t.height-2*d)/x,o=Math.max(Math.min(n,l),.01);e.scaleToFit!==o&&(e.setScale(o),e._setScaleToFit(o))};react_1.default.useEffect(E,[b,x]),react_1.default.useEffect((()=>{const e=p.current;if(window.ResizeObserver){const t=new ResizeObserver(E);return t.observe(e),()=>t.unobserve(e)}{const e=setInterval(E,100);return()=>clearInterval(e)}}),[b,x]);const y=Math.max(u,(h.width-b*e.scale)/2),P=x*e.scale*e.pages.length,k=Math.max(d,(h.height-P)/e.pages.length/2);react_1.default.useEffect((()=>{const t=t=>{(c||hotkeys_1.handleHotkey)(t,e)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)}),[]),react_1.default.useEffect((()=>{var t;const r=t=>{if(t.ctrlKey||t.metaKey){t.preventDefault();const l=Math.max(3,e.scaleToFit),o=Math.min(.1,e.scaleToFit),c=(r=t.deltaY<0?1.05*e.scale:e.scale/1.05,a=o,n=l,Math.max(a,Math.min(n,r)));e.setScale(c)}else var r,a,n};return null===(t=_.current)||void 0===t||t.addEventListener("wheel",r),()=>{var e;return null===(e=_.current)||void 0===e?void 0:e.removeEventListener("wheel",r)}}),[]);const C=react_1.default.useRef(!1);useSaveScrollOnScaleChange(_,b*e.scale+2*y,x*e.scale+2*k,e.scale,e,C);const{handleScroll:R}=useScrollOnActiveChange(_,x*e.scale+2*k,e,h,C),M=h.width>=b*e.scale+2*y,S=r||"rgba(232, 232, 232, 0.9)",T=e.pages.indexOf(e.activePage),L=(null==o?void 0:o.NoPages)||NoPages;return react_1.default.createElement("div",{ref:p,style:{width:"100%",height:"100%",position:"relative",outline:"none",flex:1,backgroundColor:S},tabIndex:0,className:"polotno-workspace-container"},react_1.default.createElement("div",{ref:_,onScroll:R,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflow:"auto",overflowX:M?"hidden":"auto"},className:"polotno-workspace-inner"},e.pages.map(((r,c)=>Math.abs(c-T)<=1||r._exporting?react_1.default.createElement(page_1.default,{key:r.id,page:r,xPadding:y,yPadding:k,width:b*e.scale+2*y,height:x*e.scale+2*k,store:e,pageControlsEnabled:t,backColor:S,pageBorderColor:a||"lightgrey",activePageBorderColor:n||"rgb(0, 161, 255)",bleedColor:l||"rgba(255, 0, 0, 0.1)",components:o}):react_1.default.createElement(PagePlaceholder,{key:r.id,width:b*e.scale+2*y,height:x*e.scale+2*k,backgroundColor:S,xPadding:y,yPadding:k}))),e.rulesVisible&&react_1.default.createElement(rules_1.TopRules,{store:e,xPadding:y,yPadding:k,width:b*e.scale+2*y,height:x*e.scale+2*k}),0===e.pages.length&&react_1.default.createElement(L,{store:e})))})),exports.default=exports.WorkspaceCanvas;
|
package/model/figure-model.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FigureElement=void 0;const mobx_state_tree_1=require("mobx-state-tree"),shape_model_1=require("./shape-model");exports.FigureElement=shape_model_1.Shape.named("Figure").props({type:"figure",subType:"rect",
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FigureElement=void 0;const mobx_state_tree_1=require("mobx-state-tree"),shape_model_1=require("./shape-model");exports.FigureElement=shape_model_1.Shape.named("Figure").props({type:"figure",subType:"rect",fill:"rgb(0, 161, 255)",dash:mobx_state_tree_1.types.array(mobx_state_tree_1.types.number),strokeWidth:0,stroke:"rgba(98, 197, 255, 1)",cornerRadius:0});
|
package/model/history.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UndoManager=void 0;const mobx_state_tree_1=require("mobx-state-tree"),deep_equal_1=require("../utils/deep-equal");Object.assign(mobx_state_tree_1.types),exports.UndoManager=mobx_state_tree_1.types.model("UndoManager",{history:mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()),undoIdx:-1,targetPath:""}).views((e=>({get canUndo(){return e.undoIdx>0},get canRedo(){return e.undoIdx<e.history.length-1}}))).actions((e=>{let t,o,
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o);var a=Object.getOwnPropertyDescriptor(t,o);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,r,a)}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)"default"!==o&&Object.prototype.hasOwnProperty.call(e,o)&&__createBinding(t,e,o);return __setModuleDefault(t,e),t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.UndoManager=void 0;const mobx_state_tree_1=require("mobx-state-tree"),deep_equal_1=require("../utils/deep-equal"),jsonpatch=__importStar(require("fast-json-patch"));Object.assign(mobx_state_tree_1.types),exports.UndoManager=mobx_state_tree_1.types.model("UndoManager",{history:mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()),undoIdx:-1,targetPath:""}).views((e=>({get canUndo(){return e.undoIdx>0},get canRedo(){return e.undoIdx<e.history.length-1}}))).actions((e=>{let t,o,r=!1,a=null,n=0,s=0;const i=()=>s>0;function d(){const e=(0,mobx_state_tree_1.getSnapshot)(t);return{pages:e.pages,width:e.width,height:e.height}}function u(e){const o=(0,mobx_state_tree_1.getSnapshot)(t.pages),r=jsonpatch.compare(o,e.pages);(0,mobx_state_tree_1.applyPatch)(t.pages,r),t.setSize(e.width,e.height)}return{startTransaction(){s++},endTransaction(e){s--,e||this.requestAddState(d())},async ignore(t,o=!1,r=!1){r&&await new Promise((e=>setTimeout(e,10))),n&&e.addUndoState();let a=i();e.startTransaction();let d=s;try{await t()}catch(e){setTimeout((()=>{throw e}))}const u=d!==s,c=!u;e.endTransaction(c),o||a||e.replaceState(),u||(clearTimeout(n),n=0)},async transaction(t){await e.ignore(t,!0),this.addUndoState()},requestAddState(e){a=e,n||i()||(r?r=!1:n=setTimeout((()=>{n=0,clearTimeout(n),i()||this.addUndoState()}),100))},addUndoState(){if(r)return void(r=!1);const t=e.history[e.undoIdx];!(0,deep_equal_1.deepEqual)(a,t)&&(clearTimeout(n),n=0,e.history.splice(e.undoIdx+1),e.history.push(a),e.undoIdx=e.history.length-1)},afterCreate(){if(t=(0,mobx_state_tree_1.resolvePath)(e,".."),!t)throw new Error("Failed to find target store for UndoManager. Please provide `targetPath` property, or a `targetStore` in the environment");o=(0,mobx_state_tree_1.onSnapshot)(t,(()=>{this.requestAddState(d())})),0===e.history.length&&this.requestAddState(d())},clear(){clearTimeout(n),n=0,e.history.splice(0,e.history.length),e.undoIdx=-1,e.addUndoState(d())},beforeDestroy(){o()},undo(){n&&this.addUndoState(),e.canUndo?(e.undoIdx--,r=!0,u(e.history[e.undoIdx])):console.warn("No undo history. Please check `store.history.canUndo` before calling undo action.")},redo(){n&&this.addUndoState(),e.canRedo?(e.undoIdx++,r=!0,u(e.history[e.undoIdx])):console.warn("No redo history. Please check `store.history.canRedo` before calling redo action.")},replaceState(){e.history[e.undoIdx]=d()}}})),exports.default=exports.UndoManager;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polotno",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"description": "Design Editor Framework",
|
|
5
5
|
"author": "Anton Lavrenov",
|
|
6
6
|
"keywords": [
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"@blueprintjs/core": "5.7.1",
|
|
14
14
|
"@blueprintjs/select": "5.0.19",
|
|
15
15
|
"@meronex/icons": "^4.0.0",
|
|
16
|
+
"fast-json-patch": "^3.1.1",
|
|
16
17
|
"functions-have-names": "^1.2.3",
|
|
17
18
|
"gradient-parser": "^1.0.2",
|
|
18
19
|
"konva": "^9.2.3",
|