@idraw/core 0.4.0-alpha.4 → 0.4.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,28 @@
1
1
  var iDrawCore = function(exports) {
2
- "use strict";
2
+ "use strict";var __accessCheck = (obj, member, msg) => {
3
+ if (!member.has(obj))
4
+ throw TypeError("Cannot " + msg);
5
+ };
6
+ var __privateGet = (obj, member, getter) => {
7
+ __accessCheck(obj, member, "read from private field");
8
+ return getter ? getter.call(obj) : member.get(obj);
9
+ };
10
+ var __privateAdd = (obj, member, value) => {
11
+ if (member.has(obj))
12
+ throw TypeError("Cannot add the same private member more than once");
13
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
14
+ };
15
+ var __privateSet = (obj, member, value, setter) => {
16
+ __accessCheck(obj, member, "write to private field");
17
+ setter ? setter.call(obj, value) : member.set(obj, value);
18
+ return value;
19
+ };
20
+ var __privateMethod = (obj, member, method) => {
21
+ __accessCheck(obj, member, "access private method");
22
+ return method;
23
+ };
24
+
25
+ var _board, _container, _initContainer, initContainer_fn;
3
26
  function throttle(fn, timeout) {
4
27
  let timer = -1;
5
28
  return function(...args) {
@@ -986,6 +1009,32 @@ var iDrawCore = function(exports) {
986
1009
  _scan(uuid, elements);
987
1010
  return groupQueue;
988
1011
  }
1012
+ function findElementsFromListByPositions(positions, list) {
1013
+ const elements = [];
1014
+ positions.forEach((pos) => {
1015
+ const elem = findElementFromListByPosition(pos, list);
1016
+ if (elem) {
1017
+ elements.push(elem);
1018
+ }
1019
+ });
1020
+ return elements;
1021
+ }
1022
+ function findElementFromListByPosition(position, list) {
1023
+ let result = null;
1024
+ let tempList = list;
1025
+ for (let i = 0; i < position.length; i++) {
1026
+ const pos = position[i];
1027
+ const item = tempList[pos];
1028
+ if (i < position.length - 1 && item.type === "group") {
1029
+ tempList = item.detail.children;
1030
+ } else if (i === position.length - 1) {
1031
+ result = item;
1032
+ } else {
1033
+ break;
1034
+ }
1035
+ }
1036
+ return result;
1037
+ }
989
1038
  function checkRectIntersect(rect1, rect2) {
990
1039
  const react1MinX = rect1.x;
991
1040
  const react1MinY = rect1.y;
@@ -997,6 +1046,25 @@ var iDrawCore = function(exports) {
997
1046
  const react2MaxY = rect2.y + rect2.h;
998
1047
  return react1MinX <= react2MaxX && react1MaxX >= react2MinX && react1MinY <= react2MaxY && react1MaxY >= react2MinY;
999
1048
  }
1049
+ function calcViewScaleInfo(info, opts) {
1050
+ const { scale, offsetX, offsetY } = info;
1051
+ const { viewSizeInfo } = opts;
1052
+ const { width, height, contextWidth, contextHeight } = viewSizeInfo;
1053
+ const w2 = contextWidth * scale;
1054
+ const h2 = contextHeight * scale;
1055
+ const offsetLeft = 0 - offsetX * scale;
1056
+ const offsetTop = 0 - offsetY * scale;
1057
+ const offsetRight = width - (w2 + offsetLeft / scale);
1058
+ const offsetBottom = height - (h2 + offsetTop / scale);
1059
+ const newScaleInfo = {
1060
+ scale,
1061
+ offsetLeft,
1062
+ offsetTop,
1063
+ offsetRight,
1064
+ offsetBottom
1065
+ };
1066
+ return newScaleInfo;
1067
+ }
1000
1068
  function viewScale(opts) {
1001
1069
  const { scale, point, viewScaleInfo: prevViewScaleInfo } = opts;
1002
1070
  const { offsetLeft, offsetTop } = prevViewScaleInfo;
@@ -1364,7 +1432,8 @@ var iDrawCore = function(exports) {
1364
1432
  fontSize: 16,
1365
1433
  lineHeight: 20,
1366
1434
  fontFamily: "sans-serif",
1367
- fontWeight: 400
1435
+ fontWeight: 400,
1436
+ overflow: "hidden"
1368
1437
  };
1369
1438
  return config;
1370
1439
  }
@@ -1386,7 +1455,7 @@ var iDrawCore = function(exports) {
1386
1455
  }
1387
1456
  let bw = 0;
1388
1457
  if (typeof borderWidth2 === "number") {
1389
- bw = (borderWidth2 || 1) * scale;
1458
+ bw = (borderWidth2 || 0) * scale;
1390
1459
  }
1391
1460
  if (boxSizing === "border-box") {
1392
1461
  x2 = viewElem.x + bw / 2;
@@ -1404,6 +1473,11 @@ var iDrawCore = function(exports) {
1404
1473
  w2 = viewElem.w;
1405
1474
  h2 = viewElem.h;
1406
1475
  }
1476
+ w2 = Math.max(w2, 1);
1477
+ h2 = Math.max(h2, 1);
1478
+ radiusList = radiusList.map((r) => {
1479
+ return Math.min(r, w2 / 2, h2 / 2);
1480
+ });
1407
1481
  return {
1408
1482
  x: x2,
1409
1483
  y: y2,
@@ -1683,6 +1757,11 @@ var iDrawCore = function(exports) {
1683
1757
  } else {
1684
1758
  ctx.lineCap = "square";
1685
1759
  }
1760
+ w2 = Math.max(w2, 1);
1761
+ h2 = Math.max(h2, 1);
1762
+ radiusList = radiusList.map((r) => {
1763
+ return Math.min(r, w2 / 2, h2 / 2);
1764
+ });
1686
1765
  ctx.setLineDash(viewBorderDash);
1687
1766
  ctx.lineWidth = bw;
1688
1767
  ctx.beginPath();
@@ -1807,6 +1886,7 @@ var iDrawCore = function(exports) {
1807
1886
  viewSizeInfo
1808
1887
  });
1809
1888
  ctx.save();
1889
+ ctx.fillStyle = "transparent";
1810
1890
  ctx.beginPath();
1811
1891
  ctx.moveTo(x3 + radiusList[0], y3);
1812
1892
  ctx.arcTo(x3 + w3, y3, x3 + w3, y3 + h3, radiusList[1]);
@@ -2059,49 +2139,65 @@ var iDrawCore = function(exports) {
2059
2139
  const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = calculator.elementSize({ x: elem.x, y: elem.y, w: elem.w, h: elem.h, angle: elem.angle }, viewScaleInfo, viewSizeInfo);
2060
2140
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2061
2141
  rotateElement(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2062
- drawBox(ctx, viewElem, {
2063
- originElem: elem,
2064
- calcElemSize: { x: x2, y: y2, w: w2, h: h2, angle: angle2 },
2142
+ drawBoxShadow(ctx, viewElem, {
2065
2143
  viewScaleInfo,
2066
2144
  viewSizeInfo,
2067
2145
  renderContent: () => {
2068
- if (Array.isArray(elem.detail.children)) {
2069
- const { parentElementSize: parentSize } = opts;
2070
- const newParentSize = {
2071
- x: parentSize.x + elem.x,
2072
- y: parentSize.y + elem.y,
2073
- w: elem.w || parentSize.w,
2074
- h: elem.h || parentSize.h,
2075
- angle: elem.angle
2076
- };
2077
- const { calculator: calculator2 } = opts;
2078
- if (elem.detail.overflow === "hidden") {
2079
- ctx.save();
2080
- ctx.beginPath();
2081
- ctx.moveTo(x2, y2);
2082
- ctx.lineTo(x2 + w2, y2);
2083
- ctx.lineTo(x2 + w2, y2 + h2);
2084
- ctx.lineTo(x2, y2 + h2);
2085
- ctx.closePath();
2086
- ctx.clip();
2087
- }
2088
- for (let i = 0; i < elem.detail.children.length; i++) {
2089
- let child = elem.detail.children[i];
2090
- child = Object.assign(Object.assign({}, child), {
2091
- x: newParentSize.x + child.x,
2092
- y: newParentSize.y + child.y
2146
+ drawBox(ctx, viewElem, {
2147
+ originElem: elem,
2148
+ calcElemSize: { x: x2, y: y2, w: w2, h: h2, angle: angle2 },
2149
+ viewScaleInfo,
2150
+ viewSizeInfo,
2151
+ renderContent: () => {
2152
+ const { x: x3, y: y3, w: w3, h: h3, radiusList } = calcViewBoxSize(viewElem, {
2153
+ viewScaleInfo,
2154
+ viewSizeInfo
2093
2155
  });
2094
- if (!calculator2.isElementInView(child, opts.viewScaleInfo, opts.viewSizeInfo)) {
2095
- continue;
2156
+ if (elem.detail.overflow === "hidden") {
2157
+ ctx.save();
2158
+ ctx.fillStyle = "transparent";
2159
+ ctx.beginPath();
2160
+ ctx.moveTo(x3 + radiusList[0], y3);
2161
+ ctx.arcTo(x3 + w3, y3, x3 + w3, y3 + h3, radiusList[1]);
2162
+ ctx.arcTo(x3 + w3, y3 + h3, x3, y3 + h3, radiusList[2]);
2163
+ ctx.arcTo(x3, y3 + h3, x3, y3, radiusList[3]);
2164
+ ctx.arcTo(x3, y3, x3 + w3, y3, radiusList[0]);
2165
+ ctx.closePath();
2166
+ ctx.fill();
2167
+ ctx.clip();
2096
2168
  }
2097
- try {
2098
- drawElement(ctx, child, Object.assign({}, opts));
2099
- } catch (err) {
2100
- console.error(err);
2169
+ if (Array.isArray(elem.detail.children)) {
2170
+ const { parentElementSize: parentSize } = opts;
2171
+ const newParentSize = {
2172
+ x: parentSize.x + elem.x,
2173
+ y: parentSize.y + elem.y,
2174
+ w: elem.w || parentSize.w,
2175
+ h: elem.h || parentSize.h,
2176
+ angle: elem.angle
2177
+ };
2178
+ const { calculator: calculator2 } = opts;
2179
+ for (let i = 0; i < elem.detail.children.length; i++) {
2180
+ let child = elem.detail.children[i];
2181
+ child = Object.assign(Object.assign({}, child), {
2182
+ x: newParentSize.x + child.x,
2183
+ y: newParentSize.y + child.y
2184
+ });
2185
+ if (!calculator2.isElementInView(child, opts.viewScaleInfo, opts.viewSizeInfo)) {
2186
+ continue;
2187
+ }
2188
+ try {
2189
+ drawElement(ctx, child, Object.assign({}, opts));
2190
+ } catch (err) {
2191
+ console.error(err);
2192
+ }
2193
+ }
2194
+ }
2195
+ if (elem.detail.overflow === "hidden") {
2196
+ ctx.globalAlpha = 1;
2197
+ ctx.restore();
2101
2198
  }
2102
2199
  }
2103
- ctx.restore();
2104
- }
2200
+ });
2105
2201
  }
2106
2202
  });
2107
2203
  });
@@ -2710,6 +2806,14 @@ var iDrawCore = function(exports) {
2710
2806
  sharer.setActiveViewScaleInfo(viewScaleInfo);
2711
2807
  return viewScaleInfo;
2712
2808
  }
2809
+ updateViewScaleInfo(opts) {
2810
+ const { sharer } = this._opts;
2811
+ const viewScaleInfo = calcViewScaleInfo(opts, {
2812
+ viewSizeInfo: sharer.getActiveViewSizeInfo()
2813
+ });
2814
+ sharer.setActiveViewScaleInfo(viewScaleInfo);
2815
+ return viewScaleInfo;
2816
+ }
2713
2817
  resize(viewSize = {}) {
2714
2818
  const { sharer } = this._opts;
2715
2819
  const originViewSize = sharer.getActiveViewSizeInfo();
@@ -2730,7 +2834,7 @@ var iDrawCore = function(exports) {
2730
2834
  return newViewSize;
2731
2835
  }
2732
2836
  }
2733
- const frameTime = 16;
2837
+ const throttleTime = 10;
2734
2838
  const LOCK_MODES = ["RULER"];
2735
2839
  class Board {
2736
2840
  constructor(opts) {
@@ -2753,7 +2857,6 @@ var iDrawCore = function(exports) {
2753
2857
  });
2754
2858
  this._opts = opts;
2755
2859
  this._sharer = sharer;
2756
- this._renderer = renderer;
2757
2860
  this._watcher = watcher;
2758
2861
  this._calculator = calculator;
2759
2862
  this._viewer = new Viewer({
@@ -2776,19 +2879,19 @@ var iDrawCore = function(exports) {
2776
2879
  this._watcher.on("pointEnd", this._handlePointEnd.bind(this));
2777
2880
  this._watcher.on("pointMove", throttle((e) => {
2778
2881
  this._handlePointMove(e);
2779
- }, frameTime));
2882
+ }, throttleTime));
2780
2883
  this._watcher.on("hover", throttle((e) => {
2781
2884
  this._handleHover(e);
2782
- }, frameTime));
2885
+ }, throttleTime));
2783
2886
  this._watcher.on("wheelX", throttle((e) => {
2784
2887
  this._handleWheelX(e);
2785
- }, frameTime));
2888
+ }, throttleTime));
2786
2889
  this._watcher.on("wheelY", throttle((e) => {
2787
2890
  this._handleWheelY(e);
2788
- }, frameTime));
2891
+ }, throttleTime));
2789
2892
  this._watcher.on("wheelScale", throttle((e) => {
2790
2893
  this._handleWheelScale(e);
2791
- }, frameTime));
2894
+ }, throttleTime));
2792
2895
  this._watcher.on("scrollX", this._handleScrollX.bind(this));
2793
2896
  this._watcher.on("scrollY", this._handleScrollY.bind(this));
2794
2897
  this._watcher.on("resize", this._handleResize.bind(this));
@@ -2972,9 +3075,9 @@ var iDrawCore = function(exports) {
2972
3075
  return data;
2973
3076
  }
2974
3077
  use(middleware) {
2975
- const { viewContent } = this._opts;
3078
+ const { viewContent, container } = this._opts;
2976
3079
  const { _sharer: sharer, _viewer: viewer, _calculator: calculator, _eventHub: eventHub } = this;
2977
- const obj = middleware({ viewContent, sharer, viewer, calculator, eventHub });
3080
+ const obj = middleware({ viewContent, sharer, viewer, calculator, eventHub, container });
2978
3081
  this._middlewares.push(middleware);
2979
3082
  this._activeMiddlewareObjs.push(obj);
2980
3083
  }
@@ -2986,6 +3089,9 @@ var iDrawCore = function(exports) {
2986
3089
  scroll(opts) {
2987
3090
  return this._viewer.scroll(opts);
2988
3091
  }
3092
+ updateViewScaleInfo(opts) {
3093
+ return this._viewer.updateViewScaleInfo(opts);
3094
+ }
2989
3095
  resize(newViewSize) {
2990
3096
  const viewSize = this._viewer.resize(newViewSize);
2991
3097
  const { width, height, devicePixelRatio } = newViewSize;
@@ -3958,16 +4064,155 @@ var iDrawCore = function(exports) {
3958
4064
  moveY
3959
4065
  };
3960
4066
  }
4067
+ const middlewareEventTextEdit = "@middleware/text-edit";
4068
+ const defaultElementDetail = getDefaultElementDetailConfig();
4069
+ const MiddlewareTextEditor = (opts) => {
4070
+ const key2 = "SELECT";
4071
+ const { eventHub, viewContent, viewer } = opts;
4072
+ const canvas = viewContent.boardContext.canvas;
4073
+ const textarea = document.createElement("textarea");
4074
+ const canvasWrapper = document.createElement("div");
4075
+ const container = opts.container || document.body;
4076
+ const mask = document.createElement("div");
4077
+ let activeElem = null;
4078
+ canvasWrapper.appendChild(textarea);
4079
+ canvasWrapper.style.position = "absolute";
4080
+ mask.appendChild(canvasWrapper);
4081
+ mask.style.position = "fixed";
4082
+ mask.style.top = "0";
4083
+ mask.style.bottom = "0";
4084
+ mask.style.left = "0";
4085
+ mask.style.right = "0";
4086
+ mask.style.display = "none";
4087
+ container.appendChild(mask);
4088
+ const showTextArea = (e) => {
4089
+ resetCanvasWrapper();
4090
+ resetTextArea(e);
4091
+ mask.style.display = "block";
4092
+ };
4093
+ const hideTextArea = () => {
4094
+ mask.style.display = "none";
4095
+ activeElem = null;
4096
+ };
4097
+ const getCanvasRect = () => {
4098
+ const clientRect = canvas.getBoundingClientRect();
4099
+ const { left, top, width, height } = clientRect;
4100
+ return { left, top, width, height };
4101
+ };
4102
+ const createBox = (opts2) => {
4103
+ const { size, parent } = opts2;
4104
+ const div = document.createElement("div");
4105
+ const { x: x2, y: y2, w: w2, h: h2 } = size;
4106
+ const angle2 = limitAngle(size.angle || 0);
4107
+ div.style.position = "absolute";
4108
+ div.style.left = `${x2}px`;
4109
+ div.style.top = `${y2}px`;
4110
+ div.style.width = `${w2}px`;
4111
+ div.style.height = `${h2}px`;
4112
+ div.style.transform = `rotate(${angle2}deg)`;
4113
+ parent.appendChild(div);
4114
+ return div;
4115
+ };
4116
+ const resetTextArea = (e) => {
4117
+ const { viewScaleInfo, element, groupQueue } = e;
4118
+ const { scale, offsetTop, offsetLeft } = viewScaleInfo;
4119
+ if (canvasWrapper.children) {
4120
+ Array.from(canvasWrapper.children).forEach((child) => {
4121
+ child.remove();
4122
+ });
4123
+ }
4124
+ let parent = canvasWrapper;
4125
+ for (let i = 0; i < groupQueue.length; i++) {
4126
+ const group = groupQueue[i];
4127
+ const { x: x2, y: y2, w: w2, h: h2 } = group;
4128
+ const angle2 = limitAngle(group.angle || 0);
4129
+ const size = {
4130
+ x: x2 * scale,
4131
+ y: y2 * scale,
4132
+ w: w2 * scale,
4133
+ h: h2 * scale,
4134
+ angle: angle2
4135
+ };
4136
+ if (i === 0) {
4137
+ size.x += offsetLeft;
4138
+ size.y += offsetTop;
4139
+ }
4140
+ parent = createBox({ size, parent });
4141
+ }
4142
+ const detail = {
4143
+ ...defaultElementDetail,
4144
+ ...element.detail
4145
+ };
4146
+ textarea.style.position = "absolute";
4147
+ textarea.style.left = `${element.x * scale}px`;
4148
+ textarea.style.top = `${element.y * scale}px`;
4149
+ textarea.style.width = `${element.w * scale}px`;
4150
+ textarea.style.height = `${element.h * scale}px`;
4151
+ textarea.style.transform = `rotate(${limitAngle(element.angle || 0)}deg)`;
4152
+ textarea.style.border = "none";
4153
+ textarea.style.resize = "none";
4154
+ textarea.style.overflow = "hidden";
4155
+ textarea.style.wordBreak = "break-all";
4156
+ textarea.style.background = "#FFFFFF";
4157
+ textarea.style.color = "#333333";
4158
+ textarea.style.fontSize = `${detail.fontSize * scale}px`;
4159
+ textarea.style.lineHeight = `${detail.lineHeight * scale}px`;
4160
+ textarea.style.fontFamily = detail.fontFamily;
4161
+ textarea.style.fontWeight = `${detail.fontWeight}`;
4162
+ textarea.value = detail.text || "";
4163
+ parent.appendChild(textarea);
4164
+ };
4165
+ const resetCanvasWrapper = () => {
4166
+ const { left, top, width, height } = getCanvasRect();
4167
+ canvasWrapper.style.position = "absolute";
4168
+ canvasWrapper.style.overflow = "hidden";
4169
+ canvasWrapper.style.top = `${top}px`;
4170
+ canvasWrapper.style.left = `${left}px`;
4171
+ canvasWrapper.style.width = `${width}px`;
4172
+ canvasWrapper.style.height = `${height}px`;
4173
+ };
4174
+ mask.addEventListener("click", () => {
4175
+ hideTextArea();
4176
+ });
4177
+ textarea.addEventListener("click", (e) => {
4178
+ e.stopPropagation();
4179
+ });
4180
+ textarea.addEventListener("input", (e) => {
4181
+ if (activeElem) {
4182
+ activeElem.detail.text = e.target.value || "";
4183
+ viewer.drawFrame();
4184
+ }
4185
+ });
4186
+ textarea.addEventListener("blur", () => {
4187
+ hideTextArea();
4188
+ });
4189
+ eventHub.on(middlewareEventTextEdit, (e) => {
4190
+ var _a;
4191
+ if ((e == null ? void 0 : e.element) && ((_a = e == null ? void 0 : e.element) == null ? void 0 : _a.type) === "text") {
4192
+ activeElem = e.element;
4193
+ }
4194
+ showTextArea(e);
4195
+ });
4196
+ return {
4197
+ mode: key2,
4198
+ isDefault: true
4199
+ };
4200
+ };
3961
4201
  const middlewareEventSelect = "@middleware/select";
3962
4202
  const MiddlewareSelector = (opts) => {
3963
4203
  const { viewer, sharer, viewContent, calculator, eventHub } = opts;
3964
4204
  const { helperContext } = viewContent;
3965
4205
  let prevPoint = null;
3966
4206
  let inBusyMode = null;
3967
- eventHub.on(middlewareEventSelect, ({ uuids }) => {
4207
+ eventHub.on(middlewareEventSelect, ({ uuids, positions }) => {
4208
+ let elements = [];
3968
4209
  const actionType = sharer.getSharedStorage(keyActionType);
3969
4210
  const data = sharer.getActiveStorage("data");
3970
- const elements = findElementsFromList(uuids, (data == null ? void 0 : data.elements) || []);
4211
+ if (positions && Array.isArray(positions)) {
4212
+ elements = findElementsFromListByPositions(positions, (data == null ? void 0 : data.elements) || []);
4213
+ } else {
4214
+ elements = findElementsFromList(uuids, (data == null ? void 0 : data.elements) || []);
4215
+ }
3971
4216
  let needRefresh = false;
3972
4217
  if (!actionType && elements.length === 1) {
3973
4218
  sharer.setSharedStorage(keyActionType, "select");
@@ -4331,7 +4576,7 @@ var iDrawCore = function(exports) {
4331
4576
  viewer.drawFrame();
4332
4577
  },
4333
4578
  doubleClick(e) {
4334
- var _a;
4579
+ var _a, _b;
4335
4580
  const target = getPointTarget(e.point, pointTargetBaseOptions());
4336
4581
  if (target.elements.length === 1 && ((_a = target.elements[0]) == null ? void 0 : _a.type) === "group") {
4337
4582
  const pushResult = pushGroupQueue(target.elements[0]);
@@ -4340,6 +4585,12 @@ var iDrawCore = function(exports) {
4340
4585
  viewer.drawFrame();
4341
4586
  return;
4342
4587
  }
4588
+ } else if (target.elements.length === 1 && ((_b = target.elements[0]) == null ? void 0 : _b.type) === "text") {
4589
+ eventHub.trigger(middlewareEventTextEdit, {
4590
+ element: target.elements[0],
4591
+ groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
4592
+ viewScaleInfo: sharer.getActiveViewScaleInfo()
4593
+ });
4343
4594
  }
4344
4595
  sharer.setSharedStorage(keyActionType, null);
4345
4596
  },
@@ -4445,19 +4696,19 @@ var iDrawCore = function(exports) {
4445
4696
  const { width, height } = viewSizeInfo;
4446
4697
  const { offsetTop, offsetBottom, offsetLeft, offsetRight } = viewScaleInfo;
4447
4698
  const sliderMinSize = scrollerLineWidth * 2.5;
4448
- const lineSize = scrollerLineWidth;
4699
+ const lineSize2 = scrollerLineWidth;
4449
4700
  let xSize = 0;
4450
4701
  let ySize = 0;
4451
- xSize = Math.max(sliderMinSize, width - (Math.abs(offsetLeft) + Math.abs(offsetRight)));
4702
+ xSize = Math.max(sliderMinSize, width - lineSize2 * 2 - (Math.abs(offsetLeft) + Math.abs(offsetRight)));
4452
4703
  if (xSize >= width) {
4453
4704
  xSize = width;
4454
4705
  }
4455
- ySize = Math.max(sliderMinSize, height - (Math.abs(offsetTop) + Math.abs(offsetBottom)));
4706
+ ySize = Math.max(sliderMinSize, height - lineSize2 * 2 - (Math.abs(offsetTop) + Math.abs(offsetBottom)));
4456
4707
  if (ySize >= height) {
4457
4708
  ySize = height;
4458
4709
  }
4459
- const xStart = lineSize;
4460
- const xEnd = width - xSize - lineSize;
4710
+ const xStart = lineSize2;
4711
+ const xEnd = width - xSize - lineSize2;
4461
4712
  let translateX = xStart;
4462
4713
  if (offsetLeft > 0) {
4463
4714
  translateX = xStart;
@@ -4467,8 +4718,8 @@ var iDrawCore = function(exports) {
4467
4718
  translateX = xStart + (width - xSize) * Math.abs(offsetLeft) / (Math.abs(offsetLeft) + Math.abs(offsetRight));
4468
4719
  translateX = Math.min(Math.max(0, translateX - xStart), width - xSize);
4469
4720
  }
4470
- const yStart = lineSize;
4471
- const yEnd = height - ySize - lineSize;
4721
+ const yStart = lineSize2;
4722
+ const yEnd = height - ySize - lineSize2;
4472
4723
  let translateY = yStart;
4473
4724
  if (offsetTop > 0) {
4474
4725
  translateY = yStart;
@@ -4480,18 +4731,18 @@ var iDrawCore = function(exports) {
4480
4731
  }
4481
4732
  const xThumbRect = {
4482
4733
  x: translateX,
4483
- y: height - lineSize,
4734
+ y: height - lineSize2,
4484
4735
  w: xSize,
4485
- h: lineSize
4736
+ h: lineSize2
4486
4737
  };
4487
4738
  const yThumbRect = {
4488
- x: width - lineSize,
4739
+ x: width - lineSize2,
4489
4740
  y: translateY,
4490
- w: lineSize,
4741
+ w: lineSize2,
4491
4742
  h: ySize
4492
4743
  };
4493
4744
  const scrollWrapper = {
4494
- lineSize,
4745
+ lineSize: lineSize2,
4495
4746
  xSize,
4496
4747
  ySize,
4497
4748
  translateY,
@@ -4696,6 +4947,8 @@ var iDrawCore = function(exports) {
4696
4947
  const MiddlewareScaler = (opts) => {
4697
4948
  const key2 = "SCALE";
4698
4949
  const { viewer, sharer, eventHub } = opts;
4950
+ const maxScale = 50;
4951
+ const minScale = 0.05;
4699
4952
  return {
4700
4953
  mode: key2,
4701
4954
  isDefault: true,
@@ -4708,6 +4961,9 @@ var iDrawCore = function(exports) {
4708
4961
  } else if (deltaY > 0) {
4709
4962
  newScaleNum = scale * 0.9;
4710
4963
  }
4964
+ if (newScaleNum < minScale || newScaleNum > maxScale) {
4965
+ return;
4966
+ }
4711
4967
  const { moveX, moveY } = viewer.scale({ scale: newScaleNum, point });
4712
4968
  viewer.scroll({ moveX, moveY });
4713
4969
  viewer.drawFrame();
@@ -4724,14 +4980,15 @@ var iDrawCore = function(exports) {
4724
4980
  const fontFamily = "monospace";
4725
4981
  const fontSize = 10;
4726
4982
  const fontWeight = 100;
4727
- const gridColor = "#AAAAAA30";
4728
- const gridKeyColor = "#AAAAAA70";
4983
+ const gridColor = "#AAAAAA20";
4984
+ const gridKeyColor = "#AAAAAA40";
4985
+ const lineSize = 1;
4729
4986
  function calcRulerScaleList(opts) {
4730
4987
  const { scale, viewLength, viewOffset } = opts;
4731
4988
  const list = [];
4732
4989
  let rulerUnit = 10;
4733
4990
  rulerUnit = formatNumber(rulerUnit / scale, { decimalPlaces: 0 });
4734
- rulerUnit = Math.max(1, Math.min(rulerUnit, 1e3));
4991
+ rulerUnit = Math.max(10, Math.min(rulerUnit, 1e3));
4735
4992
  const rulerKeyUnit = rulerUnit * 10;
4736
4993
  const rulerSubKeyUnit = rulerUnit * 5;
4737
4994
  let index = 0;
@@ -4794,6 +5051,8 @@ var iDrawCore = function(exports) {
4794
5051
  ctx.moveTo(item.position, scaleDrawStart);
4795
5052
  ctx.lineTo(item.position, item.isKeyNum ? keyScaleDrawEnd : item.isSubKeyNum ? subKeyScaleDrawEnd : scaleDrawEnd);
4796
5053
  ctx.closePath();
5054
+ ctx.lineWidth = lineSize;
5055
+ ctx.setLineDash([]);
4797
5056
  ctx.fillStyle = scaleColor;
4798
5057
  ctx.stroke();
4799
5058
  if (item.isKeyNum) {
@@ -4825,6 +5084,8 @@ var iDrawCore = function(exports) {
4825
5084
  ctx.lineTo(item.isKeyNum ? keyScaleDrawEnd : item.isSubKeyNum ? subKeyScaleDrawEnd : scaleDrawEnd, item.position);
4826
5085
  ctx.closePath();
4827
5086
  ctx.fillStyle = scaleColor;
5087
+ ctx.lineWidth = lineSize;
5088
+ ctx.setLineDash([]);
4828
5089
  ctx.stroke();
4829
5090
  if (item.showNum === true) {
4830
5091
  const textX = fontStart;
@@ -4857,6 +5118,8 @@ var iDrawCore = function(exports) {
4857
5118
  ctx.closePath();
4858
5119
  ctx.fillStyle = background;
4859
5120
  ctx.fill();
5121
+ ctx.lineWidth = lineSize;
5122
+ ctx.setLineDash([]);
4860
5123
  ctx.strokeStyle = borderColor;
4861
5124
  ctx.stroke();
4862
5125
  }
@@ -4873,8 +5136,9 @@ var iDrawCore = function(exports) {
4873
5136
  } else {
4874
5137
  ctx.strokeStyle = gridColor;
4875
5138
  }
4876
- ctx.lineWidth = 1;
4877
5139
  ctx.closePath();
5140
+ ctx.lineWidth = lineSize;
5141
+ ctx.setLineDash([]);
4878
5142
  ctx.stroke();
4879
5143
  }
4880
5144
  for (let i = 0; i < yList.length; i++) {
@@ -4897,10 +5161,16 @@ var iDrawCore = function(exports) {
4897
5161
  const key2 = "RULE";
4898
5162
  const { viewContent, viewer, eventHub } = opts;
4899
5163
  const { helperContext, underContext } = viewContent;
4900
- let showRuler = true;
5164
+ let show = true;
5165
+ let showGrid = true;
4901
5166
  eventHub.on(middlewareEventRuler, (e) => {
4902
5167
  if (typeof (e == null ? void 0 : e.show) === "boolean") {
4903
- showRuler = e.show;
5168
+ show = e.show;
5169
+ }
5170
+ if (typeof (e == null ? void 0 : e.showGrid) === "boolean") {
5171
+ showGrid = e.showGrid;
5172
+ }
5173
+ if (typeof (e == null ? void 0 : e.show) === "boolean" || typeof (e == null ? void 0 : e.showGrid) === "boolean") {
4904
5174
  viewer.drawFrame();
4905
5175
  }
4906
5176
  });
@@ -4908,7 +5178,7 @@ var iDrawCore = function(exports) {
4908
5178
  mode: key2,
4909
5179
  isDefault: true,
4910
5180
  beforeDrawFrame: ({ snapshot }) => {
4911
- if (showRuler === true) {
5181
+ if (show === true) {
4912
5182
  const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
4913
5183
  const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
4914
5184
  drawRulerBackground(helperContext, { viewScaleInfo, viewSizeInfo });
@@ -4916,27 +5186,33 @@ var iDrawCore = function(exports) {
4916
5186
  drawXRuler(helperContext, { scaleList: xList });
4917
5187
  const yList = calcYRulerScaleList({ viewScaleInfo, viewSizeInfo });
4918
5188
  drawYRuler(helperContext, { scaleList: yList });
4919
- drawUnderGrid(underContext, {
4920
- xList,
4921
- yList,
4922
- viewScaleInfo,
4923
- viewSizeInfo
4924
- });
5189
+ if (showGrid === true) {
5190
+ drawUnderGrid(underContext, {
5191
+ xList,
5192
+ yList,
5193
+ viewScaleInfo,
5194
+ viewSizeInfo
5195
+ });
5196
+ }
4925
5197
  }
4926
5198
  }
4927
5199
  };
4928
5200
  };
4929
5201
  class Core {
4930
5202
  constructor(container, opts) {
5203
+ __privateAdd(this, _initContainer);
5204
+ __privateAdd(this, _board, void 0);
5205
+ // #opts: CoreOptions;
5206
+ // #canvas: HTMLCanvasElement;
5207
+ __privateAdd(this, _container, void 0);
4931
5208
  const { devicePixelRatio = 1, width, height } = opts;
4932
- this._opts = opts;
4933
- this._container = container;
5209
+ __privateSet(this, _container, container);
4934
5210
  const canvas = document.createElement("canvas");
4935
- this._canvas = canvas;
5211
+ __privateMethod(this, _initContainer, initContainer_fn).call(this);
4936
5212
  container.appendChild(canvas);
4937
5213
  const ctx = canvas.getContext("2d");
4938
5214
  const viewContent = createBoardContexts(ctx, { devicePixelRatio });
4939
- const board = new Board({ viewContent });
5215
+ const board = new Board({ viewContent, container });
4940
5216
  const sharer = board.getSharer();
4941
5217
  sharer.setActiveViewSizeInfo({
4942
5218
  width,
@@ -4945,7 +5221,7 @@ var iDrawCore = function(exports) {
4945
5221
  contextWidth: width,
4946
5222
  contextHeight: height
4947
5223
  });
4948
- this._board = board;
5224
+ __privateSet(this, _board, board);
4949
5225
  this.resize(sharer.getActiveViewSizeInfo());
4950
5226
  const eventHub = board.getEventHub();
4951
5227
  new Cursor(container, {
@@ -4953,22 +5229,22 @@ var iDrawCore = function(exports) {
4953
5229
  });
4954
5230
  }
4955
5231
  use(middleware) {
4956
- this._board.use(middleware);
5232
+ __privateGet(this, _board).use(middleware);
4957
5233
  }
4958
5234
  setData(data) {
4959
5235
  validateElements((data == null ? void 0 : data.elements) || []);
4960
- this._board.setData(data);
5236
+ __privateGet(this, _board).setData(data);
4961
5237
  }
4962
5238
  getData() {
4963
- return this._board.getData();
5239
+ return __privateGet(this, _board).getData();
4964
5240
  }
4965
5241
  scale(opts) {
4966
- this._board.scale(opts);
4967
- const viewer = this._board.getViewer();
5242
+ __privateGet(this, _board).scale(opts);
5243
+ const viewer = __privateGet(this, _board).getViewer();
4968
5244
  viewer.drawFrame();
4969
5245
  }
4970
5246
  resize(newViewSize) {
4971
- const { _board: board } = this;
5247
+ const board = __privateGet(this, _board);
4972
5248
  const sharer = board.getSharer();
4973
5249
  const viewSizeInfo = sharer.getActiveViewSizeInfo();
4974
5250
  board.resize({
@@ -4977,29 +5253,54 @@ var iDrawCore = function(exports) {
4977
5253
  });
4978
5254
  }
4979
5255
  clear() {
4980
- this._board.clear();
5256
+ __privateGet(this, _board).clear();
4981
5257
  }
4982
5258
  on(name, callback) {
4983
- const eventHub = this._board.getEventHub();
5259
+ const eventHub = __privateGet(this, _board).getEventHub();
4984
5260
  eventHub.on(name, callback);
4985
5261
  }
4986
5262
  off(name, callback) {
4987
- const eventHub = this._board.getEventHub();
5263
+ const eventHub = __privateGet(this, _board).getEventHub();
4988
5264
  eventHub.off(name, callback);
4989
5265
  }
4990
5266
  trigger(name, e) {
4991
- const eventHub = this._board.getEventHub();
5267
+ const eventHub = __privateGet(this, _board).getEventHub();
4992
5268
  eventHub.trigger(name, e);
4993
5269
  }
5270
+ getViewInfo() {
5271
+ const board = __privateGet(this, _board);
5272
+ const sharer = board.getSharer();
5273
+ const viewSizeInfo = sharer.getActiveViewSizeInfo();
5274
+ const viewScaleInfo = sharer.getActiveViewScaleInfo();
5275
+ return {
5276
+ viewSizeInfo,
5277
+ viewScaleInfo
5278
+ };
5279
+ }
5280
+ refresh() {
5281
+ __privateGet(this, _board).getViewer().drawFrame();
5282
+ }
5283
+ updateViewScale(opts) {
5284
+ __privateGet(this, _board).updateViewScaleInfo(opts);
5285
+ }
4994
5286
  }
5287
+ _board = new WeakMap();
5288
+ _container = new WeakMap();
5289
+ _initContainer = new WeakSet();
5290
+ initContainer_fn = function() {
5291
+ const container = __privateGet(this, _container);
5292
+ container.style.position = "relative";
5293
+ };
4995
5294
  exports.Core = Core;
4996
5295
  exports.MiddlewareRuler = MiddlewareRuler;
4997
5296
  exports.MiddlewareScaler = MiddlewareScaler;
4998
5297
  exports.MiddlewareScroller = MiddlewareScroller;
4999
5298
  exports.MiddlewareSelector = MiddlewareSelector;
5299
+ exports.MiddlewareTextEditor = MiddlewareTextEditor;
5000
5300
  exports.middlewareEventRuler = middlewareEventRuler;
5001
5301
  exports.middlewareEventScale = middlewareEventScale;
5002
5302
  exports.middlewareEventSelect = middlewareEventSelect;
5303
+ exports.middlewareEventTextEdit = middlewareEventTextEdit;
5003
5304
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
5004
5305
  return exports;
5005
5306
  }({});