@idraw/util 0.4.0-beta.4 → 0.4.0-beta.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.
@@ -2,7 +2,7 @@ export { delay, compose, throttle } from './lib/time';
2
2
  export { downloadImageFromCanvas, parseFileToBase64, pickFile, parseFileToText, downloadFileFromText } from './lib/file';
3
3
  export { toColorHexStr, toColorHexNum, isColorStr, colorNameToHex, colorToCSS, colorToLinearGradientCSS, mergeHexColorAlpha } from './lib/color';
4
4
  export { createUUID, isAssetId, createAssetId } from './lib/uuid';
5
- export { deepClone, sortDataAsserts } from './lib/data';
5
+ export { deepClone, sortDataAsserts, deepCloneElement, filterCompactData } from './lib/data';
6
6
  export { istype } from './lib/istype';
7
7
  export { loadImage, loadSVG, loadHTML } from './lib/load';
8
8
  export { is } from './lib/is';
@@ -28,3 +28,4 @@ export { matrixToAngle, matrixToRadian } from './lib/matrix';
28
28
  export { getDefaultElementDetailConfig, getDefaultElementRectDetail } from './lib/config';
29
29
  export { calcViewBoxSize } from './lib/view-box';
30
30
  export { createElement, insertElementToListByPosition, deleteElementInListByPosition, deleteElementInList, moveElementPosition, updateElementInList } from './lib/handle-element';
31
+ export { deepResizeGroupElement } from './lib/resize-element';
package/dist/esm/index.js CHANGED
@@ -2,7 +2,7 @@ export { delay, compose, throttle } from './lib/time';
2
2
  export { downloadImageFromCanvas, parseFileToBase64, pickFile, parseFileToText, downloadFileFromText } from './lib/file';
3
3
  export { toColorHexStr, toColorHexNum, isColorStr, colorNameToHex, colorToCSS, colorToLinearGradientCSS, mergeHexColorAlpha } from './lib/color';
4
4
  export { createUUID, isAssetId, createAssetId } from './lib/uuid';
5
- export { deepClone, sortDataAsserts } from './lib/data';
5
+ export { deepClone, sortDataAsserts, deepCloneElement, filterCompactData } from './lib/data';
6
6
  export { istype } from './lib/istype';
7
7
  export { loadImage, loadSVG, loadHTML } from './lib/load';
8
8
  export { is } from './lib/is';
@@ -28,3 +28,4 @@ export { matrixToAngle, matrixToRadian } from './lib/matrix';
28
28
  export { getDefaultElementDetailConfig, getDefaultElementRectDetail } from './lib/config';
29
29
  export { calcViewBoxSize } from './lib/view-box';
30
30
  export { createElement, insertElementToListByPosition, deleteElementInListByPosition, deleteElementInList, moveElementPosition, updateElementInList } from './lib/handle-element';
31
+ export { deepResizeGroupElement } from './lib/resize-element';
@@ -1,14 +1,9 @@
1
- import type { ViewScaleInfo, DefaultElementDetailConfig, ElementRectDetail, ElementCircleDetail, ElementTextDetail, ElementSVGDetail, ElementImageDetail, ElementGroupDetail } from '@idraw/types';
1
+ import type { DefaultElementDetailConfig, ElementSize, ElementRectDetail, ElementCircleDetail, ElementTextDetail, ElementSVGDetail, ElementImageDetail, ElementGroupDetail } from '@idraw/types';
2
+ export declare const defaultText = "Text Element";
2
3
  export declare function getDefaultElementDetailConfig(): DefaultElementDetailConfig;
3
4
  export declare function getDefaultElementRectDetail(): ElementRectDetail;
4
- export declare function getDefaultElementCircleDetail(opts: {
5
- radius: number;
6
- }): ElementCircleDetail;
7
- export declare function getDefaultElementTextDetail(opts?: {
8
- viewScaleInfo: ViewScaleInfo;
9
- }): ElementTextDetail;
5
+ export declare function getDefaultElementCircleDetail(): ElementCircleDetail;
6
+ export declare function getDefaultElementTextDetail(elementSize: ElementSize): ElementTextDetail;
10
7
  export declare function getDefaultElementSVGDetail(): ElementSVGDetail;
11
8
  export declare function getDefaultElementImageDetail(): ElementImageDetail;
12
- export declare function getDefaultElementGroupDetail(opts?: {
13
- viewScaleInfo: ViewScaleInfo;
14
- }): ElementGroupDetail;
9
+ export declare function getDefaultElementGroupDetail(): ElementGroupDetail;
@@ -1,3 +1,4 @@
1
+ export const defaultText = 'Text Element';
1
2
  export function getDefaultElementDetailConfig() {
2
3
  const config = {
3
4
  boxSizing: 'border-box',
@@ -27,24 +28,22 @@ export function getDefaultElementRectDetail() {
27
28
  };
28
29
  return detail;
29
30
  }
30
- export function getDefaultElementCircleDetail(opts) {
31
+ export function getDefaultElementCircleDetail() {
31
32
  const detail = {
32
33
  background: '#D9D9D9',
33
34
  radius: 0
34
35
  };
35
36
  return detail;
36
37
  }
37
- export function getDefaultElementTextDetail(opts) {
38
- var _a;
38
+ export function getDefaultElementTextDetail(elementSize) {
39
39
  const detailConfig = getDefaultElementDetailConfig();
40
- const scale = ((_a = opts === null || opts === void 0 ? void 0 : opts.viewScaleInfo) === null || _a === void 0 ? void 0 : _a.scale) || 1;
41
40
  const detail = {
42
- text: 'Text Element',
41
+ text: defaultText,
43
42
  color: detailConfig.color,
44
43
  fontFamily: detailConfig.fontFamily,
45
44
  fontWeight: detailConfig.fontWeight,
46
- lineHeight: detailConfig.fontSize * scale,
47
- fontSize: detailConfig.fontSize * scale,
45
+ lineHeight: elementSize.w / defaultText.length,
46
+ fontSize: elementSize.w / defaultText.length,
48
47
  textAlign: 'center',
49
48
  verticalAlign: 'middle'
50
49
  };
@@ -62,7 +61,7 @@ export function getDefaultElementImageDetail() {
62
61
  };
63
62
  return detail;
64
63
  }
65
- export function getDefaultElementGroupDetail(opts) {
64
+ export function getDefaultElementGroupDetail() {
66
65
  const detail = {
67
66
  children: [],
68
67
  background: '#D9D9D9',
@@ -1,5 +1,9 @@
1
- import type { Data } from '@idraw/types';
2
- export declare function deepClone<T extends any = any>(target: T): T;
1
+ import type { Data, Element, LoadItemMap } from '@idraw/types';
2
+ export declare function deepClone<T = any>(target: T): T;
3
+ export declare function deepCloneElement<T extends Element = Element>(element: T): T;
3
4
  export declare function sortDataAsserts(data: Data, opts?: {
4
5
  clone?: boolean;
5
6
  }): Data;
7
+ export declare function filterCompactData(data: Data, opts?: {
8
+ loadItemMap?: LoadItemMap;
9
+ }): Data<Record<string, any>>;
@@ -1,4 +1,4 @@
1
- import { createAssetId } from './uuid';
1
+ import { createAssetId, createUUID, isAssetId } from './uuid';
2
2
  export function deepClone(target) {
3
3
  function _clone(t) {
4
4
  const type = is(t);
@@ -27,6 +27,19 @@ export function deepClone(target) {
27
27
  }
28
28
  return _clone(target);
29
29
  }
30
+ export function deepCloneElement(element) {
31
+ const elem = deepClone(element);
32
+ const _resetUUID = (e) => {
33
+ e.uuid = createUUID();
34
+ if (e.type === 'group' && e.detail.children) {
35
+ e.detail.children.forEach((child) => {
36
+ _resetUUID(child);
37
+ });
38
+ }
39
+ };
40
+ _resetUUID(elem);
41
+ return elem;
42
+ }
30
43
  function is(target) {
31
44
  return Object.prototype.toString
32
45
  .call(target)
@@ -67,8 +80,84 @@ export function sortDataAsserts(data, opts) {
67
80
  const html = elem.detail.html;
68
81
  const assetUUID = createAssetId(html);
69
82
  if (!assets[assetUUID]) {
83
+ assets[assetUUID] = {
84
+ type: 'html',
85
+ value: html
86
+ };
87
+ }
88
+ elem.detail.html = assetUUID;
89
+ }
90
+ else if (elem.type === 'group' && Array.isArray(elem.detail.children)) {
91
+ const groupAssets = elem.detail.assets || {};
92
+ Object.keys(groupAssets).forEach((assetId) => {
93
+ if (!assets[assetId]) {
94
+ assets[assetId] = groupAssets[assetId];
95
+ }
96
+ });
97
+ delete elem.detail.assets;
98
+ _scanElements(elem.detail.children);
99
+ }
100
+ });
101
+ };
102
+ _scanElements(sortedData.elements);
103
+ sortedData.assets = assets;
104
+ return sortedData;
105
+ }
106
+ export function filterCompactData(data, opts) {
107
+ const assets = data.assets || {};
108
+ const sortedData = deepClone(data);
109
+ const loadItemMap = (opts === null || opts === void 0 ? void 0 : opts.loadItemMap) || {};
110
+ const _scanElements = (elems) => {
111
+ elems.forEach((elem) => {
112
+ var _a, _b, _c;
113
+ if (elem.type === 'image' && elem.detail.src) {
114
+ const src = elem.detail.src;
115
+ if (isAssetId(src) && !assets[src] && loadItemMap[src] && typeof ((_a = loadItemMap[src]) === null || _a === void 0 ? void 0 : _a.source) === 'string') {
116
+ assets[src] = {
117
+ type: 'image',
118
+ value: loadItemMap[src].source
119
+ };
120
+ }
121
+ else {
122
+ const assetUUID = createAssetId(src);
123
+ if (!assets[assetUUID]) {
124
+ assets[assetUUID] = {
125
+ type: 'image',
126
+ value: src
127
+ };
128
+ }
129
+ elem.detail.src = assetUUID;
130
+ }
131
+ }
132
+ else if (elem.type === 'svg') {
133
+ const svg = elem.detail.svg;
134
+ const assetUUID = createAssetId(svg);
135
+ if (isAssetId(svg) && !assets[svg] && loadItemMap[svg] && typeof ((_b = loadItemMap[svg]) === null || _b === void 0 ? void 0 : _b.source) === 'string') {
136
+ assets[svg] = {
137
+ type: 'svg',
138
+ value: loadItemMap[svg].source
139
+ };
140
+ }
141
+ else if (!assets[assetUUID]) {
70
142
  assets[assetUUID] = {
71
143
  type: 'svg',
144
+ value: svg
145
+ };
146
+ }
147
+ elem.detail.svg = assetUUID;
148
+ }
149
+ else if (elem.type === 'html') {
150
+ const html = elem.detail.html;
151
+ const assetUUID = createAssetId(html);
152
+ if (isAssetId(html) && !assets[html] && loadItemMap[html] && typeof ((_c = loadItemMap[html]) === null || _c === void 0 ? void 0 : _c.source) === 'string') {
153
+ assets[html] = {
154
+ type: 'html',
155
+ value: loadItemMap[html].source
156
+ };
157
+ }
158
+ else if (!assets[assetUUID]) {
159
+ assets[assetUUID] = {
160
+ type: 'html',
72
161
  value: html
73
162
  };
74
163
  }
@@ -4,10 +4,11 @@ export declare function downloadImageFromCanvas(canvas: HTMLCanvasElement, opts:
4
4
  type: ImageType;
5
5
  }): void;
6
6
  export declare function pickFile(opts: {
7
+ accept?: string;
7
8
  success: (data: {
8
9
  file: File;
9
10
  }) => void;
10
- error?: (err: ErrorEvent) => void;
11
+ error?: (err: Error | any) => void;
11
12
  }): void;
12
13
  export declare function parseFileToBase64(file: File): Promise<string | ArrayBuffer>;
13
14
  export declare function parseFileToText(file: File): Promise<string | ArrayBuffer>;
@@ -8,9 +8,12 @@ export function downloadImageFromCanvas(canvas, opts) {
8
8
  downloadLink = null;
9
9
  }
10
10
  export function pickFile(opts) {
11
- const { success, error } = opts;
11
+ const { accept, success, error } = opts;
12
12
  let input = document.createElement('input');
13
13
  input.type = 'file';
14
+ if (accept) {
15
+ input.accept = accept;
16
+ }
14
17
  input.addEventListener('change', function () {
15
18
  var _a;
16
19
  const file = (_a = input.files) === null || _a === void 0 ? void 0 : _a[0];
@@ -1,10 +1,10 @@
1
1
  import { createUUID } from './uuid';
2
- import { getDefaultElementDetailConfig, getDefaultElementRectDetail, getDefaultElementCircleDetail, getDefaultElementTextDetail, getDefaultElementSVGDetail, getDefaultElementImageDetail, getDefaultElementGroupDetail } from './config';
2
+ import { defaultText, getDefaultElementRectDetail, getDefaultElementCircleDetail, getDefaultElementTextDetail, getDefaultElementSVGDetail, getDefaultElementImageDetail, getDefaultElementGroupDetail } from './config';
3
3
  import { istype } from './istype';
4
4
  import { findElementFromListByPosition, getElementPositionFromList } from './element';
5
+ import { deepResizeGroupElement } from './resize-element';
5
6
  const defaultViewWidth = 200;
6
7
  const defaultViewHeight = 200;
7
- const defaultDetail = getDefaultElementDetailConfig();
8
8
  function createElementSize(type, opts) {
9
9
  let x = 0;
10
10
  let y = 0;
@@ -14,29 +14,26 @@ function createElementSize(type, opts) {
14
14
  const { viewScaleInfo, viewSizeInfo } = opts;
15
15
  const { scale, offsetLeft, offsetTop } = viewScaleInfo;
16
16
  const { width, height } = viewSizeInfo;
17
- if (type === 'text') {
18
- const textDetail = getDefaultElementTextDetail();
19
- w = defaultDetail.fontSize * scale * textDetail.text.length;
20
- h = defaultDetail.fontSize * scale * 2;
17
+ const limitViewWidth = width / 4;
18
+ const limitViewHeight = height / 4;
19
+ if (defaultViewWidth >= limitViewWidth) {
20
+ w = limitViewWidth / scale;
21
21
  }
22
22
  else {
23
- const limitViewWidth = width / 4;
24
- const limitViewHeight = height / 4;
25
- if (defaultViewWidth >= limitViewWidth) {
26
- w = limitViewWidth / scale;
27
- }
28
- else {
29
- w = defaultViewWidth / scale;
30
- }
31
- if (defaultViewHeight >= limitViewHeight) {
32
- h = limitViewHeight / scale;
33
- }
34
- else {
35
- h = defaultViewHeight / scale;
36
- }
37
- if (['circle', 'svg', 'image'].includes(type)) {
38
- w = h = Math.max(w, h);
39
- }
23
+ w = defaultViewWidth / scale;
24
+ }
25
+ if (defaultViewHeight >= limitViewHeight) {
26
+ h = limitViewHeight / scale;
27
+ }
28
+ else {
29
+ h = defaultViewHeight / scale;
30
+ }
31
+ if (['circle', 'svg', 'image'].includes(type)) {
32
+ w = h = Math.max(w, h);
33
+ }
34
+ else if (type === 'text') {
35
+ const fontSize = w / defaultText.length;
36
+ h = fontSize * 2;
40
37
  }
41
38
  x = (0 - offsetLeft + width / 2 - (w * scale) / 2) / scale;
42
39
  y = (0 - offsetTop + height / 2 - (h * scale) / 2) / scale;
@@ -50,18 +47,16 @@ function createElementSize(type, opts) {
50
47
  return elemSize;
51
48
  }
52
49
  export function createElement(type, baseElem, opts) {
53
- const elemSize = createElementSize(type, opts);
50
+ const elementSize = createElementSize(type, opts);
54
51
  let detail = {};
55
52
  if (type === 'rect') {
56
53
  detail = getDefaultElementRectDetail();
57
54
  }
58
55
  else if (type === 'circle') {
59
- detail = getDefaultElementCircleDetail({
60
- radius: elemSize.w
61
- });
56
+ detail = getDefaultElementCircleDetail();
62
57
  }
63
58
  else if (type === 'text') {
64
- detail = getDefaultElementTextDetail(opts);
59
+ detail = getDefaultElementTextDetail(elementSize);
65
60
  }
66
61
  else if (type === 'svg') {
67
62
  detail = getDefaultElementSVGDetail();
@@ -72,7 +67,7 @@ export function createElement(type, baseElem, opts) {
72
67
  else if (type === 'group') {
73
68
  detail = getDefaultElementGroupDetail();
74
69
  }
75
- const elem = Object.assign(Object.assign(Object.assign({}, elemSize), baseElem), { uuid: createUUID(), type, detail: Object.assign(Object.assign({}, detail), (baseElem.detail || {})) });
70
+ const elem = Object.assign(Object.assign(Object.assign({}, elementSize), baseElem), { uuid: createUUID(), type, detail: Object.assign(Object.assign({}, detail), (baseElem.detail || {})) });
76
71
  return elem;
77
72
  }
78
73
  export function insertElementToListByPosition(element, position, list) {
@@ -209,17 +204,25 @@ function mergeElement(originElem, updateContent) {
209
204
  return originElem;
210
205
  }
211
206
  export function updateElementInList(uuid, updateContent, elements) {
212
- var _a;
207
+ var _a, _b;
213
208
  let targetElement = null;
214
209
  for (let i = 0; i < elements.length; i++) {
215
210
  const elem = elements[i];
216
211
  if (elem.uuid === uuid) {
212
+ if (elem.type === 'group' && ((_a = elem.operations) === null || _a === void 0 ? void 0 : _a.deepResize) === true) {
213
+ if ((updateContent.w && updateContent.w > 0) || (updateContent.h && updateContent.h > 0)) {
214
+ deepResizeGroupElement(elem, {
215
+ w: updateContent.w,
216
+ h: updateContent.h
217
+ });
218
+ }
219
+ }
217
220
  mergeElement(elem, updateContent);
218
221
  targetElement = elem;
219
222
  break;
220
223
  }
221
224
  else if (elem.type === 'group') {
222
- targetElement = updateElementInList(uuid, updateContent, ((_a = elem === null || elem === void 0 ? void 0 : elem.detail) === null || _a === void 0 ? void 0 : _a.children) || []);
225
+ targetElement = updateElementInList(uuid, updateContent, ((_b = elem === null || elem === void 0 ? void 0 : elem.detail) === null || _b === void 0 ? void 0 : _b.children) || []);
223
226
  }
224
227
  }
225
228
  return targetElement;
@@ -0,0 +1,2 @@
1
+ import type { Element, ElementSize } from '@idraw/types';
2
+ export declare function deepResizeGroupElement(elem: Element<'group'>, size: Pick<Partial<ElementSize>, 'w' | 'h'>): Element<'group'>;
@@ -0,0 +1,101 @@
1
+ import { formatNumber } from './number';
2
+ const doNum = (n) => {
3
+ return formatNumber(n, { decimalPlaces: 4 });
4
+ };
5
+ function resizeElementBaseDetail(elem, opts) {
6
+ const { detail } = elem;
7
+ const { xRatio, yRatio, maxRatio } = opts;
8
+ const middleRatio = (xRatio + yRatio) / 2;
9
+ const { borderWidth, borderRadius, borderDash, shadowOffsetX, shadowOffsetY, shadowBlur } = detail;
10
+ if (typeof borderWidth === 'number') {
11
+ detail.borderWidth = doNum(borderWidth * middleRatio);
12
+ }
13
+ else if (Array.isArray(detail.borderWidth)) {
14
+ const bw = borderWidth;
15
+ detail.borderWidth = [doNum(bw[0] * yRatio), doNum(bw[1] * xRatio), doNum(bw[2] * yRatio), doNum(bw[3] * xRatio)];
16
+ }
17
+ if (typeof borderRadius === 'number') {
18
+ detail.borderRadius = doNum(borderRadius * middleRatio);
19
+ }
20
+ else if (Array.isArray(detail.borderRadius)) {
21
+ const br = borderRadius;
22
+ detail.borderRadius = [br[0] * xRatio, br[1] * xRatio, br[2] * yRatio, br[3] * yRatio];
23
+ }
24
+ if (Array.isArray(borderDash)) {
25
+ borderDash.forEach((dash, i) => {
26
+ detail.borderDash[i] = doNum(dash * maxRatio);
27
+ });
28
+ }
29
+ if (typeof shadowOffsetX === 'number') {
30
+ detail.shadowOffsetX = doNum(shadowOffsetX * maxRatio);
31
+ }
32
+ if (typeof shadowOffsetY === 'number') {
33
+ detail.shadowOffsetX = doNum(shadowOffsetY * maxRatio);
34
+ }
35
+ if (typeof shadowBlur === 'number') {
36
+ detail.shadowOffsetX = doNum(shadowBlur * maxRatio);
37
+ }
38
+ }
39
+ function resizeElementBase(elem, opts) {
40
+ const { xRatio, yRatio } = opts;
41
+ const { x, y, w, h } = elem;
42
+ elem.x = doNum(x * xRatio);
43
+ elem.y = doNum(y * yRatio);
44
+ elem.w = doNum(w * xRatio);
45
+ elem.h = doNum(h * yRatio);
46
+ resizeElementBaseDetail(elem, opts);
47
+ }
48
+ function resizeTextElementDetail(elem, opts) {
49
+ const { minRatio, maxRatio } = opts;
50
+ const { fontSize, lineHeight } = elem.detail;
51
+ const ratio = (minRatio + maxRatio) / 2;
52
+ if (fontSize && fontSize > 0) {
53
+ elem.detail.fontSize = doNum(fontSize * ratio);
54
+ }
55
+ if (lineHeight && lineHeight > 0) {
56
+ elem.detail.lineHeight = doNum(lineHeight * ratio);
57
+ }
58
+ }
59
+ function resizeElement(elem, opts) {
60
+ const { type } = elem;
61
+ resizeElementBase(elem, opts);
62
+ if (type === 'circle') {
63
+ }
64
+ else if (type === 'text') {
65
+ resizeTextElementDetail(elem, opts);
66
+ }
67
+ else if (type === 'image') {
68
+ }
69
+ else if (type === 'svg') {
70
+ }
71
+ else if (type === 'html') {
72
+ }
73
+ else if (type === 'path') {
74
+ }
75
+ else if (type === 'group' && Array.isArray(elem.detail.children)) {
76
+ elem.detail.children.forEach((child) => {
77
+ resizeElement(child, opts);
78
+ });
79
+ }
80
+ }
81
+ export function deepResizeGroupElement(elem, size) {
82
+ const resizeW = size.w && size.w > 0 ? size.w : elem.w;
83
+ const resizeH = size.h && size.h > 0 ? size.h : elem.h;
84
+ const xRatio = resizeW / elem.w;
85
+ const yRatio = resizeH / elem.h;
86
+ if (xRatio === yRatio && xRatio === 1) {
87
+ return elem;
88
+ }
89
+ const minRatio = Math.min(xRatio, yRatio);
90
+ const maxRatio = Math.max(xRatio, yRatio);
91
+ elem.w = resizeW;
92
+ elem.h = resizeH;
93
+ const opts = { xRatio, yRatio, minRatio, maxRatio };
94
+ if (elem.type === 'group' && Array.isArray(elem.detail.children)) {
95
+ elem.detail.children.forEach((child) => {
96
+ resizeElement(child, opts);
97
+ });
98
+ }
99
+ resizeElementBaseDetail(elem, opts);
100
+ return elem;
101
+ }
@@ -5,7 +5,7 @@ export function calcViewBoxSize(viewElem, opts) {
5
5
  const { scale } = viewScaleInfo;
6
6
  let { borderRadius } = viewElem.detail;
7
7
  const { boxSizing = defaultElemConfig.boxSizing, borderWidth } = viewElem.detail;
8
- if (typeof borderWidth !== 'number') {
8
+ if (Array.isArray(borderWidth)) {
9
9
  borderRadius = 0;
10
10
  }
11
11
  let { x, y, w, h } = viewElem;
@@ -66,9 +66,12 @@ var __privateSet = (obj, member, value, setter) => {
66
66
  downloadLink = null;
67
67
  }
68
68
  function pickFile(opts) {
69
- const { success, error } = opts;
69
+ const { accept, success, error } = opts;
70
70
  let input = document.createElement("input");
71
71
  input.type = "file";
72
+ if (accept) {
73
+ input.accept = accept;
74
+ }
72
75
  input.addEventListener("change", function() {
73
76
  var _a;
74
77
  const file = (_a = input.files) == null ? void 0 : _a[0];
@@ -422,6 +425,19 @@ var __privateSet = (obj, member, value, setter) => {
422
425
  }
423
426
  return _clone(target);
424
427
  }
428
+ function deepCloneElement(element) {
429
+ const elem = deepClone(element);
430
+ const _resetUUID = (e) => {
431
+ e.uuid = createUUID();
432
+ if (e.type === "group" && e.detail.children) {
433
+ e.detail.children.forEach((child) => {
434
+ _resetUUID(child);
435
+ });
436
+ }
437
+ };
438
+ _resetUUID(elem);
439
+ return elem;
440
+ }
425
441
  function is$1(target) {
426
442
  return Object.prototype.toString.call(target).replace(/[\]|\[]{1,1}/gi, "").split(" ")[1];
427
443
  }
@@ -458,7 +474,77 @@ var __privateSet = (obj, member, value, setter) => {
458
474
  const assetUUID = createAssetId(html2);
459
475
  if (!assets[assetUUID]) {
460
476
  assets[assetUUID] = {
477
+ type: "html",
478
+ value: html2
479
+ };
480
+ }
481
+ elem.detail.html = assetUUID;
482
+ } else if (elem.type === "group" && Array.isArray(elem.detail.children)) {
483
+ const groupAssets = elem.detail.assets || {};
484
+ Object.keys(groupAssets).forEach((assetId) => {
485
+ if (!assets[assetId]) {
486
+ assets[assetId] = groupAssets[assetId];
487
+ }
488
+ });
489
+ delete elem.detail.assets;
490
+ _scanElements(elem.detail.children);
491
+ }
492
+ });
493
+ };
494
+ _scanElements(sortedData.elements);
495
+ sortedData.assets = assets;
496
+ return sortedData;
497
+ }
498
+ function filterCompactData(data, opts) {
499
+ const assets = data.assets || {};
500
+ const sortedData = deepClone(data);
501
+ const loadItemMap = (opts == null ? void 0 : opts.loadItemMap) || {};
502
+ const _scanElements = (elems) => {
503
+ elems.forEach((elem) => {
504
+ var _a, _b, _c;
505
+ if (elem.type === "image" && elem.detail.src) {
506
+ const src = elem.detail.src;
507
+ if (isAssetId(src) && !assets[src] && loadItemMap[src] && typeof ((_a = loadItemMap[src]) == null ? void 0 : _a.source) === "string") {
508
+ assets[src] = {
509
+ type: "image",
510
+ value: loadItemMap[src].source
511
+ };
512
+ } else {
513
+ const assetUUID = createAssetId(src);
514
+ if (!assets[assetUUID]) {
515
+ assets[assetUUID] = {
516
+ type: "image",
517
+ value: src
518
+ };
519
+ }
520
+ elem.detail.src = assetUUID;
521
+ }
522
+ } else if (elem.type === "svg") {
523
+ const svg2 = elem.detail.svg;
524
+ const assetUUID = createAssetId(svg2);
525
+ if (isAssetId(svg2) && !assets[svg2] && loadItemMap[svg2] && typeof ((_b = loadItemMap[svg2]) == null ? void 0 : _b.source) === "string") {
526
+ assets[svg2] = {
461
527
  type: "svg",
528
+ value: loadItemMap[svg2].source
529
+ };
530
+ } else if (!assets[assetUUID]) {
531
+ assets[assetUUID] = {
532
+ type: "svg",
533
+ value: svg2
534
+ };
535
+ }
536
+ elem.detail.svg = assetUUID;
537
+ } else if (elem.type === "html") {
538
+ const html2 = elem.detail.html;
539
+ const assetUUID = createAssetId(html2);
540
+ if (isAssetId(html2) && !assets[html2] && loadItemMap[html2] && typeof ((_c = loadItemMap[html2]) == null ? void 0 : _c.source) === "string") {
541
+ assets[html2] = {
542
+ type: "html",
543
+ value: loadItemMap[html2].source
544
+ };
545
+ } else if (!assets[assetUUID]) {
546
+ assets[assetUUID] = {
547
+ type: "html",
462
548
  value: html2
463
549
  };
464
550
  }
@@ -2441,6 +2527,7 @@ var __privateSet = (obj, member, value, setter) => {
2441
2527
  }
2442
2528
  return radian;
2443
2529
  }
2530
+ const defaultText = "Text Element";
2444
2531
  function getDefaultElementDetailConfig() {
2445
2532
  const config = {
2446
2533
  boxSizing: "border-box",
@@ -2470,24 +2557,22 @@ var __privateSet = (obj, member, value, setter) => {
2470
2557
  };
2471
2558
  return detail;
2472
2559
  }
2473
- function getDefaultElementCircleDetail(opts) {
2560
+ function getDefaultElementCircleDetail() {
2474
2561
  const detail = {
2475
2562
  background: "#D9D9D9",
2476
2563
  radius: 0
2477
2564
  };
2478
2565
  return detail;
2479
2566
  }
2480
- function getDefaultElementTextDetail(opts) {
2481
- var _a;
2567
+ function getDefaultElementTextDetail(elementSize) {
2482
2568
  const detailConfig = getDefaultElementDetailConfig();
2483
- const scale = ((_a = opts == null ? void 0 : opts.viewScaleInfo) == null ? void 0 : _a.scale) || 1;
2484
2569
  const detail = {
2485
- text: "Text Element",
2570
+ text: defaultText,
2486
2571
  color: detailConfig.color,
2487
2572
  fontFamily: detailConfig.fontFamily,
2488
2573
  fontWeight: detailConfig.fontWeight,
2489
- lineHeight: detailConfig.fontSize * scale,
2490
- fontSize: detailConfig.fontSize * scale,
2574
+ lineHeight: elementSize.w / defaultText.length,
2575
+ fontSize: elementSize.w / defaultText.length,
2491
2576
  textAlign: "center",
2492
2577
  verticalAlign: "middle"
2493
2578
  };
@@ -2505,7 +2590,7 @@ var __privateSet = (obj, member, value, setter) => {
2505
2590
  };
2506
2591
  return detail;
2507
2592
  }
2508
- function getDefaultElementGroupDetail(opts) {
2593
+ function getDefaultElementGroupDetail() {
2509
2594
  const detail = {
2510
2595
  children: [],
2511
2596
  background: "#D9D9D9",
@@ -2519,7 +2604,7 @@ var __privateSet = (obj, member, value, setter) => {
2519
2604
  const { scale } = viewScaleInfo;
2520
2605
  let { borderRadius: borderRadius2 } = viewElem.detail;
2521
2606
  const { boxSizing = defaultElemConfig.boxSizing, borderWidth: borderWidth2 } = viewElem.detail;
2522
- if (typeof borderWidth2 !== "number") {
2607
+ if (Array.isArray(borderWidth2)) {
2523
2608
  borderRadius2 = 0;
2524
2609
  }
2525
2610
  let { x: x2, y: y2, w: w2, h: h2 } = viewElem;
@@ -2563,9 +2648,105 @@ var __privateSet = (obj, member, value, setter) => {
2563
2648
  radiusList
2564
2649
  };
2565
2650
  }
2651
+ const doNum = (n) => {
2652
+ return formatNumber(n, { decimalPlaces: 4 });
2653
+ };
2654
+ function resizeElementBaseDetail(elem, opts) {
2655
+ const { detail } = elem;
2656
+ const { xRatio, yRatio, maxRatio } = opts;
2657
+ const middleRatio = (xRatio + yRatio) / 2;
2658
+ const { borderWidth: borderWidth2, borderRadius: borderRadius2, borderDash, shadowOffsetX, shadowOffsetY, shadowBlur } = detail;
2659
+ if (typeof borderWidth2 === "number") {
2660
+ detail.borderWidth = doNum(borderWidth2 * middleRatio);
2661
+ } else if (Array.isArray(detail.borderWidth)) {
2662
+ const bw = borderWidth2;
2663
+ detail.borderWidth = [doNum(bw[0] * yRatio), doNum(bw[1] * xRatio), doNum(bw[2] * yRatio), doNum(bw[3] * xRatio)];
2664
+ }
2665
+ if (typeof borderRadius2 === "number") {
2666
+ detail.borderRadius = doNum(borderRadius2 * middleRatio);
2667
+ } else if (Array.isArray(detail.borderRadius)) {
2668
+ const br = borderRadius2;
2669
+ detail.borderRadius = [br[0] * xRatio, br[1] * xRatio, br[2] * yRatio, br[3] * yRatio];
2670
+ }
2671
+ if (Array.isArray(borderDash)) {
2672
+ borderDash.forEach((dash, i) => {
2673
+ detail.borderDash[i] = doNum(dash * maxRatio);
2674
+ });
2675
+ }
2676
+ if (typeof shadowOffsetX === "number") {
2677
+ detail.shadowOffsetX = doNum(shadowOffsetX * maxRatio);
2678
+ }
2679
+ if (typeof shadowOffsetY === "number") {
2680
+ detail.shadowOffsetX = doNum(shadowOffsetY * maxRatio);
2681
+ }
2682
+ if (typeof shadowBlur === "number") {
2683
+ detail.shadowOffsetX = doNum(shadowBlur * maxRatio);
2684
+ }
2685
+ }
2686
+ function resizeElementBase(elem, opts) {
2687
+ const { xRatio, yRatio } = opts;
2688
+ const { x: x2, y: y2, w: w2, h: h2 } = elem;
2689
+ elem.x = doNum(x2 * xRatio);
2690
+ elem.y = doNum(y2 * yRatio);
2691
+ elem.w = doNum(w2 * xRatio);
2692
+ elem.h = doNum(h2 * yRatio);
2693
+ resizeElementBaseDetail(elem, opts);
2694
+ }
2695
+ function resizeTextElementDetail(elem, opts) {
2696
+ const { minRatio, maxRatio } = opts;
2697
+ const { fontSize: fontSize2, lineHeight: lineHeight2 } = elem.detail;
2698
+ const ratio = (minRatio + maxRatio) / 2;
2699
+ if (fontSize2 && fontSize2 > 0) {
2700
+ elem.detail.fontSize = doNum(fontSize2 * ratio);
2701
+ }
2702
+ if (lineHeight2 && lineHeight2 > 0) {
2703
+ elem.detail.lineHeight = doNum(lineHeight2 * ratio);
2704
+ }
2705
+ }
2706
+ function resizeElement(elem, opts) {
2707
+ const { type } = elem;
2708
+ resizeElementBase(elem, opts);
2709
+ if (type === "circle")
2710
+ ;
2711
+ else if (type === "text") {
2712
+ resizeTextElementDetail(elem, opts);
2713
+ } else if (type === "image")
2714
+ ;
2715
+ else if (type === "svg")
2716
+ ;
2717
+ else if (type === "html")
2718
+ ;
2719
+ else if (type === "path")
2720
+ ;
2721
+ else if (type === "group" && Array.isArray(elem.detail.children)) {
2722
+ elem.detail.children.forEach((child) => {
2723
+ resizeElement(child, opts);
2724
+ });
2725
+ }
2726
+ }
2727
+ function deepResizeGroupElement(elem, size) {
2728
+ const resizeW = size.w && size.w > 0 ? size.w : elem.w;
2729
+ const resizeH = size.h && size.h > 0 ? size.h : elem.h;
2730
+ const xRatio = resizeW / elem.w;
2731
+ const yRatio = resizeH / elem.h;
2732
+ if (xRatio === yRatio && xRatio === 1) {
2733
+ return elem;
2734
+ }
2735
+ const minRatio = Math.min(xRatio, yRatio);
2736
+ const maxRatio = Math.max(xRatio, yRatio);
2737
+ elem.w = resizeW;
2738
+ elem.h = resizeH;
2739
+ const opts = { xRatio, yRatio, minRatio, maxRatio };
2740
+ if (elem.type === "group" && Array.isArray(elem.detail.children)) {
2741
+ elem.detail.children.forEach((child) => {
2742
+ resizeElement(child, opts);
2743
+ });
2744
+ }
2745
+ resizeElementBaseDetail(elem, opts);
2746
+ return elem;
2747
+ }
2566
2748
  const defaultViewWidth = 200;
2567
2749
  const defaultViewHeight = 200;
2568
- const defaultDetail = getDefaultElementDetailConfig();
2569
2750
  function createElementSize(type, opts) {
2570
2751
  let x2 = 0;
2571
2752
  let y2 = 0;
@@ -2575,26 +2756,23 @@ var __privateSet = (obj, member, value, setter) => {
2575
2756
  const { viewScaleInfo, viewSizeInfo } = opts;
2576
2757
  const { scale, offsetLeft, offsetTop } = viewScaleInfo;
2577
2758
  const { width, height } = viewSizeInfo;
2578
- if (type === "text") {
2579
- const textDetail = getDefaultElementTextDetail();
2580
- w2 = defaultDetail.fontSize * scale * textDetail.text.length;
2581
- h2 = defaultDetail.fontSize * scale * 2;
2759
+ const limitViewWidth = width / 4;
2760
+ const limitViewHeight = height / 4;
2761
+ if (defaultViewWidth >= limitViewWidth) {
2762
+ w2 = limitViewWidth / scale;
2582
2763
  } else {
2583
- const limitViewWidth = width / 4;
2584
- const limitViewHeight = height / 4;
2585
- if (defaultViewWidth >= limitViewWidth) {
2586
- w2 = limitViewWidth / scale;
2587
- } else {
2588
- w2 = defaultViewWidth / scale;
2589
- }
2590
- if (defaultViewHeight >= limitViewHeight) {
2591
- h2 = limitViewHeight / scale;
2592
- } else {
2593
- h2 = defaultViewHeight / scale;
2594
- }
2595
- if (["circle", "svg", "image"].includes(type)) {
2596
- w2 = h2 = Math.max(w2, h2);
2597
- }
2764
+ w2 = defaultViewWidth / scale;
2765
+ }
2766
+ if (defaultViewHeight >= limitViewHeight) {
2767
+ h2 = limitViewHeight / scale;
2768
+ } else {
2769
+ h2 = defaultViewHeight / scale;
2770
+ }
2771
+ if (["circle", "svg", "image"].includes(type)) {
2772
+ w2 = h2 = Math.max(w2, h2);
2773
+ } else if (type === "text") {
2774
+ const fontSize2 = w2 / defaultText.length;
2775
+ h2 = fontSize2 * 2;
2598
2776
  }
2599
2777
  x2 = (0 - offsetLeft + width / 2 - w2 * scale / 2) / scale;
2600
2778
  y2 = (0 - offsetTop + height / 2 - h2 * scale / 2) / scale;
@@ -2608,16 +2786,14 @@ var __privateSet = (obj, member, value, setter) => {
2608
2786
  return elemSize;
2609
2787
  }
2610
2788
  function createElement(type, baseElem, opts) {
2611
- const elemSize = createElementSize(type, opts);
2789
+ const elementSize = createElementSize(type, opts);
2612
2790
  let detail = {};
2613
2791
  if (type === "rect") {
2614
2792
  detail = getDefaultElementRectDetail();
2615
2793
  } else if (type === "circle") {
2616
- detail = getDefaultElementCircleDetail({
2617
- radius: elemSize.w
2618
- });
2794
+ detail = getDefaultElementCircleDetail();
2619
2795
  } else if (type === "text") {
2620
- detail = getDefaultElementTextDetail(opts);
2796
+ detail = getDefaultElementTextDetail(elementSize);
2621
2797
  } else if (type === "svg") {
2622
2798
  detail = getDefaultElementSVGDetail();
2623
2799
  } else if (type === "image") {
@@ -2626,7 +2802,7 @@ var __privateSet = (obj, member, value, setter) => {
2626
2802
  detail = getDefaultElementGroupDetail();
2627
2803
  }
2628
2804
  const elem = {
2629
- ...elemSize,
2805
+ ...elementSize,
2630
2806
  ...baseElem,
2631
2807
  uuid: createUUID(),
2632
2808
  type,
@@ -2762,16 +2938,24 @@ var __privateSet = (obj, member, value, setter) => {
2762
2938
  return originElem;
2763
2939
  }
2764
2940
  function updateElementInList(uuid, updateContent, elements) {
2765
- var _a;
2941
+ var _a, _b;
2766
2942
  let targetElement = null;
2767
2943
  for (let i = 0; i < elements.length; i++) {
2768
2944
  const elem = elements[i];
2769
2945
  if (elem.uuid === uuid) {
2946
+ if (elem.type === "group" && ((_a = elem.operations) == null ? void 0 : _a.deepResize) === true) {
2947
+ if (updateContent.w && updateContent.w > 0 || updateContent.h && updateContent.h > 0) {
2948
+ deepResizeGroupElement(elem, {
2949
+ w: updateContent.w,
2950
+ h: updateContent.h
2951
+ });
2952
+ }
2953
+ }
2770
2954
  mergeElement(elem, updateContent);
2771
2955
  targetElement = elem;
2772
2956
  break;
2773
2957
  } else if (elem.type === "group") {
2774
- targetElement = updateElementInList(uuid, updateContent, ((_a = elem == null ? void 0 : elem.detail) == null ? void 0 : _a.children) || []);
2958
+ targetElement = updateElementInList(uuid, updateContent, ((_b = elem == null ? void 0 : elem.detail) == null ? void 0 : _b.children) || []);
2775
2959
  }
2776
2960
  }
2777
2961
  return targetElement;
@@ -2809,6 +2993,8 @@ var __privateSet = (obj, member, value, setter) => {
2809
2993
  exports.createOffscreenContext2D = createOffscreenContext2D;
2810
2994
  exports.createUUID = createUUID;
2811
2995
  exports.deepClone = deepClone;
2996
+ exports.deepCloneElement = deepCloneElement;
2997
+ exports.deepResizeGroupElement = deepResizeGroupElement;
2812
2998
  exports.delay = delay;
2813
2999
  exports.deleteElementInList = deleteElementInList;
2814
3000
  exports.deleteElementInListByPosition = deleteElementInListByPosition;
@@ -2816,6 +3002,7 @@ var __privateSet = (obj, member, value, setter) => {
2816
3002
  exports.downloadImageFromCanvas = downloadImageFromCanvas;
2817
3003
  exports.equalPoint = equalPoint;
2818
3004
  exports.equalTouchPoint = equalTouchPoint;
3005
+ exports.filterCompactData = filterCompactData;
2819
3006
  exports.filterElementAsset = filterElementAsset;
2820
3007
  exports.findElementFromList = findElementFromList;
2821
3008
  exports.findElementFromListByPosition = findElementFromListByPosition;
@@ -1 +1 @@
1
- var iDrawUtil=function(t){"use strict";var e,n,i=(t,e,n)=>{if(!e.has(t))throw TypeError("Cannot "+n)},o=(t,e,n)=>(i(t,e,"read from private field"),n?n.call(t):e.get(t)),r=(t,e,n)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,n)},a=(t,e,n,o)=>(i(t,e,"write to private field"),o?o.call(t,n):e.set(t,n),n);function l(t){return"string"==typeof t&&(/^\#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(t)||/^[a-z]{1,}$/i.test(t))}const s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function c(){function t(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return`${t()}${t()}-${t()}-${t()}-${t()}-${t()}${t()}${t()}`}function u(t){let e=0;for(let n=0;n<t.length;n++)e+=t.charCodeAt(n)*t.charCodeAt(n)*n*n;return e.toString(16).substring(0,4)}function h(t){const e=t.length,n=Math.floor(e/2),i=t.substring(0,4).padEnd(4,"0"),o=t.substring(0,4).padEnd(4,"0");return`@assets/${u(e.toString(16).padEnd(4,i))}${u(t.substring(n-4,n).padEnd(4,i)).padEnd(4,"f")}-${u(t.substring(n-8,n-4).padEnd(4,i)).padEnd(4,"f")}-${u(t.substring(n-12,n-8).padEnd(4,i)).padEnd(4,"f")}-${u(t.substring(n-16,n-12).padEnd(4,o)).padEnd(4,"f")}-${u(t.substring(n,n+4).padEnd(4,o)).padEnd(4,"f")}${u(t.substring(n+4,n+8).padEnd(4,o)).padEnd(4,"f")}${u(o.padEnd(4,i).padEnd(4,o))}`}function f(t){return/^@assets\/[0-9a-z]{8,8}\-[0-9a-z]{4,4}\-[0-9a-z]{4,4}\-[0-9a-z]{4,4}\-[0-9a-z]{12,12}$/.test(`${t}`)}function d(t){return function t(e){const n=function(t){return Object.prototype.toString.call(t).replace(/[\]|\[]{1,1}/gi,"").split(" ")[1]}(e);if(["Null","Number","String","Boolean","Undefined"].indexOf(n)>=0)return e;if("Array"===n){const n=[];return e.forEach((e=>{n.push(t(e))})),n}if("Object"===n){const n={};Object.keys(e).forEach((i=>{n[i]=t(e[i])}));return Object.getOwnPropertySymbols(e).forEach((i=>{n[i]=t(e[i])})),n}}(t)}function g(t){return(Object.prototype.toString.call(t)||"").replace(/(\[object|\])/gi,"").trim()}const x={type(t,e){const n=g(t);return!0===e?n.toLocaleLowerCase():n},array:t=>"Array"===g(t),json:t=>"Object"===g(t),function:t=>"Function"===g(t),asyncFunction:t=>"AsyncFunction"===g(t),string:t=>"String"===g(t),number:t=>"Number"===g(t),undefined:t=>"Undefined"===g(t),null:t=>"Null"===g(t),promise:t=>"Promise"===g(t)};const{Image:y}=window;function m(t){return new Promise(((e,n)=>{const i=new y;i.crossOrigin="anonymous",i.onload=function(){e(i)},i.onabort=n,i.onerror=n,i.src=t}))}function p(t){return"number"==typeof t&&(t>0||t<=0)}function w(t){return"number"==typeof t&&t>=0}function v(t){return"string"==typeof t&&/^(http:\/\/|https:\/\/|\.\/|\/)/.test(`${t}`)}function b(t){return"string"==typeof t&&/^(data:image\/)/.test(`${t}`)}const P={x:function(t){return p(t)},y:function(t){return p(t)},w:w,h:function(t){return"number"==typeof t&&t>=0},angle:function(t){return"number"==typeof t&&t>=-360&&t<=360},number:p,numberStr:function(t){return/^(-?\d+(?:\.\d+)?)$/.test(`${t}`)},borderWidth:function(t){return w(t)},borderRadius:function(t){return p(t)&&t>=0},color:function(t){return l(t)},imageSrc:function(t){return b(t)||v(t)},imageURL:v,imageBase64:b,svg:function(t){return"string"==typeof t&&/^(<svg[\s]{1,}|<svg>)/i.test(`${t}`.trim())&&/<\/[\s]{0,}svg>$/i.test(`${t}`.trim())},html:function(t){let e=!1;if("string"==typeof t){let n=document.createElement("div");n.innerHTML=t,n.children.length>0&&(e=!0),n=null}return e},text:function(t){return"string"==typeof t},fontSize:function(t){return p(t)&&t>0},lineHeight:function(t){return p(t)&&t>0},textAlign:function(t){return["center","left","right"].includes(t)},fontFamily:function(t){return"string"==typeof t&&t.length>0},fontWeight:function(t){return["bold"].includes(t)},strokeWidth:function(t){return p(t)&&t>0}};function M(t={}){const{borderColor:e,borderRadius:n,borderWidth:i}=t;return!(t.hasOwnProperty("borderColor")&&!P.color(e))&&(!(t.hasOwnProperty("borderRadius")&&!P.number(n))&&!(t.hasOwnProperty("borderWidth")&&!P.number(i)))}const I={attrs:function(t){const{x:e,y:n,w:i,h:o,angle:r}=t;return!!(P.x(e)&&P.y(n)&&P.w(i)&&P.h(o)&&P.angle(r))&&(r>=-360&&r<=360)},textDesc:function(t){const{text:e,color:n,fontSize:i,lineHeight:o,fontFamily:r,textAlign:a,fontWeight:l,background:s,strokeWidth:c,strokeColor:u}=t;return!!P.text(e)&&(!!P.color(n)&&(!!P.fontSize(i)&&(!(t.hasOwnProperty("background")&&!P.color(s))&&(!(t.hasOwnProperty("fontWeight")&&!P.fontWeight(l))&&(!(t.hasOwnProperty("lineHeight")&&!P.lineHeight(o))&&(!(t.hasOwnProperty("fontFamily")&&!P.fontFamily(r))&&(!(t.hasOwnProperty("textAlign")&&!P.textAlign(a))&&(!(t.hasOwnProperty("strokeWidth")&&!P.strokeWidth(c))&&(!(t.hasOwnProperty("strokeColor")&&!P.color(u))&&!!M(t))))))))))},rectDesc:function(t){const{background:e}=t;return!(t.hasOwnProperty("background")&&!P.color(e))&&!!M(t)},circleDesc:function(t){const{background:e,borderColor:n,borderWidth:i}=t;return!(t.hasOwnProperty("background")&&!P.color(e))&&(!(t.hasOwnProperty("borderColor")&&!P.color(n))&&!(t.hasOwnProperty("borderWidth")&&!P.number(i)))},imageDesc:function(t){const{src:e}=t;return!!P.imageSrc(e)},svgDesc:function(t){const{svg:e}=t;return!!P.svg(e)},htmlDesc:function(t){const{html:e}=t;return!!P.html(e)}};class R{constructor(t,i){r(this,e,void 0),r(this,n,void 0),a(this,e,t),a(this,n,{devicePixelRatio:1,offscreenCanvas:null,...i})}$undoPixelRatio(t){return t/o(this,n).devicePixelRatio}$doPixelRatio(t){return o(this,n).devicePixelRatio*t}$getContext(){return o(this,e)}$setFont(t){const n=[];t.fontWeight&&n.push(`${t.fontWeight}`),n.push(`${this.$doPixelRatio(t.fontSize||12)}px`),n.push(`${t.fontFamily||"sans-serif"}`),o(this,e).font=`${n.join(" ")}`}$getOffscreenCanvas(){return o(this,n).offscreenCanvas}$resize(t){const{width:i,height:r,devicePixelRatio:l,resetStyle:s}=t,{canvas:c}=o(this,e);c.width=i*l,c.height=r*l,a(this,n,{...o(this,n),devicePixelRatio:l}),!0===s&&(c.style.width=`${i}px`,c.style.height=`${r}px`)}$getSize(){const{devicePixelRatio:t}=o(this,n),{width:i,height:r}=o(this,e).canvas;return{width:i/t,height:r/t,devicePixelRatio:t}}get canvas(){return o(this,e).canvas}get fillStyle(){return o(this,e).fillStyle}set fillStyle(t){o(this,e).fillStyle=t}get strokeStyle(){return o(this,e).strokeStyle}set strokeStyle(t){o(this,e).strokeStyle=t}get lineWidth(){return this.$undoPixelRatio(o(this,e).lineWidth)}set lineWidth(t){o(this,e).lineWidth=this.$doPixelRatio(t)}get textAlign(){return o(this,e).textAlign}set textAlign(t){o(this,e).textAlign=t}get textBaseline(){return o(this,e).textBaseline}set textBaseline(t){o(this,e).textBaseline=t}get globalAlpha(){return o(this,e).globalAlpha}set globalAlpha(t){o(this,e).globalAlpha=t}get shadowColor(){return o(this,e).shadowColor}set shadowColor(t){o(this,e).shadowColor=t}get shadowOffsetX(){return this.$undoPixelRatio(o(this,e).shadowOffsetX)}set shadowOffsetX(t){o(this,e).shadowOffsetX=this.$doPixelRatio(t)}get shadowOffsetY(){return this.$undoPixelRatio(o(this,e).shadowOffsetY)}set shadowOffsetY(t){o(this,e).shadowOffsetY=this.$doPixelRatio(t)}get shadowBlur(){return this.$undoPixelRatio(o(this,e).shadowBlur)}set shadowBlur(t){o(this,e).shadowBlur=this.$doPixelRatio(t)}get lineCap(){return o(this,e).lineCap}set lineCap(t){o(this,e).lineCap=t}get globalCompositeOperation(){return o(this,e).globalCompositeOperation}set globalCompositeOperation(t){o(this,e).globalCompositeOperation=t}fill(...t){return o(this,e).fill(...t)}arc(t,n,i,r,a,l){return o(this,e).arc(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),r,a,l)}rect(t,n,i,r){return o(this,e).rect(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}fillRect(t,n,i,r){return o(this,e).fillRect(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}clearRect(t,n,i,r){return o(this,e).clearRect(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}beginPath(){return o(this,e).beginPath()}closePath(){return o(this,e).closePath()}lineTo(t,n){return o(this,e).lineTo(this.$doPixelRatio(t),this.$doPixelRatio(n))}moveTo(t,n){return o(this,e).moveTo(this.$doPixelRatio(t),this.$doPixelRatio(n))}arcTo(t,n,i,r,a){return o(this,e).arcTo(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r),this.$doPixelRatio(a))}getLineDash(){return o(this,e).getLineDash()}setLineDash(t){const n=t.map((t=>this.$doPixelRatio(t)));return o(this,e).setLineDash(n)}stroke(t){return t?o(this,e).stroke(t):o(this,e).stroke()}translate(t,n){return o(this,e).translate(this.$doPixelRatio(t),this.$doPixelRatio(n))}rotate(t){return o(this,e).rotate(t)}drawImage(...t){const n=t[0],i=t[1],r=t[2],a=t[3],l=t[4],s=t[t.length-4],c=t[t.length-3],u=t[t.length-2],h=t[t.length-1];return 9===t.length?o(this,e).drawImage(n,this.$doPixelRatio(i),this.$doPixelRatio(r),this.$doPixelRatio(a),this.$doPixelRatio(l),this.$doPixelRatio(s),this.$doPixelRatio(c),this.$doPixelRatio(u),this.$doPixelRatio(h)):o(this,e).drawImage(n,this.$doPixelRatio(s),this.$doPixelRatio(c),this.$doPixelRatio(u),this.$doPixelRatio(h))}createPattern(t,n){return o(this,e).createPattern(t,n)}measureText(t){return o(this,e).measureText(t)}fillText(t,n,i,r){return void 0!==r?o(this,e).fillText(t,this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r)):o(this,e).fillText(t,this.$doPixelRatio(n),this.$doPixelRatio(i))}strokeText(t,n,i,r){return void 0!==r?o(this,e).strokeText(t,this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r)):o(this,e).strokeText(t,this.$doPixelRatio(n),this.$doPixelRatio(i))}save(){o(this,e).save()}restore(){o(this,e).restore()}scale(t,n){o(this,e).scale(t,n)}circle(t,n,i,r,a,l,s,c){o(this,e).ellipse(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r),a,l,s,c)}isPointInPath(t,n){return o(this,e).isPointInPath(this.$doPixelRatio(t),this.$doPixelRatio(n))}clip(...t){return o(this,e).clip(...t)}setTransform(t,n,i,r,a,l){return o(this,e).setTransform(t,n,i,r,a,l)}getTransform(){return o(this,e).getTransform()}createLinearGradient(t,n,i,r){return o(this,e).createLinearGradient(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}createRadialGradient(t,n,i,r,a,l){return o(this,e).createRadialGradient(this.$doPixelRatio(t),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r),this.$doPixelRatio(a),this.$doPixelRatio(l))}createConicGradient(t,n,i){return o(this,e).createConicGradient(t,this.$doPixelRatio(n),this.$doPixelRatio(i))}}function $(t){const{width:e,height:n,ctx:i,devicePixelRatio:o}=t;let r=i;if(!r){const t=document.createElement("canvas");t.width=e*o,t.height=n*o,r=t.getContext("2d")}return new R(r,t)}function S(t){const{width:e,height:n,devicePixelRatio:i}=t,o=new OffscreenCanvas(e*i,n*i),r=o.getContext("2d").canvas.getContext("2d");return new R(r,{devicePixelRatio:i,offscreenCanvas:o})}e=new WeakMap,n=new WeakMap;function E(t,e){const n=(t.x-e.x)*(t.x-e.x)+(t.y-e.y)*(t.y-e.y);return 0===n?n:Math.sqrt(n)}function A(t,e){return t.x===e.x&&t.y===e.y&&t.t===e.t}function C(t){return t>=0||t<0}function k(t){return C(t.x)&&C(t.y)&&t.t>0}function z(t,e){return{x:t.x+(e.x-t.x)/2,y:t.y+(e.y-t.y)/2}}function T(t){return t/180*Math.PI}function L(t,e,n,i){const o=T(e||0);n&&(o>0||o<0)&&(t.translate(n.x,n.y),t.rotate(o),t.translate(-n.x,-n.y)),i(t),n&&(o>0||o<0)&&(t.translate(n.x,n.y),t.rotate(-o),t.translate(-n.x,-n.y))}function O(t){return{x:t.x+t.w/2,y:t.y+t.h/2}}function D(t){const e=Math.min(t[0].x,t[1].x,t[2].x,t[3].x),n=Math.min(t[0].y,t[1].y,t[2].y,t[3].y);return O({x:e,y:n,w:Math.max(t[0].x,t[1].x,t[2].x,t[3].x)-e,h:Math.max(t[0].y,t[1].y,t[2].y,t[3].y)-n})}function j(t,e,n){const i=function(t,e){const n=e.x-t.x,i=e.y-t.y;if(0===n){if(i<0)return 0;if(i>0)return Math.PI}else if(0===i){if(n<0)return 3*Math.PI/2;if(n>0)return Math.PI/2}return n>0&&i<0?Math.atan(Math.abs(n)/Math.abs(i)):n>0&&i>0?Math.PI-Math.atan(Math.abs(n)/Math.abs(i)):n<0&&i>0?Math.PI+Math.atan(Math.abs(n)/Math.abs(i)):n<0&&i<0?2*Math.PI-Math.atan(Math.abs(n)/Math.abs(i)):0}(t,e);let o=i+n;o>2*Math.PI?o-=2*Math.PI:o<0-2*Math.PI&&(o+=2*Math.PI),o<0&&(o+=2*Math.PI);const r=E(t,e);let a=0,l=0;return 0===o?(a=0,l=0-r):o>0&&o<Math.PI/2?(a=Math.sin(o)*r,l=0-Math.cos(o)*r):o===Math.PI/2?(a=r,l=0):o>Math.PI/2&&o<Math.PI?(a=Math.sin(Math.PI-o)*r,l=Math.cos(Math.PI-o)*r):o===Math.PI?(a=0,l=r):o>Math.PI&&o<1.5*Math.PI?(a=0-Math.sin(o-Math.PI)*r,l=Math.cos(o-Math.PI)*r):o===1.5*Math.PI?(a=0-r,l=0):o>1.5*Math.PI&&o<2*Math.PI?(a=0-Math.sin(2*Math.PI-o)*r,l=0-Math.cos(2*Math.PI-o)*r):o===2*Math.PI&&(a=0,l=0-r),a+=t.x,l+=t.y,{x:a,y:l}}function W(t,e,n){const{x:i,y:o,w:r,h:a}=t;let l={x:i,y:o},s={x:i+r,y:o},c={x:i+r,y:o+a},u={x:i,y:o+a};if(n&&(n>0||n<0)){const t=T(H(n));l=j(e,l,t),s=j(e,s,t),c=j(e,c,t),u=j(e,u,t)}return[l,s,c,u]}function F(t){const{angle:e=0}=t;return W(t,O(t),e)}function V(t,e,n){return[j(t,{x:e[0].x,y:e[0].y},n),j(t,{x:e[1].x,y:e[1].y},n),j(t,{x:e[2].x,y:e[2].y},n),j(t,{x:e[3].x,y:e[3].y},n)]}function H(t){if(!(t>0||t<0)||0===t)return 0;let e=t%360;return e<0&&(e+=360),e}function N(t,e){const n={x:0,y:0,w:0,h:0};t.forEach((t=>{const e={x:t.x,y:t.y,w:t.w,h:t.h,angle:t.angle};if(e.angle&&(e.angle>0||e.angle<0)){const t=F(e);if(4===t.length){const n=[t[0].x,t[1].x,t[2].x,t[3].x],i=[t[0].y,t[1].y,t[2].y,t[3].y];e.x=Math.min(...n),e.y=Math.min(...i),e.w=Math.abs(Math.max(...n)-Math.min(...n)),e.h=Math.abs(Math.max(...i)-Math.min(...i))}}const i=Math.min(e.x,n.x),o=Math.min(e.y,n.y),r=Math.max(e.x+e.w,n.x+n.w),a=Math.max(e.y+e.h,n.y+n.h);n.x=i,n.y=o,n.w=Math.abs(r-i),n.h=Math.abs(a-o)})),(null==e?void 0:e.extend)&&(n.x=Math.min(n.x,0),n.y=Math.min(n.y,0));const i={contextWidth:n.w,contextHeight:n.h};return(null==e?void 0:e.viewWidth)&&(null==e?void 0:e.viewHeight)&&(null==e?void 0:e.viewWidth)>0&&(null==e?void 0:e.viewHeight)>0&&(e.viewWidth>n.x+n.w&&(i.contextWidth=e.viewWidth-n.x),e.viewHeight>n.y+n.h&&(i.contextHeight=e.viewHeight-n.y)),i}function B(t,e){let n=null,i=e;for(let e=0;e<t.length;e++){const o=i[t[e]];if(e<t.length-1&&"group"===o.type)i=o.detail.children;else{if(e!==t.length-1)break;n=o}}return n}function G(t,e){const n=[];let i=!1;const o=e=>{var r;for(let a=0;a<e.length&&!0!==i;a++){n.push(a);const l=e[a];if(l.uuid===t){i=!0;break}if("group"===l.type&&o((null==(r=null==l?void 0:l.detail)?void 0:r.children)||[]),i)break;n.pop()}};return o(e),n}function U(t,e){const n=t.x,i=t.y,o=t.x+t.w,r=t.y+t.h,a=e.x,l=e.y,s=e.x+e.w,c=e.y+e.h;return n<=s&&o>=a&&i<=c&&r>=l}function _(t,e){const{viewScaleInfo:n}=e,{x:i,y:o,w:r,h:a,angle:l}=t,{scale:s,offsetTop:c,offsetLeft:u}=n;return{x:i*s+u,y:o*s+c,w:r*s,h:a*s,angle:l}}function Q(t,e){const{viewScaleInfo:n}=e,{x:i,y:o}=t,{scale:r,offsetTop:a,offsetLeft:l}=n;return{x:i*r+l,y:o*r+a}}function Y(t,e){const{context2d:n,element:i,viewScaleInfo:o,viewSizeInfo:r}=e,{angle:a=0}=i,{x:l,y:s,w:c,h:u}=_(i,{viewScaleInfo:o,viewSizeInfo:r}),h=F({x:l,y:s,w:c,h:u,angle:a});if(h.length>=2){n.beginPath(),n.moveTo(h[0].x,h[0].y);for(let t=1;t<h.length;t++)n.lineTo(h[t].x,h[t].y);n.closePath()}return!!n.isPointInPath(t.x,t.y)}function q(t){const{x:e,y:n,h:i,w:o}=t;return[{x:e,y:n},{x:e+o,y:n},{x:e+o,y:n+i},{x:e,y:n+i}]}function X(t){const{x:e,y:n,w:i,h:o,angle:r=0}=t;return 0===r?q(t):W(t,O({x:e,y:n,w:i,h:o,angle:r}),r)}function Z(t){const e=[];let n=0,i=0;const o=[],r=[...t];for(let t=0;t<r.length;t++){const{x:a,y:l,w:s,h:c,angle:u=0}=r[t];let h;if(n+=a,i+=l,0===t){const t={x:n,y:i,w:s,h:c,angle:u};h=X({x:a,y:l,w:s,h:c,angle:u}),o.push({center:O(t),angle:u,radian:T(u)})}else{h=q({x:n,y:i,w:s,h:c,angle:u});for(let t=0;t<o.length;t++){const{center:e,radian:n}=o[t];h=V(e,h,n)}const t=D(h);if(u>0||u<0){h=V(t,h,T(u))}o.push({center:t,angle:u,radian:T(u)})}e.push(h)}return e}function J(t,e){const{groupQueue:n}=e;if(!(n.length>0))return[X(t)];return Z([...n,t])}function K(t,e){return J(t,e).pop()||null}function tt(t,e){const{x:n,y:i}=t,{size:o,angle:r}=e;return{x:n-o/2,y:i-o/2,w:o,h:o,angle:r}}const et=/([astvzqmhlc])([^astvzqmhlc]*)/gi,nt=/(-?\d+(?:\.\d+)?)/gi;const it=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g,ot=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,rt=/^\s*$/,at={};function lt(t){const e={type:"element",name:"",isVoid:!1,attributes:{},children:[]},n=t.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(e.name=n[1],(at[n[1]]||"/"===t.charAt(t.length-2))&&(e.isVoid=!0),e.name.startsWith("!--"))){const e=t.indexOf("--\x3e");return{type:"comment",name:null,attributes:{},children:[],isVoid:!1,comment:-1!==e?t.slice(4,e):""}}const i=new RegExp(it);let o=null;for(;o=i.exec(t),null!==o;)if(o[0].trim())if(o[1]){const t=o[1].trim();let n=[t,""];t.indexOf("=")>-1&&(n=t.split("=")),e.attributes[n[0]]=n[1],i.lastIndex--}else o[2]&&(e.attributes[o[2]]=o[3].trim().substring(1,o[3].length-1));return e}function st(t,e){switch(e.type){case"text":return t+e.textContent;case"element":return t+="<"+e.name+(e.attributes?function(t){const e=[];for(let n in t)e.push(n+'="'+t[n]+'"');return e.length?" "+e.join(" "):""}(e.attributes):"")+(e.isVoid?"/>":">"),e.isVoid?t:t+e.children.reduce(st,"")+"</"+e.name+">";case"comment":return t+="\x3c!--"+e.comment+"--\x3e"}}function ct(t){return t[1]!=-1*t[3]||t[4]!=t[0]||t[0]*t[4]-t[3]*t[1]!=1?null:Math.acos(t[0])}function ut(){return{boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,lineHeight:20,fontFamily:"sans-serif",fontWeight:400,overflow:"hidden"}}function ht(){return{background:"#D9D9D9"}}function ft(t){var e;const n={boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,lineHeight:20,fontFamily:"sans-serif",fontWeight:400,overflow:"hidden"},i=(null==(e=null==t?void 0:t.viewScaleInfo)?void 0:e.scale)||1;return{text:"Text Element",color:n.color,fontFamily:n.fontFamily,fontWeight:n.fontWeight,lineHeight:n.fontSize*i,fontSize:n.fontSize*i,textAlign:"center",verticalAlign:"middle"}}const dt={boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,lineHeight:20,fontFamily:"sans-serif",fontWeight:400,overflow:"hidden"};const gt=200,xt=200,yt={boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,lineHeight:20,fontFamily:"sans-serif",fontWeight:400,overflow:"hidden"};function mt(t,e,n){let i=!1;if(1===e.length){const o=e[0];n.splice(o,0,t),i=!0}else if(e.length>1){let o=n;for(let n=0;n<e.length;n++){const r=o[e[n]];if(n===e.length-1){const r=e[n];o.splice(r,0,t),i=!0}else{if(!(n<e.length-1&&"group"===r.type))break;o=r.detail.children}}}return i}function pt(t,e){let n=!1;if(1===t.length){const i=t[0];e.splice(i,1),n=!0}else if(t.length>1){let i=e;for(let e=0;e<t.length;e++){const o=i[t[e]];if(e===t.length-1){const o=t[e];i.splice(o,1),n=!0}else{if(!(e<t.length-1&&"group"===o.type))break;i=o.detail.children}}}return n}function wt(t,e){var n;const i=Object.keys(e);for(let o=0;o<i.length;o++){const r=i[o];["x","y","w","h","angle","name"].includes(r)?t[r]=e[r]:["detail","operations"].includes(r)&&(x.json(e[r])?((null==t?void 0:t.hasOwnProperty(r))||(t[r]={}),x.json(t[r])&&(t[r]={...t[r],...e[r]})):x.array(e[r])&&((null==t?void 0:t.hasOwnProperty(r))||(t[r]=[]),x.array(t[r])&&(null==(n=null==e?void 0:e[r])||n.forEach(((e,n)=>{t[r][n]=e})),t[r]=[...t[r],...e[r]])))}return t}return t.Context2D=R,t.EventEmitter=class{constructor(){this._listeners=new Map}on(t,e){if(this._listeners.has(t)){const n=this._listeners.get(t)||[];null==n||n.push(e),this._listeners.set(t,n)}else this._listeners.set(t,[e])}off(t,e){if(this._listeners.has(t)){const n=this._listeners.get(t);if(Array.isArray(n))for(let t=0;t<(null==n?void 0:n.length);t++)if(n[t]===e){n.splice(t,1);break}this._listeners.set(t,n||[])}}trigger(t,e){const n=this._listeners.get(t);return!!Array.isArray(n)&&(n.forEach((t=>{t(e)})),!0)}has(t){if(this._listeners.has(t)){const e=this._listeners.get(t);if(Array.isArray(e)&&e.length>0)return!0}return!1}},t.Store=class{constructor(t){this._backUpDefaultStorage=d(t.defaultStorage),this._temp=this._createTempStorage()}set(t,e){this._temp[t]=e}get(t){return this._temp[t]}getSnapshot(){return d(this._temp)}clear(){this._temp=this._createTempStorage()}_createTempStorage(){return d(this._backUpDefaultStorage)}},t.calcDistance=E,t.calcElementCenter=O,t.calcElementCenterFromVertexes=D,t.calcElementListSize=function(t){var e;const n={x:0,y:0,w:0,h:0};let i=null;for(let o=0;o<t.length;o++){const r=t[o];if(null==(e=null==r?void 0:r.operations)?void 0:e.invisible)continue;const a={x:r.x,y:r.y,w:r.w,h:r.h,angle:r.angle||0};if(a.angle&&(a.angle>0||a.angle<0)){const t=F(a);if(4===t.length){const e=[t[0].x,t[1].x,t[2].x,t[3].x],n=[t[0].y,t[1].y,t[2].y,t[3].y];a.x=Math.min(...e),a.y=Math.min(...n),a.w=Math.abs(Math.max(...e)-Math.min(...e)),a.h=Math.abs(Math.max(...n)-Math.min(...n))}}if(i){const t=Math.min(a.x,n.x),e=Math.min(a.y,n.y),i=Math.max(a.x+a.w,n.x+n.w),o=Math.max(a.y+a.h,n.y+n.h);n.x=t,n.y=e,n.w=Math.abs(i-t),n.h=Math.abs(o-e)}else n.x=a.x,n.y=a.y,n.w=a.w,n.h=a.h;i=a}return{x:Math.floor(n.x),y:Math.floor(n.y),w:Math.ceil(n.w),h:Math.ceil(n.h)}},t.calcElementQueueVertexesQueueInGroup=Z,t.calcElementSizeController=function(t,e){const{groupQueue:n,controllerSize:i,viewScaleInfo:o}=e,r=(i&&i>0?i:8)/o.scale,{x:a,y:l,w:s,h:u,angle:h=0}=t,f=[{uuid:c(),x:a,y:l,w:s,h:u,angle:h,type:"group",detail:{children:[]}},...n];let d=0;f.forEach((({angle:t=0})=>{d+=t}));const g=K(t,{groupQueue:n}),x=z(g[0],g[1]),y=z(g[1],g[2]),m=z(g[2],g[3]),p=z(g[3],g[0]),w=g[0],v=g[1],b=g[2],P=g[3],M=tt(w,{size:r,angle:d}),I=tt(v,{size:r,angle:d}),R=tt(P,{size:r,angle:d}),$=tt(b,{size:r,angle:d}),S=X(M),E=X(I),A=X(R),C=X($),k=[S[1],E[0],E[3],S[2]],T=[E[3],E[2],C[1],C[0]],L=[A[1],C[0],C[3],A[2]];return{elementWrapper:g,left:{type:"left",vertexes:[S[3],S[2],A[1],A[0]],center:p},right:{type:"right",vertexes:T,center:y},top:{type:"top",vertexes:k,center:x},bottom:{type:"bottom",vertexes:L,center:m},topLeft:{type:"top-left",vertexes:S,center:w},topRight:{type:"top-right",vertexes:E,center:v},bottomLeft:{type:"bottom-left",vertexes:A,center:P},bottomRight:{type:"bottom-right",vertexes:C,center:b}}},t.calcElementVertexesInGroup=K,t.calcElementVertexesQueueInGroup=J,t.calcElementsContextSize=N,t.calcElementsViewInfo=function(t,e,n){const i=N(t,{viewWidth:e.width,viewHeight:e.height,extend:null==n?void 0:n.extend});return!0===(null==n?void 0:n.extend)&&(i.contextWidth=Math.max(i.contextWidth,e.contextWidth),i.contextHeight=Math.max(i.contextHeight,e.contextHeight)),{contextSize:i}},t.calcSpeed=function(t,e){return E(t,e)/Math.abs(e.t-t.t)},t.calcViewBoxSize=function(t,e){const{viewScaleInfo:n}=e,{scale:i}=n;let{borderRadius:o}=t.detail;const{boxSizing:r=dt.boxSizing,borderWidth:a}=t.detail;"number"!=typeof a&&(o=0);let{x:l,y:s,w:c,h:u}=t,h=[0,0,0,0];if("number"==typeof o){const t=o*i;h=[t,t,t,t]}else Array.isArray(o)&&4===(null==o?void 0:o.length)&&(h=[o[0]*i,o[1]*i,o[2]*i,o[3]*i]);let f=0;return"number"==typeof a&&(f=(a||0)*i),"border-box"===r?(l=t.x+f/2,s=t.y+f/2,c=t.w-f,u=t.h-f):"content-box"===r?(l=t.x-f/2,s=t.y-f/2,c=t.w+f,u=t.h+f):(l=t.x,s=t.y,c=t.w,u=t.h),c=Math.max(c,1),u=Math.max(u,1),h=h.map((t=>Math.min(t,c/2,u/2))),{x:l,y:s,w:c,h:u,radiusList:h}},t.calcViewElementSize=_,t.calcViewPointSize=Q,t.calcViewScaleInfo=function(t,e){const{scale:n,offsetX:i,offsetY:o}=t,{viewSizeInfo:r}=e,{width:a,height:l,contextWidth:s,contextHeight:c}=r,u=0-i*n,h=0-o*n;return{scale:n,offsetLeft:u,offsetTop:h,offsetRight:a-(s*n+u/n),offsetBottom:l-(c*n+h/n)}},t.calcViewVertexes=function(t,e){return[Q(t[0],e),Q(t[1],e),Q(t[2],e),Q(t[3],e)]},t.check=I,t.checkRectIntersect=U,t.colorNameToHex=function(t){const e=t.toLowerCase(),n=s[e];return"string"==typeof n?n:null},t.colorToCSS=function(t){let e="transparent";if("string"==typeof t)e=t;else if("linear-gradient"===(null==t?void 0:t.type)){const n=[];"number"==typeof t.angle?n.push(`${t.angle}deg`):n.push("180deg"),Array.isArray(t.stops)&&t.stops.forEach((t=>{n.push(`${t.color} ${100*t.offset}%`)})),e=`linear-gradient(${n.join(", ")})`}else if("radial-gradient"===(null==t?void 0:t.type)){const n=[];Array.isArray(t.stops)&&t.stops.forEach((t=>{n.push(`${t.color} ${100*t.offset}%`)})),e=`radial-gradient(circle, ${n.join(", ")})`}return e},t.colorToLinearGradientCSS=function(t){let e="transparent";if("string"==typeof t)e=t;else if("radial-gradient"===(null==t?void 0:t.type)||"linear-gradient"===(null==t?void 0:t.type)){const n=[];Array.isArray(t.stops)&&t.stops.length>0&&(t.stops.forEach(((e,i)=>{n.push(`${e.color} ${100*e.offset}%`),i===t.stops.length-1&&e.offset<1&&n.push(`${e.color} ${100*e.offset}%`)})),e=`linear-gradient(90deg, ${n.join(", ")})`)}return e},t.compose=function(t){return function(e,n){return function i(o){let r=t[o];o===t.length&&n&&(r=n);if(!r)return Promise.resolve();try{return Promise.resolve(r(e,i.bind(null,o+1)))}catch(t){return Promise.reject(t)}}(0)}},t.compressImage=function(t,e){let n=.5;const i=(null==e?void 0:e.type)||"image/png";return(null==e?void 0:e.radio)&&(null==e?void 0:e.radio)>0&&(null==e?void 0:e.radio)<=1&&(n=null==e?void 0:e.radio),new Promise(((e,o)=>{const r=new Image;r.addEventListener("load",(()=>{const{width:t,height:o}=r,a=t*n,l=o*n;let s=document.createElement("canvas");s.width=a,s.height=l;s.getContext("2d").drawImage(r,0,0,a,l);const c=s.toDataURL(i);s=null,e(c)})),r.addEventListener("error",(t=>{o(t)})),r.src=t}))},t.createAssetId=h,t.createBoardContent=function(t,e){const{width:n,height:i,devicePixelRatio:o,offscreen:r}=e,a={width:n,height:i,devicePixelRatio:o};if(!0===r){const e=t.getContext("2d"),n=S(a),i=S(a),o=S(a),r=$({ctx:e,...a}),l=()=>{const{width:t,height:e}=n.$getSize();r.clearRect(0,0,t,e),r.drawImage(o.canvas,0,0,t,e),r.drawImage(n.canvas,0,0,t,e),r.drawImage(i.canvas,0,0,t,e),o.clearRect(0,0,t,e),n.clearRect(0,0,t,e),i.clearRect(0,0,t,e)};return{underContext:o,viewContext:n,helperContext:i,boardContext:r,drawView:l}}{const e=t.getContext("2d"),o=$(a),r=$(a),l=$(a),s=$({ctx:e,...a}),c=()=>{s.clearRect(0,0,n,i),s.drawImage(l.canvas,0,0,n,i),s.drawImage(o.canvas,0,0,n,i),s.drawImage(r.canvas,0,0,n,i),l.clearRect(0,0,n,i),o.clearRect(0,0,n,i),r.clearRect(0,0,n,i)};return{underContext:l,viewContext:o,helperContext:r,boardContext:s,drawView:c}}},t.createContext2D=$,t.createElement=function(t,e,n){const i=function(t,e){let n=0,i=0,o=gt,r=xt;if(e){const{viewScaleInfo:a,viewSizeInfo:l}=e,{scale:s,offsetLeft:c,offsetTop:u}=a,{width:h,height:f}=l;if("text"===t){const t=ft();o=yt.fontSize*s*t.text.length,r=yt.fontSize*s*2}else{const e=h/4,n=f/4;o=gt>=e?e/s:gt/s,r=xt>=n?n/s:xt/s,["circle","svg","image"].includes(t)&&(o=r=Math.max(o,r))}n=(0-c+h/2-o*s/2)/s,i=(0-u+f/2-r*s/2)/s}return{x:n,y:i,w:o,h:r}}(t,n);let o={};return"rect"===t?o={background:"#D9D9D9"}:"circle"===t?(i.w,o={background:"#D9D9D9",radius:0}):"text"===t?o=ft(n):"svg"===t?o={svg:'<svg t="1701004189871" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3-12.3 12.7-12.1 32.9 0.6 45.3l183.7 179.1-43.4 252.9c-1.2 6.9-0.1 14.1 3.2 20.3 8.2 15.6 27.6 21.7 43.2 13.4L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3zM664.8 561.6l36.1 210.3L512 672.7 323.1 772l36.1-210.3-152.8-149L417.6 382 512 190.7 606.4 382l211.2 30.7-152.8 148.9z" fill="#2c2c2c"></path></svg>'}:"image"===t?o={src:"data:image/svg+xml;base64,PHN2ZyAgIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxwYXRoIGQ9Ik05MjggMTYwSDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NDBjMCAxNy43IDE0LjMgMzIgMzIgMzJoODMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnogbS00MCA2MzJIMTM2di0zOS45bDEzOC41LTE2NC4zIDE1MC4xIDE3OEw2NTguMSA0ODkgODg4IDc2MS42Vjc5MnogbTAtMTI5LjhMNjY0LjIgMzk2LjhjLTMuMi0zLjgtOS0zLjgtMTIuMiAwTDQyNC42IDY2Ni40bC0xNDQtMTcwLjdjLTMuMi0zLjgtOS0zLjgtMTIuMiAwTDEzNiA2NTIuN1YyMzJoNzUydjQzMC4yeiIgIGZpbGw9IiM1MTUxNTEiPjwvcGF0aD48cGF0aCBkPSJNMzA0IDQ1NmM0OC42IDAgODgtMzkuNCA4OC04OHMtMzkuNC04OC04OC04OC04OCAzOS40LTg4IDg4IDM5LjQgODggODggODh6IG0wLTExNmMxNS41IDAgMjggMTIuNSAyOCAyOHMtMTIuNSAyOC0yOCAyOC0yOC0xMi41LTI4LTI4IDEyLjUtMjggMjgtMjh6IiAgZmlsbD0iIzUxNTE1MSI+PC9wYXRoPjwvc3ZnPg=="}:"group"===t&&(o={children:[],background:"#D9D9D9",overflow:"hidden"}),{...i,...e,uuid:c(),type:t,detail:{...o,...e.detail||{}}}},t.createOffscreenContext2D=S,t.createUUID=c,t.deepClone=d,t.delay=function(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))},t.deleteElementInList=function(t,e){return pt(G(t,e),e)},t.deleteElementInListByPosition=pt,t.downloadFileFromText=function(t,e){const{fileName:n}=e,i=function(t){const e=(new TextEncoder).encode(t),n=new Blob([e],{type:"text/plain;charset=utf-8"});return window.URL.createObjectURL(n)}(t);let o=document.createElement("a");o.href=i,o.download=n,o.click(),o=null},t.downloadImageFromCanvas=function(t,e){const{fileName:n,type:i="image/jpeg"}=e,o=t.toDataURL(i);let r=document.createElement("a");r.href=o,r.download=n,r.click(),r=null},t.equalPoint=A,t.equalTouchPoint=function(t,e){return!0===A(t,e)&&t.f===e.f},t.filterElementAsset=function(t){let e=null,n=null,i=null;return"image"===t.type?i=t.detail.src:"svg"===t.type?i=t.detail.svg:"html"===t.type&&(i=t.detail.html),"string"!=typeof i||f(i)||(e=h(i),n={type:t.type,value:i},"image"===t.type?t.detail.src=e:"svg"===t.type?t.detail.svg=e:"html"===t.type&&(t.detail.html=e)),{element:t,assetId:e,assetItem:n}},t.findElementFromList=function t(e,n){var i;let o=null;for(let r=0;r<n.length;r++){const a=n[r];if(a.uuid===e){o=a;break}if(!o&&"group"===a.type){const n=t(e,(null==(i=null==a?void 0:a.detail)?void 0:i.children)||[]);if((null==n?void 0:n.uuid)===e){o=n;break}}}return o},t.findElementFromListByPosition=B,t.findElementQueueFromListByPosition=function(t,e){const n=[];let i=e;for(let e=0;e<t.length;e++){const o=i[t[e]];if(!o)break;if(n.push(o),!(e<t.length-1&&"group"===o.type))break;i=o.detail.children}return n},t.findElementsFromList=function(t,e){const n=[];return function e(i){var o;for(let r=0;r<i.length;r++){const a=i[r];t.includes(a.uuid)?n.push(a):"group"===a.type&&e((null==(o=null==a?void 0:a.detail)?void 0:o.children)||[])}}(e),n},t.findElementsFromListByPositions=function(t,e){const n=[];return t.forEach((t=>{const i=B(t,e);i&&n.push(i)})),n},t.formatNumber=function(t,e){let n=2;return void 0!==(null==e?void 0:e.decimalPlaces)&&(null==e?void 0:e.decimalPlaces)>=0&&(n=e.decimalPlaces),parseFloat(t.toFixed(n))},t.generateHTML=function(t){return t.reduce((function(t,e){return t+st("",e)}),"")},t.generateSVGPath=function(t){let e="";return t.forEach((t=>{e+=t.type+t.params.join(" ")})),e},t.getCenterFromTwoPoints=z,t.getDefaultElementDetailConfig=ut,t.getDefaultElementRectDetail=ht,t.getElemenetsAssetIds=function(t){const e=[],n=t=>{t.forEach((t=>{"image"===t.type&&f(t.detail.src)?e.push(t.detail.src):"svg"===t.type&&f(t.detail.svg)?e.push(t.detail.svg):"html"===t.type&&t.detail.html?e.push(t.detail.html):"group"===t.type&&Array.isArray(t.detail.children)&&n(t.detail.children)}))};return n(t),e},t.getElementPositionFromList=G,t.getElementRotateVertexes=W,t.getElementSize=function(t){const{x:e,y:n,w:i,h:o,angle:r}=t;return{x:e,y:n,w:i,h:o,angle:r}},t.getElementVertexes=q,t.getGroupQueueFromList=function(t,e){const n=[];return function t(e,i){var o;let r=null;for(let a=0;a<i.length;a++){const l=i[a];if(l.uuid===e){r=l;break}if(!r&&"group"===l.type){n.push(l);const i=t(e,(null==(o=null==l?void 0:l.detail)?void 0:o.children)||[]);if((null==i?void 0:i.uuid)===e){r=i;break}n.pop()}}return r}(t,e),n},t.getSelectedElementUUIDs=function(t,e){var n;let i=[];return Array.isArray(null==t?void 0:t.elements)&&(null==(n=null==t?void 0:t.elements)?void 0:n.length)>0&&Array.isArray(e)&&e.length>0&&e.forEach((e=>{var n;"number"==typeof e?(null==(n=null==t?void 0:t.elements)?void 0:n[e])&&i.push(t.elements[e].uuid):"string"==typeof e&&(i=i.concat(function(t,e){var n;const i=[];if("string"==typeof e&&/^\d+(\.\d+)*$/.test(e)){const o=e.split(".");let r=t;for(;o.length>0;){const t=o.shift();if("string"==typeof t){const e=r[parseInt(t)];e&&0===o.length?i.push(e.uuid):"group"===e.type&&o.length>0&&(r=(null==(n=null==e?void 0:e.detail)?void 0:n.children)||[])}break}}return i}(t.elements,e)))})),i},t.getViewPointAtElement=function(t,e){var n,i,o;const{context2d:r,data:a,viewScaleInfo:l,viewSizeInfo:s,groupQueue:c}=e,u={index:-1,element:null,groupQueueIndex:-1};if(c&&Array.isArray(c)&&(null==c?void 0:c.length)>0)for(let e=c.length-1;e>=0;e--){let o=0,a=0,h=0;for(let t=0;t<=e;t++)o+=c[t].x,a+=c[t].y,h+=c[t].angle||0;const f=c[e];if(f&&"group"===f.type&&Array.isArray(null==(n=f.detail)?void 0:n.children))for(let n=0;n<f.detail.children.length;n++){const d=f.detail.children[n];if(!0!==(null==(i=null==d?void 0:d.operations)?void 0:i.invisible)){if(!d)break;if(Y(t,{context2d:r,element:{x:o+d.x,y:a+d.y,w:d.w,h:d.h,angle:h+(d.angle||0)},viewScaleInfo:l,viewSizeInfo:s})){u.element=d,(e<c.length-1||"group"!==d.type)&&(u.groupQueueIndex=e);break}}}if(u.element)break}if(u.element)return u;for(let e=a.elements.length-1;e>=0;e--){const n=a.elements[e];if(!0!==(null==(o=null==n?void 0:n.operations)?void 0:o.invisible)&&Y(t,{context2d:r,element:n,viewScaleInfo:l,viewSizeInfo:s})){u.index=e,u.element=n;break}}return u},t.getViewScaleInfoFromSnapshot=function(t){const{activeStore:e}=t;return{scale:null==e?void 0:e.scale,offsetTop:null==e?void 0:e.offsetTop,offsetBottom:null==e?void 0:e.offsetBottom,offsetLeft:null==e?void 0:e.offsetLeft,offsetRight:null==e?void 0:e.offsetRight}},t.getViewSizeInfoFromSnapshot=function(t){const{activeStore:e}=t;return{devicePixelRatio:e.devicePixelRatio,width:null==e?void 0:e.width,height:null==e?void 0:e.height,contextWidth:null==e?void 0:e.contextWidth,contextHeight:null==e?void 0:e.contextHeight}},t.insertElementToListByPosition=mt,t.is=P,t.isAssetId=f,t.isColorStr=l,t.isElementInView=function(t,e){const{viewSizeInfo:n,viewScaleInfo:i}=e,{width:o,height:r}=n,{angle:a}=t,{x:l,y:s,w:c,h:u}=_(t,{viewScaleInfo:i,viewSizeInfo:n}),h=F({x:l,y:s,w:c,h:u,angle:a}),f={x:0,y:0,w:o,h:r},d=Math.min(h[0].x,h[1].x,h[2].x,h[3].x),g=Math.min(h[0].y,h[1].y,h[2].y,h[3].y);return U(f,{x:d,y:g,w:Math.max(h[0].x,h[1].x,h[2].x,h[3].x)-d,h:Math.max(h[0].y,h[1].y,h[2].y,h[3].y)-g})},t.isResourceElement=function(t){return["image","svg","html"].includes(null==t?void 0:t.type)},t.isViewPointInElement=Y,t.istype=x,t.limitAngle=H,t.loadHTML=async function(t,e){t=t.replace(/\&/gi,"&amp;");const n=await function(t,e){const{width:n,height:i}=e;return new Promise(((e,o)=>{const r=new Blob([`\n <svg \n xmlns="http://www.w3.org/2000/svg" \n width="${n||""}" \n height = "${i||""}">\n <foreignObject width="100%" height="100%">\n <div xmlns = "http://www.w3.org/1999/xhtml">\n ${t}\n </div>\n </foreignObject>\n </svg>\n `],{type:"image/svg+xml;charset=utf-8"}),a=new FileReader;a.readAsDataURL(r),a.onload=function(t){var n;const i=null==(n=null==t?void 0:t.target)?void 0:n.result;e(i)},a.onerror=function(t){o(t)}}))}(t,e);return await m(n)},t.loadImage=m,t.loadSVG=async function(t){const e=await function(t){return new Promise(((e,n)=>{const i=new Blob([t],{type:"image/svg+xml;charset=utf-8"}),o=new FileReader;o.readAsDataURL(i),o.onload=function(t){var n;const i=null==(n=null==t?void 0:t.target)?void 0:n.result;e(i)},o.onerror=function(t){n(t)}}))}(t);return await m(e)},t.matrixToAngle=function(t){const e=ct(t);if("number"==typeof e){return 180*e/Math.PI}return e},t.matrixToRadian=ct,t.mergeElementAsset=function(t,e){const n=t;let i=null,o=null;return"image"===n.type?i=n.detail.src:"svg"===n.type?i=n.detail.svg:"html"===n.type&&(i=n.detail.html),i&&(null==i?void 0:i.startsWith("@assets/"))&&(o=e[i]),(null==o?void 0:o.type)===n.type&&"string"==typeof(null==o?void 0:o.value)&&(null==o?void 0:o.value)&&("image"===n.type?n.detail.src=o.value:"svg"===n.type?n.detail.svg=o.value:"html"===n.type&&(n.detail.html=o.value)),n},t.mergeHexColorAlpha=function(t,e){if(1===e)return t;let n=1;const i=/^\#[0-9a-f]{6,6}$/i;let o=t;if(i.test(t)?n=parseInt(t.substring(5,7).replace(/^\#/,"0x")):/^\#[0-9a-f]{8,8}$/i.test(t)&&(n=parseInt(t.substring(7,9).replace(/^\#/,"0x")),o=t.substring(0,7)),n*=e,i.test(o)&&n>0&&n<1){const t=Math.max(0,Math.min(255,Math.ceil(256*n)));o=`${o.toUpperCase()}${t.toString(16).toUpperCase()}`}return o},t.moveElementPosition=function(t,e){const{from:n,to:i}=e;if(0===n.length||0===i.length)return t;if(n.length<=i.length)for(let e=0;e<n.length;e++)if(i[e]!==n[e]);else if(e===n.length-1)return t;const o=B(n,t);if(o){if(!mt(o,i,t))return t;let e=-1;for(let t=0;t<n.length&&i[t]>=0;t++)i[t]!==n[t]&&i[t]<n[t]&&t==i.length-1&&(e=t);e>=0&&(n[e]=n[e]+1),pt(n,t)}return t},t.parseAngleToRadian=T,t.parseFileToBase64=function(t){return new Promise((function(e,n){let i=new FileReader;i.addEventListener("load",(function(){e(i.result),i=null})),i.addEventListener("error",(function(t){n(t),i=null})),i.addEventListener("abort",(function(){n(new Error("abort")),i=null})),i.readAsDataURL(t)}))},t.parseFileToText=function(t){return new Promise((function(e,n){let i=new FileReader;i.addEventListener("load",(function(){e(i.result),i=null})),i.addEventListener("error",(function(t){n(t),i=null})),i.addEventListener("abort",(function(){n(new Error("abort")),i=null})),i.readAsText(t)}))},t.parseHTML=function(t){const e=[],n=[];let i,o=-1;return t.replace(ot,((r,a)=>{const l="/"!==r.charAt(1),s=r.startsWith("\x3c!--"),c=a+r.length,u=t.charAt(c);let h;if(s){const t=lt(r);return o<0?(e.push(t),r):(h=n[o],h.children.push(t),r)}if(l){if(o++,i=lt(r),!i.isVoid&&u&&"<"!==u){const e=t.slice(c,t.indexOf("<",c));e.trim()&&i.children.push({type:"text",name:null,attributes:{},children:[],isVoid:!1,textContent:e.trim()})}0===o&&e.push(i),h=n[o-1],h&&h.children.push(i),n[o]=i}if((!l||!Array.isArray(i)&&i.isVoid)&&(o>-1&&!Array.isArray(i)&&(i.isVoid||i.name===r.slice(2,-1))&&(o--,i=-1===o?e:n[o]),"<"!==u&&u)){h=-1===o?e:n[o].children;const i=t.indexOf("<",c);let r=t.slice(c,-1===i?void 0:i);rt.test(r)&&(r=" "),(i>-1&&o+h.length>=0||" "!==r)&&r.trim()&&h.push({type:"text",name:null,attributes:{},children:[],isVoid:!1,textContent:r.trim()})}return r})),e},t.parseRadianToAngle=function(t){return t/Math.PI*180},t.parseSVGPath=function(t){const e=[];return t.replace(et,((t,n,i)=>{const o=i.match(nt),r={type:n,params:o?o.map(Number):[]};return e.push(r),t})),e},t.pickFile=function(t){const{success:e,error:n}=t;let i=document.createElement("input");i.type="file",i.addEventListener("change",(function(){var t;const n=null==(t=i.files)?void 0:t[0];e({file:n}),i=null})),i.addEventListener("error",(function(t){"function"==typeof n&&n(t),i=null})),i.click()},t.rotateByCenter=L,t.rotateElement=function(t,e,n){const i=O(e);L(t,e.angle||0,i,(()=>{n(t)}))},t.rotateElementVertexes=F,t.rotatePoint=j,t.rotatePointInGroup=function(t,e){if((null==e?void 0:e.length)>0){let n=t.x,i=t.y;return e.forEach((t=>{const{x:e,y:o,w:r,h:a,angle:l=0}=t,s=j(O({x:e,y:o,w:r,h:a,angle:l}),{x:n,y:i},T(l));n=s.x,i=s.y})),{x:n,y:i}}return t},t.rotateVertexes=V,t.sortDataAsserts=function(t,e){const n=t.assets||{};let i=t;!0===(null==e?void 0:e.clone)&&(i=d(t));const o=t=>{t.forEach((t=>{if("image"===t.type&&t.detail.src){const e=t.detail.src,i=h(e);n[i]||(n[i]={type:"image",value:e}),t.detail.src=i}else if("svg"===t.type){const e=t.detail.svg,i=h(e);n[i]||(n[i]={type:"svg",value:e}),t.detail.svg=i}else if("html"===t.type){const e=t.detail.html,i=h(e);n[i]||(n[i]={type:"svg",value:e}),t.detail.html=i}else if("group"===t.type&&Array.isArray(t.detail.children)){const e=t.detail.assets||{};Object.keys(e).forEach((t=>{n[t]||(n[t]=e[t])})),delete t.detail.assets,o(t.detail.children)}}))};return o(i.elements),i.assets=n,i},t.throttle=function(t,e){let n=-1;return function(...i){n>0||(n=setTimeout((()=>{t(...i),n=-1}),e))}},t.toColorHexNum=function(t){return parseInt(t.replace(/^\#/,"0x"))},t.toColorHexStr=function(t){return"#"+t.toString(16)},t.updateElementInList=function t(e,n,i){var o;let r=null;for(let a=0;a<i.length;a++){const l=i[a];if(l.uuid===e){wt(l,n),r=l;break}"group"===l.type&&(r=t(e,n,(null==(o=null==l?void 0:l.detail)?void 0:o.children)||[]))}return r},t.vaildPoint=k,t.vaildTouchPoint=function(t){return!0===k(t)&&t.f>=0},t.validateElements=function t(e){let n=!0;if(Array.isArray(e)){const i=[];e.forEach((e=>{var o;"string"==typeof e.uuid&&e.uuid?i.includes(e.uuid)?(n=!1,console.warn(`Duplicate uuids: ${e.uuid}`)):i.push(e.uuid):(n=!1,console.warn("Element missing uuid",e)),"group"===e.type&&(n=t(null==(o=null==e?void 0:e.detail)?void 0:o.children))}))}return n},t.viewScale=function(t){const{scale:e,point:n,viewScaleInfo:i}=t,{offsetLeft:o,offsetTop:r}=i,a=e/i.scale,l=n.x,s=n.y;return{moveX:l-l*a+(o*a-o),moveY:s-s*a+(r*a-r)}},t.viewScroll=function(t){const{moveX:e=0,moveY:n=0,viewScaleInfo:i,viewSizeInfo:o}=t,{scale:r}=i,{width:a,height:l,contextWidth:s,contextHeight:c}=o;let u=i.offsetLeft,h=i.offsetRight,f=i.offsetTop,d=i.offsetBottom;return u+=e,f+=n,h=a-(s*r+u),d=l-(c*r+f),{scale:r,offsetTop:f,offsetLeft:u,offsetRight:h,offsetBottom:d}},Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t}({});
1
+ var iDrawUtil=function(e){"use strict";var t,n,i=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},o=(e,t,n)=>(i(e,t,"read from private field"),n?n.call(e):t.get(e)),r=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},a=(e,t,n,o)=>(i(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);function l(e){return"string"==typeof e&&(/^\#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(e)||/^[a-z]{1,}$/i.test(e))}const s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function c(){function e(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return`${e()}${e()}-${e()}-${e()}-${e()}-${e()}${e()}${e()}`}function u(e){let t=0;for(let n=0;n<e.length;n++)t+=e.charCodeAt(n)*e.charCodeAt(n)*n*n;return t.toString(16).substring(0,4)}function h(e){const t=e.length,n=Math.floor(t/2),i=e.substring(0,4).padEnd(4,"0"),o=e.substring(0,4).padEnd(4,"0");return`@assets/${u(t.toString(16).padEnd(4,i))}${u(e.substring(n-4,n).padEnd(4,i)).padEnd(4,"f")}-${u(e.substring(n-8,n-4).padEnd(4,i)).padEnd(4,"f")}-${u(e.substring(n-12,n-8).padEnd(4,i)).padEnd(4,"f")}-${u(e.substring(n-16,n-12).padEnd(4,o)).padEnd(4,"f")}-${u(e.substring(n,n+4).padEnd(4,o)).padEnd(4,"f")}${u(e.substring(n+4,n+8).padEnd(4,o)).padEnd(4,"f")}${u(o.padEnd(4,i).padEnd(4,o))}`}function d(e){return/^@assets\/[0-9a-z]{8,8}\-[0-9a-z]{4,4}\-[0-9a-z]{4,4}\-[0-9a-z]{4,4}\-[0-9a-z]{12,12}$/.test(`${e}`)}function f(e){return function e(t){const n=function(e){return Object.prototype.toString.call(e).replace(/[\]|\[]{1,1}/gi,"").split(" ")[1]}(t);if(["Null","Number","String","Boolean","Undefined"].indexOf(n)>=0)return t;if("Array"===n){const n=[];return t.forEach((t=>{n.push(e(t))})),n}if("Object"===n){const n={};Object.keys(t).forEach((i=>{n[i]=e(t[i])}));return Object.getOwnPropertySymbols(t).forEach((i=>{n[i]=e(t[i])})),n}}(e)}function g(e){return(Object.prototype.toString.call(e)||"").replace(/(\[object|\])/gi,"").trim()}const x={type(e,t){const n=g(e);return!0===t?n.toLocaleLowerCase():n},array:e=>"Array"===g(e),json:e=>"Object"===g(e),function:e=>"Function"===g(e),asyncFunction:e=>"AsyncFunction"===g(e),string:e=>"String"===g(e),number:e=>"Number"===g(e),undefined:e=>"Undefined"===g(e),null:e=>"Null"===g(e),promise:e=>"Promise"===g(e)};const{Image:y}=window;function p(e){return new Promise(((t,n)=>{const i=new y;i.crossOrigin="anonymous",i.onload=function(){t(i)},i.onabort=n,i.onerror=n,i.src=e}))}function m(e){return"number"==typeof e&&(e>0||e<=0)}function w(e){return"number"==typeof e&&e>=0}function v(e){return"string"==typeof e&&/^(http:\/\/|https:\/\/|\.\/|\/)/.test(`${e}`)}function b(e){return"string"==typeof e&&/^(data:image\/)/.test(`${e}`)}const P={x:function(e){return m(e)},y:function(e){return m(e)},w:w,h:function(e){return"number"==typeof e&&e>=0},angle:function(e){return"number"==typeof e&&e>=-360&&e<=360},number:m,numberStr:function(e){return/^(-?\d+(?:\.\d+)?)$/.test(`${e}`)},borderWidth:function(e){return w(e)},borderRadius:function(e){return m(e)&&e>=0},color:function(e){return l(e)},imageSrc:function(e){return b(e)||v(e)},imageURL:v,imageBase64:b,svg:function(e){return"string"==typeof e&&/^(<svg[\s]{1,}|<svg>)/i.test(`${e}`.trim())&&/<\/[\s]{0,}svg>$/i.test(`${e}`.trim())},html:function(e){let t=!1;if("string"==typeof e){let n=document.createElement("div");n.innerHTML=e,n.children.length>0&&(t=!0),n=null}return t},text:function(e){return"string"==typeof e},fontSize:function(e){return m(e)&&e>0},lineHeight:function(e){return m(e)&&e>0},textAlign:function(e){return["center","left","right"].includes(e)},fontFamily:function(e){return"string"==typeof e&&e.length>0},fontWeight:function(e){return["bold"].includes(e)},strokeWidth:function(e){return m(e)&&e>0}};function M(e={}){const{borderColor:t,borderRadius:n,borderWidth:i}=e;return!(e.hasOwnProperty("borderColor")&&!P.color(t))&&(!(e.hasOwnProperty("borderRadius")&&!P.number(n))&&!(e.hasOwnProperty("borderWidth")&&!P.number(i)))}const R={attrs:function(e){const{x:t,y:n,w:i,h:o,angle:r}=e;return!!(P.x(t)&&P.y(n)&&P.w(i)&&P.h(o)&&P.angle(r))&&(r>=-360&&r<=360)},textDesc:function(e){const{text:t,color:n,fontSize:i,lineHeight:o,fontFamily:r,textAlign:a,fontWeight:l,background:s,strokeWidth:c,strokeColor:u}=e;return!!P.text(t)&&(!!P.color(n)&&(!!P.fontSize(i)&&(!(e.hasOwnProperty("background")&&!P.color(s))&&(!(e.hasOwnProperty("fontWeight")&&!P.fontWeight(l))&&(!(e.hasOwnProperty("lineHeight")&&!P.lineHeight(o))&&(!(e.hasOwnProperty("fontFamily")&&!P.fontFamily(r))&&(!(e.hasOwnProperty("textAlign")&&!P.textAlign(a))&&(!(e.hasOwnProperty("strokeWidth")&&!P.strokeWidth(c))&&(!(e.hasOwnProperty("strokeColor")&&!P.color(u))&&!!M(e))))))))))},rectDesc:function(e){const{background:t}=e;return!(e.hasOwnProperty("background")&&!P.color(t))&&!!M(e)},circleDesc:function(e){const{background:t,borderColor:n,borderWidth:i}=e;return!(e.hasOwnProperty("background")&&!P.color(t))&&(!(e.hasOwnProperty("borderColor")&&!P.color(n))&&!(e.hasOwnProperty("borderWidth")&&!P.number(i)))},imageDesc:function(e){const{src:t}=e;return!!P.imageSrc(t)},svgDesc:function(e){const{svg:t}=e;return!!P.svg(t)},htmlDesc:function(e){const{html:t}=e;return!!P.html(t)}};class I{constructor(e,i){r(this,t,void 0),r(this,n,void 0),a(this,t,e),a(this,n,{devicePixelRatio:1,offscreenCanvas:null,...i})}$undoPixelRatio(e){return e/o(this,n).devicePixelRatio}$doPixelRatio(e){return o(this,n).devicePixelRatio*e}$getContext(){return o(this,t)}$setFont(e){const n=[];e.fontWeight&&n.push(`${e.fontWeight}`),n.push(`${this.$doPixelRatio(e.fontSize||12)}px`),n.push(`${e.fontFamily||"sans-serif"}`),o(this,t).font=`${n.join(" ")}`}$getOffscreenCanvas(){return o(this,n).offscreenCanvas}$resize(e){const{width:i,height:r,devicePixelRatio:l,resetStyle:s}=e,{canvas:c}=o(this,t);c.width=i*l,c.height=r*l,a(this,n,{...o(this,n),devicePixelRatio:l}),!0===s&&(c.style.width=`${i}px`,c.style.height=`${r}px`)}$getSize(){const{devicePixelRatio:e}=o(this,n),{width:i,height:r}=o(this,t).canvas;return{width:i/e,height:r/e,devicePixelRatio:e}}get canvas(){return o(this,t).canvas}get fillStyle(){return o(this,t).fillStyle}set fillStyle(e){o(this,t).fillStyle=e}get strokeStyle(){return o(this,t).strokeStyle}set strokeStyle(e){o(this,t).strokeStyle=e}get lineWidth(){return this.$undoPixelRatio(o(this,t).lineWidth)}set lineWidth(e){o(this,t).lineWidth=this.$doPixelRatio(e)}get textAlign(){return o(this,t).textAlign}set textAlign(e){o(this,t).textAlign=e}get textBaseline(){return o(this,t).textBaseline}set textBaseline(e){o(this,t).textBaseline=e}get globalAlpha(){return o(this,t).globalAlpha}set globalAlpha(e){o(this,t).globalAlpha=e}get shadowColor(){return o(this,t).shadowColor}set shadowColor(e){o(this,t).shadowColor=e}get shadowOffsetX(){return this.$undoPixelRatio(o(this,t).shadowOffsetX)}set shadowOffsetX(e){o(this,t).shadowOffsetX=this.$doPixelRatio(e)}get shadowOffsetY(){return this.$undoPixelRatio(o(this,t).shadowOffsetY)}set shadowOffsetY(e){o(this,t).shadowOffsetY=this.$doPixelRatio(e)}get shadowBlur(){return this.$undoPixelRatio(o(this,t).shadowBlur)}set shadowBlur(e){o(this,t).shadowBlur=this.$doPixelRatio(e)}get lineCap(){return o(this,t).lineCap}set lineCap(e){o(this,t).lineCap=e}get globalCompositeOperation(){return o(this,t).globalCompositeOperation}set globalCompositeOperation(e){o(this,t).globalCompositeOperation=e}fill(...e){return o(this,t).fill(...e)}arc(e,n,i,r,a,l){return o(this,t).arc(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),r,a,l)}rect(e,n,i,r){return o(this,t).rect(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}fillRect(e,n,i,r){return o(this,t).fillRect(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}clearRect(e,n,i,r){return o(this,t).clearRect(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}beginPath(){return o(this,t).beginPath()}closePath(){return o(this,t).closePath()}lineTo(e,n){return o(this,t).lineTo(this.$doPixelRatio(e),this.$doPixelRatio(n))}moveTo(e,n){return o(this,t).moveTo(this.$doPixelRatio(e),this.$doPixelRatio(n))}arcTo(e,n,i,r,a){return o(this,t).arcTo(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r),this.$doPixelRatio(a))}getLineDash(){return o(this,t).getLineDash()}setLineDash(e){const n=e.map((e=>this.$doPixelRatio(e)));return o(this,t).setLineDash(n)}stroke(e){return e?o(this,t).stroke(e):o(this,t).stroke()}translate(e,n){return o(this,t).translate(this.$doPixelRatio(e),this.$doPixelRatio(n))}rotate(e){return o(this,t).rotate(e)}drawImage(...e){const n=e[0],i=e[1],r=e[2],a=e[3],l=e[4],s=e[e.length-4],c=e[e.length-3],u=e[e.length-2],h=e[e.length-1];return 9===e.length?o(this,t).drawImage(n,this.$doPixelRatio(i),this.$doPixelRatio(r),this.$doPixelRatio(a),this.$doPixelRatio(l),this.$doPixelRatio(s),this.$doPixelRatio(c),this.$doPixelRatio(u),this.$doPixelRatio(h)):o(this,t).drawImage(n,this.$doPixelRatio(s),this.$doPixelRatio(c),this.$doPixelRatio(u),this.$doPixelRatio(h))}createPattern(e,n){return o(this,t).createPattern(e,n)}measureText(e){return o(this,t).measureText(e)}fillText(e,n,i,r){return void 0!==r?o(this,t).fillText(e,this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r)):o(this,t).fillText(e,this.$doPixelRatio(n),this.$doPixelRatio(i))}strokeText(e,n,i,r){return void 0!==r?o(this,t).strokeText(e,this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r)):o(this,t).strokeText(e,this.$doPixelRatio(n),this.$doPixelRatio(i))}save(){o(this,t).save()}restore(){o(this,t).restore()}scale(e,n){o(this,t).scale(e,n)}circle(e,n,i,r,a,l,s,c){o(this,t).ellipse(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r),a,l,s,c)}isPointInPath(e,n){return o(this,t).isPointInPath(this.$doPixelRatio(e),this.$doPixelRatio(n))}clip(...e){return o(this,t).clip(...e)}setTransform(e,n,i,r,a,l){return o(this,t).setTransform(e,n,i,r,a,l)}getTransform(){return o(this,t).getTransform()}createLinearGradient(e,n,i,r){return o(this,t).createLinearGradient(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r))}createRadialGradient(e,n,i,r,a,l){return o(this,t).createRadialGradient(this.$doPixelRatio(e),this.$doPixelRatio(n),this.$doPixelRatio(i),this.$doPixelRatio(r),this.$doPixelRatio(a),this.$doPixelRatio(l))}createConicGradient(e,n,i){return o(this,t).createConicGradient(e,this.$doPixelRatio(n),this.$doPixelRatio(i))}}function $(e){const{width:t,height:n,ctx:i,devicePixelRatio:o}=e;let r=i;if(!r){const e=document.createElement("canvas");e.width=t*o,e.height=n*o,r=e.getContext("2d")}return new I(r,e)}function E(e){const{width:t,height:n,devicePixelRatio:i}=e,o=new OffscreenCanvas(t*i,n*i),r=o.getContext("2d").canvas.getContext("2d");return new I(r,{devicePixelRatio:i,offscreenCanvas:o})}t=new WeakMap,n=new WeakMap;function A(e,t){const n=(e.x-t.x)*(e.x-t.x)+(e.y-t.y)*(e.y-t.y);return 0===n?n:Math.sqrt(n)}function S(e,t){return e.x===t.x&&e.y===t.y&&e.t===t.t}function C(e){return e>=0||e<0}function k(e){return C(e.x)&&C(e.y)&&e.t>0}function z(e,t){return{x:e.x+(t.x-e.x)/2,y:e.y+(t.y-e.y)/2}}function O(e){return e/180*Math.PI}function T(e,t,n,i){const o=O(t||0);n&&(o>0||o<0)&&(e.translate(n.x,n.y),e.rotate(o),e.translate(-n.x,-n.y)),i(e),n&&(o>0||o<0)&&(e.translate(n.x,n.y),e.rotate(-o),e.translate(-n.x,-n.y))}function L(e){return{x:e.x+e.w/2,y:e.y+e.h/2}}function D(e){const t=Math.min(e[0].x,e[1].x,e[2].x,e[3].x),n=Math.min(e[0].y,e[1].y,e[2].y,e[3].y);return L({x:t,y:n,w:Math.max(e[0].x,e[1].x,e[2].x,e[3].x)-t,h:Math.max(e[0].y,e[1].y,e[2].y,e[3].y)-n})}function j(e,t,n){const i=function(e,t){const n=t.x-e.x,i=t.y-e.y;if(0===n){if(i<0)return 0;if(i>0)return Math.PI}else if(0===i){if(n<0)return 3*Math.PI/2;if(n>0)return Math.PI/2}return n>0&&i<0?Math.atan(Math.abs(n)/Math.abs(i)):n>0&&i>0?Math.PI-Math.atan(Math.abs(n)/Math.abs(i)):n<0&&i>0?Math.PI+Math.atan(Math.abs(n)/Math.abs(i)):n<0&&i<0?2*Math.PI-Math.atan(Math.abs(n)/Math.abs(i)):0}(e,t);let o=i+n;o>2*Math.PI?o-=2*Math.PI:o<0-2*Math.PI&&(o+=2*Math.PI),o<0&&(o+=2*Math.PI);const r=A(e,t);let a=0,l=0;return 0===o?(a=0,l=0-r):o>0&&o<Math.PI/2?(a=Math.sin(o)*r,l=0-Math.cos(o)*r):o===Math.PI/2?(a=r,l=0):o>Math.PI/2&&o<Math.PI?(a=Math.sin(Math.PI-o)*r,l=Math.cos(Math.PI-o)*r):o===Math.PI?(a=0,l=r):o>Math.PI&&o<1.5*Math.PI?(a=0-Math.sin(o-Math.PI)*r,l=Math.cos(o-Math.PI)*r):o===1.5*Math.PI?(a=0-r,l=0):o>1.5*Math.PI&&o<2*Math.PI?(a=0-Math.sin(2*Math.PI-o)*r,l=0-Math.cos(2*Math.PI-o)*r):o===2*Math.PI&&(a=0,l=0-r),a+=e.x,l+=e.y,{x:a,y:l}}function W(e,t,n){const{x:i,y:o,w:r,h:a}=e;let l={x:i,y:o},s={x:i+r,y:o},c={x:i+r,y:o+a},u={x:i,y:o+a};if(n&&(n>0||n<0)){const e=O(V(n));l=j(t,l,e),s=j(t,s,e),c=j(t,c,e),u=j(t,u,e)}return[l,s,c,u]}function F(e){const{angle:t=0}=e;return W(e,L(e),t)}function H(e,t,n){return[j(e,{x:t[0].x,y:t[0].y},n),j(e,{x:t[1].x,y:t[1].y},n),j(e,{x:t[2].x,y:t[2].y},n),j(e,{x:t[3].x,y:t[3].y},n)]}function V(e){if(!(e>0||e<0)||0===e)return 0;let t=e%360;return t<0&&(t+=360),t}function N(e,t){const n={x:0,y:0,w:0,h:0};e.forEach((e=>{const t={x:e.x,y:e.y,w:e.w,h:e.h,angle:e.angle};if(t.angle&&(t.angle>0||t.angle<0)){const e=F(t);if(4===e.length){const n=[e[0].x,e[1].x,e[2].x,e[3].x],i=[e[0].y,e[1].y,e[2].y,e[3].y];t.x=Math.min(...n),t.y=Math.min(...i),t.w=Math.abs(Math.max(...n)-Math.min(...n)),t.h=Math.abs(Math.max(...i)-Math.min(...i))}}const i=Math.min(t.x,n.x),o=Math.min(t.y,n.y),r=Math.max(t.x+t.w,n.x+n.w),a=Math.max(t.y+t.h,n.y+n.h);n.x=i,n.y=o,n.w=Math.abs(r-i),n.h=Math.abs(a-o)})),(null==t?void 0:t.extend)&&(n.x=Math.min(n.x,0),n.y=Math.min(n.y,0));const i={contextWidth:n.w,contextHeight:n.h};return(null==t?void 0:t.viewWidth)&&(null==t?void 0:t.viewHeight)&&(null==t?void 0:t.viewWidth)>0&&(null==t?void 0:t.viewHeight)>0&&(t.viewWidth>n.x+n.w&&(i.contextWidth=t.viewWidth-n.x),t.viewHeight>n.y+n.h&&(i.contextHeight=t.viewHeight-n.y)),i}function B(e,t){let n=null,i=t;for(let t=0;t<e.length;t++){const o=i[e[t]];if(t<e.length-1&&"group"===o.type)i=o.detail.children;else{if(t!==e.length-1)break;n=o}}return n}function G(e,t){const n=[];let i=!1;const o=t=>{var r;for(let a=0;a<t.length&&!0!==i;a++){n.push(a);const l=t[a];if(l.uuid===e){i=!0;break}if("group"===l.type&&o((null==(r=null==l?void 0:l.detail)?void 0:r.children)||[]),i)break;n.pop()}};return o(t),n}function U(e,t){const n=e.x,i=e.y,o=e.x+e.w,r=e.y+e.h,a=t.x,l=t.y,s=t.x+t.w,c=t.y+t.h;return n<=s&&o>=a&&i<=c&&r>=l}function _(e,t){const{viewScaleInfo:n}=t,{x:i,y:o,w:r,h:a,angle:l}=e,{scale:s,offsetTop:c,offsetLeft:u}=n;return{x:i*s+u,y:o*s+c,w:r*s,h:a*s,angle:l}}function Q(e,t){const{viewScaleInfo:n}=t,{x:i,y:o}=e,{scale:r,offsetTop:a,offsetLeft:l}=n;return{x:i*r+l,y:o*r+a}}function Y(e,t){const{context2d:n,element:i,viewScaleInfo:o,viewSizeInfo:r}=t,{angle:a=0}=i,{x:l,y:s,w:c,h:u}=_(i,{viewScaleInfo:o,viewSizeInfo:r}),h=F({x:l,y:s,w:c,h:u,angle:a});if(h.length>=2){n.beginPath(),n.moveTo(h[0].x,h[0].y);for(let e=1;e<h.length;e++)n.lineTo(h[e].x,h[e].y);n.closePath()}return!!n.isPointInPath(e.x,e.y)}function X(e){const{x:t,y:n,h:i,w:o}=e;return[{x:t,y:n},{x:t+o,y:n},{x:t+o,y:n+i},{x:t,y:n+i}]}function q(e){const{x:t,y:n,w:i,h:o,angle:r=0}=e;return 0===r?X(e):W(e,L({x:t,y:n,w:i,h:o,angle:r}),r)}function Z(e){const t=[];let n=0,i=0;const o=[],r=[...e];for(let e=0;e<r.length;e++){const{x:a,y:l,w:s,h:c,angle:u=0}=r[e];let h;if(n+=a,i+=l,0===e){const e={x:n,y:i,w:s,h:c,angle:u};h=q({x:a,y:l,w:s,h:c,angle:u}),o.push({center:L(e),angle:u,radian:O(u)})}else{h=X({x:n,y:i,w:s,h:c,angle:u});for(let e=0;e<o.length;e++){const{center:t,radian:n}=o[e];h=H(t,h,n)}const e=D(h);if(u>0||u<0){h=H(e,h,O(u))}o.push({center:e,angle:u,radian:O(u)})}t.push(h)}return t}function J(e,t){const{groupQueue:n}=t;if(!(n.length>0))return[q(e)];return Z([...n,e])}function K(e,t){return J(e,t).pop()||null}function ee(e,t){const{x:n,y:i}=e,{size:o,angle:r}=t;return{x:n-o/2,y:i-o/2,w:o,h:o,angle:r}}const te=/([astvzqmhlc])([^astvzqmhlc]*)/gi,ne=/(-?\d+(?:\.\d+)?)/gi;const ie=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g,oe=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,re=/^\s*$/,ae={};function le(e){const t={type:"element",name:"",isVoid:!1,attributes:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(ae[n[1]]||"/"===e.charAt(e.length-2))&&(t.isVoid=!0),t.name.startsWith("!--"))){const t=e.indexOf("--\x3e");return{type:"comment",name:null,attributes:{},children:[],isVoid:!1,comment:-1!==t?e.slice(4,t):""}}const i=new RegExp(ie);let o=null;for(;o=i.exec(e),null!==o;)if(o[0].trim())if(o[1]){const e=o[1].trim();let n=[e,""];e.indexOf("=")>-1&&(n=e.split("=")),t.attributes[n[0]]=n[1],i.lastIndex--}else o[2]&&(t.attributes[o[2]]=o[3].trim().substring(1,o[3].length-1));return t}function se(e,t){switch(t.type){case"text":return e+t.textContent;case"element":return e+="<"+t.name+(t.attributes?function(e){const t=[];for(let n in e)t.push(n+'="'+e[n]+'"');return t.length?" "+t.join(" "):""}(t.attributes):"")+(t.isVoid?"/>":">"),t.isVoid?e:e+t.children.reduce(se,"")+"</"+t.name+">";case"comment":return e+="\x3c!--"+t.comment+"--\x3e"}}function ce(e,t){let n=2;return void 0!==(null==t?void 0:t.decimalPlaces)&&(null==t?void 0:t.decimalPlaces)>=0&&(n=t.decimalPlaces),parseFloat(e.toFixed(n))}function ue(e){return e[1]!=-1*e[3]||e[4]!=e[0]||e[0]*e[4]-e[3]*e[1]!=1?null:Math.acos(e[0])}const he="Text Element";function de(){return{boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,lineHeight:20,fontFamily:"sans-serif",fontWeight:400,overflow:"hidden"}}function fe(){return{background:"#D9D9D9"}}const ge={boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,lineHeight:20,fontFamily:"sans-serif",fontWeight:400,overflow:"hidden"};const xe=e=>ce(e,{decimalPlaces:4});function ye(e,t){const{detail:n}=e,{xRatio:i,yRatio:o,maxRatio:r}=t,a=(i+o)/2,{borderWidth:l,borderRadius:s,borderDash:c,shadowOffsetX:u,shadowOffsetY:h,shadowBlur:d}=n;if("number"==typeof l)n.borderWidth=xe(l*a);else if(Array.isArray(n.borderWidth)){const e=l;n.borderWidth=[xe(e[0]*o),xe(e[1]*i),xe(e[2]*o),xe(e[3]*i)]}if("number"==typeof s)n.borderRadius=xe(s*a);else if(Array.isArray(n.borderRadius)){const e=s;n.borderRadius=[e[0]*i,e[1]*i,e[2]*o,e[3]*o]}Array.isArray(c)&&c.forEach(((e,t)=>{n.borderDash[t]=xe(e*r)})),"number"==typeof u&&(n.shadowOffsetX=xe(u*r)),"number"==typeof h&&(n.shadowOffsetX=xe(h*r)),"number"==typeof d&&(n.shadowOffsetX=xe(d*r))}function pe(e,t){const{type:n}=e;!function(e,t){const{xRatio:n,yRatio:i}=t,{x:o,y:r,w:a,h:l}=e;e.x=xe(o*n),e.y=xe(r*i),e.w=xe(a*n),e.h=xe(l*i),ye(e,t)}(e,t),"circle"===n||("text"===n?function(e,t){const{minRatio:n,maxRatio:i}=t,{fontSize:o,lineHeight:r}=e.detail,a=(n+i)/2;o&&o>0&&(e.detail.fontSize=xe(o*a)),r&&r>0&&(e.detail.lineHeight=xe(r*a))}(e,t):"image"===n||"svg"===n||"html"===n||"path"===n||"group"===n&&Array.isArray(e.detail.children)&&e.detail.children.forEach((e=>{pe(e,t)})))}function me(e,t){const n=t.w&&t.w>0?t.w:e.w,i=t.h&&t.h>0?t.h:e.h,o=n/e.w,r=i/e.h;if(o===r&&1===o)return e;const a=Math.min(o,r),l=Math.max(o,r);e.w=n,e.h=i;const s={xRatio:o,yRatio:r,minRatio:a,maxRatio:l};return"group"===e.type&&Array.isArray(e.detail.children)&&e.detail.children.forEach((e=>{pe(e,s)})),ye(e,s),e}const we=200,ve=200;function be(e,t,n){let i=!1;if(1===t.length){const o=t[0];n.splice(o,0,e),i=!0}else if(t.length>1){let o=n;for(let n=0;n<t.length;n++){const r=o[t[n]];if(n===t.length-1){const r=t[n];o.splice(r,0,e),i=!0}else{if(!(n<t.length-1&&"group"===r.type))break;o=r.detail.children}}}return i}function Pe(e,t){let n=!1;if(1===e.length){const i=e[0];t.splice(i,1),n=!0}else if(e.length>1){let i=t;for(let t=0;t<e.length;t++){const o=i[e[t]];if(t===e.length-1){const o=e[t];i.splice(o,1),n=!0}else{if(!(t<e.length-1&&"group"===o.type))break;i=o.detail.children}}}return n}function Me(e,t){var n;const i=Object.keys(t);for(let o=0;o<i.length;o++){const r=i[o];["x","y","w","h","angle","name"].includes(r)?e[r]=t[r]:["detail","operations"].includes(r)&&(x.json(t[r])?((null==e?void 0:e.hasOwnProperty(r))||(e[r]={}),x.json(e[r])&&(e[r]={...e[r],...t[r]})):x.array(t[r])&&((null==e?void 0:e.hasOwnProperty(r))||(e[r]=[]),x.array(e[r])&&(null==(n=null==t?void 0:t[r])||n.forEach(((t,n)=>{e[r][n]=t})),e[r]=[...e[r],...t[r]])))}return e}return e.Context2D=I,e.EventEmitter=class{constructor(){this._listeners=new Map}on(e,t){if(this._listeners.has(e)){const n=this._listeners.get(e)||[];null==n||n.push(t),this._listeners.set(e,n)}else this._listeners.set(e,[t])}off(e,t){if(this._listeners.has(e)){const n=this._listeners.get(e);if(Array.isArray(n))for(let e=0;e<(null==n?void 0:n.length);e++)if(n[e]===t){n.splice(e,1);break}this._listeners.set(e,n||[])}}trigger(e,t){const n=this._listeners.get(e);return!!Array.isArray(n)&&(n.forEach((e=>{e(t)})),!0)}has(e){if(this._listeners.has(e)){const t=this._listeners.get(e);if(Array.isArray(t)&&t.length>0)return!0}return!1}},e.Store=class{constructor(e){this._backUpDefaultStorage=f(e.defaultStorage),this._temp=this._createTempStorage()}set(e,t){this._temp[e]=t}get(e){return this._temp[e]}getSnapshot(){return f(this._temp)}clear(){this._temp=this._createTempStorage()}_createTempStorage(){return f(this._backUpDefaultStorage)}},e.calcDistance=A,e.calcElementCenter=L,e.calcElementCenterFromVertexes=D,e.calcElementListSize=function(e){var t;const n={x:0,y:0,w:0,h:0};let i=null;for(let o=0;o<e.length;o++){const r=e[o];if(null==(t=null==r?void 0:r.operations)?void 0:t.invisible)continue;const a={x:r.x,y:r.y,w:r.w,h:r.h,angle:r.angle||0};if(a.angle&&(a.angle>0||a.angle<0)){const e=F(a);if(4===e.length){const t=[e[0].x,e[1].x,e[2].x,e[3].x],n=[e[0].y,e[1].y,e[2].y,e[3].y];a.x=Math.min(...t),a.y=Math.min(...n),a.w=Math.abs(Math.max(...t)-Math.min(...t)),a.h=Math.abs(Math.max(...n)-Math.min(...n))}}if(i){const e=Math.min(a.x,n.x),t=Math.min(a.y,n.y),i=Math.max(a.x+a.w,n.x+n.w),o=Math.max(a.y+a.h,n.y+n.h);n.x=e,n.y=t,n.w=Math.abs(i-e),n.h=Math.abs(o-t)}else n.x=a.x,n.y=a.y,n.w=a.w,n.h=a.h;i=a}return{x:Math.floor(n.x),y:Math.floor(n.y),w:Math.ceil(n.w),h:Math.ceil(n.h)}},e.calcElementQueueVertexesQueueInGroup=Z,e.calcElementSizeController=function(e,t){const{groupQueue:n,controllerSize:i,viewScaleInfo:o}=t,r=(i&&i>0?i:8)/o.scale,{x:a,y:l,w:s,h:u,angle:h=0}=e,d=[{uuid:c(),x:a,y:l,w:s,h:u,angle:h,type:"group",detail:{children:[]}},...n];let f=0;d.forEach((({angle:e=0})=>{f+=e}));const g=K(e,{groupQueue:n}),x=z(g[0],g[1]),y=z(g[1],g[2]),p=z(g[2],g[3]),m=z(g[3],g[0]),w=g[0],v=g[1],b=g[2],P=g[3],M=ee(w,{size:r,angle:f}),R=ee(v,{size:r,angle:f}),I=ee(P,{size:r,angle:f}),$=ee(b,{size:r,angle:f}),E=q(M),A=q(R),S=q(I),C=q($),k=[E[1],A[0],A[3],E[2]],O=[A[3],A[2],C[1],C[0]],T=[S[1],C[0],C[3],S[2]];return{elementWrapper:g,left:{type:"left",vertexes:[E[3],E[2],S[1],S[0]],center:m},right:{type:"right",vertexes:O,center:y},top:{type:"top",vertexes:k,center:x},bottom:{type:"bottom",vertexes:T,center:p},topLeft:{type:"top-left",vertexes:E,center:w},topRight:{type:"top-right",vertexes:A,center:v},bottomLeft:{type:"bottom-left",vertexes:S,center:P},bottomRight:{type:"bottom-right",vertexes:C,center:b}}},e.calcElementVertexesInGroup=K,e.calcElementVertexesQueueInGroup=J,e.calcElementsContextSize=N,e.calcElementsViewInfo=function(e,t,n){const i=N(e,{viewWidth:t.width,viewHeight:t.height,extend:null==n?void 0:n.extend});return!0===(null==n?void 0:n.extend)&&(i.contextWidth=Math.max(i.contextWidth,t.contextWidth),i.contextHeight=Math.max(i.contextHeight,t.contextHeight)),{contextSize:i}},e.calcSpeed=function(e,t){return A(e,t)/Math.abs(t.t-e.t)},e.calcViewBoxSize=function(e,t){const{viewScaleInfo:n}=t,{scale:i}=n;let{borderRadius:o}=e.detail;const{boxSizing:r=ge.boxSizing,borderWidth:a}=e.detail;Array.isArray(a)&&(o=0);let{x:l,y:s,w:c,h:u}=e,h=[0,0,0,0];if("number"==typeof o){const e=o*i;h=[e,e,e,e]}else Array.isArray(o)&&4===(null==o?void 0:o.length)&&(h=[o[0]*i,o[1]*i,o[2]*i,o[3]*i]);let d=0;return"number"==typeof a&&(d=(a||0)*i),"border-box"===r?(l=e.x+d/2,s=e.y+d/2,c=e.w-d,u=e.h-d):"content-box"===r?(l=e.x-d/2,s=e.y-d/2,c=e.w+d,u=e.h+d):(l=e.x,s=e.y,c=e.w,u=e.h),c=Math.max(c,1),u=Math.max(u,1),h=h.map((e=>Math.min(e,c/2,u/2))),{x:l,y:s,w:c,h:u,radiusList:h}},e.calcViewElementSize=_,e.calcViewPointSize=Q,e.calcViewScaleInfo=function(e,t){const{scale:n,offsetX:i,offsetY:o}=e,{viewSizeInfo:r}=t,{width:a,height:l,contextWidth:s,contextHeight:c}=r,u=0-i*n,h=0-o*n;return{scale:n,offsetLeft:u,offsetTop:h,offsetRight:a-(s*n+u/n),offsetBottom:l-(c*n+h/n)}},e.calcViewVertexes=function(e,t){return[Q(e[0],t),Q(e[1],t),Q(e[2],t),Q(e[3],t)]},e.check=R,e.checkRectIntersect=U,e.colorNameToHex=function(e){const t=e.toLowerCase(),n=s[t];return"string"==typeof n?n:null},e.colorToCSS=function(e){let t="transparent";if("string"==typeof e)t=e;else if("linear-gradient"===(null==e?void 0:e.type)){const n=[];"number"==typeof e.angle?n.push(`${e.angle}deg`):n.push("180deg"),Array.isArray(e.stops)&&e.stops.forEach((e=>{n.push(`${e.color} ${100*e.offset}%`)})),t=`linear-gradient(${n.join(", ")})`}else if("radial-gradient"===(null==e?void 0:e.type)){const n=[];Array.isArray(e.stops)&&e.stops.forEach((e=>{n.push(`${e.color} ${100*e.offset}%`)})),t=`radial-gradient(circle, ${n.join(", ")})`}return t},e.colorToLinearGradientCSS=function(e){let t="transparent";if("string"==typeof e)t=e;else if("radial-gradient"===(null==e?void 0:e.type)||"linear-gradient"===(null==e?void 0:e.type)){const n=[];Array.isArray(e.stops)&&e.stops.length>0&&(e.stops.forEach(((t,i)=>{n.push(`${t.color} ${100*t.offset}%`),i===e.stops.length-1&&t.offset<1&&n.push(`${t.color} ${100*t.offset}%`)})),t=`linear-gradient(90deg, ${n.join(", ")})`)}return t},e.compose=function(e){return function(t,n){return function i(o){let r=e[o];o===e.length&&n&&(r=n);if(!r)return Promise.resolve();try{return Promise.resolve(r(t,i.bind(null,o+1)))}catch(e){return Promise.reject(e)}}(0)}},e.compressImage=function(e,t){let n=.5;const i=(null==t?void 0:t.type)||"image/png";return(null==t?void 0:t.radio)&&(null==t?void 0:t.radio)>0&&(null==t?void 0:t.radio)<=1&&(n=null==t?void 0:t.radio),new Promise(((t,o)=>{const r=new Image;r.addEventListener("load",(()=>{const{width:e,height:o}=r,a=e*n,l=o*n;let s=document.createElement("canvas");s.width=a,s.height=l;s.getContext("2d").drawImage(r,0,0,a,l);const c=s.toDataURL(i);s=null,t(c)})),r.addEventListener("error",(e=>{o(e)})),r.src=e}))},e.createAssetId=h,e.createBoardContent=function(e,t){const{width:n,height:i,devicePixelRatio:o,offscreen:r}=t,a={width:n,height:i,devicePixelRatio:o};if(!0===r){const t=e.getContext("2d"),n=E(a),i=E(a),o=E(a),r=$({ctx:t,...a}),l=()=>{const{width:e,height:t}=n.$getSize();r.clearRect(0,0,e,t),r.drawImage(o.canvas,0,0,e,t),r.drawImage(n.canvas,0,0,e,t),r.drawImage(i.canvas,0,0,e,t),o.clearRect(0,0,e,t),n.clearRect(0,0,e,t),i.clearRect(0,0,e,t)};return{underContext:o,viewContext:n,helperContext:i,boardContext:r,drawView:l}}{const t=e.getContext("2d"),o=$(a),r=$(a),l=$(a),s=$({ctx:t,...a}),c=()=>{s.clearRect(0,0,n,i),s.drawImage(l.canvas,0,0,n,i),s.drawImage(o.canvas,0,0,n,i),s.drawImage(r.canvas,0,0,n,i),l.clearRect(0,0,n,i),o.clearRect(0,0,n,i),r.clearRect(0,0,n,i)};return{underContext:l,viewContext:o,helperContext:r,boardContext:s,drawView:c}}},e.createContext2D=$,e.createElement=function(e,t,n){const i=function(e,t){let n=0,i=0,o=we,r=ve;if(t){const{viewScaleInfo:a,viewSizeInfo:l}=t,{scale:s,offsetLeft:c,offsetTop:u}=a,{width:h,height:d}=l,f=h/4,g=d/4;o=we>=f?f/s:we/s,r=ve>=g?g/s:ve/s,["circle","svg","image"].includes(e)?o=r=Math.max(o,r):"text"===e&&(r=o/he.length*2),n=(0-c+h/2-o*s/2)/s,i=(0-u+d/2-r*s/2)/s}return{x:n,y:i,w:o,h:r}}(e,n);let o={};return"rect"===e?o={background:"#D9D9D9"}:"circle"===e?o={background:"#D9D9D9",radius:0}:"text"===e?o=function(e){const t={boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,lineHeight:20,fontFamily:"sans-serif",fontWeight:400,overflow:"hidden"};return{text:he,color:t.color,fontFamily:t.fontFamily,fontWeight:t.fontWeight,lineHeight:e.w/he.length,fontSize:e.w/he.length,textAlign:"center",verticalAlign:"middle"}}(i):"svg"===e?o={svg:'<svg t="1701004189871" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3-12.3 12.7-12.1 32.9 0.6 45.3l183.7 179.1-43.4 252.9c-1.2 6.9-0.1 14.1 3.2 20.3 8.2 15.6 27.6 21.7 43.2 13.4L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3zM664.8 561.6l36.1 210.3L512 672.7 323.1 772l36.1-210.3-152.8-149L417.6 382 512 190.7 606.4 382l211.2 30.7-152.8 148.9z" fill="#2c2c2c"></path></svg>'}:"image"===e?o={src:"data:image/svg+xml;base64,PHN2ZyAgIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxwYXRoIGQ9Ik05MjggMTYwSDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NDBjMCAxNy43IDE0LjMgMzIgMzIgMzJoODMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnogbS00MCA2MzJIMTM2di0zOS45bDEzOC41LTE2NC4zIDE1MC4xIDE3OEw2NTguMSA0ODkgODg4IDc2MS42Vjc5MnogbTAtMTI5LjhMNjY0LjIgMzk2LjhjLTMuMi0zLjgtOS0zLjgtMTIuMiAwTDQyNC42IDY2Ni40bC0xNDQtMTcwLjdjLTMuMi0zLjgtOS0zLjgtMTIuMiAwTDEzNiA2NTIuN1YyMzJoNzUydjQzMC4yeiIgIGZpbGw9IiM1MTUxNTEiPjwvcGF0aD48cGF0aCBkPSJNMzA0IDQ1NmM0OC42IDAgODgtMzkuNCA4OC04OHMtMzkuNC04OC04OC04OC04OCAzOS40LTg4IDg4IDM5LjQgODggODggODh6IG0wLTExNmMxNS41IDAgMjggMTIuNSAyOCAyOHMtMTIuNSAyOC0yOCAyOC0yOC0xMi41LTI4LTI4IDEyLjUtMjggMjgtMjh6IiAgZmlsbD0iIzUxNTE1MSI+PC9wYXRoPjwvc3ZnPg=="}:"group"===e&&(o={children:[],background:"#D9D9D9",overflow:"hidden"}),{...i,...t,uuid:c(),type:e,detail:{...o,...t.detail||{}}}},e.createOffscreenContext2D=E,e.createUUID=c,e.deepClone=f,e.deepCloneElement=function(e){const t=f(e),n=e=>{e.uuid=c(),"group"===e.type&&e.detail.children&&e.detail.children.forEach((e=>{n(e)}))};return n(t),t},e.deepResizeGroupElement=me,e.delay=function(e){return new Promise((t=>{setTimeout((()=>{t()}),e)}))},e.deleteElementInList=function(e,t){return Pe(G(e,t),t)},e.deleteElementInListByPosition=Pe,e.downloadFileFromText=function(e,t){const{fileName:n}=t,i=function(e){const t=(new TextEncoder).encode(e),n=new Blob([t],{type:"text/plain;charset=utf-8"});return window.URL.createObjectURL(n)}(e);let o=document.createElement("a");o.href=i,o.download=n,o.click(),o=null},e.downloadImageFromCanvas=function(e,t){const{fileName:n,type:i="image/jpeg"}=t,o=e.toDataURL(i);let r=document.createElement("a");r.href=o,r.download=n,r.click(),r=null},e.equalPoint=S,e.equalTouchPoint=function(e,t){return!0===S(e,t)&&e.f===t.f},e.filterCompactData=function(e,t){const n=e.assets||{},i=f(e),o=(null==t?void 0:t.loadItemMap)||{},r=e=>{e.forEach((e=>{var t,i,a;if("image"===e.type&&e.detail.src){const i=e.detail.src;if(d(i)&&!n[i]&&o[i]&&"string"==typeof(null==(t=o[i])?void 0:t.source))n[i]={type:"image",value:o[i].source};else{const t=h(i);n[t]||(n[t]={type:"image",value:i}),e.detail.src=t}}else if("svg"===e.type){const t=e.detail.svg,r=h(t);d(t)&&!n[t]&&o[t]&&"string"==typeof(null==(i=o[t])?void 0:i.source)?n[t]={type:"svg",value:o[t].source}:n[r]||(n[r]={type:"svg",value:t}),e.detail.svg=r}else if("html"===e.type){const t=e.detail.html,i=h(t);d(t)&&!n[t]&&o[t]&&"string"==typeof(null==(a=o[t])?void 0:a.source)?n[t]={type:"html",value:o[t].source}:n[i]||(n[i]={type:"html",value:t}),e.detail.html=i}else if("group"===e.type&&Array.isArray(e.detail.children)){const t=e.detail.assets||{};Object.keys(t).forEach((e=>{n[e]||(n[e]=t[e])})),delete e.detail.assets,r(e.detail.children)}}))};return r(i.elements),i.assets=n,i},e.filterElementAsset=function(e){let t=null,n=null,i=null;return"image"===e.type?i=e.detail.src:"svg"===e.type?i=e.detail.svg:"html"===e.type&&(i=e.detail.html),"string"!=typeof i||d(i)||(t=h(i),n={type:e.type,value:i},"image"===e.type?e.detail.src=t:"svg"===e.type?e.detail.svg=t:"html"===e.type&&(e.detail.html=t)),{element:e,assetId:t,assetItem:n}},e.findElementFromList=function e(t,n){var i;let o=null;for(let r=0;r<n.length;r++){const a=n[r];if(a.uuid===t){o=a;break}if(!o&&"group"===a.type){const n=e(t,(null==(i=null==a?void 0:a.detail)?void 0:i.children)||[]);if((null==n?void 0:n.uuid)===t){o=n;break}}}return o},e.findElementFromListByPosition=B,e.findElementQueueFromListByPosition=function(e,t){const n=[];let i=t;for(let t=0;t<e.length;t++){const o=i[e[t]];if(!o)break;if(n.push(o),!(t<e.length-1&&"group"===o.type))break;i=o.detail.children}return n},e.findElementsFromList=function(e,t){const n=[];return function t(i){var o;for(let r=0;r<i.length;r++){const a=i[r];e.includes(a.uuid)?n.push(a):"group"===a.type&&t((null==(o=null==a?void 0:a.detail)?void 0:o.children)||[])}}(t),n},e.findElementsFromListByPositions=function(e,t){const n=[];return e.forEach((e=>{const i=B(e,t);i&&n.push(i)})),n},e.formatNumber=ce,e.generateHTML=function(e){return e.reduce((function(e,t){return e+se("",t)}),"")},e.generateSVGPath=function(e){let t="";return e.forEach((e=>{t+=e.type+e.params.join(" ")})),t},e.getCenterFromTwoPoints=z,e.getDefaultElementDetailConfig=de,e.getDefaultElementRectDetail=fe,e.getElemenetsAssetIds=function(e){const t=[],n=e=>{e.forEach((e=>{"image"===e.type&&d(e.detail.src)?t.push(e.detail.src):"svg"===e.type&&d(e.detail.svg)?t.push(e.detail.svg):"html"===e.type&&e.detail.html?t.push(e.detail.html):"group"===e.type&&Array.isArray(e.detail.children)&&n(e.detail.children)}))};return n(e),t},e.getElementPositionFromList=G,e.getElementRotateVertexes=W,e.getElementSize=function(e){const{x:t,y:n,w:i,h:o,angle:r}=e;return{x:t,y:n,w:i,h:o,angle:r}},e.getElementVertexes=X,e.getGroupQueueFromList=function(e,t){const n=[];return function e(t,i){var o;let r=null;for(let a=0;a<i.length;a++){const l=i[a];if(l.uuid===t){r=l;break}if(!r&&"group"===l.type){n.push(l);const i=e(t,(null==(o=null==l?void 0:l.detail)?void 0:o.children)||[]);if((null==i?void 0:i.uuid)===t){r=i;break}n.pop()}}return r}(e,t),n},e.getSelectedElementUUIDs=function(e,t){var n;let i=[];return Array.isArray(null==e?void 0:e.elements)&&(null==(n=null==e?void 0:e.elements)?void 0:n.length)>0&&Array.isArray(t)&&t.length>0&&t.forEach((t=>{var n;"number"==typeof t?(null==(n=null==e?void 0:e.elements)?void 0:n[t])&&i.push(e.elements[t].uuid):"string"==typeof t&&(i=i.concat(function(e,t){var n;const i=[];if("string"==typeof t&&/^\d+(\.\d+)*$/.test(t)){const o=t.split(".");let r=e;for(;o.length>0;){const e=o.shift();if("string"==typeof e){const t=r[parseInt(e)];t&&0===o.length?i.push(t.uuid):"group"===t.type&&o.length>0&&(r=(null==(n=null==t?void 0:t.detail)?void 0:n.children)||[])}break}}return i}(e.elements,t)))})),i},e.getViewPointAtElement=function(e,t){var n,i,o;const{context2d:r,data:a,viewScaleInfo:l,viewSizeInfo:s,groupQueue:c}=t,u={index:-1,element:null,groupQueueIndex:-1};if(c&&Array.isArray(c)&&(null==c?void 0:c.length)>0)for(let t=c.length-1;t>=0;t--){let o=0,a=0,h=0;for(let e=0;e<=t;e++)o+=c[e].x,a+=c[e].y,h+=c[e].angle||0;const d=c[t];if(d&&"group"===d.type&&Array.isArray(null==(n=d.detail)?void 0:n.children))for(let n=0;n<d.detail.children.length;n++){const f=d.detail.children[n];if(!0!==(null==(i=null==f?void 0:f.operations)?void 0:i.invisible)){if(!f)break;if(Y(e,{context2d:r,element:{x:o+f.x,y:a+f.y,w:f.w,h:f.h,angle:h+(f.angle||0)},viewScaleInfo:l,viewSizeInfo:s})){u.element=f,(t<c.length-1||"group"!==f.type)&&(u.groupQueueIndex=t);break}}}if(u.element)break}if(u.element)return u;for(let t=a.elements.length-1;t>=0;t--){const n=a.elements[t];if(!0!==(null==(o=null==n?void 0:n.operations)?void 0:o.invisible)&&Y(e,{context2d:r,element:n,viewScaleInfo:l,viewSizeInfo:s})){u.index=t,u.element=n;break}}return u},e.getViewScaleInfoFromSnapshot=function(e){const{activeStore:t}=e;return{scale:null==t?void 0:t.scale,offsetTop:null==t?void 0:t.offsetTop,offsetBottom:null==t?void 0:t.offsetBottom,offsetLeft:null==t?void 0:t.offsetLeft,offsetRight:null==t?void 0:t.offsetRight}},e.getViewSizeInfoFromSnapshot=function(e){const{activeStore:t}=e;return{devicePixelRatio:t.devicePixelRatio,width:null==t?void 0:t.width,height:null==t?void 0:t.height,contextWidth:null==t?void 0:t.contextWidth,contextHeight:null==t?void 0:t.contextHeight}},e.insertElementToListByPosition=be,e.is=P,e.isAssetId=d,e.isColorStr=l,e.isElementInView=function(e,t){const{viewSizeInfo:n,viewScaleInfo:i}=t,{width:o,height:r}=n,{angle:a}=e,{x:l,y:s,w:c,h:u}=_(e,{viewScaleInfo:i,viewSizeInfo:n}),h=F({x:l,y:s,w:c,h:u,angle:a}),d={x:0,y:0,w:o,h:r},f=Math.min(h[0].x,h[1].x,h[2].x,h[3].x),g=Math.min(h[0].y,h[1].y,h[2].y,h[3].y);return U(d,{x:f,y:g,w:Math.max(h[0].x,h[1].x,h[2].x,h[3].x)-f,h:Math.max(h[0].y,h[1].y,h[2].y,h[3].y)-g})},e.isResourceElement=function(e){return["image","svg","html"].includes(null==e?void 0:e.type)},e.isViewPointInElement=Y,e.istype=x,e.limitAngle=V,e.loadHTML=async function(e,t){e=e.replace(/\&/gi,"&amp;");const n=await function(e,t){const{width:n,height:i}=t;return new Promise(((t,o)=>{const r=new Blob([`\n <svg \n xmlns="http://www.w3.org/2000/svg" \n width="${n||""}" \n height = "${i||""}">\n <foreignObject width="100%" height="100%">\n <div xmlns = "http://www.w3.org/1999/xhtml">\n ${e}\n </div>\n </foreignObject>\n </svg>\n `],{type:"image/svg+xml;charset=utf-8"}),a=new FileReader;a.readAsDataURL(r),a.onload=function(e){var n;const i=null==(n=null==e?void 0:e.target)?void 0:n.result;t(i)},a.onerror=function(e){o(e)}}))}(e,t);return await p(n)},e.loadImage=p,e.loadSVG=async function(e){const t=await function(e){return new Promise(((t,n)=>{const i=new Blob([e],{type:"image/svg+xml;charset=utf-8"}),o=new FileReader;o.readAsDataURL(i),o.onload=function(e){var n;const i=null==(n=null==e?void 0:e.target)?void 0:n.result;t(i)},o.onerror=function(e){n(e)}}))}(e);return await p(t)},e.matrixToAngle=function(e){const t=ue(e);if("number"==typeof t){return 180*t/Math.PI}return t},e.matrixToRadian=ue,e.mergeElementAsset=function(e,t){const n=e;let i=null,o=null;return"image"===n.type?i=n.detail.src:"svg"===n.type?i=n.detail.svg:"html"===n.type&&(i=n.detail.html),i&&(null==i?void 0:i.startsWith("@assets/"))&&(o=t[i]),(null==o?void 0:o.type)===n.type&&"string"==typeof(null==o?void 0:o.value)&&(null==o?void 0:o.value)&&("image"===n.type?n.detail.src=o.value:"svg"===n.type?n.detail.svg=o.value:"html"===n.type&&(n.detail.html=o.value)),n},e.mergeHexColorAlpha=function(e,t){if(1===t)return e;let n=1;const i=/^\#[0-9a-f]{6,6}$/i;let o=e;if(i.test(e)?n=parseInt(e.substring(5,7).replace(/^\#/,"0x")):/^\#[0-9a-f]{8,8}$/i.test(e)&&(n=parseInt(e.substring(7,9).replace(/^\#/,"0x")),o=e.substring(0,7)),n*=t,i.test(o)&&n>0&&n<1){const e=Math.max(0,Math.min(255,Math.ceil(256*n)));o=`${o.toUpperCase()}${e.toString(16).toUpperCase()}`}return o},e.moveElementPosition=function(e,t){const{from:n,to:i}=t;if(0===n.length||0===i.length)return e;if(n.length<=i.length)for(let t=0;t<n.length;t++)if(i[t]!==n[t]);else if(t===n.length-1)return e;const o=B(n,e);if(o){if(!be(o,i,e))return e;let t=-1;for(let e=0;e<n.length&&i[e]>=0;e++)i[e]!==n[e]&&i[e]<n[e]&&e==i.length-1&&(t=e);t>=0&&(n[t]=n[t]+1),Pe(n,e)}return e},e.parseAngleToRadian=O,e.parseFileToBase64=function(e){return new Promise((function(t,n){let i=new FileReader;i.addEventListener("load",(function(){t(i.result),i=null})),i.addEventListener("error",(function(e){n(e),i=null})),i.addEventListener("abort",(function(){n(new Error("abort")),i=null})),i.readAsDataURL(e)}))},e.parseFileToText=function(e){return new Promise((function(t,n){let i=new FileReader;i.addEventListener("load",(function(){t(i.result),i=null})),i.addEventListener("error",(function(e){n(e),i=null})),i.addEventListener("abort",(function(){n(new Error("abort")),i=null})),i.readAsText(e)}))},e.parseHTML=function(e){const t=[],n=[];let i,o=-1;return e.replace(oe,((r,a)=>{const l="/"!==r.charAt(1),s=r.startsWith("\x3c!--"),c=a+r.length,u=e.charAt(c);let h;if(s){const e=le(r);return o<0?(t.push(e),r):(h=n[o],h.children.push(e),r)}if(l){if(o++,i=le(r),!i.isVoid&&u&&"<"!==u){const t=e.slice(c,e.indexOf("<",c));t.trim()&&i.children.push({type:"text",name:null,attributes:{},children:[],isVoid:!1,textContent:t.trim()})}0===o&&t.push(i),h=n[o-1],h&&h.children.push(i),n[o]=i}if((!l||!Array.isArray(i)&&i.isVoid)&&(o>-1&&!Array.isArray(i)&&(i.isVoid||i.name===r.slice(2,-1))&&(o--,i=-1===o?t:n[o]),"<"!==u&&u)){h=-1===o?t:n[o].children;const i=e.indexOf("<",c);let r=e.slice(c,-1===i?void 0:i);re.test(r)&&(r=" "),(i>-1&&o+h.length>=0||" "!==r)&&r.trim()&&h.push({type:"text",name:null,attributes:{},children:[],isVoid:!1,textContent:r.trim()})}return r})),t},e.parseRadianToAngle=function(e){return e/Math.PI*180},e.parseSVGPath=function(e){const t=[];return e.replace(te,((e,n,i)=>{const o=i.match(ne),r={type:n,params:o?o.map(Number):[]};return t.push(r),e})),t},e.pickFile=function(e){const{accept:t,success:n,error:i}=e;let o=document.createElement("input");o.type="file",t&&(o.accept=t),o.addEventListener("change",(function(){var e;const t=null==(e=o.files)?void 0:e[0];n({file:t}),o=null})),o.addEventListener("error",(function(e){"function"==typeof i&&i(e),o=null})),o.click()},e.rotateByCenter=T,e.rotateElement=function(e,t,n){const i=L(t);T(e,t.angle||0,i,(()=>{n(e)}))},e.rotateElementVertexes=F,e.rotatePoint=j,e.rotatePointInGroup=function(e,t){if((null==t?void 0:t.length)>0){let n=e.x,i=e.y;return t.forEach((e=>{const{x:t,y:o,w:r,h:a,angle:l=0}=e,s=j(L({x:t,y:o,w:r,h:a,angle:l}),{x:n,y:i},O(l));n=s.x,i=s.y})),{x:n,y:i}}return e},e.rotateVertexes=H,e.sortDataAsserts=function(e,t){const n=e.assets||{};let i=e;!0===(null==t?void 0:t.clone)&&(i=f(e));const o=e=>{e.forEach((e=>{if("image"===e.type&&e.detail.src){const t=e.detail.src,i=h(t);n[i]||(n[i]={type:"image",value:t}),e.detail.src=i}else if("svg"===e.type){const t=e.detail.svg,i=h(t);n[i]||(n[i]={type:"svg",value:t}),e.detail.svg=i}else if("html"===e.type){const t=e.detail.html,i=h(t);n[i]||(n[i]={type:"html",value:t}),e.detail.html=i}else if("group"===e.type&&Array.isArray(e.detail.children)){const t=e.detail.assets||{};Object.keys(t).forEach((e=>{n[e]||(n[e]=t[e])})),delete e.detail.assets,o(e.detail.children)}}))};return o(i.elements),i.assets=n,i},e.throttle=function(e,t){let n=-1;return function(...i){n>0||(n=setTimeout((()=>{e(...i),n=-1}),t))}},e.toColorHexNum=function(e){return parseInt(e.replace(/^\#/,"0x"))},e.toColorHexStr=function(e){return"#"+e.toString(16)},e.updateElementInList=function e(t,n,i){var o,r;let a=null;for(let l=0;l<i.length;l++){const s=i[l];if(s.uuid===t){"group"===s.type&&!0===(null==(o=s.operations)?void 0:o.deepResize)&&(n.w&&n.w>0||n.h&&n.h>0)&&me(s,{w:n.w,h:n.h}),Me(s,n),a=s;break}"group"===s.type&&(a=e(t,n,(null==(r=null==s?void 0:s.detail)?void 0:r.children)||[]))}return a},e.vaildPoint=k,e.vaildTouchPoint=function(e){return!0===k(e)&&e.f>=0},e.validateElements=function e(t){let n=!0;if(Array.isArray(t)){const i=[];t.forEach((t=>{var o;"string"==typeof t.uuid&&t.uuid?i.includes(t.uuid)?(n=!1,console.warn(`Duplicate uuids: ${t.uuid}`)):i.push(t.uuid):(n=!1,console.warn("Element missing uuid",t)),"group"===t.type&&(n=e(null==(o=null==t?void 0:t.detail)?void 0:o.children))}))}return n},e.viewScale=function(e){const{scale:t,point:n,viewScaleInfo:i}=e,{offsetLeft:o,offsetTop:r}=i,a=t/i.scale,l=n.x,s=n.y;return{moveX:l-l*a+(o*a-o),moveY:s-s*a+(r*a-r)}},e.viewScroll=function(e){const{moveX:t=0,moveY:n=0,viewScaleInfo:i,viewSizeInfo:o}=e,{scale:r}=i,{width:a,height:l,contextWidth:s,contextHeight:c}=o;let u=i.offsetLeft,h=i.offsetRight,d=i.offsetTop,f=i.offsetBottom;return u+=t,d+=n,h=a-(s*r+u),f=l-(c*r+d),{scale:r,offsetTop:d,offsetLeft:u,offsetRight:h,offsetBottom:f}},Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),e}({});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idraw/util",
3
- "version": "0.4.0-beta.4",
3
+ "version": "0.4.0-beta.6",
4
4
  "description": "",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",