@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.
Files changed (48) hide show
  1. package/CHANGELOG.md +61 -8
  2. package/README.md +1 -1
  3. package/dist/excalidraw-assets-dev/{image-7e0eecf06fd4ae95db83.js → image-4d82da8a5abfcee0a489.js} +1 -1
  4. package/dist/excalidraw.development.js +129 -64
  5. package/dist/excalidraw.production.min.js +1 -1
  6. package/dist/excalidraw.production.min.js.LICENSE.txt +22 -0
  7. package/package.json +1 -1
  8. package/types/actions/actionCanvas.d.ts +4 -2
  9. package/types/actions/manager.d.ts +3 -11
  10. package/types/actions/types.d.ts +2 -8
  11. package/types/appState.d.ts +10 -4
  12. package/types/clipboard.d.ts +1 -0
  13. package/types/components/Actions.d.ts +5 -2
  14. package/types/components/App.d.ts +21 -5
  15. package/types/components/DarkModeToggle.d.ts +3 -3
  16. package/types/components/InitializeApp.d.ts +2 -10
  17. package/types/components/LayerUI.d.ts +4 -1
  18. package/types/components/LibraryUnit.d.ts +3 -2
  19. package/types/components/MobileMenu.d.ts +4 -1
  20. package/types/components/ToolButton.d.ts +5 -2
  21. package/types/components/icons.d.ts +41 -40
  22. package/types/constants.d.ts +8 -0
  23. package/types/data/blob.d.ts +13 -2
  24. package/types/data/encode.d.ts +29 -1
  25. package/types/data/json.d.ts +1 -1
  26. package/types/element/collision.d.ts +2 -2
  27. package/types/element/dragElements.d.ts +1 -1
  28. package/types/element/index.d.ts +2 -1
  29. package/types/element/mutateElement.d.ts +1 -1
  30. package/types/element/newElement.d.ts +4 -1
  31. package/types/element/resizeElements.d.ts +3 -3
  32. package/types/element/typeChecks.d.ts +3 -1
  33. package/types/element/types.d.ts +16 -3
  34. package/types/keys.d.ts +4 -3
  35. package/types/packages/excalidraw/dist/excalidraw-assets-dev/image-4d82da8a5abfcee0a489.d.ts +0 -0
  36. package/types/packages/excalidraw/index.d.ts +1 -1
  37. package/types/packages/excalidraw/webpack.prod.config.d.ts +3 -1
  38. package/types/packages/utils.d.ts +1 -1
  39. package/types/renderer/renderElement.d.ts +3 -2
  40. package/types/renderer/renderScene.d.ts +3 -2
  41. package/types/scene/export.d.ts +2 -1
  42. package/types/scene/types.d.ts +3 -2
  43. package/types/shapes.d.ts +5 -1
  44. package/types/types.d.ts +29 -4
  45. package/types/utils.d.ts +1 -0
  46. package/types/zindex.d.ts +2 -2
  47. package/dist/excalidraw-assets-dev/image-bd6a627ff1bbdbae8366.js +0 -32
  48. 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, isResizeWithSidesSameLength: boolean, isResizeCenterPoint: boolean) => void;
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;
@@ -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>) => void;
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", isRotateWithDiscreteAngle: boolean, isResizeCenterPoint: boolean, shouldKeepSidesRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
6
- export declare const reshapeSingleTwoPointElement: (element: NonDeleted<ExcalidrawLinearElement>, resizeArrowDirection: "origin" | "end", isRotateWithDiscreteAngle: boolean, pointerX: number, pointerY: number) => void;
7
- export declare const resizeSingleElement: (stateAtResizeStart: NonDeletedExcalidrawElement, shouldKeepSidesRatio: boolean, element: NonDeletedExcalidrawElement, transformHandleDirection: TransformHandleDirection, isResizeFromCenter: boolean, pointerX: number, pointerY: number) => void;
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;
@@ -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 getResizeCenterPointKey: (event: MouseEvent | KeyboardEvent) => boolean;
60
- export declare const getResizeWithSidesSameLengthKey: (event: MouseEvent | KeyboardEvent) => boolean;
61
- export declare const getRotateWithDiscreteAngleKey: (event: MouseEvent | KeyboardEvent) => boolean;
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;
@@ -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";
@@ -44,7 +44,9 @@ export namespace module {
44
44
  } | {
45
45
  loader: string;
46
46
  options: {
47
- presets: string[];
47
+ presets: (string | (string | {
48
+ runtime: string;
49
+ })[])[];
48
50
  plugins: string[];
49
51
  transpileOnly?: undefined;
50
52
  configFile?: undefined;
@@ -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;
@@ -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];
@@ -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 { FileSystemHandle } from "./data/filesystem";
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: "light" | "dark";
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?: "dark" | "light";
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,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LEdBQUcsZ0ZBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSTtRQUMzQyxJQUFJLE9BQU8sQ0FBQztRQUVaLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLFNBQVM7Z0JBQ1osa0RBQWtEO2dCQUNsRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xGLE1BQU07WUFFUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztTQUNsRTtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixPQUFPLDZDQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtnQkFDL0QsRUFBRSxFQUFFLFFBQVE7YUFDYixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLE1BQU0sQ0FBQyxHQUFHO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZGF0YS9lbmNvZGUudHM/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
- }]);