@inditextech/weave-sdk 5.1.3 → 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/sdk.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.3";
9785
+ var version = "5.1.5";
9782
9786
 
9783
9787
  //#endregion
9784
9788
  //#region src/managers/setup.ts
@@ -12317,12 +12321,38 @@ var WeaveShapeLabelEditor = class {
12317
12321
  editingTextBounds = null;
12318
12322
  textArea = null;
12319
12323
  onLiveResize = null;
12324
+ restoreUserSelect = null;
12320
12325
  constructor(instance) {
12321
12326
  this.instance = instance;
12322
12327
  }
12323
12328
  isEditing() {
12324
12329
  return this.editing;
12325
12330
  }
12331
+ enableStageTextSelection() {
12332
+ const stage = this.instance.getStage();
12333
+ const targets = [];
12334
+ const content = stage.content;
12335
+ if (content) targets.push(content);
12336
+ const container = stage.container();
12337
+ if (container && container !== content) targets.push(container);
12338
+ const previous = targets.map((el) => ({
12339
+ el,
12340
+ userSelect: el.style.userSelect,
12341
+ webkitUserSelect: el.style.getPropertyValue("-webkit-user-select")
12342
+ }));
12343
+ for (const el of targets) {
12344
+ el.style.userSelect = "text";
12345
+ el.style.setProperty("-webkit-user-select", "text");
12346
+ }
12347
+ this.restoreUserSelect = () => {
12348
+ for (const { el, userSelect, webkitUserSelect } of previous) {
12349
+ el.style.userSelect = userSelect;
12350
+ if (webkitUserSelect) el.style.setProperty("-webkit-user-select", webkitUserSelect);
12351
+ else el.style.removeProperty("-webkit-user-select");
12352
+ }
12353
+ this.restoreUserSelect = null;
12354
+ };
12355
+ }
12326
12356
  renderLabel(group, props, textBounds) {
12327
12357
  const labelText = props.labelText ?? WEAVE_SHAPE_LABEL_DEFAULTS.labelText;
12328
12358
  const labelNode = new Konva.Text({
@@ -12421,6 +12451,7 @@ var WeaveShapeLabelEditor = class {
12421
12451
  this.instance.releaseMutexLock();
12422
12452
  this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
12423
12453
  this.editing = false;
12454
+ this.restoreUserSelect?.();
12424
12455
  const editedGroupId = this.editingGroup?.id() ?? null;
12425
12456
  if (this.editingGroup) {
12426
12457
  const liveGroup = this.instance.getStage().findOne(`#${this.editingGroup.id()}`);
@@ -12551,6 +12582,7 @@ var WeaveShapeLabelEditor = class {
12551
12582
  const props = group.getAttrs();
12552
12583
  const absScale = group.getAbsoluteScale();
12553
12584
  const effectiveScale = absScale.x;
12585
+ this.enableStageTextSelection();
12554
12586
  this.textArea = document.createElement("textarea");
12555
12587
  this.textArea.id = `${group.id()}_label_textarea`;
12556
12588
  this.textArea.rows = 1;
@@ -12624,6 +12656,7 @@ var WeaveShapeLabelEditor = class {
12624
12656
  };
12625
12657
  const commit = (text) => {
12626
12658
  window.removeEventListener("pointerup", handleOutsideClick);
12659
+ window.removeEventListener("pointerdown", handlePointerDown$1);
12627
12660
  this.exitEditMode();
12628
12661
  const liveGroup = this.instance.getStage().findOne(`#${group.id()}`);
12629
12662
  const labelNode = liveGroup?.findOne(`#${labelId(group.id())}`);
@@ -12647,9 +12680,17 @@ var WeaveShapeLabelEditor = class {
12647
12680
  this.textArea.scrollLeft = 0;
12648
12681
  }
12649
12682
  }, { signal: this.instance.getEventsController().signal });
12683
+ let pointerDownInsideTextArea = false;
12684
+ const handlePointerDown$1 = (e) => {
12685
+ pointerDownInsideTextArea = !!this.textArea && this.textArea.contains(e.target);
12686
+ };
12650
12687
  const handleOutsideClick = (e) => {
12651
12688
  e.stopPropagation();
12652
12689
  if (!this.textArea) return;
12690
+ if (pointerDownInsideTextArea) {
12691
+ pointerDownInsideTextArea = false;
12692
+ return;
12693
+ }
12653
12694
  const mouseX = e.clientX;
12654
12695
  const mouseY = e.clientY;
12655
12696
  let elementUnderMouse = document.elementFromPoint(mouseX, mouseY);
@@ -12661,6 +12702,7 @@ var WeaveShapeLabelEditor = class {
12661
12702
  if (clickedOutside) commit(this.textArea.value);
12662
12703
  };
12663
12704
  setTimeout(() => {
12705
+ window.addEventListener("pointerdown", handlePointerDown$1, { signal: this.instance.getEventsController().signal });
12664
12706
  window.addEventListener("pointerup", handleOutsideClick, { signal: this.instance.getEventsController().signal });
12665
12707
  }, 0);
12666
12708
  this.textArea.tabIndex = 1;
@@ -13775,6 +13817,7 @@ const TEXT_LAYOUT = {
13775
13817
  //#region src/nodes/text/text.ts
13776
13818
  var WeaveTextNode = class extends WeaveNode {
13777
13819
  nodeType = WEAVE_TEXT_NODE_TYPE;
13820
+ restoreUserSelect = null;
13778
13821
  constructor(params) {
13779
13822
  super();
13780
13823
  const { config } = params ?? {};
@@ -14127,8 +14170,34 @@ var WeaveTextNode = class extends WeaveNode {
14127
14170
  this.textArea.style.webkitTextStroke = `${this.config.outline.width * this.instance.getStage().scaleX()}px ${this.config.outline.color}`;
14128
14171
  }
14129
14172
  }
14173
+ enableStageTextSelection() {
14174
+ const stage = this.instance.getStage();
14175
+ const targets = [];
14176
+ const content = stage.content;
14177
+ if (content) targets.push(content);
14178
+ const container = stage.container();
14179
+ if (container && container !== content) targets.push(container);
14180
+ const previous = targets.map((el) => ({
14181
+ el,
14182
+ userSelect: el.style.userSelect,
14183
+ webkitUserSelect: el.style.getPropertyValue("-webkit-user-select")
14184
+ }));
14185
+ for (const el of targets) {
14186
+ el.style.userSelect = "text";
14187
+ el.style.setProperty("-webkit-user-select", "text");
14188
+ }
14189
+ this.restoreUserSelect = () => {
14190
+ for (const { el, userSelect, webkitUserSelect } of previous) {
14191
+ el.style.userSelect = userSelect;
14192
+ if (webkitUserSelect) el.style.setProperty("-webkit-user-select", webkitUserSelect);
14193
+ else el.style.removeProperty("-webkit-user-select");
14194
+ }
14195
+ this.restoreUserSelect = null;
14196
+ };
14197
+ }
14130
14198
  createTextAreaDOM(textNode, position) {
14131
14199
  const stage = this.instance.getStage();
14200
+ this.enableStageTextSelection();
14132
14201
  this.textAreaSuperContainer = document.createElement("div");
14133
14202
  this.textAreaSuperContainer.id = `${textNode.id()}_supercontainer`;
14134
14203
  this.textAreaSuperContainer.style.position = "absolute";
@@ -14275,7 +14344,7 @@ var WeaveTextNode = class extends WeaveNode {
14275
14344
  this.instance.removeEventListener("onZoomChange", this.onZoomChangeHandler(textNode).bind(this));
14276
14345
  this.instance.removeEventListener("onStageMove", this.onStageMoveHandler(textNode).bind(this));
14277
14346
  window.removeEventListener("pointerup", handleOutsideClick);
14278
- window.removeEventListener("pointerdown", handleOutsideClick);
14347
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14279
14348
  return;
14280
14349
  }
14281
14350
  };
@@ -14285,7 +14354,7 @@ var WeaveTextNode = class extends WeaveNode {
14285
14354
  this.instance.removeEventListener("onZoomChange", this.onZoomChangeHandler(textNode).bind(this));
14286
14355
  this.instance.removeEventListener("onStageMove", this.onStageMoveHandler(textNode).bind(this));
14287
14356
  window.removeEventListener("pointerup", handleOutsideClick);
14288
- window.removeEventListener("pointerdown", handleOutsideClick);
14357
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14289
14358
  };
14290
14359
  textNode.setAttr("cancelEditMode", cancelEditMode.bind(this));
14291
14360
  const handleKeyUp = () => {
@@ -14305,9 +14374,17 @@ var WeaveTextNode = class extends WeaveNode {
14305
14374
  this.textArea.addEventListener("keyup", handleKeyUp, { signal: this.instance.getEventsController().signal });
14306
14375
  this.textArea.tabIndex = 1;
14307
14376
  this.textArea.focus();
14377
+ let pointerDownInsideTextArea = false;
14378
+ const handlePointerDown$1 = (e) => {
14379
+ pointerDownInsideTextArea = !!this.textArea && this.textArea.contains(e.target);
14380
+ };
14308
14381
  const handleOutsideClick = (e) => {
14309
14382
  e.stopPropagation();
14310
14383
  if (!this.textArea) return;
14384
+ if (pointerDownInsideTextArea) {
14385
+ pointerDownInsideTextArea = false;
14386
+ return;
14387
+ }
14311
14388
  const mouseX = e.clientX;
14312
14389
  const mouseY = e.clientY;
14313
14390
  let elementUnderMouse = document.elementFromPoint(mouseX, mouseY);
@@ -14324,10 +14401,12 @@ var WeaveTextNode = class extends WeaveNode {
14324
14401
  this.textArea.removeEventListener("keydown", handleKeyDown);
14325
14402
  this.textArea.removeEventListener("keyup", handleKeyUp);
14326
14403
  window.removeEventListener("pointerup", handleOutsideClick);
14404
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14327
14405
  return;
14328
14406
  }
14329
14407
  };
14330
14408
  setTimeout(() => {
14409
+ window.addEventListener("pointerdown", handlePointerDown$1, { signal: this.instance.getEventsController().signal });
14331
14410
  window.addEventListener("pointerup", handleOutsideClick, { signal: this.instance.getEventsController().signal });
14332
14411
  }, 0);
14333
14412
  this.instance.getStage().mode(WEAVE_STAGE_TEXT_EDITION_MODE);
@@ -14365,6 +14444,7 @@ var WeaveTextNode = class extends WeaveNode {
14365
14444
  else textNode.visible(true);
14366
14445
  }
14367
14446
  removeTextAreaDOM(textNode) {
14447
+ this.restoreUserSelect?.();
14368
14448
  this.instance.releaseMutexLock();
14369
14449
  this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
14370
14450
  this.editing = false;
package/dist/sdk.node.js CHANGED
@@ -4916,6 +4916,10 @@ function handleClickOrTap(ctx, e) {
4916
4916
  if (canMove && e.evt) {
4917
4917
  nodeTargeted.draggable(true);
4918
4918
  ctx.armDrag(nodeTargeted, e.evt.pointerId);
4919
+ stage.container().tabIndex = 1;
4920
+ stage.container().focus();
4921
+ stage.container().style.cursor = (typeof nodeTargeted?.defineMousePointer === "function" ? nodeTargeted.defineMousePointer() : null) ?? "grab";
4922
+ ctx.triggerSelectedNodesEvent();
4919
4923
  return;
4920
4924
  }
4921
4925
  }
@@ -9777,7 +9781,7 @@ var WeaveRegisterManager = class {
9777
9781
 
9778
9782
  //#endregion
9779
9783
  //#region package.json
9780
- var version = "5.1.3";
9784
+ var version = "5.1.5";
9781
9785
 
9782
9786
  //#endregion
9783
9787
  //#region src/managers/setup.ts
@@ -12316,12 +12320,38 @@ var WeaveShapeLabelEditor = class {
12316
12320
  editingTextBounds = null;
12317
12321
  textArea = null;
12318
12322
  onLiveResize = null;
12323
+ restoreUserSelect = null;
12319
12324
  constructor(instance) {
12320
12325
  this.instance = instance;
12321
12326
  }
12322
12327
  isEditing() {
12323
12328
  return this.editing;
12324
12329
  }
12330
+ enableStageTextSelection() {
12331
+ const stage = this.instance.getStage();
12332
+ const targets = [];
12333
+ const content = stage.content;
12334
+ if (content) targets.push(content);
12335
+ const container = stage.container();
12336
+ if (container && container !== content) targets.push(container);
12337
+ const previous = targets.map((el) => ({
12338
+ el,
12339
+ userSelect: el.style.userSelect,
12340
+ webkitUserSelect: el.style.getPropertyValue("-webkit-user-select")
12341
+ }));
12342
+ for (const el of targets) {
12343
+ el.style.userSelect = "text";
12344
+ el.style.setProperty("-webkit-user-select", "text");
12345
+ }
12346
+ this.restoreUserSelect = () => {
12347
+ for (const { el, userSelect, webkitUserSelect } of previous) {
12348
+ el.style.userSelect = userSelect;
12349
+ if (webkitUserSelect) el.style.setProperty("-webkit-user-select", webkitUserSelect);
12350
+ else el.style.removeProperty("-webkit-user-select");
12351
+ }
12352
+ this.restoreUserSelect = null;
12353
+ };
12354
+ }
12325
12355
  renderLabel(group, props, textBounds) {
12326
12356
  const labelText = props.labelText ?? WEAVE_SHAPE_LABEL_DEFAULTS.labelText;
12327
12357
  const labelNode = new Konva.Text({
@@ -12420,6 +12450,7 @@ var WeaveShapeLabelEditor = class {
12420
12450
  this.instance.releaseMutexLock();
12421
12451
  this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
12422
12452
  this.editing = false;
12453
+ this.restoreUserSelect?.();
12423
12454
  const editedGroupId = this.editingGroup?.id() ?? null;
12424
12455
  if (this.editingGroup) {
12425
12456
  const liveGroup = this.instance.getStage().findOne(`#${this.editingGroup.id()}`);
@@ -12550,6 +12581,7 @@ var WeaveShapeLabelEditor = class {
12550
12581
  const props = group.getAttrs();
12551
12582
  const absScale = group.getAbsoluteScale();
12552
12583
  const effectiveScale = absScale.x;
12584
+ this.enableStageTextSelection();
12553
12585
  this.textArea = document.createElement("textarea");
12554
12586
  this.textArea.id = `${group.id()}_label_textarea`;
12555
12587
  this.textArea.rows = 1;
@@ -12623,6 +12655,7 @@ var WeaveShapeLabelEditor = class {
12623
12655
  };
12624
12656
  const commit = (text) => {
12625
12657
  window.removeEventListener("pointerup", handleOutsideClick);
12658
+ window.removeEventListener("pointerdown", handlePointerDown$1);
12626
12659
  this.exitEditMode();
12627
12660
  const liveGroup = this.instance.getStage().findOne(`#${group.id()}`);
12628
12661
  const labelNode = liveGroup?.findOne(`#${labelId(group.id())}`);
@@ -12646,9 +12679,17 @@ var WeaveShapeLabelEditor = class {
12646
12679
  this.textArea.scrollLeft = 0;
12647
12680
  }
12648
12681
  }, { signal: this.instance.getEventsController().signal });
12682
+ let pointerDownInsideTextArea = false;
12683
+ const handlePointerDown$1 = (e) => {
12684
+ pointerDownInsideTextArea = !!this.textArea && this.textArea.contains(e.target);
12685
+ };
12649
12686
  const handleOutsideClick = (e) => {
12650
12687
  e.stopPropagation();
12651
12688
  if (!this.textArea) return;
12689
+ if (pointerDownInsideTextArea) {
12690
+ pointerDownInsideTextArea = false;
12691
+ return;
12692
+ }
12652
12693
  const mouseX = e.clientX;
12653
12694
  const mouseY = e.clientY;
12654
12695
  let elementUnderMouse = document.elementFromPoint(mouseX, mouseY);
@@ -12660,6 +12701,7 @@ var WeaveShapeLabelEditor = class {
12660
12701
  if (clickedOutside) commit(this.textArea.value);
12661
12702
  };
12662
12703
  setTimeout(() => {
12704
+ window.addEventListener("pointerdown", handlePointerDown$1, { signal: this.instance.getEventsController().signal });
12663
12705
  window.addEventListener("pointerup", handleOutsideClick, { signal: this.instance.getEventsController().signal });
12664
12706
  }, 0);
12665
12707
  this.textArea.tabIndex = 1;
@@ -13774,6 +13816,7 @@ const TEXT_LAYOUT = {
13774
13816
  //#region src/nodes/text/text.ts
13775
13817
  var WeaveTextNode = class extends WeaveNode {
13776
13818
  nodeType = WEAVE_TEXT_NODE_TYPE;
13819
+ restoreUserSelect = null;
13777
13820
  constructor(params) {
13778
13821
  super();
13779
13822
  const { config } = params ?? {};
@@ -14126,8 +14169,34 @@ var WeaveTextNode = class extends WeaveNode {
14126
14169
  this.textArea.style.webkitTextStroke = `${this.config.outline.width * this.instance.getStage().scaleX()}px ${this.config.outline.color}`;
14127
14170
  }
14128
14171
  }
14172
+ enableStageTextSelection() {
14173
+ const stage = this.instance.getStage();
14174
+ const targets = [];
14175
+ const content = stage.content;
14176
+ if (content) targets.push(content);
14177
+ const container = stage.container();
14178
+ if (container && container !== content) targets.push(container);
14179
+ const previous = targets.map((el) => ({
14180
+ el,
14181
+ userSelect: el.style.userSelect,
14182
+ webkitUserSelect: el.style.getPropertyValue("-webkit-user-select")
14183
+ }));
14184
+ for (const el of targets) {
14185
+ el.style.userSelect = "text";
14186
+ el.style.setProperty("-webkit-user-select", "text");
14187
+ }
14188
+ this.restoreUserSelect = () => {
14189
+ for (const { el, userSelect, webkitUserSelect } of previous) {
14190
+ el.style.userSelect = userSelect;
14191
+ if (webkitUserSelect) el.style.setProperty("-webkit-user-select", webkitUserSelect);
14192
+ else el.style.removeProperty("-webkit-user-select");
14193
+ }
14194
+ this.restoreUserSelect = null;
14195
+ };
14196
+ }
14129
14197
  createTextAreaDOM(textNode, position) {
14130
14198
  const stage = this.instance.getStage();
14199
+ this.enableStageTextSelection();
14131
14200
  this.textAreaSuperContainer = document.createElement("div");
14132
14201
  this.textAreaSuperContainer.id = `${textNode.id()}_supercontainer`;
14133
14202
  this.textAreaSuperContainer.style.position = "absolute";
@@ -14274,7 +14343,7 @@ var WeaveTextNode = class extends WeaveNode {
14274
14343
  this.instance.removeEventListener("onZoomChange", this.onZoomChangeHandler(textNode).bind(this));
14275
14344
  this.instance.removeEventListener("onStageMove", this.onStageMoveHandler(textNode).bind(this));
14276
14345
  window.removeEventListener("pointerup", handleOutsideClick);
14277
- window.removeEventListener("pointerdown", handleOutsideClick);
14346
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14278
14347
  return;
14279
14348
  }
14280
14349
  };
@@ -14284,7 +14353,7 @@ var WeaveTextNode = class extends WeaveNode {
14284
14353
  this.instance.removeEventListener("onZoomChange", this.onZoomChangeHandler(textNode).bind(this));
14285
14354
  this.instance.removeEventListener("onStageMove", this.onStageMoveHandler(textNode).bind(this));
14286
14355
  window.removeEventListener("pointerup", handleOutsideClick);
14287
- window.removeEventListener("pointerdown", handleOutsideClick);
14356
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14288
14357
  };
14289
14358
  textNode.setAttr("cancelEditMode", cancelEditMode.bind(this));
14290
14359
  const handleKeyUp = () => {
@@ -14304,9 +14373,17 @@ var WeaveTextNode = class extends WeaveNode {
14304
14373
  this.textArea.addEventListener("keyup", handleKeyUp, { signal: this.instance.getEventsController().signal });
14305
14374
  this.textArea.tabIndex = 1;
14306
14375
  this.textArea.focus();
14376
+ let pointerDownInsideTextArea = false;
14377
+ const handlePointerDown$1 = (e) => {
14378
+ pointerDownInsideTextArea = !!this.textArea && this.textArea.contains(e.target);
14379
+ };
14307
14380
  const handleOutsideClick = (e) => {
14308
14381
  e.stopPropagation();
14309
14382
  if (!this.textArea) return;
14383
+ if (pointerDownInsideTextArea) {
14384
+ pointerDownInsideTextArea = false;
14385
+ return;
14386
+ }
14310
14387
  const mouseX = e.clientX;
14311
14388
  const mouseY = e.clientY;
14312
14389
  let elementUnderMouse = document.elementFromPoint(mouseX, mouseY);
@@ -14323,10 +14400,12 @@ var WeaveTextNode = class extends WeaveNode {
14323
14400
  this.textArea.removeEventListener("keydown", handleKeyDown);
14324
14401
  this.textArea.removeEventListener("keyup", handleKeyUp);
14325
14402
  window.removeEventListener("pointerup", handleOutsideClick);
14403
+ window.removeEventListener("pointerdown", handlePointerDown$1);
14326
14404
  return;
14327
14405
  }
14328
14406
  };
14329
14407
  setTimeout(() => {
14408
+ window.addEventListener("pointerdown", handlePointerDown$1, { signal: this.instance.getEventsController().signal });
14330
14409
  window.addEventListener("pointerup", handleOutsideClick, { signal: this.instance.getEventsController().signal });
14331
14410
  }, 0);
14332
14411
  this.instance.getStage().mode(WEAVE_STAGE_TEXT_EDITION_MODE);
@@ -14364,6 +14443,7 @@ var WeaveTextNode = class extends WeaveNode {
14364
14443
  else textNode.visible(true);
14365
14444
  }
14366
14445
  removeTextAreaDOM(textNode) {
14446
+ this.restoreUserSelect?.();
14367
14447
  this.instance.releaseMutexLock();
14368
14448
  this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
14369
14449
  this.editing = false;