@excalidraw/element 0.18.0-de715913e → 0.18.0-f5d54ac5a

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
@@ -15260,9 +15260,13 @@ var ElementsDelta = class _ElementsDelta {
15260
15260
  Number.isInteger(deleted.version) && Number.isInteger(inserted.version) && // versions should be positive, zero included
15261
15261
  deleted.version >= 0 && inserted.version >= 0 && // versions should never be the same
15262
15262
  deleted.version !== inserted.version);
15263
+ static satisfiesUniqueInvariants = (elementsDelta, id) => {
15264
+ const { added, removed, updated } = elementsDelta;
15265
+ return [added[id], removed[id], updated[id]].filter(Boolean).length === 1;
15266
+ };
15263
15267
  static validate(elementsDelta, type, satifiesSpecialInvariants) {
15264
15268
  for (const [id, delta] of Object.entries(elementsDelta[type])) {
15265
- if (!this.satisfiesCommmonInvariants(delta) || !satifiesSpecialInvariants(delta)) {
15269
+ if (!this.satisfiesCommmonInvariants(delta) || !this.satisfiesUniqueInvariants(elementsDelta, id) || !satifiesSpecialInvariants(delta)) {
15266
15270
  console.error(
15267
15271
  `Broken invariant for "${type}" delta, element "${id}", delta:`,
15268
15272
  delta
@@ -15504,7 +15508,7 @@ var ElementsDelta = class _ElementsDelta {
15504
15508
  }
15505
15509
  squash(delta) {
15506
15510
  const { added, removed, updated } = delta;
15507
- function mergeBoundElements(prevDelta, nextDelta) {
15511
+ const mergeBoundElements = (prevDelta, nextDelta) => {
15508
15512
  const mergedDeletedBoundElements = Delta.mergeArrays(
15509
15513
  prevDelta.deleted.boundElements ?? [],
15510
15514
  nextDelta.deleted.boundElements ?? [],
@@ -15525,34 +15529,50 @@ var ElementsDelta = class _ElementsDelta {
15525
15529
  boundElements: mergedInsertedBoundElements
15526
15530
  }
15527
15531
  );
15528
- }
15532
+ };
15529
15533
  for (const [id, nextDelta] of Object.entries(added)) {
15530
- const prevDelta = this.added[id];
15534
+ const prevDelta = this.added[id] ?? this.removed[id] ?? this.updated[id];
15531
15535
  if (!prevDelta) {
15532
15536
  this.added[id] = nextDelta;
15533
15537
  } else {
15534
15538
  const mergedDelta = mergeBoundElements(prevDelta, nextDelta);
15539
+ delete this.removed[id];
15540
+ delete this.updated[id];
15535
15541
  this.added[id] = Delta.merge(prevDelta, nextDelta, mergedDelta);
15536
15542
  }
15537
15543
  }
15538
15544
  for (const [id, nextDelta] of Object.entries(removed)) {
15539
- const prevDelta = this.removed[id];
15545
+ const prevDelta = this.added[id] ?? this.removed[id] ?? this.updated[id];
15540
15546
  if (!prevDelta) {
15541
15547
  this.removed[id] = nextDelta;
15542
15548
  } else {
15543
15549
  const mergedDelta = mergeBoundElements(prevDelta, nextDelta);
15550
+ delete this.added[id];
15551
+ delete this.updated[id];
15544
15552
  this.removed[id] = Delta.merge(prevDelta, nextDelta, mergedDelta);
15545
15553
  }
15546
15554
  }
15547
15555
  for (const [id, nextDelta] of Object.entries(updated)) {
15548
- const prevDelta = this.updated[id];
15556
+ const prevDelta = this.added[id] ?? this.removed[id] ?? this.updated[id];
15549
15557
  if (!prevDelta) {
15550
15558
  this.updated[id] = nextDelta;
15551
15559
  } else {
15552
15560
  const mergedDelta = mergeBoundElements(prevDelta, nextDelta);
15553
- this.updated[id] = Delta.merge(prevDelta, nextDelta, mergedDelta);
15561
+ const updatedDelta = Delta.merge(prevDelta, nextDelta, mergedDelta);
15562
+ if (prevDelta === this.added[id]) {
15563
+ this.added[id] = updatedDelta;
15564
+ } else if (prevDelta === this.removed[id]) {
15565
+ this.removed[id] = updatedDelta;
15566
+ } else {
15567
+ this.updated[id] = updatedDelta;
15568
+ }
15554
15569
  }
15555
15570
  }
15571
+ if (isTestEnv8() || isDevEnv7()) {
15572
+ _ElementsDelta.validate(this, "added", _ElementsDelta.satisfiesAddition);
15573
+ _ElementsDelta.validate(this, "removed", _ElementsDelta.satisfiesRemoval);
15574
+ _ElementsDelta.validate(this, "updated", _ElementsDelta.satisfiesUpdate);
15575
+ }
15556
15576
  return this;
15557
15577
  }
15558
15578
  static createApplier = (prevElements, nextElements, snapshot, flags, options) => (deltas) => {