@excalidraw/excalidraw 0.17.1-1ed53b1 → 0.17.1-22b3927
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-JKPJV7MZ.js → chunk-Q6A4M3MN.js} +4 -2
- package/dist/browser/dev/excalidraw-assets-dev/chunk-Q6A4M3MN.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-OKAZAA6U.js → chunk-VC7RRIDZ.js} +230 -93
- package/dist/browser/dev/excalidraw-assets-dev/chunk-VC7RRIDZ.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{dist-ITJNUBZF.js → dist-6QVAH5JA.js} +36 -14
- package/dist/browser/dev/excalidraw-assets-dev/dist-6QVAH5JA.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{en-BF4XUPIZ.js → en-Y27YPU72.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{image-LVS32KQQ.js → image-J7S3ALXP.js} +2 -2
- package/dist/browser/dev/index.js +335 -116
- package/dist/browser/dev/index.js.map +4 -4
- package/dist/browser/prod/excalidraw-assets/chunk-CWO763YJ.js +55 -0
- package/dist/browser/prod/excalidraw-assets/{chunk-O4AI3NNG.js → chunk-IZMZ6RPD.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/dist-567JAXHK.js +7 -0
- package/dist/browser/prod/excalidraw-assets/{en-N7CLNF6C.js → en-GSUSWMSH.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/image-SZBFRCU2.js +1 -0
- package/dist/browser/prod/index.js +24 -24
- package/dist/dev/{en-UQDDYCH7.json → en-OIPCBIOA.json} +3 -1
- package/dist/dev/index.js +576 -207
- package/dist/dev/index.js.map +4 -4
- package/dist/excalidraw/actions/actionAddToLibrary.d.ts +3 -3
- package/dist/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/excalidraw/actions/actionBoundText.d.ts +3 -3
- package/dist/excalidraw/actions/actionBoundText.js +3 -1
- package/dist/excalidraw/actions/actionCanvas.d.ts +13 -13
- package/dist/excalidraw/actions/actionClipboard.d.ts +12 -12
- package/dist/excalidraw/actions/actionDeleteSelected.d.ts +3 -3
- package/dist/excalidraw/actions/actionDistribute.d.ts +2 -2
- package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +1 -1
- package/dist/excalidraw/actions/actionElementLock.d.ts +2 -2
- package/dist/excalidraw/actions/actionExport.d.ts +11 -11
- package/dist/excalidraw/actions/actionFinalize.d.ts +2 -2
- package/dist/excalidraw/actions/actionFlip.d.ts +2 -2
- package/dist/excalidraw/actions/actionFrame.d.ts +312 -4
- package/dist/excalidraw/actions/actionGroup.d.ts +312 -2
- package/dist/excalidraw/actions/actionHistory.js +4 -4
- package/dist/excalidraw/actions/actionLinearEditor.d.ts +1 -1
- package/dist/excalidraw/actions/actionLink.d.ts +1 -1
- package/dist/excalidraw/actions/actionMenu.d.ts +3 -3
- package/dist/excalidraw/actions/actionNavigate.d.ts +2 -2
- package/dist/excalidraw/actions/actionProperties.d.ts +13 -13
- package/dist/excalidraw/actions/actionProperties.js +1 -1
- package/dist/excalidraw/actions/actionSelectAll.d.ts +1 -1
- package/dist/excalidraw/actions/actionStyles.d.ts +5 -2
- package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
- package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
- package/dist/excalidraw/actions/actionToggleGridMode.d.ts +1 -1
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +1 -1
- package/dist/excalidraw/actions/actionToggleStats.d.ts +1 -1
- package/dist/excalidraw/actions/actionToggleViewMode.d.ts +1 -1
- package/dist/excalidraw/actions/actionToggleZenMode.d.ts +1 -1
- package/dist/excalidraw/actions/actionZindex.d.ts +4 -4
- package/dist/excalidraw/actions/types.d.ts +1 -1
- package/dist/excalidraw/change.js +13 -6
- package/dist/excalidraw/components/Actions.js +1 -1
- package/dist/excalidraw/components/App.d.ts +2 -2
- package/dist/excalidraw/components/App.js +133 -51
- package/dist/excalidraw/components/ButtonIconSelect.js +1 -1
- package/dist/excalidraw/components/CheckboxItem.js +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.js +2 -2
- package/dist/excalidraw/components/ContextMenu.js +1 -1
- package/dist/excalidraw/components/Dialog.js +1 -1
- package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
- package/dist/excalidraw/components/IconPicker.js +2 -2
- package/dist/excalidraw/components/LayerUI.js +2 -2
- package/dist/excalidraw/components/MobileMenu.js +1 -1
- package/dist/excalidraw/components/PasteChartDialog.js +1 -1
- package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +3 -2
- package/dist/excalidraw/components/canvases/InteractiveCanvas.js +4 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
- package/dist/excalidraw/components/canvases/StaticCanvas.js +2 -2
- package/dist/excalidraw/components/icons.js +6 -2
- package/dist/excalidraw/constants.d.ts +1 -0
- package/dist/excalidraw/constants.js +5 -0
- package/dist/excalidraw/data/restore.js +3 -0
- package/dist/excalidraw/element/dragElements.d.ts +2 -2
- package/dist/excalidraw/element/dragElements.js +27 -3
- package/dist/excalidraw/element/embeddable.d.ts +1 -1
- package/dist/excalidraw/element/index.d.ts +1 -1
- package/dist/excalidraw/element/index.js +1 -1
- package/dist/excalidraw/element/mutateElement.d.ts +1 -1
- package/dist/excalidraw/element/mutateElement.js +5 -3
- package/dist/excalidraw/element/newElement.d.ts +2 -5
- package/dist/excalidraw/element/newElement.js +16 -14
- package/dist/excalidraw/element/resizeElements.js +73 -21
- package/dist/excalidraw/element/resizeTest.js +2 -4
- package/dist/excalidraw/element/textElement.d.ts +1 -0
- package/dist/excalidraw/element/textElement.js +11 -3
- package/dist/excalidraw/element/textWysiwyg.d.ts +10 -4
- package/dist/excalidraw/element/textWysiwyg.js +38 -17
- package/dist/excalidraw/element/transformHandles.js +0 -10
- package/dist/excalidraw/element/types.d.ts +7 -0
- package/dist/excalidraw/fractionalIndex.js +2 -4
- package/dist/excalidraw/locales/en.json +3 -1
- package/dist/excalidraw/mermaid.d.ts +2 -0
- package/dist/excalidraw/mermaid.js +28 -0
- package/dist/excalidraw/renderer/interactiveScene.d.ts +1 -1
- package/dist/excalidraw/renderer/interactiveScene.js +31 -5
- package/dist/excalidraw/renderer/renderElement.d.ts +2 -2
- package/dist/excalidraw/renderer/renderElement.js +2 -2
- package/dist/excalidraw/scene/Fonts.d.ts +1 -3
- package/dist/excalidraw/scene/Fonts.js +6 -12
- package/dist/excalidraw/scene/Renderer.d.ts +1 -1
- package/dist/excalidraw/scene/Renderer.js +2 -3
- package/dist/excalidraw/scene/Scene.d.ts +10 -4
- package/dist/excalidraw/scene/Scene.js +14 -8
- package/dist/excalidraw/scene/export.js +1 -1
- package/dist/excalidraw/scene/types.d.ts +2 -1
- package/dist/excalidraw/snapping.js +2 -1
- package/dist/excalidraw/store.d.ts +32 -2
- package/dist/excalidraw/store.js +27 -0
- package/dist/excalidraw/types.d.ts +1 -0
- package/dist/prod/{en-UQDDYCH7.json → en-OIPCBIOA.json} +3 -1
- package/dist/prod/index.js +42 -42
- package/package.json +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/chunk-JKPJV7MZ.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-OKAZAA6U.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/dist-ITJNUBZF.js.map +0 -7
- package/dist/browser/prod/excalidraw-assets/chunk-SXBDZOS3.js +0 -55
- package/dist/browser/prod/excalidraw-assets/dist-54276HPL.js +0 -6
- package/dist/browser/prod/excalidraw-assets/image-VAGBVQ3G.js +0 -1
- /package/dist/browser/dev/excalidraw-assets-dev/{en-BF4XUPIZ.js.map → en-Y27YPU72.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{image-LVS32KQQ.js.map → image-J7S3ALXP.js.map} +0 -0
|
@@ -4934,6 +4934,7 @@ navigator.userAgent.includes("Mac") && "ontouchend" in document;
|
|
|
4934
4934
|
var isBrave = () => navigator.brave?.isBrave?.name === "isBrave";
|
|
4935
4935
|
var supportsResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
|
|
4936
4936
|
var APP_NAME = "Excalidraw";
|
|
4937
|
+
var TEXT_AUTOWRAP_THRESHOLD = 36;
|
|
4937
4938
|
var DRAGGING_THRESHOLD = 10;
|
|
4938
4939
|
var LINE_CONFIRM_THRESHOLD = 8;
|
|
4939
4940
|
var ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;
|
|
@@ -11148,8 +11149,8 @@ var redrawTextBoundingBox = (textElement, container, elementsMap, informMutation
|
|
|
11148
11149
|
angle: container?.angle ?? textElement.angle
|
|
11149
11150
|
};
|
|
11150
11151
|
boundTextUpdates.text = textElement.text;
|
|
11151
|
-
if (container) {
|
|
11152
|
-
maxWidth = getBoundTextMaxWidth(container, textElement);
|
|
11152
|
+
if (container || !textElement.autoResize) {
|
|
11153
|
+
maxWidth = container ? getBoundTextMaxWidth(container, textElement) : textElement.width;
|
|
11153
11154
|
boundTextUpdates.text = wrapText(
|
|
11154
11155
|
textElement.originalText,
|
|
11155
11156
|
getFontString(textElement),
|
|
@@ -11161,7 +11162,9 @@ var redrawTextBoundingBox = (textElement, container, elementsMap, informMutation
|
|
|
11161
11162
|
getFontString(textElement),
|
|
11162
11163
|
textElement.lineHeight
|
|
11163
11164
|
);
|
|
11164
|
-
|
|
11165
|
+
if (textElement.autoResize) {
|
|
11166
|
+
boundTextUpdates.width = metrics.width;
|
|
11167
|
+
}
|
|
11165
11168
|
boundTextUpdates.height = metrics.height;
|
|
11166
11169
|
if (container) {
|
|
11167
11170
|
const maxContainerHeight = getBoundTextMaxHeight(
|
|
@@ -11707,6 +11710,9 @@ var getDefaultLineHeight = (fontFamily) => {
|
|
|
11707
11710
|
}
|
|
11708
11711
|
return DEFAULT_LINE_HEIGHT[DEFAULT_FONT_FAMILY];
|
|
11709
11712
|
};
|
|
11713
|
+
var getMinTextElementWidth = (font, lineHeight) => {
|
|
11714
|
+
return measureText("", font, lineHeight).width + BOUND_TEXT_PADDING * 2;
|
|
11715
|
+
};
|
|
11710
11716
|
|
|
11711
11717
|
// renderer/renderElement.ts
|
|
11712
11718
|
var IMAGE_INVERT_FILTER = "invert(100%) hue-rotate(180deg) saturate(1.25)";
|
|
@@ -12021,14 +12027,14 @@ var drawElementFromCanvas = (elementWithCanvas, context, renderConfig, appState,
|
|
|
12021
12027
|
}
|
|
12022
12028
|
context.restore();
|
|
12023
12029
|
};
|
|
12024
|
-
var renderSelectionElement = (element, context, appState) => {
|
|
12030
|
+
var renderSelectionElement = (element, context, appState, selectionColor) => {
|
|
12025
12031
|
context.save();
|
|
12026
12032
|
context.translate(element.x + appState.scrollX, element.y + appState.scrollY);
|
|
12027
12033
|
context.fillStyle = "rgba(0, 0, 200, 0.04)";
|
|
12028
12034
|
const offset2 = 0.5 / appState.zoom.value;
|
|
12029
12035
|
context.fillRect(offset2, offset2, element.width, element.height);
|
|
12030
12036
|
context.lineWidth = 1 / appState.zoom.value;
|
|
12031
|
-
context.strokeStyle =
|
|
12037
|
+
context.strokeStyle = selectionColor;
|
|
12032
12038
|
context.strokeRect(offset2, offset2, element.width, element.height);
|
|
12033
12039
|
context.restore();
|
|
12034
12040
|
};
|
|
@@ -13951,36 +13957,41 @@ var newTextElement = (opts) => {
|
|
|
13951
13957
|
{ textAlign, verticalAlign },
|
|
13952
13958
|
metrics
|
|
13953
13959
|
);
|
|
13960
|
+
const textElementProps = {
|
|
13961
|
+
..._newElementBase("text", opts),
|
|
13962
|
+
text,
|
|
13963
|
+
fontSize,
|
|
13964
|
+
fontFamily,
|
|
13965
|
+
textAlign,
|
|
13966
|
+
verticalAlign,
|
|
13967
|
+
x: opts.x - offsets.x,
|
|
13968
|
+
y: opts.y - offsets.y,
|
|
13969
|
+
width: metrics.width,
|
|
13970
|
+
height: metrics.height,
|
|
13971
|
+
containerId: opts.containerId || null,
|
|
13972
|
+
originalText: opts.originalText ?? text,
|
|
13973
|
+
autoResize: opts.autoResize ?? true,
|
|
13974
|
+
lineHeight
|
|
13975
|
+
};
|
|
13954
13976
|
const textElement = newElementWith(
|
|
13955
|
-
|
|
13956
|
-
..._newElementBase("text", opts),
|
|
13957
|
-
text,
|
|
13958
|
-
fontSize,
|
|
13959
|
-
fontFamily,
|
|
13960
|
-
textAlign,
|
|
13961
|
-
verticalAlign,
|
|
13962
|
-
x: opts.x - offsets.x,
|
|
13963
|
-
y: opts.y - offsets.y,
|
|
13964
|
-
width: metrics.width,
|
|
13965
|
-
height: metrics.height,
|
|
13966
|
-
containerId: opts.containerId || null,
|
|
13967
|
-
originalText: text,
|
|
13968
|
-
lineHeight
|
|
13969
|
-
},
|
|
13977
|
+
textElementProps,
|
|
13970
13978
|
{}
|
|
13971
13979
|
);
|
|
13972
13980
|
return textElement;
|
|
13973
13981
|
};
|
|
13974
13982
|
var getAdjustedDimensions = (element, elementsMap, nextText) => {
|
|
13975
|
-
|
|
13983
|
+
let { width: nextWidth, height: nextHeight } = measureText(
|
|
13976
13984
|
nextText,
|
|
13977
13985
|
getFontString(element),
|
|
13978
13986
|
element.lineHeight
|
|
13979
13987
|
);
|
|
13988
|
+
if (!element.autoResize) {
|
|
13989
|
+
nextWidth = element.width;
|
|
13990
|
+
}
|
|
13980
13991
|
const { textAlign, verticalAlign } = element;
|
|
13981
13992
|
let x;
|
|
13982
13993
|
let y;
|
|
13983
|
-
if (textAlign === "center" && verticalAlign === VERTICAL_ALIGN.MIDDLE && !element.containerId) {
|
|
13994
|
+
if (textAlign === "center" && verticalAlign === VERTICAL_ALIGN.MIDDLE && !element.containerId && element.autoResize) {
|
|
13984
13995
|
const prevMetrics = measureText(
|
|
13985
13996
|
element.text,
|
|
13986
13997
|
getFontString(element),
|
|
@@ -14030,27 +14041,16 @@ var refreshTextDimensions = (textElement, container, elementsMap, text = textEle
|
|
|
14030
14041
|
if (textElement.isDeleted) {
|
|
14031
14042
|
return;
|
|
14032
14043
|
}
|
|
14033
|
-
if (container) {
|
|
14044
|
+
if (container || !textElement.autoResize) {
|
|
14034
14045
|
text = wrapText(
|
|
14035
14046
|
text,
|
|
14036
14047
|
getFontString(textElement),
|
|
14037
|
-
getBoundTextMaxWidth(container, textElement)
|
|
14048
|
+
container ? getBoundTextMaxWidth(container, textElement) : textElement.width
|
|
14038
14049
|
);
|
|
14039
14050
|
}
|
|
14040
14051
|
const dimensions = getAdjustedDimensions(textElement, elementsMap, text);
|
|
14041
14052
|
return { text, ...dimensions };
|
|
14042
14053
|
};
|
|
14043
|
-
var updateTextElement = (textElement, container, elementsMap, {
|
|
14044
|
-
text,
|
|
14045
|
-
isDeleted,
|
|
14046
|
-
originalText
|
|
14047
|
-
}) => {
|
|
14048
|
-
return newElementWith(textElement, {
|
|
14049
|
-
originalText,
|
|
14050
|
-
isDeleted: isDeleted ?? textElement.isDeleted,
|
|
14051
|
-
...refreshTextDimensions(textElement, container, elementsMap, originalText)
|
|
14052
|
-
});
|
|
14053
|
-
};
|
|
14054
14054
|
var newFreeDrawElement = (opts) => {
|
|
14055
14055
|
return {
|
|
14056
14056
|
..._newElementBase(opts.type, opts),
|
|
@@ -14519,18 +14519,10 @@ var getMovedIndicesGroups = (elements, movedElements) => {
|
|
|
14519
14519
|
const indicesGroups = [];
|
|
14520
14520
|
let i2 = 0;
|
|
14521
14521
|
while (i2 < elements.length) {
|
|
14522
|
-
if (movedElements.has(elements[i2].id)
|
|
14523
|
-
elements[i2]?.index,
|
|
14524
|
-
elements[i2 - 1]?.index,
|
|
14525
|
-
elements[i2 + 1]?.index
|
|
14526
|
-
)) {
|
|
14522
|
+
if (movedElements.has(elements[i2].id)) {
|
|
14527
14523
|
const indicesGroup = [i2 - 1, i2];
|
|
14528
14524
|
while (++i2 < elements.length) {
|
|
14529
|
-
if (!
|
|
14530
|
-
elements[i2]?.index,
|
|
14531
|
-
elements[i2 - 1]?.index,
|
|
14532
|
-
elements[i2 + 1]?.index
|
|
14533
|
-
))) {
|
|
14525
|
+
if (!movedElements.has(elements[i2].id)) {
|
|
14534
14526
|
break;
|
|
14535
14527
|
}
|
|
14536
14528
|
indicesGroup.push(i2);
|
|
@@ -15554,12 +15546,22 @@ var ElementsChange = class _ElementsChange {
|
|
|
15554
15546
|
if (!flags.containsZindexDifference) {
|
|
15555
15547
|
return elements;
|
|
15556
15548
|
}
|
|
15557
|
-
const
|
|
15558
|
-
const
|
|
15559
|
-
|
|
15549
|
+
const unordered = Array.from(elements.values());
|
|
15550
|
+
const ordered = orderByFractionalIndex([...unordered]);
|
|
15551
|
+
const moved = Delta.getRightDifferences(unordered, ordered, true).reduce(
|
|
15552
|
+
(acc, arrayIndex) => {
|
|
15553
|
+
const candidate = unordered[Number(arrayIndex)];
|
|
15554
|
+
if (candidate && changed.has(candidate.id)) {
|
|
15555
|
+
acc.set(candidate.id, candidate);
|
|
15556
|
+
}
|
|
15557
|
+
return acc;
|
|
15558
|
+
},
|
|
15559
|
+
/* @__PURE__ */ new Map()
|
|
15560
|
+
);
|
|
15561
|
+
if (!flags.containsVisibleDifference && moved.size) {
|
|
15560
15562
|
flags.containsVisibleDifference = true;
|
|
15561
15563
|
}
|
|
15562
|
-
return arrayToMap(syncMovedIndices(
|
|
15564
|
+
return arrayToMap(syncMovedIndices(ordered, moved));
|
|
15563
15565
|
}
|
|
15564
15566
|
/**
|
|
15565
15567
|
* It is necessary to post process the partials in case of reference values,
|
|
@@ -15640,8 +15642,35 @@ var getObservedAppState = (appState) => {
|
|
|
15640
15642
|
};
|
|
15641
15643
|
var isObservedAppState = (appState) => !!Reflect.get(appState, hiddenObservedAppStateProp);
|
|
15642
15644
|
var StoreAction = {
|
|
15645
|
+
/**
|
|
15646
|
+
* Immediately undoable.
|
|
15647
|
+
*
|
|
15648
|
+
* Use for updates which should be captured.
|
|
15649
|
+
* Should be used for most of the local updates.
|
|
15650
|
+
*
|
|
15651
|
+
* These updates will _immediately_ make it to the local undo / redo stacks.
|
|
15652
|
+
*/
|
|
15643
15653
|
CAPTURE: "capture",
|
|
15654
|
+
/**
|
|
15655
|
+
* Never undoable.
|
|
15656
|
+
*
|
|
15657
|
+
* Use for updates which should never be recorded, such as remote updates
|
|
15658
|
+
* or scene initialization.
|
|
15659
|
+
*
|
|
15660
|
+
* These updates will _never_ make it to the local undo / redo stacks.
|
|
15661
|
+
*/
|
|
15644
15662
|
UPDATE: "update",
|
|
15663
|
+
/**
|
|
15664
|
+
* Eventually undoable.
|
|
15665
|
+
*
|
|
15666
|
+
* Use for updates which should not be captured immediately - likely
|
|
15667
|
+
* exceptions which are part of some async multi-step process. Otherwise, all
|
|
15668
|
+
* such updates would end up being captured with the next
|
|
15669
|
+
* `StoreAction.CAPTURE` - triggered either by the next `updateScene`
|
|
15670
|
+
* or internally by the editor.
|
|
15671
|
+
*
|
|
15672
|
+
* These updates will _eventually_ make it to the local undo / redo stacks.
|
|
15673
|
+
*/
|
|
15645
15674
|
NONE: "none"
|
|
15646
15675
|
};
|
|
15647
15676
|
var StoreIncrementEvent = class {
|
|
@@ -17691,7 +17720,7 @@ var exportToSvg = async (elements, appState, files, opts) => {
|
|
|
17691
17720
|
let metadata = "";
|
|
17692
17721
|
if (exportEmbedScene) {
|
|
17693
17722
|
try {
|
|
17694
|
-
metadata = await (await import("./image-
|
|
17723
|
+
metadata = await (await import("./image-J7S3ALXP.js")).encodeSvgMetadata({
|
|
17695
17724
|
// when embedding scene, we want to embed the origionally supplied
|
|
17696
17725
|
// elements which don't contain the temp frame labels.
|
|
17697
17726
|
// But it also requires that the exportToSvg is being supplied with
|
|
@@ -17717,7 +17746,7 @@ var exportToSvg = async (elements, appState, files, opts) => {
|
|
|
17717
17746
|
}
|
|
17718
17747
|
let assetPath = "https://excalidraw.com/";
|
|
17719
17748
|
if (define_import_meta_env_default.VITE_IS_EXCALIDRAW_NPM_PACKAGE) {
|
|
17720
|
-
assetPath = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${define_import_meta_env_default.VITE_PKG_NAME}@${define_import_meta_env_default.
|
|
17749
|
+
assetPath = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${define_import_meta_env_default.VITE_PKG_NAME}@${define_import_meta_env_default.VITE_PKG_VERSION}`;
|
|
17721
17750
|
if (assetPath?.startsWith("/")) {
|
|
17722
17751
|
assetPath = assetPath.replace("/", `${window.location.origin}/`);
|
|
17723
17752
|
}
|
|
@@ -17909,6 +17938,7 @@ var restoreElement = (element) => {
|
|
|
17909
17938
|
verticalAlign: element.verticalAlign || DEFAULT_VERTICAL_ALIGN,
|
|
17910
17939
|
containerId: element.containerId ?? null,
|
|
17911
17940
|
originalText: element.originalText || text,
|
|
17941
|
+
autoResize: element.autoResize ?? true,
|
|
17912
17942
|
lineHeight
|
|
17913
17943
|
});
|
|
17914
17944
|
if (!text && !element.isDeleted) {
|
|
@@ -17958,7 +17988,8 @@ var restoreElement = (element) => {
|
|
|
17958
17988
|
endArrowhead,
|
|
17959
17989
|
points,
|
|
17960
17990
|
x,
|
|
17961
|
-
y
|
|
17991
|
+
y,
|
|
17992
|
+
...getSizeFromPoints(points)
|
|
17962
17993
|
});
|
|
17963
17994
|
}
|
|
17964
17995
|
case "ellipse":
|
|
@@ -19720,7 +19751,16 @@ var Scene = class _Scene {
|
|
|
19720
19751
|
elements: null,
|
|
19721
19752
|
cache: /* @__PURE__ */ new Map()
|
|
19722
19753
|
};
|
|
19723
|
-
|
|
19754
|
+
/**
|
|
19755
|
+
* Random integer regenerated each scene update.
|
|
19756
|
+
*
|
|
19757
|
+
* Does not relate to elements versions, it's only a renderer
|
|
19758
|
+
* cache-invalidation nonce at the moment.
|
|
19759
|
+
*/
|
|
19760
|
+
sceneNonce;
|
|
19761
|
+
getSceneNonce() {
|
|
19762
|
+
return this.sceneNonce;
|
|
19763
|
+
}
|
|
19724
19764
|
getNonDeletedElementsMap() {
|
|
19725
19765
|
return this.nonDeletedElementsMap;
|
|
19726
19766
|
}
|
|
@@ -19765,9 +19805,6 @@ var Scene = class _Scene {
|
|
|
19765
19805
|
getElement(id) {
|
|
19766
19806
|
return this.elementsMap.get(id) || null;
|
|
19767
19807
|
}
|
|
19768
|
-
getVersionNonce() {
|
|
19769
|
-
return this.versionNonce;
|
|
19770
|
-
}
|
|
19771
19808
|
getNonDeletedElement(id) {
|
|
19772
19809
|
const element = this.getElement(id);
|
|
19773
19810
|
if (element && isNonDeletedElement(element)) {
|
|
@@ -19824,15 +19861,15 @@ var Scene = class _Scene {
|
|
|
19824
19861
|
this.nonDeletedElementsMap = nonDeletedElements.elementsMap;
|
|
19825
19862
|
this.frames = nextFrameLikes;
|
|
19826
19863
|
this.nonDeletedFramesLikes = getNonDeletedElements3(this.frames).elements;
|
|
19827
|
-
this.
|
|
19864
|
+
this.triggerUpdate();
|
|
19828
19865
|
}
|
|
19829
|
-
|
|
19830
|
-
this.
|
|
19866
|
+
triggerUpdate() {
|
|
19867
|
+
this.sceneNonce = randomInteger();
|
|
19831
19868
|
for (const callback of Array.from(this.callbacks)) {
|
|
19832
19869
|
callback();
|
|
19833
19870
|
}
|
|
19834
19871
|
}
|
|
19835
|
-
|
|
19872
|
+
onUpdate(cb) {
|
|
19836
19873
|
if (this.callbacks.has(cb)) {
|
|
19837
19874
|
throw new Error();
|
|
19838
19875
|
}
|
|
@@ -19965,11 +20002,11 @@ var mutateElement = (element, updates, informMutation = true) => {
|
|
|
19965
20002
|
element.versionNonce = randomInteger();
|
|
19966
20003
|
element.updated = getUpdatedTimestamp();
|
|
19967
20004
|
if (informMutation) {
|
|
19968
|
-
Scene_default.getScene(element)?.
|
|
20005
|
+
Scene_default.getScene(element)?.triggerUpdate();
|
|
19969
20006
|
}
|
|
19970
20007
|
return element;
|
|
19971
20008
|
};
|
|
19972
|
-
var newElementWith = (element, updates) => {
|
|
20009
|
+
var newElementWith = (element, updates, force = false) => {
|
|
19973
20010
|
let didChange = false;
|
|
19974
20011
|
for (const key in updates) {
|
|
19975
20012
|
const value = updates[key];
|
|
@@ -19981,7 +20018,7 @@ var newElementWith = (element, updates) => {
|
|
|
19981
20018
|
didChange = true;
|
|
19982
20019
|
}
|
|
19983
20020
|
}
|
|
19984
|
-
if (!didChange) {
|
|
20021
|
+
if (!didChange && !force) {
|
|
19985
20022
|
return element;
|
|
19986
20023
|
}
|
|
19987
20024
|
return {
|
|
@@ -20097,12 +20134,6 @@ var DEFAULT_OMIT_SIDES = {
|
|
|
20097
20134
|
n: true,
|
|
20098
20135
|
w: true
|
|
20099
20136
|
};
|
|
20100
|
-
var OMIT_SIDES_FOR_TEXT_ELEMENT = {
|
|
20101
|
-
e: true,
|
|
20102
|
-
s: true,
|
|
20103
|
-
n: true,
|
|
20104
|
-
w: true
|
|
20105
|
-
};
|
|
20106
20137
|
var OMIT_SIDES_FOR_LINE_SLASH = {
|
|
20107
20138
|
e: true,
|
|
20108
20139
|
s: true,
|
|
@@ -20263,8 +20294,6 @@ var getTransformHandles = (element, zoom, elementsMap, pointerType = "mouse", om
|
|
|
20263
20294
|
omitSides = OMIT_SIDES_FOR_LINE_BACKSLASH;
|
|
20264
20295
|
}
|
|
20265
20296
|
}
|
|
20266
|
-
} else if (isTextElement(element)) {
|
|
20267
|
-
omitSides = OMIT_SIDES_FOR_TEXT_ELEMENT;
|
|
20268
20297
|
} else if (isFrameLikeElement(element)) {
|
|
20269
20298
|
omitSides = {
|
|
20270
20299
|
...omitSides,
|
|
@@ -20327,7 +20356,7 @@ var resizeTest = (element, elementsMap, appState, x, y, zoom, pointerType, devic
|
|
|
20327
20356
|
element,
|
|
20328
20357
|
elementsMap
|
|
20329
20358
|
);
|
|
20330
|
-
if (
|
|
20359
|
+
if (!(isLinearElement(element) && element.points.length <= 2)) {
|
|
20331
20360
|
const SPACING = SIDE_RESIZING_THRESHOLD / zoom.value;
|
|
20332
20361
|
const sides = getSelectionBorders(
|
|
20333
20362
|
[x1 - SPACING, y1 - SPACING],
|
|
@@ -20477,8 +20506,9 @@ var transformElements = (originalElements, transformHandleType, selectedElements
|
|
|
20477
20506
|
shouldRotateWithDiscreteAngle2
|
|
20478
20507
|
);
|
|
20479
20508
|
updateBoundElements(element, elementsMap);
|
|
20480
|
-
} else if (isTextElement(element) &&
|
|
20509
|
+
} else if (isTextElement(element) && transformHandleType) {
|
|
20481
20510
|
resizeSingleTextElement(
|
|
20511
|
+
originalElements,
|
|
20482
20512
|
element,
|
|
20483
20513
|
elementsMap,
|
|
20484
20514
|
transformHandleType,
|
|
@@ -20580,7 +20610,7 @@ var measureFontSizeFromWidth = (element, elementsMap, nextWidth) => {
|
|
|
20580
20610
|
size: nextFontSize
|
|
20581
20611
|
};
|
|
20582
20612
|
};
|
|
20583
|
-
var resizeSingleTextElement = (element, elementsMap, transformHandleType, shouldResizeFromCenter2, pointerX, pointerY) => {
|
|
20613
|
+
var resizeSingleTextElement = (originalElements, element, elementsMap, transformHandleType, shouldResizeFromCenter2, pointerX, pointerY) => {
|
|
20584
20614
|
const [x1, y1, x2, y2, cx, cy] = getElementAbsoluteCoords(
|
|
20585
20615
|
element,
|
|
20586
20616
|
elementsMap
|
|
@@ -20594,17 +20624,19 @@ var resizeSingleTextElement = (element, elementsMap, transformHandleType, should
|
|
|
20594
20624
|
);
|
|
20595
20625
|
let scaleX = 0;
|
|
20596
20626
|
let scaleY = 0;
|
|
20597
|
-
if (transformHandleType
|
|
20598
|
-
|
|
20599
|
-
|
|
20600
|
-
|
|
20601
|
-
|
|
20602
|
-
|
|
20603
|
-
|
|
20604
|
-
|
|
20605
|
-
|
|
20606
|
-
|
|
20607
|
-
|
|
20627
|
+
if (transformHandleType !== "e" && transformHandleType !== "w") {
|
|
20628
|
+
if (transformHandleType.includes("e")) {
|
|
20629
|
+
scaleX = (rotatedX - x1) / (x2 - x1);
|
|
20630
|
+
}
|
|
20631
|
+
if (transformHandleType.includes("w")) {
|
|
20632
|
+
scaleX = (x2 - rotatedX) / (x2 - x1);
|
|
20633
|
+
}
|
|
20634
|
+
if (transformHandleType.includes("n")) {
|
|
20635
|
+
scaleY = (y2 - rotatedY) / (y2 - y1);
|
|
20636
|
+
}
|
|
20637
|
+
if (transformHandleType.includes("s")) {
|
|
20638
|
+
scaleY = (rotatedY - y1) / (y2 - y1);
|
|
20639
|
+
}
|
|
20608
20640
|
}
|
|
20609
20641
|
const scale = Math.max(scaleX, scaleY);
|
|
20610
20642
|
if (scale > 0) {
|
|
@@ -20659,6 +20691,89 @@ var resizeSingleTextElement = (element, elementsMap, transformHandleType, should
|
|
|
20659
20691
|
y: nextY
|
|
20660
20692
|
});
|
|
20661
20693
|
}
|
|
20694
|
+
if (transformHandleType === "e" || transformHandleType === "w") {
|
|
20695
|
+
const stateAtResizeStart = originalElements.get(element.id);
|
|
20696
|
+
const [x12, y12, x22, y22] = getResizedElementAbsoluteCoords(
|
|
20697
|
+
stateAtResizeStart,
|
|
20698
|
+
stateAtResizeStart.width,
|
|
20699
|
+
stateAtResizeStart.height,
|
|
20700
|
+
true
|
|
20701
|
+
);
|
|
20702
|
+
const startTopLeft = [x12, y12];
|
|
20703
|
+
const startBottomRight = [x22, y22];
|
|
20704
|
+
const startCenter = centerPoint(startTopLeft, startBottomRight);
|
|
20705
|
+
const rotatedPointer = rotatePoint(
|
|
20706
|
+
[pointerX, pointerY],
|
|
20707
|
+
startCenter,
|
|
20708
|
+
-stateAtResizeStart.angle
|
|
20709
|
+
);
|
|
20710
|
+
const [esx1, , esx2] = getResizedElementAbsoluteCoords(
|
|
20711
|
+
element,
|
|
20712
|
+
element.width,
|
|
20713
|
+
element.height,
|
|
20714
|
+
true
|
|
20715
|
+
);
|
|
20716
|
+
const boundsCurrentWidth = esx2 - esx1;
|
|
20717
|
+
const atStartBoundsWidth = startBottomRight[0] - startTopLeft[0];
|
|
20718
|
+
const minWidth = getMinTextElementWidth(
|
|
20719
|
+
getFontString({
|
|
20720
|
+
fontSize: element.fontSize,
|
|
20721
|
+
fontFamily: element.fontFamily
|
|
20722
|
+
}),
|
|
20723
|
+
element.lineHeight
|
|
20724
|
+
);
|
|
20725
|
+
let scaleX2 = atStartBoundsWidth / boundsCurrentWidth;
|
|
20726
|
+
if (transformHandleType.includes("e")) {
|
|
20727
|
+
scaleX2 = (rotatedPointer[0] - startTopLeft[0]) / boundsCurrentWidth;
|
|
20728
|
+
}
|
|
20729
|
+
if (transformHandleType.includes("w")) {
|
|
20730
|
+
scaleX2 = (startBottomRight[0] - rotatedPointer[0]) / boundsCurrentWidth;
|
|
20731
|
+
}
|
|
20732
|
+
const newWidth = element.width * scaleX2 < minWidth ? minWidth : element.width * scaleX2;
|
|
20733
|
+
const text = wrapText(
|
|
20734
|
+
element.originalText,
|
|
20735
|
+
getFontString(element),
|
|
20736
|
+
Math.abs(newWidth)
|
|
20737
|
+
);
|
|
20738
|
+
const metrics = measureText(
|
|
20739
|
+
text,
|
|
20740
|
+
getFontString(element),
|
|
20741
|
+
element.lineHeight
|
|
20742
|
+
);
|
|
20743
|
+
const eleNewHeight = metrics.height;
|
|
20744
|
+
const [newBoundsX1, newBoundsY1, newBoundsX2, newBoundsY2] = getResizedElementAbsoluteCoords(
|
|
20745
|
+
stateAtResizeStart,
|
|
20746
|
+
newWidth,
|
|
20747
|
+
eleNewHeight,
|
|
20748
|
+
true
|
|
20749
|
+
);
|
|
20750
|
+
const newBoundsWidth = newBoundsX2 - newBoundsX1;
|
|
20751
|
+
const newBoundsHeight = newBoundsY2 - newBoundsY1;
|
|
20752
|
+
let newTopLeft = [...startTopLeft];
|
|
20753
|
+
if (["n", "w", "nw"].includes(transformHandleType)) {
|
|
20754
|
+
newTopLeft = [
|
|
20755
|
+
startBottomRight[0] - Math.abs(newBoundsWidth),
|
|
20756
|
+
startTopLeft[1]
|
|
20757
|
+
];
|
|
20758
|
+
}
|
|
20759
|
+
const angle = stateAtResizeStart.angle;
|
|
20760
|
+
const rotatedTopLeft = rotatePoint(newTopLeft, startCenter, angle);
|
|
20761
|
+
const newCenter = [
|
|
20762
|
+
newTopLeft[0] + Math.abs(newBoundsWidth) / 2,
|
|
20763
|
+
newTopLeft[1] + Math.abs(newBoundsHeight) / 2
|
|
20764
|
+
];
|
|
20765
|
+
const rotatedNewCenter = rotatePoint(newCenter, startCenter, angle);
|
|
20766
|
+
newTopLeft = rotatePoint(rotatedTopLeft, rotatedNewCenter, -angle);
|
|
20767
|
+
const resizedElement = {
|
|
20768
|
+
width: Math.abs(newWidth),
|
|
20769
|
+
height: Math.abs(metrics.height),
|
|
20770
|
+
x: newTopLeft[0],
|
|
20771
|
+
y: newTopLeft[1],
|
|
20772
|
+
text,
|
|
20773
|
+
autoResize: false
|
|
20774
|
+
};
|
|
20775
|
+
mutateElement(element, resizedElement);
|
|
20776
|
+
}
|
|
20662
20777
|
};
|
|
20663
20778
|
var resizeSingleElement = (originalElements, shouldMaintainAspectRatio2, element, elementsMap, transformHandleDirection, shouldResizeFromCenter2, pointerX, pointerY) => {
|
|
20664
20779
|
const stateAtResizeStart = originalElements.get(element.id);
|
|
@@ -21050,7 +21165,7 @@ var resizeMultipleElements = (originalElements, selectedElements, elementsMap, t
|
|
|
21050
21165
|
handleBindTextResize(element, elementsMap, transformHandleType, true);
|
|
21051
21166
|
}
|
|
21052
21167
|
}
|
|
21053
|
-
Scene_default.getScene(elementsAndUpdates[0].element)?.
|
|
21168
|
+
Scene_default.getScene(elementsAndUpdates[0].element)?.triggerUpdate();
|
|
21054
21169
|
};
|
|
21055
21170
|
var rotateMultipleElements = (originalElements, elements, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle2, centerX, centerY) => {
|
|
21056
21171
|
let centerAngle = 5 * Math.PI / 2 + Math.atan2(pointerY - centerY, pointerX - centerX);
|
|
@@ -21095,7 +21210,7 @@ var rotateMultipleElements = (originalElements, elements, elementsMap, pointerX,
|
|
|
21095
21210
|
);
|
|
21096
21211
|
}
|
|
21097
21212
|
});
|
|
21098
|
-
Scene_default.getScene(elements[0])?.
|
|
21213
|
+
Scene_default.getScene(elements[0])?.triggerUpdate();
|
|
21099
21214
|
};
|
|
21100
21215
|
var getResizeOffsetXY = (transformHandleType, selectedElements, elementsMap, x, y) => {
|
|
21101
21216
|
const [x1, y1, x2, y2] = selectedElements.length === 1 ? getElementAbsoluteCoords(selectedElements[0], elementsMap) : getCommonBounds(selectedElements);
|
|
@@ -21209,7 +21324,7 @@ var getDragOffsetXY = (selectedElements, x, y) => {
|
|
|
21209
21324
|
const [x1, y1] = getCommonBounds(selectedElements);
|
|
21210
21325
|
return [x - x1, y - y1];
|
|
21211
21326
|
};
|
|
21212
|
-
var dragNewElement = (draggingElement, elementType, originX, originY, x, y, width, height, shouldMaintainAspectRatio2, shouldResizeFromCenter2, widthAspectRatio, originOffset = null) => {
|
|
21327
|
+
var dragNewElement = (draggingElement, elementType, originX, originY, x, y, width, height, shouldMaintainAspectRatio2, shouldResizeFromCenter2, zoom, widthAspectRatio, originOffset = null) => {
|
|
21213
21328
|
if (shouldMaintainAspectRatio2 && draggingElement.type !== "selection") {
|
|
21214
21329
|
if (widthAspectRatio) {
|
|
21215
21330
|
height = width / widthAspectRatio;
|
|
@@ -21240,12 +21355,34 @@ var dragNewElement = (draggingElement, elementType, originX, originY, x, y, widt
|
|
|
21240
21355
|
newX = originX - width / 2;
|
|
21241
21356
|
newY = originY - height / 2;
|
|
21242
21357
|
}
|
|
21358
|
+
let textAutoResize = null;
|
|
21359
|
+
if (isTextElement(draggingElement)) {
|
|
21360
|
+
height = draggingElement.height;
|
|
21361
|
+
const minWidth = getMinTextElementWidth(
|
|
21362
|
+
getFontString({
|
|
21363
|
+
fontSize: draggingElement.fontSize,
|
|
21364
|
+
fontFamily: draggingElement.fontFamily
|
|
21365
|
+
}),
|
|
21366
|
+
draggingElement.lineHeight
|
|
21367
|
+
);
|
|
21368
|
+
width = Math.max(width, minWidth);
|
|
21369
|
+
if (Math.abs(x - originX) > TEXT_AUTOWRAP_THRESHOLD / zoom) {
|
|
21370
|
+
textAutoResize = {
|
|
21371
|
+
autoResize: false
|
|
21372
|
+
};
|
|
21373
|
+
}
|
|
21374
|
+
newY = originY;
|
|
21375
|
+
if (shouldResizeFromCenter2) {
|
|
21376
|
+
newX = originX - width / 2;
|
|
21377
|
+
}
|
|
21378
|
+
}
|
|
21243
21379
|
if (width !== 0 && height !== 0) {
|
|
21244
21380
|
mutateElement(draggingElement, {
|
|
21245
21381
|
x: newX + (originOffset?.x ?? 0),
|
|
21246
21382
|
y: newY + (originOffset?.y ?? 0),
|
|
21247
21383
|
width,
|
|
21248
|
-
height
|
|
21384
|
+
height,
|
|
21385
|
+
...textAutoResize
|
|
21249
21386
|
});
|
|
21250
21387
|
}
|
|
21251
21388
|
};
|
|
@@ -21289,7 +21426,7 @@ var parseFileContents = async (blob) => {
|
|
|
21289
21426
|
let contents;
|
|
21290
21427
|
if (blob.type === MIME_TYPES.png) {
|
|
21291
21428
|
try {
|
|
21292
|
-
return await (await import("./image-
|
|
21429
|
+
return await (await import("./image-J7S3ALXP.js")).decodePngMetadata(blob);
|
|
21293
21430
|
} catch (error) {
|
|
21294
21431
|
if (error.message === "INVALID") {
|
|
21295
21432
|
throw new ImageSceneDataError(
|
|
@@ -21316,7 +21453,7 @@ var parseFileContents = async (blob) => {
|
|
|
21316
21453
|
}
|
|
21317
21454
|
if (blob.type === MIME_TYPES.svg) {
|
|
21318
21455
|
try {
|
|
21319
|
-
return await (await import("./image-
|
|
21456
|
+
return await (await import("./image-J7S3ALXP.js")).decodeSvgMetadata({
|
|
21320
21457
|
svg: contents
|
|
21321
21458
|
});
|
|
21322
21459
|
} catch (error) {
|
|
@@ -22000,6 +22137,7 @@ export {
|
|
|
22000
22137
|
getBoundTextMaxHeight,
|
|
22001
22138
|
isMeasureTextSupported,
|
|
22002
22139
|
getDefaultLineHeight,
|
|
22140
|
+
getMinTextElementWidth,
|
|
22003
22141
|
getElementAbsoluteCoords,
|
|
22004
22142
|
getCommonBounds,
|
|
22005
22143
|
getDraggedElementsBounds,
|
|
@@ -22037,7 +22175,6 @@ export {
|
|
|
22037
22175
|
newMagicFrameElement,
|
|
22038
22176
|
newTextElement,
|
|
22039
22177
|
refreshTextDimensions,
|
|
22040
|
-
updateTextElement,
|
|
22041
22178
|
newFreeDrawElement,
|
|
22042
22179
|
newLinearElement,
|
|
22043
22180
|
newImageElement,
|
|
@@ -22189,4 +22326,4 @@ export {
|
|
|
22189
22326
|
getNormalizedZoom,
|
|
22190
22327
|
getStateForZoom
|
|
22191
22328
|
};
|
|
22192
|
-
//# sourceMappingURL=chunk-
|
|
22329
|
+
//# sourceMappingURL=chunk-VC7RRIDZ.js.map
|