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

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) {
@@ -1348,7 +1371,7 @@ var iDrawCore = function(exports) {
1348
1371
  }
1349
1372
  function getDefaultElementDetailConfig() {
1350
1373
  const config = {
1351
- boxSizing: "border-box",
1374
+ boxSizing: "center-line",
1352
1375
  borderWidth: 0,
1353
1376
  borderColor: "#000000",
1354
1377
  shadowColor: "#000000",
@@ -2972,9 +2995,9 @@ var iDrawCore = function(exports) {
2972
2995
  return data;
2973
2996
  }
2974
2997
  use(middleware) {
2975
- const { viewContent } = this._opts;
2998
+ const { viewContent, container } = this._opts;
2976
2999
  const { _sharer: sharer, _viewer: viewer, _calculator: calculator, _eventHub: eventHub } = this;
2977
- const obj = middleware({ viewContent, sharer, viewer, calculator, eventHub });
3000
+ const obj = middleware({ viewContent, sharer, viewer, calculator, eventHub, container });
2978
3001
  this._middlewares.push(middleware);
2979
3002
  this._activeMiddlewareObjs.push(obj);
2980
3003
  }
@@ -3958,6 +3981,140 @@ var iDrawCore = function(exports) {
3958
3981
  moveY
3959
3982
  };
3960
3983
  }
3984
+ const middlewareEventTextEdit = "@middleware/text-edit";
3985
+ const defaultElementDetail = getDefaultElementDetailConfig();
3986
+ const MiddlewareTextEditor = (opts) => {
3987
+ const key2 = "SELECT";
3988
+ const { eventHub, viewContent, viewer } = opts;
3989
+ const canvas = viewContent.boardContext.canvas;
3990
+ const textarea = document.createElement("textarea");
3991
+ const canvasWrapper = document.createElement("div");
3992
+ const container = opts.container || document.body;
3993
+ const mask = document.createElement("div");
3994
+ let activeElem = null;
3995
+ canvasWrapper.appendChild(textarea);
3996
+ canvasWrapper.style.position = "absolute";
3997
+ mask.appendChild(canvasWrapper);
3998
+ mask.style.position = "fixed";
3999
+ mask.style.top = "0";
4000
+ mask.style.bottom = "0";
4001
+ mask.style.left = "0";
4002
+ mask.style.right = "0";
4003
+ mask.style.display = "none";
4004
+ container.appendChild(mask);
4005
+ const showTextArea = (e) => {
4006
+ resetCanvasWrapper();
4007
+ resetTextArea(e);
4008
+ mask.style.display = "block";
4009
+ };
4010
+ const hideTextArea = () => {
4011
+ mask.style.display = "none";
4012
+ activeElem = null;
4013
+ };
4014
+ const getCanvasRect = () => {
4015
+ const clientRect = canvas.getBoundingClientRect();
4016
+ const { left, top, width, height } = clientRect;
4017
+ return { left, top, width, height };
4018
+ };
4019
+ const createBox = (opts2) => {
4020
+ const { size, parent } = opts2;
4021
+ const div = document.createElement("div");
4022
+ const { x: x2, y: y2, w: w2, h: h2 } = size;
4023
+ const angle2 = limitAngle(size.angle || 0);
4024
+ div.style.position = "absolute";
4025
+ div.style.left = `${x2}px`;
4026
+ div.style.top = `${y2}px`;
4027
+ div.style.width = `${w2}px`;
4028
+ div.style.height = `${h2}px`;
4029
+ div.style.transform = `rotate(${angle2}deg)`;
4030
+ parent.appendChild(div);
4031
+ return div;
4032
+ };
4033
+ const resetTextArea = (e) => {
4034
+ const { viewScaleInfo, element, groupQueue } = e;
4035
+ const { scale, offsetTop, offsetLeft } = viewScaleInfo;
4036
+ if (canvasWrapper.children) {
4037
+ Array.from(canvasWrapper.children).forEach((child) => {
4038
+ child.remove();
4039
+ });
4040
+ }
4041
+ let parent = canvasWrapper;
4042
+ for (let i = 0; i < groupQueue.length; i++) {
4043
+ const group = groupQueue[i];
4044
+ const { x: x2, y: y2, w: w2, h: h2 } = group;
4045
+ const angle2 = limitAngle(group.angle || 0);
4046
+ const size = {
4047
+ x: x2 * scale,
4048
+ y: y2 * scale,
4049
+ w: w2 * scale,
4050
+ h: h2 * scale,
4051
+ angle: angle2
4052
+ };
4053
+ if (i === 0) {
4054
+ size.x += offsetLeft;
4055
+ size.y += offsetTop;
4056
+ }
4057
+ parent = createBox({ size, parent });
4058
+ }
4059
+ const detail = {
4060
+ ...defaultElementDetail,
4061
+ ...element.detail
4062
+ };
4063
+ textarea.style.position = "absolute";
4064
+ textarea.style.left = `${element.x * scale}px`;
4065
+ textarea.style.top = `${element.y * scale}px`;
4066
+ textarea.style.width = `${element.w * scale}px`;
4067
+ textarea.style.height = `${element.h * scale}px`;
4068
+ textarea.style.transform = `rotate(${limitAngle(element.angle || 0)}deg)`;
4069
+ textarea.style.border = "none";
4070
+ textarea.style.resize = "none";
4071
+ textarea.style.overflow = "hidden";
4072
+ textarea.style.wordBreak = "break-all";
4073
+ textarea.style.background = "#FFFFFF";
4074
+ textarea.style.color = "#333333";
4075
+ textarea.style.fontSize = `${detail.fontSize * scale}px`;
4076
+ textarea.style.lineHeight = `${detail.lineHeight * scale}px`;
4077
+ textarea.style.fontFamily = detail.fontFamily;
4078
+ textarea.style.fontWeight = `${detail.fontWeight}`;
4079
+ textarea.value = detail.text || "";
4080
+ parent.appendChild(textarea);
4081
+ };
4082
+ const resetCanvasWrapper = () => {
4083
+ const { left, top, width, height } = getCanvasRect();
4084
+ canvasWrapper.style.position = "absolute";
4085
+ canvasWrapper.style.overflow = "hidden";
4086
+ canvasWrapper.style.top = `${top}px`;
4087
+ canvasWrapper.style.left = `${left}px`;
4088
+ canvasWrapper.style.width = `${width}px`;
4089
+ canvasWrapper.style.height = `${height}px`;
4090
+ };
4091
+ mask.addEventListener("click", () => {
4092
+ hideTextArea();
4093
+ });
4094
+ textarea.addEventListener("click", (e) => {
4095
+ e.stopPropagation();
4096
+ });
4097
+ textarea.addEventListener("input", (e) => {
4098
+ if (activeElem) {
4099
+ activeElem.detail.text = e.target.value || "";
4100
+ viewer.drawFrame();
4101
+ }
4102
+ });
4103
+ textarea.addEventListener("blur", () => {
4104
+ hideTextArea();
4105
+ });
4106
+ eventHub.on(middlewareEventTextEdit, (e) => {
4107
+ var _a;
4108
+ if ((e == null ? void 0 : e.element) && ((_a = e == null ? void 0 : e.element) == null ? void 0 : _a.type) === "text") {
4109
+ activeElem = e.element;
4110
+ }
4111
+ showTextArea(e);
4112
+ });
4113
+ return {
4114
+ mode: key2,
4115
+ isDefault: true
4116
+ };
4117
+ };
3961
4118
  const middlewareEventSelect = "@middleware/select";
3962
4119
  const MiddlewareSelector = (opts) => {
3963
4120
  const { viewer, sharer, viewContent, calculator, eventHub } = opts;
@@ -4331,7 +4488,7 @@ var iDrawCore = function(exports) {
4331
4488
  viewer.drawFrame();
4332
4489
  },
4333
4490
  doubleClick(e) {
4334
- var _a;
4491
+ var _a, _b;
4335
4492
  const target = getPointTarget(e.point, pointTargetBaseOptions());
4336
4493
  if (target.elements.length === 1 && ((_a = target.elements[0]) == null ? void 0 : _a.type) === "group") {
4337
4494
  const pushResult = pushGroupQueue(target.elements[0]);
@@ -4340,6 +4497,12 @@ var iDrawCore = function(exports) {
4340
4497
  viewer.drawFrame();
4341
4498
  return;
4342
4499
  }
4500
+ } else if (target.elements.length === 1 && ((_b = target.elements[0]) == null ? void 0 : _b.type) === "text") {
4501
+ eventHub.trigger(middlewareEventTextEdit, {
4502
+ element: target.elements[0],
4503
+ groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
4504
+ viewScaleInfo: sharer.getActiveViewScaleInfo()
4505
+ });
4343
4506
  }
4344
4507
  sharer.setSharedStorage(keyActionType, null);
4345
4508
  },
@@ -4445,19 +4608,19 @@ var iDrawCore = function(exports) {
4445
4608
  const { width, height } = viewSizeInfo;
4446
4609
  const { offsetTop, offsetBottom, offsetLeft, offsetRight } = viewScaleInfo;
4447
4610
  const sliderMinSize = scrollerLineWidth * 2.5;
4448
- const lineSize = scrollerLineWidth;
4611
+ const lineSize2 = scrollerLineWidth;
4449
4612
  let xSize = 0;
4450
4613
  let ySize = 0;
4451
- xSize = Math.max(sliderMinSize, width - (Math.abs(offsetLeft) + Math.abs(offsetRight)));
4614
+ xSize = Math.max(sliderMinSize, width - lineSize2 * 2 - (Math.abs(offsetLeft) + Math.abs(offsetRight)));
4452
4615
  if (xSize >= width) {
4453
4616
  xSize = width;
4454
4617
  }
4455
- ySize = Math.max(sliderMinSize, height - (Math.abs(offsetTop) + Math.abs(offsetBottom)));
4618
+ ySize = Math.max(sliderMinSize, height - lineSize2 * 2 - (Math.abs(offsetTop) + Math.abs(offsetBottom)));
4456
4619
  if (ySize >= height) {
4457
4620
  ySize = height;
4458
4621
  }
4459
- const xStart = lineSize;
4460
- const xEnd = width - xSize - lineSize;
4622
+ const xStart = lineSize2;
4623
+ const xEnd = width - xSize - lineSize2;
4461
4624
  let translateX = xStart;
4462
4625
  if (offsetLeft > 0) {
4463
4626
  translateX = xStart;
@@ -4467,8 +4630,8 @@ var iDrawCore = function(exports) {
4467
4630
  translateX = xStart + (width - xSize) * Math.abs(offsetLeft) / (Math.abs(offsetLeft) + Math.abs(offsetRight));
4468
4631
  translateX = Math.min(Math.max(0, translateX - xStart), width - xSize);
4469
4632
  }
4470
- const yStart = lineSize;
4471
- const yEnd = height - ySize - lineSize;
4633
+ const yStart = lineSize2;
4634
+ const yEnd = height - ySize - lineSize2;
4472
4635
  let translateY = yStart;
4473
4636
  if (offsetTop > 0) {
4474
4637
  translateY = yStart;
@@ -4480,18 +4643,18 @@ var iDrawCore = function(exports) {
4480
4643
  }
4481
4644
  const xThumbRect = {
4482
4645
  x: translateX,
4483
- y: height - lineSize,
4646
+ y: height - lineSize2,
4484
4647
  w: xSize,
4485
- h: lineSize
4648
+ h: lineSize2
4486
4649
  };
4487
4650
  const yThumbRect = {
4488
- x: width - lineSize,
4651
+ x: width - lineSize2,
4489
4652
  y: translateY,
4490
- w: lineSize,
4653
+ w: lineSize2,
4491
4654
  h: ySize
4492
4655
  };
4493
4656
  const scrollWrapper = {
4494
- lineSize,
4657
+ lineSize: lineSize2,
4495
4658
  xSize,
4496
4659
  ySize,
4497
4660
  translateY,
@@ -4696,6 +4859,8 @@ var iDrawCore = function(exports) {
4696
4859
  const MiddlewareScaler = (opts) => {
4697
4860
  const key2 = "SCALE";
4698
4861
  const { viewer, sharer, eventHub } = opts;
4862
+ const maxScale = 50;
4863
+ const minScale = 0.05;
4699
4864
  return {
4700
4865
  mode: key2,
4701
4866
  isDefault: true,
@@ -4708,6 +4873,9 @@ var iDrawCore = function(exports) {
4708
4873
  } else if (deltaY > 0) {
4709
4874
  newScaleNum = scale * 0.9;
4710
4875
  }
4876
+ if (newScaleNum < minScale || newScaleNum > maxScale) {
4877
+ return;
4878
+ }
4711
4879
  const { moveX, moveY } = viewer.scale({ scale: newScaleNum, point });
4712
4880
  viewer.scroll({ moveX, moveY });
4713
4881
  viewer.drawFrame();
@@ -4726,12 +4894,13 @@ var iDrawCore = function(exports) {
4726
4894
  const fontWeight = 100;
4727
4895
  const gridColor = "#AAAAAA30";
4728
4896
  const gridKeyColor = "#AAAAAA70";
4897
+ const lineSize = 1;
4729
4898
  function calcRulerScaleList(opts) {
4730
4899
  const { scale, viewLength, viewOffset } = opts;
4731
4900
  const list = [];
4732
4901
  let rulerUnit = 10;
4733
4902
  rulerUnit = formatNumber(rulerUnit / scale, { decimalPlaces: 0 });
4734
- rulerUnit = Math.max(1, Math.min(rulerUnit, 1e3));
4903
+ rulerUnit = Math.max(10, Math.min(rulerUnit, 1e3));
4735
4904
  const rulerKeyUnit = rulerUnit * 10;
4736
4905
  const rulerSubKeyUnit = rulerUnit * 5;
4737
4906
  let index = 0;
@@ -4794,6 +4963,8 @@ var iDrawCore = function(exports) {
4794
4963
  ctx.moveTo(item.position, scaleDrawStart);
4795
4964
  ctx.lineTo(item.position, item.isKeyNum ? keyScaleDrawEnd : item.isSubKeyNum ? subKeyScaleDrawEnd : scaleDrawEnd);
4796
4965
  ctx.closePath();
4966
+ ctx.lineWidth = lineSize;
4967
+ ctx.setLineDash([]);
4797
4968
  ctx.fillStyle = scaleColor;
4798
4969
  ctx.stroke();
4799
4970
  if (item.isKeyNum) {
@@ -4825,6 +4996,8 @@ var iDrawCore = function(exports) {
4825
4996
  ctx.lineTo(item.isKeyNum ? keyScaleDrawEnd : item.isSubKeyNum ? subKeyScaleDrawEnd : scaleDrawEnd, item.position);
4826
4997
  ctx.closePath();
4827
4998
  ctx.fillStyle = scaleColor;
4999
+ ctx.lineWidth = lineSize;
5000
+ ctx.setLineDash([]);
4828
5001
  ctx.stroke();
4829
5002
  if (item.showNum === true) {
4830
5003
  const textX = fontStart;
@@ -4857,6 +5030,8 @@ var iDrawCore = function(exports) {
4857
5030
  ctx.closePath();
4858
5031
  ctx.fillStyle = background;
4859
5032
  ctx.fill();
5033
+ ctx.lineWidth = lineSize;
5034
+ ctx.setLineDash([]);
4860
5035
  ctx.strokeStyle = borderColor;
4861
5036
  ctx.stroke();
4862
5037
  }
@@ -4873,8 +5048,9 @@ var iDrawCore = function(exports) {
4873
5048
  } else {
4874
5049
  ctx.strokeStyle = gridColor;
4875
5050
  }
4876
- ctx.lineWidth = 1;
4877
5051
  ctx.closePath();
5052
+ ctx.lineWidth = lineSize;
5053
+ ctx.setLineDash([]);
4878
5054
  ctx.stroke();
4879
5055
  }
4880
5056
  for (let i = 0; i < yList.length; i++) {
@@ -4897,10 +5073,16 @@ var iDrawCore = function(exports) {
4897
5073
  const key2 = "RULE";
4898
5074
  const { viewContent, viewer, eventHub } = opts;
4899
5075
  const { helperContext, underContext } = viewContent;
4900
- let showRuler = true;
5076
+ let show = true;
5077
+ let showGrid = true;
4901
5078
  eventHub.on(middlewareEventRuler, (e) => {
4902
5079
  if (typeof (e == null ? void 0 : e.show) === "boolean") {
4903
- showRuler = e.show;
5080
+ show = e.show;
5081
+ }
5082
+ if (typeof (e == null ? void 0 : e.showGrid) === "boolean") {
5083
+ showGrid = e.showGrid;
5084
+ }
5085
+ if (typeof (e == null ? void 0 : e.show) === "boolean" || typeof (e == null ? void 0 : e.showGrid) === "boolean") {
4904
5086
  viewer.drawFrame();
4905
5087
  }
4906
5088
  });
@@ -4908,7 +5090,7 @@ var iDrawCore = function(exports) {
4908
5090
  mode: key2,
4909
5091
  isDefault: true,
4910
5092
  beforeDrawFrame: ({ snapshot }) => {
4911
- if (showRuler === true) {
5093
+ if (show === true) {
4912
5094
  const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
4913
5095
  const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
4914
5096
  drawRulerBackground(helperContext, { viewScaleInfo, viewSizeInfo });
@@ -4916,27 +5098,33 @@ var iDrawCore = function(exports) {
4916
5098
  drawXRuler(helperContext, { scaleList: xList });
4917
5099
  const yList = calcYRulerScaleList({ viewScaleInfo, viewSizeInfo });
4918
5100
  drawYRuler(helperContext, { scaleList: yList });
4919
- drawUnderGrid(underContext, {
4920
- xList,
4921
- yList,
4922
- viewScaleInfo,
4923
- viewSizeInfo
4924
- });
5101
+ if (showGrid === true) {
5102
+ drawUnderGrid(underContext, {
5103
+ xList,
5104
+ yList,
5105
+ viewScaleInfo,
5106
+ viewSizeInfo
5107
+ });
5108
+ }
4925
5109
  }
4926
5110
  }
4927
5111
  };
4928
5112
  };
4929
5113
  class Core {
4930
5114
  constructor(container, opts) {
5115
+ __privateAdd(this, _initContainer);
5116
+ __privateAdd(this, _board, void 0);
5117
+ // #opts: CoreOptions;
5118
+ // #canvas: HTMLCanvasElement;
5119
+ __privateAdd(this, _container, void 0);
4931
5120
  const { devicePixelRatio = 1, width, height } = opts;
4932
- this._opts = opts;
4933
- this._container = container;
5121
+ __privateSet(this, _container, container);
4934
5122
  const canvas = document.createElement("canvas");
4935
- this._canvas = canvas;
5123
+ __privateMethod(this, _initContainer, initContainer_fn).call(this);
4936
5124
  container.appendChild(canvas);
4937
5125
  const ctx = canvas.getContext("2d");
4938
5126
  const viewContent = createBoardContexts(ctx, { devicePixelRatio });
4939
- const board = new Board({ viewContent });
5127
+ const board = new Board({ viewContent, container });
4940
5128
  const sharer = board.getSharer();
4941
5129
  sharer.setActiveViewSizeInfo({
4942
5130
  width,
@@ -4945,7 +5133,7 @@ var iDrawCore = function(exports) {
4945
5133
  contextWidth: width,
4946
5134
  contextHeight: height
4947
5135
  });
4948
- this._board = board;
5136
+ __privateSet(this, _board, board);
4949
5137
  this.resize(sharer.getActiveViewSizeInfo());
4950
5138
  const eventHub = board.getEventHub();
4951
5139
  new Cursor(container, {
@@ -4953,22 +5141,22 @@ var iDrawCore = function(exports) {
4953
5141
  });
4954
5142
  }
4955
5143
  use(middleware) {
4956
- this._board.use(middleware);
5144
+ __privateGet(this, _board).use(middleware);
4957
5145
  }
4958
5146
  setData(data) {
4959
5147
  validateElements((data == null ? void 0 : data.elements) || []);
4960
- this._board.setData(data);
5148
+ __privateGet(this, _board).setData(data);
4961
5149
  }
4962
5150
  getData() {
4963
- return this._board.getData();
5151
+ return __privateGet(this, _board).getData();
4964
5152
  }
4965
5153
  scale(opts) {
4966
- this._board.scale(opts);
4967
- const viewer = this._board.getViewer();
5154
+ __privateGet(this, _board).scale(opts);
5155
+ const viewer = __privateGet(this, _board).getViewer();
4968
5156
  viewer.drawFrame();
4969
5157
  }
4970
5158
  resize(newViewSize) {
4971
- const { _board: board } = this;
5159
+ const board = __privateGet(this, _board);
4972
5160
  const sharer = board.getSharer();
4973
5161
  const viewSizeInfo = sharer.getActiveViewSizeInfo();
4974
5162
  board.resize({
@@ -4977,29 +5165,38 @@ var iDrawCore = function(exports) {
4977
5165
  });
4978
5166
  }
4979
5167
  clear() {
4980
- this._board.clear();
5168
+ __privateGet(this, _board).clear();
4981
5169
  }
4982
5170
  on(name, callback) {
4983
- const eventHub = this._board.getEventHub();
5171
+ const eventHub = __privateGet(this, _board).getEventHub();
4984
5172
  eventHub.on(name, callback);
4985
5173
  }
4986
5174
  off(name, callback) {
4987
- const eventHub = this._board.getEventHub();
5175
+ const eventHub = __privateGet(this, _board).getEventHub();
4988
5176
  eventHub.off(name, callback);
4989
5177
  }
4990
5178
  trigger(name, e) {
4991
- const eventHub = this._board.getEventHub();
5179
+ const eventHub = __privateGet(this, _board).getEventHub();
4992
5180
  eventHub.trigger(name, e);
4993
5181
  }
4994
5182
  }
5183
+ _board = new WeakMap();
5184
+ _container = new WeakMap();
5185
+ _initContainer = new WeakSet();
5186
+ initContainer_fn = function() {
5187
+ const container = __privateGet(this, _container);
5188
+ container.style.position = "relative";
5189
+ };
4995
5190
  exports.Core = Core;
4996
5191
  exports.MiddlewareRuler = MiddlewareRuler;
4997
5192
  exports.MiddlewareScaler = MiddlewareScaler;
4998
5193
  exports.MiddlewareScroller = MiddlewareScroller;
4999
5194
  exports.MiddlewareSelector = MiddlewareSelector;
5195
+ exports.MiddlewareTextEditor = MiddlewareTextEditor;
5000
5196
  exports.middlewareEventRuler = middlewareEventRuler;
5001
5197
  exports.middlewareEventScale = middlewareEventScale;
5002
5198
  exports.middlewareEventSelect = middlewareEventSelect;
5199
+ exports.middlewareEventTextEdit = middlewareEventTextEdit;
5003
5200
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
5004
5201
  return exports;
5005
5202
  }({});