polotno 1.14.5 → 1.14.6
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/apply-filters.d.ts +2 -2
- package/canvas/element.d.ts +4 -3
- package/canvas/highlighter.d.ts +2 -2
- package/canvas/html-element.d.ts +2 -1
- package/canvas/image-element.d.ts +2 -1
- package/canvas/line-element.d.ts +2 -1
- package/canvas/page.d.ts +4 -3
- package/canvas/rules.d.ts +1 -1
- package/canvas/text-element.d.ts +3 -2
- package/canvas/tooltip.d.ts +4 -2
- package/canvas/video-element.d.ts +2 -1
- package/canvas/video-element.js +1 -1
- package/canvas/workspace.d.ts +6 -6
- package/config.d.ts +1 -1
- package/config.js +1 -1
- package/model/group-model.d.ts +14 -0
- package/model/group-model.js +1 -0
- package/model/history.d.ts +2 -2
- package/model/image-model.d.ts +3 -0
- package/model/image-model.js +1 -0
- package/model/line-model.d.ts +3 -0
- package/model/line-model.js +1 -0
- package/model/node-model.d.ts +3 -0
- package/model/node-model.js +1 -0
- package/model/page-model.d.ts +51 -0
- package/model/page-model.js +1 -0
- package/model/shape-model.d.ts +11 -0
- package/model/shape-model.js +1 -0
- package/model/store.d.ts +154 -220
- package/model/store.js +1 -1
- package/model/svg-model.d.ts +3 -0
- package/model/svg-model.js +1 -0
- package/model/text-model.d.ts +3 -0
- package/model/text-model.js +1 -0
- package/model/video-model.d.ts +3 -0
- package/model/video-model.js +1 -0
- package/package.json +15 -12
- package/polotno-app.d.ts +146 -138
- package/polotno.bundle.js +6829 -66
- package/side-panel/images-grid.d.ts +2 -2
- package/side-panel/side-panel.js +1 -1
- package/toolbar/animations-picker.d.ts +4 -3
- package/toolbar/filters-picker.d.ts +4 -3
- package/toolbar/flip-button.d.ts +4 -3
- package/toolbar/html-toolbar.d.ts +2 -1
- package/toolbar/sketch.d.ts +3 -3
- package/toolbar/text-toolbar.d.ts +2 -1
- package/toolbar/toolbar.js +1 -1
- package/utils/font-metric.d.ts +4 -4
- package/utils/math.d.ts +3 -3
- package/utils/svg.d.ts +1 -1
- package/utils/use-api.d.ts +6 -6
- package/model/history.test.js +0 -1
- package/model/store.test.js +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import Konva from 'konva';
|
|
2
|
-
import {
|
|
3
|
-
export declare function applyFilter(node: Konva.Node, element:
|
|
2
|
+
import { ShapeType } from '../model/shape-model';
|
|
3
|
+
export declare function applyFilter(node: Konva.Node, element: ShapeType): void;
|
package/canvas/element.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { StoreType } from '../model/store';
|
|
3
|
+
import { ShapeType } from '../model/shape-model';
|
|
3
4
|
type ShapeProps = {
|
|
4
5
|
store: StoreType;
|
|
5
|
-
element:
|
|
6
|
+
element: ShapeType;
|
|
6
7
|
onClick: Function;
|
|
7
8
|
};
|
|
8
9
|
export declare function registerShapeComponent(type: string, component: JSX.Element): void;
|
|
9
|
-
declare const Element: ((props: ShapeProps) => React.JSX.Element
|
|
10
|
+
declare const Element: ((props: ShapeProps) => React.JSX.Element) & {
|
|
10
11
|
displayName: string;
|
|
11
12
|
};
|
|
12
13
|
export default Element;
|
package/canvas/highlighter.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ShapeType } from '../model/shape-model';
|
|
3
3
|
export declare const Highlighter: (({ element }: {
|
|
4
|
-
element:
|
|
4
|
+
element: ShapeType;
|
|
5
5
|
}) => React.JSX.Element) & {
|
|
6
6
|
displayName: string;
|
|
7
7
|
};
|
package/canvas/html-element.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { StoreType } from '../model/store';
|
|
3
|
+
import { TextElementType } from '../model/text-model';
|
|
3
4
|
export declare const quillRef: {
|
|
4
5
|
enabled: boolean;
|
|
5
6
|
currentFormat: {};
|
package/canvas/line-element.d.ts
CHANGED
package/canvas/page.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Vector2d } from 'konva/lib/types';
|
|
3
|
-
import { StoreType, PageType
|
|
3
|
+
import { StoreType, PageType } from '../model/store';
|
|
4
|
+
import { NodeType } from '../model/node-model';
|
|
4
5
|
export declare function registerTransformerAttrs(type: any, attrs: any): void;
|
|
5
|
-
type DropCallback = (pos: Vector2d, element?:
|
|
6
|
-
elements: Array<
|
|
6
|
+
type DropCallback = (pos: Vector2d, element?: NodeType, event?: {
|
|
7
|
+
elements: Array<NodeType>;
|
|
7
8
|
page: PageType;
|
|
8
9
|
}) => void;
|
|
9
10
|
declare let onDomDrop: DropCallback | null;
|
package/canvas/rules.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ type PageProps = {
|
|
|
7
7
|
width: number;
|
|
8
8
|
height: number;
|
|
9
9
|
};
|
|
10
|
-
export declare const TopRules: (({ store, width, height }: PageProps) => React.JSX.Element
|
|
10
|
+
export declare const TopRules: (({ store, width, height }: PageProps) => React.JSX.Element) & {
|
|
11
11
|
displayName: string;
|
|
12
12
|
};
|
|
13
13
|
export declare function LeftRules(): React.JSX.Element;
|
package/canvas/text-element.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { StoreType
|
|
2
|
+
import { StoreType } from '../model/store';
|
|
3
|
+
import { TextElementType } from '../model/text-model';
|
|
3
4
|
type ShapeProps = {
|
|
4
5
|
store: StoreType;
|
|
5
6
|
element: TextElementType;
|
|
@@ -25,7 +26,7 @@ export declare const useTextColor: (element: TextElementType) => {
|
|
|
25
26
|
} | {
|
|
26
27
|
fillLinearGradientStartPointX: number;
|
|
27
28
|
fillLinearGradientStartPointY: number;
|
|
28
|
-
fillLinearGradientColorStops:
|
|
29
|
+
fillLinearGradientColorStops: any[];
|
|
29
30
|
fillLinearGradientEndPointX: number;
|
|
30
31
|
fillLinearGradientEndPointY: number;
|
|
31
32
|
fill: any;
|
package/canvas/tooltip.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { StoreType, PageType } from '../model/store';
|
|
3
|
-
export declare const Tooltip:
|
|
3
|
+
export declare const Tooltip: (({ store, page, components, stageRef, }: {
|
|
4
4
|
store: StoreType;
|
|
5
5
|
page: PageType;
|
|
6
6
|
components?: any;
|
|
7
7
|
stageRef?: any;
|
|
8
|
-
}
|
|
8
|
+
}) => React.JSX.Element) & {
|
|
9
|
+
displayName: string;
|
|
10
|
+
};
|
package/canvas/video-element.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,o)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.VideoElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),svg=__importStar(require("../utils/svg")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),flags_1=require("../utils/flags"),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein"),screen_1=require("../utils/screen");function createCanvas(){return document.createElement("canvas")}async function getFixedUrl(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await svg.urlToString(e),r=svg.fixSize(t);return svg.svgToURL(r)}const useSizeFixer=e=>{const[t,r]=react_1.default.useState(e);return react_1.default.useEffect((()=>{(async()=>{const a=await getFixedUrl(e);a!==t&&r(a)})()}),[e]),t},playIcon=new window.Image;playIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" fill="white"/>\n <path d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const pauseIcon=new window.Image;pauseIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" fill="white"/>\n <path opacity="0.6" d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" fill="white"/>\n <path d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const useFlip=(e,t,r)=>{const a=react_1.default.useMemo((()=>{var a,o;const{flipX:i,flipY:n}=e,d="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0,c=navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&d||e.maskSrc;if(!i&&!n&&!c)return t;if(!t||!t.width||!t.height)return null;const h=createCanvas();let l=1;"svg"===e.type&&(l=Math.max(e.width/t.width*r,e.height/t.height*r)),h.width=Math.max(t.width*l,1),h.height=Math.max(t.height*l,1);let s=i?-h.width:0,u=n?-h.height:0;return null===(a=h.getContext("2d"))||void 0===a||a.scale(i?-1:1,n?-1:1),null===(o=h.getContext("2d"))||void 0===o||o.drawImage(t,s,u,h.width,h.height),h}),[e.maskSrc,e.flipX,e.flipY,t,e.width,e.height,r]);return react_1.default.useEffect((()=>()=>{a&&"CANVAS"===a.nodeName&&konva_1.default.Util.releaseCanvas(a)}),[a]),a};function getCrop(e,t){const r=t.width/t.height;let a,o;r>=e.width/e.height?(a=e.width,o=e.width/r):(a=e.height*r,o=e.height);return{x:(e.width-a)/2,y:(e.height-o)/2,width:a,height:o}}function downsample(e,t,r,a,o,i,n){for(var d=new ImageData(t,r),c=new Int32Array(e.data.buffer),h=e.width,l=new Int32Array(d.data.buffer),s=d.width,u=t/i,g=r/n,f=Math.round(1/u),p=Math.round(1/g),_=f*p,m=0;m<d.height;m++)for(var w=0;w<s;w++){for(var v=a+Math.round(w/u)+(o+Math.round(m/g))*h,x=0,y=0,M=0,E=0,b=0;b<p;b++)for(var C=0;C<f;C++){var k=c[v+C+b*h];x+=k<<24>>>24,y+=k<<16>>>24,M+=k<<8>>>24,E+=k>>>24}x=Math.round(x/_),y=Math.round(y/_),M=Math.round(M/_),E=Math.round(E/_),l[w+m*s]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const o=createCanvas();o.width=e.width,o.height=e.height,null===(r=o.getContext("2d"))||void 0===r||r.drawImage(e,0,0,o.width,o.height);const i=downsample(o.getContext("2d").getImageData(0,0,o.width,o.height),Math.floor(o.width*t),Math.floor(o.height*t),0,0,o.width,o.height);return o.width=Math.floor(o.width*t),o.height=Math.floor(o.height*t),null===(a=o.getContext("2d"))||void 0===a||a.putImageData(i,0,0),o}const useCornerRadiusAndCrop=(e,t,r,a,o=0,i=!1)=>{const n=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(o*a,n/2,d/2),h=Math.max(e.width/r.width,e.height/r.height)*a,l=e.page._exporting&&flags_1.flags.imageDownScalingEnabled&&h<1&&!i,s=0===r.x&&0===r.y&&r.width===(null==t?void 0:t.width)&&r.height===(null==t?void 0:t.height),u=react_1.default.useMemo((()=>{if(!t||!t.width||!t.height)return;return s&&0===c&&!l?void 0:createCanvas()}),[t,c,l,s]);return react_1.default.useLayoutEffect((()=>{if(!u||!t)return;u.width=n,u.height=d;const e=u.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(n-c,0),e.arc(n-c,c,c,3*Math.PI/2,0,!1),e.lineTo(n,d-c),e.arc(n-c,d-c,c,0,Math.PI/2,!1),e.lineTo(c,d),e.arc(c,d-c,c,Math.PI/2,Math.PI,!1),e.lineTo(0,c),e.arc(c,c,c,Math.PI,3*Math.PI/2,!1),e.clip());const a=l?downScaleCanvas(t,h):t,o=l?{x:Math.floor(r.x*h),y:Math.floor(r.y*h),width:Math.floor(r.width*h),height:Math.floor(r.height*h)}:r;e.drawImage(a,o.x,o.y,o.width,o.height,0,0,u.width,u.height)}),[u,e.width,e.height,r.x,r.y,r.width,r.height,o,a,i,e.page._exporting,l]),react_1.default.useEffect((()=>()=>{u&&"CANVAS"===u.nodeName&&konva_1.default.Util.releaseCanvas(u)}),[u]),u||t},useClip=(e,t,r,a)=>{const o=useSizeFixer(e.clipSrc||""),[i,n]=useImageHook(o,"anonymous"),d=e.clipSrc?n:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=react_1.default.useMemo((()=>{if(t&&i)return createCanvas()}),[t,i]);react_1.default.useLayoutEffect((()=>{var a;if(!i)return;if(!t||!t.width||!t.height)return;if(!i||!i.width||!i.height)return;if(!c)return;const o=createCanvas(),n=Math.max(e.width/i.width*r,e.height/i.height*r);o.width=i.width*n,o.height=i.height*n,null===(a=o.getContext("2d"))||void 0===a||a.drawImage(i,0,0,o.width,o.height),c.width=Math.max(t.width,1),c.height=Math.max(t.height,1);const d=c.getContext("2d");d&&(d.save(),d.drawImage(o,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(o),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}),[c,t,i,e.width,e.height,r,...a]);return e.clipSrc&&i?c:t},PLACEHOLDER_CANVAS=createCanvas(),LoadingPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=react_1.default.useRef(null);return react_1.default.useEffect((()=>{const e=r.current;if(!e)return;const t=new konva_1.default.Animation((t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)}),e.getLayer());return t.start(),()=>{t.stop()}})),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),react_1.default.createElement(react_konva_1.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))})),ErrorPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t="Can not load the video...",r=Math.max(10,Math.min(30,e.width/25));return react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),react_1.default.createElement(react_konva_1.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))}));let useImageHook=use_image_1.default;const setImageLoaderHook=e=>{useImageHook=e};exports.setImageLoaderHook=setImageLoaderHook;const useImageLoader=(e,t)=>{const r=react_1.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};react_1.default.useEffect((()=>a),[]),react_1.default.useLayoutEffect((()=>{"loading"!==e||r.current||(r.current=(0,loader_1.incrementLoader)(`video ${t}`)),"loading"!==e&&a(),"failed"===e&&(0,loader_1.triggerLoadError)(`video ${t}`)}),[e])};exports.useImageLoader=useImageLoader;const usePreviousImage=({image:e,status:t,type:r})=>{const a=react_1.default.useRef();react_1.default.useEffect((()=>{a.current=e||a.current}),[e]);return"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0},useImageSource=e=>{const[t,r]=react_1.default.useReducer((e=>e+1),0),a=react_1.default.useRef("loading"),o=react_1.default.useRef(e.src),i=react_1.default.useRef(e.src);return i.current!==e.src&&(i.current=e.src,a.current="loading"),react_1.default.useEffect((()=>{if("image"===e.type)return;if(!e.src)return;let t=!1;return(async()=>{a.current="loading",r();const i=await svg.urlToString(e.src),n=svg.fixSize(i),d=svg.replaceColors(n,e.colorsReplace);t||(o.current=d,a.current="loaded",r())})(),()=>{t=!0}}),[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[o.current,a.current]};function useVideo(e,t,r){const a=react_1.default.useRef("loading"),o=react_1.default.useRef(),[i,n]=react_1.default.useState(0),d=react_1.default.useRef(),c=react_1.default.useRef(),h=react_1.default.useRef();return d.current===e&&c.current===t&&h.current===r||(a.current="loading",o.current=void 0,d.current=e,c.current=t,h.current=r),react_1.default.useLayoutEffect((function(){if(e){var i=document.createElement("video");return i.addEventListener("canplay",d),i.addEventListener("error",c),t&&(i.crossOrigin=t),r&&(i.referrerpolicy=r),i.src=e,function(){i.removeEventListener("canplay",d),i.removeEventListener("error",c)}}function d(){a.current="loaded",o.current=i,n(Math.random())}function c(e){a.current="failed",o.current=void 0,n(Math.random())}}),[e,t,r]),[o.current,a.current]}exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,o]=react_1.default.useState(!1),i=react_1.default.useRef(null),n=react_1.default.useRef(null),[d,c]=react_1.default.useState(!1),h=t.selectedElements.indexOf(e)>=0,[l,s]=react_1.default.useState(!1),[u,g]=useVideo(e.src,"anonymous");(0,exports.useImageLoader)(g,e.id+"-video"),u&&(u.muted=!0,u.width=u.videoWidth,u.height=u.videoHeight);const f=u||PLACEHOLDER_CANVAS;react_1.default.useEffect((()=>{u&&t.history.ignore((()=>{e.set({duration:1e3*u.duration})}))}),[u]),react_1.default.useEffect((()=>{var e;if(!u)return;const r=t.isPlaying||l;if(!r)return void u.pause();r&&u.play();const a=new konva_1.default.Animation((()=>{}),null===(e=i.current)||void 0===e?void 0:e.getLayer());a.start();const o=()=>{s(!1),u.currentTime=0};return u.addEventListener("ended",o),()=>{a.stop(),u.removeEventListener("ended",o)}}),[u,l,t.isPlaying]),react_1.default.useEffect((()=>(0,mobx_1.autorun)((()=>{var r,a;if(u){const o=t.currentTime%e.duration;u.currentTime=o/1e3,null===(a=null===(r=i.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw()}}))),[t,u]),react_1.default.useEffect((()=>{if(!u)return;let t=null;u.addEventListener("timeupdate",(()=>{t=(0,loader_1.incrementLoader)(`video ${e.id}`)})),u.addEventListener("seeked",(()=>{t&&(t(),t=null)}))}),[u]);let{cropX:p,cropY:_,cropWidth:m,cropHeight:w}=e;"loaded"!==g&&(p=_=0,m=w=1);const v=f.width*m,x=f.height*w,y=e.width/e.height;let M,E;const b=v/x,C="svg"===e.type;C?(M=v,E=x):y>=b?(M=v,E=v/y):(M=x*y,E=x);const k={x:f.width*p,y:f.height*_,width:M,height:E},L=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let I=useClip(e,useCornerRadiusAndCrop(e,f,k,t._elementsPixelRatio,L,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[k,L,t._elementsPixelRatio]);const S=Math.max(e.width/M,e.height/E);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=i.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==n.current&&e.toggleCropMode(!1)}function o(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",o),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",o),document.body.removeEventListener("touchstart",o),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(i.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),{delay:100})}),[f,a,m,w,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=i.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(i.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const R=react_1.default.useRef(null),O=react_1.default.useRef(null),T=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(O.current.nodes([R.current]),T.current.nodes([n.current]))}),[e._cropModeEnabled]);const P=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),o=Math.min(1,M/r),i=Math.min(1,E/a),n=1-o,d=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),c=1-i,h=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-d*f.width,y:-h*f.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:h,cropWidth:o,cropHeight:i})},X=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},Y="loading"===g,A="failed"===g,H=!Y&&!A,D=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),W=H?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(i,W);const q=e.selectable||"admin"===t.role,F=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,Y&&react_1.default.createElement(LoadingPlaceholder,{element:e}),A&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:i,name:"element",id:e.id,image:f,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:W,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:k,listening:q,cropX:k.x,cropY:k.y,cropWidth:k.width,cropHeight:k.height,draggable:F?e.draggable&&h:e.draggable,preventDefault:!F||h,hideInExport:!e.showInExport,onMouseEnter:()=>{c(!0)},onMouseLeave:()=>{c(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onDblClick:X,onDblTap:X,onTransformStart:()=>{o(!0),t.history.startTransaction(),D.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,o=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),i=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-M/f.width,c=Math.min(d,Math.max(0,e.cropX)),h=1-E/f.height,l=Math.min(h,Math.max(0,e.cropY)),s=n.getActiveAnchor(),u=!(s.indexOf("middle")>=0||s.indexOf("center")>=0),g=!u&&o<1&&D.current.cropHeight>E/f.height;let p=u?e.cropWidth:e.cropWidth*o;g&&(p=e.cropWidth);const _=!u&&i<1&&D.current.cropWidth>M/f.width;let m=u?e.cropHeight:e.cropHeight*i;_&&(m=e.cropHeight),C&&(p=e.cropWidth,m=e.cropHeight),e.set({cropX:c,cropY:l,x:a.x(),y:a.y(),width:a.width()*o,height:a.height()*i,rotation:t.target.rotation(),cropWidth:Math.min(p,1-c),cropHeight:Math.min(m,1-l)})},onTransformEnd:r=>{const a=r.currentTarget;e.set({width:a.width(),height:a.height(),x:a.x(),y:a.y(),rotation:r.target.rotation(),cropWidth:M/f.width,cropHeight:E/f.height}),o(!1),t.history.endTransaction()}}),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:W,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,L-e.borderSize),hideInExport:!e.showInExport}),!l&&react_1.default.createElement(react_konva_1.Image,{image:playIcon,x:e.x+e.width/2-20,y:e.y+e.height/2-20,width:40,height:40,hideInExport:!0,onClick:()=>{s(!0)}}),l&&react_1.default.createElement(react_konva_1.Image,{image:pauseIcon,x:e.x+e.width/2-20,y:e.y+e.height/2-20,width:40,height:40,hideInExport:!0,onClick:()=>{s(!1)}}),e._cropModeEnabled&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Rect,{x:-window.innerWidth/t.scale,y:-window.innerWidth/t.scale,width:window.innerWidth/t.scale*3,height:window.innerWidth/t.scale*3,fill:"rgba(0,0,0,0.3)"}),react_1.default.createElement(react_konva_1.Image,{listening:!1,image:I,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:S,scaleY:S},react_1.default.createElement(react_konva_1.Image,{image:f,ref:n,opacity:.4,draggable:!0,x:-e.cropX*f.width,y:-e.cropY*f.height,onDragMove:P,onTransform:P}),react_1.default.createElement(react_konva_1.Transformer,{ref:T,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),react_1.default.createElement(react_konva_1.Rect,{width:M,height:E,ref:R,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*f.width-1e-9&&(t.target.x(-e.cropX*f.width),t.target.scaleX(1)),t.target.y()<-e.cropY*f.height-1e-9&&(t.target.y(-e.cropY*f.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/f.width)),a=Math.min(1,Math.max(0,t.target.y()/f.height+e.cropY)),o=t.target.width()*t.target.scaleX(),i=t.target.height()*t.target.scaleY(),n=Math.min(1-r,o/f.width),d=Math.min(1-a,i/f.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:n,cropHeight:d,width:Math.min(o*S,f.width*(1-r)*S),height:Math.min(i*S,f.height*(1-a)*S)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref: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||h)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,o)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.VideoElement=exports.useImageLoader=exports.setImageLoaderHook=void 0;const react_1=__importDefault(require("react")),mobx_react_lite_1=require("mobx-react-lite"),mobx_1=require("mobx"),react_konva_1=require("react-konva"),use_image_1=__importDefault(require("use-image")),konva_1=__importDefault(require("konva")),react_konva_utils_1=require("react-konva-utils"),highlighter_1=require("./highlighter"),loader_1=require("../utils/loader"),svg=__importStar(require("../utils/svg")),flags_1=require("../utils/flags"),apply_filters_1=require("./apply-filters"),use_fadein_1=require("./use-fadein"),screen_1=require("../utils/screen");function createCanvas(){return document.createElement("canvas")}async function getFixedUrl(e){if(!(e.indexOf("data:image/svg+xml")>=0||e.indexOf(".svg")>=0))return e;const t=await svg.urlToString(e),r=svg.fixSize(t);return svg.svgToURL(r)}const useSizeFixer=e=>{const[t,r]=react_1.default.useState(e);return react_1.default.useEffect((()=>{(async()=>{const a=await getFixedUrl(e);a!==t&&r(a)})()}),[e]),t},playIcon=new window.Image;playIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" fill="white"/>\n <path d="M4 5.49683V18.5032C4 20.05 5.68077 21.0113 7.01404 20.227L18.0694 13.7239C19.384 12.9506 19.384 11.0494 18.0694 10.2761L7.01404 3.77296C5.68077 2.98869 4 3.95 4 5.49683Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const pauseIcon=new window.Image;pauseIcon.src=svg.svgToURL('\n <svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path opacity="0.6" d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" fill="white"/>\n <path opacity="0.6" d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" fill="white"/>\n <path d="M14 19L14 5C14 3.89543 14.8954 3 16 3L17 3C18.1046 3 19 3.89543 19 5L19 19C19 20.1046 18.1046 21 17 21L16 21C14.8954 21 14 20.1046 14 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M10 19L10 5C10 3.89543 9.10457 3 8 3L7 3C5.89543 3 5 3.89543 5 5L5 19C5 20.1046 5.89543 21 7 21L8 21C9.10457 21 10 20.1046 10 19Z" stroke="#323232" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n');const useFlip=(e,t,r)=>{const a=react_1.default.useMemo((()=>{var a,o;const{flipX:i,flipY:n}=e,d="svg"===e.type||e.src.indexOf("data:image/svg+xml")>=0||e.src.indexOf(".svg")>=0,c=navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&d||e.maskSrc;if(!i&&!n&&!c)return t;if(!t||!t.width||!t.height)return null;const h=createCanvas();let l=1;"svg"===e.type&&(l=Math.max(e.width/t.width*r,e.height/t.height*r)),h.width=Math.max(t.width*l,1),h.height=Math.max(t.height*l,1);let s=i?-h.width:0,u=n?-h.height:0;return null===(a=h.getContext("2d"))||void 0===a||a.scale(i?-1:1,n?-1:1),null===(o=h.getContext("2d"))||void 0===o||o.drawImage(t,s,u,h.width,h.height),h}),[e.maskSrc,e.flipX,e.flipY,t,e.width,e.height,r]);return react_1.default.useEffect((()=>()=>{a&&"CANVAS"===a.nodeName&&konva_1.default.Util.releaseCanvas(a)}),[a]),a};function getCrop(e,t){const r=t.width/t.height;let a,o;r>=e.width/e.height?(a=e.width,o=e.width/r):(a=e.height*r,o=e.height);return{x:(e.width-a)/2,y:(e.height-o)/2,width:a,height:o}}function downsample(e,t,r,a,o,i,n){for(var d=new ImageData(t,r),c=new Int32Array(e.data.buffer),h=e.width,l=new Int32Array(d.data.buffer),s=d.width,u=t/i,g=r/n,f=Math.round(1/u),p=Math.round(1/g),_=f*p,m=0;m<d.height;m++)for(var w=0;w<s;w++){for(var v=a+Math.round(w/u)+(o+Math.round(m/g))*h,x=0,y=0,M=0,E=0,b=0;b<p;b++)for(var C=0;C<f;C++){var k=c[v+C+b*h];x+=k<<24>>>24,y+=k<<16>>>24,M+=k<<8>>>24,E+=k>>>24}x=Math.round(x/_),y=Math.round(y/_),M=Math.round(M/_),E=Math.round(E/_),l[w+m*s]=E<<24|M<<16|y<<8|x}return d}function downScaleCanvas(e,t){var r,a;const o=createCanvas();o.width=e.width,o.height=e.height,null===(r=o.getContext("2d"))||void 0===r||r.drawImage(e,0,0,o.width,o.height);const i=downsample(o.getContext("2d").getImageData(0,0,o.width,o.height),Math.floor(o.width*t),Math.floor(o.height*t),0,0,o.width,o.height);return o.width=Math.floor(o.width*t),o.height=Math.floor(o.height*t),null===(a=o.getContext("2d"))||void 0===a||a.putImageData(i,0,0),o}const useCornerRadiusAndCrop=(e,t,r,a,o=0,i=!1)=>{const n=Math.floor(Math.max(e.width*a,1)),d=Math.floor(Math.max(e.height*a,1)),c=Math.min(o*a,n/2,d/2),h=Math.max(e.width/r.width,e.height/r.height)*a,l=e.page._exporting&&flags_1.flags.imageDownScalingEnabled&&h<1&&!i,s=0===r.x&&0===r.y&&r.width===(null==t?void 0:t.width)&&r.height===(null==t?void 0:t.height),u=react_1.default.useMemo((()=>{if(!t||!t.width||!t.height)return;return s&&0===c&&!l?void 0:createCanvas()}),[t,c,l,s]);return react_1.default.useLayoutEffect((()=>{if(!u||!t)return;u.width=n,u.height=d;const e=u.getContext("2d");if(!e)return;c&&(e.beginPath(),e.moveTo(c,0),e.lineTo(n-c,0),e.arc(n-c,c,c,3*Math.PI/2,0,!1),e.lineTo(n,d-c),e.arc(n-c,d-c,c,0,Math.PI/2,!1),e.lineTo(c,d),e.arc(c,d-c,c,Math.PI/2,Math.PI,!1),e.lineTo(0,c),e.arc(c,c,c,Math.PI,3*Math.PI/2,!1),e.clip());const a=l?downScaleCanvas(t,h):t,o=l?{x:Math.floor(r.x*h),y:Math.floor(r.y*h),width:Math.floor(r.width*h),height:Math.floor(r.height*h)}:r;e.drawImage(a,o.x,o.y,o.width,o.height,0,0,u.width,u.height)}),[u,e.width,e.height,r.x,r.y,r.width,r.height,o,a,i,e.page._exporting,l]),react_1.default.useEffect((()=>()=>{u&&"CANVAS"===u.nodeName&&konva_1.default.Util.releaseCanvas(u)}),[u]),u||t},useClip=(e,t,r,a)=>{const o=useSizeFixer(e.clipSrc||""),[i,n]=useImageHook(o,"anonymous"),d=e.clipSrc?n:"loaded";(0,exports.useImageLoader)(d,e.id+"-clip");const c=react_1.default.useMemo((()=>{if(t&&i)return createCanvas()}),[t,i]);react_1.default.useLayoutEffect((()=>{var a;if(!i)return;if(!t||!t.width||!t.height)return;if(!i||!i.width||!i.height)return;if(!c)return;const o=createCanvas(),n=Math.max(e.width/i.width*r,e.height/i.height*r);o.width=i.width*n,o.height=i.height*n,null===(a=o.getContext("2d"))||void 0===a||a.drawImage(i,0,0,o.width,o.height),c.width=Math.max(t.width,1),c.height=Math.max(t.height,1);const d=c.getContext("2d");d&&(d.save(),d.drawImage(o,0,0,t.width,t.height),konva_1.default.Util.releaseCanvas(o),d.globalCompositeOperation="source-in",d.drawImage(t,0,0,c.width,c.height),d.restore())}),[c,t,i,e.width,e.height,r,...a]);return e.clipSrc&&i?c:t},PLACEHOLDER_CANVAS=createCanvas(),LoadingPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t=Math.min(30,e.width/4,e.height/4),r=react_1.default.useRef(null);return react_1.default.useEffect((()=>{const e=r.current;if(!e)return;const t=new konva_1.default.Animation((t=>{e.rotate(((null==t?void 0:t.timeDiff)||0)/2)}),e.getLayer());return t.start(),()=>{t.stop()}})),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(124, 173, 212, 0.8)"}),react_1.default.createElement(react_konva_1.Arc,{ref:r,x:e.width/2,y:e.height/2,fill:"white",outerRadius:Math.abs(t),innerRadius:Math.max(1,t-5),angle:270}))})),ErrorPlaceholder=(0,mobx_react_lite_1.observer)((({element:e})=>{const t="Can not load the video...",r=Math.max(10,Math.min(30,e.width/25));return react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,listening:!1,opacity:e.a.opacity,hideInExport:!e.showInExport},react_1.default.createElement(react_konva_1.Rect,{width:e.width,height:e.height,fill:"rgba(223, 102, 102, 0.8)"}),react_1.default.createElement(react_konva_1.Text,{text:t,fontSize:r,width:e.width,height:e.height,align:"center",fill:"white",verticalAlign:"middle",padding:5}))}));let useImageHook=use_image_1.default;const setImageLoaderHook=e=>{useImageHook=e};exports.setImageLoaderHook=setImageLoaderHook;const useImageLoader=(e,t)=>{const r=react_1.default.useRef(),a=()=>{var e;null===(e=r.current)||void 0===e||e.call(r),r.current=void 0};react_1.default.useEffect((()=>a),[]),react_1.default.useLayoutEffect((()=>{"loading"!==e||r.current||(r.current=(0,loader_1.incrementLoader)(`video ${t}`)),"loading"!==e&&a(),"failed"===e&&(0,loader_1.triggerLoadError)(`video ${t}`)}),[e])};exports.useImageLoader=useImageLoader;const usePreviousImage=({image:e,status:t,type:r})=>{const a=react_1.default.useRef();react_1.default.useEffect((()=>{a.current=e||a.current}),[e]);return"failed"!==t||"failed"!==t&&"svg"===r?a.current:void 0},useImageSource=e=>{const[t,r]=react_1.default.useReducer((e=>e+1),0),a=react_1.default.useRef("loading"),o=react_1.default.useRef(e.src),i=react_1.default.useRef(e.src);return i.current!==e.src&&(i.current=e.src,a.current="loading"),react_1.default.useEffect((()=>{if("image"===e.type)return;if(!e.src)return;let t=!1;return(async()=>{a.current="loading",r();const i=await svg.urlToString(e.src),n=svg.fixSize(i),d=svg.replaceColors(n,e.colorsReplace);t||(o.current=d,a.current="loaded",r())})(),()=>{t=!0}}),[e.src,JSON.stringify(e.colorsReplace)]),"image"===e.type?[e.src,"loaded"]:[o.current,a.current]};function useVideo(e,t,r){const a=react_1.default.useRef("loading"),o=react_1.default.useRef(),[i,n]=react_1.default.useState(0),d=react_1.default.useRef(),c=react_1.default.useRef(),h=react_1.default.useRef();return d.current===e&&c.current===t&&h.current===r||(a.current="loading",o.current=void 0,d.current=e,c.current=t,h.current=r),react_1.default.useLayoutEffect((function(){if(e){var i=document.createElement("video");return i.addEventListener("canplay",d),i.addEventListener("error",c),t&&(i.crossOrigin=t),r&&(i.referrerpolicy=r),i.src=e,function(){i.removeEventListener("canplay",d),i.removeEventListener("error",c)}}function d(){a.current="loaded",o.current=i,n(Math.random())}function c(e){a.current="failed",o.current=void 0,n(Math.random())}}),[e,t,r]),[o.current,a.current]}exports.VideoElement=(0,mobx_react_lite_1.observer)((({element:e,store:t})=>{var r;const[a,o]=react_1.default.useState(!1),i=react_1.default.useRef(null),n=react_1.default.useRef(null),[d,c]=react_1.default.useState(!1),h=t.selectedElements.indexOf(e)>=0,[l,s]=react_1.default.useState(!1),[u,g]=useVideo(e.src,"anonymous");(0,exports.useImageLoader)(g,e.id+"-video"),u&&(u.muted=!0,u.width=u.videoWidth,u.height=u.videoHeight);const f=u||PLACEHOLDER_CANVAS;react_1.default.useEffect((()=>{u&&t.history.ignore((()=>{e.set({duration:1e3*u.duration})}))}),[u]),react_1.default.useEffect((()=>{var e;if(!u)return;const r=t.isPlaying||l;if(!r)return void u.pause();r&&u.play();const a=new konva_1.default.Animation((()=>{}),null===(e=i.current)||void 0===e?void 0:e.getLayer());a.start();const o=()=>{s(!1),u.currentTime=0};return u.addEventListener("ended",o),()=>{a.stop(),u.removeEventListener("ended",o)}}),[u,l,t.isPlaying]),react_1.default.useEffect((()=>(0,mobx_1.autorun)((()=>{var r,a;if(u){const o=t.currentTime%e.duration;u.currentTime=o/1e3,null===(a=null===(r=i.current)||void 0===r?void 0:r.getLayer())||void 0===a||a.batchDraw()}}))),[t,u]),react_1.default.useEffect((()=>{if(!u)return;let t=null;u.addEventListener("timeupdate",(()=>{t=(0,loader_1.incrementLoader)(`video ${e.id}`)})),u.addEventListener("seeked",(()=>{t&&(t(),t=null)}))}),[u]);let{cropX:p,cropY:_,cropWidth:m,cropHeight:w}=e;"loaded"!==g&&(p=_=0,m=w=1);const v=f.width*m,x=f.height*w,y=e.width/e.height;let M,E;const b=v/x,C="svg"===e.type;C?(M=v,E=x):y>=b?(M=v,E=v/y):(M=x*y,E=x);const k={x:f.width*p,y:f.height*_,width:M,height:E},L=null!==(r=e.cornerRadius)&&void 0!==r?r:0;let I=useClip(e,useCornerRadiusAndCrop(e,f,k,t._elementsPixelRatio,L,a||e._cropModeEnabled||"svg"===e.type),t._elementsPixelRatio,[k,L,t._elementsPixelRatio]);const S=Math.max(e.width/M,e.height/E);react_1.default.useEffect((()=>{var t;if(!e._cropModeEnabled)return;const r=null===(t=i.current)||void 0===t?void 0:t.getStage();function a(t){e._cropModeEnabled&&t.target!==n.current&&e.toggleCropMode(!1)}function o(t){e._cropModeEnabled&&"CANVAS"!==t.target.nodeName&&e.toggleCropMode(!1)}return document.body.addEventListener("click",o),null==r||r.on("click",a),null==r||r.on("tap",a),()=>{document.body.removeEventListener("click",o),document.body.removeEventListener("touchstart",o),null==r||r.off("click",a),null==r||r.off("click",a)}}),[e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{if(a||e._cropModeEnabled)return;(0,apply_filters_1.applyFilter)(i.current,e);return(0,mobx_1.autorun)((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),{delay:100})}),[f,a,m,w,e._cropModeEnabled]),react_1.default.useLayoutEffect((()=>{var t;a||e._cropModeEnabled?null===(t=i.current)||void 0===t||t.clearCache():(0,apply_filters_1.applyFilter)(i.current,e)}),[a,e.width,e.height,e._cropModeEnabled]),react_1.default.useEffect((()=>{(0,apply_filters_1.applyFilter)(i.current,e)}),[e.shadowEnabled,e.shadowBlur,e.cornerRadius,e.shadowColor,e.shadowOffsetX,e.shadowOffsetY,e.shadowOpacity]);const R=react_1.default.useRef(null),O=react_1.default.useRef(null),T=react_1.default.useRef(null);react_1.default.useLayoutEffect((()=>{e._cropModeEnabled&&(O.current.nodes([R.current]),T.current.nodes([n.current]))}),[e._cropModeEnabled]);const P=t=>{Math.round(t.target.x())>0&&(t.target.x(0),t.target.scaleX(1)),Math.round(t.target.y())>0&&(t.target.y(0),t.target.scaleY(1));const r=t.target.width()*t.target.scaleX(),a=t.target.height()*t.target.scaleY(),o=Math.min(1,M/r),i=Math.min(1,E/a),n=1-o,d=Math.min(n,Math.max(0,Math.round(-t.target.x())/r)),c=1-i,h=Math.min(c,Math.max(0,Math.round(-t.target.y())/a));t.target.setAttrs({x:-d*f.width,y:-h*f.height,scaleX:1,scaleY:1}),e.set({cropX:d,cropY:h,cropWidth:o,cropHeight:i})},X=()=>{"svg"!==e.type&&e.contentEditable&&setTimeout((()=>{e.toggleCropMode(!0)}))},Y="loading"===g,A="failed"===g,H=!Y&&!A,D=react_1.default.useRef({cropX:0,cropY:0,cropWidth:0,cropHeight:0}),W=H?e.a.opacity:0;(0,use_fadein_1.useFadeIn)(i,W);const q=e.selectable||"admin"===t.role,F=(0,screen_1.useMobile)();return react_1.default.createElement(react_1.default.Fragment,null,Y&&react_1.default.createElement(LoadingPlaceholder,{element:e}),A&&react_1.default.createElement(ErrorPlaceholder,{element:e}),react_1.default.createElement(react_konva_1.Image,{ref:i,name:"element",id:e.id,image:f,x:e.x,y:e.y,width:e.width||1,height:e.height||1,rotation:e.rotation,opacity:W,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur,shadowOffsetX:e.shadowOffsetX,shadowOffsetY:e.shadowOffsetY,shadowColor:e.shadowColor,shadowOpacity:e.shadowOpacity,customCrop:k,listening:q,cropX:k.x,cropY:k.y,cropWidth:k.width,cropHeight:k.height,draggable:F?e.draggable&&h:e.draggable,preventDefault:!F||h,hideInExport:!e.showInExport,onMouseEnter:()=>{c(!0)},onMouseLeave:()=>{c(!1)},onDragStart:()=>{t.history.startTransaction()},onDragMove:t=>{e.set({x:t.target.x(),y:t.target.y()})},onDragEnd:r=>{e.set({x:r.target.x(),y:r.target.y()}),t.history.endTransaction()},onDblClick:X,onDblTap:X,onTransformStart:()=>{o(!0),t.history.startTransaction(),D.current={cropX:e.cropX,cropY:e.cropY,cropWidth:e.cropWidth,cropHeight:e.cropHeight}},onTransform:t=>{var r;const a=t.currentTarget,o=Math.abs(a.scaleX()-1)<1e-7?1:a.scaleX(),i=Math.abs(a.scaleY()-1)<1e-7?1:a.scaleY();a.scaleX(1),a.scaleY(1);const n=null===(r=t.target.getStage())||void 0===r?void 0:r.findOne("Transformer"),d=1-M/f.width,c=Math.min(d,Math.max(0,e.cropX)),h=1-E/f.height,l=Math.min(h,Math.max(0,e.cropY)),s=n.getActiveAnchor(),u=!(s.indexOf("middle")>=0||s.indexOf("center")>=0),g=!u&&o<1&&D.current.cropHeight>E/f.height;let p=u?e.cropWidth:e.cropWidth*o;g&&(p=e.cropWidth);const _=!u&&i<1&&D.current.cropWidth>M/f.width;let m=u?e.cropHeight:e.cropHeight*i;_&&(m=e.cropHeight),C&&(p=e.cropWidth,m=e.cropHeight),e.set({cropX:c,cropY:l,x:a.x(),y:a.y(),width:a.width()*o,height:a.height()*i,rotation:t.target.rotation(),cropWidth:Math.min(p,1-c),cropHeight:Math.min(m,1-l)})},onTransformEnd:r=>{const a=r.currentTarget;e.set({width:a.width(),height:a.height(),x:a.x(),y:a.y(),rotation:r.target.rotation(),cropWidth:M/f.width,cropHeight:E/f.height}),o(!1),t.history.endTransaction()}}),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:W,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,L-e.borderSize),hideInExport:!e.showInExport}),!l&&react_1.default.createElement(react_konva_1.Image,{image:playIcon,x:e.x+e.width/2-20,y:e.y+e.height/2-20,width:40,height:40,hideInExport:!0,onClick:()=>{s(!0)}}),l&&react_1.default.createElement(react_konva_1.Image,{image:pauseIcon,x:e.x+e.width/2-20,y:e.y+e.height/2-20,width:40,height:40,hideInExport:!0,onClick:()=>{s(!1)}}),e._cropModeEnabled&&react_1.default.createElement(react_konva_utils_1.Portal,{selector:".page-abs-container",enabled:!0},react_1.default.createElement(react_konva_1.Rect,{x:-window.innerWidth/t.scale,y:-window.innerWidth/t.scale,width:window.innerWidth/t.scale*3,height:window.innerWidth/t.scale*3,fill:"rgba(0,0,0,0.3)"}),react_1.default.createElement(react_konva_1.Image,{listening:!1,image:I,x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,shadowEnabled:e.shadowEnabled,shadowBlur:e.shadowBlur}),react_1.default.createElement(react_konva_1.Group,{x:e.x,y:e.y,rotation:e.rotation,scaleX:S,scaleY:S},react_1.default.createElement(react_konva_1.Image,{image:f,ref:n,opacity:.4,draggable:!0,x:-e.cropX*f.width,y:-e.cropY*f.height,onDragMove:P,onTransform:P}),react_1.default.createElement(react_konva_1.Transformer,{ref:T,anchorSize:20,enabledAnchors:["top-left","top-right","bottom-left","bottom-right"],boundBoxFunc:(e,t)=>t.width<5||t.height<5?e:t,rotateEnabled:!1,borderEnabled:!1,anchorCornerRadius:10,anchorStrokeWidth:2,borderStrokeWidth:2}),react_1.default.createElement(react_konva_1.Rect,{width:M,height:E,ref:R,listening:!1,onTransform:t=>{t.target.x()<-e.cropX*f.width-1e-9&&(t.target.x(-e.cropX*f.width),t.target.scaleX(1)),t.target.y()<-e.cropY*f.height-1e-9&&(t.target.y(-e.cropY*f.height),t.target.scaleY(1));const r=Math.min(1,Math.max(0,e.cropX+t.target.x()/f.width)),a=Math.min(1,Math.max(0,t.target.y()/f.height+e.cropY)),o=t.target.width()*t.target.scaleX(),i=t.target.height()*t.target.scaleY(),n=Math.min(1-r,o/f.width),d=Math.min(1-a,i/f.height),c=t.target.getAbsolutePosition(t.target.getParent().getParent());t.target.scale({x:1,y:1}),t.target.position({x:0,y:0}),e.set({x:c.x,y:c.y,cropX:r,cropY:a,cropWidth:n,cropHeight:d,width:Math.min(o*S,f.width*(1-r)*S),height:Math.min(i*S,f.height*(1-a)*S)})}}),react_1.default.createElement(react_konva_1.Transformer,{ref: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||h)&&react_1.default.createElement(highlighter_1.Highlighter,{element:e}))}));
|
package/canvas/workspace.d.ts
CHANGED
|
@@ -2,13 +2,13 @@ import React from 'react';
|
|
|
2
2
|
import { StoreType } from '../model/store';
|
|
3
3
|
export declare const Workspace: (({ store, pageControlsEnabled, backgroundColor, pageBorderColor, activePageBorderColor, bleedColor, components, onKeyDown, }: {
|
|
4
4
|
store: StoreType;
|
|
5
|
-
pageControlsEnabled?: boolean
|
|
6
|
-
backgroundColor?: string
|
|
7
|
-
pageBorderColor?: string
|
|
8
|
-
bleedColor?: string
|
|
9
|
-
activePageBorderColor?: string
|
|
5
|
+
pageControlsEnabled?: boolean;
|
|
6
|
+
backgroundColor?: string;
|
|
7
|
+
pageBorderColor?: string;
|
|
8
|
+
bleedColor?: string;
|
|
9
|
+
activePageBorderColor?: string;
|
|
10
10
|
components?: any;
|
|
11
|
-
onKeyDown?: (
|
|
11
|
+
onKeyDown?: (e: KeyboardEvent, store: StoreType) => void;
|
|
12
12
|
}) => React.JSX.Element) & {
|
|
13
13
|
displayName: string;
|
|
14
14
|
};
|
package/config.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { setGoogleFonts, addGlobalFont, removeGlobalFont, replaceGlobalFonts, }
|
|
|
2
2
|
export { setUploadFunc } from './side-panel/upload-panel';
|
|
3
3
|
export { toggleFadeInAnimation } from './canvas/use-fadein';
|
|
4
4
|
export { setImageLoaderHook as unstable_setImageLoaderHook } from './canvas/image-element';
|
|
5
|
-
export { registerShapeModel as unstable_registerShapeModel } from './model/
|
|
5
|
+
export { registerShapeModel as unstable_registerShapeModel } from './model/group-model';
|
|
6
6
|
export { registerShapeComponent as unstable_registerShapeComponent } from './canvas/element';
|
|
7
7
|
export { registerTransformerAttrs as unstable_registerTransformerAttrs } from './canvas/page';
|
|
8
8
|
export { registerToolbarComponent as unstable_registerToolbarComponent } from './toolbar/toolbar';
|
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.toggleFadeInAnimation=exports.setUploadFunc=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}});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 image_element_1=require("./canvas/image-element");Object.defineProperty(exports,"unstable_setImageLoaderHook",{enumerable:!0,get:function(){return image_element_1.setImageLoaderHook}});var
|
|
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.toggleFadeInAnimation=exports.setUploadFunc=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}});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 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_1=require("./canvas/page");Object.defineProperty(exports,"unstable_registerTransformerAttrs",{enumerable:!0,get:function(){return page_1.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_2=require("./canvas/page");Object.defineProperty(exports,"unstable_registerNextDomDrop",{enumerable:!0,get:function(){return page_2.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}});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Instance } from 'mobx-state-tree';
|
|
2
|
+
export declare const forEveryChild: (node: any, cb: any) => void;
|
|
3
|
+
export declare const ElementTypes: any;
|
|
4
|
+
export declare const GroupElement: any;
|
|
5
|
+
export declare const TYPES_MAP: {
|
|
6
|
+
svg: any;
|
|
7
|
+
text: any;
|
|
8
|
+
image: any;
|
|
9
|
+
group: any;
|
|
10
|
+
line: any;
|
|
11
|
+
video: any;
|
|
12
|
+
};
|
|
13
|
+
export declare function registerShapeModel(defaultAttributes: any): void;
|
|
14
|
+
export type GroupElementType = Instance<typeof GroupElement>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __rest=this&&this.__rest||function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(o=Object.getOwnPropertySymbols(e);l<o.length;l++)t.indexOf(o[l])<0&&Object.prototype.propertyIsEnumerable.call(e,o[l])&&(r[o[l]]=e[o[l]])}return r};Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerShapeModel=exports.TYPES_MAP=exports.GroupElement=exports.ElementTypes=exports.forEveryChild=void 0;const mobx_state_tree_1=require("mobx-state-tree"),node_model_1=require("./node-model"),shape_model_1=require("./shape-model"),text_model_1=require("./text-model"),image_model_1=require("./image-model"),video_model_1=require("./video-model"),line_model_1=require("./line-model"),svg_model_1=require("./svg-model"),forEveryChild=(e,t)=>{e.children&&e.children.forEach((e=>{t(e),(0,exports.forEveryChild)(e,t)}))};exports.forEveryChild=forEveryChild;const additionalTypesUnion=[...new Array(20)].map(((e,t)=>mobx_state_tree_1.types.late((()=>ADDITIONAL_TYPES[t]))));exports.ElementTypes=mobx_state_tree_1.types.union({dispatcher:e=>{const t=exports.TYPES_MAP[e.type];if(!t)throw new Error(`Unknown element type: "${e.type}"`);return t}},svg_model_1.SVGElement,text_model_1.TextElement,image_model_1.ImageElement,line_model_1.LineElement,video_model_1.VideoElement,mobx_state_tree_1.types.late((()=>exports.GroupElement)),...additionalTypesUnion),exports.GroupElement=node_model_1.Node.named("Group").props({type:"group",children:mobx_state_tree_1.types.array(exports.ElementTypes)}).views((e=>({get draggable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.draggable||(t=!1)})),t},get resizable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.resizable||(t=!1)})),t},get contentEditable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.contentEditable||(t=!1)})),t},get styleEditable(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.styleEditable||(t=!1)})),t},get locked(){let t=!0;return(0,exports.forEveryChild)(e,(e=>{e.locked||(t=!1)})),t}}))).actions((e=>({set(t){var{draggable:r,contentEditable:o,styleEditable:l,resizable:s}=t,i=__rest(t,["draggable","contentEditable","styleEditable","resizable"]);void 0!==r&&(0,exports.forEveryChild)(e,(e=>{e.set({draggable:r})})),void 0!==o&&(0,exports.forEveryChild)(e,(e=>{e.set({contentEditable:o})})),void 0!==l&&(0,exports.forEveryChild)(e,(e=>{e.set({styleEditable:l})})),void 0!==s&&(0,exports.forEveryChild)(e,(e=>{e.set({resizable:s})})),Object.assign(e,i)}})));const ADDITIONAL_TYPES=[];function registerShapeModel(e){const t=e.type;if(!t)throw new Error('You must pass "type" attribute to custom model.');const r=shape_model_1.Shape.named(t).props(e);exports.TYPES_MAP[t]=r,ADDITIONAL_TYPES.push(r)}exports.TYPES_MAP={svg:svg_model_1.SVGElement,text:text_model_1.TextElement,image:image_model_1.ImageElement,group:exports.GroupElement,line:line_model_1.LineElement,video:video_model_1.VideoElement},exports.registerShapeModel=registerShapeModel;
|
package/model/history.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const UndoManager: import("mobx-state-tree").IModelType<{
|
|
2
2
|
history: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<any, any, any>>;
|
|
3
|
-
undoIdx: import("mobx-state-tree").IType<number
|
|
4
|
-
targetPath: import("mobx-state-tree").IType<string
|
|
3
|
+
undoIdx: import("mobx-state-tree").IType<number, number, number>;
|
|
4
|
+
targetPath: import("mobx-state-tree").IType<string, string, string>;
|
|
5
5
|
}, {
|
|
6
6
|
readonly canUndo: boolean;
|
|
7
7
|
readonly canRedo: boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ImageElement=void 0;const shape_model_1=require("./shape-model");exports.ImageElement=shape_model_1.Shape.named("Image").props({type:"image",width:100,height:100,src:"",cropX:0,cropY:0,cropWidth:1,cropHeight:1,cornerRadius:0,flipX:!1,flipY:!1,clipSrc:"",borderColor:"black",borderSize:0,keepRatio:!1,_cropModeEnabled:!1}).actions((e=>({toggleCropMode(o){e._cropModeEnabled=null!=o?o:!e._cropModeEnabled,e._cropModeEnabled?e.store.history.startTransaction():e.store.history.endTransaction()}})));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LineElement=void 0;const mobx_state_tree_1=require("mobx-state-tree"),shape_model_1=require("./shape-model");exports.LineElement=shape_model_1.Shape.named("Line").props({type:"line",width:400,height:10,color:"black",dash:mobx_state_tree_1.types.array(mobx_state_tree_1.types.number),startHead:"",endHead:""}).actions((e=>({})));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Node=void 0;const mobx_state_tree_1=require("mobx-state-tree"),nanoid_1=require("nanoid"),store_1=require("./store"),page_model_1=require("./page-model"),group_model_1=require("./group-model");exports.Node=mobx_state_tree_1.types.model("Node",{id:mobx_state_tree_1.types.identifier,type:"none",name:"",opacity:1,custom:mobx_state_tree_1.types.frozen(),visible:!0,selectable:!0,removable:!0,alwaysOnTop:!1,showInExport:!0}).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var r in t)"_"!==r[0]&&(o[r]=e[r]);return o})).views((e=>({get locked(){return!(e.draggable||e.contentEditable||e.styleEditable||e.resizable)},get page(){return(0,mobx_state_tree_1.getParentOfType)(e,page_model_1.Page)},get store(){return(0,mobx_state_tree_1.getParentOfType)(e,store_1.Store)},get top(){let t=e;for(;;){if(!(0,mobx_state_tree_1.hasParentOfType)(t,group_model_1.GroupElement))return t;t=(0,mobx_state_tree_1.getParentOfType)(t,group_model_1.GroupElement)}},get parent(){return(0,mobx_state_tree_1.hasParentOfType)(e,group_model_1.GroupElement)?(0,mobx_state_tree_1.getParentOfType)(e,group_model_1.GroupElement):(0,mobx_state_tree_1.hasParentOfType)(e,page_model_1.Page)?(0,mobx_state_tree_1.getParentOfType)(e,page_model_1.Page):(0,mobx_state_tree_1.hasParentOfType)(e,store_1.Store)?(0,mobx_state_tree_1.getParentOfType)(e,store_1.Store):null}}))).actions((e=>({toJSON:()=>Object.assign({},(0,mobx_state_tree_1.getSnapshot)(e))}))).actions((e=>({clone(t={}){const o=e.toJSON();return t.id=t.id||(0,nanoid_1.nanoid)(10),(0,group_model_1.forEveryChild)(o,(e=>{e.id=(0,nanoid_1.nanoid)(10)})),Object.assign(o,t),e.page.addElement(o)},set(t){Object.assign(e,t)},moveUp(){e.page.moveElementsUp([e.id])},moveTop(){e.page.moveElementsTop([e.id])},moveDown(){e.page.moveElementsDown([e.id])},moveBottom(){e.page.moveElementsBottom([e.id])},beforeDestroy(){e.store.history.endTransaction()}})));
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Instance } from 'mobx-state-tree';
|
|
2
|
+
import { NodeType } from './node-model';
|
|
3
|
+
export declare const Page: import("mobx-state-tree").IModelType<{
|
|
4
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
5
|
+
children: import("mobx-state-tree").IArrayType<any>;
|
|
6
|
+
width: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ITypeUnion<number | "auto", number | "auto", number | "auto">, [undefined]>;
|
|
7
|
+
height: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ITypeUnion<number | "auto", number | "auto", number | "auto">, [undefined]>;
|
|
8
|
+
background: import("mobx-state-tree").IType<string, string, string>;
|
|
9
|
+
bleed: import("mobx-state-tree").IType<number, number, number>;
|
|
10
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
11
|
+
duration: import("mobx-state-tree").IType<number, number, number>;
|
|
12
|
+
_exporting: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
13
|
+
_rendering: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
14
|
+
}, {
|
|
15
|
+
readonly store: any;
|
|
16
|
+
readonly startTime: number;
|
|
17
|
+
} & {
|
|
18
|
+
readonly computedWidth: any;
|
|
19
|
+
readonly computedHeight: any;
|
|
20
|
+
} & {
|
|
21
|
+
toJSON(): any;
|
|
22
|
+
_forEachElementUp(ids: Array<string>, callback: Function): void;
|
|
23
|
+
_forEachElementDown(ids: Array<string>, callback: Function): false;
|
|
24
|
+
} & {
|
|
25
|
+
clone(attrs?: {}): any;
|
|
26
|
+
setZIndex(zIndex: any): void;
|
|
27
|
+
set(attrs: any): void;
|
|
28
|
+
select(): void;
|
|
29
|
+
addElement(attrs: any): NodeType | undefined;
|
|
30
|
+
canMoveElementsUp(ids: Array<string>): false;
|
|
31
|
+
moveElementsUp(ids: Array<string>): void;
|
|
32
|
+
canMoveElementsTop(ids: Array<string>): any;
|
|
33
|
+
moveElementsTop(ids: Array<string>): void;
|
|
34
|
+
canMoveElementsDown(ids: Array<string>): false;
|
|
35
|
+
moveElementsDown(ids: Array<string>): void;
|
|
36
|
+
canMoveElementsBottom(ids: Array<string>): any;
|
|
37
|
+
moveElementsBottom(ids: Array<string>): void;
|
|
38
|
+
setElementZIndex(id: any, zIndex: any): void;
|
|
39
|
+
setSize({ width, height, useMagic, softChange, }: {
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
useMagic?: boolean;
|
|
43
|
+
softChange?: boolean;
|
|
44
|
+
}): void;
|
|
45
|
+
} & {
|
|
46
|
+
moveElementUp(id: any): void;
|
|
47
|
+
moveElementDown(id: any): void;
|
|
48
|
+
moveElementTop(id: any): void;
|
|
49
|
+
moveElementBottom(id: any): void;
|
|
50
|
+
}, import("mobx-state-tree")._NotCustomized, {}>;
|
|
51
|
+
export type PageType = Instance<typeof Page>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Page=void 0;const mobx_state_tree_1=require("mobx-state-tree"),nanoid_1=require("nanoid"),group_model_1=require("./group-model"),store_1=require("./store"),group_model_2=require("./group-model");exports.Page=mobx_state_tree_1.types.model("Page",{id:mobx_state_tree_1.types.identifier,children:mobx_state_tree_1.types.array(group_model_1.ElementTypes),width:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.literal("auto")),"auto"),height:mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.number,mobx_state_tree_1.types.literal("auto")),"auto"),background:"white",bleed:0,custom:mobx_state_tree_1.types.frozen(),duration:5e3,_exporting:!1,_rendering:!1}).postProcessSnapshot((e=>{const t=Object.assign({},e),o={};for(var n in t)"_"!==n[0]&&(o[n]=e[n]);return o})).views((e=>({get store(){return(0,mobx_state_tree_1.getParentOfType)(e,store_1.Store)},get startTime(){let t=0;for(const o of e.store.pages){if(o.id===e.id)return t;t+=o.duration}return t}}))).views((e=>({get computedWidth(){return"auto"===e.width?e.store.width:e.width},get computedHeight(){return"auto"===e.height?e.store.height:e.height}}))).actions((e=>({toJSON:()=>JSON.parse(JSON.stringify((0,mobx_state_tree_1.getSnapshot)(e))),_forEachElementUp(t,o){const n=t.map((t=>({id:t,index:e.children.findIndex((e=>e.id===t))})));n.sort(((e,t)=>t.index-e.index));for(const{index:i}of n){if(-1==i)continue;const n=i<e.children.length-1&&e.children[i+1],r=t.indexOf(null==n?void 0:n.id)>=0;i===e.children.length-1||r||o(i)}},_forEachElementDown(t,o){const n=t.map((t=>({id:t,index:e.children.findIndex((e=>e.id===t))})));n.sort(((e,t)=>e.index-t.index));for(const{index:i}of n){if(-1==i)continue;const n=i>0&&e.children[i-1],r=t.indexOf(null==n?void 0:n.id)>=0;0===i||r||o(i)}return!1}}))).actions((e=>({clone(t={}){const o=e.toJSON();o.children.forEach((e=>{e.id=(0,nanoid_1.nanoid)(10),(0,group_model_2.forEveryChild)(e,(e=>{e.id=(0,nanoid_1.nanoid)(10)}))}));const n=Object.assign(Object.assign(Object.assign({},o),{id:(0,nanoid_1.nanoid)(10)}),t),i=e.store.addPage(n),r=e.store.pages.indexOf(e);i.setZIndex(r+1),i.select()},setZIndex(t){e.store.setPageZIndex(e.id,t)},set(t){Object.assign(e,t)},select(){e.store.selectPage(e.id)},addElement(t){const o=group_model_2.TYPES_MAP[t.type];if(!o)return void console.error("Can not find model with type "+t.type);t.children&&t.children.forEach((e=>{e.id=(0,nanoid_1.nanoid)(10)}));const n=o.create(Object.assign({id:(0,nanoid_1.nanoid)(10)},t));return e.children.push(n),n.selectable&&e.store.selectElements([n.id]),n},canMoveElementsUp(t){let o=!1;return e._forEachElementUp(t,(()=>{o=o||!0})),o},moveElementsUp(t){e._forEachElementUp(t,(t=>{const o=e.children[t];(0,mobx_state_tree_1.detach)(o),e.children.splice(t+1,0,o)}))},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(t){const o=[],n=[];e.children.forEach((e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)})),e.children.replace(n.concat(o))},canMoveElementsDown(t){let o=!1;return e._forEachElementDown(t,(()=>{o=o||!0})),o},moveElementsDown(t){e._forEachElementDown(t,(t=>{const o=e.children[t];(0,mobx_state_tree_1.detach)(o),e.children.splice(t-1,0,o)}))},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(t){const o=[],n=[];e.children.forEach((e=>{t.indexOf(e.id)>=0?o.push(e):n.push(e)})),e.children.replace(o.concat(n))},setElementZIndex(t,o){const n=e.children.find((e=>e.id===t));n&&((0,mobx_state_tree_1.detach)(n),e.children.remove(n),e.children.splice(o,0,n))},setSize({width:t,height:o,useMagic:n,softChange:i}){if(n){const n=t/e.computedWidth,i=o/e.computedHeight,r=Math.min(n,i),s=Math.max(0,(t-e.computedWidth*r)/2),d=Math.max(0,(o-e.computedHeight*r)/2);(0,group_model_2.forEveryChild)(e,(async t=>{if("group"===t.type)return;"image"===t.type&&t.x<1&&t.y<1&&t.width>=e.computedWidth-2&&t.height>=e.computedHeight-2?t.set({x:t.x*r,y:t.y*r,width:t.width*n,height:t.height*i,cropX:0,cropY:0,cropWidth:1,cropHeight:1}):(t.set({x:s+t.x*r,y:d+t.y*r,width:t.width*r,height:t.height*r}),"text"===t.type&&t.set({fontSize:t.fontSize*r}))}))}i||(e.width=t),i||(e.height=o)}}))).actions((e=>({moveElementUp(t){console.warn("page.moveElementUp(id) is deprecated. Please use page.moveElementsUp([id1, id2]) instead."),e.moveElementsUp([t])},moveElementDown(t){console.warn("page.moveElementDown(id) is deprecated. Please use page.moveElementsDown([id1, id2]) instead."),e.moveElementsDown([t])},moveElementTop(t){console.warn("page.moveElementTop(id) is deprecated. Please use page.moveElementsTop([id1, id2]) instead."),e.moveElementsTop([t])},moveElementBottom(t){console.warn("page.moveElementBottom(id) is deprecated. Please use page.moveElementsBottom([id1, id2]) instead."),e.moveElementsBottom([t])}})));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Instance } from 'mobx-state-tree';
|
|
2
|
+
export declare const Animation: import("mobx-state-tree").IModelType<{
|
|
3
|
+
delay: import("mobx-state-tree").IType<number, number, number>;
|
|
4
|
+
duration: import("mobx-state-tree").IType<number, number, number>;
|
|
5
|
+
enabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
6
|
+
type: import("mobx-state-tree").ISimpleType<string>;
|
|
7
|
+
name: import("mobx-state-tree").IType<string, string, string>;
|
|
8
|
+
data: import("mobx-state-tree").IType<{}, {}, {}>;
|
|
9
|
+
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
10
|
+
export declare const Shape: any;
|
|
11
|
+
export type ShapeType = Instance<typeof Shape>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Shape=exports.Animation=void 0;const mobx_state_tree_1=require("mobx-state-tree"),animations_1=require("../utils/animations"),node_model_1=require("./node-model");exports.Animation=mobx_state_tree_1.types.model("Animation",{delay:0,duration:500,enabled:!0,type:mobx_state_tree_1.types.enumeration("Type",["enter","exit"]),name:"none",data:mobx_state_tree_1.types.frozen({})}),exports.Shape=node_model_1.Node.named("Shape").props({x:0,y:0,width:100,height:100,rotation:0,opacity:1,animations:mobx_state_tree_1.types.array(exports.Animation),blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,visible:!0,draggable:!0,resizable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot((e=>{const t=Object.assign(Object.assign({},e),{x:e.x||0,y:e.y||0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1,t.resizable=!1),t})).views((e=>({get a(){const{currentTime:t}=e.store,a={x:e.x,y:e.y,width:e.width,height:e.height,rotation:e.rotation,opacity:e.opacity,color:e.color,fontSize:e.fontSize};if(0===t)return a;const n=t-e.page.startTime;if(n>e.page.duration)return a;if(n<0)return a;const i=e.store.animatedElementsIds;if(i.length&&!i.includes(e.id))return a;const o=e.animations.find((e=>"enter"===e.type));(null==o?void 0:o.enabled)&&n<o.delay&&(a.opacity=0);if((null==o?void 0:o.enabled)&&n>=o.delay&&n<=o.delay+o.duration){const t=n-o.delay,i=(0,animations_1.animate)({element:e,animation:o,dTime:t});Object.assign(a,i)}const s=e.animations.find((e=>"exit"===e.type));if((null==s?void 0:s.enabled)&&n>=e.page.duration-s.duration){const t=n-(e.page.duration-s.duration),i=(0,animations_1.animate)({element:e,animation:s,dTime:t});Object.assign(a,i)}return a},animated:t=>e.a[t]}))).actions((e=>({setAnimation(t,a){const n=e.animations.find((e=>e.type===t));n?Object.assign(n,a):e.animations.push(Object.assign({type:t},a))}})));
|