@inditextech/weave-sdk 0.42.1 → 0.43.0

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.
package/dist/sdk.cjs CHANGED
@@ -15879,7 +15879,6 @@ var WeaveContextMenuPlugin = class extends WeavePlugin {
15879
15879
  initEvents() {
15880
15880
  const stage = this.instance.getStage();
15881
15881
  stage.on("pointerdown", (e) => {
15882
- e.evt.preventDefault();
15883
15882
  this.setTapStart(e);
15884
15883
  this.pointers[e.evt.pointerId] = e.evt;
15885
15884
  if (e.evt.buttons === 0) return;
@@ -18451,6 +18450,7 @@ var WeaveStateManager = class {
18451
18450
  return;
18452
18451
  }
18453
18452
  const doc = (0, __syncedstore_core.getYjsDoc)(state);
18453
+ const userId = this.instance.getStore().getUser().id;
18454
18454
  doc.transact(() => {
18455
18455
  if (!parent.props.children) parent.props.children = [];
18456
18456
  if (index) {
@@ -18469,7 +18469,7 @@ var WeaveStateManager = class {
18469
18469
  parent.props.children.push(nodeToAdd);
18470
18470
  }
18471
18471
  this.instance.emitEvent("onNodeAdded", node);
18472
- });
18472
+ }, userId);
18473
18473
  }
18474
18474
  deepSyncSyncedStore(target, source) {
18475
18475
  for (const key in target) if (!(key in source)) delete target[key];
@@ -18513,9 +18513,10 @@ var WeaveStateManager = class {
18513
18513
  return;
18514
18514
  }
18515
18515
  const doc = (0, __syncedstore_core.getYjsDoc)(state);
18516
+ const userId = this.instance.getStore().getUser().id;
18516
18517
  doc.transact(() => {
18517
18518
  this.deepSyncSyncedStore(nodeState.props, node.props);
18518
- });
18519
+ }, userId);
18519
18520
  this.instance.emitEvent("onNodeUpdated", node);
18520
18521
  }
18521
18522
  removeNode(node) {
@@ -18537,6 +18538,7 @@ var WeaveStateManager = class {
18537
18538
  return;
18538
18539
  }
18539
18540
  const doc = (0, __syncedstore_core.getYjsDoc)(state);
18541
+ const userId = this.instance.getStore().getUser().id;
18540
18542
  doc.transact(() => {
18541
18543
  if (parent.props.children) {
18542
18544
  for (let i = parent.props.children.length - 1; i >= 0; i--) if (parent.props.children[i].key === node.key) {
@@ -18546,7 +18548,7 @@ var WeaveStateManager = class {
18546
18548
  for (let i = 0; i < parent.props.children.length; i++) parent.props.children[i].props.zIndex = i;
18547
18549
  this.instance.emitEvent("onNodeRemoved", node);
18548
18550
  }
18549
- });
18551
+ }, userId);
18550
18552
  }
18551
18553
  removeNodes(nodes) {
18552
18554
  for (const node of nodes) this.removeNode(node);
@@ -18578,6 +18580,7 @@ var WeaveStateManager = class {
18578
18580
  return;
18579
18581
  }
18580
18582
  const doc = (0, __syncedstore_core.getYjsDoc)(state);
18583
+ const userId = this.instance.getStore().getUser().id;
18581
18584
  doc.transact(() => {
18582
18585
  if (parent.props.children) {
18583
18586
  const item = JSON.parse(JSON.stringify(parent.props.children[nodeIndex]));
@@ -18588,7 +18591,7 @@ var WeaveStateManager = class {
18588
18591
  if (item && position === __inditextech_weave_types.WEAVE_NODE_POSITION.BACK) parent.props.children.splice(0, 0, item);
18589
18592
  for (let i = 0; i < parent.props.children.length; i++) parent.props.children[i].props.zIndex = i;
18590
18593
  }
18591
- });
18594
+ }, userId);
18592
18595
  }
18593
18596
  }
18594
18597
  getElementsTree() {
@@ -18674,7 +18677,7 @@ var WeaveRegisterManager = class {
18674
18677
 
18675
18678
  //#endregion
18676
18679
  //#region package.json
18677
- var version = "0.42.1";
18680
+ var version = "0.43.0";
18678
18681
 
18679
18682
  //#endregion
18680
18683
  //#region src/managers/setup.ts
@@ -24138,9 +24141,10 @@ var WeaveRectangleToolAction = class extends WeaveAction {
24138
24141
  this.initialized = false;
24139
24142
  this.state = RECTANGLE_TOOL_STATE.IDLE;
24140
24143
  this.rectId = null;
24141
- this.creating = false;
24144
+ this.tempRectNode = null;
24142
24145
  this.moved = false;
24143
24146
  this.container = void 0;
24147
+ this.measureContainer = void 0;
24144
24148
  this.clickPoint = null;
24145
24149
  this.props = this.initProps();
24146
24150
  }
@@ -24179,10 +24183,7 @@ var WeaveRectangleToolAction = class extends WeaveAction {
24179
24183
  this.state = RECTANGLE_TOOL_STATE.ADDING;
24180
24184
  return;
24181
24185
  }
24182
- if (this.state === RECTANGLE_TOOL_STATE.ADDING) {
24183
- this.creating = true;
24184
- this.handleAdding();
24185
- }
24186
+ if (this.state === RECTANGLE_TOOL_STATE.ADDING) this.handleAdding();
24186
24187
  });
24187
24188
  stage.on("pointermove", (e) => {
24188
24189
  if (!this.isPressed(e)) return;
@@ -24191,19 +24192,13 @@ var WeaveRectangleToolAction = class extends WeaveAction {
24191
24192
  this.state = RECTANGLE_TOOL_STATE.ADDING;
24192
24193
  return;
24193
24194
  }
24194
- if (this.state === RECTANGLE_TOOL_STATE.DEFINING_SIZE) {
24195
- this.moved = true;
24196
- this.handleMovement();
24197
- }
24195
+ if (this.state === RECTANGLE_TOOL_STATE.DEFINING_SIZE) this.handleMovement();
24198
24196
  });
24199
24197
  stage.on("pointerup", (e) => {
24200
24198
  this.pointers.delete(e.evt.pointerId);
24201
24199
  const isTap = this.isTap(e);
24202
24200
  if (isTap) this.moved = false;
24203
- if (this.state === RECTANGLE_TOOL_STATE.DEFINING_SIZE) {
24204
- this.creating = false;
24205
- this.handleSettingSize();
24206
- }
24201
+ if (this.state === RECTANGLE_TOOL_STATE.DEFINING_SIZE) this.handleSettingSize();
24207
24202
  });
24208
24203
  this.initialized = true;
24209
24204
  }
@@ -24219,29 +24214,28 @@ var WeaveRectangleToolAction = class extends WeaveAction {
24219
24214
  this.setState(RECTANGLE_TOOL_STATE.ADDING);
24220
24215
  }
24221
24216
  handleAdding() {
24222
- const { mousePoint, container } = this.instance.getMousePointer();
24217
+ const { mousePoint, container, measureContainer } = this.instance.getMousePointer();
24223
24218
  this.clickPoint = mousePoint;
24224
24219
  this.container = container;
24220
+ this.measureContainer = measureContainer;
24225
24221
  this.rectId = v4_default();
24226
- const nodeHandler = this.instance.getNodeHandler("rectangle");
24227
- if (nodeHandler) {
24228
- const node = nodeHandler.create(this.rectId, {
24222
+ if (!this.tempRectNode) {
24223
+ this.tempRectNode = new konva.default.Rect({
24229
24224
  ...this.props,
24225
+ id: this.rectId,
24230
24226
  strokeScaleEnabled: true,
24231
24227
  x: this.clickPoint?.x ?? 0,
24232
24228
  y: this.clickPoint?.y ?? 0,
24233
24229
  width: 0,
24234
24230
  height: 0
24235
24231
  });
24236
- this.instance.addNode(node, this.container?.getAttrs().id);
24232
+ this.measureContainer?.add(this.tempRectNode);
24237
24233
  }
24238
24234
  this.setState(RECTANGLE_TOOL_STATE.DEFINING_SIZE);
24239
24235
  }
24240
24236
  handleSettingSize() {
24241
- const rectangle = this.instance.getStage().findOne(`#${this.rectId}`);
24242
- if (this.rectId && this.clickPoint && this.container && rectangle) {
24237
+ if (this.rectId && this.tempRectNode && this.clickPoint && this.container) {
24243
24238
  const { mousePoint } = this.instance.getMousePointerRelativeToContainer(this.container);
24244
- const nodeHandler = this.instance.getNodeHandler("rectangle");
24245
24239
  const rectPos = {
24246
24240
  x: this.clickPoint.x,
24247
24241
  y: this.clickPoint.y
@@ -24254,31 +24248,38 @@ var WeaveRectangleToolAction = class extends WeaveAction {
24254
24248
  rectWidth = Math.abs(this.clickPoint.x - mousePoint.x);
24255
24249
  rectHeight = Math.abs(this.clickPoint.y - mousePoint.y);
24256
24250
  }
24257
- rectangle.setAttrs({
24251
+ this.tempRectNode.setAttrs({
24258
24252
  ...this.props,
24259
24253
  x: rectPos.x,
24260
24254
  y: rectPos.y,
24261
24255
  width: rectWidth,
24262
24256
  height: rectHeight
24263
24257
  });
24264
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(rectangle));
24258
+ const nodeHandler = this.instance.getNodeHandler("rectangle");
24259
+ if (nodeHandler) {
24260
+ const clonedRectNode = this.tempRectNode.clone();
24261
+ this.tempRectNode.destroy();
24262
+ const node = nodeHandler.create(this.rectId, {
24263
+ ...this.props,
24264
+ ...clonedRectNode.getAttrs()
24265
+ });
24266
+ this.instance.addNode(node, this.container?.getAttrs().id);
24267
+ }
24265
24268
  this.instance.emitEvent("onAddedRectangle");
24266
24269
  }
24267
24270
  this.cancelAction();
24268
24271
  }
24269
24272
  handleMovement() {
24270
24273
  if (this.state !== RECTANGLE_TOOL_STATE.DEFINING_SIZE) return;
24271
- const rectangle = this.instance.getStage().findOne(`#${this.rectId}`);
24272
- if (this.rectId && this.container && this.clickPoint && rectangle) {
24273
- const { mousePoint } = this.instance.getMousePointerRelativeToContainer(this.container);
24274
+ if (this.rectId && this.tempRectNode && this.measureContainer && this.clickPoint) {
24275
+ this.moved = true;
24276
+ const { mousePoint } = this.instance.getMousePointerRelativeToContainer(this.measureContainer);
24274
24277
  const deltaX = mousePoint.x - this.clickPoint?.x;
24275
24278
  const deltaY = mousePoint.y - this.clickPoint?.y;
24276
- const nodeHandler = this.instance.getNodeHandler("rectangle");
24277
- rectangle.setAttrs({
24279
+ this.tempRectNode.setAttrs({
24278
24280
  width: deltaX,
24279
24281
  height: deltaY
24280
24282
  });
24281
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(rectangle));
24282
24283
  }
24283
24284
  }
24284
24285
  trigger(cancelAction) {
@@ -24303,9 +24304,10 @@ var WeaveRectangleToolAction = class extends WeaveAction {
24303
24304
  this.instance.triggerAction(SELECTION_TOOL_ACTION_NAME);
24304
24305
  }
24305
24306
  this.rectId = null;
24306
- this.creating = false;
24307
+ this.tempRectNode = null;
24307
24308
  this.moved = false;
24308
24309
  this.container = void 0;
24310
+ this.measureContainer = void 0;
24309
24311
  this.clickPoint = null;
24310
24312
  this.setState(RECTANGLE_TOOL_STATE.IDLE);
24311
24313
  }
@@ -24541,6 +24543,8 @@ var WeavePenToolAction = class extends WeaveAction {
24541
24543
  this.state = PEN_TOOL_STATE.IDLE;
24542
24544
  this.lineId = null;
24543
24545
  this.tempLineId = null;
24546
+ this.tempMainLineNode = null;
24547
+ this.tempLineNode = null;
24544
24548
  this.container = void 0;
24545
24549
  this.measureContainer = void 0;
24546
24550
  this.clickPoint = null;
@@ -24580,11 +24584,10 @@ var WeavePenToolAction = class extends WeaveAction {
24580
24584
  this.state = PEN_TOOL_STATE.ADDING;
24581
24585
  return;
24582
24586
  }
24583
- if (this.state === PEN_TOOL_STATE.ADDING) this.handleAdding();
24587
+ if (!this.tempMainLineNode && this.state === PEN_TOOL_STATE.ADDING) this.handleAdding();
24588
+ if (this.tempMainLineNode && this.state === PEN_TOOL_STATE.ADDING) this.state = PEN_TOOL_STATE.DEFINING_SIZE;
24584
24589
  });
24585
- stage.on("pointermove", (e) => {
24586
- if (!this.isPressed(e)) return;
24587
- if (!this.pointers.has(e.evt.pointerId)) return;
24590
+ stage.on("pointermove", () => {
24588
24591
  if (this.pointers.size === 2 && this.instance.getActiveAction() === PEN_TOOL_ACTION_NAME) {
24589
24592
  this.state = PEN_TOOL_STATE.ADDING;
24590
24593
  return;
@@ -24603,6 +24606,8 @@ var WeavePenToolAction = class extends WeaveAction {
24603
24606
  addLine() {
24604
24607
  const stage = this.instance.getStage();
24605
24608
  stage.container().style.cursor = "crosshair";
24609
+ stage.container().focus();
24610
+ this.instance.emitEvent("onAddingPen");
24606
24611
  this.tempPoint = void 0;
24607
24612
  this.tempNextPoint = void 0;
24608
24613
  this.clickPoint = null;
@@ -24616,63 +24621,58 @@ var WeavePenToolAction = class extends WeaveAction {
24616
24621
  this.measureContainer = measureContainer;
24617
24622
  this.lineId = v4_default();
24618
24623
  this.tempLineId = v4_default();
24619
- const nodeHandler = this.instance.getNodeHandler("line");
24620
- if (nodeHandler) {
24621
- const node = nodeHandler.create(this.lineId, {
24624
+ if (!this.tempLineNode) {
24625
+ this.tempMainLineNode = new konva.default.Line({
24622
24626
  ...this.props,
24627
+ id: this.lineId,
24623
24628
  strokeScaleEnabled: true,
24624
24629
  x: this.clickPoint?.x ?? 0,
24625
24630
  y: this.clickPoint?.y ?? 0,
24626
24631
  points: [0, 0]
24627
24632
  });
24628
- this.instance.addNode(node, this.container?.getAttrs().id);
24629
- }
24630
- this.tempPoint = new konva.default.Circle({
24631
- x: this.clickPoint?.x ?? 0,
24632
- y: this.clickPoint?.y ?? 0,
24633
- radius: 5 / stage.scaleX(),
24634
- strokeScaleEnabled: true,
24635
- stroke: "#cccccc",
24636
- strokeWidth: 0,
24637
- fill: "#cccccc"
24638
- });
24639
- this.measureContainer?.add(this.tempPoint);
24640
- if (nodeHandler) {
24641
- const tempLine = nodeHandler.create(this.tempLineId, {
24633
+ this.measureContainer?.add(this.tempMainLineNode);
24634
+ this.tempPoint = new konva.default.Circle({
24635
+ x: this.clickPoint?.x ?? 0,
24636
+ y: this.clickPoint?.y ?? 0,
24637
+ radius: 5 / stage.scaleX(),
24638
+ strokeScaleEnabled: true,
24639
+ stroke: "#cccccc",
24640
+ strokeWidth: 0,
24641
+ fill: "#cccccc"
24642
+ });
24643
+ this.measureContainer?.add(this.tempPoint);
24644
+ this.tempLineNode = new konva.default.Line({
24642
24645
  ...this.props,
24646
+ id: this.tempLineId,
24643
24647
  x: this.clickPoint?.x ?? 0,
24644
24648
  y: this.clickPoint?.y ?? 0,
24645
24649
  strokeScaleEnabled: true,
24646
24650
  points: [0, 0]
24647
24651
  });
24648
- this.instance.addNode(tempLine, this.container?.getAttrs().id);
24652
+ this.measureContainer?.add(this.tempLineNode);
24653
+ this.tempNextPoint = new konva.default.Circle({
24654
+ x: this.clickPoint?.x ?? 0,
24655
+ y: this.clickPoint?.y ?? 0,
24656
+ radius: 5 / stage.scaleX(),
24657
+ strokeScaleEnabled: true,
24658
+ stroke: "#cccccc",
24659
+ strokeWidth: 0,
24660
+ fill: "#cccccc"
24661
+ });
24662
+ this.measureContainer?.add(this.tempNextPoint);
24663
+ this.setState(PEN_TOOL_STATE.DEFINING_SIZE);
24649
24664
  }
24650
- this.tempNextPoint = new konva.default.Circle({
24651
- x: this.clickPoint?.x ?? 0,
24652
- y: this.clickPoint?.y ?? 0,
24653
- radius: 5 / stage.scaleX(),
24654
- strokeScaleEnabled: true,
24655
- stroke: "#cccccc",
24656
- strokeWidth: 0,
24657
- fill: "#cccccc"
24658
- });
24659
- this.measureContainer?.add(this.tempNextPoint);
24660
- this.setState(PEN_TOOL_STATE.DEFINING_SIZE);
24661
24665
  }
24662
24666
  handleSettingSize() {
24663
- const tempLine = this.instance.getStage().findOne(`#${this.tempLineId}`);
24664
- const tempMainLine = this.instance.getStage().findOne(`#${this.lineId}`);
24665
- if (this.lineId && this.tempPoint && this.tempNextPoint && this.measureContainer && tempMainLine && tempLine) {
24667
+ if (this.lineId && this.tempLineNode && this.tempMainLineNode && this.tempPoint && this.tempNextPoint && this.measureContainer) {
24666
24668
  const { mousePoint } = this.instance.getMousePointerRelativeToContainer(this.measureContainer);
24667
- const newPoints = [...tempMainLine.points()];
24668
- newPoints.push(mousePoint.x - tempMainLine.x());
24669
- newPoints.push(mousePoint.y - tempMainLine.y());
24670
- tempMainLine.setAttrs({
24669
+ const newPoints = [...this.tempMainLineNode.points()];
24670
+ newPoints.push(mousePoint.x - this.tempMainLineNode.x());
24671
+ newPoints.push(mousePoint.y - this.tempMainLineNode.y());
24672
+ this.tempMainLineNode.setAttrs({
24671
24673
  ...this.props,
24672
24674
  points: newPoints
24673
24675
  });
24674
- const nodeHandler = this.instance.getNodeHandler("line");
24675
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(tempMainLine));
24676
24676
  this.tempPoint.setAttrs({
24677
24677
  x: mousePoint.x,
24678
24678
  y: mousePoint.y
@@ -24681,32 +24681,28 @@ var WeavePenToolAction = class extends WeaveAction {
24681
24681
  x: mousePoint.x,
24682
24682
  y: mousePoint.y
24683
24683
  });
24684
- tempLine.setAttrs({
24684
+ this.tempLineNode.setAttrs({
24685
24685
  ...this.props,
24686
24686
  x: mousePoint.x,
24687
24687
  y: mousePoint.y,
24688
24688
  points: [0, 0]
24689
24689
  });
24690
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(tempLine));
24690
+ this.setState(PEN_TOOL_STATE.DEFINING_SIZE);
24691
24691
  }
24692
- this.setState(PEN_TOOL_STATE.DEFINING_SIZE);
24693
24692
  }
24694
24693
  handleMovement() {
24695
24694
  if (this.state !== PEN_TOOL_STATE.DEFINING_SIZE) return;
24696
- const tempLine = this.instance.getStage().findOne(`#${this.tempLineId}`);
24697
- if (this.lineId && this.measureContainer && this.tempNextPoint && tempLine) {
24695
+ if (this.tempLineNode && this.measureContainer && this.tempNextPoint) {
24698
24696
  const { mousePoint } = this.instance.getMousePointerRelativeToContainer(this.measureContainer);
24699
- tempLine.setAttrs({
24697
+ this.tempLineNode.setAttrs({
24700
24698
  ...this.props,
24701
24699
  points: [
24702
- tempLine.points()[0],
24703
- tempLine.points()[1],
24704
- mousePoint.x - tempLine.x(),
24705
- mousePoint.y - tempLine.y()
24700
+ this.tempLineNode.points()[0],
24701
+ this.tempLineNode.points()[1],
24702
+ mousePoint.x - this.tempLineNode.x(),
24703
+ mousePoint.y - this.tempLineNode.y()
24706
24704
  ]
24707
24705
  });
24708
- const nodeHandler = this.instance.getNodeHandler("line");
24709
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(tempLine));
24710
24706
  this.tempNextPoint.setAttrs({
24711
24707
  x: mousePoint.x,
24712
24708
  y: mousePoint.y
@@ -24729,24 +24725,20 @@ var WeavePenToolAction = class extends WeaveAction {
24729
24725
  const stage = this.instance.getStage();
24730
24726
  this.tempPoint?.destroy();
24731
24727
  this.tempNextPoint?.destroy();
24732
- const tempLine = this.instance.getStage().findOne(`#${this.tempLineId}`);
24733
- const tempMainLine = this.instance.getStage().findOne(`#${this.lineId}`);
24734
- if (tempLine) {
24735
- const nodeHandler = this.instance.getNodeHandler("line");
24736
- if (nodeHandler) this.instance.removeNode(nodeHandler.serialize(tempLine));
24737
- }
24738
- if (this.lineId && tempMainLine && tempMainLine.points().length < 4) {
24728
+ this.tempLineNode?.destroy();
24729
+ if (this.lineId && this.tempMainLineNode && this.tempMainLineNode.points().length >= 4) {
24739
24730
  const nodeHandler = this.instance.getNodeHandler("line");
24740
- if (nodeHandler) this.instance.removeNode(nodeHandler.serialize(tempMainLine));
24741
- }
24742
- if (this.lineId && tempMainLine && tempMainLine.points().length >= 4) {
24743
- const nodeHandler = this.instance.getNodeHandler("line");
24744
- tempMainLine.setAttrs({
24745
- ...this.props,
24746
- strokeWidth: 1,
24747
- hitStrokeWidth: 16
24748
- });
24749
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(tempMainLine));
24731
+ if (nodeHandler) {
24732
+ const clonedLine = this.tempMainLineNode.clone();
24733
+ this.tempMainLineNode.destroy();
24734
+ const node = nodeHandler.create(this.lineId, {
24735
+ ...this.props,
24736
+ ...clonedLine.getAttrs(),
24737
+ hitStrokeWidth: 16
24738
+ });
24739
+ this.instance.addNode(node, this.container?.getAttrs().id);
24740
+ this.instance.emitEvent("onAddedPen");
24741
+ }
24750
24742
  }
24751
24743
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
24752
24744
  if (selectionPlugin) {
@@ -24759,8 +24751,11 @@ var WeavePenToolAction = class extends WeaveAction {
24759
24751
  this.tempPoint = void 0;
24760
24752
  this.tempNextPoint = void 0;
24761
24753
  this.lineId = null;
24754
+ this.tempMainLineNode = null;
24762
24755
  this.tempLineId = null;
24756
+ this.tempLineNode = null;
24763
24757
  this.container = void 0;
24758
+ this.measureContainer = void 0;
24764
24759
  this.clickPoint = null;
24765
24760
  this.setState(PEN_TOOL_STATE.IDLE);
24766
24761
  }
@@ -24963,11 +24958,13 @@ var WeaveBrushToolAction = class extends WeaveAction {
24963
24958
  if (selectionPlugin) selectionPlugin.setSelectedNodes([]);
24964
24959
  this.props = this.initProps();
24965
24960
  this.setState(BRUSH_TOOL_STATE.IDLE);
24961
+ this.instance.emitEvent("onAddingBrush");
24966
24962
  stage.container().style.cursor = "crosshair";
24967
24963
  }
24968
24964
  cleanup() {
24969
24965
  const stage = this.instance.getStage();
24970
24966
  stage.container().style.cursor = "default";
24967
+ this.instance.emitEvent("onAddedBrush");
24971
24968
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
24972
24969
  if (selectionPlugin) {
24973
24970
  const node = stage.findOne(`#${this.strokeId}`);
@@ -25038,6 +25035,8 @@ var WeaveTextToolAction = class extends WeaveAction {
25038
25035
  tr.hide();
25039
25036
  }
25040
25037
  stage.container().style.cursor = "crosshair";
25038
+ stage.container().focus();
25039
+ this.instance.emitEvent("onAddingText");
25041
25040
  this.clickPoint = null;
25042
25041
  this.setState(TEXT_TOOL_STATE.ADDING);
25043
25042
  }
@@ -25055,6 +25054,7 @@ var WeaveTextToolAction = class extends WeaveAction {
25055
25054
  draggable: true
25056
25055
  });
25057
25056
  this.instance.addNode(node, this.container?.getAttrs().id);
25057
+ this.instance.emitEvent("onAddedArrow");
25058
25058
  }
25059
25059
  this.setState(TEXT_TOOL_STATE.FINISHED);
25060
25060
  this.cancelAction();
@@ -25314,10 +25314,13 @@ var WeaveArrowToolAction = class extends WeaveAction {
25314
25314
  onInit = void 0;
25315
25315
  constructor() {
25316
25316
  super();
25317
+ this.pointers = new Map();
25317
25318
  this.initialized = false;
25318
25319
  this.state = ARROW_TOOL_STATE.IDLE;
25319
25320
  this.arrowId = null;
25320
25321
  this.tempArrowId = null;
25322
+ this.tempMainArrowNode = null;
25323
+ this.tempArrowNode = null;
25321
25324
  this.container = void 0;
25322
25325
  this.measureContainer = void 0;
25323
25326
  this.clickPoint = null;
@@ -25352,22 +25355,29 @@ var WeaveArrowToolAction = class extends WeaveAction {
25352
25355
  return;
25353
25356
  }
25354
25357
  });
25355
- stage.on("pointerdblclick", () => {
25356
- this.cancelAction();
25357
- });
25358
- stage.on("pointerclick", () => {
25359
- if (this.state === ARROW_TOOL_STATE.IDLE) return;
25360
- if (this.state === ARROW_TOOL_STATE.ADDING) {
25361
- this.handleAdding();
25358
+ stage.on("pointerdown", (e) => {
25359
+ this.setTapStart(e);
25360
+ this.pointers.set(e.evt.pointerId, {
25361
+ x: e.evt.clientX,
25362
+ y: e.evt.clientY
25363
+ });
25364
+ if (this.pointers.size === 2 && this.instance.getActiveAction() === ARROW_TOOL_ACTION_NAME) {
25365
+ this.state = ARROW_TOOL_STATE.ADDING;
25362
25366
  return;
25363
25367
  }
25364
- if (this.state === ARROW_TOOL_STATE.DEFINING_SIZE) {
25365
- this.handleSettingSize();
25368
+ if (!this.tempMainArrowNode && this.state === ARROW_TOOL_STATE.ADDING) this.handleAdding();
25369
+ if (this.tempMainArrowNode && this.state === ARROW_TOOL_STATE.ADDING) this.state = ARROW_TOOL_STATE.DEFINING_SIZE;
25370
+ });
25371
+ stage.on("pointermove", () => {
25372
+ if (this.pointers.size === 2 && this.instance.getActiveAction() === ARROW_TOOL_ACTION_NAME) {
25373
+ this.state = ARROW_TOOL_STATE.ADDING;
25366
25374
  return;
25367
25375
  }
25376
+ if (this.state === ARROW_TOOL_STATE.DEFINING_SIZE) this.handleMovement();
25368
25377
  });
25369
- stage.on("pointermove", () => {
25370
- this.handleMovement();
25378
+ stage.on("pointerup", (e) => {
25379
+ this.pointers.delete(e.evt.pointerId);
25380
+ if (this.state === ARROW_TOOL_STATE.DEFINING_SIZE) this.handleSettingSize();
25371
25381
  });
25372
25382
  this.initialized = true;
25373
25383
  }
@@ -25377,6 +25387,8 @@ var WeaveArrowToolAction = class extends WeaveAction {
25377
25387
  addArrow() {
25378
25388
  const stage = this.instance.getStage();
25379
25389
  stage.container().style.cursor = "crosshair";
25390
+ stage.container().focus();
25391
+ this.instance.emitEvent("onAddingArrow");
25380
25392
  this.tempPoint = void 0;
25381
25393
  this.tempNextPoint = void 0;
25382
25394
  this.clickPoint = null;
@@ -25390,65 +25402,58 @@ var WeaveArrowToolAction = class extends WeaveAction {
25390
25402
  this.measureContainer = measureContainer;
25391
25403
  this.arrowId = v4_default();
25392
25404
  this.tempArrowId = v4_default();
25393
- const nodeHandler = this.instance.getNodeHandler("arrow");
25394
- const lineNodeHandler = this.instance.getNodeHandler("line");
25395
- if (lineNodeHandler) {
25396
- const node = lineNodeHandler.create(this.arrowId, {
25405
+ if (!this.tempMainArrowNode) {
25406
+ this.tempMainArrowNode = new konva.default.Line({
25397
25407
  ...this.props,
25408
+ id: this.arrowId,
25398
25409
  strokeScaleEnabled: true,
25399
25410
  x: this.clickPoint?.x ?? 0,
25400
25411
  y: this.clickPoint?.y ?? 0,
25401
25412
  points: [0, 0]
25402
25413
  });
25403
- this.instance.addNode(node, this.container?.getAttrs().id);
25404
- }
25405
- this.tempPoint = new konva.default.Circle({
25406
- x: this.clickPoint?.x ?? 0,
25407
- y: this.clickPoint?.y ?? 0,
25408
- radius: 5 / stage.scaleX(),
25409
- strokeScaleEnabled: true,
25410
- stroke: "#cccccc",
25411
- strokeWidth: 0,
25412
- fill: "#cccccc"
25413
- });
25414
- this.measureContainer?.add(this.tempPoint);
25415
- if (nodeHandler) {
25416
- const tempArrow = nodeHandler.create(this.tempArrowId, {
25417
- ...this.props,
25414
+ this.measureContainer?.add(this.tempMainArrowNode);
25415
+ this.tempPoint = new konva.default.Circle({
25418
25416
  x: this.clickPoint?.x ?? 0,
25419
25417
  y: this.clickPoint?.y ?? 0,
25418
+ radius: 5 / stage.scaleX(),
25420
25419
  strokeScaleEnabled: true,
25420
+ stroke: "#cccccc",
25421
+ strokeWidth: 0,
25422
+ fill: "#cccccc"
25423
+ });
25424
+ this.measureContainer?.add(this.tempPoint);
25425
+ this.tempArrowNode = new konva.default.Arrow({
25426
+ ...this.props,
25427
+ id: this.tempArrowId,
25428
+ strokeScaleEnabled: true,
25429
+ x: this.clickPoint?.x ?? 0,
25430
+ y: this.clickPoint?.y ?? 0,
25421
25431
  points: [0, 0]
25422
25432
  });
25423
- this.instance.addNode(tempArrow, this.container?.getAttrs().id);
25433
+ this.measureContainer?.add(this.tempArrowNode);
25434
+ this.tempNextPoint = new konva.default.Circle({
25435
+ x: this.clickPoint?.x ?? 0,
25436
+ y: this.clickPoint?.y ?? 0,
25437
+ radius: 5 / stage.scaleX(),
25438
+ strokeScaleEnabled: true,
25439
+ stroke: "#cccccc",
25440
+ strokeWidth: 0,
25441
+ fill: "#cccccc"
25442
+ });
25443
+ this.measureContainer?.add(this.tempNextPoint);
25444
+ this.setState(ARROW_TOOL_STATE.DEFINING_SIZE);
25424
25445
  }
25425
- this.tempNextPoint = new konva.default.Circle({
25426
- x: this.clickPoint?.x ?? 0,
25427
- y: this.clickPoint?.y ?? 0,
25428
- radius: 5 / stage.scaleX(),
25429
- strokeScaleEnabled: true,
25430
- stroke: "#cccccc",
25431
- strokeWidth: 0,
25432
- fill: "#cccccc"
25433
- });
25434
- this.measureContainer?.add(this.tempNextPoint);
25435
- this.setState(ARROW_TOOL_STATE.DEFINING_SIZE);
25436
25446
  }
25437
25447
  handleSettingSize() {
25438
- const tempArrow = this.instance.getStage().findOne(`#${this.tempArrowId}`);
25439
- const tempMainArrow = this.instance.getStage().findOne(`#${this.arrowId}`);
25440
- if (this.arrowId && this.tempPoint && this.tempNextPoint && this.measureContainer && tempMainArrow && tempArrow) {
25448
+ if (this.arrowId && this.tempMainArrowNode && this.tempArrowNode && this.tempPoint && this.tempNextPoint && this.measureContainer) {
25441
25449
  const { mousePoint } = this.instance.getMousePointerRelativeToContainer(this.measureContainer);
25442
- const newPoints = [...tempMainArrow.points()];
25443
- newPoints.push(mousePoint.x - tempMainArrow.x());
25444
- newPoints.push(mousePoint.y - tempMainArrow.y());
25445
- tempMainArrow.setAttrs({
25450
+ const newPoints = [...this.tempMainArrowNode.points()];
25451
+ newPoints.push(mousePoint.x - this.tempMainArrowNode.x());
25452
+ newPoints.push(mousePoint.y - this.tempMainArrowNode.y());
25453
+ this.tempMainArrowNode.setAttrs({
25446
25454
  ...this.props,
25447
25455
  points: newPoints
25448
25456
  });
25449
- const nodeHandler = this.instance.getNodeHandler("arrow");
25450
- const lineNodeHandler = this.instance.getNodeHandler("line");
25451
- if (lineNodeHandler) this.instance.updateNode(lineNodeHandler.serialize(tempMainArrow));
25452
25457
  this.tempPoint.setAttrs({
25453
25458
  x: mousePoint.x,
25454
25459
  y: mousePoint.y
@@ -25457,32 +25462,28 @@ var WeaveArrowToolAction = class extends WeaveAction {
25457
25462
  x: mousePoint.x,
25458
25463
  y: mousePoint.y
25459
25464
  });
25460
- tempArrow.setAttrs({
25465
+ this.tempArrowNode.setAttrs({
25461
25466
  ...this.props,
25462
25467
  x: mousePoint.x,
25463
25468
  y: mousePoint.y,
25464
25469
  points: [0, 0]
25465
25470
  });
25466
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(tempArrow));
25471
+ this.setState(ARROW_TOOL_STATE.DEFINING_SIZE);
25467
25472
  }
25468
- this.setState(ARROW_TOOL_STATE.DEFINING_SIZE);
25469
25473
  }
25470
25474
  handleMovement() {
25471
25475
  if (this.state !== ARROW_TOOL_STATE.DEFINING_SIZE) return;
25472
- const tempArrow = this.instance.getStage().findOne(`#${this.tempArrowId}`);
25473
- if (this.arrowId && this.measureContainer && this.tempNextPoint && tempArrow) {
25476
+ if (this.arrowId && this.tempArrowNode && this.measureContainer && this.tempNextPoint) {
25474
25477
  const { mousePoint } = this.instance.getMousePointerRelativeToContainer(this.measureContainer);
25475
- tempArrow.setAttrs({
25478
+ this.tempArrowNode.setAttrs({
25476
25479
  ...this.props,
25477
25480
  points: [
25478
- tempArrow.points()[0],
25479
- tempArrow.points()[1],
25480
- mousePoint.x - tempArrow.x(),
25481
- mousePoint.y - tempArrow.y()
25481
+ this.tempArrowNode.points()[0],
25482
+ this.tempArrowNode.points()[1],
25483
+ mousePoint.x - this.tempArrowNode.x(),
25484
+ mousePoint.y - this.tempArrowNode.y()
25482
25485
  ]
25483
25486
  });
25484
- const nodeHandler = this.instance.getNodeHandler("arrow");
25485
- if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(tempArrow));
25486
25487
  this.tempNextPoint.setAttrs({
25487
25488
  x: mousePoint.x,
25488
25489
  y: mousePoint.y
@@ -25505,29 +25506,19 @@ var WeaveArrowToolAction = class extends WeaveAction {
25505
25506
  const stage = this.instance.getStage();
25506
25507
  this.tempPoint?.destroy();
25507
25508
  this.tempNextPoint?.destroy();
25508
- const tempArrow = this.instance.getStage().findOne(`#${this.tempArrowId}`);
25509
- const tempMainArrow = this.instance.getStage().findOne(`#${this.arrowId}`);
25510
- if (tempArrow) {
25509
+ this.tempArrowNode?.destroy();
25510
+ if (this.arrowId && this.tempMainArrowNode && this.tempMainArrowNode.points().length >= 4) {
25511
25511
  const nodeHandler = this.instance.getNodeHandler("arrow");
25512
- if (nodeHandler) this.instance.removeNode(nodeHandler.serialize(tempArrow));
25513
- }
25514
- if (this.arrowId && tempMainArrow && tempMainArrow.points().length < 4) {
25515
- const nodeHandler = this.instance.getNodeHandler("line");
25516
- if (nodeHandler) this.instance.removeNode(nodeHandler.serialize(tempMainArrow));
25517
- }
25518
- if (this.arrowId && tempMainArrow && tempMainArrow.points().length >= 4) {
25519
- const nodeHandler = this.instance.getNodeHandler("arrow");
25520
- const lineNodeHandler = this.instance.getNodeHandler("line");
25521
- if (nodeHandler && lineNodeHandler) {
25512
+ if (nodeHandler) {
25513
+ const clonedLine = this.tempMainArrowNode.clone();
25514
+ this.tempMainArrowNode.destroy();
25522
25515
  const finalArrow = nodeHandler.create(this.arrowId, {
25523
- ...tempMainArrow.getAttrs(),
25524
25516
  ...this.props,
25525
- strokeScaleEnabled: true,
25526
- strokeWidth: 1,
25517
+ ...clonedLine.getAttrs(),
25527
25518
  hitStrokeWidth: 16
25528
25519
  });
25529
- this.instance.removeNode(lineNodeHandler.serialize(tempMainArrow));
25530
25520
  this.instance.addNode(finalArrow, this.container?.getAttrs().id);
25521
+ this.instance.emitEvent("onAddedArrow");
25531
25522
  }
25532
25523
  }
25533
25524
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
@@ -25542,7 +25533,10 @@ var WeaveArrowToolAction = class extends WeaveAction {
25542
25533
  this.tempNextPoint = void 0;
25543
25534
  this.arrowId = null;
25544
25535
  this.tempArrowId = null;
25536
+ this.tempMainArrowNode = null;
25537
+ this.tempArrowNode = null;
25545
25538
  this.container = void 0;
25539
+ this.measureContainer = void 0;
25546
25540
  this.clickPoint = null;
25547
25541
  this.setState(ARROW_TOOL_STATE.IDLE);
25548
25542
  }
@@ -25804,6 +25798,7 @@ var WeaveFrameToolAction = class extends WeaveAction {
25804
25798
  const stage = this.instance.getStage();
25805
25799
  stage.container().style.cursor = "crosshair";
25806
25800
  stage.container().focus();
25801
+ this.instance.emitEvent("onAddingFrame");
25807
25802
  this.frameId = null;
25808
25803
  this.clickPoint = null;
25809
25804
  this.setState(FRAME_TOOL_STATE.ADDING);
@@ -25825,6 +25820,7 @@ var WeaveFrameToolAction = class extends WeaveAction {
25825
25820
  y: this.clickPoint.y
25826
25821
  });
25827
25822
  this.instance.addNode(node, this.container?.getAttrs().id);
25823
+ this.instance.emitEvent("onAddedFrame");
25828
25824
  }
25829
25825
  this.cancelAction?.();
25830
25826
  }