@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 +93 -64
- package/dist/dev/index.js.map +2 -2
- package/dist/prod/index.js +11 -11
- package/dist/types/element/src/Scene.d.ts +6 -2
- package/dist/types/element/src/delta.d.ts +6 -3
- package/dist/types/element/src/mutateElement.d.ts +1 -0
- package/dist/types/element/src/store.d.ts +1 -1
- package/dist/types/excalidraw/components/App.d.ts +5 -4
- package/dist/types/excalidraw/data/restore.d.ts +6 -1
- package/dist/types/excalidraw/index.d.ts +1 -1
- package/dist/types/excalidraw/types.d.ts +5 -3
- package/package.json +3 -3
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13836
|
-
|
|
13837
|
-
isEditing: !!selectedLinearElement.isEditing
|
|
13838
|
-
} :
|
|
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
|
-
|
|
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:
|
|
14904
|
-
selectedGroupIds:
|
|
14907
|
+
selectedElementIds: deletedSelectedElementIds = {},
|
|
14908
|
+
selectedGroupIds: deletedSelectedGroupIds = {}
|
|
14905
14909
|
} = this.delta.deleted;
|
|
14906
14910
|
const {
|
|
14907
|
-
selectedElementIds:
|
|
14908
|
-
selectedGroupIds:
|
|
14909
|
-
|
|
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
|
-
|
|
14915
|
-
|
|
14918
|
+
insertedSelectedElementIds,
|
|
14919
|
+
deletedSelectedElementIds
|
|
14916
14920
|
);
|
|
14917
14921
|
const mergedSelectedGroupIds = Delta.mergeObjects(
|
|
14918
14922
|
appState.selectedGroupIds,
|
|
14919
|
-
|
|
14920
|
-
|
|
14923
|
+
insertedSelectedGroupIds,
|
|
14924
|
+
deletedSelectedGroupIds
|
|
14921
14925
|
);
|
|
14922
|
-
const selectedLinearElement =
|
|
14926
|
+
const selectedLinearElement = insertedSelectedLinearElement && nextElements.has(insertedSelectedLinearElement.elementId) ? new LinearElementEditor(
|
|
14923
14927
|
nextElements.get(
|
|
14924
|
-
|
|
14928
|
+
insertedSelectedLinearElement.elementId
|
|
14925
14929
|
),
|
|
14926
14930
|
nextElements,
|
|
14927
|
-
|
|
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
|
|
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 "
|
|
15025
|
-
const
|
|
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[
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
15419
|
-
|
|
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
|
-
|
|
15445
|
-
|
|
15446
|
-
|
|
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,
|
|
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
|
-
|
|
15500
|
-
|
|
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,
|
|
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
|
|
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 (
|
|
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
|