@excalidraw/excalidraw 0.17.1-c0b80a0 → 0.17.1-c329470
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/browser/dev/excalidraw-assets-dev/{chunk-JGDL4H2X.js → chunk-3DLVY5XU.js} +8272 -6864
- package/dist/browser/dev/excalidraw-assets-dev/chunk-3DLVY5XU.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-V7NFEZA6.js → chunk-NOAEU4NM.js} +9 -2
- package/dist/browser/dev/excalidraw-assets-dev/chunk-NOAEU4NM.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{en-ZSVWGT55.js → en-7IBTMWBG.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{image-RJG3J34Y.js → image-N5AC7SEK.js} +2 -6
- package/dist/browser/dev/index.css +85 -50
- package/dist/browser/dev/index.css.map +3 -3
- package/dist/browser/dev/index.js +4375 -3766
- package/dist/browser/dev/index.js.map +4 -4
- package/dist/browser/prod/excalidraw-assets/{chunk-LDVEIXGO.js → chunk-7CSIPVOW.js} +2 -2
- package/dist/browser/prod/excalidraw-assets/chunk-TX3BU7T2.js +47 -0
- package/dist/browser/prod/excalidraw-assets/{en-UPNEHLDS.js → en-LOGQBETY.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/image-3V4U7GZE.js +1 -0
- package/dist/browser/prod/index.css +1 -1
- package/dist/browser/prod/index.js +40 -40
- package/dist/dev/index.css +85 -50
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +8688 -6706
- package/dist/dev/index.js.map +4 -4
- package/dist/{prod/locales/en-ZXYG7GCR.json → dev/locales/en-V6KXFSCK.json} +8 -1
- package/dist/excalidraw/actions/actionAlign.d.ts +7 -6
- package/dist/excalidraw/actions/actionAlign.js +14 -14
- package/dist/excalidraw/actions/actionClipboard.d.ts +7 -3
- package/dist/excalidraw/actions/actionDeleteSelected.d.ts +7 -3
- package/dist/excalidraw/actions/actionDeleteSelected.js +103 -34
- package/dist/excalidraw/actions/actionDuplicateSelection.js +105 -95
- package/dist/excalidraw/actions/actionFlip.js +16 -7
- package/dist/excalidraw/actions/actionFrame.d.ts +493 -0
- package/dist/excalidraw/actions/actionFrame.js +45 -2
- package/dist/excalidraw/actions/actionGroup.js +6 -4
- package/dist/excalidraw/actions/actionProperties.js +145 -116
- package/dist/excalidraw/actions/actionSelectAll.js +4 -3
- package/dist/excalidraw/actions/shortcuts.d.ts +1 -1
- package/dist/excalidraw/actions/shortcuts.js +1 -0
- package/dist/excalidraw/actions/types.d.ts +1 -1
- package/dist/excalidraw/align.d.ts +2 -1
- package/dist/excalidraw/align.js +15 -6
- package/dist/excalidraw/clipboard.d.ts +27 -5
- package/dist/excalidraw/clipboard.js +55 -28
- package/dist/excalidraw/components/Actions.d.ts +2 -1
- package/dist/excalidraw/components/Actions.js +4 -2
- package/dist/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
- package/dist/excalidraw/components/ActiveConfirmDialog.js +2 -3
- package/dist/excalidraw/components/App.d.ts +1 -0
- package/dist/excalidraw/components/App.js +216 -111
- package/dist/excalidraw/components/ColorPicker/ColorInput.js +2 -3
- package/dist/excalidraw/components/ColorPicker/ColorPicker.js +2 -3
- package/dist/excalidraw/components/ColorPicker/CustomColorList.js +1 -1
- package/dist/excalidraw/components/ColorPicker/Picker.js +1 -1
- package/dist/excalidraw/components/ColorPicker/PickerColorList.js +1 -1
- package/dist/excalidraw/components/ColorPicker/ShadeList.js +1 -1
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.js +3 -3
- package/dist/excalidraw/components/ConfirmDialog.js +17 -5
- package/dist/excalidraw/components/Dialog.js +2 -3
- package/dist/excalidraw/components/EyeDropper.d.ts +1 -1
- package/dist/excalidraw/components/EyeDropper.js +1 -1
- package/dist/excalidraw/components/IconPicker.d.ts +2 -2
- package/dist/excalidraw/components/IconPicker.js +56 -53
- package/dist/excalidraw/components/LayerUI.js +6 -6
- package/dist/excalidraw/components/LibraryMenu.d.ts +2 -16
- package/dist/excalidraw/components/LibraryMenu.js +70 -28
- package/dist/excalidraw/components/LibraryMenuHeaderContent.js +4 -5
- package/dist/excalidraw/components/MobileMenu.js +1 -1
- package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirm.js +2 -3
- package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
- package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.js +2 -3
- package/dist/excalidraw/components/Range.d.ts +9 -0
- package/dist/excalidraw/components/Range.js +24 -0
- package/dist/excalidraw/components/SearchMenu.d.ts +1 -1
- package/dist/excalidraw/components/SearchMenu.js +3 -4
- package/dist/excalidraw/components/Sidebar/Sidebar.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/Sidebar.js +2 -3
- package/dist/excalidraw/components/Stats/Collapsible.d.ts +2 -1
- package/dist/excalidraw/components/Stats/Collapsible.js +2 -2
- package/dist/excalidraw/components/Stats/Dimension.js +94 -8
- package/dist/excalidraw/components/Stats/MultiDimension.js +8 -5
- package/dist/excalidraw/components/Stats/Position.js +63 -3
- package/dist/excalidraw/components/Stats/index.js +21 -4
- package/dist/excalidraw/components/Stats/utils.d.ts +1 -1
- package/dist/excalidraw/components/Stats/utils.js +2 -55
- package/dist/excalidraw/components/TTDDialog/TTDDialog.js +1 -1
- package/dist/excalidraw/components/ToolButton.js +4 -9
- package/dist/excalidraw/components/hoc/withInternalFallback.js +3 -3
- package/dist/excalidraw/components/hyperlink/Hyperlink.js +6 -12
- package/dist/excalidraw/components/icons.d.ts +9 -0
- package/dist/excalidraw/components/icons.js +4 -4
- package/dist/excalidraw/components/main-menu/DefaultItems.js +2 -3
- package/dist/excalidraw/constants.d.ts +5 -1
- package/dist/excalidraw/constants.js +9 -1
- package/dist/excalidraw/context/tunnels.d.ts +2 -1
- package/dist/excalidraw/context/tunnels.js +3 -1
- package/dist/excalidraw/data/blob.d.ts +1 -0
- package/dist/excalidraw/data/blob.js +7 -3
- package/dist/excalidraw/data/filesystem.d.ts +2 -1
- package/dist/excalidraw/data/filesystem.js +1 -0
- package/dist/excalidraw/data/image.d.ts +0 -6
- package/dist/excalidraw/data/image.js +1 -43
- package/dist/excalidraw/data/index.js +6 -6
- package/dist/excalidraw/data/library.d.ts +9 -3
- package/dist/excalidraw/data/library.js +43 -6
- package/dist/excalidraw/data/restore.js +26 -8
- package/dist/excalidraw/data/url.d.ts +0 -1
- package/dist/excalidraw/data/url.js +2 -4
- package/dist/excalidraw/editor-jotai.d.ts +56 -0
- package/dist/excalidraw/editor-jotai.js +8 -0
- package/dist/excalidraw/element/binding.d.ts +9 -6
- package/dist/excalidraw/element/binding.js +124 -44
- package/dist/excalidraw/element/bounds.js +10 -0
- package/dist/excalidraw/element/cropElement.d.ts +5 -0
- package/dist/excalidraw/element/cropElement.js +28 -1
- package/dist/excalidraw/element/dragElements.js +13 -7
- package/dist/excalidraw/element/elbowArrow.d.ts +16 -0
- package/dist/excalidraw/element/elbowArrow.js +1268 -0
- package/dist/excalidraw/element/embeddable.js +4 -5
- package/dist/excalidraw/element/flowchart.d.ts +1 -1
- package/dist/excalidraw/element/flowchart.js +25 -9
- package/dist/excalidraw/element/heading.d.ts +5 -1
- package/dist/excalidraw/element/heading.js +5 -1
- package/dist/excalidraw/element/image.js +19 -5
- package/dist/excalidraw/element/linearElementEditor.d.ts +9 -10
- package/dist/excalidraw/element/linearElementEditor.js +97 -38
- package/dist/excalidraw/element/mutateElement.d.ts +3 -1
- package/dist/excalidraw/element/mutateElement.js +31 -4
- package/dist/excalidraw/element/newElement.d.ts +8 -12
- package/dist/excalidraw/element/newElement.js +36 -21
- package/dist/excalidraw/element/resizeElements.d.ts +20 -5
- package/dist/excalidraw/element/resizeElements.js +593 -361
- package/dist/excalidraw/element/sortElements.js +1 -4
- package/dist/excalidraw/element/types.d.ts +23 -1
- package/dist/excalidraw/fonts/Fonts.d.ts +0 -16
- package/dist/excalidraw/fonts/Fonts.js +6 -31
- package/dist/excalidraw/frame.d.ts +11 -5
- package/dist/excalidraw/frame.js +146 -35
- package/dist/excalidraw/groups.js +3 -0
- package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/excalidraw/hooks/useLibraryItemSvg.js +2 -3
- package/dist/excalidraw/hooks/useScrollPosition.js +1 -1
- package/dist/excalidraw/i18n.js +3 -4
- package/dist/excalidraw/index.js +3 -4
- package/dist/excalidraw/locales/en.json +8 -1
- package/dist/excalidraw/renderer/interactiveScene.js +43 -32
- package/dist/excalidraw/renderer/staticScene.js +6 -4
- package/dist/excalidraw/renderer/staticSvgScene.js +1 -1
- package/dist/excalidraw/scene/Shape.js +40 -17
- package/dist/excalidraw/scene/comparisons.d.ts +0 -477
- package/dist/excalidraw/scene/comparisons.js +0 -37
- package/dist/excalidraw/scene/export.d.ts +7 -0
- package/dist/excalidraw/scene/export.js +107 -43
- package/dist/excalidraw/scene/index.d.ts +1 -1
- package/dist/excalidraw/scene/index.js +1 -1
- package/dist/excalidraw/scene/selection.js +4 -1
- package/dist/excalidraw/types.d.ts +15 -0
- package/dist/excalidraw/utility-types.d.ts +1 -0
- package/dist/excalidraw/utils.d.ts +8 -1
- package/dist/excalidraw/utils.js +9 -0
- package/dist/excalidraw/visualdebug.d.ts +8 -1
- package/dist/excalidraw/visualdebug.js +3 -0
- package/dist/math/line.d.ts +19 -0
- package/dist/math/line.js +32 -3
- package/dist/math/point.d.ts +10 -0
- package/dist/math/point.js +12 -1
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +29 -44
- package/dist/{dev/locales/en-ZXYG7GCR.json → prod/locales/en-V6KXFSCK.json} +8 -1
- package/package.json +5 -2
- package/dist/browser/dev/excalidraw-assets-dev/chunk-JGDL4H2X.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-V7NFEZA6.js.map +0 -7
- package/dist/browser/prod/excalidraw-assets/chunk-S2XKB3DE.js +0 -62
- package/dist/browser/prod/excalidraw-assets/image-OFI2YYMP.js +0 -1
- package/dist/excalidraw/element/routing.d.ts +0 -12
- package/dist/excalidraw/element/routing.js +0 -642
- package/dist/excalidraw/jotai.d.ts +0 -34
- package/dist/excalidraw/jotai.js +0 -18
- /package/dist/browser/dev/excalidraw-assets-dev/{en-ZSVWGT55.js.map → en-7IBTMWBG.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{image-RJG3J34Y.js.map → image-N5AC7SEK.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap, ExcalidrawArrowElement } from "./types";
|
|
1
|
+
import type { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap, ExcalidrawArrowElement, FixedSegment, ExcalidrawElbowArrowElement } from "./types";
|
|
2
2
|
import type { AppState } from "../types";
|
|
3
3
|
import type { MarkOptional, Mutable } from "../utility-types";
|
|
4
4
|
export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "index" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData">;
|
|
@@ -45,13 +45,14 @@ export declare const newLinearElement: (opts: {
|
|
|
45
45
|
type: ExcalidrawLinearElement["type"];
|
|
46
46
|
points?: ExcalidrawLinearElement["points"];
|
|
47
47
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawLinearElement>;
|
|
48
|
-
export declare const newArrowElement: (opts: {
|
|
48
|
+
export declare const newArrowElement: <T extends boolean>(opts: {
|
|
49
49
|
type: ExcalidrawArrowElement["type"];
|
|
50
|
-
startArrowhead?: Arrowhead | null;
|
|
51
|
-
endArrowhead?: Arrowhead | null;
|
|
52
|
-
points?:
|
|
53
|
-
elbowed?:
|
|
54
|
-
|
|
50
|
+
startArrowhead?: Arrowhead | null | undefined;
|
|
51
|
+
endArrowhead?: Arrowhead | null | undefined;
|
|
52
|
+
points?: readonly import("../../math").LocalPoint[] | undefined;
|
|
53
|
+
elbowed?: T | undefined;
|
|
54
|
+
fixedSegments?: FixedSegment[] | null | undefined;
|
|
55
|
+
} & Omit<Omit<ExcalidrawGenericElement, "id" | "isDeleted" | "updated" | "type">, "angle" | "link" | "width" | "height" | "backgroundColor" | "strokeColor" | "fillStyle" | "strokeWidth" | "strokeStyle" | "roundness" | "roughness" | "opacity" | "seed" | "version" | "versionNonce" | "index" | "groupIds" | "frameId" | "boundElements" | "locked" | "customData"> & Partial<Pick<Omit<ExcalidrawGenericElement, "id" | "isDeleted" | "updated" | "type">, "angle" | "link" | "width" | "height" | "backgroundColor" | "strokeColor" | "fillStyle" | "strokeWidth" | "strokeStyle" | "roundness" | "roughness" | "opacity" | "seed" | "version" | "versionNonce" | "index" | "groupIds" | "frameId" | "boundElements" | "locked" | "customData">>) => T extends true ? NonDeleted<ExcalidrawElbowArrowElement> : NonDeleted<ExcalidrawArrowElement>;
|
|
55
56
|
export declare const newImageElement: (opts: {
|
|
56
57
|
type: ExcalidrawImageElement["type"];
|
|
57
58
|
status?: ExcalidrawImageElement["status"];
|
|
@@ -69,11 +70,6 @@ export declare const newImageElement: (opts: {
|
|
|
69
70
|
* Typed arrays and other non-null objects.
|
|
70
71
|
*/
|
|
71
72
|
export declare const deepCopyElement: <T extends ExcalidrawElement>(val: T) => Mutable<T>;
|
|
72
|
-
/**
|
|
73
|
-
* utility wrapper to generate new id. In test env it reuses the old + postfix
|
|
74
|
-
* for test assertions.
|
|
75
|
-
*/
|
|
76
|
-
export declare const regenerateId: (previousId: string | null) => string;
|
|
77
73
|
/**
|
|
78
74
|
* Duplicate an element, often used in the alt-drag operation.
|
|
79
75
|
* Note that this method has gotten a bit complicated since the
|
|
@@ -6,7 +6,7 @@ import { getElementAbsoluteCoords } from ".";
|
|
|
6
6
|
import { getResizedElementAbsoluteCoords } from "./bounds";
|
|
7
7
|
import { measureText, normalizeText, getBoundTextMaxWidth, } from "./textElement";
|
|
8
8
|
import { wrapText } from "./textWrapping";
|
|
9
|
-
import { DEFAULT_ELEMENT_PROPS, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, VERTICAL_ALIGN, } from "../constants";
|
|
9
|
+
import { DEFAULT_ELEMENT_PROPS, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, ORIG_ID, VERTICAL_ALIGN, } from "../constants";
|
|
10
10
|
import { getLineHeight } from "../fonts";
|
|
11
11
|
const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strokeColor, backgroundColor = DEFAULT_ELEMENT_PROPS.backgroundColor, fillStyle = DEFAULT_ELEMENT_PROPS.fillStyle, strokeWidth = DEFAULT_ELEMENT_PROPS.strokeWidth, strokeStyle = DEFAULT_ELEMENT_PROPS.strokeStyle, roughness = DEFAULT_ELEMENT_PROPS.roughness, opacity = DEFAULT_ELEMENT_PROPS.opacity, width = 0, height = 0, angle = 0, groupIds = [], frameId = null, index = null, roundness = null, boundElements = null, link = null, locked = DEFAULT_ELEMENT_PROPS.locked, ...rest }) => {
|
|
12
12
|
// assign type to guard against excess properties
|
|
@@ -214,6 +214,21 @@ export const newLinearElement = (opts) => {
|
|
|
214
214
|
};
|
|
215
215
|
};
|
|
216
216
|
export const newArrowElement = (opts) => {
|
|
217
|
+
if (opts.elbowed) {
|
|
218
|
+
return {
|
|
219
|
+
..._newElementBase(opts.type, opts),
|
|
220
|
+
points: opts.points || [],
|
|
221
|
+
lastCommittedPoint: null,
|
|
222
|
+
startBinding: null,
|
|
223
|
+
endBinding: null,
|
|
224
|
+
startArrowhead: opts.startArrowhead || null,
|
|
225
|
+
endArrowhead: opts.endArrowhead || null,
|
|
226
|
+
elbowed: true,
|
|
227
|
+
fixedSegments: opts.fixedSegments || [],
|
|
228
|
+
startIsSpecial: false,
|
|
229
|
+
endIsSpecial: false,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
217
232
|
return {
|
|
218
233
|
..._newElementBase(opts.type, opts),
|
|
219
234
|
points: opts.points || [],
|
|
@@ -222,7 +237,7 @@ export const newArrowElement = (opts) => {
|
|
|
222
237
|
endBinding: null,
|
|
223
238
|
startArrowhead: opts.startArrowhead || null,
|
|
224
239
|
endArrowhead: opts.endArrowhead || null,
|
|
225
|
-
elbowed:
|
|
240
|
+
elbowed: false,
|
|
226
241
|
};
|
|
227
242
|
};
|
|
228
243
|
export const newImageElement = (opts) => {
|
|
@@ -300,23 +315,17 @@ const _deepCopyElement = (val, depth = 0) => {
|
|
|
300
315
|
export const deepCopyElement = (val) => {
|
|
301
316
|
return _deepCopyElement(val);
|
|
302
317
|
};
|
|
318
|
+
const __test__defineOrigId = (clonedObj, origId) => {
|
|
319
|
+
Object.defineProperty(clonedObj, ORIG_ID, {
|
|
320
|
+
value: origId,
|
|
321
|
+
writable: false,
|
|
322
|
+
enumerable: false,
|
|
323
|
+
});
|
|
324
|
+
};
|
|
303
325
|
/**
|
|
304
|
-
* utility wrapper to generate new id.
|
|
305
|
-
* for test assertions.
|
|
326
|
+
* utility wrapper to generate new id.
|
|
306
327
|
*/
|
|
307
|
-
|
|
308
|
-
/** supply null if no previous id exists */
|
|
309
|
-
previousId) => {
|
|
310
|
-
if (isTestEnv() && previousId) {
|
|
311
|
-
let nextId = `${previousId}_copy`;
|
|
312
|
-
// `window.h` may not be defined in some unit tests
|
|
313
|
-
if (window.h?.app
|
|
314
|
-
?.getSceneElementsIncludingDeleted()
|
|
315
|
-
.find((el) => el.id === nextId)) {
|
|
316
|
-
nextId += "_copy";
|
|
317
|
-
}
|
|
318
|
-
return nextId;
|
|
319
|
-
}
|
|
328
|
+
const regenerateId = () => {
|
|
320
329
|
return randomId();
|
|
321
330
|
};
|
|
322
331
|
/**
|
|
@@ -335,13 +344,16 @@ previousId) => {
|
|
|
335
344
|
*/
|
|
336
345
|
export const duplicateElement = (editingGroupId, groupIdMapForOperation, element, overrides) => {
|
|
337
346
|
let copy = deepCopyElement(element);
|
|
338
|
-
|
|
347
|
+
if (isTestEnv()) {
|
|
348
|
+
__test__defineOrigId(copy, element.id);
|
|
349
|
+
}
|
|
350
|
+
copy.id = regenerateId();
|
|
339
351
|
copy.boundElements = null;
|
|
340
352
|
copy.updated = getUpdatedTimestamp();
|
|
341
353
|
copy.seed = randomInteger();
|
|
342
354
|
copy.groupIds = getNewGroupIdsForDuplication(copy.groupIds, editingGroupId, (groupId) => {
|
|
343
355
|
if (!groupIdMapForOperation.has(groupId)) {
|
|
344
|
-
groupIdMapForOperation.set(groupId, regenerateId(
|
|
356
|
+
groupIdMapForOperation.set(groupId, regenerateId());
|
|
345
357
|
}
|
|
346
358
|
return groupIdMapForOperation.get(groupId);
|
|
347
359
|
});
|
|
@@ -373,7 +385,7 @@ export const duplicateElements = (elements, opts) => {
|
|
|
373
385
|
// if we haven't migrated the element id, but an old element with the same
|
|
374
386
|
// id exists, generate a new id for it and return it
|
|
375
387
|
if (origElementsMap.has(id)) {
|
|
376
|
-
const newId = regenerateId(
|
|
388
|
+
const newId = regenerateId();
|
|
377
389
|
elementNewIdsMap.set(id, newId);
|
|
378
390
|
return newId;
|
|
379
391
|
}
|
|
@@ -384,6 +396,9 @@ export const duplicateElements = (elements, opts) => {
|
|
|
384
396
|
for (const element of elements) {
|
|
385
397
|
const clonedElement = _deepCopyElement(element);
|
|
386
398
|
clonedElement.id = maybeGetNewId(element.id);
|
|
399
|
+
if (isTestEnv()) {
|
|
400
|
+
__test__defineOrigId(clonedElement, element.id);
|
|
401
|
+
}
|
|
387
402
|
if (opts?.randomizeSeed) {
|
|
388
403
|
clonedElement.seed = randomInteger();
|
|
389
404
|
bumpVersion(clonedElement);
|
|
@@ -391,7 +406,7 @@ export const duplicateElements = (elements, opts) => {
|
|
|
391
406
|
if (clonedElement.groupIds) {
|
|
392
407
|
clonedElement.groupIds = clonedElement.groupIds.map((groupId) => {
|
|
393
408
|
if (!groupNewIdsMap.has(groupId)) {
|
|
394
|
-
groupNewIdsMap.set(groupId, regenerateId(
|
|
409
|
+
groupNewIdsMap.set(groupId, regenerateId());
|
|
395
410
|
}
|
|
396
411
|
return groupNewIdsMap.get(groupId);
|
|
397
412
|
});
|
|
@@ -1,16 +1,31 @@
|
|
|
1
|
-
import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted,
|
|
1
|
+
import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted, ExcalidrawElement, ElementsMap, SceneElementsMap } from "./types";
|
|
2
|
+
import type { BoundingBox } from "./bounds";
|
|
2
3
|
import type { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
3
4
|
import type { PointerDownState } from "../types";
|
|
4
|
-
|
|
5
|
+
import type Scene from "../scene/Scene";
|
|
6
|
+
import { type LocalPoint } from "../../math";
|
|
7
|
+
export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: SceneElementsMap, scene: Scene, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
|
|
5
8
|
export declare const rescalePointsInElement: (element: NonDeletedExcalidrawElement, width: number, height: number, normalizePoints: boolean) => {
|
|
6
|
-
points:
|
|
9
|
+
points: LocalPoint[];
|
|
7
10
|
} | {
|
|
8
11
|
points?: undefined;
|
|
9
12
|
};
|
|
10
13
|
export declare const measureFontSizeFromWidth: (element: NonDeleted<ExcalidrawTextElement>, elementsMap: ElementsMap, nextWidth: number) => {
|
|
11
14
|
size: number;
|
|
12
15
|
} | null;
|
|
13
|
-
export declare const resizeSingleElement: (originalElements: PointerDownState["originalElements"], shouldMaintainAspectRatio: boolean, element: NonDeletedExcalidrawElement, elementsMap: SceneElementsMap, transformHandleDirection: TransformHandleDirection, shouldResizeFromCenter: boolean, pointerX: number, pointerY: number) => void;
|
|
14
|
-
export declare const resizeMultipleElements: (originalElements: PointerDownState["originalElements"], selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: NonDeletedSceneElementsMap | SceneElementsMap, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number) => void;
|
|
15
16
|
export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, x: number, y: number) => [number, number];
|
|
16
17
|
export declare const getResizeArrowDirection: (transformHandleType: MaybeTransformHandleType, element: NonDeleted<ExcalidrawLinearElement>) => "origin" | "end";
|
|
18
|
+
export declare const resizeSingleElement: (nextWidth: number, nextHeight: number, latestElement: ExcalidrawElement, origElement: ExcalidrawElement, elementsMap: ElementsMap, originalElementsMap: ElementsMap, handleDirection: TransformHandleDirection, { shouldInformMutation, shouldMaintainAspectRatio, shouldResizeFromCenter, }?: {
|
|
19
|
+
shouldMaintainAspectRatio?: boolean | undefined;
|
|
20
|
+
shouldResizeFromCenter?: boolean | undefined;
|
|
21
|
+
shouldInformMutation?: boolean | undefined;
|
|
22
|
+
}) => void;
|
|
23
|
+
export declare const resizeMultipleElements: (selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, handleDirection: TransformHandleDirection, scene: Scene, originalElementsMap: ElementsMap, { shouldMaintainAspectRatio, shouldResizeFromCenter, flipByX, flipByY, nextHeight, nextWidth, originalBoundingBox, }?: {
|
|
24
|
+
nextWidth?: number | undefined;
|
|
25
|
+
nextHeight?: number | undefined;
|
|
26
|
+
shouldMaintainAspectRatio?: boolean | undefined;
|
|
27
|
+
shouldResizeFromCenter?: boolean | undefined;
|
|
28
|
+
flipByX?: boolean | undefined;
|
|
29
|
+
flipByY?: boolean | undefined;
|
|
30
|
+
originalBoundingBox?: BoundingBox | undefined;
|
|
31
|
+
}) => void;
|