polotno 3.0.0-beta.13 → 3.0.0-beta.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/blueprint.polotno.css +269 -39
  2. package/canvas/audio.d.ts +1 -1
  3. package/canvas/context-menu/context-menu.d.ts +1 -1
  4. package/canvas/drawing-layer.d.ts +1 -1
  5. package/canvas/element.d.ts +1 -1
  6. package/canvas/image-element.d.ts +1 -1
  7. package/canvas/page-controls.d.ts +1 -1
  8. package/canvas/rules.d.ts +4 -2
  9. package/canvas/rules.js +3 -3
  10. package/canvas/tooltip.d.ts +1 -1
  11. package/canvas/use-color.d.ts +2 -2
  12. package/canvas/video-element.d.ts +1 -1
  13. package/canvas/workspace-canvas.d.ts +2 -1
  14. package/canvas/workspace-canvas.js +1 -1
  15. package/model/audio-model.d.ts +6 -6
  16. package/model/figure-model.d.ts +112 -88
  17. package/model/gif-model.d.ts +125 -101
  18. package/model/group-model.d.ts +843 -675
  19. package/model/history.d.ts +2 -2
  20. package/model/history.js +1 -1
  21. package/model/image-model.d.ts +122 -98
  22. package/model/line-model.d.ts +112 -88
  23. package/model/node-model.d.ts +72 -40
  24. package/model/node-model.js +1 -1
  25. package/model/page-model.d.ts +11 -11
  26. package/model/page-model.js +1 -1
  27. package/model/shape-model.d.ts +112 -88
  28. package/model/shape-model.js +1 -1
  29. package/model/store.d.ts +346 -309
  30. package/model/store.js +1 -1
  31. package/model/svg-model.d.ts +114 -90
  32. package/model/text-model.d.ts +131 -107
  33. package/model/video-model.d.ts +127 -103
  34. package/package.json +16 -13
  35. package/pages-timeline/audio-track.js +1 -1
  36. package/pages-timeline/audios.d.ts +1 -1
  37. package/pages-timeline/elements.d.ts +1 -1
  38. package/pages-timeline/waveform.d.ts +2 -2
  39. package/polotno.bundle.js +73 -73
  40. package/side-panel/animations-panel.d.ts +1 -1
  41. package/side-panel/effects-panel.d.ts +1 -1
  42. package/side-panel/select-video.d.ts +236 -199
  43. package/side-panel/videos-grid.d.ts +1 -1
  44. package/toolbar/element-container.d.ts +1 -1
  45. package/toolbar/figure-toolbar.d.ts +1 -1
  46. package/toolbar/sketch.d.ts +7 -7
  47. package/toolbar/text-ai-write.d.ts +1 -1
  48. package/toolbar/toolbar.d.ts +1 -1
  49. package/toolbar/use-copy-style.d.ts +2 -2
  50. package/toolbar/video-toolbar.d.ts +1 -1
  51. package/utils/clipboard.js +1 -1
  52. package/utils/font-metric.d.ts +4 -4
  53. package/utils/from-svg.js +1 -1
  54. package/utils/gif-lib.d.ts +5 -0
  55. package/utils/goober.d.ts +5 -0
  56. package/utils/gradient.js +1 -1
  57. package/utils/l10n.d.ts +5 -1
  58. package/utils/l10n.js +1 -1
  59. package/utils/luma.js +1 -1
  60. package/utils/pdf.d.ts +6 -1
  61. package/utils/pdf.js +1 -1
  62. package/utils/react-color/components/common/ColorWrap.d.ts +2 -2
  63. package/utils/react-color/components/common/Swatch.d.ts +3 -3
  64. package/utils/react-color/helpers/interaction.d.ts +3 -3
  65. package/utils/reactcss/components/active.d.ts +3 -3
  66. package/utils/reactcss/components/hover.d.ts +3 -3
  67. package/utils/styled.js +1 -1
  68. package/utils/svg.d.ts +1 -1
  69. package/utils/svg.js +1 -1
  70. package/utils/to-canvas.d.ts +3 -1
  71. package/utils/to-canvas.js +1 -1
  72. package/utils/to-pptx.d.ts +1 -1
  73. package/utils/to-svg.d.ts +9 -7
  74. package/utils/use-api.d.ts +3 -3
  75. package/utils/validate-key.js +1 -1
@@ -1,42 +1,67 @@
1
1
  import { Instance } from 'mobx-state-tree';
2
2
  export declare const Node: import("mobx-state-tree").IModelType<{
3
3
  id: import("mobx-state-tree").ISimpleType<string>;
4
- type: import("mobx-state-tree").IType<string, string, string>;
5
- name: import("mobx-state-tree").IType<string, string, string>;
6
- opacity: import("mobx-state-tree").IType<number, number, number>;
4
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
5
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
6
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
7
7
  custom: import("mobx-state-tree").IType<any, any, any>;
8
- visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
9
- selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
10
- removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
11
- alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
12
- showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
8
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
9
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
10
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
11
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
12
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
13
13
  }, {
14
- readonly locked: boolean;
15
14
  readonly page: any;
16
15
  readonly store: any;
17
16
  readonly top: import("mobx-state-tree").ModelInstanceTypeProps<{
18
17
  id: import("mobx-state-tree").ISimpleType<string>;
19
- type: import("mobx-state-tree").IType<string, string, string>;
20
- name: import("mobx-state-tree").IType<string, string, string>;
21
- opacity: import("mobx-state-tree").IType<number, number, number>;
18
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
19
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
20
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
22
21
  custom: import("mobx-state-tree").IType<any, any, any>;
23
- visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
24
- selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
25
- removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
26
- alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
27
- showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
22
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
23
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
24
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
25
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
26
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
28
27
  }> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
29
28
  id: import("mobx-state-tree").ISimpleType<string>;
30
- type: import("mobx-state-tree").IType<string, string, string>;
31
- name: import("mobx-state-tree").IType<string, string, string>;
32
- opacity: import("mobx-state-tree").IType<number, number, number>;
29
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
30
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
31
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
33
32
  custom: import("mobx-state-tree").IType<any, any, any>;
34
- visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
35
- selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
36
- removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
37
- alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
38
- showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
33
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
34
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
35
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
36
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
37
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
39
38
  }, {}, import("mobx-state-tree").ModelCreationType<{
39
+ id: string;
40
+ type: string | undefined;
41
+ name: string | undefined;
42
+ opacity: number | undefined;
43
+ custom: any;
44
+ visible: boolean | undefined;
45
+ selectable: boolean | undefined;
46
+ removable: boolean | undefined;
47
+ alwaysOnTop: boolean | undefined;
48
+ showInExport: boolean | undefined;
49
+ }>, import("mobx-state-tree").ModelSnapshotType<{
50
+ id: import("mobx-state-tree").ISimpleType<string>;
51
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
52
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
53
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
54
+ custom: import("mobx-state-tree").IType<any, any, any>;
55
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
56
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
57
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
58
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
59
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
60
+ }>>>;
61
+ readonly parent: any;
62
+ readonly zIndex: any;
63
+ } & {
64
+ toJSON(): {
40
65
  id: string;
41
66
  type: string;
42
67
  name: string;
@@ -47,14 +72,10 @@ export declare const Node: import("mobx-state-tree").IModelType<{
47
72
  removable: boolean;
48
73
  alwaysOnTop: boolean;
49
74
  showInExport: boolean;
50
- }>, {}>>;
51
- readonly parent: any;
52
- readonly zIndex: any;
53
- } & {
54
- toJSON(): {};
75
+ };
55
76
  } & {
56
77
  clone(attrs?: any, { skipSelect }?: {
57
- skipSelect?: boolean;
78
+ skipSelect?: boolean | undefined;
58
79
  }): NodeType;
59
80
  set(attrs: any): void;
60
81
  moveUp(): void;
@@ -65,14 +86,25 @@ export declare const Node: import("mobx-state-tree").IModelType<{
65
86
  beforeDestroy(): void;
66
87
  }, import("mobx-state-tree").ModelCreationType<{
67
88
  id: string;
68
- type: string;
69
- name: string;
70
- opacity: number;
89
+ type: string | undefined;
90
+ name: string | undefined;
91
+ opacity: number | undefined;
71
92
  custom: any;
72
- visible: boolean;
73
- selectable: boolean;
74
- removable: boolean;
75
- alwaysOnTop: boolean;
76
- showInExport: boolean;
77
- }>, {}>;
93
+ visible: boolean | undefined;
94
+ selectable: boolean | undefined;
95
+ removable: boolean | undefined;
96
+ alwaysOnTop: boolean | undefined;
97
+ showInExport: boolean | undefined;
98
+ }>, import("mobx-state-tree").ModelSnapshotType<{
99
+ id: import("mobx-state-tree").ISimpleType<string>;
100
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
101
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
102
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
103
+ custom: import("mobx-state-tree").IType<any, any, any>;
104
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
105
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
106
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
107
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
108
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
109
+ }>>;
78
110
  export type NodeType = Instance<typeof Node>;
@@ -1 +1 @@
1
- import{types as e,getParentOfType as t,getSnapshot as o,hasParentOfType as n}from"mobx-state-tree";import{nanoid as r}from"nanoid";import{Store as s}from"./store.js";import{Page as i}from"./page-model.js";import{GroupElement as a,forEveryChild as l}from"./group-model.js";export const Node=e.model("Node",{id:e.identifier,type:"none",name:"",opacity:1,custom:e.frozen(),visible:!0,selectable:!0,removable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot(e=>{for(var t in e){null===e[t]&&(e[t]=void 0)}return e}).postProcessSnapshot(e=>{const t=Object.assign({},e),o={};for(var n in t){"_"!==n[0]&&(o[n]=e[n])}return o}).views(e=>({get locked(){return!(e.draggable||e.contentEditable||e.styleEditable||e.resizable)},get page(){return t(e,i)},get store(){return t(e,s)},get top(){let o=e;for(;;){if(!n(o,a)){return o}o=t(o,a)}},get parent(){if(n(e,a)){const o=t(e,a);return o&&o.children&&o.children.length,o}if(n(e,i)){const o=t(e,i);return o&&o.children&&o.children.length,o}if(n(e,s)){const o=t(e,s);return o&&o.pages&&o.pages.length,o}return null},get zIndex(){return e.parent.children.indexOf(e)}})).actions(e=>({toJSON:()=>Object.assign({},o(e))})).actions(e=>({clone(t={},{skipSelect:o=!1}={}){const n=JSON.parse(JSON.stringify(e.toJSON()));return t.id=t.id||r(10),l(n,e=>{e.id=r(10)}),Object.assign(n,t),e.page.addElement(n,{skipSelect: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])},setZIndex(t){e.parent.setElementZIndex(e.id,t)},beforeDestroy(){}}));
1
+ import{types as e,getParentOfType as t,getSnapshot as o,hasParentOfType as n}from"mobx-state-tree";import{nanoid as r}from"nanoid";import{Store as s}from"./store.js";import{Page as i}from"./page-model.js";import{GroupElement as p,forEveryChild as m}from"./group-model.js";export const Node=e.model("Node",{id:e.identifier,type:"none",name:"",opacity:1,custom:e.frozen(),visible:!0,selectable:!0,removable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot(e=>{for(var t in e){null===e[t]&&(e[t]=void 0)}return e}).postProcessSnapshot(e=>{const t=Object.assign({},e),o={};for(var n in t){"_"!==n[0]&&(o[n]=e[n])}return o}).views(e=>({get page(){return t(e,i)},get store(){return t(e,s)},get top(){let o=e;for(;;){if(!n(o,p)){return o}o=t(o,p)}},get parent(){if(n(e,p)){const o=t(e,p);return o&&o.children&&o.children.length,o}if(n(e,i)){const o=t(e,i);return o&&o.children&&o.children.length,o}if(n(e,s)){const o=t(e,s);return o&&o.pages&&o.pages.length,o}return null},get zIndex(){return e.parent.children.indexOf(e)}})).actions(e=>({toJSON:()=>Object.assign({},o(e))})).actions(e=>({clone(t={},{skipSelect:o=!1}={}){const n=JSON.parse(JSON.stringify(e.toJSON()));return t.id=t.id||r(10),m(n,e=>{e.id=r(10)}),Object.assign(n,t),e.page.addElement(n,{skipSelect: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])},setZIndex(t){e.parent.setElementZIndex(e.id,t)},beforeDestroy(){}}));
@@ -6,13 +6,13 @@ export declare const Page: import("mobx-state-tree").IModelType<{
6
6
  children: import("mobx-state-tree").IArrayType<any>;
7
7
  width: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree/dist/internal").IUnionType<[import("mobx-state-tree").ISimpleType<number>, import("mobx-state-tree").ISimpleType<"auto">]>, [undefined]>;
8
8
  height: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree/dist/internal").IUnionType<[import("mobx-state-tree").ISimpleType<number>, import("mobx-state-tree").ISimpleType<"auto">]>, [undefined]>;
9
- background: import("mobx-state-tree").IType<string, string, string>;
10
- bleed: import("mobx-state-tree").IType<number, number, number>;
9
+ background: import("mobx-state-tree").IType<string | undefined, string, string>;
10
+ bleed: import("mobx-state-tree").IType<number | undefined, number, number>;
11
11
  custom: import("mobx-state-tree").IType<any, any, any>;
12
- duration: import("mobx-state-tree").IType<number, number, number>;
13
- _exporting: import("mobx-state-tree").IType<boolean, boolean, boolean>;
14
- _rendering: import("mobx-state-tree").IType<boolean, boolean, boolean>;
15
- _forceMount: import("mobx-state-tree").IType<boolean, boolean, boolean>;
12
+ duration: import("mobx-state-tree").IType<number | undefined, number, number>;
13
+ _exporting: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
14
+ _rendering: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
15
+ _forceMount: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
16
16
  }, {
17
17
  readonly store: any;
18
18
  } & {
@@ -35,17 +35,17 @@ export declare const Page: import("mobx-state-tree").IModelType<{
35
35
  } & (T extends ElementType["type"] ? Partial<Omit<Extract<ElementType, {
36
36
  type: T;
37
37
  }>, "type">> : Record<string, any>), { skipSelect }?: {
38
- skipSelect?: boolean;
38
+ skipSelect?: boolean | undefined;
39
39
  }): T extends ElementType["type"] ? Extract<ElementType, {
40
40
  type: T;
41
41
  }> : NodeType;
42
- canMoveElementsUp(ids: Array<string>): false;
42
+ canMoveElementsUp(ids: Array<string>): boolean;
43
43
  moveElementsUp(ids: Array<string>): void;
44
- canMoveElementsTop(ids: Array<string>): any;
44
+ canMoveElementsTop(ids: Array<string>): boolean;
45
45
  moveElementsTop(ids: Array<string>): void;
46
- canMoveElementsDown(ids: Array<string>): false;
46
+ canMoveElementsDown(ids: Array<string>): boolean;
47
47
  moveElementsDown(ids: Array<string>): void;
48
- canMoveElementsBottom(ids: Array<string>): any;
48
+ canMoveElementsBottom(ids: Array<string>): boolean;
49
49
  moveElementsBottom(ids: Array<string>): void;
50
50
  setElementZIndex(id: any, zIndex: any): void;
51
51
  setSize({ width, height, useMagic, softChange, }: {
@@ -1 +1 @@
1
- import{detach as e,getParentOfType as t,getSnapshot as n,types as i}from"mobx-state-tree";import{nanoid as o}from"nanoid";import{ElementTypes as r,forEveryChild as d,TYPES_MAP as s}from"./group-model.js";import{Store as c}from"./store.js";import{getTotalClientRect as a}from"../utils/math.js";export const Page=i.model("Page",{id:i.identifier,children:i.array(i.late(()=>r)),width:i.optional(i.union(i.number,i.literal("auto")),"auto"),height:i.optional(i.union(i.number,i.literal("auto")),"auto"),background:"white",bleed:0,custom:i.frozen(),duration:5e3,_exporting:!1,_rendering:!1,_forceMount:!1}).postProcessSnapshot(e=>{const t=Object.assign({},e),n={};for(var i in t){"_"!==i[0]&&(n[i]=e[i])}return n}).views(e=>({get store(){return t(e,c)}})).views(e=>({get startTime(){let t=0;for(const n of e.store.pages){if(n.id===e.id){return t}t+=n.duration}return t},get _exportingOrRendering(){return e._exporting||e._rendering}})).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(n(e))),_forEachElementUp(t,n){const i=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));i.sort((e,t)=>t.index-e.index);for(const{index:o}of i){if(-1==o){continue}const i=o<e.children.length-1&&e.children[o+1],r=t.indexOf(null==i?void 0:i.id)>=0;o===e.children.length-1||r||n(o)}},_forEachElementDown(t,n){const i=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));i.sort((e,t)=>e.index-t.index);for(const{index:o}of i){if(-1==o){continue}const i=o>0&&e.children[o-1],r=t.indexOf(null==i?void 0:i.id)>=0;0===o||r||n(o)}return!1}})).actions(t=>({clone(e={}){const n=t.toJSON();n.children.forEach(e=>{e.id=o(10),d(e,e=>{e.id=o(10)})});const i=Object.assign(Object.assign(Object.assign({},n),{id:o(10)}),e),r=t.store.addPage(i),s=t.store.pages.indexOf(t);return r.setZIndex(s+1),r.select(),r},setZIndex(e){t.store.setPageZIndex(t.id,e)},set(e){Object.assign(t,e)},select(){t.store.selectPage(t.id)},addElement(e,{skipSelect:n=!1}={}){const i=s[e.type];if(!i){return void console.error("Can not find model with type "+e.type)}"children"in e&&Array.isArray(e.children)&&d(e,e=>{e.id=e.id||o(10)});const r=t.children.reduce((t,n)=>{if("group"===n.type){const i=n.children.reduce((t,n)=>{var i;const o=null===(i=n.name)||void 0===i?void 0:i.match(new RegExp(`${e.type}-(\\d+)`));if(o){const e=parseInt(o[1],10);return Math.max(t,e||0)}},0);return Math.max(t,i||0)}{const i=n.name.match(new RegExp(`${e.type}-(\\d+)`));if(i){const e=parseInt(i[1],10);return Math.max(t,e||0)}}return t},0),c=i.create(Object.assign({id:o(10),name:`${e.type}-${r+1}`},e));return t.children.push(c),c.selectable&&!n&&t.store.selectElements([c.id]),c},canMoveElementsUp(e){let n=!1;return t._forEachElementUp(e,()=>{n=n||!0}),n},moveElementsUp(n){t._forEachElementUp(n,n=>{const i=t.children[n];e(i),t.children.splice(n+1,0,i)})},canMoveElementsTop(e){return this.canMoveElementsUp(e)},moveElementsTop(e){const n=[],i=[];t.children.forEach(t=>{e.indexOf(t.id)>=0?n.push(t):i.push(t)}),t.children.replace(i.concat(n))},canMoveElementsDown(e){let n=!1;return t._forEachElementDown(e,()=>{n=n||!0}),n},moveElementsDown(n){t._forEachElementDown(n,n=>{const i=t.children[n];e(i),t.children.splice(n-1,0,i)})},canMoveElementsBottom(e){return this.canMoveElementsDown(e)},moveElementsBottom(e){const n=[],i=[];t.children.forEach(t=>{e.indexOf(t.id)>=0?n.push(t):i.push(t)}),t.children.replace(n.concat(i))},setElementZIndex(n,i){const o=t.children.find(e=>e.id===n);o&&(e(o),t.children.remove(o),t.children.splice(i,0,o))},setSize({width:e,height:n,useMagic:i,softChange:o}){if(i){const i=[],o=e=>"image"===e.type&&e.x<1&&e.y<1&&e.width>=t.computedWidth-2&&e.height>=t.computedHeight-2;d(t,e=>{"group"!==e.type&&(o(e)||i.push(e))});const r=i.length?a(i):{x:0,y:0,width:t.computedWidth,height:t.computedHeight},s=1/4,c=Math.max(0,Math.min(r.x,t.computedWidth-r.x-r.width)),h=t.computedWidth*s,m=Math.max(0,c-h),l=Math.max(0,Math.min(r.y,t.computedHeight-r.y-r.height)),p=t.computedHeight*s,u=Math.max(0,l-p),g=t.computedWidth-2*m,f=t.computedHeight-2*u,E=e/g,x=n/f,v=Math.min(E,x),w=(e-g*v)/2-m*v,y=(n-f*v)/2-u*v;d(t,e=>{"group"!==e.type&&(o(e)?e.set({x:e.x*v,y:e.y*v,width:e.width*E,height:e.height*x,cropX:0,cropY:0,cropWidth:1,cropHeight:1}):(e.set({x:w+e.x*v,y:y+e.y*v,width:e.width*v,height:e.height*v}),"text"===e.type?e.set({fontSize:e.fontSize*v}):"figure"===e.type&&e.set({strokeWidth:e.strokeWidth*v})))})}o||(t.width=e),o||(t.height=n)}})).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])},play(){e.store.play({startTime:e.startTime,endTime:e.startTime+e.duration})}}));
1
+ import{detach as e,getParentOfType as t,getSnapshot as n,types as o}from"mobx-state-tree";import{nanoid as i}from"nanoid";import{ElementTypes as r,forEveryChild as d,TYPES_MAP as s}from"./group-model.js";import{Store as c}from"./store.js";import{getTotalClientRect as a}from"../utils/math.js";export const Page=o.model("Page",{id:o.identifier,children:o.array(o.late(()=>r)),width:o.optional(o.union(o.number,o.literal("auto")),"auto"),height:o.optional(o.union(o.number,o.literal("auto")),"auto"),background:"white",bleed:0,custom:o.frozen(),duration:5e3,_exporting:!1,_rendering:!1,_forceMount:!1}).postProcessSnapshot(e=>{const t=Object.assign({},e),n={};for(var o in t){"_"!==o[0]&&(n[o]=e[o])}return n}).views(e=>({get store(){return t(e,c)}})).views(e=>({get startTime(){let t=0;for(const n of e.store.pages){if(n.id===e.id){return t}t+=n.duration}return t},get _exportingOrRendering(){return e._exporting||e._rendering}})).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(n(e))),_forEachElementUp(t,n){const o=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));o.sort((e,t)=>t.index-e.index);for(const{index:i}of o){if(-1==i){continue}const o=i<e.children.length-1&&e.children[i+1],r=t.indexOf(null==o?void 0:o.id)>=0;i===e.children.length-1||r||n(i)}},_forEachElementDown(t,n){const o=t.map(t=>({id:t,index:e.children.findIndex(e=>e.id===t)}));o.sort((e,t)=>e.index-t.index);for(const{index:i}of o){if(-1==i){continue}const o=i>0&&e.children[i-1],r=t.indexOf(null==o?void 0:o.id)>=0;0===i||r||n(i)}return!1}})).actions(t=>{const n={clone(e={}){const n=t.toJSON();n.children.forEach(e=>{e.id=i(10),d(e,e=>{e.id=i(10)})});const o=Object.assign(Object.assign(Object.assign({},n),{id:i(10)}),e),r=t.store.addPage(o),s=t.store.pages.indexOf(t);return r.setZIndex(s+1),r.select(),r},setZIndex(e){t.store.setPageZIndex(t.id,e)},set(e){Object.assign(t,e)},select(){t.store.selectPage(t.id)},addElement(e,{skipSelect:n=!1}={}){const o=s[e.type];if(!o){return void console.error("Can not find model with type "+e.type)}"children"in e&&Array.isArray(e.children)&&d(e,e=>{e.id=e.id||i(10)});const r=t.children.reduce((t,n)=>{if("group"===n.type){const o=n.children.reduce((t,n)=>{var o;const i=null===(o=n.name)||void 0===o?void 0:o.match(new RegExp(`${e.type}-(\\d+)`));if(i){const e=parseInt(i[1],10);return Math.max(t,e||0)}},0);return Math.max(t,o||0)}{const o=n.name.match(new RegExp(`${e.type}-(\\d+)`));if(o){const e=parseInt(o[1],10);return Math.max(t,e||0)}}return t},0),c=o.create(Object.assign({id:i(10),name:`${e.type}-${r+1}`},e));return t.children.push(c),c.selectable&&!n&&t.store.selectElements([c.id]),c},canMoveElementsUp(e){let n=!1;return t._forEachElementUp(e,()=>{n=n||!0}),n},moveElementsUp(n){t._forEachElementUp(n,n=>{const o=t.children[n];e(o),t.children.splice(n+1,0,o)})},canMoveElementsTop:e=>n.canMoveElementsUp(e),moveElementsTop(e){const n=[],o=[];t.children.forEach(t=>{e.indexOf(t.id)>=0?n.push(t):o.push(t)}),t.children.replace(o.concat(n))},canMoveElementsDown(e){let n=!1;return t._forEachElementDown(e,()=>{n=n||!0}),n},moveElementsDown(n){t._forEachElementDown(n,n=>{const o=t.children[n];e(o),t.children.splice(n-1,0,o)})},canMoveElementsBottom:e=>n.canMoveElementsDown(e),moveElementsBottom(e){const n=[],o=[];t.children.forEach(t=>{e.indexOf(t.id)>=0?n.push(t):o.push(t)}),t.children.replace(n.concat(o))},setElementZIndex(n,o){const i=t.children.find(e=>e.id===n);i&&(e(i),t.children.remove(i),t.children.splice(o,0,i))},setSize({width:e,height:n,useMagic:o,softChange:i}){if(o){const o=[],i=e=>"image"===e.type&&e.x<1&&e.y<1&&e.width>=t.computedWidth-2&&e.height>=t.computedHeight-2;d(t,e=>{"group"!==e.type&&(i(e)||o.push(e))});const r=o.length?a(o):{x:0,y:0,width:t.computedWidth,height:t.computedHeight},s=1/4,c=Math.max(0,Math.min(r.x,t.computedWidth-r.x-r.width)),m=t.computedWidth*s,h=Math.max(0,c-m),l=Math.max(0,Math.min(r.y,t.computedHeight-r.y-r.height)),p=t.computedHeight*s,u=Math.max(0,l-p),g=t.computedWidth-2*h,f=t.computedHeight-2*u,E=e/g,x=n/f,v=Math.min(E,x),w=(e-g*v)/2-h*v,y=(n-f*v)/2-u*v;d(t,e=>{"group"!==e.type&&(i(e)?e.set({x:e.x*v,y:e.y*v,width:e.width*E,height:e.height*x,cropX:0,cropY:0,cropWidth:1,cropHeight:1}):(e.set({x:w+e.x*v,y:y+e.y*v,width:e.width*v,height:e.height*v}),"text"===e.type?e.set({fontSize:e.fontSize*v}):"figure"===e.type&&e.set({strokeWidth:e.strokeWidth*v})))})}i||(t.width=e),i||(t.height=n)}};return n}).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])},play(){e.store.play({startTime:e.startTime,endTime:e.startTime+e.duration})}}));
@@ -1,93 +1,118 @@
1
1
  import { Instance } from 'mobx-state-tree';
2
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>;
3
+ delay: import("mobx-state-tree").IType<number | undefined, number, number>;
4
+ duration: import("mobx-state-tree").IType<number | undefined, number, number>;
5
+ enabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
6
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<{}, {}, {}>;
7
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
8
+ data: import("mobx-state-tree").IType<{} | null | undefined, {}, {}>;
9
9
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
10
10
  export declare const getDiff: (obj1: Record<string, any>, obj2: Record<string, any>) => Record<string, any>;
11
11
  export declare const ShapeFilter: import("mobx-state-tree").IModelType<{
12
- intensity: import("mobx-state-tree").IType<number, number, number>;
12
+ intensity: import("mobx-state-tree").IType<number | undefined, number, number>;
13
13
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
14
14
  export declare const INDEPENDENT_FILTERS: string[];
15
15
  export declare const Shape: import("mobx-state-tree").IModelType<{
16
16
  id: import("mobx-state-tree").ISimpleType<string>;
17
- type: import("mobx-state-tree").IType<string, string, string>;
18
- name: import("mobx-state-tree").IType<string, string, string>;
19
- opacity: import("mobx-state-tree").IType<number, number, number>;
17
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
18
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
19
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
20
20
  custom: import("mobx-state-tree").IType<any, any, any>;
21
- visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
22
- selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
23
- removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
24
- alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
25
- showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
21
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
22
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
23
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
24
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
25
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
26
26
  } & {
27
- x: import("mobx-state-tree").IType<number, number, number>;
28
- y: import("mobx-state-tree").IType<number, number, number>;
29
- width: import("mobx-state-tree").IType<number, number, number>;
30
- height: import("mobx-state-tree").IType<number, number, number>;
31
- rotation: import("mobx-state-tree").IType<number, number, number>;
32
- opacity: import("mobx-state-tree").IType<number, number, number>;
27
+ x: import("mobx-state-tree").IType<number | undefined, number, number>;
28
+ y: import("mobx-state-tree").IType<number | undefined, number, number>;
29
+ width: import("mobx-state-tree").IType<number | undefined, number, number>;
30
+ height: import("mobx-state-tree").IType<number | undefined, number, number>;
31
+ rotation: import("mobx-state-tree").IType<number | undefined, number, number>;
32
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
33
33
  animations: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
34
- delay: import("mobx-state-tree").IType<number, number, number>;
35
- duration: import("mobx-state-tree").IType<number, number, number>;
36
- enabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
34
+ delay: import("mobx-state-tree").IType<number | undefined, number, number>;
35
+ duration: import("mobx-state-tree").IType<number | undefined, number, number>;
36
+ enabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
37
37
  type: import("mobx-state-tree").ISimpleType<string>;
38
- name: import("mobx-state-tree").IType<string, string, string>;
39
- data: import("mobx-state-tree").IType<{}, {}, {}>;
38
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
39
+ data: import("mobx-state-tree").IType<{} | null | undefined, {}, {}>;
40
40
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
41
- blurEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
42
- blurRadius: import("mobx-state-tree").IType<number, number, number>;
43
- brightnessEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
44
- brightness: import("mobx-state-tree").IType<number, number, number>;
45
- sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
46
- grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
41
+ blurEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
42
+ blurRadius: import("mobx-state-tree").IType<number | undefined, number, number>;
43
+ brightnessEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
44
+ brightness: import("mobx-state-tree").IType<number | undefined, number, number>;
45
+ sepiaEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
46
+ grayscaleEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
47
47
  filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
48
- intensity: import("mobx-state-tree").IType<number, number, number>;
48
+ intensity: import("mobx-state-tree").IType<number | undefined, number, number>;
49
49
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
50
- shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
51
- shadowBlur: import("mobx-state-tree").IType<number, number, number>;
52
- shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
53
- shadowOffsetY: import("mobx-state-tree").IType<number, number, number>;
54
- shadowColor: import("mobx-state-tree").IType<string, string, string>;
55
- shadowOpacity: import("mobx-state-tree").IType<number, number, number>;
56
- visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
57
- draggable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
58
- resizable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
59
- selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
60
- contentEditable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
61
- styleEditable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
62
- alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
63
- showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
50
+ shadowEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
51
+ shadowBlur: import("mobx-state-tree").IType<number | undefined, number, number>;
52
+ shadowOffsetX: import("mobx-state-tree").IType<number | undefined, number, number>;
53
+ shadowOffsetY: import("mobx-state-tree").IType<number | undefined, number, number>;
54
+ shadowColor: import("mobx-state-tree").IType<string | undefined, string, string>;
55
+ shadowOpacity: import("mobx-state-tree").IType<number | undefined, number, number>;
56
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
57
+ draggable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
58
+ resizable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
59
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
60
+ contentEditable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
61
+ styleEditable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
62
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
63
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
64
64
  }, {
65
- readonly locked: boolean;
66
65
  readonly page: any;
67
66
  readonly store: any;
68
67
  readonly top: import("mobx-state-tree").ModelInstanceTypeProps<{
69
68
  id: import("mobx-state-tree").ISimpleType<string>;
70
- type: import("mobx-state-tree").IType<string, string, string>;
71
- name: import("mobx-state-tree").IType<string, string, string>;
72
- opacity: import("mobx-state-tree").IType<number, number, number>;
69
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
70
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
71
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
73
72
  custom: import("mobx-state-tree").IType<any, any, any>;
74
- visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
75
- selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
76
- removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
77
- alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
78
- showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
73
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
74
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
75
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
76
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
77
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
79
78
  }> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
80
79
  id: import("mobx-state-tree").ISimpleType<string>;
81
- type: import("mobx-state-tree").IType<string, string, string>;
82
- name: import("mobx-state-tree").IType<string, string, string>;
83
- opacity: import("mobx-state-tree").IType<number, number, number>;
80
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
81
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
82
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
84
83
  custom: import("mobx-state-tree").IType<any, any, any>;
85
- visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
86
- selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
87
- removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
88
- alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
89
- showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
84
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
85
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
86
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
87
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
88
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
90
89
  }, {}, import("mobx-state-tree").ModelCreationType<{
90
+ id: string;
91
+ type: string | undefined;
92
+ name: string | undefined;
93
+ opacity: number | undefined;
94
+ custom: any;
95
+ visible: boolean | undefined;
96
+ selectable: boolean | undefined;
97
+ removable: boolean | undefined;
98
+ alwaysOnTop: boolean | undefined;
99
+ showInExport: boolean | undefined;
100
+ }>, import("mobx-state-tree").ModelSnapshotType<{
101
+ id: import("mobx-state-tree").ISimpleType<string>;
102
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
103
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
104
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
105
+ custom: import("mobx-state-tree").IType<any, any, any>;
106
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
107
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
108
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
109
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
110
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
111
+ }>>>;
112
+ readonly parent: any;
113
+ readonly zIndex: any;
114
+ } & {
115
+ toJSON(): {
91
116
  id: string;
92
117
  type: string;
93
118
  name: string;
@@ -98,14 +123,10 @@ export declare const Shape: import("mobx-state-tree").IModelType<{
98
123
  removable: boolean;
99
124
  alwaysOnTop: boolean;
100
125
  showInExport: boolean;
101
- }>, {}>>;
102
- readonly parent: any;
103
- readonly zIndex: any;
104
- } & {
105
- toJSON(): {};
126
+ };
106
127
  } & {
107
128
  clone(attrs?: any, { skipSelect }?: {
108
- skipSelect?: boolean;
129
+ skipSelect?: boolean | undefined;
109
130
  }): import("./node-model.js").NodeType;
110
131
  set(attrs: any): void;
111
132
  moveUp(): void;
@@ -115,30 +136,33 @@ export declare const Shape: import("mobx-state-tree").IModelType<{
115
136
  setZIndex(zIndex: number): void;
116
137
  beforeDestroy(): void;
117
138
  } & {
118
- readonly a: {
119
- x: number;
120
- y: number;
121
- width: number;
122
- height: number;
123
- rotation: number;
124
- opacity: number;
125
- color: any;
126
- fontSize: any;
127
- };
139
+ readonly locked: boolean;
140
+ readonly a: Record<string, any>;
128
141
  animated(attr: any): any;
129
142
  } & {
130
143
  setAnimation(type: any, attrs: any): void;
131
144
  setFilter(type: any, value: any): void;
132
145
  }, import("mobx-state-tree").ModelCreationType<{
133
146
  id: string;
134
- type: string;
135
- name: string;
136
- opacity: number;
147
+ type: string | undefined;
148
+ name: string | undefined;
149
+ opacity: number | undefined;
137
150
  custom: any;
138
- visible: boolean;
139
- selectable: boolean;
140
- removable: boolean;
141
- alwaysOnTop: boolean;
142
- showInExport: boolean;
143
- }>, {}>;
151
+ visible: boolean | undefined;
152
+ selectable: boolean | undefined;
153
+ removable: boolean | undefined;
154
+ alwaysOnTop: boolean | undefined;
155
+ showInExport: boolean | undefined;
156
+ }>, import("mobx-state-tree").ModelSnapshotType<{
157
+ id: import("mobx-state-tree").ISimpleType<string>;
158
+ type: import("mobx-state-tree").IType<string | undefined, string, string>;
159
+ name: import("mobx-state-tree").IType<string | undefined, string, string>;
160
+ opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
161
+ custom: import("mobx-state-tree").IType<any, any, any>;
162
+ visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
163
+ selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
164
+ removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
165
+ alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
166
+ showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
167
+ }>>;
144
168
  export type ShapeType = Instance<typeof Shape>;
@@ -1 +1 @@
1
- import{types as t}from"mobx-state-tree";import{animate as e}from"../utils/animations.js";import{observable as i,action as n}from"mobx";import{Node as o}from"./node-model.js";export const Animation=t.model("Animation",{delay:0,duration:500,enabled:!0,type:t.enumeration("Type",["enter","exit","loop"]),name:"none",data:t.frozen({})});export const getDiff=(t,e)=>{const i={};for(const n in e){if("number"==typeof t[n]&&"number"==typeof e[n]){const o=e[n]-t[n];0!==o&&(i[n]=o)}}return i};export const ShapeFilter=t.model("ShapeFilter",{intensity:1});export const INDEPENDENT_FILTERS=["temperature","contrast","highlights","shadows","white","black","saturation","vibrance"];export const Shape=o.named("Shape").props({x:0,y:0,width:100,height:100,rotation:0,opacity:1,animations:t.array(Animation),blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,filters:t.map(ShapeFilter),shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,visible:!0,draggable:!0,resizable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot(t=>{const e=Object.assign(Object.assign({},t),{x:t.x||0,y:t.y||0,filters:Array.isArray(t.filters)?{}:t.filters});return"width"in t&&(e.width=e.width||1),"height"in t&&(e.height=e.height||1),t.locked&&(e.draggable=!1,e.contentEditable=!1,e.styleEditable=!1,e.resizable=!1,e.removable=!1),e}).views(t=>{const o=i({x:t.x,y:t.y,width:t.width,height:t.height,rotation:t.rotation,opacity:t.opacity,color:t.color,fontSize:t.fontSize}),a=n(t=>{Object.assign(o,t)}),r=n(t=>{for(const e in t){"number"==typeof o[e]&&(o[e]=o[e]+t[e])}});return{get a(){const{currentTime:i}=t.store;if(a({x:t.x,y:t.y,width:t.width,height:t.height,rotation:t.rotation,opacity:t.opacity,color:t.color,fontSize:t.fontSize,cropX:t.cropX,cropY:t.cropY,cropWidth:t.cropWidth,cropHeight:t.cropHeight}),0===i){return o}const n=i-t.page.startTime;if(n>t.page.duration){return o}if(n<0){return o}const s=t.store.animatedElementsIds;if(s.length&&!s.includes(t.id)){return o}const l=t.animations.find(t=>"enter"===t.type),d=(null==l?void 0:l.enabled)&&n<l.delay;d&&a({opacity:0});const c=(null==l?void 0:l.enabled)&&n>=l.delay&&n<=l.delay+l.duration;if(c){const i=n-l.delay,o=e({element:t,animation:l,dTime:i}),a=getDiff(t,o);r(a)}const p=t.animations.find(t=>"exit"===t.type);if(!d&&!c&&(null==p?void 0:p.enabled)&&n>=t.page.duration-p.duration-p.delay&&n<=t.page.duration-p.delay){const i=n-(t.page.duration-p.duration-p.delay),o=e({element:t,animation:p,dTime:i}),a=getDiff(t,o);r(a)}(null==p?void 0:p.enabled)&&n>=t.page.duration-p.delay&&a({opacity:0});const h=t.animations.find(t=>"loop"===t.type);if(null==h?void 0:h.enabled){const i=e({element:t,animation:h,dTime:n}),o=getDiff(t,i);r(o)}return o},animated:e=>t.a[e]}}).actions(t=>({setAnimation(e,i){const n=t.animations.find(t=>t.type===e);n?Object.assign(n,i):t.animations.push(Object.assign({type:e},i))},setFilter(e,i){INDEPENDENT_FILTERS.includes(e)||t.filters.forEach((e,i)=>{INDEPENDENT_FILTERS.includes(i.toString())||t.filters.delete(i.toString())}),null==i?t.filters.delete(e):t.filters.set(e,{intensity:i})}}));
1
+ import{types as e}from"mobx-state-tree";import{animate as t}from"../utils/animations.js";import{observable as n,action as i}from"mobx";import{Node as o}from"./node-model.js";export const Animation=e.model("Animation",{delay:0,duration:500,enabled:!0,type:e.enumeration("Type",["enter","exit","loop"]),name:"none",data:e.frozen({})});export const getDiff=(e,t)=>{const n={};for(const i in t){if("number"==typeof e[i]&&"number"==typeof t[i]){const o=t[i]-e[i];0!==o&&(n[i]=o)}}return n};export const ShapeFilter=e.model("ShapeFilter",{intensity:1});export const INDEPENDENT_FILTERS=["temperature","contrast","highlights","shadows","white","black","saturation","vibrance"];export const Shape=o.named("Shape").props({x:0,y:0,width:100,height:100,rotation:0,opacity:1,animations:e.array(Animation),blurEnabled:!1,blurRadius:10,brightnessEnabled:!1,brightness:0,sepiaEnabled:!1,grayscaleEnabled:!1,filters:e.map(ShapeFilter),shadowEnabled:!1,shadowBlur:5,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"black",shadowOpacity:1,visible:!0,draggable:!0,resizable:!0,selectable:!0,contentEditable:!0,styleEditable:!0,alwaysOnTop:!1,showInExport:!0}).preProcessSnapshot(e=>{const t=Object.assign(Object.assign({},e),{x:"x"in e&&e.x||0,y:"y"in e&&e.y||0,filters:"filters"in e?Array.isArray(e.filters)?{}:e.filters:void 0});return"width"in e&&(t.width=t.width||1),"height"in e&&(t.height=t.height||1),"locked"in e&&e.locked&&(t.draggable=!1,t.contentEditable=!1,t.styleEditable=!1,t.resizable=!1,t.removable=!1),t}).views(e=>{const o=["x","y","width","height","rotation","opacity","color","fontSize","cropX","cropY","cropWidth","cropHeight"],a=e,r={};for(const t of o){t in e&&(r[t]=a[t])}const s=n(r),l=i(e=>{for(const t in e){s[t]=e[t]}}),d=i(e=>{Object.assign(s,e)}),c=i(e=>{for(const t in e){"number"==typeof s[t]&&(s[t]=s[t]+e[t])}});return{get locked(){return!(e.draggable||e.contentEditable||e.styleEditable||e.resizable)},get a(){const{currentTime:n}=e.store,i={};for(const e in s){i[e]=a[e]}if(l(i),0===n){return s}const o=n-e.page.startTime;if(o>e.page.duration){return s}if(o<0){return s}const r=e.store.animatedElementsIds;if(r.length&&!r.includes(e.id)){return s}const p=e.animations.find(e=>"enter"===e.type),f=(null==p?void 0:p.enabled)&&o<p.delay;f&&d({opacity:0});const m=(null==p?void 0:p.enabled)&&o>=p.delay&&o<=p.delay+p.duration;if(m){const n=o-p.delay,i=t({element:e,animation:p,dTime:n}),a=getDiff(e,i);c(a)}const b=e.animations.find(e=>"exit"===e.type);if(!f&&!m&&(null==b?void 0:b.enabled)&&o>=e.page.duration-b.duration-b.delay&&o<=e.page.duration-b.delay){const n=o-(e.page.duration-b.duration-b.delay),i=t({element:e,animation:b,dTime:n}),a=getDiff(e,i);c(a)}(null==b?void 0:b.enabled)&&o>=e.page.duration-b.delay&&d({opacity:0});const h=e.animations.find(e=>"loop"===e.type);if(null==h?void 0:h.enabled){const n=t({element:e,animation:h,dTime:o}),i=getDiff(e,n);c(i)}return s},animated(e){return this.a[e]}}}).actions(e=>({setAnimation(t,n){const i=e.animations.find(e=>e.type===t);i?Object.assign(i,n):e.animations.push(Object.assign({type:t},n))},setFilter(t,n){INDEPENDENT_FILTERS.includes(t)||e.filters.forEach((t,n)=>{INDEPENDENT_FILTERS.includes(n.toString())||e.filters.delete(n.toString())}),null==n?e.filters.delete(t):e.filters.set(t,{intensity:n})}}));