@idraw/core 0.4.0-beta.14 → 0.4.0-beta.16

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.
@@ -23,18 +23,6 @@ var __privateMethod = (obj, member, method) => {
23
23
  };
24
24
 
25
25
  var _eventHub, _container, _cursorType, _resizeCursorBaseImage, _cursorImageMap, _init, init_fn, _loadResizeCursorBaseImage, loadResizeCursorBaseImage_fn, _resetCursor, resetCursor_fn, _setCursorResize, setCursorResize_fn, _appendRotateResizeImage, appendRotateResizeImage_fn, _board, _canvas, _container2, _initContainer, initContainer_fn;
26
- function throttle(fn, timeout) {
27
- let timer = -1;
28
- return function(...args) {
29
- if (timer >= 0) {
30
- return;
31
- }
32
- timer = setTimeout(() => {
33
- fn(...args);
34
- timer = -1;
35
- }, timeout);
36
- };
37
- }
38
26
  function isColorStr(color2) {
39
27
  return typeof color2 === "string" && (/^\#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(color2) || /^[a-z]{1,}$/i.test(color2));
40
28
  }
@@ -378,12 +366,16 @@ var __privateMethod = (obj, member, method) => {
378
366
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
379
367
  };
380
368
  var _Context2D_ctx, _Context2D_opts;
369
+ const defaultFontSize = 12;
370
+ const defaultFontWeight = "400";
371
+ const defaultFontFamily = `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'`;
381
372
  class Context2D {
382
373
  constructor(ctx, opts) {
383
374
  _Context2D_ctx.set(this, void 0);
384
375
  _Context2D_opts.set(this, void 0);
385
376
  __classPrivateFieldSet$9(this, _Context2D_ctx, ctx, "f");
386
377
  __classPrivateFieldSet$9(this, _Context2D_opts, Object.assign({ devicePixelRatio: 1, offscreenCanvas: null }, opts), "f");
378
+ this.$resetFont();
387
379
  }
388
380
  $undoPixelRatio(num) {
389
381
  return num / __classPrivateFieldGet$9(this, _Context2D_opts, "f").devicePixelRatio;
@@ -406,6 +398,13 @@ var __privateMethod = (obj, member, method) => {
406
398
  strList.push(`${opts.fontFamily || "sans-serif"}`);
407
399
  __classPrivateFieldGet$9(this, _Context2D_ctx, "f").font = `${strList.join(" ")}`;
408
400
  }
401
+ $resetFont() {
402
+ this.$setFont({
403
+ fontSize: defaultFontSize,
404
+ fontFamily: defaultFontFamily,
405
+ fontWeight: defaultFontWeight
406
+ });
407
+ }
409
408
  $getOffscreenCanvas() {
410
409
  return __classPrivateFieldGet$9(this, _Context2D_opts, "f").offscreenCanvas;
411
410
  }
@@ -841,7 +840,7 @@ var __privateMethod = (obj, member, method) => {
841
840
  return __classPrivateFieldGet$7(this, _Store_temp, "f")[name];
842
841
  }
843
842
  getSnapshot() {
844
- return deepClone(__classPrivateFieldGet$7(this, _Store_temp, "f"));
843
+ return __classPrivateFieldGet$7(this, _Store_temp, "f");
845
844
  }
846
845
  clear() {
847
846
  __classPrivateFieldSet$7(this, _Store_temp, __classPrivateFieldGet$7(this, _Store_instances, "m", _Store_createTempStorage).call(this), "f");
@@ -1215,6 +1214,32 @@ var __privateMethod = (obj, member, method) => {
1215
1214
  }
1216
1215
  return result;
1217
1216
  }
1217
+ function getElementPositionFromList(uuid, elements) {
1218
+ const result = [];
1219
+ let over = false;
1220
+ const _loop = (list) => {
1221
+ var _a;
1222
+ for (let i = 0; i < list.length; i++) {
1223
+ if (over === true) {
1224
+ break;
1225
+ }
1226
+ result.push(i);
1227
+ const elem = list[i];
1228
+ if (elem.uuid === uuid) {
1229
+ over = true;
1230
+ break;
1231
+ } else if (elem.type === "group") {
1232
+ _loop(((_a = elem === null || elem === void 0 ? void 0 : elem.detail) === null || _a === void 0 ? void 0 : _a.children) || []);
1233
+ }
1234
+ if (over) {
1235
+ break;
1236
+ }
1237
+ result.pop();
1238
+ }
1239
+ };
1240
+ _loop(elements);
1241
+ return result;
1242
+ }
1218
1243
  function checkRectIntersect(rect1, rect2) {
1219
1244
  const react1MinX = rect1.x;
1220
1245
  const react1MinY = rect1.y;
@@ -1226,6 +1251,77 @@ var __privateMethod = (obj, member, method) => {
1226
1251
  const react2MaxY = rect2.y + rect2.h;
1227
1252
  return react1MinX <= react2MaxX && react1MaxX >= react2MinX && react1MinY <= react2MaxY && react1MaxY >= react2MinY;
1228
1253
  }
1254
+ function getElementVertexes(elemSize) {
1255
+ const { x: x2, y: y2, h: h2, w: w2 } = elemSize;
1256
+ return [
1257
+ { x: x2, y: y2 },
1258
+ { x: x2 + w2, y: y2 },
1259
+ { x: x2 + w2, y: y2 + h2 },
1260
+ { x: x2, y: y2 + h2 }
1261
+ ];
1262
+ }
1263
+ function calcElementVertexes(elemSize) {
1264
+ const { x: x2, y: y2, w: w2, h: h2, angle: angle2 = 0 } = elemSize;
1265
+ if (angle2 === 0) {
1266
+ return getElementVertexes(elemSize);
1267
+ }
1268
+ return getElementRotateVertexes(elemSize, calcElementCenter({ x: x2, y: y2, w: w2, h: h2, angle: angle2 }), angle2);
1269
+ }
1270
+ function calcElementQueueVertexesQueueInGroup(groupQueue) {
1271
+ const vesList = [];
1272
+ let totalX = 0;
1273
+ let totalY = 0;
1274
+ const rotateActionList = [];
1275
+ const elemQueue = [...groupQueue];
1276
+ for (let i = 0; i < elemQueue.length; i++) {
1277
+ const { x: x2, y: y2, w: w2, h: h2, angle: angle2 = 0 } = elemQueue[i];
1278
+ totalX += x2;
1279
+ totalY += y2;
1280
+ let ves;
1281
+ if (i === 0) {
1282
+ const elemSize = { x: totalX, y: totalY, w: w2, h: h2, angle: angle2 };
1283
+ ves = calcElementVertexes({ x: x2, y: y2, w: w2, h: h2, angle: angle2 });
1284
+ rotateActionList.push({
1285
+ center: calcElementCenter(elemSize),
1286
+ angle: angle2,
1287
+ radian: parseAngleToRadian(angle2)
1288
+ });
1289
+ } else {
1290
+ const elemSize = { x: totalX, y: totalY, w: w2, h: h2, angle: angle2 };
1291
+ ves = getElementVertexes(elemSize);
1292
+ for (let aIdx = 0; aIdx < rotateActionList.length; aIdx++) {
1293
+ const { center, radian } = rotateActionList[aIdx];
1294
+ ves = rotateVertexes(center, ves, radian);
1295
+ }
1296
+ const vesCenter = calcElementCenterFromVertexes(ves);
1297
+ if (angle2 > 0 || angle2 < 0) {
1298
+ const radian = parseAngleToRadian(angle2);
1299
+ ves = rotateVertexes(vesCenter, ves, radian);
1300
+ }
1301
+ rotateActionList.push({
1302
+ center: vesCenter,
1303
+ angle: angle2,
1304
+ radian: parseAngleToRadian(angle2)
1305
+ });
1306
+ }
1307
+ vesList.push(ves);
1308
+ }
1309
+ return vesList;
1310
+ }
1311
+ function calcElementVertexesQueueInGroup(targetElem, opts) {
1312
+ const { groupQueue } = opts;
1313
+ if (!(groupQueue.length > 0)) {
1314
+ return [calcElementVertexes(targetElem)];
1315
+ }
1316
+ const elemQueue = [...groupQueue, ...[targetElem]];
1317
+ const vesList = calcElementQueueVertexesQueueInGroup(elemQueue);
1318
+ return vesList;
1319
+ }
1320
+ function calcElementVertexesInGroup(targetElem, opts) {
1321
+ const vesList = calcElementVertexesQueueInGroup(targetElem, opts);
1322
+ const ves = vesList.pop();
1323
+ return ves || null;
1324
+ }
1229
1325
  function calcViewScaleInfo(info, opts) {
1230
1326
  const { scale, offsetX, offsetY } = info;
1231
1327
  const { viewSizeInfo } = opts;
@@ -1409,77 +1505,6 @@ var __privateMethod = (obj, member, method) => {
1409
1505
  const elemSize = { x: elemStartX, y: elemStartY, w: elemEndX - elemStartX, h: elemEndY - elemStartY };
1410
1506
  return checkRectIntersect(viewSize, elemSize);
1411
1507
  }
1412
- function getElementVertexes(elemSize) {
1413
- const { x: x2, y: y2, h: h2, w: w2 } = elemSize;
1414
- return [
1415
- { x: x2, y: y2 },
1416
- { x: x2 + w2, y: y2 },
1417
- { x: x2 + w2, y: y2 + h2 },
1418
- { x: x2, y: y2 + h2 }
1419
- ];
1420
- }
1421
- function calcElementVertexes(elemSize) {
1422
- const { x: x2, y: y2, w: w2, h: h2, angle: angle2 = 0 } = elemSize;
1423
- if (angle2 === 0) {
1424
- return getElementVertexes(elemSize);
1425
- }
1426
- return getElementRotateVertexes(elemSize, calcElementCenter({ x: x2, y: y2, w: w2, h: h2, angle: angle2 }), angle2);
1427
- }
1428
- function calcElementQueueVertexesQueueInGroup(groupQueue) {
1429
- const vesList = [];
1430
- let totalX = 0;
1431
- let totalY = 0;
1432
- const rotateActionList = [];
1433
- const elemQueue = [...groupQueue];
1434
- for (let i = 0; i < elemQueue.length; i++) {
1435
- const { x: x2, y: y2, w: w2, h: h2, angle: angle2 = 0 } = elemQueue[i];
1436
- totalX += x2;
1437
- totalY += y2;
1438
- let ves;
1439
- if (i === 0) {
1440
- const elemSize = { x: totalX, y: totalY, w: w2, h: h2, angle: angle2 };
1441
- ves = calcElementVertexes({ x: x2, y: y2, w: w2, h: h2, angle: angle2 });
1442
- rotateActionList.push({
1443
- center: calcElementCenter(elemSize),
1444
- angle: angle2,
1445
- radian: parseAngleToRadian(angle2)
1446
- });
1447
- } else {
1448
- const elemSize = { x: totalX, y: totalY, w: w2, h: h2, angle: angle2 };
1449
- ves = getElementVertexes(elemSize);
1450
- for (let aIdx = 0; aIdx < rotateActionList.length; aIdx++) {
1451
- const { center, radian } = rotateActionList[aIdx];
1452
- ves = rotateVertexes(center, ves, radian);
1453
- }
1454
- const vesCenter = calcElementCenterFromVertexes(ves);
1455
- if (angle2 > 0 || angle2 < 0) {
1456
- const radian = parseAngleToRadian(angle2);
1457
- ves = rotateVertexes(vesCenter, ves, radian);
1458
- }
1459
- rotateActionList.push({
1460
- center: vesCenter,
1461
- angle: angle2,
1462
- radian: parseAngleToRadian(angle2)
1463
- });
1464
- }
1465
- vesList.push(ves);
1466
- }
1467
- return vesList;
1468
- }
1469
- function calcElementVertexesQueueInGroup(targetElem, opts) {
1470
- const { groupQueue } = opts;
1471
- if (!(groupQueue.length > 0)) {
1472
- return [calcElementVertexes(targetElem)];
1473
- }
1474
- const elemQueue = [...groupQueue, ...[targetElem]];
1475
- const vesList = calcElementQueueVertexesQueueInGroup(elemQueue);
1476
- return vesList;
1477
- }
1478
- function calcElementVertexesInGroup(targetElem, opts) {
1479
- const vesList = calcElementVertexesQueueInGroup(targetElem, opts);
1480
- const ves = vesList.pop();
1481
- return ves || null;
1482
- }
1483
1508
  function createControllerElementSizeFromCenter(center, opts) {
1484
1509
  const { x: x2, y: y2 } = center;
1485
1510
  const { size, angle: angle2 } = opts;
@@ -2107,11 +2132,18 @@ var __privateMethod = (obj, member, method) => {
2107
2132
  renderContent();
2108
2133
  ctx.restore();
2109
2134
  } else {
2135
+ ctx.save();
2136
+ ctx.shadowColor = "transparent";
2137
+ ctx.shadowOffsetX = 0;
2138
+ ctx.shadowOffsetY = 0;
2139
+ ctx.shadowBlur = 0;
2110
2140
  renderContent();
2141
+ ctx.restore();
2111
2142
  }
2112
2143
  }
2113
2144
  function drawCircle(ctx, elem, opts) {
2114
2145
  const { detail, angle: angle2 } = elem;
2146
+ const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2115
2147
  const { background: background2 = "#000000", borderColor: borderColor2 = "#000000", boxSizing, borderWidth: borderWidth2 = 0 } = detail;
2116
2148
  let bw = 0;
2117
2149
  if (typeof borderWidth2 === "number" && borderWidth2 > 0) {
@@ -2119,7 +2151,7 @@ var __privateMethod = (obj, member, method) => {
2119
2151
  } else if (Array.isArray(borderWidth2) && typeof borderWidth2[0] === "number" && borderWidth2[0] > 0) {
2120
2152
  bw = borderWidth2[0];
2121
2153
  }
2122
- const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2154
+ bw = bw * viewScaleInfo.scale;
2123
2155
  const { x: x2, y: y2, w: w2, h: h2 } = (calculator === null || calculator === void 0 ? void 0 : calculator.elementSize({ x: elem.x, y: elem.y, w: elem.w, h: elem.h }, viewScaleInfo, viewSizeInfo)) || elem;
2124
2156
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2125
2157
  rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
@@ -2146,12 +2178,12 @@ var __privateMethod = (obj, member, method) => {
2146
2178
  if (a >= 0 && b >= 0) {
2147
2179
  const opacity = getOpacity(viewElem) * parentOpacity;
2148
2180
  ctx.globalAlpha = opacity;
2149
- if (typeof borderWidth2 === "number" && borderWidth2 > 0) {
2150
- const ba = borderWidth2 / 2 + a;
2151
- const bb = borderWidth2 / 2 + b;
2181
+ if (typeof bw === "number" && bw > 0) {
2182
+ const ba = bw / 2 + a;
2183
+ const bb = bw / 2 + b;
2152
2184
  ctx.beginPath();
2153
2185
  ctx.strokeStyle = borderColor2;
2154
- ctx.lineWidth = borderWidth2;
2186
+ ctx.lineWidth = bw;
2155
2187
  ctx.circle(centerX, centerY, ba, bb, 0, 0, 2 * Math.PI);
2156
2188
  ctx.closePath();
2157
2189
  ctx.stroke();
@@ -2786,6 +2818,9 @@ var __privateMethod = (obj, member, method) => {
2786
2818
  }, _Loader_loadResource = function _Loader_loadResource2(element, assets) {
2787
2819
  const item = __classPrivateFieldGet$6(this, _Loader_instances, "m", _Loader_createLoadItem).call(this, element);
2788
2820
  const assetId = getAssetIdFromElement(element);
2821
+ if (__classPrivateFieldGet$6(this, _Loader_currentLoadItemMap, "f")[assetId]) {
2822
+ return;
2823
+ }
2789
2824
  __classPrivateFieldGet$6(this, _Loader_currentLoadItemMap, "f")[assetId] = item;
2790
2825
  const loadFunc = __classPrivateFieldGet$6(this, _Loader_loadFuncMap, "f")[element.type];
2791
2826
  if (typeof loadFunc === "function" && !__classPrivateFieldGet$6(this, _Loader_hasDestroyed, "f")) {
@@ -2921,7 +2956,8 @@ var __privateMethod = (obj, member, method) => {
2921
2956
  loader.on("load", (e) => {
2922
2957
  this.trigger("load", e);
2923
2958
  });
2924
- loader.on("error", () => {
2959
+ loader.on("error", (e) => {
2960
+ console.error(e);
2925
2961
  });
2926
2962
  };
2927
2963
  var __classPrivateFieldSet$4 = function(receiver, state, value, kind, f) {
@@ -3416,7 +3452,6 @@ var __privateMethod = (obj, member, method) => {
3416
3452
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
3417
3453
  };
3418
3454
  var _Board_instances, _Board_opts, _Board_middlewareMap, _Board_middlewares, _Board_activeMiddlewareObjs, _Board_watcher, _Board_renderer, _Board_sharer, _Board_viewer, _Board_calculator, _Board_eventHub, _Board_hasDestroyed, _Board_init, _Board_handlePointStart, _Board_handlePointEnd, _Board_handlePointMove, _Board_handleHover, _Board_handleDoubleClick, _Board_handleWheel, _Board_handleWheelScale, _Board_handleScrollX, _Board_handleScrollY, _Board_handleResize, _Board_handleClear, _Board_handleBeforeDrawFrame, _Board_handleAfterDrawFrame, _Board_resetActiveMiddlewareObjs;
3419
- const throttleTime = 10;
3420
3455
  class Board {
3421
3456
  constructor(opts) {
3422
3457
  _Board_instances.add(this);
@@ -3582,22 +3617,17 @@ var __privateMethod = (obj, member, method) => {
3582
3617
  _Board_opts = /* @__PURE__ */ new WeakMap(), _Board_middlewareMap = /* @__PURE__ */ new WeakMap(), _Board_middlewares = /* @__PURE__ */ new WeakMap(), _Board_activeMiddlewareObjs = /* @__PURE__ */ new WeakMap(), _Board_watcher = /* @__PURE__ */ new WeakMap(), _Board_renderer = /* @__PURE__ */ new WeakMap(), _Board_sharer = /* @__PURE__ */ new WeakMap(), _Board_viewer = /* @__PURE__ */ new WeakMap(), _Board_calculator = /* @__PURE__ */ new WeakMap(), _Board_eventHub = /* @__PURE__ */ new WeakMap(), _Board_hasDestroyed = /* @__PURE__ */ new WeakMap(), _Board_instances = /* @__PURE__ */ new WeakSet(), _Board_init = function _Board_init2() {
3583
3618
  __classPrivateFieldGet(this, _Board_watcher, "f").on("pointStart", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handlePointStart).bind(this));
3584
3619
  __classPrivateFieldGet(this, _Board_watcher, "f").on("pointEnd", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handlePointEnd).bind(this));
3585
- __classPrivateFieldGet(this, _Board_watcher, "f").on("pointMove", throttle((e) => {
3586
- __classPrivateFieldGet(this, _Board_instances, "m", _Board_handlePointMove).call(this, e);
3587
- }, throttleTime));
3588
- __classPrivateFieldGet(this, _Board_watcher, "f").on("hover", throttle((e) => {
3589
- __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleHover).call(this, e);
3590
- }, throttleTime));
3591
- __classPrivateFieldGet(this, _Board_watcher, "f").on("wheel", throttle((e) => {
3592
- __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleWheel).call(this, e);
3593
- }, throttleTime));
3594
- __classPrivateFieldGet(this, _Board_watcher, "f").on("wheelScale", throttle((e) => {
3595
- __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleWheelScale).call(this, e);
3596
- }, throttleTime));
3620
+ __classPrivateFieldGet(this, _Board_watcher, "f").on("pointMove", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handlePointMove).bind(this));
3621
+ __classPrivateFieldGet(this, _Board_watcher, "f").on("hover", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleHover).bind(this));
3622
+ __classPrivateFieldGet(this, _Board_watcher, "f").on("wheel", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleWheel).bind(this));
3623
+ __classPrivateFieldGet(this, _Board_watcher, "f").on("wheelScale", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleWheelScale).bind(this));
3597
3624
  __classPrivateFieldGet(this, _Board_watcher, "f").on("scrollX", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleScrollX).bind(this));
3598
3625
  __classPrivateFieldGet(this, _Board_watcher, "f").on("scrollY", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleScrollY).bind(this));
3599
3626
  __classPrivateFieldGet(this, _Board_watcher, "f").on("resize", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleResize).bind(this));
3600
3627
  __classPrivateFieldGet(this, _Board_watcher, "f").on("doubleClick", __classPrivateFieldGet(this, _Board_instances, "m", _Board_handleDoubleClick).bind(this));
3628
+ __classPrivateFieldGet(this, _Board_renderer, "f").on("load", () => {
3629
+ __classPrivateFieldGet(this, _Board_eventHub, "f").trigger("loadResource");
3630
+ });
3601
3631
  }, _Board_handlePointStart = function _Board_handlePointStart2(e) {
3602
3632
  var _a;
3603
3633
  for (let i = 0; i < __classPrivateFieldGet(this, _Board_activeMiddlewareObjs, "f").length; i++) {
@@ -3884,6 +3914,7 @@ var __privateMethod = (obj, member, method) => {
3884
3914
  const keySelectedElementController = Symbol(`${key$2}_selectedElementController`);
3885
3915
  const keyGroupQueue = Symbol(`${key$2}_groupQueue`);
3886
3916
  const keyGroupQueueVertexesList = Symbol(`${key$2}_groupQueueVertexesList`);
3917
+ const keyIsMoving = Symbol(`${key$2}_isMoving`);
3887
3918
  const selectWrapperBorderWidth = 2;
3888
3919
  const resizeControllerBorderWidth = 4;
3889
3920
  const areaBorderWidth = 1;
@@ -3943,19 +3974,11 @@ var __privateMethod = (obj, member, method) => {
3943
3974
  ctx.fill();
3944
3975
  }
3945
3976
  }
3946
- function drawHoverVertexesWrapper(ctx, vertexes, opts) {
3947
- if (!vertexes) {
3948
- return;
3949
- }
3950
- const wrapperOpts = { borderColor: wrapperColor, borderWidth: 1, background: "transparent", lineDash: [] };
3951
- drawVertexes(ctx, calcViewVertexes(vertexes, opts), wrapperOpts);
3952
- }
3953
3977
  function drawCrossVertexes(ctx, vertexes, opts) {
3954
- const { borderColor: borderColor2, borderWidth: borderWidth2, background: background2, lineDash } = opts;
3978
+ const { borderColor: borderColor2, borderWidth: borderWidth2, lineDash } = opts;
3955
3979
  ctx.setLineDash([]);
3956
3980
  ctx.lineWidth = borderWidth2;
3957
3981
  ctx.strokeStyle = borderColor2;
3958
- ctx.fillStyle = background2;
3959
3982
  ctx.setLineDash(lineDash);
3960
3983
  ctx.beginPath();
3961
3984
  ctx.moveTo(vertexes[0].x, vertexes[0].y);
@@ -3968,6 +3991,13 @@ var __privateMethod = (obj, member, method) => {
3968
3991
  ctx.closePath();
3969
3992
  ctx.stroke();
3970
3993
  }
3994
+ function drawHoverVertexesWrapper(ctx, vertexes, opts) {
3995
+ if (!vertexes) {
3996
+ return;
3997
+ }
3998
+ const wrapperOpts = { borderColor: wrapperColor, borderWidth: 1, background: "transparent", lineDash: [] };
3999
+ drawVertexes(ctx, calcViewVertexes(vertexes, opts), wrapperOpts);
4000
+ }
3971
4001
  function drawLockVertexesWrapper(ctx, vertexes, opts) {
3972
4002
  if (!vertexes) {
3973
4003
  return;
@@ -3992,16 +4022,19 @@ var __privateMethod = (obj, member, method) => {
3992
4022
  if (!controller) {
3993
4023
  return;
3994
4024
  }
4025
+ const { hideControllers } = opts;
3995
4026
  const { elementWrapper, topLeft, topRight, bottomLeft, bottomRight, top, rotate } = controller;
3996
4027
  const wrapperOpts = { borderColor: wrapperColor, borderWidth: selectWrapperBorderWidth, background: "transparent", lineDash: [] };
3997
4028
  const ctrlOpts = { ...wrapperOpts, borderWidth: resizeControllerBorderWidth, background: "#FFFFFF" };
3998
- drawLine(ctx, calcViewPointSize(top.center, opts), calcViewPointSize(rotate.center, opts), { ...ctrlOpts, borderWidth: 2 });
3999
4029
  drawVertexes(ctx, calcViewVertexes(elementWrapper, opts), wrapperOpts);
4000
- drawVertexes(ctx, calcViewVertexes(topLeft.vertexes, opts), ctrlOpts);
4001
- drawVertexes(ctx, calcViewVertexes(topRight.vertexes, opts), ctrlOpts);
4002
- drawVertexes(ctx, calcViewVertexes(bottomLeft.vertexes, opts), ctrlOpts);
4003
- drawVertexes(ctx, calcViewVertexes(bottomRight.vertexes, opts), ctrlOpts);
4004
- drawCircleController(ctx, calcViewPointSize(rotate.center, opts), { ...ctrlOpts, size: controllerSize, borderWidth: 2 });
4030
+ if (!hideControllers) {
4031
+ drawLine(ctx, calcViewPointSize(top.center, opts), calcViewPointSize(rotate.center, opts), { ...ctrlOpts, borderWidth: 2 });
4032
+ drawVertexes(ctx, calcViewVertexes(topLeft.vertexes, opts), ctrlOpts);
4033
+ drawVertexes(ctx, calcViewVertexes(topRight.vertexes, opts), ctrlOpts);
4034
+ drawVertexes(ctx, calcViewVertexes(bottomLeft.vertexes, opts), ctrlOpts);
4035
+ drawVertexes(ctx, calcViewVertexes(bottomRight.vertexes, opts), ctrlOpts);
4036
+ drawCircleController(ctx, calcViewPointSize(rotate.center, opts), { ...ctrlOpts, size: controllerSize, borderWidth: 2 });
4037
+ }
4005
4038
  }
4006
4039
  function drawArea(ctx, opts) {
4007
4040
  const { start, end } = opts;
@@ -4811,15 +4844,18 @@ var __privateMethod = (obj, member, method) => {
4811
4844
  };
4812
4845
  }
4813
4846
  const middlewareEventTextEdit = "@middleware/text-edit";
4847
+ const middlewareEventTextChange = "@middleware/text-change";
4814
4848
  const defaultElementDetail = getDefaultElementDetailConfig();
4815
4849
  const MiddlewareTextEditor = (opts) => {
4816
4850
  const { eventHub, boardContent, viewer } = opts;
4817
4851
  const canvas = boardContent.boardContext.canvas;
4818
- const textarea = document.createElement("textarea");
4852
+ const textarea = document.createElement("div");
4853
+ textarea.setAttribute("contenteditable", "true");
4819
4854
  const canvasWrapper = document.createElement("div");
4820
4855
  const container = opts.container || document.body;
4821
4856
  const mask = document.createElement("div");
4822
4857
  let activeElem = null;
4858
+ let activePosition = [];
4823
4859
  canvasWrapper.appendChild(textarea);
4824
4860
  canvasWrapper.style.position = "absolute";
4825
4861
  mask.appendChild(canvasWrapper);
@@ -4838,6 +4874,7 @@ var __privateMethod = (obj, member, method) => {
4838
4874
  const hideTextArea = () => {
4839
4875
  mask.style.display = "none";
4840
4876
  activeElem = null;
4877
+ activePosition = [];
4841
4878
  };
4842
4879
  const getCanvasRect = () => {
4843
4880
  const clientRect = canvas.getBoundingClientRect();
@@ -4898,6 +4935,21 @@ var __privateMethod = (obj, member, method) => {
4898
4935
  elemW = element.w * scale;
4899
4936
  elemH = element.h * scale;
4900
4937
  }
4938
+ let justifyContent = "center";
4939
+ let alignItems = "center";
4940
+ if (detail.textAlign === "left") {
4941
+ justifyContent = "start";
4942
+ } else if (detail.textAlign === "right") {
4943
+ justifyContent = "end";
4944
+ }
4945
+ if (detail.verticalAlign === "top") {
4946
+ alignItems = "start";
4947
+ } else if (detail.verticalAlign === "bottom") {
4948
+ alignItems = "end";
4949
+ }
4950
+ textarea.style.display = "inline-flex";
4951
+ textarea.style.justifyContent = justifyContent;
4952
+ textarea.style.alignItems = alignItems;
4901
4953
  textarea.style.position = "absolute";
4902
4954
  textarea.style.left = `${elemX - 1}px`;
4903
4955
  textarea.style.top = `${elemY - 1}px`;
@@ -4918,7 +4970,7 @@ var __privateMethod = (obj, member, method) => {
4918
4970
  textarea.style.padding = "0";
4919
4971
  textarea.style.margin = "0";
4920
4972
  textarea.style.outline = "none";
4921
- textarea.value = detail.text || "";
4973
+ textarea.innerText = detail.text || "";
4922
4974
  parent.appendChild(textarea);
4923
4975
  };
4924
4976
  const resetCanvasWrapper = () => {
@@ -4936,19 +4988,53 @@ var __privateMethod = (obj, member, method) => {
4936
4988
  textarea.addEventListener("click", (e) => {
4937
4989
  e.stopPropagation();
4938
4990
  });
4939
- textarea.addEventListener("input", (e) => {
4940
- if (activeElem) {
4941
- activeElem.detail.text = e.target.value || "";
4991
+ textarea.addEventListener("input", () => {
4992
+ if (activeElem && activePosition) {
4993
+ activeElem.detail.text = textarea.innerText || "";
4994
+ eventHub.trigger(middlewareEventTextChange, {
4995
+ element: {
4996
+ uuid: activeElem.uuid,
4997
+ detail: {
4998
+ text: activeElem.detail.text
4999
+ }
5000
+ },
5001
+ position: [...activePosition || []]
5002
+ });
4942
5003
  viewer.drawFrame();
4943
5004
  }
4944
5005
  });
4945
5006
  textarea.addEventListener("blur", () => {
5007
+ if (activeElem && activePosition) {
5008
+ eventHub.trigger(middlewareEventTextChange, {
5009
+ element: {
5010
+ uuid: activeElem.uuid,
5011
+ detail: {
5012
+ text: activeElem.detail.text
5013
+ }
5014
+ },
5015
+ position: [...activePosition]
5016
+ });
5017
+ }
4946
5018
  hideTextArea();
4947
5019
  });
5020
+ textarea.addEventListener("keydown", (e) => {
5021
+ e.stopPropagation();
5022
+ });
5023
+ textarea.addEventListener("keypress", (e) => {
5024
+ e.stopPropagation();
5025
+ });
5026
+ textarea.addEventListener("keyup", (e) => {
5027
+ e.stopPropagation();
5028
+ });
5029
+ textarea.addEventListener("wheel", (e) => {
5030
+ e.stopPropagation();
5031
+ e.preventDefault();
5032
+ });
4948
5033
  const textEditCallback = (e) => {
4949
5034
  var _a;
4950
- if ((e == null ? void 0 : e.element) && ((_a = e == null ? void 0 : e.element) == null ? void 0 : _a.type) === "text") {
5035
+ if ((e == null ? void 0 : e.position) && (e == null ? void 0 : e.element) && ((_a = e == null ? void 0 : e.element) == null ? void 0 : _a.type) === "text") {
4951
5036
  activeElem = e.element;
5037
+ activePosition = e.position;
4952
5038
  }
4953
5039
  showTextArea(e);
4954
5040
  };
@@ -5043,6 +5129,7 @@ var __privateMethod = (obj, member, method) => {
5043
5129
  sharer.setSharedStorage(keySelectedElementList, []);
5044
5130
  sharer.setSharedStorage(keySelectedElementListVertexes, null);
5045
5131
  sharer.setSharedStorage(keySelectedElementController, null);
5132
+ sharer.setSharedStorage(keyIsMoving, null);
5046
5133
  };
5047
5134
  clear();
5048
5135
  const selectCallback = ({ uuids, positions }) => {
@@ -5231,6 +5318,7 @@ var __privateMethod = (obj, member, method) => {
5231
5318
  },
5232
5319
  pointMove: (e) => {
5233
5320
  var _a, _b, _c;
5321
+ sharer.setSharedStorage(keyIsMoving, true);
5234
5322
  const data = sharer.getActiveStorage("data");
5235
5323
  const elems = getActiveElements();
5236
5324
  const scale = sharer.getActiveStorage("scale") || 1;
@@ -5330,6 +5418,7 @@ var __privateMethod = (obj, member, method) => {
5330
5418
  },
5331
5419
  pointEnd(e) {
5332
5420
  inBusyMode = null;
5421
+ sharer.setSharedStorage(keyIsMoving, false);
5333
5422
  const data = sharer.getActiveStorage("data");
5334
5423
  const resizeType = sharer.getSharedStorage(keyResizeType);
5335
5424
  const actionType = sharer.getSharedStorage(keyActionType);
@@ -5402,7 +5491,7 @@ var __privateMethod = (obj, member, method) => {
5402
5491
  viewer.drawFrame();
5403
5492
  },
5404
5493
  doubleClick(e) {
5405
- var _a, _b, _c, _d;
5494
+ var _a, _b, _c, _d, _e, _f;
5406
5495
  const target = getPointTarget(e.point, pointTargetBaseOptions());
5407
5496
  sharer.setSharedStorage(keySelectedElementController, null);
5408
5497
  sharer.setSharedStorage(keySelectedElementList, []);
@@ -5420,6 +5509,7 @@ var __privateMethod = (obj, member, method) => {
5420
5509
  eventHub.trigger(middlewareEventTextEdit, {
5421
5510
  element: target.elements[0],
5422
5511
  groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
5512
+ position: getElementPositionFromList((_e = target.elements[0]) == null ? void 0 : _e.uuid, ((_f = sharer.getActiveStorage("data")) == null ? void 0 : _f.elements) || []),
5423
5513
  viewScaleInfo: sharer.getActiveViewScaleInfo()
5424
5514
  });
5425
5515
  }
@@ -5441,6 +5531,7 @@ var __privateMethod = (obj, member, method) => {
5441
5531
  const areaEnd = sharedStore[keyAreaEnd];
5442
5532
  const groupQueue = sharedStore[keyGroupQueue];
5443
5533
  const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
5534
+ const isMoving = sharedStore[keyIsMoving];
5444
5535
  const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
5445
5536
  const selectedElementController = elem ? calcElementSizeController(elem, {
5446
5537
  groupQueue,
@@ -5465,7 +5556,12 @@ var __privateMethod = (obj, member, method) => {
5465
5556
  }
5466
5557
  }
5467
5558
  if (!isLock && elem && ["select", "drag", "resize"].includes(actionType)) {
5468
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, { ...drawBaseOpts });
5559
+ drawSelectedElementControllersVertexes(helperContext, selectedElementController, {
5560
+ ...drawBaseOpts,
5561
+ element: elem,
5562
+ groupQueue,
5563
+ hideControllers: !!isMoving && actionType === "drag"
5564
+ });
5469
5565
  }
5470
5566
  } else {
5471
5567
  if (hoverElement && actionType !== "drag") {
@@ -5483,7 +5579,12 @@ var __privateMethod = (obj, member, method) => {
5483
5579
  }
5484
5580
  }
5485
5581
  if (!isLock && elem && ["select", "drag", "resize"].includes(actionType)) {
5486
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, { ...drawBaseOpts });
5582
+ drawSelectedElementControllersVertexes(helperContext, selectedElementController, {
5583
+ ...drawBaseOpts,
5584
+ element: elem,
5585
+ groupQueue,
5586
+ hideControllers: !!isMoving && actionType === "drag"
5587
+ });
5487
5588
  } else if (actionType === "area" && areaStart && areaEnd) {
5488
5589
  drawArea(helperContext, { start: areaStart, end: areaEnd });
5489
5590
  } else if (["drag-list", "drag-list-end"].includes(actionType)) {
@@ -6210,6 +6311,7 @@ var __privateMethod = (obj, member, method) => {
6210
6311
  exports.middlewareEventScale = middlewareEventScale;
6211
6312
  exports.middlewareEventSelect = middlewareEventSelect;
6212
6313
  exports.middlewareEventSelectClear = middlewareEventSelectClear;
6314
+ exports.middlewareEventTextChange = middlewareEventTextChange;
6213
6315
  exports.middlewareEventTextEdit = middlewareEventTextEdit;
6214
6316
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6215
6317
  return exports;