@idraw/util 0.4.0-beta.1 → 0.4.0-beta.11

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.
@@ -17,8 +17,12 @@ var __privateSet = (obj, member, value, setter) => {
17
17
  setter ? setter.call(obj, value) : member.set(obj, value);
18
18
  return value;
19
19
  };
20
+ var __privateMethod = (obj, member, method) => {
21
+ __accessCheck(obj, member, "access private method");
22
+ return method;
23
+ };
20
24
 
21
- var _ctx, _opts;
25
+ var _ctx, _opts, _listeners, _temp, _backUpDefaultStorage, _createTempStorage, createTempStorage_fn;
22
26
  function compose(middleware) {
23
27
  return function(context, next) {
24
28
  return dispatch(0);
@@ -47,7 +51,7 @@ var __privateSet = (obj, member, value, setter) => {
47
51
  function throttle(fn, timeout) {
48
52
  let timer = -1;
49
53
  return function(...args) {
50
- if (timer > 0) {
54
+ if (timer >= 0) {
51
55
  return;
52
56
  }
53
57
  timer = setTimeout(() => {
@@ -56,20 +60,34 @@ var __privateSet = (obj, member, value, setter) => {
56
60
  }, timeout);
57
61
  };
58
62
  }
63
+ function debounce(fn, timeout) {
64
+ let timer = -1;
65
+ return function(...args) {
66
+ if (timer >= 0) {
67
+ window.clearTimeout(timer);
68
+ }
69
+ timer = setTimeout(() => {
70
+ fn(...args);
71
+ timer = -1;
72
+ }, timeout);
73
+ };
74
+ }
59
75
  function downloadImageFromCanvas(canvas, opts) {
60
- const { filename, type = "image/jpeg" } = opts;
76
+ const { fileName, type = "image/jpeg" } = opts;
61
77
  const stream = canvas.toDataURL(type);
62
- const downloadLink = document.createElement("a");
78
+ let downloadLink = document.createElement("a");
63
79
  downloadLink.href = stream;
64
- downloadLink.download = filename;
65
- const downloadClickEvent = document.createEvent("MouseEvents");
66
- downloadClickEvent.initEvent("click", true, false);
67
- downloadLink.dispatchEvent(downloadClickEvent);
80
+ downloadLink.download = fileName;
81
+ downloadLink.click();
82
+ downloadLink = null;
68
83
  }
69
84
  function pickFile(opts) {
70
- const { success, error } = opts;
85
+ const { accept, success, error } = opts;
71
86
  let input = document.createElement("input");
72
87
  input.type = "file";
88
+ if (accept) {
89
+ input.accept = accept;
90
+ }
73
91
  input.addEventListener("change", function() {
74
92
  var _a;
75
93
  const file = (_a = input.files) == null ? void 0 : _a[0];
@@ -122,6 +140,23 @@ var __privateSet = (obj, member, value, setter) => {
122
140
  reader.readAsText(file);
123
141
  });
124
142
  }
143
+ function parseTextToBlobURL(text2) {
144
+ const bytes = new TextEncoder().encode(text2);
145
+ const blob = new Blob([bytes], {
146
+ type: "text/plain;charset=utf-8"
147
+ });
148
+ const blobURL = window.URL.createObjectURL(blob);
149
+ return blobURL;
150
+ }
151
+ function downloadFileFromText(text2, opts) {
152
+ const { fileName } = opts;
153
+ const blobURL = parseTextToBlobURL(text2);
154
+ let downloadLink = document.createElement("a");
155
+ downloadLink.href = blobURL;
156
+ downloadLink.download = fileName;
157
+ downloadLink.click();
158
+ downloadLink = null;
159
+ }
125
160
  function toColorHexNum(color2) {
126
161
  return parseInt(color2.replace(/^\#/, "0x"));
127
162
  }
@@ -406,6 +441,19 @@ var __privateSet = (obj, member, value, setter) => {
406
441
  }
407
442
  return _clone(target);
408
443
  }
444
+ function deepCloneElement(element) {
445
+ const elem = deepClone(element);
446
+ const _resetUUID = (e) => {
447
+ e.uuid = createUUID();
448
+ if (e.type === "group" && e.detail.children) {
449
+ e.detail.children.forEach((child) => {
450
+ _resetUUID(child);
451
+ });
452
+ }
453
+ };
454
+ _resetUUID(elem);
455
+ return elem;
456
+ }
409
457
  function is$1(target) {
410
458
  return Object.prototype.toString.call(target).replace(/[\]|\[]{1,1}/gi, "").split(" ")[1];
411
459
  }
@@ -442,7 +490,7 @@ var __privateSet = (obj, member, value, setter) => {
442
490
  const assetUUID = createAssetId(html2);
443
491
  if (!assets[assetUUID]) {
444
492
  assets[assetUUID] = {
445
- type: "svg",
493
+ type: "html",
446
494
  value: html2
447
495
  };
448
496
  }
@@ -463,6 +511,80 @@ var __privateSet = (obj, member, value, setter) => {
463
511
  sortedData.assets = assets;
464
512
  return sortedData;
465
513
  }
514
+ function filterCompactData(data, opts) {
515
+ const assets = data.assets || {};
516
+ const sortedData = deepClone(data);
517
+ const loadItemMap = (opts == null ? void 0 : opts.loadItemMap) || {};
518
+ const _scanElements = (elems) => {
519
+ elems.forEach((elem) => {
520
+ var _a, _b, _c;
521
+ if (elem.type === "image" && elem.detail.src) {
522
+ const src = elem.detail.src;
523
+ if (isAssetId(src) && !assets[src] && loadItemMap[src] && typeof ((_a = loadItemMap[src]) == null ? void 0 : _a.source) === "string") {
524
+ assets[src] = {
525
+ type: "image",
526
+ value: loadItemMap[src].source
527
+ };
528
+ } else if (!assets[src]) {
529
+ const assetUUID = createAssetId(src);
530
+ if (!assets[assetUUID]) {
531
+ assets[assetUUID] = {
532
+ type: "image",
533
+ value: src
534
+ };
535
+ }
536
+ elem.detail.src = assetUUID;
537
+ }
538
+ } else if (elem.type === "svg") {
539
+ const svg2 = elem.detail.svg;
540
+ if (isAssetId(svg2) && !assets[svg2] && loadItemMap[svg2] && typeof ((_b = loadItemMap[svg2]) == null ? void 0 : _b.source) === "string") {
541
+ assets[svg2] = {
542
+ type: "svg",
543
+ value: loadItemMap[svg2].source
544
+ };
545
+ } else if (!assets[svg2]) {
546
+ const assetUUID = createAssetId(svg2);
547
+ if (!assets[assetUUID]) {
548
+ assets[assetUUID] = {
549
+ type: "svg",
550
+ value: svg2
551
+ };
552
+ }
553
+ elem.detail.svg = assetUUID;
554
+ }
555
+ } else if (elem.type === "html") {
556
+ const html2 = elem.detail.html;
557
+ if (isAssetId(html2) && !assets[html2] && loadItemMap[html2] && typeof ((_c = loadItemMap[html2]) == null ? void 0 : _c.source) === "string") {
558
+ assets[html2] = {
559
+ type: "html",
560
+ value: loadItemMap[html2].source
561
+ };
562
+ } else if (!assets[html2]) {
563
+ const assetUUID = createAssetId(html2);
564
+ if (!assets[assetUUID]) {
565
+ assets[assetUUID] = {
566
+ type: "html",
567
+ value: html2
568
+ };
569
+ }
570
+ elem.detail.html = assetUUID;
571
+ }
572
+ } else if (elem.type === "group" && Array.isArray(elem.detail.children)) {
573
+ const groupAssets = elem.detail.assets || {};
574
+ Object.keys(groupAssets).forEach((assetId) => {
575
+ if (!assets[assetId]) {
576
+ assets[assetId] = groupAssets[assetId];
577
+ }
578
+ });
579
+ delete elem.detail.assets;
580
+ _scanElements(elem.detail.children);
581
+ }
582
+ });
583
+ };
584
+ _scanElements(sortedData.elements);
585
+ sortedData.assets = assets;
586
+ return sortedData;
587
+ }
466
588
  function parsePrototype(data) {
467
589
  const typeStr = Object.prototype.toString.call(data) || "";
468
590
  const result = typeStr.replace(/(\[object|\])/gi, "").trim();
@@ -808,6 +930,9 @@ var __privateSet = (obj, member, value, setter) => {
808
930
  $getContext() {
809
931
  return __privateGet(this, _ctx);
810
932
  }
933
+ $setContext(ctx) {
934
+ __privateSet(this, _ctx, ctx);
935
+ }
811
936
  $setFont(opts) {
812
937
  const strList = [];
813
938
  if (opts.fontWeight) {
@@ -1090,15 +1215,39 @@ var __privateSet = (obj, member, value, setter) => {
1090
1215
  });
1091
1216
  return context2d;
1092
1217
  }
1093
- function createViewContent(canvas, opts) {
1094
- const { width, height, devicePixelRatio, offscreen } = opts;
1218
+ function createBoardContent(canvas, opts) {
1219
+ const { width, height, devicePixelRatio, offscreen, createCustomContext2D } = opts;
1095
1220
  const ctxOpts = {
1096
1221
  width,
1097
1222
  height,
1098
1223
  devicePixelRatio
1099
1224
  };
1225
+ const ctx = canvas.getContext("2d");
1226
+ if (createCustomContext2D) {
1227
+ const viewContext = createCustomContext2D(ctxOpts);
1228
+ const helperContext = createCustomContext2D(ctxOpts);
1229
+ const underContext = createCustomContext2D(ctxOpts);
1230
+ const boardContext = createContext2D({ ctx, ...ctxOpts });
1231
+ const drawView = () => {
1232
+ const { width: w2, height: h2 } = viewContext.$getSize();
1233
+ boardContext.clearRect(0, 0, w2, h2);
1234
+ boardContext.drawImage(underContext.canvas, 0, 0, w2, h2);
1235
+ boardContext.drawImage(viewContext.canvas, 0, 0, w2, h2);
1236
+ boardContext.drawImage(helperContext.canvas, 0, 0, w2, h2);
1237
+ underContext.clearRect(0, 0, w2, h2);
1238
+ viewContext.clearRect(0, 0, w2, h2);
1239
+ helperContext.clearRect(0, 0, w2, h2);
1240
+ };
1241
+ const content = {
1242
+ underContext,
1243
+ viewContext,
1244
+ helperContext,
1245
+ boardContext,
1246
+ drawView
1247
+ };
1248
+ return content;
1249
+ }
1100
1250
  if (offscreen === true) {
1101
- const ctx = canvas.getContext("2d");
1102
1251
  const viewContext = createOffscreenContext2D(ctxOpts);
1103
1252
  const helperContext = createOffscreenContext2D(ctxOpts);
1104
1253
  const underContext = createOffscreenContext2D(ctxOpts);
@@ -1122,7 +1271,6 @@ var __privateSet = (obj, member, value, setter) => {
1122
1271
  };
1123
1272
  return content;
1124
1273
  } else {
1125
- const ctx = canvas.getContext("2d");
1126
1274
  const viewContext = createContext2D(ctxOpts);
1127
1275
  const helperContext = createContext2D(ctxOpts);
1128
1276
  const underContext = createContext2D(ctxOpts);
@@ -1148,20 +1296,21 @@ var __privateSet = (obj, member, value, setter) => {
1148
1296
  }
1149
1297
  class EventEmitter {
1150
1298
  constructor() {
1151
- this._listeners = /* @__PURE__ */ new Map();
1299
+ __privateAdd(this, _listeners, void 0);
1300
+ __privateSet(this, _listeners, /* @__PURE__ */ new Map());
1152
1301
  }
1153
1302
  on(eventKey, callback) {
1154
- if (this._listeners.has(eventKey)) {
1155
- const callbacks = this._listeners.get(eventKey) || [];
1303
+ if (__privateGet(this, _listeners).has(eventKey)) {
1304
+ const callbacks = __privateGet(this, _listeners).get(eventKey) || [];
1156
1305
  callbacks == null ? void 0 : callbacks.push(callback);
1157
- this._listeners.set(eventKey, callbacks);
1306
+ __privateGet(this, _listeners).set(eventKey, callbacks);
1158
1307
  } else {
1159
- this._listeners.set(eventKey, [callback]);
1308
+ __privateGet(this, _listeners).set(eventKey, [callback]);
1160
1309
  }
1161
1310
  }
1162
1311
  off(eventKey, callback) {
1163
- if (this._listeners.has(eventKey)) {
1164
- const callbacks = this._listeners.get(eventKey);
1312
+ if (__privateGet(this, _listeners).has(eventKey)) {
1313
+ const callbacks = __privateGet(this, _listeners).get(eventKey);
1165
1314
  if (Array.isArray(callbacks)) {
1166
1315
  for (let i = 0; i < (callbacks == null ? void 0 : callbacks.length); i++) {
1167
1316
  if (callbacks[i] === callback) {
@@ -1170,11 +1319,11 @@ var __privateSet = (obj, member, value, setter) => {
1170
1319
  }
1171
1320
  }
1172
1321
  }
1173
- this._listeners.set(eventKey, callbacks || []);
1322
+ __privateGet(this, _listeners).set(eventKey, callbacks || []);
1174
1323
  }
1175
1324
  }
1176
1325
  trigger(eventKey, e) {
1177
- const callbacks = this._listeners.get(eventKey);
1326
+ const callbacks = __privateGet(this, _listeners).get(eventKey);
1178
1327
  if (Array.isArray(callbacks)) {
1179
1328
  callbacks.forEach((cb) => {
1180
1329
  cb(e);
@@ -1185,15 +1334,22 @@ var __privateSet = (obj, member, value, setter) => {
1185
1334
  }
1186
1335
  }
1187
1336
  has(name) {
1188
- if (this._listeners.has(name)) {
1189
- const list = this._listeners.get(name);
1337
+ if (__privateGet(this, _listeners).has(name)) {
1338
+ const list = __privateGet(this, _listeners).get(name);
1190
1339
  if (Array.isArray(list) && list.length > 0) {
1191
1340
  return true;
1192
1341
  }
1193
1342
  }
1194
1343
  return false;
1195
1344
  }
1345
+ destroy() {
1346
+ this.clear();
1347
+ }
1348
+ clear() {
1349
+ __privateGet(this, _listeners).clear();
1350
+ }
1196
1351
  }
1352
+ _listeners = new WeakMap();
1197
1353
  function calcDistance(start, end) {
1198
1354
  const distance = (start.x - end.x) * (start.x - end.x) + (start.y - end.y) * (start.y - end.y);
1199
1355
  return distance === 0 ? distance : Math.sqrt(distance);
@@ -1226,25 +1382,34 @@ var __privateSet = (obj, member, value, setter) => {
1226
1382
  }
1227
1383
  class Store {
1228
1384
  constructor(opts) {
1229
- this._backUpDefaultStorage = deepClone(opts.defaultStorage);
1230
- this._temp = this._createTempStorage();
1385
+ __privateAdd(this, _createTempStorage);
1386
+ __privateAdd(this, _temp, void 0);
1387
+ __privateAdd(this, _backUpDefaultStorage, void 0);
1388
+ __privateSet(this, _backUpDefaultStorage, deepClone(opts.defaultStorage));
1389
+ __privateSet(this, _temp, __privateMethod(this, _createTempStorage, createTempStorage_fn).call(this));
1231
1390
  }
1232
1391
  set(name, value) {
1233
- this._temp[name] = value;
1392
+ __privateGet(this, _temp)[name] = value;
1234
1393
  }
1235
1394
  get(name) {
1236
- return this._temp[name];
1395
+ return __privateGet(this, _temp)[name];
1237
1396
  }
1238
1397
  getSnapshot() {
1239
- return deepClone(this._temp);
1398
+ return deepClone(__privateGet(this, _temp));
1240
1399
  }
1241
1400
  clear() {
1242
- this._temp = this._createTempStorage();
1401
+ __privateSet(this, _temp, __privateMethod(this, _createTempStorage, createTempStorage_fn).call(this));
1243
1402
  }
1244
- _createTempStorage() {
1245
- return deepClone(this._backUpDefaultStorage);
1403
+ destroy() {
1404
+ __privateSet(this, _temp, null);
1246
1405
  }
1247
1406
  }
1407
+ _temp = new WeakMap();
1408
+ _backUpDefaultStorage = new WeakMap();
1409
+ _createTempStorage = new WeakSet();
1410
+ createTempStorage_fn = function() {
1411
+ return deepClone(__privateGet(this, _backUpDefaultStorage));
1412
+ };
1248
1413
  function getViewScaleInfoFromSnapshot(snapshot) {
1249
1414
  const { activeStore } = snapshot;
1250
1415
  const sacelInfo = {
@@ -1505,6 +1670,58 @@ var __privateSet = (obj, member, value, setter) => {
1505
1670
  }
1506
1671
  return isValid;
1507
1672
  }
1673
+ function calcElementListSize(list) {
1674
+ var _a;
1675
+ const area = { x: 0, y: 0, w: 0, h: 0 };
1676
+ let prevElemSize = null;
1677
+ for (let i = 0; i < list.length; i++) {
1678
+ const elem = list[i];
1679
+ if ((_a = elem == null ? void 0 : elem.operations) == null ? void 0 : _a.invisible) {
1680
+ continue;
1681
+ }
1682
+ const elemSize = {
1683
+ x: elem.x,
1684
+ y: elem.y,
1685
+ w: elem.w,
1686
+ h: elem.h,
1687
+ angle: elem.angle || 0
1688
+ };
1689
+ if (elemSize.angle && (elemSize.angle > 0 || elemSize.angle < 0)) {
1690
+ const ves = rotateElementVertexes(elemSize);
1691
+ if (ves.length === 4) {
1692
+ const xList = [ves[0].x, ves[1].x, ves[2].x, ves[3].x];
1693
+ const yList = [ves[0].y, ves[1].y, ves[2].y, ves[3].y];
1694
+ elemSize.x = Math.min(...xList);
1695
+ elemSize.y = Math.min(...yList);
1696
+ elemSize.w = Math.abs(Math.max(...xList) - Math.min(...xList));
1697
+ elemSize.h = Math.abs(Math.max(...yList) - Math.min(...yList));
1698
+ }
1699
+ }
1700
+ if (prevElemSize) {
1701
+ const areaStartX = Math.min(elemSize.x, area.x);
1702
+ const areaStartY = Math.min(elemSize.y, area.y);
1703
+ const areaEndX = Math.max(elemSize.x + elemSize.w, area.x + area.w);
1704
+ const areaEndY = Math.max(elemSize.y + elemSize.h, area.y + area.h);
1705
+ area.x = areaStartX;
1706
+ area.y = areaStartY;
1707
+ area.w = Math.abs(areaEndX - areaStartX);
1708
+ area.h = Math.abs(areaEndY - areaStartY);
1709
+ } else {
1710
+ area.x = elemSize.x;
1711
+ area.y = elemSize.y;
1712
+ area.w = elemSize.w;
1713
+ area.h = elemSize.h;
1714
+ }
1715
+ prevElemSize = elemSize;
1716
+ }
1717
+ const listSize = {
1718
+ x: Math.floor(area.x),
1719
+ y: Math.floor(area.y),
1720
+ w: Math.ceil(area.w),
1721
+ h: Math.ceil(area.h)
1722
+ };
1723
+ return listSize;
1724
+ }
1508
1725
  function calcElementsContextSize(elements, opts) {
1509
1726
  const area = { x: 0, y: 0, w: 0, h: 0 };
1510
1727
  elements.forEach((elem) => {
@@ -1730,8 +1947,27 @@ var __privateSet = (obj, member, value, setter) => {
1730
1947
  }
1731
1948
  return result;
1732
1949
  }
1950
+ function findElementQueueFromListByPosition(position, list) {
1951
+ const result = [];
1952
+ let tempList = list;
1953
+ for (let i = 0; i < position.length; i++) {
1954
+ const pos = position[i];
1955
+ const item = tempList[pos];
1956
+ if (item) {
1957
+ result.push(item);
1958
+ } else {
1959
+ break;
1960
+ }
1961
+ if (i < position.length - 1 && item.type === "group") {
1962
+ tempList = item.detail.children;
1963
+ } else {
1964
+ break;
1965
+ }
1966
+ }
1967
+ return result;
1968
+ }
1733
1969
  function getElementPositionFromList(uuid, elements) {
1734
- let result = [];
1970
+ const result = [];
1735
1971
  let over = false;
1736
1972
  const _loop = (list) => {
1737
1973
  var _a;
@@ -2064,6 +2300,10 @@ var __privateSet = (obj, member, value, setter) => {
2064
2300
  const topRightCenter = vertexes[1];
2065
2301
  const bottomRightCenter = vertexes[2];
2066
2302
  const bottomLeftCenter = vertexes[3];
2303
+ const topMiddleSize = createControllerElementSizeFromCenter(topCenter, { size: ctrlSize, angle: totalAngle });
2304
+ const rightMiddleSize = createControllerElementSizeFromCenter(rightCenter, { size: ctrlSize, angle: totalAngle });
2305
+ const bottomMiddleSize = createControllerElementSizeFromCenter(bottomCenter, { size: ctrlSize, angle: totalAngle });
2306
+ const leftMiddleSize = createControllerElementSizeFromCenter(leftCenter, { size: ctrlSize, angle: totalAngle });
2067
2307
  const topLeftSize = createControllerElementSizeFromCenter(topLeftCenter, { size: ctrlSize, angle: totalAngle });
2068
2308
  const topRightSize = createControllerElementSizeFromCenter(topRightCenter, { size: ctrlSize, angle: totalAngle });
2069
2309
  const bottomLeftSize = createControllerElementSizeFromCenter(bottomLeftCenter, { size: ctrlSize, angle: totalAngle });
@@ -2076,6 +2316,10 @@ var __privateSet = (obj, member, value, setter) => {
2076
2316
  const rightVertexes = [topRightVertexes[3], topRightVertexes[2], bottomRightVertexes[1], bottomRightVertexes[0]];
2077
2317
  const bottomVertexes = [bottomLeftVertexes[1], bottomRightVertexes[0], bottomRightVertexes[3], bottomLeftVertexes[2]];
2078
2318
  const leftVertexes = [topLeftVertexes[3], topLeftVertexes[2], bottomLeftVertexes[1], bottomLeftVertexes[0]];
2319
+ const topMiddleVertexes = calcElementVertexes(topMiddleSize);
2320
+ const rightMiddleVertexes = calcElementVertexes(rightMiddleSize);
2321
+ const bottomMiddleVertexes = calcElementVertexes(bottomMiddleSize);
2322
+ const leftMiddleVertexes = calcElementVertexes(leftMiddleSize);
2079
2323
  const sizeController = {
2080
2324
  elementWrapper: vertexes,
2081
2325
  left: {
@@ -2117,6 +2361,26 @@ var __privateSet = (obj, member, value, setter) => {
2117
2361
  type: "bottom-right",
2118
2362
  vertexes: bottomRightVertexes,
2119
2363
  center: bottomRightCenter
2364
+ },
2365
+ leftMiddle: {
2366
+ type: "left-middle",
2367
+ vertexes: leftMiddleVertexes,
2368
+ center: leftCenter
2369
+ },
2370
+ rightMiddle: {
2371
+ type: "right-middle",
2372
+ vertexes: rightMiddleVertexes,
2373
+ center: rightCenter
2374
+ },
2375
+ topMiddle: {
2376
+ type: "top-middle",
2377
+ vertexes: topMiddleVertexes,
2378
+ center: topCenter
2379
+ },
2380
+ bottomMiddle: {
2381
+ type: "bottom-middle",
2382
+ vertexes: bottomMiddleVertexes,
2383
+ center: bottomCenter
2120
2384
  }
2121
2385
  };
2122
2386
  return sizeController;
@@ -2354,6 +2618,7 @@ var __privateSet = (obj, member, value, setter) => {
2354
2618
  }
2355
2619
  return radian;
2356
2620
  }
2621
+ const defaultText = "Text Element";
2357
2622
  function getDefaultElementDetailConfig() {
2358
2623
  const config = {
2359
2624
  boxSizing: "border-box",
@@ -2383,24 +2648,22 @@ var __privateSet = (obj, member, value, setter) => {
2383
2648
  };
2384
2649
  return detail;
2385
2650
  }
2386
- function getDefaultElementCircleDetail(opts) {
2651
+ function getDefaultElementCircleDetail() {
2387
2652
  const detail = {
2388
2653
  background: "#D9D9D9",
2389
2654
  radius: 0
2390
2655
  };
2391
2656
  return detail;
2392
2657
  }
2393
- function getDefaultElementTextDetail(opts) {
2394
- var _a;
2658
+ function getDefaultElementTextDetail(elementSize) {
2395
2659
  const detailConfig = getDefaultElementDetailConfig();
2396
- const scale = ((_a = opts == null ? void 0 : opts.viewScaleInfo) == null ? void 0 : _a.scale) || 1;
2397
2660
  const detail = {
2398
- text: "Text Element",
2661
+ text: defaultText,
2399
2662
  color: detailConfig.color,
2400
2663
  fontFamily: detailConfig.fontFamily,
2401
2664
  fontWeight: detailConfig.fontWeight,
2402
- lineHeight: detailConfig.fontSize * scale,
2403
- fontSize: detailConfig.fontSize * scale,
2665
+ lineHeight: elementSize.w / defaultText.length,
2666
+ fontSize: elementSize.w / defaultText.length,
2404
2667
  textAlign: "center",
2405
2668
  verticalAlign: "middle"
2406
2669
  };
@@ -2418,7 +2681,7 @@ var __privateSet = (obj, member, value, setter) => {
2418
2681
  };
2419
2682
  return detail;
2420
2683
  }
2421
- function getDefaultElementGroupDetail(opts) {
2684
+ function getDefaultElementGroupDetail() {
2422
2685
  const detail = {
2423
2686
  children: [],
2424
2687
  background: "#D9D9D9",
@@ -2430,8 +2693,9 @@ var __privateSet = (obj, member, value, setter) => {
2430
2693
  function calcViewBoxSize(viewElem, opts) {
2431
2694
  const { viewScaleInfo } = opts;
2432
2695
  const { scale } = viewScaleInfo;
2433
- let { borderRadius: borderRadius2, boxSizing = defaultElemConfig.boxSizing, borderWidth: borderWidth2 } = viewElem.detail;
2434
- if (typeof borderWidth2 !== "number") {
2696
+ let { borderRadius: borderRadius2 } = viewElem.detail;
2697
+ const { boxSizing = defaultElemConfig.boxSizing, borderWidth: borderWidth2 } = viewElem.detail;
2698
+ if (Array.isArray(borderWidth2)) {
2435
2699
  borderRadius2 = 0;
2436
2700
  }
2437
2701
  let { x: x2, y: y2, w: w2, h: h2 } = viewElem;
@@ -2475,9 +2739,105 @@ var __privateSet = (obj, member, value, setter) => {
2475
2739
  radiusList
2476
2740
  };
2477
2741
  }
2742
+ const doNum = (n) => {
2743
+ return formatNumber(n, { decimalPlaces: 4 });
2744
+ };
2745
+ function resizeElementBaseDetail(elem, opts) {
2746
+ const { detail } = elem;
2747
+ const { xRatio, yRatio, maxRatio } = opts;
2748
+ const middleRatio = (xRatio + yRatio) / 2;
2749
+ const { borderWidth: borderWidth2, borderRadius: borderRadius2, borderDash, shadowOffsetX, shadowOffsetY, shadowBlur } = detail;
2750
+ if (typeof borderWidth2 === "number") {
2751
+ detail.borderWidth = doNum(borderWidth2 * middleRatio);
2752
+ } else if (Array.isArray(detail.borderWidth)) {
2753
+ const bw = borderWidth2;
2754
+ detail.borderWidth = [doNum(bw[0] * yRatio), doNum(bw[1] * xRatio), doNum(bw[2] * yRatio), doNum(bw[3] * xRatio)];
2755
+ }
2756
+ if (typeof borderRadius2 === "number") {
2757
+ detail.borderRadius = doNum(borderRadius2 * middleRatio);
2758
+ } else if (Array.isArray(detail.borderRadius)) {
2759
+ const br = borderRadius2;
2760
+ detail.borderRadius = [br[0] * xRatio, br[1] * xRatio, br[2] * yRatio, br[3] * yRatio];
2761
+ }
2762
+ if (Array.isArray(borderDash)) {
2763
+ borderDash.forEach((dash, i) => {
2764
+ detail.borderDash[i] = doNum(dash * maxRatio);
2765
+ });
2766
+ }
2767
+ if (typeof shadowOffsetX === "number") {
2768
+ detail.shadowOffsetX = doNum(shadowOffsetX * maxRatio);
2769
+ }
2770
+ if (typeof shadowOffsetY === "number") {
2771
+ detail.shadowOffsetX = doNum(shadowOffsetY * maxRatio);
2772
+ }
2773
+ if (typeof shadowBlur === "number") {
2774
+ detail.shadowOffsetX = doNum(shadowBlur * maxRatio);
2775
+ }
2776
+ }
2777
+ function resizeElementBase(elem, opts) {
2778
+ const { xRatio, yRatio } = opts;
2779
+ const { x: x2, y: y2, w: w2, h: h2 } = elem;
2780
+ elem.x = doNum(x2 * xRatio);
2781
+ elem.y = doNum(y2 * yRatio);
2782
+ elem.w = doNum(w2 * xRatio);
2783
+ elem.h = doNum(h2 * yRatio);
2784
+ resizeElementBaseDetail(elem, opts);
2785
+ }
2786
+ function resizeTextElementDetail(elem, opts) {
2787
+ const { minRatio, maxRatio } = opts;
2788
+ const { fontSize: fontSize2, lineHeight: lineHeight2 } = elem.detail;
2789
+ const ratio = (minRatio + maxRatio) / 2;
2790
+ if (fontSize2 && fontSize2 > 0) {
2791
+ elem.detail.fontSize = doNum(fontSize2 * ratio);
2792
+ }
2793
+ if (lineHeight2 && lineHeight2 > 0) {
2794
+ elem.detail.lineHeight = doNum(lineHeight2 * ratio);
2795
+ }
2796
+ }
2797
+ function resizeElement(elem, opts) {
2798
+ const { type } = elem;
2799
+ resizeElementBase(elem, opts);
2800
+ if (type === "circle")
2801
+ ;
2802
+ else if (type === "text") {
2803
+ resizeTextElementDetail(elem, opts);
2804
+ } else if (type === "image")
2805
+ ;
2806
+ else if (type === "svg")
2807
+ ;
2808
+ else if (type === "html")
2809
+ ;
2810
+ else if (type === "path")
2811
+ ;
2812
+ else if (type === "group" && Array.isArray(elem.detail.children)) {
2813
+ elem.detail.children.forEach((child) => {
2814
+ resizeElement(child, opts);
2815
+ });
2816
+ }
2817
+ }
2818
+ function deepResizeGroupElement(elem, size) {
2819
+ const resizeW = size.w && size.w > 0 ? size.w : elem.w;
2820
+ const resizeH = size.h && size.h > 0 ? size.h : elem.h;
2821
+ const xRatio = resizeW / elem.w;
2822
+ const yRatio = resizeH / elem.h;
2823
+ if (xRatio === yRatio && xRatio === 1) {
2824
+ return elem;
2825
+ }
2826
+ const minRatio = Math.min(xRatio, yRatio);
2827
+ const maxRatio = Math.max(xRatio, yRatio);
2828
+ elem.w = resizeW;
2829
+ elem.h = resizeH;
2830
+ const opts = { xRatio, yRatio, minRatio, maxRatio };
2831
+ if (elem.type === "group" && Array.isArray(elem.detail.children)) {
2832
+ elem.detail.children.forEach((child) => {
2833
+ resizeElement(child, opts);
2834
+ });
2835
+ }
2836
+ resizeElementBaseDetail(elem, opts);
2837
+ return elem;
2838
+ }
2478
2839
  const defaultViewWidth = 200;
2479
2840
  const defaultViewHeight = 200;
2480
- const defaultDetail = getDefaultElementDetailConfig();
2481
2841
  function createElementSize(type, opts) {
2482
2842
  let x2 = 0;
2483
2843
  let y2 = 0;
@@ -2487,26 +2847,23 @@ var __privateSet = (obj, member, value, setter) => {
2487
2847
  const { viewScaleInfo, viewSizeInfo } = opts;
2488
2848
  const { scale, offsetLeft, offsetTop } = viewScaleInfo;
2489
2849
  const { width, height } = viewSizeInfo;
2490
- if (type === "text") {
2491
- const textDetail = getDefaultElementTextDetail();
2492
- w2 = defaultDetail.fontSize * scale * textDetail.text.length;
2493
- h2 = defaultDetail.fontSize * scale * 2;
2850
+ const limitViewWidth = width / 4;
2851
+ const limitViewHeight = height / 4;
2852
+ if (defaultViewWidth >= limitViewWidth) {
2853
+ w2 = limitViewWidth / scale;
2494
2854
  } else {
2495
- const limitViewWidth = width / 4;
2496
- const limitViewHeight = height / 4;
2497
- if (defaultViewWidth >= limitViewWidth) {
2498
- w2 = limitViewWidth / scale;
2499
- } else {
2500
- w2 = defaultViewWidth / scale;
2501
- }
2502
- if (defaultViewHeight >= limitViewHeight) {
2503
- h2 = limitViewHeight / scale;
2504
- } else {
2505
- h2 = defaultViewHeight / scale;
2506
- }
2507
- if (["circle", "svg", "image"].includes(type)) {
2508
- w2 = h2 = Math.max(w2, h2);
2509
- }
2855
+ w2 = defaultViewWidth / scale;
2856
+ }
2857
+ if (defaultViewHeight >= limitViewHeight) {
2858
+ h2 = limitViewHeight / scale;
2859
+ } else {
2860
+ h2 = defaultViewHeight / scale;
2861
+ }
2862
+ if (["circle", "svg", "image"].includes(type)) {
2863
+ w2 = h2 = Math.max(w2, h2);
2864
+ } else if (type === "text") {
2865
+ const fontSize2 = w2 / defaultText.length;
2866
+ h2 = fontSize2 * 2;
2510
2867
  }
2511
2868
  x2 = (0 - offsetLeft + width / 2 - w2 * scale / 2) / scale;
2512
2869
  y2 = (0 - offsetTop + height / 2 - h2 * scale / 2) / scale;
@@ -2520,16 +2877,14 @@ var __privateSet = (obj, member, value, setter) => {
2520
2877
  return elemSize;
2521
2878
  }
2522
2879
  function createElement(type, baseElem, opts) {
2523
- const elemSize = createElementSize(type, opts);
2880
+ const elementSize = createElementSize(type, opts);
2524
2881
  let detail = {};
2525
2882
  if (type === "rect") {
2526
2883
  detail = getDefaultElementRectDetail();
2527
2884
  } else if (type === "circle") {
2528
- detail = getDefaultElementCircleDetail({
2529
- radius: elemSize.w
2530
- });
2885
+ detail = getDefaultElementCircleDetail();
2531
2886
  } else if (type === "text") {
2532
- detail = getDefaultElementTextDetail(opts);
2887
+ detail = getDefaultElementTextDetail(elementSize);
2533
2888
  } else if (type === "svg") {
2534
2889
  detail = getDefaultElementSVGDetail();
2535
2890
  } else if (type === "image") {
@@ -2538,7 +2893,7 @@ var __privateSet = (obj, member, value, setter) => {
2538
2893
  detail = getDefaultElementGroupDetail();
2539
2894
  }
2540
2895
  const elem = {
2541
- ...elemSize,
2896
+ ...elementSize,
2542
2897
  ...baseElem,
2543
2898
  uuid: createUUID(),
2544
2899
  type,
@@ -2674,26 +3029,103 @@ var __privateSet = (obj, member, value, setter) => {
2674
3029
  return originElem;
2675
3030
  }
2676
3031
  function updateElementInList(uuid, updateContent, elements) {
2677
- var _a;
3032
+ var _a, _b;
2678
3033
  let targetElement = null;
2679
3034
  for (let i = 0; i < elements.length; i++) {
2680
3035
  const elem = elements[i];
2681
3036
  if (elem.uuid === uuid) {
3037
+ if (elem.type === "group" && ((_a = elem.operations) == null ? void 0 : _a.deepResize) === true) {
3038
+ if (updateContent.w && updateContent.w > 0 || updateContent.h && updateContent.h > 0) {
3039
+ deepResizeGroupElement(elem, {
3040
+ w: updateContent.w,
3041
+ h: updateContent.h
3042
+ });
3043
+ }
3044
+ }
2682
3045
  mergeElement(elem, updateContent);
2683
3046
  targetElement = elem;
2684
3047
  break;
2685
3048
  } else if (elem.type === "group") {
2686
- targetElement = updateElementInList(uuid, updateContent, ((_a = elem == null ? void 0 : elem.detail) == null ? void 0 : _a.children) || []);
3049
+ targetElement = updateElementInList(uuid, updateContent, ((_b = elem == null ? void 0 : elem.detail) == null ? void 0 : _b.children) || []);
2687
3050
  }
2688
3051
  }
2689
3052
  return targetElement;
2690
3053
  }
3054
+ function calcViewCenterContent(data, opts) {
3055
+ var _a, _b, _c, _d, _e, _f, _g, _h;
3056
+ let offsetX = 0;
3057
+ let offsetY = 0;
3058
+ let scale = 1;
3059
+ let contentX = ((_b = (_a = data == null ? void 0 : data.elements) == null ? void 0 : _a[0]) == null ? void 0 : _b.x) || 0;
3060
+ let contentY = ((_d = (_c = data == null ? void 0 : data.elements) == null ? void 0 : _c[0]) == null ? void 0 : _d.y) || 0;
3061
+ let contentW = ((_f = (_e = data == null ? void 0 : data.elements) == null ? void 0 : _e[0]) == null ? void 0 : _f.w) || 0;
3062
+ let contentH = ((_h = (_g = data == null ? void 0 : data.elements) == null ? void 0 : _g[0]) == null ? void 0 : _h.h) || 0;
3063
+ const { width, height } = opts.viewSizeInfo;
3064
+ data.elements.forEach((elem) => {
3065
+ const elemSize = {
3066
+ x: elem.x,
3067
+ y: elem.y,
3068
+ w: elem.w,
3069
+ h: elem.h,
3070
+ angle: elem.angle
3071
+ };
3072
+ if (elemSize.angle && (elemSize.angle > 0 || elemSize.angle < 0)) {
3073
+ const ves = rotateElementVertexes(elemSize);
3074
+ if (ves.length === 4) {
3075
+ const xList = [ves[0].x, ves[1].x, ves[2].x, ves[3].x];
3076
+ const yList = [ves[0].y, ves[1].y, ves[2].y, ves[3].y];
3077
+ elemSize.x = Math.min(...xList);
3078
+ elemSize.y = Math.min(...yList);
3079
+ elemSize.w = Math.abs(Math.max(...xList) - Math.min(...xList));
3080
+ elemSize.h = Math.abs(Math.max(...yList) - Math.min(...yList));
3081
+ }
3082
+ }
3083
+ const areaStartX = Math.min(elemSize.x, contentX);
3084
+ const areaStartY = Math.min(elemSize.y, contentY);
3085
+ const areaEndX = Math.max(elemSize.x + elemSize.w, contentX + contentW);
3086
+ const areaEndY = Math.max(elemSize.y + elemSize.h, contentY + contentH);
3087
+ contentX = areaStartX;
3088
+ contentY = areaStartY;
3089
+ contentW = Math.abs(areaEndX - areaStartX);
3090
+ contentH = Math.abs(areaEndY - areaStartY);
3091
+ });
3092
+ if (contentW > 0 && contentH > 0) {
3093
+ const scaleW = formatNumber(width / contentW, { decimalPlaces: 4 });
3094
+ const scaleH = formatNumber(height / contentH, { decimalPlaces: 4 });
3095
+ scale = Math.min(scaleW, scaleH, 1);
3096
+ offsetX = (contentW * scale - width) / 2 / scale + contentX;
3097
+ offsetY = (contentH * scale - height) / 2 / scale + contentY;
3098
+ }
3099
+ const result = {
3100
+ offsetX: formatNumber(offsetX, { decimalPlaces: 0 }),
3101
+ offsetY: formatNumber(offsetY, { decimalPlaces: 0 }),
3102
+ scale
3103
+ };
3104
+ return result;
3105
+ }
3106
+ function calcViewCenter(opts) {
3107
+ let x2 = 0;
3108
+ let y2 = 0;
3109
+ if (opts) {
3110
+ const { viewScaleInfo, viewSizeInfo } = opts;
3111
+ const { offsetLeft, offsetTop, scale } = viewScaleInfo;
3112
+ const { width, height } = viewSizeInfo;
3113
+ x2 = 0 - offsetLeft + width / scale / 2;
3114
+ y2 = 0 - offsetTop + height / scale / 2;
3115
+ }
3116
+ const p = {
3117
+ x: x2,
3118
+ y: y2
3119
+ };
3120
+ return p;
3121
+ }
2691
3122
  exports.Context2D = Context2D;
2692
3123
  exports.EventEmitter = EventEmitter;
2693
3124
  exports.Store = Store;
2694
3125
  exports.calcDistance = calcDistance;
2695
3126
  exports.calcElementCenter = calcElementCenter;
2696
3127
  exports.calcElementCenterFromVertexes = calcElementCenterFromVertexes;
3128
+ exports.calcElementListSize = calcElementListSize;
2697
3129
  exports.calcElementQueueVertexesQueueInGroup = calcElementQueueVertexesQueueInGroup;
2698
3130
  exports.calcElementSizeController = calcElementSizeController;
2699
3131
  exports.calcElementVertexesInGroup = calcElementVertexesInGroup;
@@ -2702,6 +3134,8 @@ var __privateSet = (obj, member, value, setter) => {
2702
3134
  exports.calcElementsViewInfo = calcElementsViewInfo;
2703
3135
  exports.calcSpeed = calcSpeed;
2704
3136
  exports.calcViewBoxSize = calcViewBoxSize;
3137
+ exports.calcViewCenter = calcViewCenter;
3138
+ exports.calcViewCenterContent = calcViewCenterContent;
2705
3139
  exports.calcViewElementSize = calcViewElementSize;
2706
3140
  exports.calcViewPointSize = calcViewPointSize;
2707
3141
  exports.calcViewScaleInfo = calcViewScaleInfo;
@@ -2714,21 +3148,27 @@ var __privateSet = (obj, member, value, setter) => {
2714
3148
  exports.compose = compose;
2715
3149
  exports.compressImage = compressImage;
2716
3150
  exports.createAssetId = createAssetId;
3151
+ exports.createBoardContent = createBoardContent;
2717
3152
  exports.createContext2D = createContext2D;
2718
3153
  exports.createElement = createElement;
2719
3154
  exports.createOffscreenContext2D = createOffscreenContext2D;
2720
3155
  exports.createUUID = createUUID;
2721
- exports.createViewContent = createViewContent;
3156
+ exports.debounce = debounce;
2722
3157
  exports.deepClone = deepClone;
3158
+ exports.deepCloneElement = deepCloneElement;
3159
+ exports.deepResizeGroupElement = deepResizeGroupElement;
2723
3160
  exports.delay = delay;
2724
3161
  exports.deleteElementInList = deleteElementInList;
2725
3162
  exports.deleteElementInListByPosition = deleteElementInListByPosition;
3163
+ exports.downloadFileFromText = downloadFileFromText;
2726
3164
  exports.downloadImageFromCanvas = downloadImageFromCanvas;
2727
3165
  exports.equalPoint = equalPoint;
2728
3166
  exports.equalTouchPoint = equalTouchPoint;
3167
+ exports.filterCompactData = filterCompactData;
2729
3168
  exports.filterElementAsset = filterElementAsset;
2730
3169
  exports.findElementFromList = findElementFromList;
2731
3170
  exports.findElementFromListByPosition = findElementFromListByPosition;
3171
+ exports.findElementQueueFromListByPosition = findElementQueueFromListByPosition;
2732
3172
  exports.findElementsFromList = findElementsFromList;
2733
3173
  exports.findElementsFromListByPositions = findElementsFromListByPositions;
2734
3174
  exports.formatNumber = formatNumber;