@zsviczian/excalidraw 0.9.0-obsidian-13 → 0.9.0-obsidian-image-support-9
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/CHANGELOG.md +61 -8
- package/README.md +1 -1
- package/dist/excalidraw-assets-dev/{image-7e0eecf06fd4ae95db83.js → image-4d82da8a5abfcee0a489.js} +1 -1
- package/dist/excalidraw.development.js +129 -64
- package/dist/excalidraw.production.min.js +1 -1
- package/dist/excalidraw.production.min.js.LICENSE.txt +22 -0
- package/package.json +1 -1
- package/types/actions/actionCanvas.d.ts +4 -2
- package/types/actions/manager.d.ts +3 -11
- package/types/actions/types.d.ts +2 -8
- package/types/appState.d.ts +10 -4
- package/types/clipboard.d.ts +1 -0
- package/types/components/Actions.d.ts +5 -2
- package/types/components/App.d.ts +21 -5
- package/types/components/DarkModeToggle.d.ts +3 -3
- package/types/components/InitializeApp.d.ts +2 -10
- package/types/components/LayerUI.d.ts +4 -1
- package/types/components/LibraryUnit.d.ts +3 -2
- package/types/components/MobileMenu.d.ts +4 -1
- package/types/components/ToolButton.d.ts +5 -2
- package/types/components/icons.d.ts +41 -40
- package/types/constants.d.ts +8 -0
- package/types/data/blob.d.ts +13 -2
- package/types/data/encode.d.ts +29 -1
- package/types/data/json.d.ts +1 -1
- package/types/element/collision.d.ts +2 -2
- package/types/element/dragElements.d.ts +1 -1
- package/types/element/index.d.ts +2 -1
- package/types/element/mutateElement.d.ts +1 -1
- package/types/element/newElement.d.ts +4 -1
- package/types/element/resizeElements.d.ts +3 -3
- package/types/element/typeChecks.d.ts +3 -1
- package/types/element/types.d.ts +16 -3
- package/types/keys.d.ts +4 -3
- package/types/packages/excalidraw/dist/excalidraw-assets-dev/image-4d82da8a5abfcee0a489.d.ts +0 -0
- package/types/packages/excalidraw/index.d.ts +1 -1
- package/types/packages/excalidraw/webpack.prod.config.d.ts +3 -1
- package/types/packages/utils.d.ts +1 -1
- package/types/renderer/renderElement.d.ts +3 -2
- package/types/renderer/renderScene.d.ts +3 -2
- package/types/scene/export.d.ts +2 -1
- package/types/scene/types.d.ts +3 -2
- package/types/shapes.d.ts +5 -1
- package/types/types.d.ts +29 -4
- package/types/utils.d.ts +1 -0
- package/types/zindex.d.ts +2 -2
- package/dist/excalidraw-assets-dev/image-bd6a627ff1bbdbae8366.js +0 -32
- package/dist/excalidraw-assets-dev/vendor-ac67d7e09cdab8faffe3.js +0 -323
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as GA from "../ga";
|
|
2
|
-
import { NonDeletedExcalidrawElement, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawRectangleElement, ExcalidrawDiamondElement, ExcalidrawTextElement, ExcalidrawEllipseElement, NonDeleted } from "./types";
|
|
2
|
+
import { NonDeletedExcalidrawElement, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawRectangleElement, ExcalidrawDiamondElement, ExcalidrawTextElement, ExcalidrawEllipseElement, NonDeleted, ExcalidrawImageElement } from "./types";
|
|
3
3
|
import { Point } from "../types";
|
|
4
4
|
import { AppState } from "../types";
|
|
5
5
|
export declare const hitTest: (element: NonDeletedExcalidrawElement, appState: AppState, x: number, y: number) => boolean;
|
|
@@ -16,4 +16,4 @@ export declare const determineFocusPoint: (element: ExcalidrawBindableElement, f
|
|
|
16
16
|
export declare const intersectElementWithLine: (element: ExcalidrawBindableElement, a: readonly [number, number], b: readonly [number, number], gap?: number) => Point[];
|
|
17
17
|
export declare const getCircleIntersections: (center: readonly [number, number, number, number, number, number, number, number], radius: number, line: readonly [number, number, number, number, number, number, number, number]) => GA.Point[];
|
|
18
18
|
export declare const findFocusPointForEllipse: (ellipse: ExcalidrawEllipseElement, relativeDistance: number, point: readonly [number, number, number, number, number, number, number, number]) => readonly [number, number, number, number, number, number, number, number];
|
|
19
|
-
export declare const findFocusPointForRectangulars: (element: ExcalidrawRectangleElement | ExcalidrawDiamondElement | ExcalidrawTextElement, relativeDistance: number, point: readonly [number, number, number, number, number, number, number, number]) => readonly [number, number, number, number, number, number, number, number];
|
|
19
|
+
export declare const findFocusPointForRectangulars: (element: ExcalidrawRectangleElement | ExcalidrawImageElement | ExcalidrawDiamondElement | ExcalidrawTextElement, relativeDistance: number, point: readonly [number, number, number, number, number, number, number, number]) => readonly [number, number, number, number, number, number, number, number];
|
|
@@ -4,4 +4,4 @@ import { NonDeletedExcalidrawElement } from "./types";
|
|
|
4
4
|
import { PointerDownState } from "../types";
|
|
5
5
|
export declare const dragSelectedElements: (pointerDownState: PointerDownState, selectedElements: NonDeletedExcalidrawElement[], pointerX: number, pointerY: number, scene: Scene, lockDirection?: boolean, distanceX?: number, distanceY?: number) => void;
|
|
6
6
|
export declare const getDragOffsetXY: (selectedElements: NonDeletedExcalidrawElement[], x: number, y: number) => [number, number];
|
|
7
|
-
export declare const dragNewElement: (draggingElement: NonDeletedExcalidrawElement, elementType: typeof SHAPES[number]["value"], originX: number, originY: number, x: number, y: number, width: number, height: number,
|
|
7
|
+
export declare const dragNewElement: (draggingElement: NonDeletedExcalidrawElement, elementType: typeof SHAPES[number]["value"], originX: number, originY: number, x: number, y: number, width: number, height: number, shouldMaintainAspectRatio: boolean, shouldResizeFromCenter: boolean, widthAspectRatio?: number | null | undefined) => void;
|
package/types/element/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted } from "./types";
|
|
2
|
-
export { newElement, newTextElement, updateTextElement, newLinearElement, duplicateElement, } from "./newElement";
|
|
2
|
+
export { newElement, newTextElement, updateTextElement, newLinearElement, newImageElement, duplicateElement, } from "./newElement";
|
|
3
3
|
export { getElementAbsoluteCoords, getElementBounds, getCommonBounds, getDiamondPoints, getArrowheadPoints, getClosestElementBounds, } from "./bounds";
|
|
4
4
|
export { OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransformHandlesFromCoords, getTransformHandles, } from "./transformHandles";
|
|
5
5
|
export { hitTest, isHittingElementBoundingBoxWithoutHittingElement, } from "./collision";
|
|
@@ -18,5 +18,6 @@ export declare const getSceneVersion: (elements: readonly ExcalidrawElement[]) =
|
|
|
18
18
|
export declare const getVisibleElements: (elements: readonly ExcalidrawElement[]) => readonly NonDeletedExcalidrawElement[];
|
|
19
19
|
export declare const getNonDeletedElements: (elements: readonly ExcalidrawElement[]) => readonly NonDeletedExcalidrawElement[];
|
|
20
20
|
export declare const isNonDeletedElement: <T extends ExcalidrawElement>(element: T) => element is NonDeleted<T>;
|
|
21
|
+
export declare const clearElementsForDatabase: (elements: readonly ExcalidrawElement[]) => ExcalidrawElement[];
|
|
21
22
|
export declare const clearElementsForExport: (elements: readonly ExcalidrawElement[]) => ExcalidrawElement[];
|
|
22
23
|
export declare const clearElementsForLocalStorage: (elements: readonly ExcalidrawElement[]) => ExcalidrawElement[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExcalidrawElement } from "./types";
|
|
2
2
|
declare type ElementUpdate<TElement extends ExcalidrawElement> = Omit<Partial<TElement>, "id" | "version" | "versionNonce">;
|
|
3
|
-
export declare const mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement
|
|
3
|
+
export declare const mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, informMutation?: boolean) => TElement;
|
|
4
4
|
export declare const newElementWith: <TElement extends ExcalidrawElement>(element: TElement, updates: ElementUpdate<TElement>) => TElement;
|
|
5
5
|
/**
|
|
6
6
|
* Mutates element and updates `version` & `versionNonce`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ExcalidrawElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues } from "../element/types";
|
|
1
|
+
import { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues } from "../element/types";
|
|
2
2
|
import { AppState } from "../types";
|
|
3
3
|
declare type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted">, "width" | "height" | "angle" | "groupIds" | "boundElementIds" | "seed" | "version" | "versionNonce">;
|
|
4
4
|
export declare const newElement: (opts: {
|
|
@@ -28,6 +28,9 @@ export declare const newLinearElement: (opts: {
|
|
|
28
28
|
endArrowhead: Arrowhead | null;
|
|
29
29
|
points?: ExcalidrawLinearElement["points"];
|
|
30
30
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawLinearElement>;
|
|
31
|
+
export declare const newImageElement: (opts: {
|
|
32
|
+
type: ExcalidrawImageElement["type"];
|
|
33
|
+
} & ElementConstructorOpts) => NonDeleted<ExcalidrawImageElement>;
|
|
31
34
|
export declare const deepCopyElement: (val: any, depth?: number) => any;
|
|
32
35
|
/**
|
|
33
36
|
* Duplicate an element, often used in the alt-drag operation.
|
|
@@ -2,8 +2,8 @@ import { ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted } from
|
|
|
2
2
|
import { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
3
3
|
import { PointerDownState } from "../types";
|
|
4
4
|
export declare const normalizeAngle: (angle: number) => number;
|
|
5
|
-
export declare const transformElements: (pointerDownState: PointerDownState, transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], resizeArrowDirection: "origin" | "end",
|
|
6
|
-
export declare const reshapeSingleTwoPointElement: (element: NonDeleted<ExcalidrawLinearElement>, resizeArrowDirection: "origin" | "end",
|
|
7
|
-
export declare const resizeSingleElement: (stateAtResizeStart: NonDeletedExcalidrawElement,
|
|
5
|
+
export declare const transformElements: (pointerDownState: PointerDownState, transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], resizeArrowDirection: "origin" | "end", shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
|
|
6
|
+
export declare const reshapeSingleTwoPointElement: (element: NonDeleted<ExcalidrawLinearElement>, resizeArrowDirection: "origin" | "end", shouldRotateWithDiscreteAngle: boolean, pointerX: number, pointerY: number) => void;
|
|
7
|
+
export declare const resizeSingleElement: (stateAtResizeStart: NonDeletedExcalidrawElement, shouldMaintainAspectRatio: boolean, element: NonDeletedExcalidrawElement, transformHandleDirection: TransformHandleDirection, shouldResizeFromCenter: boolean, pointerX: number, pointerY: number) => void;
|
|
8
8
|
export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], x: number, y: number) => [number, number];
|
|
9
9
|
export declare const getResizeArrowDirection: (transformHandleType: MaybeTransformHandleType, element: NonDeleted<ExcalidrawLinearElement>) => "origin" | "end";
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { ExcalidrawElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawBindableElement, ExcalidrawGenericElement, ExcalidrawFreeDrawElement } from "./types";
|
|
1
|
+
import { ExcalidrawElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawBindableElement, ExcalidrawGenericElement, ExcalidrawFreeDrawElement, InitializedExcalidrawImageElement, ExcalidrawImageElement } from "./types";
|
|
2
2
|
export declare const isGenericElement: (element: ExcalidrawElement | null) => element is ExcalidrawGenericElement;
|
|
3
|
+
export declare const isInitializedImageElement: (element: ExcalidrawElement | null) => element is InitializedExcalidrawImageElement;
|
|
4
|
+
export declare const isImageElement: (element: ExcalidrawElement | null) => element is ExcalidrawImageElement;
|
|
3
5
|
export declare const isTextElement: (element: ExcalidrawElement | null) => element is ExcalidrawTextElement;
|
|
4
6
|
export declare const isFreeDrawElement: (element?: ExcalidrawElement | null | undefined) => element is ExcalidrawFreeDrawElement;
|
|
5
7
|
export declare const isFreeDrawElementType: (elementType: ExcalidrawElement["type"]) => boolean;
|
package/types/element/types.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Point } from "../types";
|
|
2
|
-
import { FONT_FAMILY } from "../constants";
|
|
2
|
+
import { FONT_FAMILY, THEME } from "../constants";
|
|
3
3
|
export declare type ChartType = "bar" | "line";
|
|
4
4
|
export declare type FillStyle = "hachure" | "cross-hatch" | "solid";
|
|
5
5
|
export declare type FontFamilyKeys = keyof typeof FONT_FAMILY;
|
|
6
6
|
export declare type FontFamilyValues = typeof FONT_FAMILY[FontFamilyKeys];
|
|
7
|
+
export declare type Theme = typeof THEME[keyof typeof THEME];
|
|
7
8
|
export declare type FontString = string & {
|
|
8
9
|
_brand: "fontString";
|
|
9
10
|
};
|
|
@@ -57,6 +58,15 @@ export declare type ExcalidrawDiamondElement = _ExcalidrawElementBase & {
|
|
|
57
58
|
export declare type ExcalidrawEllipseElement = _ExcalidrawElementBase & {
|
|
58
59
|
type: "ellipse";
|
|
59
60
|
};
|
|
61
|
+
export declare type ExcalidrawImageElement = _ExcalidrawElementBase & Readonly<{
|
|
62
|
+
type: "image";
|
|
63
|
+
fileId: FileId | null;
|
|
64
|
+
/** whether respective file is persisted */
|
|
65
|
+
status: "pending" | "saved" | "error";
|
|
66
|
+
/** X and Y scale factors <-1, 1>, used for image axis flipping */
|
|
67
|
+
scale: [number, number];
|
|
68
|
+
}>;
|
|
69
|
+
export declare type InitializedExcalidrawImageElement = MarkNonNullable<ExcalidrawImageElement, "fileId">;
|
|
60
70
|
/**
|
|
61
71
|
* These are elements that don't have any additional properties.
|
|
62
72
|
*/
|
|
@@ -66,7 +76,7 @@ export declare type ExcalidrawGenericElement = ExcalidrawSelectionElement | Exca
|
|
|
66
76
|
* no computed data. The list of all ExcalidrawElements should be shareable
|
|
67
77
|
* between peers and contain no state local to the peer.
|
|
68
78
|
*/
|
|
69
|
-
export declare type ExcalidrawElement = ExcalidrawGenericElement | ExcalidrawTextElement | ExcalidrawLinearElement | ExcalidrawFreeDrawElement;
|
|
79
|
+
export declare type ExcalidrawElement = ExcalidrawGenericElement | ExcalidrawTextElement | ExcalidrawLinearElement | ExcalidrawFreeDrawElement | ExcalidrawImageElement;
|
|
70
80
|
export declare type NonDeleted<TElement extends ExcalidrawElement> = TElement & {
|
|
71
81
|
isDeleted: false;
|
|
72
82
|
};
|
|
@@ -81,7 +91,7 @@ export declare type ExcalidrawTextElement = _ExcalidrawElementBase & Readonly<{
|
|
|
81
91
|
textAlign: TextAlign;
|
|
82
92
|
verticalAlign: VerticalAlign;
|
|
83
93
|
}>;
|
|
84
|
-
export declare type ExcalidrawBindableElement = ExcalidrawRectangleElement | ExcalidrawDiamondElement | ExcalidrawEllipseElement | ExcalidrawTextElement;
|
|
94
|
+
export declare type ExcalidrawBindableElement = ExcalidrawRectangleElement | ExcalidrawDiamondElement | ExcalidrawEllipseElement | ExcalidrawTextElement | ExcalidrawImageElement;
|
|
85
95
|
export declare type PointBinding = {
|
|
86
96
|
elementId: ExcalidrawBindableElement["id"];
|
|
87
97
|
focus: number;
|
|
@@ -104,4 +114,7 @@ export declare type ExcalidrawFreeDrawElement = _ExcalidrawElementBase & Readonl
|
|
|
104
114
|
simulatePressure: boolean;
|
|
105
115
|
lastCommittedPoint: Point | null;
|
|
106
116
|
}>;
|
|
117
|
+
export declare type FileId = string & {
|
|
118
|
+
_brand: "FileId";
|
|
119
|
+
};
|
|
107
120
|
export {};
|
package/types/keys.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare const KEYS: {
|
|
|
42
42
|
readonly D: "d";
|
|
43
43
|
readonly E: "e";
|
|
44
44
|
readonly G: "g";
|
|
45
|
+
readonly I: "i";
|
|
45
46
|
readonly L: "l";
|
|
46
47
|
readonly O: "o";
|
|
47
48
|
readonly P: "p";
|
|
@@ -56,6 +57,6 @@ export declare const KEYS: {
|
|
|
56
57
|
};
|
|
57
58
|
export declare type Key = keyof typeof KEYS;
|
|
58
59
|
export declare const isArrowKey: (key: string) => boolean;
|
|
59
|
-
export declare const
|
|
60
|
-
export declare const
|
|
61
|
-
export declare const
|
|
60
|
+
export declare const shouldResizeFromCenter: (event: MouseEvent | KeyboardEvent) => boolean;
|
|
61
|
+
export declare const shouldMaintainAspectRatio: (event: MouseEvent | KeyboardEvent) => boolean;
|
|
62
|
+
export declare const shouldRotateWithDiscreteAngle: (event: MouseEvent | KeyboardEvent) => boolean;
|
|
File without changes
|
|
@@ -10,4 +10,4 @@ export { getSceneVersion, getElementMap, isInvisiblySmallElement, } from "../../
|
|
|
10
10
|
export { defaultLang, languages } from "../../i18n";
|
|
11
11
|
export { restore, restoreAppState, restoreElements } from "../../data/restore";
|
|
12
12
|
export { exportToCanvas, exportToBlob, exportToSvg, serializeAsJSON, loadLibraryFromBlob, loadFromBlob, getFreeDrawSvgPath, } from "../../packages/utils";
|
|
13
|
-
export { FONT_FAMILY } from "../../constants";
|
|
13
|
+
export { FONT_FAMILY, THEME } from "../../constants";
|
|
@@ -9,7 +9,7 @@ declare type ExportOpts = {
|
|
|
9
9
|
scale: number;
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
|
-
export declare const exportToCanvas: ({ elements, appState, getDimensions, }: ExportOpts) => HTMLCanvasElement
|
|
12
|
+
export declare const exportToCanvas: ({ elements, appState, getDimensions, }: ExportOpts) => Promise<HTMLCanvasElement>;
|
|
13
13
|
export declare const exportToBlob: (opts: ExportOpts & {
|
|
14
14
|
mimeType?: string;
|
|
15
15
|
quality?: number;
|
|
@@ -3,10 +3,11 @@ import { RoughCanvas } from "roughjs/bin/canvas";
|
|
|
3
3
|
import { Drawable, Options } from "roughjs/bin/core";
|
|
4
4
|
import { RoughSVG } from "roughjs/bin/svg";
|
|
5
5
|
import { SceneState } from "../scene/types";
|
|
6
|
-
import { Zoom } from "../types";
|
|
6
|
+
import { AppState, Zoom } from "../types";
|
|
7
7
|
export interface ExcalidrawElementWithCanvas {
|
|
8
8
|
element: ExcalidrawElement | ExcalidrawTextElement;
|
|
9
9
|
canvas: HTMLCanvasElement;
|
|
10
|
+
theme: SceneState["theme"];
|
|
10
11
|
canvasZoom: Zoom["value"];
|
|
11
12
|
canvasOffsetX: number;
|
|
12
13
|
canvasOffsetY: number;
|
|
@@ -15,7 +16,7 @@ export declare const getShapeForElement: (element: ExcalidrawElement) => Drawabl
|
|
|
15
16
|
export declare const invalidateShapeForElement: (element: ExcalidrawElement) => boolean;
|
|
16
17
|
export declare const generateRoughOptions: (element: ExcalidrawElement, continuousPath?: boolean) => Options;
|
|
17
18
|
export declare const renderElement: (element: NonDeletedExcalidrawElement, rc: RoughCanvas, context: CanvasRenderingContext2D, renderOptimizations: boolean, sceneState: SceneState) => void;
|
|
18
|
-
export declare const renderElementToSvg: (element: NonDeletedExcalidrawElement, rsvg: RoughSVG, svgRoot: SVGElement, offsetX?: number | undefined, offsetY?: number | undefined) => void;
|
|
19
|
+
export declare const renderElementToSvg: (element: NonDeletedExcalidrawElement, rsvg: RoughSVG, svgRoot: SVGElement, files: AppState["files"], offsetX?: number | undefined, offsetY?: number | undefined) => void;
|
|
19
20
|
export declare const pathsCache: WeakMap<ExcalidrawFreeDrawElement, Path2D>;
|
|
20
21
|
export declare function generateFreeDrawShape(element: ExcalidrawFreeDrawElement): Path2D;
|
|
21
22
|
export declare function getFreeDrawPath2D(element: ExcalidrawFreeDrawElement): Path2D | undefined;
|
|
@@ -3,11 +3,12 @@ import { RoughSVG } from "roughjs/bin/svg";
|
|
|
3
3
|
import { AppState } from "../types";
|
|
4
4
|
import { NonDeletedExcalidrawElement } from "../element/types";
|
|
5
5
|
import { SceneState } from "../scene/types";
|
|
6
|
-
export declare const renderScene: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, selectionElement: NonDeletedExcalidrawElement | null, scale: number, rc: RoughCanvas, canvas: HTMLCanvasElement, sceneState: SceneState, { renderScrollbars, renderSelection, renderOptimizations, renderGrid, }?: {
|
|
6
|
+
export declare const renderScene: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, selectionElement: NonDeletedExcalidrawElement | null, scale: number, rc: RoughCanvas, canvas: HTMLCanvasElement, sceneState: SceneState, { renderScrollbars, renderSelection, renderOptimizations, renderGrid, isExport, }?: {
|
|
7
7
|
renderScrollbars?: boolean | undefined;
|
|
8
8
|
renderSelection?: boolean | undefined;
|
|
9
9
|
renderOptimizations?: boolean | undefined;
|
|
10
10
|
renderGrid?: boolean | undefined;
|
|
11
|
+
isExport?: boolean | undefined;
|
|
11
12
|
}) => {
|
|
12
13
|
atLeastOneVisibleElement: boolean;
|
|
13
14
|
scrollBars?: undefined;
|
|
@@ -15,7 +16,7 @@ export declare const renderScene: (elements: readonly NonDeletedExcalidrawElemen
|
|
|
15
16
|
atLeastOneVisibleElement: boolean;
|
|
16
17
|
scrollBars: import("../scene/types").ScrollBars | undefined;
|
|
17
18
|
};
|
|
18
|
-
export declare const renderSceneToSvg: (elements: readonly NonDeletedExcalidrawElement[], rsvg: RoughSVG, svgRoot: SVGElement, { offsetX, offsetY, }?: {
|
|
19
|
+
export declare const renderSceneToSvg: (elements: readonly NonDeletedExcalidrawElement[], rsvg: RoughSVG, svgRoot: SVGElement, files: AppState["files"], { offsetX, offsetY, }?: {
|
|
19
20
|
offsetX?: number | undefined;
|
|
20
21
|
offsetY?: number | undefined;
|
|
21
22
|
}) => void;
|
package/types/scene/export.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare const exportToCanvas: (elements: readonly NonDeletedExcalidrawEle
|
|
|
8
8
|
}, createCanvas?: (width: number, height: number) => {
|
|
9
9
|
canvas: HTMLCanvasElement;
|
|
10
10
|
scale: number;
|
|
11
|
-
}) => HTMLCanvasElement
|
|
11
|
+
}) => Promise<HTMLCanvasElement>;
|
|
12
12
|
export declare const exportToSvg: (elements: readonly NonDeletedExcalidrawElement[], appState: {
|
|
13
13
|
exportBackground: boolean;
|
|
14
14
|
exportPadding?: number;
|
|
@@ -16,5 +16,6 @@ export declare const exportToSvg: (elements: readonly NonDeletedExcalidrawElemen
|
|
|
16
16
|
viewBackgroundColor: string;
|
|
17
17
|
exportWithDarkMode?: boolean;
|
|
18
18
|
exportEmbedScene?: boolean;
|
|
19
|
+
files: AppState["files"];
|
|
19
20
|
}) => Promise<SVGSVGElement>;
|
|
20
21
|
export declare const getExportSize: (elements: readonly NonDeletedExcalidrawElement[], exportPadding: number, scale: number) => [number, number];
|
package/types/scene/types.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { ExcalidrawTextElement } from "../element/types";
|
|
2
|
-
import { Zoom } from "../types";
|
|
2
|
+
import { AppClassProperties, AppState, Zoom } from "../types";
|
|
3
3
|
export declare type SceneState = {
|
|
4
4
|
scrollX: number;
|
|
5
5
|
scrollY: number;
|
|
6
6
|
viewBackgroundColor: string | null;
|
|
7
|
-
exportWithDarkMode?: boolean;
|
|
8
7
|
zoom: Zoom;
|
|
9
8
|
shouldCacheIgnoreZoom: boolean;
|
|
10
9
|
remotePointerViewportCoords: {
|
|
@@ -25,6 +24,8 @@ export declare type SceneState = {
|
|
|
25
24
|
remotePointerUserStates: {
|
|
26
25
|
[id: string]: string;
|
|
27
26
|
};
|
|
27
|
+
theme: AppState["theme"];
|
|
28
|
+
imageCache: AppClassProperties["imageCache"];
|
|
28
29
|
};
|
|
29
30
|
export declare type SceneScroll = {
|
|
30
31
|
scrollX: number;
|
package/types/shapes.d.ts
CHANGED
|
@@ -31,5 +31,9 @@ export declare const SHAPES: readonly [{
|
|
|
31
31
|
readonly icon: JSX.Element;
|
|
32
32
|
readonly value: "text";
|
|
33
33
|
readonly key: "t";
|
|
34
|
+
}, {
|
|
35
|
+
readonly icon: JSX.Element;
|
|
36
|
+
readonly value: "image";
|
|
37
|
+
readonly key: "i";
|
|
34
38
|
}];
|
|
35
|
-
export declare const findShapeByKey: (key: string) => "line" | "selection" | "rectangle" | "diamond" | "ellipse" | "text" | "arrow" | "freedraw" | null;
|
|
39
|
+
export declare const findShapeByKey: (key: string) => "line" | "selection" | "rectangle" | "diamond" | "ellipse" | "image" | "text" | "arrow" | "freedraw" | null;
|
package/types/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, ExcalidrawTextElement } from "./element/types";
|
|
2
|
+
import { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, FileId, ExcalidrawTextElement, ExcalidrawImageElement, Theme } from "./element/types";
|
|
3
3
|
import { SHAPES } from "./shapes";
|
|
4
4
|
import { Point as RoughPoint } from "roughjs/bin/geometry";
|
|
5
5
|
import { LinearElementEditor } from "./element/linearElementEditor";
|
|
@@ -12,7 +12,8 @@ import { Language } from "./i18n";
|
|
|
12
12
|
import { ClipboardData } from "./clipboard";
|
|
13
13
|
import { isOverScrollBars } from "./scene";
|
|
14
14
|
import { MaybeTransformHandleType } from "./element/transformHandles";
|
|
15
|
-
import
|
|
15
|
+
import Library from "./data/library";
|
|
16
|
+
import type { FileSystemHandle } from "./data/filesystem";
|
|
16
17
|
export declare type Point = Readonly<RoughPoint>;
|
|
17
18
|
export declare type Collaborator = {
|
|
18
19
|
pointer?: {
|
|
@@ -28,7 +29,18 @@ export declare type Collaborator = {
|
|
|
28
29
|
stroke: string;
|
|
29
30
|
};
|
|
30
31
|
};
|
|
32
|
+
export declare type DataURL = string & {
|
|
33
|
+
_brand: "DataURL";
|
|
34
|
+
};
|
|
35
|
+
export declare type BinaryFileData = {
|
|
36
|
+
type: "image" | "other";
|
|
37
|
+
id: FileId;
|
|
38
|
+
dataURL: DataURL;
|
|
39
|
+
created: number;
|
|
40
|
+
};
|
|
41
|
+
export declare type BinaryFileMetadata = Omit<BinaryFileData, "dataURL">;
|
|
31
42
|
export declare type AppState = {
|
|
43
|
+
files: Record<ExcalidrawElement["id"], BinaryFileData>;
|
|
32
44
|
isLoading: boolean;
|
|
33
45
|
errorMessage: string | null;
|
|
34
46
|
draggingElement: NonDeletedExcalidrawElement | null;
|
|
@@ -82,7 +94,7 @@ export declare type AppState = {
|
|
|
82
94
|
showHelpDialog: boolean;
|
|
83
95
|
toastMessage: string | null;
|
|
84
96
|
zenModeEnabled: boolean;
|
|
85
|
-
theme:
|
|
97
|
+
theme: Theme;
|
|
86
98
|
gridSize: number | null;
|
|
87
99
|
viewModeEnabled: boolean;
|
|
88
100
|
/** top-most selected groups (i.e. does not include nested groups) */
|
|
@@ -108,6 +120,8 @@ export declare type AppState = {
|
|
|
108
120
|
shown: true;
|
|
109
121
|
data: Spreadsheet;
|
|
110
122
|
};
|
|
123
|
+
/** imageElement waiting to be placed on canvas */
|
|
124
|
+
pendingImageElement: NonDeleted<ExcalidrawImageElement> | null;
|
|
111
125
|
};
|
|
112
126
|
export declare type NormalizedZoomValue = number & {
|
|
113
127
|
_brand: "normalizedZoom";
|
|
@@ -165,7 +179,7 @@ export interface ExcalidrawProps {
|
|
|
165
179
|
zenModeEnabled?: boolean;
|
|
166
180
|
gridModeEnabled?: boolean;
|
|
167
181
|
libraryReturnUrl?: string;
|
|
168
|
-
theme?:
|
|
182
|
+
theme?: Theme;
|
|
169
183
|
name?: string;
|
|
170
184
|
renderCustomStats?: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState) => JSX.Element;
|
|
171
185
|
UIOptions?: UIOptions;
|
|
@@ -175,6 +189,7 @@ export interface ExcalidrawProps {
|
|
|
175
189
|
autoFocus?: boolean;
|
|
176
190
|
onBeforeTextEdit?: (textElement: ExcalidrawTextElement) => string;
|
|
177
191
|
onBeforeTextSubmit?: (textElement: ExcalidrawTextElement, textToSubmit: string, isDeleted: boolean) => string;
|
|
192
|
+
generateIdForFile?: (file: File) => string | Promise<string>;
|
|
178
193
|
}
|
|
179
194
|
export declare type SceneData = {
|
|
180
195
|
elements?: ImportedDataState["elements"];
|
|
@@ -213,6 +228,15 @@ export declare type AppProps = ExcalidrawProps & {
|
|
|
213
228
|
detectScroll: boolean;
|
|
214
229
|
handleKeyboardGlobally: boolean;
|
|
215
230
|
};
|
|
231
|
+
/** A subset of App class properties that we need to use elsewhere
|
|
232
|
+
* in the app, eg Manager. Factored out into a separate type to keep DRY. */
|
|
233
|
+
export declare type AppClassProperties = {
|
|
234
|
+
props: AppProps;
|
|
235
|
+
canvas: HTMLCanvasElement | null;
|
|
236
|
+
focusContainer(): void;
|
|
237
|
+
library: Library;
|
|
238
|
+
imageCache: Map<FileId, HTMLImageElement | Promise<HTMLImageElement>>;
|
|
239
|
+
};
|
|
216
240
|
export declare type PointerDownState = Readonly<{
|
|
217
241
|
origin: Readonly<{
|
|
218
242
|
x: number;
|
|
@@ -277,6 +301,7 @@ export declare type ExcalidrawImperativeAPI = {
|
|
|
277
301
|
refresh: InstanceType<typeof App>["refresh"];
|
|
278
302
|
importLibrary: InstanceType<typeof App>["importLibraryFromUrl"];
|
|
279
303
|
setToastMessage: InstanceType<typeof App>["setToastMessage"];
|
|
304
|
+
addFiles: (data: BinaryFileData[]) => void;
|
|
280
305
|
readyPromise: ResolvablePromise<ExcalidrawImperativeAPI>;
|
|
281
306
|
ready: true;
|
|
282
307
|
id: string;
|
package/types/utils.d.ts
CHANGED
|
@@ -92,3 +92,4 @@ export declare const getVersion: () => string;
|
|
|
92
92
|
export declare const supportsEmoji: () => boolean;
|
|
93
93
|
export declare const getNearestScrollableContainer: (element: HTMLElement) => HTMLElement | Document;
|
|
94
94
|
export declare const focusNearestParent: (element: HTMLInputElement) => void;
|
|
95
|
+
export declare const preventUnload: (event: BeforeUnloadEvent) => void;
|
package/types/zindex.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExcalidrawElement } from "./element/types";
|
|
2
2
|
import { AppState } from "./types";
|
|
3
|
-
export declare const moveOneLeft: (elements: readonly ExcalidrawElement[], appState: AppState) => (import("./element/types").ExcalidrawLinearElement | import("./element/types").ExcalidrawSelectionElement | import("./element/types").ExcalidrawRectangleElement | import("./element/types").ExcalidrawDiamondElement | import("./element/types").ExcalidrawEllipseElement | import("./element/types").ExcalidrawTextElement | import("./element/types").ExcalidrawFreeDrawElement)[];
|
|
4
|
-
export declare const moveOneRight: (elements: readonly ExcalidrawElement[], appState: AppState) => (import("./element/types").ExcalidrawLinearElement | import("./element/types").ExcalidrawSelectionElement | import("./element/types").ExcalidrawRectangleElement | import("./element/types").ExcalidrawDiamondElement | import("./element/types").ExcalidrawEllipseElement | import("./element/types").ExcalidrawTextElement | import("./element/types").ExcalidrawFreeDrawElement)[];
|
|
3
|
+
export declare const moveOneLeft: (elements: readonly ExcalidrawElement[], appState: AppState) => (import("./element/types").ExcalidrawLinearElement | import("./element/types").ExcalidrawSelectionElement | import("./element/types").ExcalidrawRectangleElement | import("./element/types").ExcalidrawDiamondElement | import("./element/types").ExcalidrawEllipseElement | import("./element/types").ExcalidrawImageElement | import("./element/types").ExcalidrawTextElement | import("./element/types").ExcalidrawFreeDrawElement)[];
|
|
4
|
+
export declare const moveOneRight: (elements: readonly ExcalidrawElement[], appState: AppState) => (import("./element/types").ExcalidrawLinearElement | import("./element/types").ExcalidrawSelectionElement | import("./element/types").ExcalidrawRectangleElement | import("./element/types").ExcalidrawDiamondElement | import("./element/types").ExcalidrawEllipseElement | import("./element/types").ExcalidrawImageElement | import("./element/types").ExcalidrawTextElement | import("./element/types").ExcalidrawFreeDrawElement)[];
|
|
5
5
|
export declare const moveAllLeft: (elements: readonly ExcalidrawElement[], appState: AppState) => readonly ExcalidrawElement[];
|
|
6
6
|
export declare const moveAllRight: (elements: readonly ExcalidrawElement[], appState: AppState) => readonly ExcalidrawElement[];
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
4
|
-
* This devtool is neither made for production nor for readable output files.
|
|
5
|
-
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
6
|
-
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
7
|
-
* or disable the default devtool with "devtool: false".
|
|
8
|
-
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
9
|
-
*/
|
|
10
|
-
(globalThis["webpackChunkExcalidraw"] = globalThis["webpackChunkExcalidraw"] || []).push([["image"],{
|
|
11
|
-
|
|
12
|
-
/***/ "../../data/encode.ts":
|
|
13
|
-
/*!****************************!*\
|
|
14
|
-
!*** ../../data/encode.ts ***!
|
|
15
|
-
\****************************/
|
|
16
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
17
|
-
|
|
18
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"toByteString\": () => (/* binding */ toByteString),\n/* harmony export */ \"stringToBase64\": () => (/* binding */ stringToBase64),\n/* harmony export */ \"base64ToString\": () => (/* binding */ base64ToString),\n/* harmony export */ \"encode\": () => (/* binding */ encode),\n/* harmony export */ \"decode\": () => (/* binding */ decode)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pako */ \"../../../node_modules/pako/index.js\");\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(pako__WEBPACK_IMPORTED_MODULE_1__);\n\r\n // -----------------------------------------------------------------------------\r\n// byte (binary) strings\r\n// -----------------------------------------------------------------------------\r\n// fast, Buffer-compatible implem\r\nconst toByteString = function (data) {\r\n return new Promise(function (resolve, reject) {\r\n const blob = typeof data === \"string\" ? new Blob([new TextEncoder().encode(data)]) : new Blob([data]);\r\n const reader = new FileReader();\r\n reader.onload = function (event) {\r\n if (!event.target || typeof event.target.result !== \"string\") {\r\n return reject(new Error(\"couldn't convert to byte string\"));\r\n }\r\n resolve(event.target.result);\r\n };\r\n reader.readAsBinaryString(blob);\r\n });\r\n};\r\nconst byteStringToArrayBuffer = function (byteString) {\r\n const buffer = new ArrayBuffer(byteString.length);\r\n const bufferView = new Uint8Array(buffer);\r\n for (let i = 0, len = byteString.length; i < len; i++) {\r\n bufferView[i] = byteString.charCodeAt(i);\r\n }\r\n return buffer;\r\n};\r\nconst byteStringToString = function (byteString) {\r\n return new TextDecoder(\"utf-8\").decode(byteStringToArrayBuffer(byteString));\r\n}; // -----------------------------------------------------------------------------\r\n// base64\r\n// -----------------------------------------------------------------------------\r\n/**\r\n * @param isByteString set to true if already byte string to prevent bloat\r\n * due to reencoding\r\n */\r\nconst stringToBase64 = /*#__PURE__*/ function () {\r\n var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* (str, isByteString = false) {\r\n return isByteString ? btoa(str) : btoa(yield toByteString(str));\r\n });\r\n return function stringToBase64(_x) {\r\n return _ref.apply(this, arguments);\r\n };\r\n}(); // async to align with stringToBase64\r\nconst base64ToString = /*#__PURE__*/ function () {\r\n var _ref2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* (base64, isByteString = false) {\r\n return isByteString ? atob(base64) : byteStringToString(atob(base64));\r\n });\r\n return function base64ToString(_x2) {\r\n return _ref2.apply(this, arguments);\r\n };\r\n}(); // -----------------------------------------------------------------------------\r\n// text encoding\r\n// -----------------------------------------------------------------------------\r\n/**\r\n * Encodes (and potentially compresses via zlib) text to byte string\r\n */\r\nconst encode = /*#__PURE__*/ function () {\r\n var _ref3 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* ({ text, compress }) {\r\n let deflated;\r\n if (compress !== false) {\r\n try {\r\n deflated = yield toByteString((0,pako__WEBPACK_IMPORTED_MODULE_1__.deflate)(text));\r\n }\r\n catch (error) {\r\n console.error(\"encode: cannot deflate\", error);\r\n }\r\n }\r\n return {\r\n version: \"1\",\r\n encoding: \"bstring\",\r\n compressed: !!deflated,\r\n encoded: deflated || (yield toByteString(text))\r\n };\r\n });\r\n return function encode(_x3) {\r\n return _ref3.apply(this, arguments);\r\n };\r\n}();\r\nconst decode = /*#__PURE__*/ function () {\r\n var _ref4 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* (data) {\r\n let decoded;\r\n switch (data.encoding) {\r\n case \"bstring\":\r\n // if compressed, do not double decode the bstring\r\n decoded = data.compressed ? data.encoded : yield byteStringToString(data.encoded);\r\n break;\r\n default:\r\n throw new Error(`decode: unknown encoding \"${data.encoding}\"`);\r\n }\r\n if (data.compressed) {\r\n return (0,pako__WEBPACK_IMPORTED_MODULE_1__.inflate)(new Uint8Array(byteStringToArrayBuffer(decoded)), {\r\n to: \"string\"\r\n });\r\n }\r\n return decoded;\r\n });\r\n return function decode(_x4) {\r\n return _ref4.apply(this, arguments);\r\n };\r\n}();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZGF0YS9lbmNvZGUudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBd0U7QUFDaEMsQ0FBQyxnRkFBZ0Y7QUFDekgsd0JBQXdCO0FBQ3hCLGdGQUFnRjtBQUNoRixpQ0FBaUM7QUFFMUIsTUFBTSxZQUFZLEdBQUcsVUFBVSxJQUFJO0lBQ3hDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTTtRQUMxQyxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEcsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUVoQyxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsS0FBSztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDNUQsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyxVQUFVLFVBQVU7SUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckQsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUFHLFVBQVUsVUFBVTtJQUM3QyxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLGdGQUFnRjtBQUNuRixTQUFTO0FBQ1QsZ0ZBQWdGO0FBRWhGOzs7R0FHRztBQUdJLE1BQU0sY0FBYyxHQUFHLGFBQWE7SUFDekMsSUFBSSxJQUFJLEdBQUcsZ0ZBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksR0FBRyxLQUFLO1FBQy9ELE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLGNBQWMsQ0FBQyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7QUFFbkMsTUFBTSxjQUFjLEdBQUcsYUFBYTtJQUN6QyxJQUFJLEtBQUssR0FBRyxnRkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxHQUFHLEtBQUs7UUFDbkUsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsY0FBYyxDQUFDLEdBQUc7UUFDaEMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7QUFDSixDQUFDLEVBQUUsQ0FBQyxDQUFDLGdGQUFnRjtBQUNyRixnQkFBZ0I7QUFDaEIsZ0ZBQWdGO0FBRWhGOztHQUVHO0FBQ0ksTUFBTSxNQUFNLEdBQUcsYUFBYTtJQUNqQyxJQUFJLEtBQUssR0FBRyxnRkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUN2QyxJQUFJLEVBQ0osUUFBUSxFQUNUO1FBQ0MsSUFBSSxRQUFRLENBQUM7UUFFYixJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDdEIsSUFBSTtnQkFDRixRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsNkNBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzlDO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRDtTQUNGO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFHO1lBQ1osUUFBUSxFQUFFLFNBQVM7WUFDbkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3RCLE9BQU8sRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsTUFBTSxDQUFDLEdBQUc7UUFDeEIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7QUFDSixDQUFDLEVBQUUsQ0FBQztBQUNHLE1BQU0sTUFBTSxHQUFHLGFBQWE7SUFDakMsSUFBSSxLQUFLLEdBQUcsZ0ZBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSTtRQUMzQyxJQUFJLE9BQU8sQ0FBQztRQUVaLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLFNBQVM7Z0JBQ1osa0RBQWtEO2dCQUNsRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xGLE1BQU07WUFFUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztTQUNsRTtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixPQUFPLDZDQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtnQkFDL0QsRUFBRSxFQUFFLFFBQVE7YUFDYixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLE1BQU0sQ0FBQyxHQUFHO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZGF0YS9lbmNvZGUudHM/NmZjYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiO1xuaW1wb3J0IHsgZGVmbGF0ZSwgaW5mbGF0ZSB9IGZyb20gXCJwYWtvXCI7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBieXRlIChiaW5hcnkpIHN0cmluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBmYXN0LCBCdWZmZXItY29tcGF0aWJsZSBpbXBsZW1cblxuZXhwb3J0IGNvbnN0IHRvQnl0ZVN0cmluZyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgYmxvYiA9IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gbmV3IEJsb2IoW25ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKV0pIDogbmV3IEJsb2IoW2RhdGFdKTtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFldmVudC50YXJnZXQgfHwgdHlwZW9mIGV2ZW50LnRhcmdldC5yZXN1bHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJjb3VsZG4ndCBjb252ZXJ0IHRvIGJ5dGUgc3RyaW5nXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShldmVudC50YXJnZXQucmVzdWx0KTtcbiAgICB9O1xuXG4gICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhibG9iKTtcbiAgfSk7XG59O1xuXG5jb25zdCBieXRlU3RyaW5nVG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChieXRlU3RyaW5nKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gIGNvbnN0IGJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBieXRlU3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYnVmZmVyVmlld1tpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXI7XG59O1xuXG5jb25zdCBieXRlU3RyaW5nVG9TdHJpbmcgPSBmdW5jdGlvbiAoYnl0ZVN0cmluZykge1xuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKFwidXRmLThcIikuZGVjb2RlKGJ5dGVTdHJpbmdUb0FycmF5QnVmZmVyKGJ5dGVTdHJpbmcpKTtcbn07IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBiYXNlNjRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQHBhcmFtIGlzQnl0ZVN0cmluZyBzZXQgdG8gdHJ1ZSBpZiBhbHJlYWR5IGJ5dGUgc3RyaW5nIHRvIHByZXZlbnQgYmxvYXRcbiAqICBkdWUgdG8gcmVlbmNvZGluZ1xuICovXG5cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1RvQmFzZTY0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKHN0ciwgaXNCeXRlU3RyaW5nID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaXNCeXRlU3RyaW5nID8gYnRvYShzdHIpIDogYnRvYSh5aWVsZCB0b0J5dGVTdHJpbmcoc3RyKSk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBzdHJpbmdUb0Jhc2U2NChfeCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7IC8vIGFzeW5jIHRvIGFsaWduIHdpdGggc3RyaW5nVG9CYXNlNjRcblxuZXhwb3J0IGNvbnN0IGJhc2U2NFRvU3RyaW5nID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChiYXNlNjQsIGlzQnl0ZVN0cmluZyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGlzQnl0ZVN0cmluZyA/IGF0b2IoYmFzZTY0KSA6IGJ5dGVTdHJpbmdUb1N0cmluZyhhdG9iKGJhc2U2NCkpO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gYmFzZTY0VG9TdHJpbmcoX3gyKSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB0ZXh0IGVuY29kaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEVuY29kZXMgKGFuZCBwb3RlbnRpYWxseSBjb21wcmVzc2VzIHZpYSB6bGliKSB0ZXh0IHRvIGJ5dGUgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNvZGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKHtcbiAgICB0ZXh0LFxuICAgIGNvbXByZXNzXG4gIH0pIHtcbiAgICBsZXQgZGVmbGF0ZWQ7XG5cbiAgICBpZiAoY29tcHJlc3MgIT09IGZhbHNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkZWZsYXRlZCA9IHlpZWxkIHRvQnl0ZVN0cmluZyhkZWZsYXRlKHRleHQpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlbmNvZGU6IGNhbm5vdCBkZWZsYXRlXCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogXCIxXCIsXG4gICAgICBlbmNvZGluZzogXCJic3RyaW5nXCIsXG4gICAgICBjb21wcmVzc2VkOiAhIWRlZmxhdGVkLFxuICAgICAgZW5jb2RlZDogZGVmbGF0ZWQgfHwgKHlpZWxkIHRvQnl0ZVN0cmluZyh0ZXh0KSlcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gZW5jb2RlKF94Mykge1xuICAgIHJldHVybiBfcmVmMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuZXhwb3J0IGNvbnN0IGRlY29kZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmNCA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoZGF0YSkge1xuICAgIGxldCBkZWNvZGVkO1xuXG4gICAgc3dpdGNoIChkYXRhLmVuY29kaW5nKSB7XG4gICAgICBjYXNlIFwiYnN0cmluZ1wiOlxuICAgICAgICAvLyBpZiBjb21wcmVzc2VkLCBkbyBub3QgZG91YmxlIGRlY29kZSB0aGUgYnN0cmluZ1xuICAgICAgICBkZWNvZGVkID0gZGF0YS5jb21wcmVzc2VkID8gZGF0YS5lbmNvZGVkIDogeWllbGQgYnl0ZVN0cmluZ1RvU3RyaW5nKGRhdGEuZW5jb2RlZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlY29kZTogdW5rbm93biBlbmNvZGluZyBcIiR7ZGF0YS5lbmNvZGluZ31cImApO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmNvbXByZXNzZWQpIHtcbiAgICAgIHJldHVybiBpbmZsYXRlKG5ldyBVaW50OEFycmF5KGJ5dGVTdHJpbmdUb0FycmF5QnVmZmVyKGRlY29kZWQpKSwge1xuICAgICAgICB0bzogXCJzdHJpbmdcIlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29kZWQ7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBkZWNvZGUoX3g0KSB7XG4gICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../data/encode.ts\n");
|
|
19
|
-
|
|
20
|
-
/***/ }),
|
|
21
|
-
|
|
22
|
-
/***/ "../../data/image.ts":
|
|
23
|
-
/*!***************************!*\
|
|
24
|
-
!*** ../../data/image.ts ***!
|
|
25
|
-
\***************************/
|
|
26
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
27
|
-
|
|
28
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getTEXtChunk\": () => (/* binding */ getTEXtChunk),\n/* harmony export */ \"encodePngMetadata\": () => (/* binding */ encodePngMetadata),\n/* harmony export */ \"decodePngMetadata\": () => (/* binding */ decodePngMetadata),\n/* harmony export */ \"encodeSvgMetadata\": () => (/* binding */ encodeSvgMetadata),\n/* harmony export */ \"decodeSvgMetadata\": () => (/* binding */ decodeSvgMetadata)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var png_chunks_extract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! png-chunks-extract */ \"../../../node_modules/png-chunks-extract/index.js\");\n/* harmony import */ var png_chunks_extract__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(png_chunks_extract__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var png_chunk_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! png-chunk-text */ \"../../../node_modules/png-chunk-text/index.js\");\n/* harmony import */ var png_chunks_encode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! png-chunks-encode */ \"../../../node_modules/png-chunks-encode/index.js\");\n/* harmony import */ var png_chunks_encode__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(png_chunks_encode__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _encode__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./encode */ \"../../data/encode.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n\r\n\r\n\r\n\r\n\r\n // -----------------------------------------------------------------------------\r\n// PNG\r\n// -----------------------------------------------------------------------------\r\nconst blobToArrayBuffer = function (blob) {\r\n if (\"arrayBuffer\" in blob) {\r\n return blob.arrayBuffer();\r\n } // Safari\r\n return new Promise(function (resolve, reject) {\r\n const reader = new FileReader();\r\n reader.onload = function (event) {\r\n var _event$target;\r\n if (!((_event$target = event.target) !== null && _event$target !== void 0 && _event$target.result)) {\r\n return reject(new Error(\"couldn't convert blob to ArrayBuffer\"));\r\n }\r\n resolve(event.target.result);\r\n };\r\n reader.readAsArrayBuffer(blob);\r\n });\r\n};\r\nconst getTEXtChunk = /*#__PURE__*/ function () {\r\n var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* (blob) {\r\n const chunks = png_chunks_extract__WEBPACK_IMPORTED_MODULE_1___default()(new Uint8Array(yield blobToArrayBuffer(blob)));\r\n const metadataChunk = chunks.find(function (chunk) {\r\n return chunk.name === \"tEXt\";\r\n });\r\n if (metadataChunk) {\r\n return png_chunk_text__WEBPACK_IMPORTED_MODULE_2__.decode(metadataChunk.data);\r\n }\r\n return null;\r\n });\r\n return function getTEXtChunk(_x) {\r\n return _ref.apply(this, arguments);\r\n };\r\n}();\r\nconst encodePngMetadata = /*#__PURE__*/ function () {\r\n var _ref2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* ({ blob, metadata }) {\r\n const chunks = png_chunks_extract__WEBPACK_IMPORTED_MODULE_1___default()(new Uint8Array(yield blobToArrayBuffer(blob)));\r\n const metadataChunk = png_chunk_text__WEBPACK_IMPORTED_MODULE_2__.encode(_constants__WEBPACK_IMPORTED_MODULE_5__.MIME_TYPES.excalidraw, JSON.stringify(yield (0,_encode__WEBPACK_IMPORTED_MODULE_4__.encode)({\r\n text: metadata,\r\n compress: true\r\n }))); // insert metadata before last chunk (iEND)\r\n chunks.splice(-1, 0, metadataChunk);\r\n return new Blob([png_chunks_encode__WEBPACK_IMPORTED_MODULE_3___default()(chunks)], {\r\n type: \"image/png\"\r\n });\r\n });\r\n return function encodePngMetadata(_x2) {\r\n return _ref2.apply(this, arguments);\r\n };\r\n}();\r\nconst decodePngMetadata = /*#__PURE__*/ function () {\r\n var _ref3 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* (blob) {\r\n const metadata = yield getTEXtChunk(blob);\r\n if ((metadata === null || metadata === void 0 ? void 0 : metadata.keyword) === _constants__WEBPACK_IMPORTED_MODULE_5__.MIME_TYPES.excalidraw) {\r\n try {\r\n const encodedData = JSON.parse(metadata.text);\r\n if (!(\"encoded\" in encodedData)) {\r\n // legacy, un-encoded scene JSON\r\n if (\"type\" in encodedData && encodedData.type === _constants__WEBPACK_IMPORTED_MODULE_5__.EXPORT_DATA_TYPES.excalidraw) {\r\n return metadata.text;\r\n }\r\n throw new Error(\"FAILED\");\r\n }\r\n return yield (0,_encode__WEBPACK_IMPORTED_MODULE_4__.decode)(encodedData);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n throw new Error(\"FAILED\");\r\n }\r\n }\r\n throw new Error(\"INVALID\");\r\n });\r\n return function decodePngMetadata(_x3) {\r\n return _ref3.apply(this, arguments);\r\n };\r\n}(); // -----------------------------------------------------------------------------\r\n// SVG\r\n// -----------------------------------------------------------------------------\r\nconst encodeSvgMetadata = /*#__PURE__*/ function () {\r\n var _ref4 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* ({ text }) {\r\n const base64 = yield (0,_encode__WEBPACK_IMPORTED_MODULE_4__.stringToBase64)(JSON.stringify(yield (0,_encode__WEBPACK_IMPORTED_MODULE_4__.encode)({\r\n text\r\n })), true\r\n /* is already byte string */\r\n );\r\n let metadata = \"\";\r\n metadata += `<!-- payload-type:${_constants__WEBPACK_IMPORTED_MODULE_5__.MIME_TYPES.excalidraw} -->`;\r\n metadata += `<!-- payload-version:2 -->`;\r\n metadata += \"<!-- payload-start -->\";\r\n metadata += base64;\r\n metadata += \"<!-- payload-end -->\";\r\n return metadata;\r\n });\r\n return function encodeSvgMetadata(_x4) {\r\n return _ref4.apply(this, arguments);\r\n };\r\n}();\r\nconst decodeSvgMetadata = /*#__PURE__*/ function () {\r\n var _ref5 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__.default)(function* ({ svg }) {\r\n if (svg.includes(`payload-type:${_constants__WEBPACK_IMPORTED_MODULE_5__.MIME_TYPES.excalidraw}`)) {\r\n const match = svg.match(/<!-- payload-start -->(.+?)<!-- payload-end -->/);\r\n if (!match) {\r\n throw new Error(\"INVALID\");\r\n }\r\n const versionMatch = svg.match(/<!-- payload-version:(\\d+) -->/);\r\n const version = (versionMatch === null || versionMatch === void 0 ? void 0 : versionMatch[1]) || \"1\";\r\n const isByteString = version !== \"1\";\r\n try {\r\n const json = yield (0,_encode__WEBPACK_IMPORTED_MODULE_4__.base64ToString)(match[1], isByteString);\r\n const encodedData = JSON.parse(json);\r\n if (!(\"encoded\" in encodedData)) {\r\n // legacy, un-encoded scene JSON\r\n if (\"type\" in encodedData && encodedData.type === _constants__WEBPACK_IMPORTED_MODULE_5__.EXPORT_DATA_TYPES.excalidraw) {\r\n return json;\r\n }\r\n throw new Error(\"FAILED\");\r\n }\r\n return yield (0,_encode__WEBPACK_IMPORTED_MODULE_4__.decode)(encodedData);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n throw new Error(\"FAILED\");\r\n }\r\n }\r\n throw new Error(\"INVALID\");\r\n });\r\n return function decodeSvgMetadata(_x5) {\r\n return _ref5.apply(this, arguments);\r\n };\r\n}();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUVILE9BQU8sU0FBUyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ25DLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZGF0YS9pbWFnZS50cz84Y2U5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI7XG5pbXBvcnQgZGVjb2RlUG5nIGZyb20gXCJwbmctY2h1bmtzLWV4dHJhY3RcIjtcbmltcG9ydCB0RVh0IGZyb20gXCJwbmctY2h1bmstdGV4dFwiO1xuaW1wb3J0IGVuY29kZVBuZyBmcm9tIFwicG5nLWNodW5rcy1lbmNvZGVcIjtcbmltcG9ydCB7IHN0cmluZ1RvQmFzZTY0LCBlbmNvZGUsIGRlY29kZSwgYmFzZTY0VG9TdHJpbmcgfSBmcm9tIFwiLi9lbmNvZGVcIjtcbmltcG9ydCB7IEVYUE9SVF9EQVRBX1RZUEVTLCBNSU1FX1RZUEVTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUE5HXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBibG9iVG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChibG9iKSB7XG4gIGlmIChcImFycmF5QnVmZmVyXCIgaW4gYmxvYikge1xuICAgIHJldHVybiBibG9iLmFycmF5QnVmZmVyKCk7XG4gIH0gLy8gU2FmYXJpXG5cblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX2V2ZW50JHRhcmdldDtcblxuICAgICAgaWYgKCEoKF9ldmVudCR0YXJnZXQgPSBldmVudC50YXJnZXQpICE9PSBudWxsICYmIF9ldmVudCR0YXJnZXQgIT09IHZvaWQgMCAmJiBfZXZlbnQkdGFyZ2V0LnJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJjb3VsZG4ndCBjb252ZXJ0IGJsb2IgdG8gQXJyYXlCdWZmZXJcIikpO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuICAgIH07XG5cbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRFWHRDaHVuayA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChibG9iKSB7XG4gICAgY29uc3QgY2h1bmtzID0gZGVjb2RlUG5nKG5ldyBVaW50OEFycmF5KHlpZWxkIGJsb2JUb0FycmF5QnVmZmVyKGJsb2IpKSk7XG4gICAgY29uc3QgbWV0YWRhdGFDaHVuayA9IGNodW5rcy5maW5kKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgcmV0dXJuIGNodW5rLm5hbWUgPT09IFwidEVYdFwiO1xuICAgIH0pO1xuXG4gICAgaWYgKG1ldGFkYXRhQ2h1bmspIHtcbiAgICAgIHJldHVybiB0RVh0LmRlY29kZShtZXRhZGF0YUNodW5rLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gZ2V0VEVYdENodW5rKF94KSB7XG4gICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcbmV4cG9ydCBjb25zdCBlbmNvZGVQbmdNZXRhZGF0YSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoe1xuICAgIGJsb2IsXG4gICAgbWV0YWRhdGFcbiAgfSkge1xuICAgIGNvbnN0IGNodW5rcyA9IGRlY29kZVBuZyhuZXcgVWludDhBcnJheSh5aWVsZCBibG9iVG9BcnJheUJ1ZmZlcihibG9iKSkpO1xuICAgIGNvbnN0IG1ldGFkYXRhQ2h1bmsgPSB0RVh0LmVuY29kZShNSU1FX1RZUEVTLmV4Y2FsaWRyYXcsIEpTT04uc3RyaW5naWZ5KHlpZWxkIGVuY29kZSh7XG4gICAgICB0ZXh0OiBtZXRhZGF0YSxcbiAgICAgIGNvbXByZXNzOiB0cnVlXG4gICAgfSkpKTsgLy8gaW5zZXJ0IG1ldGFkYXRhIGJlZm9yZSBsYXN0IGNodW5rIChpRU5EKVxuXG4gICAgY2h1bmtzLnNwbGljZSgtMSwgMCwgbWV0YWRhdGFDaHVuayk7XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtlbmNvZGVQbmcoY2h1bmtzKV0sIHtcbiAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCJcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGVuY29kZVBuZ01ldGFkYXRhKF94Mikge1xuICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuZXhwb3J0IGNvbnN0IGRlY29kZVBuZ01ldGFkYXRhID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYzID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChibG9iKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB5aWVsZCBnZXRURVh0Q2h1bmsoYmxvYik7XG5cbiAgICBpZiAoKG1ldGFkYXRhID09PSBudWxsIHx8IG1ldGFkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtZXRhZGF0YS5rZXl3b3JkKSA9PT0gTUlNRV9UWVBFUy5leGNhbGlkcmF3KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbmNvZGVkRGF0YSA9IEpTT04ucGFyc2UobWV0YWRhdGEudGV4dCk7XG5cbiAgICAgICAgaWYgKCEoXCJlbmNvZGVkXCIgaW4gZW5jb2RlZERhdGEpKSB7XG4gICAgICAgICAgLy8gbGVnYWN5LCB1bi1lbmNvZGVkIHNjZW5lIEpTT05cbiAgICAgICAgICBpZiAoXCJ0eXBlXCIgaW4gZW5jb2RlZERhdGEgJiYgZW5jb2RlZERhdGEudHlwZSA9PT0gRVhQT1JUX0RBVEFfVFlQRVMuZXhjYWxpZHJhdykge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhLnRleHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHlpZWxkIGRlY29kZShlbmNvZGVkRGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIklOVkFMSURcIik7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBkZWNvZGVQbmdNZXRhZGF0YShfeDMpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNWR1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IGVuY29kZVN2Z01ldGFkYXRhID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWY0ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qICh7XG4gICAgdGV4dFxuICB9KSB7XG4gICAgY29uc3QgYmFzZTY0ID0geWllbGQgc3RyaW5nVG9CYXNlNjQoSlNPTi5zdHJpbmdpZnkoeWllbGQgZW5jb2RlKHtcbiAgICAgIHRleHRcbiAgICB9KSksIHRydWVcbiAgICAvKiBpcyBhbHJlYWR5IGJ5dGUgc3RyaW5nICovXG4gICAgKTtcbiAgICBsZXQgbWV0YWRhdGEgPSBcIlwiO1xuICAgIG1ldGFkYXRhICs9IGA8IS0tIHBheWxvYWQtdHlwZToke01JTUVfVFlQRVMuZXhjYWxpZHJhd30gLS0+YDtcbiAgICBtZXRhZGF0YSArPSBgPCEtLSBwYXlsb2FkLXZlcnNpb246MiAtLT5gO1xuICAgIG1ldGFkYXRhICs9IFwiPCEtLSBwYXlsb2FkLXN0YXJ0IC0tPlwiO1xuICAgIG1ldGFkYXRhICs9IGJhc2U2NDtcbiAgICBtZXRhZGF0YSArPSBcIjwhLS0gcGF5bG9hZC1lbmQgLS0+XCI7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gZW5jb2RlU3ZnTWV0YWRhdGEoX3g0KSB7XG4gICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5leHBvcnQgY29uc3QgZGVjb2RlU3ZnTWV0YWRhdGEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjUgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKHtcbiAgICBzdmdcbiAgfSkge1xuICAgIGlmIChzdmcuaW5jbHVkZXMoYHBheWxvYWQtdHlwZToke01JTUVfVFlQRVMuZXhjYWxpZHJhd31gKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzdmcubWF0Y2goLzwhLS0gcGF5bG9hZC1zdGFydCAtLT4oLis/KTwhLS0gcGF5bG9hZC1lbmQgLS0+Lyk7XG5cbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSU5WQUxJRFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID0gc3ZnLm1hdGNoKC88IS0tIHBheWxvYWQtdmVyc2lvbjooXFxkKykgLS0+Lyk7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gKHZlcnNpb25NYXRjaCA9PT0gbnVsbCB8fCB2ZXJzaW9uTWF0Y2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZlcnNpb25NYXRjaFsxXSkgfHwgXCIxXCI7XG4gICAgICBjb25zdCBpc0J5dGVTdHJpbmcgPSB2ZXJzaW9uICE9PSBcIjFcIjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IHlpZWxkIGJhc2U2NFRvU3RyaW5nKG1hdGNoWzFdLCBpc0J5dGVTdHJpbmcpO1xuICAgICAgICBjb25zdCBlbmNvZGVkRGF0YSA9IEpTT04ucGFyc2UoanNvbik7XG5cbiAgICAgICAgaWYgKCEoXCJlbmNvZGVkXCIgaW4gZW5jb2RlZERhdGEpKSB7XG4gICAgICAgICAgLy8gbGVnYWN5LCB1bi1lbmNvZGVkIHNjZW5lIEpTT05cbiAgICAgICAgICBpZiAoXCJ0eXBlXCIgaW4gZW5jb2RlZERhdGEgJiYgZW5jb2RlZERhdGEudHlwZSA9PT0gRVhQT1JUX0RBVEFfVFlQRVMuZXhjYWxpZHJhdykge1xuICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHlpZWxkIGRlY29kZShlbmNvZGVkRGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIklOVkFMSURcIik7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBkZWNvZGVTdmdNZXRhZGF0YShfeDUpIHtcbiAgICByZXR1cm4gX3JlZjUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../data/image.ts\n");
|
|
29
|
-
|
|
30
|
-
/***/ })
|
|
31
|
-
|
|
32
|
-
}]);
|