@inditextech/weave-sdk 5.1.4 → 5.1.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.
package/dist/types.js CHANGED
@@ -4917,6 +4917,10 @@ function handleClickOrTap(ctx, e) {
4917
4917
  if (canMove && e.evt) {
4918
4918
  nodeTargeted.draggable(true);
4919
4919
  ctx.armDrag(nodeTargeted, e.evt.pointerId);
4920
+ stage.container().tabIndex = 1;
4921
+ stage.container().focus();
4922
+ stage.container().style.cursor = (typeof nodeTargeted?.defineMousePointer === "function" ? nodeTargeted.defineMousePointer() : null) ?? "grab";
4923
+ ctx.triggerSelectedNodesEvent();
4920
4924
  return;
4921
4925
  }
4922
4926
  }
@@ -9778,7 +9782,7 @@ var WeaveRegisterManager = class {
9778
9782
 
9779
9783
  //#endregion
9780
9784
  //#region package.json
9781
- var version = "5.1.4";
9785
+ var version = "5.1.5";
9782
9786
 
9783
9787
  //#endregion
9784
9788
  //#region src/managers/setup.ts
@@ -12363,12 +12367,38 @@ var WeaveShapeLabelEditor = class {
12363
12367
  editingTextBounds = null;
12364
12368
  textArea = null;
12365
12369
  onLiveResize = null;
12370
+ restoreUserSelect = null;
12366
12371
  constructor(instance) {
12367
12372
  this.instance = instance;
12368
12373
  }
12369
12374
  isEditing() {
12370
12375
  return this.editing;
12371
12376
  }
12377
+ enableStageTextSelection() {
12378
+ const stage = this.instance.getStage();
12379
+ const targets = [];
12380
+ const content = stage.content;
12381
+ if (content) targets.push(content);
12382
+ const container = stage.container();
12383
+ if (container && container !== content) targets.push(container);
12384
+ const previous = targets.map((el) => ({
12385
+ el,
12386
+ userSelect: el.style.userSelect,
12387
+ webkitUserSelect: el.style.getPropertyValue("-webkit-user-select")
12388
+ }));
12389
+ for (const el of targets) {
12390
+ el.style.userSelect = "text";
12391
+ el.style.setProperty("-webkit-user-select", "text");
12392
+ }
12393
+ this.restoreUserSelect = () => {
12394
+ for (const { el, userSelect, webkitUserSelect } of previous) {
12395
+ el.style.userSelect = userSelect;
12396
+ if (webkitUserSelect) el.style.setProperty("-webkit-user-select", webkitUserSelect);
12397
+ else el.style.removeProperty("-webkit-user-select");
12398
+ }
12399
+ this.restoreUserSelect = null;
12400
+ };
12401
+ }
12372
12402
  renderLabel(group, props, textBounds) {
12373
12403
  const labelText = props.labelText ?? WEAVE_SHAPE_LABEL_DEFAULTS.labelText;
12374
12404
  const labelNode = new Konva.Text({
@@ -12467,6 +12497,7 @@ var WeaveShapeLabelEditor = class {
12467
12497
  this.instance.releaseMutexLock();
12468
12498
  this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
12469
12499
  this.editing = false;
12500
+ this.restoreUserSelect?.();
12470
12501
  const editedGroupId = this.editingGroup?.id() ?? null;
12471
12502
  if (this.editingGroup) {
12472
12503
  const liveGroup = this.instance.getStage().findOne(`#${this.editingGroup.id()}`);
@@ -12597,6 +12628,7 @@ var WeaveShapeLabelEditor = class {
12597
12628
  const props = group.getAttrs();
12598
12629
  const absScale = group.getAbsoluteScale();
12599
12630
  const effectiveScale = absScale.x;
12631
+ this.enableStageTextSelection();
12600
12632
  this.textArea = document.createElement("textarea");
12601
12633
  this.textArea.id = `${group.id()}_label_textarea`;
12602
12634
  this.textArea.rows = 1;
@@ -12670,6 +12702,7 @@ var WeaveShapeLabelEditor = class {
12670
12702
  };
12671
12703
  const commit = (text) => {
12672
12704
  window.removeEventListener("pointerup", handleOutsideClick);
12705
+ window.removeEventListener("pointerdown", handlePointerDown$1);
12673
12706
  this.exitEditMode();
12674
12707
  const liveGroup = this.instance.getStage().findOne(`#${group.id()}`);
12675
12708
  const labelNode = liveGroup?.findOne(`#${labelId(group.id())}`);
@@ -12693,9 +12726,17 @@ var WeaveShapeLabelEditor = class {
12693
12726
  this.textArea.scrollLeft = 0;
12694
12727
  }
12695
12728
  }, { signal: this.instance.getEventsController().signal });
12729
+ let pointerDownInsideTextArea = false;
12730
+ const handlePointerDown$1 = (e) => {
12731
+ pointerDownInsideTextArea = !!this.textArea && this.textArea.contains(e.target);
12732
+ };
12696
12733
  const handleOutsideClick = (e) => {
12697
12734
  e.stopPropagation();
12698
12735
  if (!this.textArea) return;
12736
+ if (pointerDownInsideTextArea) {
12737
+ pointerDownInsideTextArea = false;
12738
+ return;
12739
+ }
12699
12740
  const mouseX = e.clientX;
12700
12741
  const mouseY = e.clientY;
12701
12742
  let elementUnderMouse = document.elementFromPoint(mouseX, mouseY);
@@ -12707,6 +12748,7 @@ var WeaveShapeLabelEditor = class {
12707
12748
  if (clickedOutside) commit(this.textArea.value);
12708
12749
  };
12709
12750
  setTimeout(() => {
12751
+ window.addEventListener("pointerdown", handlePointerDown$1, { signal: this.instance.getEventsController().signal });
12710
12752
  window.addEventListener("pointerup", handleOutsideClick, { signal: this.instance.getEventsController().signal });
12711
12753
  }, 0);
12712
12754
  this.textArea.tabIndex = 1;
@@ -13821,6 +13863,7 @@ const TEXT_LAYOUT = {
13821
13863
  //#region src/nodes/text/text.ts
13822
13864
  var WeaveTextNode = class extends WeaveNode {
13823
13865
  nodeType = WEAVE_TEXT_NODE_TYPE;
13866
+ restoreUserSelect = null;
13824
13867
  constructor(params) {
13825
13868
  super();
13826
13869
  const { config } = params ?? {};
@@ -14173,8 +14216,34 @@ var WeaveTextNode = class extends WeaveNode {
14173
14216
  this.textArea.style.webkitTextStroke = `${this.config.outline.width * this.instance.getStage().scaleX()}px ${this.config.outline.color}`;
14174
14217
  }
14175
14218
  }
14219
+ enableStageTextSelection() {
14220
+ const stage = this.instance.getStage();
14221
+ const targets = [];
14222
+ const content = stage.content;
14223
+ if (content) targets.push(content);
14224
+ const container = stage.container();
14225
+ if (container && container !== content) targets.push(container);
14226
+ const previous = targets.map((el) => ({
14227
+ el,
14228
+ userSelect: el.style.userSelect,
14229
+ webkitUserSelect: el.style.getPropertyValue("-webkit-user-select")
14230
+ }));
14231
+ for (const el of targets) {
14232
+ el.style.userSelect = "text";
14233
+ el.style.setProperty("-webkit-user-select", "text");
14234
+ }
14235
+ this.restoreUserSelect = () => {
14236
+ for (const { el, userSelect, webkitUserSelect } of previous) {
14237
+ el.style.userSelect = userSelect;
14238
+ if (webkitUserSelect) el.style.setProperty("-webkit-user-select", webkitUserSelect);
14239
+ else el.style.removeProperty("-webkit-user-select");
14240
+ }
14241
+ this.restoreUserSelect = null;
14242
+ };
14243
+ }
14176
14244
  createTextAreaDOM(textNode, position) {
14177
14245
  const stage = this.instance.getStage();
14246
+ this.enableStageTextSelection();
14178
14247
  this.textAreaSuperContainer = document.createElement("div");
14179
14248
  this.textAreaSuperContainer.id = `${textNode.id()}_supercontainer`;
14180
14249
  this.textAreaSuperContainer.style.position = "absolute";
@@ -14321,7 +14390,7 @@ var WeaveTextNode = class extends WeaveNode {
14321
14390
  this.instance.removeEventListener("onZoomChange", this.onZoomChangeHandler(textNode).bind(this));
14322
14391
  this.instance.removeEventListener("onStageMove", this.onStageMoveHandler(textNode).bind(this));
14323
14392
  window.removeEventListener("pointerup", handleOutsideClick);
14324
- window.removeEventListener("pointerdown", handleOutsideClick);
14393
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14325
14394
  return;
14326
14395
  }
14327
14396
  };
@@ -14331,7 +14400,7 @@ var WeaveTextNode = class extends WeaveNode {
14331
14400
  this.instance.removeEventListener("onZoomChange", this.onZoomChangeHandler(textNode).bind(this));
14332
14401
  this.instance.removeEventListener("onStageMove", this.onStageMoveHandler(textNode).bind(this));
14333
14402
  window.removeEventListener("pointerup", handleOutsideClick);
14334
- window.removeEventListener("pointerdown", handleOutsideClick);
14403
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14335
14404
  };
14336
14405
  textNode.setAttr("cancelEditMode", cancelEditMode.bind(this));
14337
14406
  const handleKeyUp = () => {
@@ -14351,9 +14420,17 @@ var WeaveTextNode = class extends WeaveNode {
14351
14420
  this.textArea.addEventListener("keyup", handleKeyUp, { signal: this.instance.getEventsController().signal });
14352
14421
  this.textArea.tabIndex = 1;
14353
14422
  this.textArea.focus();
14423
+ let pointerDownInsideTextArea = false;
14424
+ const handlePointerDown$1 = (e) => {
14425
+ pointerDownInsideTextArea = !!this.textArea && this.textArea.contains(e.target);
14426
+ };
14354
14427
  const handleOutsideClick = (e) => {
14355
14428
  e.stopPropagation();
14356
14429
  if (!this.textArea) return;
14430
+ if (pointerDownInsideTextArea) {
14431
+ pointerDownInsideTextArea = false;
14432
+ return;
14433
+ }
14357
14434
  const mouseX = e.clientX;
14358
14435
  const mouseY = e.clientY;
14359
14436
  let elementUnderMouse = document.elementFromPoint(mouseX, mouseY);
@@ -14370,10 +14447,12 @@ var WeaveTextNode = class extends WeaveNode {
14370
14447
  this.textArea.removeEventListener("keydown", handleKeyDown);
14371
14448
  this.textArea.removeEventListener("keyup", handleKeyUp);
14372
14449
  window.removeEventListener("pointerup", handleOutsideClick);
14450
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14373
14451
  return;
14374
14452
  }
14375
14453
  };
14376
14454
  setTimeout(() => {
14455
+ window.addEventListener("pointerdown", handlePointerDown$1, { signal: this.instance.getEventsController().signal });
14377
14456
  window.addEventListener("pointerup", handleOutsideClick, { signal: this.instance.getEventsController().signal });
14378
14457
  }, 0);
14379
14458
  this.instance.getStage().mode(WEAVE_STAGE_TEXT_EDITION_MODE);
@@ -14411,6 +14490,7 @@ var WeaveTextNode = class extends WeaveNode {
14411
14490
  else textNode.visible(true);
14412
14491
  }
14413
14492
  removeTextAreaDOM(textNode) {
14493
+ this.restoreUserSelect?.();
14414
14494
  this.instance.releaseMutexLock();
14415
14495
  this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
14416
14496
  this.editing = false;