@excalidraw/element 0.18.0-39ce38a0d-200a6bd94 → 0.18.0-508de2f3a

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/dev/index.js CHANGED
@@ -6619,7 +6619,7 @@ var mutateElement = (element, elementsMap, updates, options) => {
6619
6619
  didChange = true;
6620
6620
  }
6621
6621
  }
6622
- if (!didChange) {
6622
+ if (!didChange && !options?.force) {
6623
6623
  return element;
6624
6624
  }
6625
6625
  if (typeof updates.height !== "undefined" || typeof updates.width !== "undefined" || typeof fileId != "undefined" || typeof points !== "undefined") {
@@ -13533,10 +13533,12 @@ var StoreDelta = class {
13533
13533
  */
13534
13534
  static load({
13535
13535
  id,
13536
- elements: { added, removed, updated }
13536
+ elements: { added, removed, updated },
13537
+ appState: { delta: appStateDelta }
13537
13538
  }) {
13538
13539
  const elements = ElementsDelta.create(added, removed, updated);
13539
- return new this(id, elements, AppStateDelta.empty());
13540
+ const appState = AppStateDelta.create(appStateDelta);
13541
+ return new this(id, elements, appState);
13540
13542
  }
13541
13543
  /**
13542
13544
  * Inverse store delta, creates new instance of `StoreDelta`.
@@ -13547,9 +13549,7 @@ var StoreDelta = class {
13547
13549
  /**
13548
13550
  * Apply the delta to the passed elements and appState, does not modify the snapshot.
13549
13551
  */
13550
- static applyTo(delta, elements, appState, options = {
13551
- excludedProperties: /* @__PURE__ */ new Set()
13552
- }) {
13552
+ static applyTo(delta, elements, appState, options) {
13553
13553
  const [nextElements, elementsContainVisibleChange] = delta.elements.applyTo(
13554
13554
  elements,
13555
13555
  StoreSnapshot.empty().elements,
@@ -13815,14 +13815,13 @@ var getDefaultObservedAppState = () => {
13815
13815
  viewBackgroundColor: COLOR_PALETTE2.white,
13816
13816
  selectedElementIds: {},
13817
13817
  selectedGroupIds: {},
13818
- activeLinearElement: null,
13818
+ selectedLinearElement: null,
13819
13819
  croppingElementId: null,
13820
13820
  activeLockedId: null,
13821
13821
  lockedMultiSelections: {}
13822
13822
  };
13823
13823
  };
13824
13824
  var getObservedAppState = (appState) => {
13825
- const selectedLinearElement = appState.selectedLinearElement;
13826
13825
  const observedAppState = {
13827
13826
  name: appState.name,
13828
13827
  editingGroupId: appState.editingGroupId,
@@ -13832,10 +13831,10 @@ var getObservedAppState = (appState) => {
13832
13831
  croppingElementId: appState.croppingElementId,
13833
13832
  activeLockedId: appState.activeLockedId,
13834
13833
  lockedMultiSelections: appState.lockedMultiSelections,
13835
- activeLinearElement: selectedLinearElement ? {
13836
- id: selectedLinearElement.elementId,
13837
- isEditing: !!selectedLinearElement.isEditing
13838
- } : appState.activeLinearElement ?? null
13834
+ selectedLinearElement: appState.selectedLinearElement ? {
13835
+ elementId: appState.selectedLinearElement.elementId,
13836
+ isEditing: !!appState.selectedLinearElement.isEditing
13837
+ } : null
13839
13838
  };
13840
13839
  Reflect.defineProperty(observedAppState, hiddenObservedAppStateProp, {
13841
13840
  value: true,
@@ -14399,9 +14398,9 @@ var Scene = class {
14399
14398
  getFramesIncludingDeleted() {
14400
14399
  return this.frames;
14401
14400
  }
14402
- constructor(elements = null) {
14401
+ constructor(elements = null, options) {
14403
14402
  if (elements) {
14404
- this.replaceAllElements(elements);
14403
+ this.replaceAllElements(elements, options);
14405
14404
  }
14406
14405
  }
14407
14406
  getSelectedElements(opts) {
@@ -14466,10 +14465,12 @@ var Scene = class {
14466
14465
  }
14467
14466
  return didChange;
14468
14467
  }
14469
- replaceAllElements(nextElements) {
14468
+ replaceAllElements(nextElements, options) {
14470
14469
  const _nextElements = toArray(nextElements);
14471
14470
  const nextFrameLikes = [];
14472
- validateIndicesThrottled(_nextElements);
14471
+ if (!options?.skipValidation) {
14472
+ validateIndicesThrottled(_nextElements);
14473
+ }
14473
14474
  this.elements = syncInvalidIndices2(_nextElements);
14474
14475
  this.elementsMap.clear();
14475
14476
  this.elements.forEach((element) => {
@@ -14872,6 +14873,9 @@ var AppStateDelta = class _AppStateDelta {
14872
14873
  constructor(delta) {
14873
14874
  this.delta = delta;
14874
14875
  }
14876
+ static create(delta) {
14877
+ return new _AppStateDelta(delta);
14878
+ }
14875
14879
  static calculate(prevAppState, nextAppState) {
14876
14880
  const delta = Delta.calculate(
14877
14881
  prevAppState,
@@ -14900,38 +14904,38 @@ var AppStateDelta = class _AppStateDelta {
14900
14904
  applyTo(appState, nextElements) {
14901
14905
  try {
14902
14906
  const {
14903
- selectedElementIds: removedSelectedElementIds = {},
14904
- selectedGroupIds: removedSelectedGroupIds = {}
14907
+ selectedElementIds: deletedSelectedElementIds = {},
14908
+ selectedGroupIds: deletedSelectedGroupIds = {}
14905
14909
  } = this.delta.deleted;
14906
14910
  const {
14907
- selectedElementIds: addedSelectedElementIds = {},
14908
- selectedGroupIds: addedSelectedGroupIds = {},
14909
- activeLinearElement,
14911
+ selectedElementIds: insertedSelectedElementIds = {},
14912
+ selectedGroupIds: insertedSelectedGroupIds = {},
14913
+ selectedLinearElement: insertedSelectedLinearElement,
14910
14914
  ...directlyApplicablePartial
14911
14915
  } = this.delta.inserted;
14912
14916
  const mergedSelectedElementIds = Delta.mergeObjects(
14913
14917
  appState.selectedElementIds,
14914
- addedSelectedElementIds,
14915
- removedSelectedElementIds
14918
+ insertedSelectedElementIds,
14919
+ deletedSelectedElementIds
14916
14920
  );
14917
14921
  const mergedSelectedGroupIds = Delta.mergeObjects(
14918
14922
  appState.selectedGroupIds,
14919
- addedSelectedGroupIds,
14920
- removedSelectedGroupIds
14923
+ insertedSelectedGroupIds,
14924
+ deletedSelectedGroupIds
14921
14925
  );
14922
- const selectedLinearElement = activeLinearElement && nextElements.has(activeLinearElement.id) ? new LinearElementEditor(
14926
+ const selectedLinearElement = insertedSelectedLinearElement && nextElements.has(insertedSelectedLinearElement.elementId) ? new LinearElementEditor(
14923
14927
  nextElements.get(
14924
- activeLinearElement.id
14928
+ insertedSelectedLinearElement.elementId
14925
14929
  ),
14926
14930
  nextElements,
14927
- activeLinearElement.isEditing
14931
+ insertedSelectedLinearElement.isEditing
14928
14932
  ) : null;
14929
14933
  const nextAppState = {
14930
14934
  ...appState,
14931
14935
  ...directlyApplicablePartial,
14932
14936
  selectedElementIds: mergedSelectedElementIds,
14933
14937
  selectedGroupIds: mergedSelectedGroupIds,
14934
- selectedLinearElement: typeof activeLinearElement !== "undefined" ? selectedLinearElement : appState.selectedLinearElement
14938
+ selectedLinearElement: typeof insertedSelectedLinearElement !== "undefined" ? selectedLinearElement : appState.selectedLinearElement
14935
14939
  };
14936
14940
  const constainsVisibleChanges = this.filterInvisibleChanges(
14937
14941
  appState,
@@ -15021,9 +15025,8 @@ var AppStateDelta = class _AppStateDelta {
15021
15025
  nextAppState[key] = null;
15022
15026
  }
15023
15027
  break;
15024
- case "activeLinearElement":
15025
- const appStateKey = _AppStateDelta.convertToAppStateKey(key);
15026
- const nextLinearElement = nextAppState[appStateKey];
15028
+ case "selectedLinearElement":
15029
+ const nextLinearElement = nextAppState[key];
15027
15030
  if (!nextLinearElement) {
15028
15031
  visibleDifferenceFlag.value = true;
15029
15032
  } else {
@@ -15031,7 +15034,7 @@ var AppStateDelta = class _AppStateDelta {
15031
15034
  if (element && !element.isDeleted) {
15032
15035
  visibleDifferenceFlag.value = true;
15033
15036
  } else {
15034
- nextAppState[appStateKey] = null;
15037
+ nextAppState[key] = null;
15035
15038
  }
15036
15039
  }
15037
15040
  break;
@@ -15060,12 +15063,6 @@ var AppStateDelta = class _AppStateDelta {
15060
15063
  }
15061
15064
  return visibleDifferenceFlag.value;
15062
15065
  }
15063
- static convertToAppStateKey(key) {
15064
- switch (key) {
15065
- case "activeLinearElement":
15066
- return "selectedLinearElement";
15067
- }
15068
- }
15069
15066
  static filterSelectedElements(selectedElementIds, elements, visibleDifferenceFlag) {
15070
15067
  const ids = Object.keys(selectedElementIds);
15071
15068
  if (!ids.length) {
@@ -15104,7 +15101,7 @@ var AppStateDelta = class _AppStateDelta {
15104
15101
  editingGroupId,
15105
15102
  selectedGroupIds,
15106
15103
  selectedElementIds,
15107
- activeLinearElement,
15104
+ selectedLinearElement,
15108
15105
  croppingElementId,
15109
15106
  lockedMultiSelections,
15110
15107
  activeLockedId,
@@ -15258,7 +15255,7 @@ var ElementsDelta = class _ElementsDelta {
15258
15255
  for (const prevElement of prevElements.values()) {
15259
15256
  const nextElement = nextElements.get(prevElement.id);
15260
15257
  if (!nextElement) {
15261
- const deleted = { ...prevElement, isDeleted: false };
15258
+ const deleted = { ...prevElement };
15262
15259
  const inserted = {
15263
15260
  isDeleted: true,
15264
15261
  version: prevElement.version + 1,
@@ -15269,7 +15266,9 @@ var ElementsDelta = class _ElementsDelta {
15269
15266
  inserted,
15270
15267
  _ElementsDelta.stripIrrelevantProps
15271
15268
  );
15272
- removed[prevElement.id] = delta;
15269
+ if (!prevElement.isDeleted) {
15270
+ removed[prevElement.id] = delta;
15271
+ }
15273
15272
  }
15274
15273
  }
15275
15274
  for (const nextElement of nextElements.values()) {
@@ -15281,15 +15280,16 @@ var ElementsDelta = class _ElementsDelta {
15281
15280
  versionNonce: randomInteger4()
15282
15281
  };
15283
15282
  const inserted = {
15284
- ...nextElement,
15285
- isDeleted: false
15283
+ ...nextElement
15286
15284
  };
15287
15285
  const delta = Delta.create(
15288
15286
  deleted,
15289
15287
  inserted,
15290
15288
  _ElementsDelta.stripIrrelevantProps
15291
15289
  );
15292
- added[nextElement.id] = delta;
15290
+ if (!nextElement.isDeleted) {
15291
+ added[nextElement.id] = delta;
15292
+ }
15293
15293
  continue;
15294
15294
  }
15295
15295
  if (prevElement.versionNonce !== nextElement.versionNonce) {
@@ -15310,7 +15310,11 @@ var ElementsDelta = class _ElementsDelta {
15310
15310
  }
15311
15311
  continue;
15312
15312
  }
15313
- if (!Delta.isEmpty(delta)) {
15313
+ const strippedDeleted = _ElementsDelta.stripVersionProps(delta.deleted);
15314
+ const strippedInserted = _ElementsDelta.stripVersionProps(
15315
+ delta.inserted
15316
+ );
15317
+ if (Delta.isInnerDifferent(strippedDeleted, strippedInserted, true)) {
15314
15318
  updated[nextElement.id] = delta;
15315
15319
  }
15316
15320
  }
@@ -15388,7 +15392,13 @@ var ElementsDelta = class _ElementsDelta {
15388
15392
  } else {
15389
15393
  latestDelta = delta;
15390
15394
  }
15391
- if (Delta.isInnerDifferent(latestDelta.deleted, latestDelta.inserted)) {
15395
+ const strippedDeleted = _ElementsDelta.stripVersionProps(
15396
+ latestDelta.deleted
15397
+ );
15398
+ const strippedInserted = _ElementsDelta.stripVersionProps(
15399
+ latestDelta.inserted
15400
+ );
15401
+ if (Delta.isInnerDifferent(strippedDeleted, strippedInserted)) {
15392
15402
  modifiedDeltas[id] = latestDelta;
15393
15403
  }
15394
15404
  }
@@ -15402,9 +15412,7 @@ var ElementsDelta = class _ElementsDelta {
15402
15412
  // redistribute the deltas as `isDeleted` could have been updated
15403
15413
  });
15404
15414
  }
15405
- applyTo(elements, snapshot = StoreSnapshot.empty().elements, options = {
15406
- excludedProperties: /* @__PURE__ */ new Set()
15407
- }) {
15415
+ applyTo(elements, snapshot = StoreSnapshot.empty().elements, options) {
15408
15416
  let nextElements = new Map(elements);
15409
15417
  let changedElements;
15410
15418
  const flags = {
@@ -15415,8 +15423,8 @@ var ElementsDelta = class _ElementsDelta {
15415
15423
  const applyDeltas = _ElementsDelta.createApplier(
15416
15424
  nextElements,
15417
15425
  snapshot,
15418
- options,
15419
- flags
15426
+ flags,
15427
+ options
15420
15428
  );
15421
15429
  const addedElements = applyDeltas(this.added);
15422
15430
  const removedElements = applyDeltas(this.removed);
@@ -15441,9 +15449,9 @@ var ElementsDelta = class _ElementsDelta {
15441
15449
  changedElements,
15442
15450
  flags
15443
15451
  );
15444
- const tempScene = new Scene(nextElements);
15445
- _ElementsDelta.redrawTextBoundingBoxes(tempScene, changedElements);
15446
- _ElementsDelta.redrawBoundArrows(tempScene, changedElements);
15452
+ if (!options?.skipRedraw) {
15453
+ _ElementsDelta.redrawElements(nextElements, changedElements);
15454
+ }
15447
15455
  } catch (e) {
15448
15456
  console.error(
15449
15457
  `Couldn't mutate elements after applying elements change`,
@@ -15484,7 +15492,7 @@ var ElementsDelta = class _ElementsDelta {
15484
15492
  }
15485
15493
  return this;
15486
15494
  }
15487
- static createApplier = (nextElements, snapshot, options, flags) => (deltas) => {
15495
+ static createApplier = (nextElements, snapshot, flags, options) => (deltas) => {
15488
15496
  const getElement = _ElementsDelta.createGetter(
15489
15497
  nextElements,
15490
15498
  snapshot,
@@ -15496,8 +15504,8 @@ var ElementsDelta = class _ElementsDelta {
15496
15504
  const newElement2 = _ElementsDelta.applyDelta(
15497
15505
  element,
15498
15506
  delta,
15499
- options,
15500
- flags
15507
+ flags,
15508
+ options
15501
15509
  );
15502
15510
  nextElements.set(newElement2.id, newElement2);
15503
15511
  acc.set(newElement2.id, newElement2);
@@ -15525,13 +15533,13 @@ var ElementsDelta = class _ElementsDelta {
15525
15533
  }
15526
15534
  return element;
15527
15535
  };
15528
- static applyDelta(element, delta, options, flags) {
15536
+ static applyDelta(element, delta, flags, options) {
15529
15537
  const directlyApplicablePartial = {};
15530
15538
  for (const key of Object.keys(delta.inserted)) {
15531
15539
  if (key === "boundElements") {
15532
15540
  continue;
15533
15541
  }
15534
- if (options.excludedProperties.has(key)) {
15542
+ if (options?.excludedProperties?.has(key)) {
15535
15543
  continue;
15536
15544
  }
15537
15545
  const value = delta.inserted[key];
@@ -15559,7 +15567,7 @@ var ElementsDelta = class _ElementsDelta {
15559
15567
  if (!flags.containsZindexDifference) {
15560
15568
  flags.containsZindexDifference = delta.deleted.index !== delta.inserted.index;
15561
15569
  }
15562
- return newElementWith(element, directlyApplicablePartial);
15570
+ return newElementWith(element, directlyApplicablePartial, true);
15563
15571
  }
15564
15572
  /**
15565
15573
  * Check for visible changes regardless of whether they were removed, added or updated.
@@ -15591,17 +15599,20 @@ var ElementsDelta = class _ElementsDelta {
15591
15599
  if (!nextElement) {
15592
15600
  return;
15593
15601
  }
15602
+ const prevElement = prevElements.get(element.id);
15594
15603
  let affectedElement;
15595
- if (prevElements.get(element.id) === nextElement) {
15604
+ if (prevElement === nextElement) {
15596
15605
  affectedElement = newElementWith(
15597
15606
  nextElement,
15598
- updates
15607
+ updates,
15608
+ true
15599
15609
  );
15600
15610
  } else {
15601
15611
  affectedElement = mutateElement(
15602
15612
  nextElement,
15603
15613
  nextElements,
15604
- updates
15614
+ updates,
15615
+ { force: true }
15605
15616
  );
15606
15617
  }
15607
15618
  nextAffectedElements.set(affectedElement.id, affectedElement);
@@ -15665,6 +15676,20 @@ var ElementsDelta = class _ElementsDelta {
15665
15676
  );
15666
15677
  BindableElement.rebindAffected(nextElements, nextElement(), updater);
15667
15678
  }
15679
+ static redrawElements(nextElements, changedElements) {
15680
+ try {
15681
+ const tempScene = new Scene(nextElements, { skipValidation: true });
15682
+ _ElementsDelta.redrawTextBoundingBoxes(tempScene, changedElements);
15683
+ _ElementsDelta.redrawBoundArrows(tempScene, changedElements);
15684
+ } catch (e) {
15685
+ console.error(`Couldn't redraw elements`, e);
15686
+ if (isTestEnv8() || isDevEnv7()) {
15687
+ throw e;
15688
+ }
15689
+ } finally {
15690
+ return nextElements;
15691
+ }
15692
+ }
15668
15693
  static redrawTextBoundingBoxes(scene, changed) {
15669
15694
  const elements = scene.getNonDeletedElementsMap();
15670
15695
  const boxesToRedraw = /* @__PURE__ */ new Map();
@@ -15753,6 +15778,10 @@ var ElementsDelta = class _ElementsDelta {
15753
15778
  const { id, updated, ...strippedPartial } = partial;
15754
15779
  return strippedPartial;
15755
15780
  }
15781
+ static stripVersionProps(partial) {
15782
+ const { version, versionNonce, ...strippedPartial } = partial;
15783
+ return strippedPartial;
15784
+ }
15756
15785
  };
15757
15786
 
15758
15787
  // src/distribute.ts