polotno 2.4.30 → 2.4.31
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/rules.js +39 -1
- package/canvas/video-element.js +1 -1
- package/config.d.ts +1 -1
- package/config.js +1 -1
- package/model/store.d.ts +2 -1
- package/model/store.js +1 -1
- package/package.json +1 -1
- package/pages-timeline/pages-timeline.js +1 -1
- package/polotno-app.d.ts +4 -2
- package/polotno.bundle.js +108 -70
- package/utils/fonts.js +1 -1
- package/utils/loader.d.ts +2 -0
- package/utils/loader.js +1 -1
package/canvas/rules.js
CHANGED
|
@@ -1 +1,39 @@
|
|
|
1
|
-
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LeftRules=exports.TopRules=void 0;const react_1=__importDefault(require("react")),math_1=require("../utils/math"),unit_1=require("../utils/unit"),mobx_react_lite_1=require("mobx-react-lite"),
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.LeftRules=exports.TopRules=void 0;const react_1=__importDefault(require("react")),math_1=require("../utils/math"),unit_1=require("../utils/unit"),mobx_react_lite_1=require("mobx-react-lite"),goober_1=require("../utils/goober"),RulersContainer=(0,goober_1.styled)("div",react_1.default.forwardRef)`
|
|
2
|
+
position: absolute;
|
|
3
|
+
top: 0;
|
|
4
|
+
left: 0;
|
|
5
|
+
pointer-events: none;
|
|
6
|
+
`,TopRuler=(0,goober_1.styled)("div",react_1.default.forwardRef)`
|
|
7
|
+
height: 14px;
|
|
8
|
+
position: sticky;
|
|
9
|
+
font-size: 8px;
|
|
10
|
+
line-height: 14px;
|
|
11
|
+
top: 0;
|
|
12
|
+
left: 0;
|
|
13
|
+
color: grey;
|
|
14
|
+
border-bottom: 1px solid grey;
|
|
15
|
+
background-color: #e8e8e8;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
`,LeftRuler=(0,goober_1.styled)("div",react_1.default.forwardRef)`
|
|
18
|
+
left: 0;
|
|
19
|
+
width: 14px;
|
|
20
|
+
position: sticky;
|
|
21
|
+
font-size: 8px;
|
|
22
|
+
line-height: 14px;
|
|
23
|
+
color: grey;
|
|
24
|
+
border-right: 1px solid grey;
|
|
25
|
+
background-color: #e8e8e8;
|
|
26
|
+
overflow: hidden;
|
|
27
|
+
`,SectionX=(0,goober_1.styled)("div",react_1.default.forwardRef)`
|
|
28
|
+
position: absolute;
|
|
29
|
+
border-left: 1px solid grey;
|
|
30
|
+
padding-left: 2px;
|
|
31
|
+
`,SectionY=(0,goober_1.styled)("div",react_1.default.forwardRef)`
|
|
32
|
+
position: absolute;
|
|
33
|
+
left: 14px;
|
|
34
|
+
border-left: 1px solid grey;
|
|
35
|
+
padding-left: 2px;
|
|
36
|
+
transform: rotate(90deg);
|
|
37
|
+
transform-origin: left top;
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
`,realMetricsSteps=[.1,.2,.5,1,2,5,10,20,25,50,100,200,500,1e3,2e3,5e3,1e4],MIN_SECTION_WIDTH=30,findSplitSize=e=>realMetricsSteps.find((t=>e(t)>30))||1e4;function LeftRules(){return react_1.default.createElement("div",null,react_1.default.createElement("h1",null,"Top rules"))}exports.TopRules=(0,mobx_react_lite_1.observer)((({store:e,width:t,height:r})=>{const o=react_1.default.useRef(null);if(!e.activePage)return null;const l=e.activePage,i=(e.bleedVisible&&l.bleed,l.computedWidth*e.scale),a=l.computedHeight*e.scale,s=(t-i)/2,d=(n=t=>(0,unit_1.unitToPx)({unitVal:t,dpi:e.dpi,unit:e.unit})*e.scale,realMetricsSteps.find((e=>n(e)>30))||1e4);var n;const u=(0,unit_1.unitToPx)({unitVal:d,dpi:e.dpi,unit:e.unit})*e.scale,c=Math.round(i/u)+1,p=Math.round(a/u)+1,f=(0,math_1.getTotalClientRect)(e.selectedShapes);return react_1.default.createElement(RulersContainer,{ref:o,className:"polotno-rulers"},react_1.default.createElement(TopRuler,{style:{width:t+"px"},className:"polotno-x-ruler"},[...Array(c)].map(((t,r)=>react_1.default.createElement(SectionX,{key:r,style:{left:s+r*u+"px",width:u+"px"}},"px"===e.unit||d>=1?Math.round(d*r):(d*r).toFixed(1)))),!!e.selectedShapes.length&&react_1.default.createElement("div",{style:{position:"absolute",left:s+f.x*e.scale+"px",height:"14px",width:f.width*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}})),e.pages.map(((t,o)=>{var l;const i=t.computedHeight*e.scale,a=(r-i)/2;return react_1.default.createElement(LeftRuler,{key:t.id,style:{height:r+"px"},className:"polotno-y-ruler"},[...Array(p)].map(((t,r)=>react_1.default.createElement(SectionY,{key:r,style:{top:a+r*u-14+"px",width:u+"px"}},"px"===e.unit||d>=1?Math.round(d*r):(d*r).toFixed(1)))),(null===(l=e.selectedShapes[0])||void 0===l?void 0:l.page)===t&&react_1.default.createElement("div",{style:{position:"absolute",top:a+f.y*e.scale-14+"px",width:"14px",height:f.height*e.scale,backgroundColor:"rgba(0,0,0,0.15)"}}))})))})),exports.LeftRules=LeftRules;
|
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 i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,i)}: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,i;const{flipX:o,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(!o&&!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=o?-l.width:0,s=n?-l.height:0;return null===(a=l.getContext("2d"))||void 0===a||a.scale(o?-1:1,n?-1:1),null===(i=l.getContext("2d"))||void 0===i||i.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,i;r>=e.width/e.height?(a=e.width,i=e.width/r):(a=e.height*r,i=e.height);return{x:(e.width-a)/2,y:(e.height-i)/2,width:a,height:i}}function downsample(e,t,r,a,i,o,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/o,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)+(i+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[v+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[w+m*u]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const i=createCanvas();i.width=e.width,i.height=e.height,null===(r=i.getContext("2d"))||void 0===r||r.drawImage(e,0,0,i.width,i.height);const o=downsample(i.getContext("2d").getImageData(0,0,i.width,i.height),Math.floor(i.width*t),Math.floor(i.height*t),0,0,i.width,i.height);return i.width=Math.floor(i.width*t),i.height=Math.floor(i.height*t),null===(a=i.getContext("2d"))||void 0===a||a.putImageData(o,0,0),i}const useCornerRadiusAndCrop=(e,t,r,a,i=0,o=!1)=>{const n=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(i*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&&!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]);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,i=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,i.x,i.y,i.width,i.height,0,0,s.width,s.height)}),[s,e.width,e.height,r.x,r.y,r.width,r.height,i,a,o,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 i=useSizeFixer(e.clipSrc||""),[o,n]=useImageHook(i,"anonymous"),d=e.clipSrc?n:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=react_1.default.useMemo((()=>{if(t&&o)return createCanvas()}),[t,o]);react_1.default.useLayoutEffect((()=>{var a;if(!o)return;if(!t||!t.width||!t.height)return;if(!o||!o.width||!o.height)return;if(!c)return;const i=createCanvas(),n=Math.max(e.width/o.width*r,e.height/o.height*r);i.width=o.width*n,i.height=o.height*n,null===(a=i.getContext("2d"))||void 0===a||a.drawImage(o,0,0,i.width,i.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(i,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(i),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}),[c,t,o,e.width,e.height,r,...a]);return e.clipSrc&&o?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"),i=react_1.default.useRef(e.src),o=react_1.default.useRef(e.src);return o.current!==e.src&&(o.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 o=await svg.urlToString(e.src),n=svg.fixSize(o),d=svg.replaceColors(n,e.colorsReplace);t||(i.current=d,a.current="loaded",r())})(),()=>{t=!0}}),[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[i.current,a.current]};function useVideo(e,t,r){const a=react_1.default.useRef("loading"),i=react_1.default.useRef(),[o,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",i.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,function(){o.removeEventListener("canplay",d),o.removeEventListener("error",c)}}function d(){a.current="loaded",i.current=o,i.current.currentTime=0,n(Math.random()),i.current.removeEventListener("canplay",d)}function c(e){a.current="failed",i.current=void 0,n(Math.random())}}),[e,t,r]),[i.current,a.current]}exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,i]=react_1.default.useState(!1),o=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 i=new konva_1.default.Animation((()=>{}),null===(r=o.current)||void 0===r?void 0:r.getLayer());i.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),()=>{i.stop(),s.removeEventListener("ended",n),s.removeEventListener("timeupdate",d)}}),[s,h,t.isPlaying]);const p=react_1.default.useRef();react_1.default.useEffect((()=>(0,mobx_1.autorun)((()=>{var r,a;if(s){const i=(t.currentTime-e.page.startTime)%e.duration;(Math.abs(1e3*s.currentTime-i)>500||!t.isPlaying)&&(s.currentTime=i/1e3,t.isPlaying||0===s.currentTime||(p.current=(0,loader_1.incrementLoader)(`video ${e.id}`))),null===(a=null===(r=o.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=()=>{var r,a;p.current&&(null===(a=null===(r=o.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw(),p.current(),p.current=null),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:_,cropY:m,cropWidth:w,cropHeight:v}=e;"loaded"!==g&&(_=m=0,w=v=1);const x=f.width*w,y=f.height*v,M=e.width/e.height;let E,b;const L=x/y,C="svg"===e.type;C?(E=x,b=y):M>=L?(E=x,b=x/M):(E=y*M,b=y);const k={x:f.width*_,y:f.height*m,width:E,height:b},I=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let S=useClip(e,useCornerRadiusAndCrop(e,f,k,t._elementsPixelRatio,I,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[k,I,t._elementsPixelRatio]);const R=Math.max(e.width/E,e.height/b);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!==n.current&&e.toggleCropMode(!1)}function i(t){e._cropModeEnabled&&t.target.parentNode!==r.content&&e.toggleCropMode(!1)}return document.body.addEventListener("click",i),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",i),document.body.removeEventListener("touchstart",i),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})}),[f,a,w,v,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 T=react_1.default.useRef(null),O=react_1.default.useRef(null),P=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(O.current.nodes([T.current]),P.current.nodes([n.current]))}),[e._cropModeEnabled]);const X=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(),i=Math.min(1,E/r),o=Math.min(1,b/a),n=1-i,d=Math.min(n,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*f.width,y:-l*f.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:l,cropWidth:i,cropHeight:o})},Y=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},A="loading"===g,H="failed"===g,D=!A&&!H,W=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),q=D?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(o,q);const B=e.selectable||"admin"===t.role,F=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,A&&react_1.default.createElement(LoadingPlaceholder,{element:e}),H&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:o,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:q,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:k,listening:B,cropX:k.x,cropY:k.y,cropWidth:k.width,cropHeight:k.height,draggable:F?e.draggable&&l:e.draggable,preventDefault:!F||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:Y,onDblTap:Y,onTransformStart:()=>{i(!0),W.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,i=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 n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-E/f.width,c=Math.min(d,Math.max(0,e.cropX)),l=1-b/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&&i<1&&W.current.cropHeight>b/f.height;let p=s?e.cropWidth:e.cropWidth*i;g&&(p=e.cropWidth);const _=!s&&o<1&&W.current.cropWidth>E/f.width;let m=s?e.cropHeight:e.cropHeight*o;_&&(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()*i,height:a.height()*o,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:E/f.width,cropHeight:b/f.height}),i(!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:q,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,I-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:S,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:R,scaleY:R},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:X,onTransform:X}),react_1.default.createElement(react_konva_1.Transformer,{ref:P,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:E,height:b,ref:T,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)),i=t.target.width()*t.target.scaleX(),o=t.target.height()*t.target.scaleY(),n=Math.min(1-r,i/f.width),d=Math.min(1-a,o/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(i*R,f.width*(1-r)*R),height:Math.min(o*R,f.height*(1-a)*R)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:O,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 i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,i)}: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,i;const{flipX:o,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(!o&&!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=o?-l.width:0,s=n?-l.height:0;return null===(a=l.getContext("2d"))||void 0===a||a.scale(o?-1:1,n?-1:1),null===(i=l.getContext("2d"))||void 0===i||i.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,i;r>=e.width/e.height?(a=e.width,i=e.width/r):(a=e.height*r,i=e.height);return{x:(e.width-a)/2,y:(e.height-i)/2,width:a,height:i}}function downsample(e,t,r,a,i,o,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/o,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)+(i+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[v+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[w+m*u]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const i=createCanvas();i.width=e.width,i.height=e.height,null===(r=i.getContext("2d"))||void 0===r||r.drawImage(e,0,0,i.width,i.height);const o=downsample(i.getContext("2d").getImageData(0,0,i.width,i.height),Math.floor(i.width*t),Math.floor(i.height*t),0,0,i.width,i.height);return i.width=Math.floor(i.width*t),i.height=Math.floor(i.height*t),null===(a=i.getContext("2d"))||void 0===a||a.putImageData(o,0,0),i}const useCornerRadiusAndCrop=(e,t,r,a,i=0,o=!1)=>{const n=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(i*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&&!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]);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,i=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,i.x,i.y,i.width,i.height,0,0,s.width,s.height)}),[s,e.width,e.height,r.x,r.y,r.width,r.height,i,a,o,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 i=useSizeFixer(e.clipSrc||""),[o,n]=useImageHook(i,"anonymous"),d=e.clipSrc?n:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=react_1.default.useMemo((()=>{if(t&&o)return createCanvas()}),[t,o]);react_1.default.useLayoutEffect((()=>{var a;if(!o)return;if(!t||!t.width||!t.height)return;if(!o||!o.width||!o.height)return;if(!c)return;const i=createCanvas(),n=Math.max(e.width/o.width*r,e.height/o.height*r);i.width=o.width*n,i.height=o.height*n,null===(a=i.getContext("2d"))||void 0===a||a.drawImage(o,0,0,i.width,i.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(i,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(i),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}),[c,t,o,e.width,e.height,r,...a]);return e.clipSrc&&o?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"),i=react_1.default.useRef(e.src),o=react_1.default.useRef(e.src);return o.current!==e.src&&(o.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 o=await svg.urlToString(e.src),n=svg.fixSize(o),d=svg.replaceColors(n,e.colorsReplace);t||(i.current=d,a.current="loaded",r())})(),()=>{t=!0}}),[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[i.current,a.current]};function useVideo(e,t,r){const a=react_1.default.useRef("loading"),i=react_1.default.useRef(),[o,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",i.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,function(){o.removeEventListener("canplay",d),o.removeEventListener("error",c)}}function d(){a.current="loaded",i.current=o,i.current.currentTime=0,n(Math.random()),i.current.removeEventListener("canplay",d)}function c(e){a.current="failed",i.current=void 0,n(Math.random())}}),[e,t,r]),[i.current,a.current]}exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,i]=react_1.default.useState(!1),o=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 i=new konva_1.default.Animation((()=>{}),null===(r=o.current)||void 0===r?void 0:r.getLayer());i.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),()=>{i.stop(),s.removeEventListener("ended",n),s.removeEventListener("timeupdate",d)}}),[s,h,t.isPlaying]);const p=react_1.default.useRef();react_1.default.useEffect((()=>(0,mobx_1.autorun)((()=>{var r,a;if(s){const i=(t.currentTime-e.page.startTime)%e.duration;(Math.abs(1e3*s.currentTime-i)>500||!t.isPlaying)&&(s.currentTime=i/1e3,t.isPlaying||0===s.currentTime||(p.current=(0,loader_1.incrementLoader)(`video ${e.id}`))),null===(a=null===(r=o.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=()=>{var r,a;p.current&&(null===(a=null===(r=o.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw(),p.current(),p.current=null),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:_,cropY:m,cropWidth:w,cropHeight:v}=e;"loaded"!==g&&(_=m=0,w=v=1);const x=f.width*w,y=f.height*v,M=e.width/e.height;let E,b;const L=x/y,C="svg"===e.type;C?(E=x,b=y):M>=L?(E=x,b=x/M):(E=y*M,b=y);const k={x:f.width*_,y:f.height*m,width:E,height:b},I=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let S=useClip(e,useCornerRadiusAndCrop(e,f,k,t._elementsPixelRatio,I,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[k,I,t._elementsPixelRatio]);const R=Math.max(e.width/E,e.height/b);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!==n.current&&e.toggleCropMode(!1)}function i(t){e._cropModeEnabled&&t.target.parentNode!==r.content&&e.toggleCropMode(!1)}return document.body.addEventListener("click",i),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",i),document.body.removeEventListener("touchstart",i),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})}),[f,a,w,v,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 T=react_1.default.useRef(null),O=react_1.default.useRef(null),P=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(O.current.nodes([T.current]),P.current.nodes([n.current]))}),[e._cropModeEnabled]);const X=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(),i=Math.min(1,E/r),o=Math.min(1,b/a),n=1-i,d=Math.min(n,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*f.width,y:-l*f.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:l,cropWidth:i,cropHeight:o})},Y=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},A="loading"===g,H="failed"===g,D=!A&&!H,W=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),q=D?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(o,q);const B=e.selectable||"admin"===t.role,F=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,A&&react_1.default.createElement(LoadingPlaceholder,{element:e}),H&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:o,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:q,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:k,listening:B,cropX:k.x,cropY:k.y,cropWidth:k.width,cropHeight:k.height,draggable:F?e.draggable&&l:e.draggable,preventDefault:!F||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:Y,onDblTap:Y,onTransformStart:()=>{i(!0),W.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,i=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 n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-E/f.width,c=Math.min(d,Math.max(0,e.cropX)),l=1-b/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&&i<1&&W.current.cropHeight>b/f.height;let p=s?e.cropWidth:e.cropWidth*i;g&&(p=e.cropWidth);const _=!s&&o<1&&W.current.cropWidth>E/f.width;let m=s?e.cropHeight:e.cropHeight*o;_&&(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()*i,height:a.height()*o,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:E/f.width,cropHeight:b/f.height}),i(!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:q,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,I-e.borderSize),hideInExport:!e.showInExport}),!h&&!t.isPlaying&&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&&!t.isPlaying&&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:S,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:R,scaleY:R},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:X,onTransform:X}),react_1.default.createElement(react_konva_1.Transformer,{ref:P,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:E,height:b,ref:T,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)),i=t.target.width()*t.target.scaleX(),o=t.target.height()*t.target.scaleY(),n=Math.min(1-r,i/f.width),d=Math.min(1-a,o/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(i*R,f.width*(1-r)*R),height:Math.min(o*R,f.height*(1-a)*R)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref:O,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}))}));
|
package/config.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { registerShapeModel as unstable_registerShapeModel } from './model/group
|
|
|
8
8
|
export { registerShapeComponent as unstable_registerShapeComponent } from './canvas/element';
|
|
9
9
|
export { registerTransformerAttrs as unstable_registerTransformerAttrs } from './canvas/page';
|
|
10
10
|
export { registerToolbarComponent as unstable_registerToolbarComponent } from './toolbar/toolbar';
|
|
11
|
-
export { onLoadError, setAssetLoadTimeout } from './utils/loader';
|
|
11
|
+
export { onLoadError, setAssetLoadTimeout, setFontLoadTimeout, } from './utils/loader';
|
|
12
12
|
export { setTranslations, getTranslations } from './utils/l10n';
|
|
13
13
|
export { registerNextDomDrop as unstable_registerNextDomDrop } from './canvas/page';
|
|
14
14
|
export { getGoogleFontsListAPI, getGoogleFontImage, setAPI } from './utils/api';
|
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_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.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}});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_setTextOverflow",{enumerable:!0,get:function(){return flags_5.setTextOverflow}});var flags_6=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextVerticalResizeEnabled",{enumerable:!0,get:function(){return flags_6.setTextVerticalResizeEnabled}});var flags_7=require("./utils/flags");Object.defineProperty(exports,"unstable_setAnimationsEnabled",{enumerable:!0,get:function(){return flags_7.setAnimationsEnabled}});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unstable_setAnimationsEnabled=exports.unstable_setTextVerticalResizeEnabled=exports.unstable_setTextOverflow=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.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 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_setTextOverflow",{enumerable:!0,get:function(){return flags_5.setTextOverflow}});var flags_6=require("./utils/flags");Object.defineProperty(exports,"unstable_setTextVerticalResizeEnabled",{enumerable:!0,get:function(){return flags_6.setTextVerticalResizeEnabled}});var flags_7=require("./utils/flags");Object.defineProperty(exports,"unstable_setAnimationsEnabled",{enumerable:!0,get:function(){return flags_7.setAnimationsEnabled}});
|
package/model/store.d.ts
CHANGED
|
@@ -333,11 +333,12 @@ export declare const Store: import("mobx-state-tree").IModelType<{
|
|
|
333
333
|
} & {
|
|
334
334
|
afterCreate(): void;
|
|
335
335
|
setCurrentTime(time: any): void;
|
|
336
|
-
play({ animatedElementsIds, startTime, currentTime, endTime, }?: {
|
|
336
|
+
play({ animatedElementsIds, startTime, currentTime, endTime, repeat, }?: {
|
|
337
337
|
animatedElementsIds?: any[];
|
|
338
338
|
startTime?: number;
|
|
339
339
|
currentTime?: number;
|
|
340
340
|
endTime?: number;
|
|
341
|
+
repeat?: boolean;
|
|
341
342
|
}): void;
|
|
342
343
|
checkActivePage(): void;
|
|
343
344
|
seek(): void;
|
package/model/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var o=Object.getOwnPropertyDescriptor(t,a);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,o)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),__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 a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&__createBinding(t,e,a);return __setModuleDefault(t,e),t},__rest=this&&this.__rest||function(e,t){var a={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(a[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(e);o<i.length;o++)t.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(e,i[o])&&(a[i[o]]=e[i[o]])}return a},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createStore=exports.Store=exports.Font=void 0;const mobx_state_tree_1=require("mobx-state-tree"),history_1=require("./history"),nanoid_1=require("nanoid"),konva_1=__importDefault(require("konva")),download_1=require("../utils/download"),pdf_1=require("../utils/pdf"),gif_lib_1=require("../utils/gif-lib"),validate_key_1=require("../utils/validate-key"),fonts=__importStar(require("../utils/fonts")),loader_1=require("../utils/loader"),unit_1=require("../utils/unit"),deep_equal_1=require("../utils/deep-equal"),wait_1=require("../utils/wait"),html_1=require("../utils/html"),to_svg_1=require("../utils/to-svg"),page_model_1=require("./page-model"),group_model_1=require("./group-model");function createStore({key:e,showCredit:t}={key:"",showCredit:!1}){const a=exports.Store.create();return(0,validate_key_1.validateKey)(e,t),a}(0,mobx_state_tree_1.setLivelinessChecking)("ignore"),exports.Font=mobx_state_tree_1.types.model("Font",{fontFamily:mobx_state_tree_1.types.string,url:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string,""),styles:mobx_state_tree_1.types.frozen()}).preProcessSnapshot((e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name}))),exports.Store=mobx_state_tree_1.types.model("Store",{role:"",pages:mobx_state_tree_1.types.array(page_model_1.Page),fonts:mobx_state_tree_1.types.array(exports.Font),width:1080,height:1080,currentTime:0,isPlaying:!1,scale:1,scaleToFit:1,unit:"px",dpi:72,bleedVisible:!1,rulesVisible:!1,openedSidePanel:"",custom:mobx_state_tree_1.types.frozen(),selectedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),animatedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),history:mobx_state_tree_1.types.optional(history_1.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views((e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map((t=>{for(const a of e.pages)for(const e of a.children)if(e.id===t)return e})).filter((e=>!!e))},get children(){return e.pages},get selectedShapes(){const t=[];return(0,group_model_1.forEveryChild)({children:e.selectedElements},(e=>{"group"!==e.type&&t.push(e)})),t},get activePage(){return e.pages.slice().find((t=>t.id===e._activePageId))||(e.pages.length?e.pages[0]:null)},get duration(){let t=0;return e.pages.forEach((e=>{t+=e.duration})),t},get _hasCroppedImages(){return e.find((e=>"image"===e.type&&e._cropModeEnabled))},find(t){let a;return(0,group_model_1.forEveryChild)({children:e.pages},(e=>{if(!a&&t(e))return a=e,!0})),a},getElementById:t=>e.find((e=>e.id===t))}))).actions((e=>{let t=0,a=null;return{afterCreate(){e.history.canUndo},setCurrentTime(t){e.currentTime=t},play({animatedElementsIds:i=[],startTime:o=0,currentTime:n=0,endTime:s=e.duration}={}){n&&(console.warn("currentTime property of store.play() is deprecated. Please use startTime instead."),o=n),e.animatedElementsIds=(0,mobx_state_tree_1.cast)(i),e.currentTime=o,e.isPlaying=!0,t=Date.now(),a=s,requestAnimationFrame(e.seek)},checkActivePage(){let t=0;for(const a of e.pages){if(e.currentTime>=a.startTime&&e.currentTime<a.startTime+a.duration){e.selectPage(a.id);break}t+=a.duration}},seek(){if(!e.isPlaying)return;const i=Date.now(),o=i-t;t=i,e.currentTime+=o,e.checkActivePage();const n=a||e.duration;e.isPlaying&&e.currentTime<n?requestAnimationFrame(e.seek):e.stop()},stop(){e.isPlaying=!1,e.currentTime=0,e.animatedElementsIds=(0,mobx_state_tree_1.cast)([]),e.checkActivePage()}}})).actions((e=>({set(t){Object.assign(e,t)},setUnit({unit:t,dpi:a}){e.unit=t||e.unit,e.dpi=a||e.dpi},setRole(t){e.role=t},addPage(t){const a=page_model_1.Page.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.pages.push(a),e._activePageId=a.id,a},selectPage(t){e._activePageId=t},selectElements(t){const a=t.map((t=>e.getElementById(t))).sort(((e,t)=>e.page.children.indexOf(e)-e.page.children.indexOf(t))).filter((e=>!!e)).map((e=>e.id));e.selectedElementsIds=(0,mobx_state_tree_1.cast)(a)},toggleBleed(t){e.bleedVisible=null!=t?t:!e.bleedVisible},toggleRulers(t){e.rulesVisible=null!=t?t:!e.rulesVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,a,i){e.pages.forEach((e=>{e.setSize({width:t,height:a,useMagic:i,softChange:!0})})),e.width=t,e.height=a},setPageZIndex(t,a){const i=e.pages.find((e=>e.id===t));i&&((0,mobx_state_tree_1.detach)(i),e.pages.remove(i),e.pages.splice(a,0,i))},deletePages(t){const a=e.pages.indexOf(e.activePage);t.forEach((t=>{const a=e.pages.find((e=>e.id===t));(0,mobx_state_tree_1.destroy)(a)}));const i=Math.min(e.pages.length-1,a),o=e.pages[i];o&&(e._activePageId=o.id),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},groupElements(t){const a=t.map((t=>e.getElementById(t)));a.forEach((e=>{e&&(0,mobx_state_tree_1.detach)(e)}));const i=e.activePage,o={id:(0,nanoid_1.nanoid)(10),children:a,type:"group"};return i.children.push(o),e.selectedElementsIds=(0,mobx_state_tree_1.cast)([o.id]),o},ungroupElements(t){const a=t.map((t=>e.getElementById(t))),i=[];a.forEach((e=>{if(e&&"group"===e.type){const t=e.page,a=t.children.indexOf(e);e.children.forEach((e=>{i.push(e.id)})),e.children.forEach((e=>{(0,mobx_state_tree_1.detach)(e),t.children.push(e)})),t.children.splice(a,1)}})),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(i)},deleteElements(t){t.forEach((t=>{e.pages.forEach((e=>{const a=e.children.find((e=>e.id===t));a&&(0,mobx_state_tree_1.destroy)(a)}))})),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},on(t,a){if("change"===t){let t=e.toJSON();return(0,mobx_state_tree_1.onSnapshot)(e,(i=>{const o=e.toJSON();!(0,deep_equal_1.deepEqual)(t,o)&&(t=o,a(o))}))}},async _toCanvas({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n}={}){var s;const r=t||1;i=i||(null===(s=e.pages[0])||void 0===s?void 0:s.id);const l=e.pages.find((e=>e.id===i));if(!l)throw new Error(`No page for export with id ${i}`);null==l||l.set({_exporting:!0});const d=await(0,wait_1.waitTillAvailable)((()=>konva_1.default.stages.find((e=>e.getAttr("pageId")===i))));if(!d)throw new Error(`Export is failed. Can not find stage for page ${i}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);const c=!!d.findOne(".page-container"),p=e._elementsPixelRatio;r>e._elementsPixelRatio&&e.setElementsPixelRatio(r),await e.waitLoading();const g=d.findOne(".page-container");if(!g)throw e.setElementsPixelRatio(p),new Error(`Export is failed. Can't find page container. ${c}`);d.find("Transformer").forEach((e=>e.visible(!1))),g.find(".page-background").forEach((e=>e.shadowEnabled(!1))),g.find(".page-background").forEach((e=>e.strokeEnabled(!1))),g.find(".highlighter").forEach((e=>e.visible(!1)));const u=g.findOne(".page-background-group"),_=u.clip();u.clip({x:null,y:null,width:null,height:null});const m=g.findOne(".elements-container"),f=m.clip();m.clip({x:null,y:null,width:null,height:null});const h=g.find((e=>e.getAttr("hideInExport")));h.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.hide()}));const b=g.find((e=>!e.visible()&&e.getAttr("editModeEnabled")));b.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.show()})),a&&g.find(".page-background").forEach((e=>e.hide()));const y=n?l.bleed:0;let x=y;!e.bleedVisible&&n||(e.bleedVisible||n?e.bleedVisible&&n?x=0:e.bleedVisible&&!n&&(x=-l.bleed):x=0);const v=document.createElement("canvas");v.width=Math.round((l.computedWidth+2*y)*r),v.height=Math.round((l.computedHeight+2*y)*r);const w=v.getContext("2d");"image/jpeg"===o&&(w.fillStyle="white",w.fillRect(0,0,v.width,v.height));const E=g.scale();g.scale({x:1,y:1});const P=g.toCanvas({x:g.x()-x,y:g.y()-x,width:l.computedWidth+2*y,height:l.computedHeight+2*y,pixelRatio:r});return g.scale(E),w.drawImage(P,0,0,v.width,v.height),konva_1.default.Util.releaseCanvas(P),a&&g.find(".page-background").forEach((e=>e.show())),h.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),b.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),g.find(".page-background").forEach((e=>e.shadowEnabled(!0))),g.find(".page-background").forEach((e=>e.strokeEnabled(!0))),d.find("Transformer").forEach((e=>e.visible(!0))),g.find(".highlighter").forEach((e=>e.visible(!0))),u.clip(_),m.clip(f),e.setElementsPixelRatio(p),null==l||l.set({_exporting:!1}),v},async toDataURL({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n,quality:s}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n}),l=r.toDataURL(o,s);return konva_1.default.Util.releaseCanvas(r),l},async toBlob({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n,quality:s}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n}),l=new Promise((e=>{r.toBlob(e,o,s)}));return konva_1.default.Util.releaseCanvas(r),l},async saveAsImage(t={}){var{fileName:a}=t,i=__rest(t,["fileName"]);const o=i.mimeType||"image/png",n=o.split("/")[1];(0,download_1.downloadFile)(await e.toDataURL(i),a||"polotno."+n,o)},async _toPDF(t){const a=t.dpi||e.dpi,i=t.parallel||1,o=t.unit||("px"===e.unit?"mm":e.unit),n=t.pixelRatio||1,s=t.pageIds||e.pages.map((e=>e.id)),r=e.pages.filter((e=>s.includes(e.id))),l=await(0,pdf_1.getJsPDF)(),d=e=>(0,unit_1.pxToUnit)({px:e,unit:o,dpi:a}),c=d(t.cropMarkSize||0),p=r[0]||{},g=t.includeBleed?p.bleed:0,u=d(p.computedWidth+2*g)+2*c,_=d(p.computedHeight+2*g)+2*c;var m=new l({unit:o,orientation:u>_?"landscape":"portrait",format:[u,_],compress:!0,putOnlyUsedFonts:!0});m.deletePage(1);const f=((e,t)=>{for(var a=[],i=0;i<e.length;i+=t)a.push(e.slice(i,i+t));return a})(r,i);for(const a of f){const i=a.map((async a=>{const i=t.includeBleed?a.bleed:0,o=d(a.computedWidth+2*i)+2*c,s=d(a.computedHeight+2*i)+2*c;let r=0,l=n;for(;r<10;){r+=1,2===r&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const i=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:a.id,pixelRatio:l}));if(i.length>20)return{url:i,width:o,height:s};l*=.8}}));(await Promise.all(i)).forEach((({url:e,width:t,height:a})=>{m.addPage([t,a],t>a?"landscape":"portrait"),c&&(m.setLineWidth(d(1)),m.line(2*c,0,2*c,c),m.line(0,2*c,c,2*c),m.line(t-2*c,0,t-2*c,c),m.line(t,2*c,t-c,2*c),m.line(0,a-2*c,c,a-2*c),m.line(2*c,a,2*c,a-c),m.line(t,a-2*c,t-c,a-2*c),m.line(t-2*c,a,t-2*c,a-c)),m.addImage(e,c,c,t-2*c,a-2*c,void 0,"FAST")}))}return m},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpeg"},t))).output("datauristring"),async toGIFDataURL(t={}){const a=t.pixelRatio||1,i=await(0,gif_lib_1.createGIF)({width:e.width*a,height:e.height*a}),o=1e3/(t.fps||10),n=e.duration/o;for(let t=0;t<n-1;t++){const n=t*o||1;e.setCurrentTime(n);let s=0,r="";for(const t of e.pages)if(s+=t.duration,t.set({_rendering:s>n}),s>n){r=t.id;break}const l=await e._toCanvas({pixelRatio:a,pageId:r});i.addFrame(l.getContext("2d"),{delay:o,copy:!0})}for(const t of e.pages)t.set({_rendering:!1});e.stop(),i.render();return new Promise((e=>{i.on("finished",(function(t){!function(e,t){var a=new FileReader;a.onload=function(e){t(e.target.result)},a.readAsDataURL(e)}(t,e)}))}))},async saveAsGIF(t={}){var{fileName:a}=t,i=__rest(t,["fileName"]);const o=await e.toGIFDataURL(i);(0,download_1.downloadFile)(o,a||"polotno.gif")},async toHTML({elementHook:t}={elementHook:void 0}){const a=e.toJSON();return(0,html_1.jsonToHTML)({json:a,elementHook:t})},async saveAsHTML({fileName:t}={}){const a=await e.toHTML(),i="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(a)));(0,download_1.downloadFile)(i,t||"polotno.html")},async toSVG(){const t=e.toJSON();return(0,to_svg_1.jsonToSVG)({json:t})},async saveAsSVG({fileName:t}={}){const a=await e.toSVG(),i="data:text/svg;base64,"+window.btoa(unescape(encodeURIComponent(a)));(0,download_1.downloadFile)(i,t||"polotno.svg")},async saveAsPDF(t={}){var{fileName:a}=t,i=__rest(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},i))).save(a||"polotno.pdf")},async waitLoading(){await new Promise((e=>setTimeout(e,50))),await(0,loader_1.whenLoaded)()},toJSON:()=>({width:e.width,height:e.height,fonts:(0,mobx_state_tree_1.getSnapshot)(e.fonts),pages:(0,mobx_state_tree_1.getSnapshot)(e.pages),unit:e.unit,dpi:e.dpi,custom:e.custom}),loadJSON(t,a=!1){var i;const o=Object.assign({},t),n=e.pages.indexOf(e.activePage);let s=null===(i=o.pages[n]||o.pages[0])||void 0===i?void 0:i.id;o._activePageId=s;const r=Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e));Object.assign(r,o),r.history=a?e.history.toJSON():{history:[],undoIdx:-1},(0,mobx_state_tree_1.applySnapshot)(e,r)},clear({keepHistory:t=!1}={}){const a=e.pages.map((e=>e.id));e.deletePages(a),t||e.history.clear()},addFont(t){e.removeFont(t.fontFamily),e.fonts.push(t),e.loadFont(t.fontFamily)},removeFont(t){e.fonts.filter((e=>e.fontFamily===t)).forEach((e=>(0,mobx_state_tree_1.destroy)(e)))},async loadFont(t){const a=e.fonts.find((e=>e.fontFamily===t))||fonts.globalFonts.find((e=>e.fontFamily===t));a?fonts.injectCustomFont(a):fonts.injectGoogleFont(t),await fonts.loadFont(t)},validate:e=>exports.Store.validate(e,[{path:"",type:exports.Store}]).map((e=>({path:"store"+e.context.map((e=>e.path)).join("."),message:e.message})))}))),exports.createStore=createStore,exports.default=createStore;
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var o=Object.getOwnPropertyDescriptor(t,a);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,o)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),__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 a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&__createBinding(t,e,a);return __setModuleDefault(t,e),t},__rest=this&&this.__rest||function(e,t){var a={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(a[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(e);o<i.length;o++)t.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(e,i[o])&&(a[i[o]]=e[i[o]])}return a},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createStore=exports.Store=exports.Font=void 0;const mobx_state_tree_1=require("mobx-state-tree"),history_1=require("./history"),nanoid_1=require("nanoid"),konva_1=__importDefault(require("konva")),download_1=require("../utils/download"),pdf_1=require("../utils/pdf"),gif_lib_1=require("../utils/gif-lib"),validate_key_1=require("../utils/validate-key"),fonts=__importStar(require("../utils/fonts")),loader_1=require("../utils/loader"),unit_1=require("../utils/unit"),deep_equal_1=require("../utils/deep-equal"),wait_1=require("../utils/wait"),html_1=require("../utils/html"),to_svg_1=require("../utils/to-svg"),page_model_1=require("./page-model"),group_model_1=require("./group-model");function createStore({key:e,showCredit:t}={key:"",showCredit:!1}){const a=exports.Store.create();return(0,validate_key_1.validateKey)(e,t),a}(0,mobx_state_tree_1.setLivelinessChecking)("ignore"),exports.Font=mobx_state_tree_1.types.model("Font",{fontFamily:mobx_state_tree_1.types.string,url:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string,""),styles:mobx_state_tree_1.types.frozen()}).preProcessSnapshot((e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name}))),exports.Store=mobx_state_tree_1.types.model("Store",{role:"",pages:mobx_state_tree_1.types.array(page_model_1.Page),fonts:mobx_state_tree_1.types.array(exports.Font),width:1080,height:1080,currentTime:0,isPlaying:!1,scale:1,scaleToFit:1,unit:"px",dpi:72,bleedVisible:!1,rulesVisible:!1,openedSidePanel:"",custom:mobx_state_tree_1.types.frozen(),selectedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),animatedElementsIds:mobx_state_tree_1.types.array(mobx_state_tree_1.types.string),history:mobx_state_tree_1.types.optional(history_1.UndoManager,{targetPath:"../pages"}),_elementsPixelRatio:2,_activePageId:""}).views((e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map((t=>{for(const a of e.pages)for(const e of a.children)if(e.id===t)return e})).filter((e=>!!e))},get children(){return e.pages},get selectedShapes(){const t=[];return(0,group_model_1.forEveryChild)({children:e.selectedElements},(e=>{"group"!==e.type&&t.push(e)})),t},get activePage(){return e.pages.slice().find((t=>t.id===e._activePageId))||(e.pages.length?e.pages[0]:null)},get duration(){let t=0;return e.pages.forEach((e=>{t+=e.duration})),t},get _hasCroppedImages(){return e.find((e=>"image"===e.type&&e._cropModeEnabled))},find(t){let a;return(0,group_model_1.forEveryChild)({children:e.pages},(e=>{if(!a&&t(e))return a=e,!0})),a},getElementById:t=>e.find((e=>e.id===t))}))).actions((e=>{let t=0,a=null,i=!1;return{afterCreate(){e.history.canUndo},setCurrentTime(t){e.currentTime=t},play({animatedElementsIds:o=[],startTime:n=0,currentTime:s=0,endTime:r=e.duration,repeat:l=!1}={}){s&&(console.warn("currentTime property of store.play() is deprecated. Please use startTime instead."),n=s),e.animatedElementsIds=(0,mobx_state_tree_1.cast)(o),e.currentTime=n,e.isPlaying=!0,t=Date.now(),a=r,i=l,requestAnimationFrame(e.seek)},checkActivePage(){let t=0;for(const a of e.pages){if(e.currentTime>=a.startTime&&e.currentTime<a.startTime+a.duration){e.selectPage(a.id);break}t+=a.duration}},seek(){if(!e.isPlaying)return;const o=Date.now(),n=o-t;t=o,e.currentTime+=n,e.checkActivePage();const s=a||e.duration;e.isPlaying&&e.currentTime<s?requestAnimationFrame(e.seek):e.isPlaying&&i?(e.currentTime=0,requestAnimationFrame(e.seek)):e.stop()},stop(){e.isPlaying=!1,e.currentTime=0,e.animatedElementsIds=(0,mobx_state_tree_1.cast)([]),e.checkActivePage()}}})).actions((e=>({set(t){Object.assign(e,t)},setUnit({unit:t,dpi:a}){e.unit=t||e.unit,e.dpi=a||e.dpi},setRole(t){e.role=t},addPage(t){const a=page_model_1.Page.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.pages.push(a),e._activePageId=a.id,a},selectPage(t){e._activePageId=t},selectElements(t){const a=t.map((t=>e.getElementById(t))).sort(((e,t)=>e.page.children.indexOf(e)-e.page.children.indexOf(t))).filter((e=>!!e)).map((e=>e.id));e.selectedElementsIds=(0,mobx_state_tree_1.cast)(a)},toggleBleed(t){e.bleedVisible=null!=t?t:!e.bleedVisible},toggleRulers(t){e.rulesVisible=null!=t?t:!e.rulesVisible},openSidePanel(t){e.openedSidePanel=t},setScale(t){e.scale=t},_setScaleToFit(t){e.scaleToFit=t},setElementsPixelRatio(t){e._elementsPixelRatio=t},setSize(t,a,i){e.pages.forEach((e=>{e.setSize({width:t,height:a,useMagic:i,softChange:!0})})),e.width=t,e.height=a},setPageZIndex(t,a){const i=e.pages.find((e=>e.id===t));i&&((0,mobx_state_tree_1.detach)(i),e.pages.remove(i),e.pages.splice(a,0,i))},deletePages(t){const a=e.pages.indexOf(e.activePage);t.forEach((t=>{const a=e.pages.find((e=>e.id===t));(0,mobx_state_tree_1.destroy)(a)}));const i=Math.min(e.pages.length-1,a),o=e.pages[i];o&&(e._activePageId=o.id),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},groupElements(t){const a=t.map((t=>e.getElementById(t)));a.forEach((e=>{e&&(0,mobx_state_tree_1.detach)(e)}));const i=e.activePage,o={id:(0,nanoid_1.nanoid)(10),children:a,type:"group"};return i.children.push(o),e.selectedElementsIds=(0,mobx_state_tree_1.cast)([o.id]),o},ungroupElements(t){const a=t.map((t=>e.getElementById(t))),i=[];a.forEach((e=>{if(e&&"group"===e.type){const t=e.page,a=t.children.indexOf(e);e.children.forEach((e=>{i.push(e.id)})),e.children.forEach((e=>{(0,mobx_state_tree_1.detach)(e),t.children.push(e)})),t.children.splice(a,1)}})),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(i)},deleteElements(t){t.forEach((t=>{e.pages.forEach((e=>{const a=e.children.find((e=>e.id===t));a&&(0,mobx_state_tree_1.destroy)(a)}))})),e.selectedElementsIds=(0,mobx_state_tree_1.cast)(e.selectedElementsIds.filter((t=>e.getElementById(t))))},on(t,a){if("change"===t){let t=e.toJSON();return(0,mobx_state_tree_1.onSnapshot)(e,(i=>{const o=e.toJSON();!(0,deep_equal_1.deepEqual)(t,o)&&(t=o,a(o))}))}},async _toCanvas({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n}={}){var s;const r=t||1;i=i||(null===(s=e.pages[0])||void 0===s?void 0:s.id);const l=e.pages.find((e=>e.id===i));if(!l)throw new Error(`No page for export with id ${i}`);null==l||l.set({_exporting:!0});const d=await(0,wait_1.waitTillAvailable)((()=>konva_1.default.stages.find((e=>e.getAttr("pageId")===i))));if(!d)throw new Error(`Export is failed. Can not find stage for page ${i}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`);const c=!!d.findOne(".page-container"),p=e._elementsPixelRatio;r>e._elementsPixelRatio&&e.setElementsPixelRatio(r),await e.waitLoading();const u=d.findOne(".page-container");if(!u)throw e.setElementsPixelRatio(p),new Error(`Export is failed. Can't find page container. ${c}`);d.find("Transformer").forEach((e=>e.visible(!1))),u.find(".page-background").forEach((e=>e.shadowEnabled(!1))),u.find(".page-background").forEach((e=>e.strokeEnabled(!1))),u.find(".highlighter").forEach((e=>e.visible(!1)));const g=u.findOne(".page-background-group"),_=g.clip();g.clip({x:null,y:null,width:null,height:null});const m=u.findOne(".elements-container"),f=m.clip();m.clip({x:null,y:null,width:null,height:null});const h=u.find((e=>e.getAttr("hideInExport")));h.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.hide()}));const b=u.find((e=>!e.visible()&&e.getAttr("editModeEnabled")));b.forEach((e=>{e.setAttr("oldVisible",e.visible()),e.show()})),a&&u.find(".page-background").forEach((e=>e.hide()));const y=n?l.bleed:0;let x=y;!e.bleedVisible&&n||(e.bleedVisible||n?e.bleedVisible&&n?x=0:e.bleedVisible&&!n&&(x=-l.bleed):x=0);const v=document.createElement("canvas");v.width=Math.round((l.computedWidth+2*y)*r),v.height=Math.round((l.computedHeight+2*y)*r);const w=v.getContext("2d");"image/jpeg"===o&&(w.fillStyle="white",w.fillRect(0,0,v.width,v.height));const E=u.scale();u.scale({x:1,y:1});const P=u.toCanvas({x:u.x()-x,y:u.y()-x,width:l.computedWidth+2*y,height:l.computedHeight+2*y,pixelRatio:r});return u.scale(E),w.drawImage(P,0,0,v.width,v.height),konva_1.default.Util.releaseCanvas(P),a&&u.find(".page-background").forEach((e=>e.show())),h.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),b.forEach((e=>{e.visible(e.getAttr("oldVisible"))})),u.find(".page-background").forEach((e=>e.shadowEnabled(!0))),u.find(".page-background").forEach((e=>e.strokeEnabled(!0))),d.find("Transformer").forEach((e=>e.visible(!0))),u.find(".highlighter").forEach((e=>e.visible(!0))),g.clip(_),m.clip(f),e.setElementsPixelRatio(p),null==l||l.set({_exporting:!1}),v},async toDataURL({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n,quality:s}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n}),l=r.toDataURL(o,s);return konva_1.default.Util.releaseCanvas(r),l},async toBlob({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n,quality:s}={}){const r=await e._toCanvas({pixelRatio:t,ignoreBackground:a,pageId:i,mimeType:o,includeBleed:n}),l=new Promise((e=>{r.toBlob(e,o,s)}));return konva_1.default.Util.releaseCanvas(r),l},async saveAsImage(t={}){var{fileName:a}=t,i=__rest(t,["fileName"]);const o=i.mimeType||"image/png",n=o.split("/")[1];(0,download_1.downloadFile)(await e.toDataURL(i),a||"polotno."+n,o)},async _toPDF(t){const a=t.dpi||e.dpi,i=t.parallel||1,o=t.unit||("px"===e.unit?"mm":e.unit),n=t.pixelRatio||1,s=t.pageIds||e.pages.map((e=>e.id)),r=e.pages.filter((e=>s.includes(e.id))),l=await(0,pdf_1.getJsPDF)(),d=e=>(0,unit_1.pxToUnit)({px:e,unit:o,dpi:a}),c=d(t.cropMarkSize||0),p=r[0]||{},u=t.includeBleed?p.bleed:0,g=d(p.computedWidth+2*u)+2*c,_=d(p.computedHeight+2*u)+2*c;var m=new l({unit:o,orientation:g>_?"landscape":"portrait",format:[g,_],compress:!0,putOnlyUsedFonts:!0});m.deletePage(1);const f=((e,t)=>{for(var a=[],i=0;i<e.length;i+=t)a.push(e.slice(i,i+t));return a})(r,i);for(const a of f){const i=a.map((async a=>{const i=t.includeBleed?a.bleed:0,o=d(a.computedWidth+2*i)+2*c,s=d(a.computedHeight+2*i)+2*c;let r=0,l=n;for(;r<10;){r+=1,2===r&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const i=await e.toDataURL(Object.assign(Object.assign({},t),{pageId:a.id,pixelRatio:l}));if(i.length>20)return{url:i,width:o,height:s};l*=.8}}));(await Promise.all(i)).forEach((({url:e,width:t,height:a})=>{m.addPage([t,a],t>a?"landscape":"portrait"),c&&(m.setLineWidth(d(1)),m.line(2*c,0,2*c,c),m.line(0,2*c,c,2*c),m.line(t-2*c,0,t-2*c,c),m.line(t,2*c,t-c,2*c),m.line(0,a-2*c,c,a-2*c),m.line(2*c,a,2*c,a-c),m.line(t,a-2*c,t-c,a-2*c),m.line(t-2*c,a,t-2*c,a-c)),m.addImage(e,c,c,t-2*c,a-2*c,void 0,"FAST")}))}return m},toPDFDataURL:async t=>(await e._toPDF(Object.assign({mimeType:"image/jpeg"},t))).output("datauristring"),async toGIFDataURL(t={}){const a=t.pixelRatio||1,i=await(0,gif_lib_1.createGIF)({width:e.width*a,height:e.height*a}),o=1e3/(t.fps||10),n=e.duration/o;for(let t=0;t<n-1;t++){const n=t*o||1;e.setCurrentTime(n);let s=0,r="";for(const t of e.pages)if(s+=t.duration,t.set({_rendering:s>n}),s>n){r=t.id;break}const l=await e._toCanvas({pixelRatio:a,pageId:r});i.addFrame(l.getContext("2d"),{delay:o,copy:!0})}for(const t of e.pages)t.set({_rendering:!1});e.stop(),i.render();return new Promise((e=>{i.on("finished",(function(t){!function(e,t){var a=new FileReader;a.onload=function(e){t(e.target.result)},a.readAsDataURL(e)}(t,e)}))}))},async saveAsGIF(t={}){var{fileName:a}=t,i=__rest(t,["fileName"]);const o=await e.toGIFDataURL(i);(0,download_1.downloadFile)(o,a||"polotno.gif")},async toHTML({elementHook:t}={elementHook:void 0}){const a=e.toJSON();return(0,html_1.jsonToHTML)({json:a,elementHook:t})},async saveAsHTML({fileName:t}={}){const a=await e.toHTML(),i="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(a)));(0,download_1.downloadFile)(i,t||"polotno.html")},async toSVG(){const t=e.toJSON();return(0,to_svg_1.jsonToSVG)({json:t})},async saveAsSVG({fileName:t}={}){const a=await e.toSVG(),i="data:text/svg;base64,"+window.btoa(unescape(encodeURIComponent(a)));(0,download_1.downloadFile)(i,t||"polotno.svg")},async saveAsPDF(t={}){var{fileName:a}=t,i=__rest(t,["fileName"]);(await e._toPDF(Object.assign({mimeType:"image/jpeg"},i))).save(a||"polotno.pdf")},async waitLoading(){await new Promise((e=>setTimeout(e,50))),await(0,loader_1.whenLoaded)()},toJSON:()=>({width:e.width,height:e.height,fonts:(0,mobx_state_tree_1.getSnapshot)(e.fonts),pages:(0,mobx_state_tree_1.getSnapshot)(e.pages),unit:e.unit,dpi:e.dpi,custom:e.custom}),loadJSON(t,a=!1){var i;const o=Object.assign({},t),n=e.pages.indexOf(e.activePage);let s=null===(i=o.pages[n]||o.pages[0])||void 0===i?void 0:i.id;o._activePageId=s;const r=Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e));Object.assign(r,o),r.history=a?e.history.toJSON():{history:[],undoIdx:-1},(0,mobx_state_tree_1.applySnapshot)(e,r)},clear({keepHistory:t=!1}={}){const a=e.pages.map((e=>e.id));e.deletePages(a),t||e.history.clear()},addFont(t){e.removeFont(t.fontFamily),e.fonts.push(t),e.loadFont(t.fontFamily)},removeFont(t){e.fonts.filter((e=>e.fontFamily===t)).forEach((e=>(0,mobx_state_tree_1.destroy)(e)))},async loadFont(t){const a=e.fonts.find((e=>e.fontFamily===t))||fonts.globalFonts.find((e=>e.fontFamily===t));a?fonts.injectCustomFont(a):fonts.injectGoogleFont(t),await fonts.loadFont(t)},validate:e=>exports.Store.validate(e,[{path:"",type:exports.Store}]).map((e=>({path:"store"+e.context.map((e=>e.path)).join("."),message:e.message})))}))),exports.createStore=createStore,exports.default=createStore;
|
package/package.json
CHANGED
|
@@ -42,4 +42,4 @@
|
|
|
42
42
|
.bp5-dark &:hover .pointer {
|
|
43
43
|
color: white;
|
|
44
44
|
}
|
|
45
|
-
`,HideButton=({onClick:e,opened:t})=>react_1.default.createElement(HideButtonContainer,{onClick:e},react_1.default.createElement("svg",{width:"96",height:"16",viewBox:"0 0 96 16",xmlns:"http://www.w3.org/2000/svg"},react_1.default.createElement("path",{className:"fill stroke",d:"M 95.865 16 C 93.555 14.8571 92.4 12.5714 88.6116 8.9143 C 88.4008 8.6286 88.242 8.4571 88.0054 8.3429 L 88.011 8.2286 C 85.701 5.9429 83.622 3.8857 81.1965 2.4 C 79.002 1.1429 76.3455 0.3429 72.765 0.1143 V 0 H 25.41 C 21.1365 0 18.1335 0.8 15.477 2.2857 C 12.936 3.7714 10.9725 5.8286 8.5073 8.2286 L 8.547 8.24 C 8.316 8.4571 8.085 8.6278 7.8393 8.831 C 4.0161 12.6741 3.465 14.8571 0 16"})),react_1.default.createElement("div",{className:"pointer"},t?"<":">")),Page=(0,mobx_react_lite_1.observer)((({page:e,scale:t})=>{const[r,a]=react_1.default.useState(null),o=e.store.activePage===e;react_1.default.useEffect((()=>{const t=async()=>{const t=await e.store.toDataURL({pageId:e.id,pixelRatio:.1});a(t)};let r=null;const o=(0,mobx_state_tree_1.onSnapshot)(e.children,(()=>{r||(r=setTimeout((()=>{t(),r=null}),1e3))}));return t(),()=>{clearTimeout(r),o()}}),[]);const
|
|
45
|
+
`,HideButton=({onClick:e,opened:t})=>react_1.default.createElement(HideButtonContainer,{onClick:e},react_1.default.createElement("svg",{width:"96",height:"16",viewBox:"0 0 96 16",xmlns:"http://www.w3.org/2000/svg"},react_1.default.createElement("path",{className:"fill stroke",d:"M 95.865 16 C 93.555 14.8571 92.4 12.5714 88.6116 8.9143 C 88.4008 8.6286 88.242 8.4571 88.0054 8.3429 L 88.011 8.2286 C 85.701 5.9429 83.622 3.8857 81.1965 2.4 C 79.002 1.1429 76.3455 0.3429 72.765 0.1143 V 0 H 25.41 C 21.1365 0 18.1335 0.8 15.477 2.2857 C 12.936 3.7714 10.9725 5.8286 8.5073 8.2286 L 8.547 8.24 C 8.316 8.4571 8.085 8.6278 7.8393 8.831 C 4.0161 12.6741 3.465 14.8571 0 16"})),react_1.default.createElement("div",{className:"pointer"},t?"<":">")),Page=(0,mobx_react_lite_1.observer)((({page:e,scale:t})=>{const[r,a]=react_1.default.useState(null),o=e.store.activePage===e;react_1.default.useEffect((()=>{const t=async()=>{const t=await e.store.toDataURL({pageId:e.id,pixelRatio:.1});a(t)};let r=null;const o=(0,mobx_state_tree_1.onSnapshot)(e.children,(()=>{r||(r=setTimeout((()=>{t(),r=null}),1e3))}));return t(),()=>{clearTimeout(r),o()}}),[]);const i=react_1.default.useRef(null);return react_1.default.createElement("div",{style:{width:e.duration*t+"px",height:"60px",display:"flex",position:"relative",overflow:"hidden",borderRadius:"15px"},ref:i},react_1.default.createElement("div",{style:{width:"100%",height:"100%",borderRadius:"10px",backgroundImage:`url("${r}")`,backgroundRepeat:"repeat-x",backgroundSize:"auto 100%"},onClick:()=>{e.store.selectPage(e.id)}}),o&&react_1.default.createElement("div",{style:{position:"absolute",top:"0",left:"0px",bottom:"0px",right:"0px",borderRadius:"15px",border:"2px solid rgb(0, 161, 255, 0.9)"}}),react_1.default.createElement("div",{style:{position:"absolute",top:"50%",right:"0px",width:"8px",height:"50%",transform:"translateY(-50%) translateX(-3px)",borderRadius:"5px",border:"1px solid rgb(255, 255, 255, 0.6)",backgroundColor:"rgb(0, 0, 0, 0.6)",cursor:"ew-resize"},onMouseDown:t=>{((t,r)=>{t.preventDefault();const a=t=>{t.preventDefault();const a="start"===r?7:-7,{clientX:o}=t,{left:l,width:n}=i.current.getBoundingClientRect(),s=(o-l-a)/n;"start"===r||"end"===r&&e.set({duration:Math.max(1e3,s*e.duration)})};window.addEventListener("mousemove",a),window.addEventListener("mouseup",(()=>{window.removeEventListener("mousemove",a)}))})(t,"end")}}))})),CurrentTime=(0,mobx_react_lite_1.observer)((({store:e,scale:t})=>{var r;const a=e.isPlaying?e.currentTime:(null===(r=e.activePage)||void 0===r?void 0:r.startTime)||0;return react_1.default.createElement("div",{style:{position:"absolute",left:a*t+"px",top:"-5px",width:"2px",height:"calc(100% + 10px)",backgroundColor:"rgb(0, 161, 255, 0.9)"}})}));exports.Pages=(0,mobx_react_lite_1.observer)((({store:e,scale:t})=>react_1.default.createElement("div",{style:{display:"flex",position:"relative"}},e.pages.map((e=>react_1.default.createElement(Page,{key:e.id,page:e,scale:t}))),react_1.default.createElement(CurrentTime,{store:e,scale:t})))),exports.PagesTimeline=(0,mobx_react_lite_1.observer)((({store:e})=>{const[t,r]=react_1.default.useState(!0);return react_1.default.createElement(core_1.Navbar,{style:{padding:"5px",height:"auto"}},react_1.default.createElement("div",{style:{width:"100%",position:"relative",height:t?"100px":"auto"}},react_1.default.createElement("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,overflowX:"auto",padding:"10px",display:t?"flex":"none"}},react_1.default.createElement("div",{style:{height:"60px",display:"flex"}},react_1.default.createElement("div",{style:{width:"70px",paddingRight:"10px",paddingLeft:"70px"}}),react_1.default.createElement(exports.Pages,{store:e,scale:.02}),react_1.default.createElement(core_1.Button,{icon:react_1.default.createElement(icons_1.Plus,null),onClick:()=>{e.addPage()},minimal:!0}))),t&&react_1.default.createElement(core_1.Button,{icon:e.isPlaying?react_1.default.createElement(icons_1.Pause,{size:25}):react_1.default.createElement(icons_1.Play,{size:25}),onClick:()=>{var t;if(e.isPlaying){const t=e.activePage;e.stop(),t&&e.selectPage(t.id)}else e.play({startTime:(null===(t=e.activePage)||void 0===t?void 0:t.startTime)||0})},style:{width:"60px",height:"60px",borderRadius:"50px",position:"absolute",top:"10px",left:"10px",paddingRight:"8px"}}),react_1.default.createElement(HideButton,{onClick:()=>{r(!t)},opened:t})),react_1.default.createElement(zoom_buttons_1.ZoomGroup,{store:e,align:"right"}))}));
|
package/polotno-app.d.ts
CHANGED
|
@@ -396,11 +396,12 @@ export declare function createPolotnoApp({ container, key, showCredit, sections
|
|
|
396
396
|
} & {
|
|
397
397
|
afterCreate(): void;
|
|
398
398
|
setCurrentTime(time: any): void;
|
|
399
|
-
play({ animatedElementsIds, startTime, currentTime, endTime, }?: {
|
|
399
|
+
play({ animatedElementsIds, startTime, currentTime, endTime, repeat, }?: {
|
|
400
400
|
animatedElementsIds?: any[];
|
|
401
401
|
startTime?: number;
|
|
402
402
|
currentTime?: number;
|
|
403
403
|
endTime?: number;
|
|
404
|
+
repeat?: boolean;
|
|
404
405
|
}): void;
|
|
405
406
|
checkActivePage(): void;
|
|
406
407
|
seek(): void;
|
|
@@ -891,11 +892,12 @@ export declare function createPolotnoApp({ container, key, showCredit, sections
|
|
|
891
892
|
} & {
|
|
892
893
|
afterCreate(): void;
|
|
893
894
|
setCurrentTime(time: any): void;
|
|
894
|
-
play({ animatedElementsIds, startTime, currentTime, endTime, }?: {
|
|
895
|
+
play({ animatedElementsIds, startTime, currentTime, endTime, repeat, }?: {
|
|
895
896
|
animatedElementsIds?: any[];
|
|
896
897
|
startTime?: number;
|
|
897
898
|
currentTime?: number;
|
|
898
899
|
endTime?: number;
|
|
900
|
+
repeat?: boolean;
|
|
899
901
|
}): void;
|
|
900
902
|
checkActivePage(): void;
|
|
901
903
|
seek(): void;
|