@excalidraw/excalidraw 0.18.0-7b8a5f54c → 0.18.0-835eb8d
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/{chunk-CRKRRBMD.js → chunk-N4PQJPAH.js} +49 -60
- package/dist/dev/chunk-N4PQJPAH.js.map +7 -0
- package/dist/dev/{chunk-QF5FRM6O.js → chunk-PWQMCSHA.js} +12 -4
- package/dist/dev/chunk-PWQMCSHA.js.map +7 -0
- package/dist/dev/data/{image-IWGLHPIX.js → image-RT6RLBUE.js} +2 -2
- package/dist/dev/index.css +686 -501
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +2872 -1649
- package/dist/dev/index.js.map +4 -4
- package/dist/dev/locales/{en-SMAPCEOQ.js → en-V3NQTBPG.js} +2 -2
- package/dist/prod/{chunk-I4UNSFV6.js → chunk-GF46JCB3.js} +2 -2
- package/dist/prod/chunk-SVEJI6WL.js +4 -0
- package/dist/prod/data/{image-4SM4COIL.js → image-HPGPBQV2.js} +1 -1
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +19 -19
- package/dist/prod/locales/{en-TYY6KWIJ.js → en-LQE6K457.js} +1 -1
- package/dist/types/common/src/constants.d.ts +20 -4
- package/dist/types/common/src/utils.d.ts +3 -0
- package/dist/types/element/src/bounds.d.ts +1 -1
- package/dist/types/element/src/delta.d.ts +4 -4
- package/dist/types/element/src/index.d.ts +1 -0
- package/dist/types/element/src/positionElementsOnGrid.d.ts +2 -0
- package/dist/types/element/src/renderElement.d.ts +4 -1
- package/dist/types/element/src/store.d.ts +3 -2
- package/dist/types/element/src/textElement.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +6 -3
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +29 -15
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +12 -6
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +6 -3
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionExport.d.ts +18 -9
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionFrame.d.ts +8 -4
- package/dist/types/excalidraw/actions/actionGroup.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +3 -2
- package/dist/types/excalidraw/actions/actionLink.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionMenu.d.ts +6 -3
- package/dist/types/excalidraw/actions/actionNavigate.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionProperties.d.ts +48 -24
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionStyles.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/index.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +1 -1
- package/dist/types/excalidraw/appState.d.ts +1 -0
- package/dist/types/excalidraw/clipboard.d.ts +64 -1
- package/dist/types/excalidraw/components/Actions.d.ts +8 -1
- package/dist/types/excalidraw/components/App.d.ts +11 -9
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +2 -1
- package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
- package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +2 -1
- package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +2 -1
- package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
- package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +1 -1
- package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -0
- package/dist/types/excalidraw/components/TextField.d.ts +1 -0
- package/dist/types/excalidraw/components/icons.d.ts +6 -0
- package/dist/types/excalidraw/components/shapes.d.ts +129 -1
- package/dist/types/excalidraw/data/blob.d.ts +3 -7
- package/dist/types/excalidraw/data/types.d.ts +4 -1
- package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
- package/dist/types/excalidraw/types.d.ts +5 -1
- package/dist/types/math/src/segment.d.ts +1 -0
- package/package.json +5 -5
- package/dist/dev/chunk-CRKRRBMD.js.map +0 -7
- package/dist/dev/chunk-QF5FRM6O.js.map +0 -7
- package/dist/prod/chunk-HHV2PJKY.js +0 -4
- /package/dist/dev/data/{image-IWGLHPIX.js.map → image-RT6RLBUE.js.map} +0 -0
- /package/dist/dev/locales/{en-SMAPCEOQ.js.map → en-V3NQTBPG.js.map} +0 -0
|
@@ -137,7 +137,8 @@ var getDefaultAppState = () => {
|
|
|
137
137
|
croppingElementId: null,
|
|
138
138
|
searchMatches: null,
|
|
139
139
|
lockedMultiSelections: {},
|
|
140
|
-
activeLockedId: null
|
|
140
|
+
activeLockedId: null,
|
|
141
|
+
stylesPanelMode: "full"
|
|
141
142
|
};
|
|
142
143
|
};
|
|
143
144
|
var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
|
|
@@ -245,7 +246,8 @@ var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
|
|
|
245
246
|
croppingElementId: { browser: false, export: false, server: false },
|
|
246
247
|
searchMatches: { browser: false, export: false, server: false },
|
|
247
248
|
lockedMultiSelections: { browser: true, export: true, server: true },
|
|
248
|
-
activeLockedId: { browser: false, export: false, server: false }
|
|
249
|
+
activeLockedId: { browser: false, export: false, server: false },
|
|
250
|
+
stylesPanelMode: { browser: true, export: false, server: false }
|
|
249
251
|
});
|
|
250
252
|
var _clearAppStateForStorage = (appState, exportType) => {
|
|
251
253
|
const stateForExport = {};
|
|
@@ -529,8 +531,8 @@ import {
|
|
|
529
531
|
supported as nativeFileSystemSupported
|
|
530
532
|
} from "browser-fs-access";
|
|
531
533
|
import { EVENT, MIME_TYPES, debounce } from "@excalidraw/common";
|
|
532
|
-
var INPUT_CHANGE_INTERVAL_MS =
|
|
533
|
-
var fileOpen = (opts) => {
|
|
534
|
+
var INPUT_CHANGE_INTERVAL_MS = 5e3;
|
|
535
|
+
var fileOpen = async (opts) => {
|
|
534
536
|
const mimeTypes = opts.extensions?.reduce((mimeTypes2, type) => {
|
|
535
537
|
mimeTypes2.push(MIME_TYPES[type]);
|
|
536
538
|
return mimeTypes2;
|
|
@@ -541,7 +543,7 @@ var fileOpen = (opts) => {
|
|
|
541
543
|
}
|
|
542
544
|
return acc.concat(`.${ext}`);
|
|
543
545
|
}, []);
|
|
544
|
-
|
|
546
|
+
const files = await _fileOpen({
|
|
545
547
|
description: opts.description,
|
|
546
548
|
extensions,
|
|
547
549
|
mimeTypes,
|
|
@@ -579,6 +581,12 @@ var fileOpen = (opts) => {
|
|
|
579
581
|
};
|
|
580
582
|
}
|
|
581
583
|
});
|
|
584
|
+
if (Array.isArray(files)) {
|
|
585
|
+
return await Promise.all(
|
|
586
|
+
files.map((file) => normalizeFile(file))
|
|
587
|
+
);
|
|
588
|
+
}
|
|
589
|
+
return await normalizeFile(files);
|
|
582
590
|
};
|
|
583
591
|
var fileSave = (blob, opts) => {
|
|
584
592
|
return _fileSave(
|
|
@@ -637,12 +645,7 @@ var loadFromJSON = async (localAppState, localElements) => {
|
|
|
637
645
|
// gets resolved. Else, iOS users cannot open `.excalidraw` files.
|
|
638
646
|
// extensions: ["json", "excalidraw", "png", "svg"],
|
|
639
647
|
});
|
|
640
|
-
return loadFromBlob(
|
|
641
|
-
await normalizeFile(file),
|
|
642
|
-
localAppState,
|
|
643
|
-
localElements,
|
|
644
|
-
file.handle
|
|
645
|
-
);
|
|
648
|
+
return loadFromBlob(file, localAppState, localElements, file.handle);
|
|
646
649
|
};
|
|
647
650
|
var isValidExcalidrawData = (data) => {
|
|
648
651
|
return data?.type === EXPORT_DATA_TYPES.excalidraw && (!data.elements || Array.isArray(data.elements) && (!data.appState || typeof data.appState === "object"));
|
|
@@ -4923,7 +4926,7 @@ var restoreElement = (element, opts) => {
|
|
|
4923
4926
|
elbowed: true,
|
|
4924
4927
|
startBinding: repairBinding(element, element.startBinding),
|
|
4925
4928
|
endBinding: repairBinding(element, element.endBinding),
|
|
4926
|
-
fixedSegments: element.fixedSegments,
|
|
4929
|
+
fixedSegments: element.fixedSegments?.length && base.points.length >= 4 ? element.fixedSegments : null,
|
|
4927
4930
|
startIsSpecial: element.startIsSpecial,
|
|
4928
4931
|
endIsSpecial: element.endIsSpecial
|
|
4929
4932
|
}) : restoreElementWithProperties(element, base);
|
|
@@ -5219,7 +5222,7 @@ var parseFileContents = async (blob) => {
|
|
|
5219
5222
|
let contents;
|
|
5220
5223
|
if (blob.type === MIME_TYPES6.png) {
|
|
5221
5224
|
try {
|
|
5222
|
-
return await (await import("./data/image-
|
|
5225
|
+
return await (await import("./data/image-RT6RLBUE.js")).decodePngMetadata(blob);
|
|
5223
5226
|
} catch (error) {
|
|
5224
5227
|
if (error.message === "INVALID") {
|
|
5225
5228
|
throw new ImageSceneDataError(
|
|
@@ -5463,16 +5466,11 @@ var ImageURLToFile = async (imageUrl, filename = "") => {
|
|
|
5463
5466
|
}
|
|
5464
5467
|
throw new Error("Error: unsupported file type", { cause: "UNSUPPORTED" });
|
|
5465
5468
|
};
|
|
5466
|
-
var getFileFromEvent = async (event) => {
|
|
5467
|
-
const file = event.dataTransfer.files.item(0);
|
|
5468
|
-
const fileHandle = await getFileHandle(event);
|
|
5469
|
-
return { file: file ? await normalizeFile(file) : null, fileHandle };
|
|
5470
|
-
};
|
|
5471
5469
|
var getFileHandle = async (event) => {
|
|
5472
5470
|
if (nativeFileSystemSupported) {
|
|
5473
5471
|
try {
|
|
5474
|
-
const
|
|
5475
|
-
const handle = await
|
|
5472
|
+
const dataTransferItem = event instanceof DataTransferItem ? event : event.dataTransfer?.items?.[0];
|
|
5473
|
+
const handle = await dataTransferItem.getAsFileSystemHandle() || null;
|
|
5476
5474
|
return handle;
|
|
5477
5475
|
} catch (error) {
|
|
5478
5476
|
console.warn(error.name, error.message);
|
|
@@ -5481,61 +5479,52 @@ var getFileHandle = async (event) => {
|
|
|
5481
5479
|
}
|
|
5482
5480
|
return null;
|
|
5483
5481
|
};
|
|
5484
|
-
var getActualMimeTypeFromImage = (
|
|
5482
|
+
var getActualMimeTypeFromImage = async (file) => {
|
|
5485
5483
|
let mimeType = null;
|
|
5486
|
-
const
|
|
5487
|
-
|
|
5484
|
+
const leadingBytes = [
|
|
5485
|
+
...new Uint8Array(await blobToArrayBuffer(file.slice(0, 15)))
|
|
5486
|
+
].join(" ");
|
|
5487
|
+
const bytes = {
|
|
5488
5488
|
// https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header
|
|
5489
|
-
png:
|
|
5489
|
+
png: /^137 80 78 71 13 10 26 10\b/,
|
|
5490
5490
|
// https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure
|
|
5491
5491
|
// jpg is a bit wonky. Checking the first three bytes should be enough,
|
|
5492
5492
|
// but may yield false positives. (https://stackoverflow.com/a/23360709/927631)
|
|
5493
|
-
jpg:
|
|
5493
|
+
jpg: /^255 216 255\b/,
|
|
5494
5494
|
// https://en.wikipedia.org/wiki/GIF#Example_GIF_file
|
|
5495
|
-
gif:
|
|
5495
|
+
gif: /^71 73 70 56 57 97\b/,
|
|
5496
|
+
// 4 bytes for RIFF + 4 bytes for chunk size + WEBP identifier
|
|
5497
|
+
webp: /^82 73 70 70 \d+ \d+ \d+ \d+ 87 69 66 80 86 80 56\b/
|
|
5496
5498
|
};
|
|
5497
|
-
|
|
5498
|
-
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
return mimeType;
|
|
5499
|
+
for (const type of Object.keys(bytes)) {
|
|
5500
|
+
if (leadingBytes.match(bytes[type])) {
|
|
5501
|
+
mimeType = MIME_TYPES6[type];
|
|
5502
|
+
break;
|
|
5503
|
+
}
|
|
5504
|
+
}
|
|
5505
|
+
return mimeType || file.type || null;
|
|
5505
5506
|
};
|
|
5506
5507
|
var createFile = (blob, mimeType, name) => {
|
|
5507
5508
|
return new File([blob], name || "", {
|
|
5508
5509
|
type: mimeType
|
|
5509
5510
|
});
|
|
5510
5511
|
};
|
|
5512
|
+
var normalizedFileSymbol = Symbol("fileNormalized");
|
|
5511
5513
|
var normalizeFile = async (file) => {
|
|
5512
|
-
if (
|
|
5513
|
-
|
|
5514
|
-
|
|
5515
|
-
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
|
|
5520
|
-
|
|
5521
|
-
await blobToArrayBuffer(file),
|
|
5522
|
-
MIME_TYPES6.excalidraw,
|
|
5523
|
-
file.name
|
|
5524
|
-
);
|
|
5525
|
-
} else {
|
|
5526
|
-
const buffer = await blobToArrayBuffer(file);
|
|
5527
|
-
const mimeType = getActualMimeTypeFromImage(buffer);
|
|
5528
|
-
if (mimeType) {
|
|
5529
|
-
file = createFile(buffer, mimeType, file.name);
|
|
5530
|
-
}
|
|
5531
|
-
}
|
|
5532
|
-
} else if (isSupportedImageFile(file)) {
|
|
5533
|
-
const buffer = await blobToArrayBuffer(file);
|
|
5534
|
-
const mimeType = getActualMimeTypeFromImage(buffer);
|
|
5514
|
+
if (file[normalizedFileSymbol]) {
|
|
5515
|
+
return file;
|
|
5516
|
+
}
|
|
5517
|
+
if (file?.name?.endsWith(".excalidrawlib")) {
|
|
5518
|
+
file = createFile(file, MIME_TYPES6.excalidrawlib, file.name);
|
|
5519
|
+
} else if (file?.name?.endsWith(".excalidraw")) {
|
|
5520
|
+
file = createFile(file, MIME_TYPES6.excalidraw, file.name);
|
|
5521
|
+
} else if (!file.type || file.type?.startsWith("image/")) {
|
|
5522
|
+
const mimeType = await getActualMimeTypeFromImage(file);
|
|
5535
5523
|
if (mimeType && mimeType !== file.type) {
|
|
5536
|
-
file = createFile(
|
|
5524
|
+
file = createFile(file, mimeType, file.name);
|
|
5537
5525
|
}
|
|
5538
5526
|
}
|
|
5527
|
+
file[normalizedFileSymbol] = true;
|
|
5539
5528
|
return file;
|
|
5540
5529
|
};
|
|
5541
5530
|
var blobToArrayBuffer = (blob) => {
|
|
@@ -5670,8 +5659,8 @@ export {
|
|
|
5670
5659
|
resizeImageFile,
|
|
5671
5660
|
SVGStringToFile,
|
|
5672
5661
|
ImageURLToFile,
|
|
5673
|
-
|
|
5662
|
+
getFileHandle,
|
|
5674
5663
|
createFile,
|
|
5675
5664
|
normalizeFile
|
|
5676
5665
|
};
|
|
5677
|
-
//# sourceMappingURL=chunk-
|
|
5666
|
+
//# sourceMappingURL=chunk-N4PQJPAH.js.map
|