@idraw/core 0.4.0-beta.11 → 0.4.0-beta.12

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.
@@ -872,6 +872,9 @@ var __privateMethod = (obj, member, method) => {
872
872
  };
873
873
  return sacelInfo;
874
874
  }
875
+ function parseRadianToAngle(radian) {
876
+ return radian / Math.PI * 180;
877
+ }
875
878
  function parseAngleToRadian(angle2) {
876
879
  return angle2 / 180 * Math.PI;
877
880
  }
@@ -889,7 +892,7 @@ var __privateMethod = (obj, member, method) => {
889
892
  ctx.translate(-center.x, -center.y);
890
893
  }
891
894
  }
892
- function rotateElement(ctx, elemSize, callback) {
895
+ function rotateElement$1(ctx, elemSize, callback) {
893
896
  const center = calcElementCenter(elemSize);
894
897
  rotateByCenter(ctx, elemSize.angle || 0, center, () => {
895
898
  callback(ctx);
@@ -915,6 +918,21 @@ var __privateMethod = (obj, member, method) => {
915
918
  };
916
919
  return calcElementCenter(elemSize);
917
920
  }
921
+ function calcRadian(center, start, end) {
922
+ const startAngle = calcLineRadian(center, start);
923
+ const endAngle = calcLineRadian(center, end);
924
+ if (endAngle !== null && startAngle !== null) {
925
+ if (startAngle > Math.PI * 3 / 2 && endAngle < Math.PI / 2) {
926
+ return endAngle + (Math.PI * 2 - startAngle);
927
+ } else if (endAngle > Math.PI * 3 / 2 && startAngle < Math.PI / 2) {
928
+ return startAngle + (Math.PI * 2 - endAngle);
929
+ } else {
930
+ return endAngle - startAngle;
931
+ }
932
+ } else {
933
+ return 0;
934
+ }
935
+ }
918
936
  function calcLineRadian(center, p) {
919
937
  const x2 = p.x - center.x;
920
938
  const y2 = p.y - center.y;
@@ -1471,8 +1489,8 @@ var __privateMethod = (obj, member, method) => {
1471
1489
  };
1472
1490
  }
1473
1491
  function calcElementSizeController(elemSize, opts) {
1474
- const { groupQueue, controllerSize, viewScaleInfo } = opts;
1475
- const ctrlSize = (controllerSize && controllerSize > 0 ? controllerSize : 8) / viewScaleInfo.scale;
1492
+ const { groupQueue, controllerSize: controllerSize2, viewScaleInfo } = opts;
1493
+ const ctrlSize = (controllerSize2 && controllerSize2 > 0 ? controllerSize2 : 8) / viewScaleInfo.scale;
1476
1494
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 = 0 } = elemSize;
1477
1495
  const ctrlGroupQueue = [
1478
1496
  ...[
@@ -1494,6 +1512,13 @@ var __privateMethod = (obj, member, method) => {
1494
1512
  totalAngle += angle3;
1495
1513
  });
1496
1514
  const vertexes = calcElementVertexesInGroup(elemSize, { groupQueue });
1515
+ const rotateElemVertexes = calcElementVertexesInGroup({
1516
+ x: x2 - ctrlSize * 2,
1517
+ y: y2 - ctrlSize * 2,
1518
+ h: h2 + ctrlSize * 4,
1519
+ w: w2 + ctrlSize * 4,
1520
+ angle: angle2
1521
+ }, { groupQueue: [...groupQueue] });
1497
1522
  const topCenter = getCenterFromTwoPoints(vertexes[0], vertexes[1]);
1498
1523
  const rightCenter = getCenterFromTwoPoints(vertexes[1], vertexes[2]);
1499
1524
  const bottomCenter = getCenterFromTwoPoints(vertexes[2], vertexes[3]);
@@ -1522,6 +1547,9 @@ var __privateMethod = (obj, member, method) => {
1522
1547
  const rightMiddleVertexes = calcElementVertexes(rightMiddleSize);
1523
1548
  const bottomMiddleVertexes = calcElementVertexes(bottomMiddleSize);
1524
1549
  const leftMiddleVertexes = calcElementVertexes(leftMiddleSize);
1550
+ const rotateCenter = getCenterFromTwoPoints(rotateElemVertexes[0], rotateElemVertexes[1]);
1551
+ const rotateSize = createControllerElementSizeFromCenter(rotateCenter, { size: ctrlSize, angle: totalAngle });
1552
+ const rotateVertexes2 = calcElementVertexes(rotateSize);
1525
1553
  const sizeController = {
1526
1554
  elementWrapper: vertexes,
1527
1555
  left: {
@@ -1583,6 +1611,11 @@ var __privateMethod = (obj, member, method) => {
1583
1611
  type: "bottom-middle",
1584
1612
  vertexes: bottomMiddleVertexes,
1585
1613
  center: bottomCenter
1614
+ },
1615
+ rotate: {
1616
+ type: "rotate",
1617
+ vertexes: rotateVertexes2,
1618
+ center: rotateCenter
1586
1619
  }
1587
1620
  };
1588
1621
  return sizeController;
@@ -1862,7 +1895,7 @@ var __privateMethod = (obj, member, method) => {
1862
1895
  ctx.clip(path2d);
1863
1896
  ctx.translate(0 - internalX, 0 - internalY);
1864
1897
  ctx.setTransform(1, 0, 0, 1, 0, 0);
1865
- rotateElement(ctx, Object.assign({}, viewElem), () => {
1898
+ rotateElement$1(ctx, Object.assign({}, viewElem), () => {
1866
1899
  renderContent === null || renderContent === void 0 ? void 0 : renderContent();
1867
1900
  });
1868
1901
  ctx.restore();
@@ -2086,7 +2119,7 @@ var __privateMethod = (obj, member, method) => {
2086
2119
  const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2087
2120
  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;
2088
2121
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2089
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2122
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2090
2123
  drawBoxShadow(ctx, viewElem, {
2091
2124
  viewScaleInfo,
2092
2125
  viewSizeInfo,
@@ -2140,7 +2173,7 @@ var __privateMethod = (obj, member, method) => {
2140
2173
  const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2141
2174
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = (calculator === null || calculator === void 0 ? void 0 : calculator.elementSize(elem, viewScaleInfo, viewSizeInfo)) || elem;
2142
2175
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2143
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2176
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2144
2177
  drawBoxShadow(ctx, viewElem, {
2145
2178
  viewScaleInfo,
2146
2179
  viewSizeInfo,
@@ -2163,7 +2196,7 @@ var __privateMethod = (obj, member, method) => {
2163
2196
  const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2164
2197
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = (calculator === null || calculator === void 0 ? void 0 : calculator.elementSize(elem, viewScaleInfo, viewSizeInfo)) || elem;
2165
2198
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2166
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2199
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2167
2200
  drawBoxShadow(ctx, viewElem, {
2168
2201
  viewScaleInfo,
2169
2202
  viewSizeInfo,
@@ -2209,7 +2242,7 @@ var __privateMethod = (obj, member, method) => {
2209
2242
  const content = opts.loader.getContent(elem);
2210
2243
  const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2211
2244
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = (calculator === null || calculator === void 0 ? void 0 : calculator.elementSize(elem, viewScaleInfo, viewSizeInfo)) || elem;
2212
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2245
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2213
2246
  if (!content && !opts.loader.isDestroyed()) {
2214
2247
  opts.loader.load(elem, opts.elementAssets || {});
2215
2248
  }
@@ -2224,7 +2257,7 @@ var __privateMethod = (obj, member, method) => {
2224
2257
  const content = opts.loader.getContent(elem);
2225
2258
  const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2226
2259
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = (calculator === null || calculator === void 0 ? void 0 : calculator.elementSize(elem, viewScaleInfo, viewSizeInfo)) || elem;
2227
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2260
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2228
2261
  if (!content && !opts.loader.isDestroyed()) {
2229
2262
  opts.loader.load(elem, opts.elementAssets || {});
2230
2263
  }
@@ -2240,7 +2273,7 @@ var __privateMethod = (obj, member, method) => {
2240
2273
  const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2241
2274
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = (calculator === null || calculator === void 0 ? void 0 : calculator.elementSize(elem, viewScaleInfo, viewSizeInfo)) || elem;
2242
2275
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2243
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2276
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2244
2277
  drawBox(ctx, viewElem, {
2245
2278
  originElem: elem,
2246
2279
  calcElemSize: { x: x2, y: y2, w: w2, h: h2, angle: angle2 },
@@ -2351,7 +2384,7 @@ var __privateMethod = (obj, member, method) => {
2351
2384
  const internalY = y2 - viewOriginY;
2352
2385
  const scaleNum = viewScaleInfo.scale * viewSizeInfo.devicePixelRatio;
2353
2386
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2354
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2387
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2355
2388
  drawBox(ctx, viewElem, {
2356
2389
  originElem: elem,
2357
2390
  calcElemSize: { x: x2, y: y2, w: w2, h: h2, angle: angle2 },
@@ -2443,7 +2476,7 @@ var __privateMethod = (obj, member, method) => {
2443
2476
  const { calculator, viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2444
2477
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = (calculator === null || calculator === void 0 ? void 0 : calculator.elementSize({ x: elem.x, y: elem.y, w: elem.w, h: elem.h, angle: elem.angle }, viewScaleInfo, viewSizeInfo)) || elem;
2445
2478
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2446
- rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2479
+ rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2447
2480
  ctx.globalAlpha = getOpacity(elem) * parentOpacity;
2448
2481
  drawBoxShadow(ctx, viewElem, {
2449
2482
  viewScaleInfo,
@@ -3694,6 +3727,7 @@ var __privateMethod = (obj, member, method) => {
3694
3727
  const CURSOR_RESIZE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuMTY0NzUzLCAyMDIxLzAyLzE1LTExOjUyOjEzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMTdUMTY6MzE6MjMrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY0MTBhYjUzLWM0ZjEtNDVhNS04MjhkLTIxOTczOWFjOTk3MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBkMDNmNjM5LTE5MzctY2Y0MC1hMTg0LTIyMjg0NzczNWNmYSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyYjQwZGRmLWE0ZGEtNDY3MC1iYzc2LTBhYjY3ZmI5M2I0ZSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODJiNDBkZGYtYTRkYS00NjcwLWJjNzYtMGFiNjdmYjkzYjRlIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjMxOjIzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NjQxMGFiNTMtYzRmMS00NWE1LTgyOGQtMjE5NzM5YWM5OTcxIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz57vRudAAAEk0lEQVRYhe3ZW0jbVxzA8e8/MX+NYnG9uI4xE3bvoLt0FzradRfGBtsYo32YdAhb6WQyBqV7KOylpYjzZShDGfjmyxgbgjjwyRm16SYMhgiNKDhbL3VtNF4xJOnf3x7+59i/Wf4aTbInf3AwJMdzPjnnf/n9/jFEhGzDMIxMb3uAIsDs6ek5urS05Dtz5syE+uwekAQS6u89YD19gC0NIpJ1c8GZQHlXV9fJRCIxGo/HxxoaGj4CngWOAEGgEihXfT07MeQC3MB1dna+lkgkRkXF6urq3xcuXPgUOAE8DzwGPOiGLARwEy4ej4+JiITD4elr167NiIgsLi7eqq2trQPeBI4Bj7sh8w10xZmmeds0zdn+/v5/RERisdjUuXPnvgLeAl50Q+YTaAA+oKy7u/uE3laNAwSQ4uLiu6FQ6G4G5DG13YeAMjWWkU+gBygJhULHNe769etTTpwDGXUiz58//yXwujp5qoAHgBLAk0+gNxKJHEulUiMKN2ma5gwgPp/vjhOXjlxYWJisq6urBV5RW30IKAW8eQPGYrGjlmXdEBEZHBy8aZrmFCCmac729fVtAHt7e6MO5N2+vr47IiJLS0s3L126dBZ4Sh2LZUBRwVdwYGBgVuwOYh/zsoF0bnPBVzDTMRgOh6dFhROokSIi8/Pz0+pEeaPQx+DGWdzV1XVSX2LcgCIic3NzMzU1NV8D7wIvq9WrLNRZvOk62NHRccqJTAdGo9Hb1dXV3wAfYt9VjgAPFfI66EQWAxU9PT0fuwEvXrzYBJwF3gFeAAJAhfrfrO4k/7lxZxnr2JlJqry8POnWyePx6H4JR0vhktVkHGOXQI20SkpKLLcOhmGsA5YCaZiVLS5XoADi9XpdkznDMERhnE0fCgUHZhvOW+CO4/8A5hR7wFxjD5hr7AFzjZyBlmVlrOYdYaS1HUUuQA/gWV9fd51URDyqn1c1j6MVFGjoidfW1oq2ABrYj0V82OmVzwHNajVdB88C5wOKTdM87NaxsrKyQsFKHC2BnTDo+/TWt8Bd5INeVC44NDT0xXYZdXNz8w/AaeyS8yjwCPdzQu92ht2m/OUjIyOfS1pkAoqItLS0fA+8D7wKPA0cxs6qC1O4T0xMfKYnb21tnXEDNjc3z+nXbW1t3wFvYz9dCAL7KUThHovFPtGTNjU1jQFSX18/lg68cuXKLUAaGxs3vkB7e/u3wHHgCQpUdnpTqdQvesJgMDisUVevXh3Xry9fvnxTv66qqprQ/cfHx/vVNj/J/couv0DAv7q6+pMDeYPNSalkwkUikX7s4ukl4FHgAODPN1CXnPsWFxd/dCAjW+GGhoZCwAfYpeczwMPAPjVW3gv3IvXN98disZ8dyBGNCwQC4/r94eHhfuy6+JS6zATUCeJXY+W9cNfIUuDAwsLCr05kIBDYeBQ8Ojr6h8Lpx25BtbWlGpfv62BG5PLy8m+SFpOTk38C76mVe84NVyhgOvLgysrK7xoXjUb/Uqt2XG1rEDiYCbcd0MgwsWtk+J1EI03An0wmw5Zlefx+/2n1eRKIO5r+rWTTpFsZ/gWFrGMmeObuqwAAAABJRU5ErkJggg==";
3695
3728
  const CURSOR_DRAG_DEFAULT = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAEvUlEQVRYhc2Y20/cVRDHP8v+uKzAWkpDCtZq8BYhJkq8PBoJxgj7I2m0ryaSyFN9IT74pI8+8WJiggRj/APApFkSTGRJ+qKGUiyxbGPEWsUSuVhYC12Wy8+HmeMeYPe3d3WSye/k/M7le+bMzJkZ+J9ToEJreGVYN+vihcytstjQocUlAw0WCSoIVCv3Ae8CXwIt+u8XHVeOG8qLqgAHqAFCQCNwGugCthBJGd7S/tM6LqTzHI5KuqzgaoAHgEvAtwrkG2AG8FzXvep5nue67lX9N6P/PR1/SefXlBtkFXKNDUA/RyX1D9uUbYzOb9D1ygbSQU7eDMxhSSsSiVz3AxiJRK57nuf19/fPad8coqONFCBJPyUOIKc1OvcbgiY9ICDT8+0DHge2gR0gBeyTtviM5HeKAGlrrfMZVwhdAVaAr4F3KNF4gkA9cBbowOc68+3LwDn1Mhdy4/OcYk54nPr6+m54nofruvPa9SFQ6wfQTweNgTwInAGuQWk6mEUvHwb+Au4Dexx7ffK9+0q+CHWIBIOZ9skHYKWfK9tQ8gZoLDjIyWCg3ORY+2T8aYOyg4EaRIFrkCs4QU1NTSvabC20zyIDzuyfkYzEahHX8jHwE/LwXwHeJ4P7KIVIu5ouxFDC+HgLAy4MfEF2v1UpgOezATSiNVf6EvAWsD01NXVtdnb2bk9Pz81sp/q3KIi8t83Ae4DX0tJy0z7t8PDwD4FAYIX/WILVwKMAzc3Nu/agoaGhzmg0ugcsV0hIvlSNoH8IuIiebHJycrls4sotwaxGYvueAPAjEg3jum79yMjIr5WUjFLOxMpBIopWoBN4GfhOJ+4NDg4ulVt6i4uLm7r+BvAscA4fCXrAAfJQJ5Fg8gPgMuCMjo62d3V1LW1sbKRKlpXSxMTEmjZ/5qQrOwHwUAGmkIjiHhJdfKrM/Pz8Y+3t7RvT09Ob5QAYi8X2tbmke2cEZwAaCdoAt5QvIzEbiUSitbe3tyoej++UCnBhYSGkzdu6d1aQxkgOkfwgieQMCeCu8iwSnpNKpcIdHR3BZDJ5UCy4SCSyvL6+/giiSou67wE+eYmhAKKkIaAJUdynkdflNcQF3dFTpooxjmg0aozDAz4DXkB8bxPy1OYM7QzIOuAU0AY8pQu9CrwJ3AK8UCj0RyHgZmZmli1w3wOvAM/oHo1kiZiygbSDh7PAE8DzQA/wBqKnnuM4a2NjY7dygbtw4cICRy31deBFJA09o7eWsU7kJ1KTLJmyRyOSn5zS70fAkwBtbW2/DwwMHHR3d9d3dnY2rK6u7o2Pj2/GYrH9eDzurK2tndM1vwI+QXT7T2BTD5skQz6SCyAcLRoZkGEFGQbeRqpbubK+BPA5MI14h00L3I6Cy2h4+eQbJsKuRa6iQcGFFfB5oBt4DpFsI+Ky7iDBxW3gBhBH/GtC+R7i1lKk3UxRAG2QpvxWr0AbtB3SA5jkx36djH/dVlDbyibN3M8GDvJPyI2PSulixm/u6kZ1OQCaJ/S+tndJX6tvsFBIxcCUdA3vW5ubxMrObc0hDMhd/Rqp5QQHxeW8dubnHGM7tzVv/IECMlxQ/bpcRfRMqaNRheNcUGG9XFWDACfzWs/6Fl3t/xtO//8gpbCORQAAAABJRU5ErkJggg==`;
3696
3729
  const CURSOR_DRAG_ACTIVE = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAER0lEQVRYhe2YT2hjRRjAf8lL22xsNsm6EWKrSKvuIkIh+O9QRFxEW18KUsoe7FHoRaWCN1FPetOrIHgVKS0q9P5OxaJbodkalgVrtVZjS7Ntd02z6abPw3yzmaT585q+elj2g2HmvZn35jffN/PNNwP35R6XgM/fuif4n+dO2klQvgsaZRc4NJJvoJbHdhrIAkJAN2ADHwFfAw9J3ZoB/b9I0AA6A0SBc0Aa2EVpSqddeZ+QdmfkO+u0gIPSQQR4HfhRQH4AHMDNZDJXXNd1M5nMFalzdB3wJTAOPAD0yEB9066G6wXepVZTd5MpTdporZ6jVqsatmMJoTR3HvgJQ1u2bS+3ArRte9l1XXdsbGyJo1pdBN6Wf3d3ChlAmSQO9LeC8fquQRpDWaerHWSjSr1iu4BkJyOsF9u2s67rkslkluTVxygltAVsJBZqdCngEj5osIlW+4EYytRNF04jeu3vulCT+7QkLH20dEOhumft97pQI4s3+iiRSPwtxVSbd39J8eEGvzFXc1NAs8KSFAZeBt4AHgNeBFDWObkEAne7HAK2gT2gCFQatdca1GbtBj4E3veFprVYVLXXcg4GqM6588BbAMlkcm1qamqzr6/v6ikBet5RgiizJoDPAXdgYGDZXHkzMzPrrk9CdRWngUeAsxxdCzVwpgZ/BigWiz1mo4mJif7jqMajeJrU5hywgGvAej6fvzA0NLThN1Eul9uT4g5VTbYFNKUIfAbsZ7PZvuHh4Wt+As7Ozu5IcY2j219TQB0NV4A7qODgO4CFhYWLg4ODOb8AHccpG4A68m6pRQ1YAQ6A28A+8BXwBcDq6upTqVTquh+AuVyuW4q/opRRaQdZD1gCbgE3ge+BT4HdfD7/ZDwe/z2bzRY6hRsfH1/e3Nx8FDX/sgbgoZfvg6jo4ixqW7oIPA+8CrwHrAJuJBLJd+JaHMf5k6qmPgGeQe1SCenXk0/U21xcIC8AzwGvAJPAEuAmEon1xcXFba9w8/Pz5oqdB14CnpY+oij35km0qwmjwqAU8ISM9hIwBeQA17KsG9PT07+1gxsZGdmgdqW+BjwLDAAPoo4ALU+W9arVwWoIpXp9kouKZpPAO8AwQCwW+2d0dLQ0OTkZSafT0UKhUJ6bm9t2HKeysrIS3tra0g7+KvABUJC0g5rrJdRcbLpImtleRzYashc1P2OSXwbebDVykX3gW+Ab1AHqhuQ3pe6AJlFMO0CoPROHDcio5I8DL1A9C8dQbmod+APYAK4DvwjQnsDdErgyVTfTEaCG1GFYGHXG7TVSo2OkdvhlAflXoHSuNdfStFqaRhEi2kfdprrj6M5LAt0I8EDaaMdflPal48CB95hMr3Bt8h4jD0kyL5E0pN6dysZzW7N2AqjbmhdIZjJvufTOpE19x3g+9s1XJ/ck5tVbfdhu+rxDfLiSO+lFToCjZwrXyH2/0Lwv95z8B1jAqXmDnj4YAAAAAElFTkSuQmCC`;
3730
+ const CURSOR_RESIZE_ROTATE = `data:image/png;base64,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`;
3697
3731
  class Cursor {
3698
3732
  constructor(container, opts) {
3699
3733
  __privateAdd(this, _init);
@@ -3709,7 +3743,8 @@ var __privateMethod = (obj, member, method) => {
3709
3743
  auto: CURSOR,
3710
3744
  "drag-default": CURSOR_DRAG_DEFAULT,
3711
3745
  "drag-active": CURSOR_DRAG_ACTIVE,
3712
- "rotate-0": CURSOR_RESIZE
3746
+ "rotate-0": CURSOR_RESIZE,
3747
+ rotate: CURSOR_RESIZE_ROTATE
3713
3748
  });
3714
3749
  __privateSet(this, _container, container);
3715
3750
  __privateSet(this, _eventHub, opts.eventHub);
@@ -3730,6 +3765,8 @@ var __privateMethod = (obj, member, method) => {
3730
3765
  var _a;
3731
3766
  if (e.type === "over-element" || !e.type) {
3732
3767
  __privateMethod(this, _resetCursor, resetCursor_fn).call(this, "auto");
3768
+ } else if (e.type === "resize-rotate") {
3769
+ __privateMethod(this, _resetCursor, resetCursor_fn).call(this, "rotate");
3733
3770
  } else if (typeof e.type === "string" && ((_a = e.type) == null ? void 0 : _a.startsWith("resize-"))) {
3734
3771
  __privateMethod(this, _setCursorResize, setCursorResize_fn).call(this, e);
3735
3772
  } else if (e.type === "drag-default") {
@@ -3761,6 +3798,9 @@ var __privateMethod = (obj, member, method) => {
3761
3798
  if (cursorKey.startsWith("rotate-") && __privateGet(this, _cursorImageMap)[__privateGet(this, _cursorType)]) {
3762
3799
  offsetX = 10;
3763
3800
  offsetY = 10;
3801
+ } else if (cursorKey === "rotate") {
3802
+ offsetX = 10;
3803
+ offsetY = 10;
3764
3804
  }
3765
3805
  if (cursorKey === "default") {
3766
3806
  __privateGet(this, _container).style.cursor = "default";
@@ -3846,6 +3886,7 @@ var __privateMethod = (obj, member, method) => {
3846
3886
  const areaBorderWidth = 1;
3847
3887
  const wrapperColor = "#1973ba";
3848
3888
  const lockColor = "#5b5959b5";
3889
+ const controllerSize = 10;
3849
3890
  function drawVertexes(ctx, vertexes, opts) {
3850
3891
  const { borderColor: borderColor2, borderWidth: borderWidth2, background: background2, lineDash } = opts;
3851
3892
  ctx.setLineDash([]);
@@ -3863,6 +3904,42 @@ var __privateMethod = (obj, member, method) => {
3863
3904
  ctx.stroke();
3864
3905
  ctx.fill();
3865
3906
  }
3907
+ function drawLine(ctx, start, end, opts) {
3908
+ const { borderColor: borderColor2, borderWidth: borderWidth2, lineDash } = opts;
3909
+ ctx.setLineDash([]);
3910
+ ctx.lineWidth = borderWidth2;
3911
+ ctx.strokeStyle = borderColor2;
3912
+ ctx.setLineDash(lineDash);
3913
+ ctx.beginPath();
3914
+ ctx.moveTo(start.x, start.y);
3915
+ ctx.lineTo(end.x, end.y);
3916
+ ctx.closePath();
3917
+ ctx.stroke();
3918
+ }
3919
+ function drawCircleController(ctx, circleCenter, opts) {
3920
+ const { size, borderColor: borderColor2, borderWidth: borderWidth2, background: background2 } = opts;
3921
+ const center = circleCenter;
3922
+ const r = size / 2;
3923
+ const a = r;
3924
+ const b = r;
3925
+ if (a >= 0 && b >= 0) {
3926
+ if (typeof borderWidth2 === "number" && borderWidth2 > 0) {
3927
+ const ba = borderWidth2 / 2 + a;
3928
+ const bb = borderWidth2 / 2 + b;
3929
+ ctx.beginPath();
3930
+ ctx.strokeStyle = borderColor2;
3931
+ ctx.lineWidth = borderWidth2;
3932
+ ctx.circle(center.x, center.y, ba, bb, 0, 0, 2 * Math.PI);
3933
+ ctx.closePath();
3934
+ ctx.stroke();
3935
+ }
3936
+ ctx.beginPath();
3937
+ ctx.fillStyle = background2;
3938
+ ctx.circle(center.x, center.y, a, b, 0, 0, 2 * Math.PI);
3939
+ ctx.closePath();
3940
+ ctx.fill();
3941
+ }
3942
+ }
3866
3943
  function drawHoverVertexesWrapper(ctx, vertexes, opts) {
3867
3944
  if (!vertexes) {
3868
3945
  return;
@@ -3912,14 +3989,16 @@ var __privateMethod = (obj, member, method) => {
3912
3989
  if (!controller) {
3913
3990
  return;
3914
3991
  }
3915
- const { elementWrapper, topLeft, topRight, bottomLeft, bottomRight } = controller;
3992
+ const { elementWrapper, topLeft, topRight, bottomLeft, bottomRight, top, rotate } = controller;
3916
3993
  const wrapperOpts = { borderColor: wrapperColor, borderWidth: selectWrapperBorderWidth, background: "transparent", lineDash: [] };
3917
3994
  const ctrlOpts = { ...wrapperOpts, borderWidth: resizeControllerBorderWidth, background: "#FFFFFF" };
3995
+ drawLine(ctx, calcViewPointSize(top.center, opts), calcViewPointSize(rotate.center, opts), { ...ctrlOpts, borderWidth: 2 });
3918
3996
  drawVertexes(ctx, calcViewVertexes(elementWrapper, opts), wrapperOpts);
3919
3997
  drawVertexes(ctx, calcViewVertexes(topLeft.vertexes, opts), ctrlOpts);
3920
3998
  drawVertexes(ctx, calcViewVertexes(topRight.vertexes, opts), ctrlOpts);
3921
3999
  drawVertexes(ctx, calcViewVertexes(bottomLeft.vertexes, opts), ctrlOpts);
3922
4000
  drawVertexes(ctx, calcViewVertexes(bottomRight.vertexes, opts), ctrlOpts);
4001
+ drawCircleController(ctx, calcViewPointSize(rotate.center, opts), { ...ctrlOpts, size: controllerSize, borderWidth: 2 });
3923
4002
  }
3924
4003
  function drawArea(ctx, opts) {
3925
4004
  const { start, end } = opts;
@@ -4009,8 +4088,8 @@ var __privateMethod = (obj, member, method) => {
4009
4088
  };
4010
4089
  const { ctx, data, calculator, selectedElements, viewScaleInfo, viewSizeInfo, areaSize, groupQueue, selectedElementController } = opts;
4011
4090
  if (selectedElementController) {
4012
- const { left, right, top, bottom, topLeft, topRight, bottomLeft, bottomRight } = selectedElementController;
4013
- const ctrls = [left, right, top, bottom, topLeft, topRight, bottomLeft, bottomRight];
4091
+ const { left, right, top, bottom, topLeft, topRight, bottomLeft, bottomRight, rotate } = selectedElementController;
4092
+ const ctrls = [left, right, top, bottom, topLeft, topRight, bottomLeft, bottomRight, rotate];
4014
4093
  for (let i = 0; i < ctrls.length; i++) {
4015
4094
  const ctrl = ctrls[i];
4016
4095
  if (isPointInViewActiveVertexes(p, { ctx, vertexes: ctrl.vertexes, viewSizeInfo, viewScaleInfo })) {
@@ -4590,6 +4669,24 @@ var __privateMethod = (obj, member, method) => {
4590
4669
  }
4591
4670
  return { x: x2, y: y2, w: w2, h: h2, angle: elem.angle };
4592
4671
  }
4672
+ function rotateElement(elem, opts) {
4673
+ const { x: x2, y: y2, w: w2, h: h2, angle: angle2 = 0 } = elem;
4674
+ const { center, start, end, viewScaleInfo, viewSizeInfo } = opts;
4675
+ const elemCenter = calcViewPointSize(center, {
4676
+ viewScaleInfo,
4677
+ viewSizeInfo
4678
+ });
4679
+ const startAngle = limitAngle(angle2);
4680
+ const changedRadian = calcRadian(elemCenter, start, end);
4681
+ const endAngle = startAngle + parseRadianToAngle(changedRadian);
4682
+ return {
4683
+ x: x2,
4684
+ y: y2,
4685
+ w: w2,
4686
+ h: h2,
4687
+ angle: endAngle
4688
+ };
4689
+ }
4593
4690
  function getSelectedListArea(data, opts) {
4594
4691
  var _a;
4595
4692
  const indexes = [];
@@ -4907,7 +5004,7 @@ var __privateMethod = (obj, member, method) => {
4907
5004
  if (list.length === 1) {
4908
5005
  const controller = calcElementSizeController(list[0], {
4909
5006
  groupQueue: sharer.getSharedStorage(keyGroupQueue),
4910
- controllerSize: 10,
5007
+ controllerSize,
4911
5008
  viewScaleInfo: sharer.getActiveViewScaleInfo()
4912
5009
  });
4913
5010
  sharer.setSharedStorage(keySelectedElementController, controller);
@@ -5134,6 +5231,8 @@ var __privateMethod = (obj, member, method) => {
5134
5231
  const data = sharer.getActiveStorage("data");
5135
5232
  const elems = getActiveElements();
5136
5233
  const scale = sharer.getActiveStorage("scale") || 1;
5234
+ const viewScaleInfo = sharer.getActiveViewScaleInfo();
5235
+ const viewSizeInfo = sharer.getActiveViewSizeInfo();
5137
5236
  const start = prevPoint;
5138
5237
  const end = e.point;
5139
5238
  const resizeType = sharer.getSharedStorage(keyResizeType);
@@ -5183,17 +5282,38 @@ var __privateMethod = (obj, member, method) => {
5183
5282
  resizeStart = rotatePointInGroup(start, pointGroupQueue);
5184
5283
  resizeEnd = rotatePointInGroup(end, pointGroupQueue);
5185
5284
  }
5186
- const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
5187
- elems[0].x = resizedElemSize.x;
5188
- elems[0].y = resizedElemSize.y;
5189
- if (elems[0].type === "group" && ((_c = elems[0].operations) == null ? void 0 : _c.deepResize) === true) {
5190
- deepResizeGroupElement(elems[0], {
5191
- w: resizedElemSize.w,
5192
- h: resizedElemSize.h
5285
+ if (resizeType === "resize-rotate") {
5286
+ const controller = sharer.getSharedStorage(keySelectedElementController);
5287
+ const viewVertexes = [
5288
+ controller.topLeft.center,
5289
+ controller.topRight.center,
5290
+ controller.bottomLeft.center,
5291
+ controller.bottomRight.center
5292
+ ];
5293
+ const viewCenter = calcElementCenterFromVertexes(viewVertexes);
5294
+ const resizedElemSize = rotateElement(elems[0], {
5295
+ center: viewCenter,
5296
+ viewScaleInfo,
5297
+ viewSizeInfo,
5298
+ start,
5299
+ end,
5300
+ resizeType,
5301
+ sharer
5193
5302
  });
5303
+ elems[0].angle = resizedElemSize.angle;
5194
5304
  } else {
5195
- elems[0].w = resizedElemSize.w;
5196
- elems[0].h = resizedElemSize.h;
5305
+ const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
5306
+ elems[0].x = resizedElemSize.x;
5307
+ elems[0].y = resizedElemSize.y;
5308
+ if (elems[0].type === "group" && ((_c = elems[0].operations) == null ? void 0 : _c.deepResize) === true) {
5309
+ deepResizeGroupElement(elems[0], {
5310
+ w: resizedElemSize.w,
5311
+ h: resizedElemSize.h
5312
+ });
5313
+ } else {
5314
+ elems[0].w = resizedElemSize.w;
5315
+ elems[0].h = resizedElemSize.h;
5316
+ }
5197
5317
  }
5198
5318
  updateSelectedElementList([elems[0]]);
5199
5319
  viewer.drawFrame();