@excalidraw/element 0.18.0-b16b6f8fd → 0.18.0-c65b684e9

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
@@ -14638,6 +14638,15 @@ var Delta = class _Delta {
14638
14638
  static isEmpty(delta) {
14639
14639
  return !Object.keys(delta.deleted).length && !Object.keys(delta.inserted).length;
14640
14640
  }
14641
+ /**
14642
+ * Merges two deltas into a new one.
14643
+ */
14644
+ static merge(delta1, delta2) {
14645
+ return _Delta.create(
14646
+ { ...delta1.deleted, ...delta2.deleted },
14647
+ { ...delta1.inserted, ...delta2.inserted }
14648
+ );
14649
+ }
14641
14650
  /**
14642
14651
  * Merges deleted and inserted object partials.
14643
14652
  */
@@ -14883,6 +14892,10 @@ var AppStateDelta = class _AppStateDelta {
14883
14892
  const inversedDelta = Delta.create(this.delta.inserted, this.delta.deleted);
14884
14893
  return new _AppStateDelta(inversedDelta);
14885
14894
  }
14895
+ squash(delta) {
14896
+ this.delta = Delta.merge(this.delta, delta.delta);
14897
+ return this;
14898
+ }
14886
14899
  applyTo(appState, nextElements) {
14887
14900
  try {
14888
14901
  const {
@@ -15476,6 +15489,34 @@ var ElementsDelta = class _ElementsDelta {
15476
15489
  return [nextElements, flags.containsVisibleDifference];
15477
15490
  }
15478
15491
  }
15492
+ squash(delta) {
15493
+ const { added, removed, updated } = delta;
15494
+ for (const [id, nextDelta] of Object.entries(added)) {
15495
+ const prevDelta = this.added[id];
15496
+ if (!prevDelta) {
15497
+ this.added[id] = nextDelta;
15498
+ } else {
15499
+ this.added[id] = Delta.merge(prevDelta, nextDelta);
15500
+ }
15501
+ }
15502
+ for (const [id, nextDelta] of Object.entries(removed)) {
15503
+ const prevDelta = this.removed[id];
15504
+ if (!prevDelta) {
15505
+ this.removed[id] = nextDelta;
15506
+ } else {
15507
+ this.removed[id] = Delta.merge(prevDelta, nextDelta);
15508
+ }
15509
+ }
15510
+ for (const [id, nextDelta] of Object.entries(updated)) {
15511
+ const prevDelta = this.updated[id];
15512
+ if (!prevDelta) {
15513
+ this.updated[id] = nextDelta;
15514
+ } else {
15515
+ this.updated[id] = Delta.merge(prevDelta, nextDelta);
15516
+ }
15517
+ }
15518
+ return this;
15519
+ }
15479
15520
  static createApplier = (nextElements, snapshot, options, flags) => (deltas) => {
15480
15521
  const getElement = _ElementsDelta.createGetter(
15481
15522
  nextElements,
@@ -15619,31 +15660,10 @@ var ElementsDelta = class _ElementsDelta {
15619
15660
  const prevAffectedElements = new Map(
15620
15661
  Array.from(prevElements).filter(([id]) => nextAffectedElements.has(id))
15621
15662
  );
15622
- const { added, removed, updated } = _ElementsDelta.calculate(
15623
- prevAffectedElements,
15624
- nextAffectedElements
15663
+ this.squash(
15664
+ // technically we could do better here if perf. would become an issue
15665
+ _ElementsDelta.calculate(prevAffectedElements, nextAffectedElements)
15625
15666
  );
15626
- for (const [id, delta] of Object.entries(added)) {
15627
- this.added[id] = {
15628
- // merge with the existing delta, if exists
15629
- ...this.added[id],
15630
- ...delta
15631
- };
15632
- }
15633
- for (const [id, delta] of Object.entries(removed)) {
15634
- this.removed[id] = {
15635
- // merge with the existing delta, if exists
15636
- ...this.removed[id],
15637
- ...delta
15638
- };
15639
- }
15640
- for (const [id, delta] of Object.entries(updated)) {
15641
- this.updated[id] = {
15642
- // merge with the existing delta, if exists
15643
- ...this.updated[id],
15644
- ...delta
15645
- };
15646
- }
15647
15667
  return nextAffectedElements;
15648
15668
  }
15649
15669
  /**