@excalidraw/element 0.18.0-de715913e → 0.18.0-f29e9df
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 +99 -58
- package/dist/dev/index.js.map +2 -2
- package/dist/prod/index.js +14 -14
- package/dist/types/common/src/constants.d.ts +1 -0
- package/dist/types/element/src/delta.d.ts +2 -2
- package/dist/types/element/src/store.d.ts +3 -2
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +15 -1
- package/dist/types/excalidraw/components/App.d.ts +6 -2
- package/dist/types/excalidraw/components/shapes.d.ts +129 -1
- package/dist/types/excalidraw/types.d.ts +2 -0
- package/package.json +3 -3
package/dist/dev/index.js
CHANGED
|
@@ -13495,7 +13495,7 @@ var EphemeralIncrement = class extends StoreIncrement {
|
|
|
13495
13495
|
this.change = change;
|
|
13496
13496
|
}
|
|
13497
13497
|
};
|
|
13498
|
-
var StoreDelta = class {
|
|
13498
|
+
var StoreDelta = class _StoreDelta {
|
|
13499
13499
|
constructor(id, elements, appState) {
|
|
13500
13500
|
this.id = id;
|
|
13501
13501
|
this.elements = elements;
|
|
@@ -13541,12 +13541,15 @@ var StoreDelta = class {
|
|
|
13541
13541
|
return new this(id, elements, appState);
|
|
13542
13542
|
}
|
|
13543
13543
|
/**
|
|
13544
|
-
* Squash the passed
|
|
13544
|
+
* Squash the passed deltas into the aggregated delta instance.
|
|
13545
13545
|
*/
|
|
13546
|
-
squash(
|
|
13547
|
-
|
|
13548
|
-
|
|
13549
|
-
|
|
13546
|
+
static squash(...deltas) {
|
|
13547
|
+
const aggregatedDelta = _StoreDelta.empty();
|
|
13548
|
+
for (const delta of deltas) {
|
|
13549
|
+
aggregatedDelta.elements.squash(delta.elements);
|
|
13550
|
+
aggregatedDelta.appState.squash(delta.appState);
|
|
13551
|
+
}
|
|
13552
|
+
return aggregatedDelta;
|
|
13550
13553
|
}
|
|
13551
13554
|
/**
|
|
13552
13555
|
* Inverse store delta, creates new instance of `StoreDelta`.
|
|
@@ -13583,6 +13586,9 @@ var StoreDelta = class {
|
|
|
13583
13586
|
}
|
|
13584
13587
|
);
|
|
13585
13588
|
}
|
|
13589
|
+
static empty() {
|
|
13590
|
+
return _StoreDelta.create(ElementsDelta.empty(), AppStateDelta.empty());
|
|
13591
|
+
}
|
|
13586
13592
|
isEmpty() {
|
|
13587
13593
|
return this.elements.isEmpty() && this.appState.isEmpty();
|
|
13588
13594
|
}
|
|
@@ -14651,18 +14657,18 @@ var Delta = class _Delta {
|
|
|
14651
14657
|
/**
|
|
14652
14658
|
* Merges two deltas into a new one.
|
|
14653
14659
|
*/
|
|
14654
|
-
static merge(delta1, delta2, delta3) {
|
|
14660
|
+
static merge(delta1, delta2, delta3 = _Delta.empty()) {
|
|
14655
14661
|
return _Delta.create(
|
|
14656
|
-
{ ...delta1.deleted, ...delta2.deleted, ...delta3
|
|
14657
|
-
{ ...delta1.inserted, ...delta2.inserted, ...delta3
|
|
14662
|
+
{ ...delta1.deleted, ...delta2.deleted, ...delta3.deleted },
|
|
14663
|
+
{ ...delta1.inserted, ...delta2.inserted, ...delta3.inserted }
|
|
14658
14664
|
);
|
|
14659
14665
|
}
|
|
14660
14666
|
/**
|
|
14661
14667
|
* Merges deleted and inserted object partials.
|
|
14662
14668
|
*/
|
|
14663
|
-
static mergeObjects(prev, added, removed) {
|
|
14669
|
+
static mergeObjects(prev, added, removed = {}) {
|
|
14664
14670
|
const cloned = { ...prev };
|
|
14665
|
-
for (const key of Object.keys(removed
|
|
14671
|
+
for (const key of Object.keys(removed)) {
|
|
14666
14672
|
delete cloned[key];
|
|
14667
14673
|
}
|
|
14668
14674
|
return { ...cloned, ...added };
|
|
@@ -14906,6 +14912,9 @@ var AppStateDelta = class _AppStateDelta {
|
|
|
14906
14912
|
return new _AppStateDelta(inversedDelta);
|
|
14907
14913
|
}
|
|
14908
14914
|
squash(delta) {
|
|
14915
|
+
if (delta.isEmpty()) {
|
|
14916
|
+
return this;
|
|
14917
|
+
}
|
|
14909
14918
|
const mergedDeletedSelectedElementIds = Delta.mergeObjects(
|
|
14910
14919
|
this.delta.deleted.selectedElementIds ?? {},
|
|
14911
14920
|
delta.delta.deleted.selectedElementIds ?? {}
|
|
@@ -14914,36 +14923,54 @@ var AppStateDelta = class _AppStateDelta {
|
|
|
14914
14923
|
this.delta.inserted.selectedElementIds ?? {},
|
|
14915
14924
|
delta.delta.inserted.selectedElementIds ?? {}
|
|
14916
14925
|
);
|
|
14926
|
+
const mergedDeletedSelectedGroupIds = Delta.mergeObjects(
|
|
14927
|
+
this.delta.deleted.selectedGroupIds ?? {},
|
|
14928
|
+
delta.delta.deleted.selectedGroupIds ?? {}
|
|
14929
|
+
);
|
|
14917
14930
|
const mergedInsertedSelectedGroupIds = Delta.mergeObjects(
|
|
14918
14931
|
this.delta.inserted.selectedGroupIds ?? {},
|
|
14919
14932
|
delta.delta.inserted.selectedGroupIds ?? {}
|
|
14920
14933
|
);
|
|
14921
|
-
const
|
|
14922
|
-
this.delta.deleted.
|
|
14923
|
-
delta.delta.deleted.
|
|
14934
|
+
const mergedDeletedLockedMultiSelections = Delta.mergeObjects(
|
|
14935
|
+
this.delta.deleted.lockedMultiSelections ?? {},
|
|
14936
|
+
delta.delta.deleted.lockedMultiSelections ?? {}
|
|
14924
14937
|
);
|
|
14925
|
-
const
|
|
14926
|
-
{
|
|
14927
|
-
|
|
14928
|
-
|
|
14929
|
-
|
|
14930
|
-
|
|
14931
|
-
|
|
14932
|
-
|
|
14933
|
-
|
|
14938
|
+
const mergedInsertedLockedMultiSelections = Delta.mergeObjects(
|
|
14939
|
+
this.delta.inserted.lockedMultiSelections ?? {},
|
|
14940
|
+
delta.delta.inserted.lockedMultiSelections ?? {}
|
|
14941
|
+
);
|
|
14942
|
+
const mergedInserted = {};
|
|
14943
|
+
const mergedDeleted = {};
|
|
14944
|
+
if (Object.keys(mergedDeletedSelectedElementIds).length || Object.keys(mergedInsertedSelectedElementIds).length) {
|
|
14945
|
+
mergedDeleted.selectedElementIds = mergedDeletedSelectedElementIds;
|
|
14946
|
+
mergedInserted.selectedElementIds = mergedInsertedSelectedElementIds;
|
|
14947
|
+
}
|
|
14948
|
+
if (Object.keys(mergedDeletedSelectedGroupIds).length || Object.keys(mergedInsertedSelectedGroupIds).length) {
|
|
14949
|
+
mergedDeleted.selectedGroupIds = mergedDeletedSelectedGroupIds;
|
|
14950
|
+
mergedInserted.selectedGroupIds = mergedInsertedSelectedGroupIds;
|
|
14951
|
+
}
|
|
14952
|
+
if (Object.keys(mergedDeletedLockedMultiSelections).length || Object.keys(mergedInsertedLockedMultiSelections).length) {
|
|
14953
|
+
mergedDeleted.lockedMultiSelections = mergedDeletedLockedMultiSelections;
|
|
14954
|
+
mergedInserted.lockedMultiSelections = mergedInsertedLockedMultiSelections;
|
|
14955
|
+
}
|
|
14956
|
+
this.delta = Delta.merge(
|
|
14957
|
+
this.delta,
|
|
14958
|
+
delta.delta,
|
|
14959
|
+
Delta.create(mergedDeleted, mergedInserted)
|
|
14934
14960
|
);
|
|
14935
|
-
this.delta = Delta.merge(this.delta, delta.delta, mergedDelta);
|
|
14936
14961
|
return this;
|
|
14937
14962
|
}
|
|
14938
14963
|
applyTo(appState, nextElements) {
|
|
14939
14964
|
try {
|
|
14940
14965
|
const {
|
|
14941
14966
|
selectedElementIds: deletedSelectedElementIds = {},
|
|
14942
|
-
selectedGroupIds: deletedSelectedGroupIds = {}
|
|
14967
|
+
selectedGroupIds: deletedSelectedGroupIds = {},
|
|
14968
|
+
lockedMultiSelections: deletedLockedMultiSelections = {}
|
|
14943
14969
|
} = this.delta.deleted;
|
|
14944
14970
|
const {
|
|
14945
14971
|
selectedElementIds: insertedSelectedElementIds = {},
|
|
14946
14972
|
selectedGroupIds: insertedSelectedGroupIds = {},
|
|
14973
|
+
lockedMultiSelections: insertedLockedMultiSelections = {},
|
|
14947
14974
|
selectedLinearElement: insertedSelectedLinearElement,
|
|
14948
14975
|
...directlyApplicablePartial
|
|
14949
14976
|
} = this.delta.inserted;
|
|
@@ -14957,6 +14984,11 @@ var AppStateDelta = class _AppStateDelta {
|
|
|
14957
14984
|
insertedSelectedGroupIds,
|
|
14958
14985
|
deletedSelectedGroupIds
|
|
14959
14986
|
);
|
|
14987
|
+
const mergedLockedMultiSelections = Delta.mergeObjects(
|
|
14988
|
+
appState.lockedMultiSelections,
|
|
14989
|
+
insertedLockedMultiSelections,
|
|
14990
|
+
deletedLockedMultiSelections
|
|
14991
|
+
);
|
|
14960
14992
|
const selectedLinearElement = insertedSelectedLinearElement && nextElements.has(insertedSelectedLinearElement.elementId) ? new LinearElementEditor(
|
|
14961
14993
|
nextElements.get(
|
|
14962
14994
|
insertedSelectedLinearElement.elementId
|
|
@@ -14969,6 +15001,7 @@ var AppStateDelta = class _AppStateDelta {
|
|
|
14969
15001
|
...directlyApplicablePartial,
|
|
14970
15002
|
selectedElementIds: mergedSelectedElementIds,
|
|
14971
15003
|
selectedGroupIds: mergedSelectedGroupIds,
|
|
15004
|
+
lockedMultiSelections: mergedLockedMultiSelections,
|
|
14972
15005
|
selectedLinearElement: typeof insertedSelectedLinearElement !== "undefined" ? selectedLinearElement : appState.selectedLinearElement
|
|
14973
15006
|
};
|
|
14974
15007
|
const constainsVisibleChanges = this.filterInvisibleChanges(
|
|
@@ -15172,12 +15205,6 @@ var AppStateDelta = class _AppStateDelta {
|
|
|
15172
15205
|
"lockedMultiSelections",
|
|
15173
15206
|
(prevValue) => prevValue ?? {}
|
|
15174
15207
|
);
|
|
15175
|
-
Delta.diffObjects(
|
|
15176
|
-
deleted,
|
|
15177
|
-
inserted,
|
|
15178
|
-
"activeLockedId",
|
|
15179
|
-
(prevValue) => prevValue ?? null
|
|
15180
|
-
);
|
|
15181
15208
|
} catch (e) {
|
|
15182
15209
|
console.error(`Couldn't postprocess appstate change deltas.`);
|
|
15183
15210
|
if (isTestEnv8() || isDevEnv7()) {
|
|
@@ -15256,13 +15283,17 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15256
15283
|
static satisfiesCommmonInvariants = ({
|
|
15257
15284
|
deleted,
|
|
15258
15285
|
inserted
|
|
15259
|
-
}) =>
|
|
15260
|
-
Number.isInteger(deleted.version) && Number.isInteger(inserted.version) && // versions should be positive, zero included
|
|
15286
|
+
}) => !!// versions are required integers
|
|
15287
|
+
(Number.isInteger(deleted.version) && Number.isInteger(inserted.version) && // versions should be positive, zero included
|
|
15261
15288
|
deleted.version >= 0 && inserted.version >= 0 && // versions should never be the same
|
|
15262
15289
|
deleted.version !== inserted.version);
|
|
15290
|
+
static satisfiesUniqueInvariants = (elementsDelta, id) => {
|
|
15291
|
+
const { added, removed, updated } = elementsDelta;
|
|
15292
|
+
return [added[id], removed[id], updated[id]].filter(Boolean).length === 1;
|
|
15293
|
+
};
|
|
15263
15294
|
static validate(elementsDelta, type, satifiesSpecialInvariants) {
|
|
15264
15295
|
for (const [id, delta] of Object.entries(elementsDelta[type])) {
|
|
15265
|
-
if (!this.satisfiesCommmonInvariants(delta) || !satifiesSpecialInvariants(delta)) {
|
|
15296
|
+
if (!this.satisfiesCommmonInvariants(delta) || !this.satisfiesUniqueInvariants(elementsDelta, id) || !satifiesSpecialInvariants(delta)) {
|
|
15266
15297
|
console.error(
|
|
15267
15298
|
`Broken invariant for "${type}" delta, element "${id}", delta:`,
|
|
15268
15299
|
delta
|
|
@@ -15302,6 +15333,8 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15302
15333
|
);
|
|
15303
15334
|
if (!prevElement.isDeleted) {
|
|
15304
15335
|
removed[prevElement.id] = delta;
|
|
15336
|
+
} else {
|
|
15337
|
+
updated[prevElement.id] = delta;
|
|
15305
15338
|
}
|
|
15306
15339
|
}
|
|
15307
15340
|
}
|
|
@@ -15323,6 +15356,8 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15323
15356
|
);
|
|
15324
15357
|
if (!nextElement.isDeleted) {
|
|
15325
15358
|
added[nextElement.id] = delta;
|
|
15359
|
+
} else {
|
|
15360
|
+
updated[nextElement.id] = delta;
|
|
15326
15361
|
}
|
|
15327
15362
|
continue;
|
|
15328
15363
|
}
|
|
@@ -15344,13 +15379,7 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15344
15379
|
}
|
|
15345
15380
|
continue;
|
|
15346
15381
|
}
|
|
15347
|
-
|
|
15348
|
-
const strippedInserted = _ElementsDelta.stripVersionProps(
|
|
15349
|
-
delta.inserted
|
|
15350
|
-
);
|
|
15351
|
-
if (Delta.isInnerDifferent(strippedDeleted, strippedInserted, true)) {
|
|
15352
|
-
updated[nextElement.id] = delta;
|
|
15353
|
-
}
|
|
15382
|
+
updated[nextElement.id] = delta;
|
|
15354
15383
|
}
|
|
15355
15384
|
}
|
|
15356
15385
|
return _ElementsDelta.create(added, removed, updated);
|
|
@@ -15426,13 +15455,7 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15426
15455
|
} else {
|
|
15427
15456
|
latestDelta = delta;
|
|
15428
15457
|
}
|
|
15429
|
-
|
|
15430
|
-
latestDelta.deleted
|
|
15431
|
-
);
|
|
15432
|
-
const strippedInserted = _ElementsDelta.stripVersionProps(
|
|
15433
|
-
latestDelta.inserted
|
|
15434
|
-
);
|
|
15435
|
-
if (Delta.isInnerDifferent(strippedDeleted, strippedInserted)) {
|
|
15458
|
+
if (Delta.isInnerDifferent(latestDelta.deleted, latestDelta.inserted)) {
|
|
15436
15459
|
modifiedDeltas[id] = latestDelta;
|
|
15437
15460
|
}
|
|
15438
15461
|
}
|
|
@@ -15503,8 +15526,11 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15503
15526
|
}
|
|
15504
15527
|
}
|
|
15505
15528
|
squash(delta) {
|
|
15529
|
+
if (delta.isEmpty()) {
|
|
15530
|
+
return this;
|
|
15531
|
+
}
|
|
15506
15532
|
const { added, removed, updated } = delta;
|
|
15507
|
-
|
|
15533
|
+
const mergeBoundElements = (prevDelta, nextDelta) => {
|
|
15508
15534
|
const mergedDeletedBoundElements = Delta.mergeArrays(
|
|
15509
15535
|
prevDelta.deleted.boundElements ?? [],
|
|
15510
15536
|
nextDelta.deleted.boundElements ?? [],
|
|
@@ -15517,6 +15543,9 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15517
15543
|
void 0,
|
|
15518
15544
|
(x) => x.id
|
|
15519
15545
|
) ?? [];
|
|
15546
|
+
if (!mergedDeletedBoundElements.length && !mergedInsertedBoundElements.length) {
|
|
15547
|
+
return;
|
|
15548
|
+
}
|
|
15520
15549
|
return Delta.create(
|
|
15521
15550
|
{
|
|
15522
15551
|
boundElements: mergedDeletedBoundElements
|
|
@@ -15525,34 +15554,50 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15525
15554
|
boundElements: mergedInsertedBoundElements
|
|
15526
15555
|
}
|
|
15527
15556
|
);
|
|
15528
|
-
}
|
|
15557
|
+
};
|
|
15529
15558
|
for (const [id, nextDelta] of Object.entries(added)) {
|
|
15530
|
-
const prevDelta = this.added[id];
|
|
15559
|
+
const prevDelta = this.added[id] ?? this.removed[id] ?? this.updated[id];
|
|
15531
15560
|
if (!prevDelta) {
|
|
15532
15561
|
this.added[id] = nextDelta;
|
|
15533
15562
|
} else {
|
|
15534
15563
|
const mergedDelta = mergeBoundElements(prevDelta, nextDelta);
|
|
15564
|
+
delete this.removed[id];
|
|
15565
|
+
delete this.updated[id];
|
|
15535
15566
|
this.added[id] = Delta.merge(prevDelta, nextDelta, mergedDelta);
|
|
15536
15567
|
}
|
|
15537
15568
|
}
|
|
15538
15569
|
for (const [id, nextDelta] of Object.entries(removed)) {
|
|
15539
|
-
const prevDelta = this.removed[id];
|
|
15570
|
+
const prevDelta = this.added[id] ?? this.removed[id] ?? this.updated[id];
|
|
15540
15571
|
if (!prevDelta) {
|
|
15541
15572
|
this.removed[id] = nextDelta;
|
|
15542
15573
|
} else {
|
|
15543
15574
|
const mergedDelta = mergeBoundElements(prevDelta, nextDelta);
|
|
15575
|
+
delete this.added[id];
|
|
15576
|
+
delete this.updated[id];
|
|
15544
15577
|
this.removed[id] = Delta.merge(prevDelta, nextDelta, mergedDelta);
|
|
15545
15578
|
}
|
|
15546
15579
|
}
|
|
15547
15580
|
for (const [id, nextDelta] of Object.entries(updated)) {
|
|
15548
|
-
const prevDelta = this.updated[id];
|
|
15581
|
+
const prevDelta = this.added[id] ?? this.removed[id] ?? this.updated[id];
|
|
15549
15582
|
if (!prevDelta) {
|
|
15550
15583
|
this.updated[id] = nextDelta;
|
|
15551
15584
|
} else {
|
|
15552
15585
|
const mergedDelta = mergeBoundElements(prevDelta, nextDelta);
|
|
15553
|
-
|
|
15586
|
+
const updatedDelta = Delta.merge(prevDelta, nextDelta, mergedDelta);
|
|
15587
|
+
if (prevDelta === this.added[id]) {
|
|
15588
|
+
this.added[id] = updatedDelta;
|
|
15589
|
+
} else if (prevDelta === this.removed[id]) {
|
|
15590
|
+
this.removed[id] = updatedDelta;
|
|
15591
|
+
} else {
|
|
15592
|
+
this.updated[id] = updatedDelta;
|
|
15593
|
+
}
|
|
15554
15594
|
}
|
|
15555
15595
|
}
|
|
15596
|
+
if (isTestEnv8() || isDevEnv7()) {
|
|
15597
|
+
_ElementsDelta.validate(this, "added", _ElementsDelta.satisfiesAddition);
|
|
15598
|
+
_ElementsDelta.validate(this, "removed", _ElementsDelta.satisfiesRemoval);
|
|
15599
|
+
_ElementsDelta.validate(this, "updated", _ElementsDelta.satisfiesUpdate);
|
|
15600
|
+
}
|
|
15556
15601
|
return this;
|
|
15557
15602
|
}
|
|
15558
15603
|
static createApplier = (prevElements, nextElements, snapshot, flags, options) => (deltas) => {
|
|
@@ -15851,10 +15896,6 @@ var ElementsDelta = class _ElementsDelta {
|
|
|
15851
15896
|
const { id, updated, ...strippedPartial } = partial;
|
|
15852
15897
|
return strippedPartial;
|
|
15853
15898
|
}
|
|
15854
|
-
static stripVersionProps(partial) {
|
|
15855
|
-
const { version, versionNonce, ...strippedPartial } = partial;
|
|
15856
|
-
return strippedPartial;
|
|
15857
|
-
}
|
|
15858
15899
|
};
|
|
15859
15900
|
|
|
15860
15901
|
// src/distribute.ts
|