@zsviczian/excalidraw 0.16.1-obsidian-7 → 0.17.0-obsidian-1

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 (66) hide show
  1. package/dist/excalidraw.development.js +124 -80
  2. package/dist/excalidraw.production.min.js +1 -1
  3. package/dist/excalidraw.production.min.js.LICENSE.txt +1 -1
  4. package/main.js +7 -1
  5. package/package.json +1 -1
  6. package/types/actions/actionAddToLibrary.d.ts +27 -6
  7. package/types/actions/actionBoundText.d.ts +18 -4
  8. package/types/actions/actionCanvas.d.ts +118 -27
  9. package/types/actions/actionClipboard.d.ts +362 -18
  10. package/types/actions/actionDeleteSelected.d.ts +27 -6
  11. package/types/actions/actionElementLock.d.ts +18 -4
  12. package/types/actions/actionExport.d.ts +81 -18
  13. package/types/actions/actionFinalize.d.ts +18 -4
  14. package/types/actions/actionFrame.d.ts +27 -6
  15. package/types/actions/actionGroup.d.ts +21 -7
  16. package/types/actions/actionLinearEditor.d.ts +9 -2
  17. package/types/actions/actionMenu.d.ts +26 -19
  18. package/types/actions/actionProperties.d.ts +117 -26
  19. package/types/actions/actionSelectAll.d.ts +9 -2
  20. package/types/actions/actionStyles.d.ts +9 -2
  21. package/types/actions/actionToggleGridMode.d.ts +9 -2
  22. package/types/actions/actionToggleObjectsSnapMode.d.ts +9 -2
  23. package/types/actions/actionToggleStats.d.ts +9 -2
  24. package/types/actions/actionToggleViewMode.d.ts +9 -2
  25. package/types/actions/actionToggleZenMode.d.ts +9 -2
  26. package/types/actions/actionZindex.d.ts +2 -2
  27. package/types/actions/index.d.ts +1 -1
  28. package/types/actions/manager.d.ts +1 -1
  29. package/types/appState.d.ts +1 -1
  30. package/types/clipboard.d.ts +21 -3
  31. package/types/components/Actions.d.ts +3 -2
  32. package/types/components/App.d.ts +20 -12
  33. package/types/components/ContextMenu.d.ts +2 -1
  34. package/types/components/ImageExportDialog.d.ts +1 -1
  35. package/types/components/LayerUI.d.ts +1 -1
  36. package/types/components/MermaidToExcalidraw.d.ts +1 -1
  37. package/types/components/MobileMenu.d.ts +4 -3
  38. package/types/components/Modal.d.ts +3 -1
  39. package/types/constants.d.ts +7 -1
  40. package/types/data/index.d.ts +10 -2
  41. package/types/data/transform.d.ts +7 -3
  42. package/types/element/Hyperlink.d.ts +10 -3
  43. package/types/element/bounds.d.ts +11 -5
  44. package/types/element/embeddable.d.ts +10 -3
  45. package/types/element/linearElementEditor.d.ts +11 -3
  46. package/types/element/newElement.d.ts +3 -1
  47. package/types/element/resizeTest.d.ts +2 -1
  48. package/types/element/transformHandles.d.ts +2 -1
  49. package/types/element/typeChecks.d.ts +1 -1
  50. package/types/element/types.d.ts +1 -0
  51. package/types/errors.d.ts +5 -0
  52. package/types/frame.d.ts +12 -1
  53. package/types/hooks/useCreatePortalContainer.d.ts +6 -4
  54. package/types/math.d.ts +1 -0
  55. package/types/packages/bbox.d.ts +11 -0
  56. package/types/packages/excalidraw/index.d.ts +4 -3
  57. package/types/packages/excalidraw/webpack.preact.config.d.ts +170 -0
  58. package/types/packages/utils.d.ts +6 -3
  59. package/types/packages/withinBounds.d.ts +19 -0
  60. package/types/renderer/renderElement.d.ts +6 -1
  61. package/types/renderer/renderScene.d.ts +10 -5
  62. package/types/scene/Scene.d.ts +7 -2
  63. package/types/scene/export.d.ts +6 -6
  64. package/types/types.d.ts +29 -18
  65. package/types/utils.d.ts +8 -1
  66. package/types/zindex.d.ts +4 -4
@@ -2,8 +2,9 @@ import React from "react";
2
2
  import { RoughCanvas } from "roughjs/bin/canvas";
3
3
  import { ActionManager } from "../actions/manager";
4
4
  import { EXPORT_IMAGE_TYPES } from "../constants";
5
+ import { ExportedElements } from "../data";
5
6
  import { LinearElementEditor } from "../element/linearElementEditor";
6
- import { ExcalidrawElement, ExcalidrawLinearElement, NonDeleted, NonDeletedExcalidrawElement } from "../element/types";
7
+ import { ExcalidrawElement, ExcalidrawLinearElement, NonDeleted, NonDeletedExcalidrawElement, ExcalidrawFrameElement } from "../element/types";
7
8
  import History from "../history";
8
9
  import Scene from "../scene/Scene";
9
10
  import { AppClassProperties, AppProps, AppState, ExcalidrawImperativeAPI, BinaryFiles, LibraryItems, SceneData, Device, FrameNameBoundsCache, SidebarName, SidebarTabName, ToolType } from "../types";
@@ -19,11 +20,15 @@ export declare const ExcalidrawContainerContext: React.Context<{
19
20
  export declare const useApp: () => AppClassProperties;
20
21
  export declare const useAppProps: () => AppProps;
21
22
  export declare const useDevice: () => Readonly<{
22
- isSmScreen: boolean;
23
- isMobile: boolean;
23
+ viewport: {
24
+ isMobile: boolean;
25
+ isLandscape: boolean;
26
+ };
27
+ editor: {
28
+ isMobile: boolean;
29
+ canFitSidebar: boolean;
30
+ };
24
31
  isTouchScreen: boolean;
25
- canDeviceFitSidebar: boolean;
26
- isLandscape: boolean;
27
32
  }>;
28
33
  export declare const useExcalidrawContainer: () => {
29
34
  container: HTMLDivElement | null;
@@ -40,7 +45,6 @@ declare class App extends React.Component<AppProps, AppState> {
40
45
  unmounted: boolean;
41
46
  actionManager: ActionManager;
42
47
  device: Device;
43
- detachIsMobileMqHandler?: () => void;
44
48
  private excalidrawContainerRef;
45
49
  static defaultProps: Partial<AppProps>;
46
50
  scene: Scene;
@@ -222,7 +226,9 @@ declare class App extends React.Component<AppProps, AppState> {
222
226
  getSceneElementsIncludingDeleted: () => readonly ExcalidrawElement[];
223
227
  getSceneElements: () => readonly NonDeletedExcalidrawElement[];
224
228
  onInsertElements: (elements: readonly ExcalidrawElement[]) => void;
225
- onExportImage: (type: keyof typeof EXPORT_IMAGE_TYPES, elements: readonly NonDeletedExcalidrawElement[]) => Promise<void>;
229
+ onExportImage: (type: keyof typeof EXPORT_IMAGE_TYPES, elements: ExportedElements, opts: {
230
+ exportingFrame: ExcalidrawFrameElement | null;
231
+ }) => Promise<void>;
226
232
  private openEyeDropper;
227
233
  private syncActionResult;
228
234
  private onBlur;
@@ -235,7 +241,9 @@ declare class App extends React.Component<AppProps, AppState> {
235
241
  */
236
242
  private resetScene;
237
243
  private initializeScene;
238
- private refreshDeviceState;
244
+ private isMobileBreakpoint;
245
+ private refreshViewportBreakpoints;
246
+ private refreshEditorBreakpoints;
239
247
  componentDidMount(): Promise<void>;
240
248
  componentWillUnmount(): void;
241
249
  private onResize;
@@ -246,12 +254,10 @@ declare class App extends React.Component<AppProps, AppState> {
246
254
  private onScroll;
247
255
  private onCut;
248
256
  private onCopy;
249
- private cutAll;
250
- private copyAll;
251
257
  private static resetTapTwice;
252
258
  private onTouchStart;
253
259
  private onTouchEnd;
254
- pasteFromClipboard: (event: ClipboardEvent | null) => Promise<void>;
260
+ pasteFromClipboard: (event: ClipboardEvent) => Promise<void>;
255
261
  addElementsFromPasteOrLibrary: (opts: {
256
262
  elements: readonly ExcalidrawElement[];
257
263
  files: BinaryFiles | null;
@@ -273,7 +279,7 @@ declare class App extends React.Component<AppProps, AppState> {
273
279
  outline: boolean;
274
280
  clip: boolean;
275
281
  }> | ((prevState: AppState["frameRendering"]) => Partial<AppState["frameRendering"]>)) => void;
276
- togglePenMode: (force?: boolean) => void;
282
+ togglePenMode: (force: boolean | null) => void;
277
283
  onHandToolToggle: () => void;
278
284
  /**
279
285
  * Zooms on canvas viewport center
@@ -335,6 +341,7 @@ declare class App extends React.Component<AppProps, AppState> {
335
341
  private onKeyDown;
336
342
  private onWheel;
337
343
  private onKeyUp;
344
+ private isToolSupported;
338
345
  setActiveTool: (tool: (({
339
346
  type: Exclude<ToolType, "image">;
340
347
  } | {
@@ -346,6 +353,7 @@ declare class App extends React.Component<AppProps, AppState> {
346
353
  }) & {
347
354
  locked?: boolean;
348
355
  }) => void;
356
+ setOpenDialog: (dialogType: AppState["openDialog"]) => void;
349
357
  private setCursor;
350
358
  private resetCursor;
351
359
  /**
@@ -9,7 +9,8 @@ type ContextMenuProps = {
9
9
  items: ContextMenuItems;
10
10
  top: number;
11
11
  left: number;
12
+ onClose: (callback?: () => void) => void;
12
13
  };
13
14
  export declare const CONTEXT_MENU_SEPARATOR = "separator";
14
- export declare const ContextMenu: React.MemoExoticComponent<({ actionManager, items, top, left }: ContextMenuProps) => import("react/jsx-runtime").JSX.Element>;
15
+ export declare const ContextMenu: React.MemoExoticComponent<({ actionManager, items, top, left, onClose }: ContextMenuProps) => import("react/jsx-runtime").JSX.Element>;
15
16
  export {};
@@ -10,4 +10,4 @@ export declare const ImageExportDialog: ({ elements, appState, files, actionMana
10
10
  actionManager: ActionManager;
11
11
  onExportImage: AppClassProperties["onExportImage"];
12
12
  onCloseRequest: () => void;
13
- }) => import("react/jsx-runtime").JSX.Element | null;
13
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -14,7 +14,7 @@ interface LayerUIProps {
14
14
  elements: readonly NonDeletedExcalidrawElement[];
15
15
  onLockToggle: () => void;
16
16
  onHandToolToggle: () => void;
17
- onPenModeToggle: () => void;
17
+ onPenModeToggle: AppClassProperties["togglePenMode"];
18
18
  showExitZenModeBtn: boolean;
19
19
  langCode: Language["code"];
20
20
  renderTopRightUI?: ExcalidrawProps["renderTopRightUI"];
@@ -6,7 +6,7 @@ declare const MermaidToExcalidraw: ({ selectedElements, }: {
6
6
  selectedElements: readonly NonDeletedExcalidrawElement[];
7
7
  }) => import("react/jsx-runtime").JSX.Element;
8
8
  export default MermaidToExcalidraw;
9
- export declare const mermaidToExcalidraw: (mermaidDefinition: string, opts?: MermaidOptions) => Promise<{
9
+ export declare const mermaidToExcalidraw: (mermaidDefinition: string, opts?: MermaidOptions, forceSVG?: boolean) => Promise<{
10
10
  elements: ExcalidrawElement[];
11
11
  files: any;
12
12
  } | undefined>;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { AppClassProperties, AppState, Device, ExcalidrawProps, UIAppState } from "../types";
2
+ import { AppClassProperties, AppProps, AppState, Device, ExcalidrawProps, UIAppState } from "../types";
3
3
  import { ActionManager } from "../actions/manager";
4
4
  import { NonDeletedExcalidrawElement } from "../element/types";
5
5
  type MobileMenuProps = {
@@ -11,13 +11,14 @@ type MobileMenuProps = {
11
11
  elements: readonly NonDeletedExcalidrawElement[];
12
12
  onLockToggle: () => void;
13
13
  onHandToolToggle: () => void;
14
- onPenModeToggle: () => void;
14
+ onPenModeToggle: AppClassProperties["togglePenMode"];
15
15
  renderTopRightUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
16
16
  renderCustomStats?: ExcalidrawProps["renderCustomStats"];
17
17
  renderSidebars: () => JSX.Element | null;
18
18
  device: Device;
19
19
  renderWelcomeScreen: boolean;
20
+ UIOptions: AppProps["UIOptions"];
20
21
  app: AppClassProperties;
21
22
  };
22
- export declare const MobileMenu: ({ appState, elements, actionManager, setAppState, onLockToggle, onHandToolToggle, onPenModeToggle, renderTopRightUI, renderCustomStats, renderSidebars, device, renderWelcomeScreen, app, }: MobileMenuProps) => import("react/jsx-runtime").JSX.Element;
23
+ export declare const MobileMenu: ({ appState, elements, actionManager, setAppState, onLockToggle, onHandToolToggle, onPenModeToggle, renderTopRightUI, renderCustomStats, renderSidebars, device, renderWelcomeScreen, UIOptions, app, }: MobileMenuProps) => import("react/jsx-runtime").JSX.Element;
23
24
  export {};
@@ -9,5 +9,7 @@ export declare const Modal: React.FC<{
9
9
  labelledBy: string;
10
10
  theme?: AppState["theme"];
11
11
  closeOnClickOutside?: boolean;
12
- style: string;
12
+ style: {
13
+ [x: string]: string;
14
+ };
13
15
  }>;
@@ -87,6 +87,7 @@ export declare const FONT_FAMILY: {
87
87
  Helvetica: number;
88
88
  Cascadia: number;
89
89
  LocalFont: number;
90
+ Assistant: number;
90
91
  };
91
92
  export declare const THEME: {
92
93
  readonly LIGHT: "light";
@@ -104,6 +105,11 @@ export declare const FRAME_STYLE: {
104
105
  } | null;
105
106
  backgroundColor: string;
106
107
  radius: number;
108
+ nameOffsetY: number;
109
+ nameColorLightTheme: string;
110
+ nameColorDarkTheme: string;
111
+ nameFontSize: number;
112
+ nameLineHeight: number;
107
113
  };
108
114
  export declare const WINDOWS_EMOJI_FALLBACK_FONT = "Segoe UI Emoji";
109
115
  export declare const MIN_FONT_SIZE = 1;
@@ -125,6 +131,7 @@ export declare const IMAGE_MIME_TYPES: {
125
131
  readonly avif: "image/avif";
126
132
  readonly jfif: "image/jfif";
127
133
  };
134
+ export declare const ALLOWED_PASTE_MIME_TYPES: readonly ["text/plain", "text/html"];
128
135
  export declare const MIME_TYPES: {
129
136
  readonly svg: "image/svg+xml";
130
137
  readonly png: "image/png";
@@ -173,7 +180,6 @@ export declare const URL_HASH_KEYS: {
173
180
  readonly addLibrary: "addLibrary";
174
181
  };
175
182
  export declare const DEFAULT_UI_OPTIONS: AppProps["UIOptions"];
176
- export declare const MQ_SM_MAX_WIDTH = 640;
177
183
  export declare const MQ_MAX_WIDTH_PORTRAIT = 730;
178
184
  export declare const MQ_MAX_WIDTH_LANDSCAPE = 1000;
179
185
  export declare const MQ_MAX_HEIGHT_LANDSCAPE = 500;
@@ -1,13 +1,21 @@
1
- import { NonDeletedExcalidrawElement } from "../element/types";
1
+ import { ExcalidrawElement, ExcalidrawFrameElement, NonDeletedExcalidrawElement } from "../element/types";
2
2
  import { ExportType } from "../scene/types";
3
3
  import { AppState, BinaryFiles } from "../types";
4
4
  import { FileSystemHandle } from "./filesystem";
5
5
  export { loadFromBlob } from "./blob";
6
6
  export { loadFromJSON, saveAsJSON } from "./json";
7
- export declare const exportCanvas: (type: Omit<ExportType, "backend">, elements: readonly NonDeletedExcalidrawElement[], appState: AppState, files: BinaryFiles, { exportBackground, exportPadding, viewBackgroundColor, name, fileHandle, }: {
7
+ export type ExportedElements = readonly NonDeletedExcalidrawElement[] & {
8
+ _brand: "exportedElements";
9
+ };
10
+ export declare const prepareElementsForExport: (elements: readonly ExcalidrawElement[], { selectedElementIds }: Pick<AppState, "selectedElementIds">, exportSelectionOnly: boolean) => {
11
+ exportingFrame: ExcalidrawFrameElement | null;
12
+ exportedElements: ExportedElements;
13
+ };
14
+ export declare const exportCanvas: (type: Omit<ExportType, "backend">, elements: ExportedElements, appState: AppState, files: BinaryFiles, { exportBackground, exportPadding, viewBackgroundColor, name, fileHandle, exportingFrame, }: {
8
15
  exportBackground: boolean;
9
16
  exportPadding?: number | undefined;
10
17
  viewBackgroundColor: string;
11
18
  name: string;
12
19
  fileHandle?: FileSystemHandle | null | undefined;
20
+ exportingFrame: ExcalidrawFrameElement | null;
13
21
  }) => Promise<FileSystemHandle | null | undefined>;
@@ -52,7 +52,7 @@ export type ValidContainer = {
52
52
  verticalAlign?: VerticalAlign;
53
53
  } & MarkOptional<ElementConstructorOpts, "x" | "y">;
54
54
  } & ElementConstructorOpts;
55
- export type ExcalidrawElementSkeleton = Extract<Exclude<ExcalidrawElement, ExcalidrawSelectionElement>, ExcalidrawEmbeddableElement | ExcalidrawFreeDrawElement | ExcalidrawFrameElement> | ({
55
+ export type ExcalidrawElementSkeleton = Extract<Exclude<ExcalidrawElement, ExcalidrawSelectionElement>, ExcalidrawEmbeddableElement | ExcalidrawFreeDrawElement> | ({
56
56
  type: Extract<ExcalidrawLinearElement["type"], "line">;
57
57
  x: number;
58
58
  y: number;
@@ -67,7 +67,11 @@ export type ExcalidrawElementSkeleton = Extract<Exclude<ExcalidrawElement, Excal
67
67
  x: number;
68
68
  y: number;
69
69
  fileId: FileId;
70
- } & Partial<ExcalidrawImageElement>);
71
- export declare const convertToExcalidrawElements: (elements: ExcalidrawElementSkeleton[] | null, opts?: {
70
+ } & Partial<ExcalidrawImageElement>) | ({
71
+ type: "frame";
72
+ children: readonly ExcalidrawElement["id"][];
73
+ name?: string;
74
+ } & Partial<ExcalidrawFrameElement>);
75
+ export declare const convertToExcalidrawElements: (elementsSkeleton: ExcalidrawElementSkeleton[] | null, opts?: {
72
76
  regenerateIds: boolean;
73
77
  }) => ExcalidrawElement[];
@@ -89,7 +89,7 @@ export declare const actionLink: {
89
89
  name: string;
90
90
  tab?: string | undefined;
91
91
  } | null;
92
- openDialog: "imageExport" | "help" | "jsonExport" | null;
92
+ openDialog: "mermaid" | "imageExport" | "help" | "jsonExport" | null;
93
93
  defaultSidebarDockedPreference: boolean;
94
94
  lastPointerDownWith: import("./types").PointerType;
95
95
  selectedElementIds: Readonly<{
@@ -153,7 +153,14 @@ export declare const actionLink: {
153
153
  Regular: string;
154
154
  MajorGridFrequency?: number | undefined;
155
155
  };
156
- dynamicStyle: string;
156
+ dynamicStyle: {
157
+ [x: string]: string;
158
+ };
159
+ frameColor: {
160
+ stroke: string;
161
+ fill: string;
162
+ nameColor: string;
163
+ };
157
164
  invertBindingBehaviour: boolean;
158
165
  selectedLinearElement: import("./linearElementEditor").LinearElementEditor | null;
159
166
  snapLines: readonly import("../snapping").SnapLine[];
@@ -177,7 +184,7 @@ export declare const actionLink: {
177
184
  keyTest?: ((event: import("react").KeyboardEvent<Element> | KeyboardEvent) => boolean) | undefined;
178
185
  };
179
186
  export declare const getContextMenuLabel: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState) => "labels.link.editEmbed" | "labels.link.edit" | "labels.link.createEmbed" | "labels.link.create";
180
- export declare const getLinkHandleFromCoords: ([x1, y1, x2, y2]: Bounds, angle: number, appState: Pick<UIAppState, "zoom">) => [x: number, y: number, width: number, height: number];
187
+ export declare const getLinkHandleFromCoords: ([x1, y1, x2, y2]: Bounds, angle: number, appState: Pick<UIAppState, "zoom">) => Bounds;
181
188
  export declare const isPointHittingLinkIcon: (element: NonDeletedExcalidrawElement, appState: AppState, [x, y]: readonly [number, number]) => boolean;
182
189
  export declare const isPointHittingLink: (element: NonDeletedExcalidrawElement, appState: AppState, [x, y]: readonly [number, number], isMobile: boolean) => boolean;
183
190
  export declare const showHyperlinkTooltip: (element: NonDeletedExcalidrawElement, appState: AppState) => void;
@@ -1,4 +1,4 @@
1
- import { ExcalidrawElement, ExcalidrawLinearElement, Arrowhead, NonDeleted } from "./types";
1
+ import { ExcalidrawElement, ExcalidrawLinearElement, Arrowhead, ExcalidrawFreeDrawElement, NonDeleted } from "./types";
2
2
  import { Drawable, Op } from "roughjs/bin/core";
3
3
  import { Point } from "../types";
4
4
  export type RectangleBox = {
@@ -8,7 +8,12 @@ export type RectangleBox = {
8
8
  height: number;
9
9
  angle: number;
10
10
  };
11
- export type Bounds = readonly [x1: number, y1: number, x2: number, y2: number];
11
+ export type Bounds = readonly [
12
+ minX: number,
13
+ minY: number,
14
+ maxX: number,
15
+ maxY: number
16
+ ];
12
17
  export declare class ElementBounds {
13
18
  private static boundsCache;
14
19
  static getBounds(element: ExcalidrawElement): Bounds;
@@ -25,7 +30,8 @@ export declare const getRectangleBoxAbsoluteCoords: (boxSceneCoords: RectangleBo
25
30
  export declare const pointRelativeTo: (element: ExcalidrawElement, absoluteCoords: readonly [number, number]) => readonly [number, number];
26
31
  export declare const getDiamondPoints: (element: ExcalidrawElement) => number[];
27
32
  export declare const getCurvePathOps: (shape: Drawable) => Op[];
28
- export declare const getMinMaxXYFromCurvePathOps: (ops: Op[], transformXY?: ((x: number, y: number) => [number, number]) | undefined) => [number, number, number, number];
33
+ export declare const getMinMaxXYFromCurvePathOps: (ops: Op[], transformXY?: ((x: number, y: number) => [number, number]) | undefined) => Bounds;
34
+ export declare const getBoundsFromPoints: (points: ExcalidrawFreeDrawElement["points"]) => Bounds;
29
35
  export declare const getArrowheadPoints: (element: ExcalidrawLinearElement, shape: Drawable[], position: "start" | "end", arrowhead: Arrowhead) => number[] | null;
30
36
  export declare const getElementBounds: (element: ExcalidrawElement) => Bounds;
31
37
  export declare const getCommonBounds: (elements: readonly ExcalidrawElement[]) => Bounds;
@@ -33,8 +39,8 @@ export declare const getDraggedElementsBounds: (elements: ExcalidrawElement[], d
33
39
  x: number;
34
40
  y: number;
35
41
  }) => number[];
36
- export declare const getResizedElementAbsoluteCoords: (element: ExcalidrawElement, nextWidth: number, nextHeight: number, normalizePoints: boolean) => [number, number, number, number];
37
- export declare const getElementPointsCoords: (element: ExcalidrawLinearElement, points: readonly (readonly [number, number])[]) => [number, number, number, number];
42
+ export declare const getResizedElementAbsoluteCoords: (element: ExcalidrawElement, nextWidth: number, nextHeight: number, normalizePoints: boolean) => Bounds;
43
+ export declare const getElementPointsCoords: (element: ExcalidrawLinearElement, points: readonly (readonly [number, number])[]) => Bounds;
38
44
  export declare const getClosestElementBounds: (elements: readonly ExcalidrawElement[], from: {
39
45
  x: number;
40
46
  y: number;
@@ -14,7 +14,7 @@ type EmbeddedLink = ({
14
14
  srcdoc: (theme: Theme) => string;
15
15
  })) | null;
16
16
  export declare const getEmbedLink: (link: string | null | undefined) => EmbeddedLink;
17
- export declare const isEmbeddableOrFrameLabel: (element: NonDeletedExcalidrawElement) => Boolean;
17
+ export declare const isEmbeddableOrLabel: (element: NonDeletedExcalidrawElement) => Boolean;
18
18
  export declare const createPlaceholderEmbeddableLabel: (element: ExcalidrawEmbeddableElement) => ExcalidrawElement;
19
19
  export declare const actionSetEmbeddableAsActiveTool: {
20
20
  name: "setEmbeddableAsActiveTool";
@@ -94,7 +94,7 @@ export declare const actionSetEmbeddableAsActiveTool: {
94
94
  name: string;
95
95
  tab?: string | undefined;
96
96
  } | null;
97
- openDialog: "imageExport" | "help" | "jsonExport" | null;
97
+ openDialog: "mermaid" | "imageExport" | "help" | "jsonExport" | null;
98
98
  defaultSidebarDockedPreference: boolean;
99
99
  lastPointerDownWith: import("./types").PointerType;
100
100
  selectedElementIds: Readonly<{
@@ -159,7 +159,14 @@ export declare const actionSetEmbeddableAsActiveTool: {
159
159
  Regular: string;
160
160
  MajorGridFrequency?: number | undefined;
161
161
  };
162
- dynamicStyle: string;
162
+ dynamicStyle: {
163
+ [x: string]: string;
164
+ };
165
+ frameColor: {
166
+ stroke: string;
167
+ fill: string;
168
+ nameColor: string;
169
+ };
163
170
  invertBindingBehaviour: boolean;
164
171
  selectedLinearElement: import("./linearElementEditor").LinearElementEditor | null;
165
172
  snapLines: readonly import("../snapping").SnapLine[];
@@ -1,4 +1,5 @@
1
1
  import { NonDeleted, ExcalidrawLinearElement, ExcalidrawElement, PointBinding, ExcalidrawBindableElement, ExcalidrawTextElementWithContainer } from "./types";
2
+ import { Bounds } from "./bounds";
2
3
  import { Point, AppState, PointerCoords, InteractiveCanvasAppState } from "../types";
3
4
  import History from "../history";
4
5
  import Scene from "../scene/Scene";
@@ -191,7 +192,7 @@ export declare class LinearElementEditor {
191
192
  name: string;
192
193
  tab?: string | undefined;
193
194
  } | null;
194
- openDialog: "imageExport" | "help" | "jsonExport" | null;
195
+ openDialog: "mermaid" | "imageExport" | "help" | "jsonExport" | null;
195
196
  defaultSidebarDockedPreference: boolean;
196
197
  lastPointerDownWith: import("./types").PointerType;
197
198
  selectedElementIds: Readonly<{
@@ -256,7 +257,14 @@ export declare class LinearElementEditor {
256
257
  Regular: string;
257
258
  MajorGridFrequency?: number | undefined;
258
259
  };
259
- dynamicStyle: string;
260
+ dynamicStyle: {
261
+ [x: string]: string;
262
+ };
263
+ frameColor: {
264
+ stroke: string;
265
+ fill: string;
266
+ nameColor: string;
267
+ };
260
268
  invertBindingBehaviour: boolean;
261
269
  selectedLinearElement: LinearElementEditor | null;
262
270
  snapLines: readonly import("../snapping").SnapLine[];
@@ -290,7 +298,7 @@ export declare class LinearElementEditor {
290
298
  x: number;
291
299
  y: number;
292
300
  };
293
- static getMinMaxXYWithBoundText: (element: ExcalidrawLinearElement, elementBounds: [number, number, number, number], boundTextElement: ExcalidrawTextElementWithContainer) => [number, number, number, number, number, number];
301
+ static getMinMaxXYWithBoundText: (element: ExcalidrawLinearElement, elementBounds: Bounds, boundTextElement: ExcalidrawTextElementWithContainer) => [number, number, number, number, number, number];
294
302
  static getElementAbsoluteCoords: (element: ExcalidrawLinearElement, includeBoundText?: boolean) => [number, number, number, number, number, number];
295
303
  }
296
304
  export {};
@@ -9,7 +9,9 @@ export declare const newEmbeddableElement: (opts: {
9
9
  type: "embeddable";
10
10
  validated: ExcalidrawEmbeddableElement["validated"];
11
11
  } & ElementConstructorOpts) => NonDeleted<ExcalidrawEmbeddableElement>;
12
- export declare const newFrameElement: (opts: ElementConstructorOpts) => NonDeleted<ExcalidrawFrameElement>;
12
+ export declare const newFrameElement: (opts: {
13
+ name?: string;
14
+ } & ElementConstructorOpts) => NonDeleted<ExcalidrawFrameElement>;
13
15
  export declare const newTextElement: (opts: {
14
16
  text: string;
15
17
  rawText: string;
@@ -1,12 +1,13 @@
1
1
  import { ExcalidrawElement, PointerType, NonDeletedExcalidrawElement } from "./types";
2
2
  import { MaybeTransformHandleType } from "./transformHandles";
3
3
  import { AppState, Zoom } from "../types";
4
+ import { Bounds } from "./bounds";
4
5
  export declare const resizeTest: (element: NonDeletedExcalidrawElement, appState: AppState, x: number, y: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
5
6
  export declare const getElementWithTransformHandleType: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType) => {
6
7
  element: NonDeletedExcalidrawElement;
7
8
  transformHandleType: MaybeTransformHandleType;
8
9
  } | null;
9
- export declare const getTransformHandleTypeFromCoords: ([x1, y1, x2, y2]: readonly [number, number, number, number], scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
10
+ export declare const getTransformHandleTypeFromCoords: ([x1, y1, x2, y2]: Bounds, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
10
11
  export declare const getCursorForResizingElement: (resizingElement: {
11
12
  element?: ExcalidrawElement;
12
13
  transformHandleType: MaybeTransformHandleType;
@@ -1,8 +1,9 @@
1
1
  import { ExcalidrawElement, NonDeletedExcalidrawElement, PointerType } from "./types";
2
+ import { Bounds } from "./bounds";
2
3
  import { InteractiveCanvasAppState, Zoom } from "../types";
3
4
  export type TransformHandleDirection = "n" | "s" | "w" | "e" | "nw" | "ne" | "sw" | "se";
4
5
  export type TransformHandleType = TransformHandleDirection | "rotation";
5
- export type TransformHandle = [number, number, number, number];
6
+ export type TransformHandle = Bounds;
6
7
  export type TransformHandles = Partial<{
7
8
  [T in TransformHandleType]: TransformHandle;
8
9
  }>;
@@ -16,7 +16,7 @@ export declare const isBindingElement: (element?: ExcalidrawElement | null, incl
16
16
  export declare const isBindingElementType: (elementType: AppState["activeTool"]["type"]) => boolean;
17
17
  export declare const isBindableElement: (element: ExcalidrawElement | null, includeLocked?: boolean) => element is ExcalidrawBindableElement;
18
18
  export declare const isTextBindableContainer: (element: ExcalidrawElement | null, includeLocked?: boolean) => element is ExcalidrawTextContainer;
19
- export declare const isExcalidrawElement: (element: any) => boolean;
19
+ export declare const isExcalidrawElement: (element: any) => element is ExcalidrawElement;
20
20
  export declare const hasBoundTextElement: (element: ExcalidrawElement | null) => element is MarkNonNullable<ExcalidrawBindableElement, "boundElements">;
21
21
  export declare const isBoundToContainer: (element: ExcalidrawElement | null) => element is ExcalidrawTextElementWithContainer;
22
22
  export declare const isUsingAdaptiveRadius: (type: string) => boolean;
@@ -83,6 +83,7 @@ export type ExcalidrawEmbeddableElement = _ExcalidrawElementBase & Readonly<{
83
83
  * may not have access to host-app supplied url validator during restore.
84
84
  */
85
85
  validated: boolean | null;
86
+ scale: [number, number];
86
87
  }>;
87
88
  export type ExcalidrawImageElement = _ExcalidrawElementBase & Readonly<{
88
89
  type: "image";
package/types/errors.d.ts CHANGED
@@ -5,4 +5,9 @@ export declare class CanvasError extends Error {
5
5
  export declare class AbortError extends DOMException {
6
6
  constructor(message?: string);
7
7
  }
8
+ type ImageSceneDataErrorCode = "IMAGE_NOT_CONTAINS_SCENE_DATA" | "IMAGE_SCENE_DATA_ERROR";
9
+ export declare class ImageSceneDataError extends Error {
10
+ code: ImageSceneDataErrorCode;
11
+ constructor(message?: string, code?: ImageSceneDataErrorCode);
12
+ }
8
13
  export {};
package/types/frame.d.ts CHANGED
@@ -2,6 +2,7 @@ import { ExcalidrawElement, ExcalidrawFrameElement, NonDeleted, NonDeletedExcali
2
2
  import { AppClassProperties, AppState, StaticCanvasAppState } from "./types";
3
3
  import { ExcalidrawElementsIncludingDeleted } from "./scene/Scene";
4
4
  export declare const bindElementsToFramesAfterDuplication: (nextElements: ExcalidrawElement[], oldElements: readonly ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
5
+ export declare function isElementIntersectingFrame(element: ExcalidrawElement, frame: ExcalidrawFrameElement): boolean;
5
6
  export declare const getElementsCompletelyInFrame: (elements: readonly ExcalidrawElement[], frame: ExcalidrawFrameElement) => ExcalidrawElement[];
6
7
  export declare const isElementContainingFrame: (elements: readonly ExcalidrawElement[], element: ExcalidrawElement, frame: ExcalidrawFrameElement) => boolean;
7
8
  export declare const getElementsIntersectingFrame: (elements: readonly ExcalidrawElement[], frame: ExcalidrawFrameElement) => ExcalidrawElement[];
@@ -17,7 +18,17 @@ export declare const groupsAreCompletelyOutOfFrame: (elements: readonly NonDelet
17
18
  * Returns a map of frameId to frame elements. Includes empty frames.
18
19
  */
19
20
  export declare const groupByFrames: (elements: readonly ExcalidrawElement[]) => Map<string, ExcalidrawElement[]>;
20
- export declare const getFrameElements: (allElements: ExcalidrawElementsIncludingDeleted, frameId: string) => ExcalidrawElement[];
21
+ export declare const getFrameChildren: (allElements: ExcalidrawElementsIncludingDeleted, frameId: string) => ExcalidrawElement[];
22
+ export declare const getFrameElements: (allElements: ExcalidrawElementsIncludingDeleted) => ExcalidrawFrameElement[];
23
+ /**
24
+ * Returns ExcalidrawFrameElements and non-frame-children elements.
25
+ *
26
+ * Considers children as root elements if they point to a frame parent
27
+ * non-existing in the elements set.
28
+ *
29
+ * Considers non-frame bound elements (container or arrow labels) as root.
30
+ */
31
+ export declare const getRootElements: (allElements: ExcalidrawElementsIncludingDeleted) => ExcalidrawElement[];
21
32
  export declare const getElementsInResizingFrame: (allElements: ExcalidrawElementsIncludingDeleted, frame: ExcalidrawFrameElement, appState: AppState) => ExcalidrawElement[];
22
33
  export declare const getElementsInNewFrame: (allElements: ExcalidrawElementsIncludingDeleted, frame: ExcalidrawFrameElement) => ExcalidrawElement[];
23
34
  export declare const getContainingFrame: (element: ExcalidrawElement, elementsMap?: Map<string, ExcalidrawElement>) => ExcalidrawFrameElement | null;
@@ -1,5 +1,7 @@
1
1
  export declare const useCreatePortalContainer: (opts?: {
2
- className?: string;
3
- parentSelector?: string;
4
- style?: string;
5
- }) => HTMLDivElement | null;
2
+ className?: string | undefined;
3
+ parentSelector?: string | undefined;
4
+ style?: {
5
+ [x: string]: string;
6
+ } | undefined;
7
+ } | undefined) => HTMLDivElement | null;
package/types/math.d.ts CHANGED
@@ -30,3 +30,4 @@ export declare const arePointsEqual: (p1: readonly [number, number], p2: readonl
30
30
  export declare const isRightAngle: (angle: number) => boolean;
31
31
  export declare const rangesOverlap: ([a0, a1]: [number, number], [b0, b1]: [number, number]) => boolean;
32
32
  export declare const rangeIntersection: (rangeA: [number, number], rangeB: [number, number]) => [number, number] | null;
33
+ export declare const isValueInRange: (value: number, min: number, max: number) => boolean;
@@ -0,0 +1,11 @@
1
+ import { Bounds } from "../element/bounds";
2
+ import { Point } from "../types";
3
+ export type LineSegment = [Point, Point];
4
+ export declare function getBBox(line: LineSegment): Bounds;
5
+ export declare function crossProduct(a: Point, b: Point): number;
6
+ export declare function doBBoxesIntersect(a: Bounds, b: Bounds): boolean;
7
+ export declare function translate(a: Point, b: Point): Point;
8
+ export declare function isPointOnLine(l: LineSegment, p: Point): boolean;
9
+ export declare function isPointRightOfLine(l: LineSegment, p: Point): boolean;
10
+ export declare function isLineSegmentTouchingOrCrossingLine(a: LineSegment, b: LineSegment): boolean;
11
+ export declare function doLineSegmentsIntersect(a: LineSegment, b: LineSegment): boolean;
@@ -1,13 +1,12 @@
1
1
  import React from "react";
2
2
  import "../../css/app.scss";
3
3
  import "../../css/styles.scss";
4
- import { ExcalidrawAPIRefValue, ExcalidrawProps } from "../../types";
4
+ import { ExcalidrawProps } from "../../types";
5
5
  import Footer from "../../components/footer/FooterCenter";
6
6
  import MainMenu from "../../components/main-menu/MainMenu";
7
7
  import WelcomeScreen from "../../components/welcome-screen/WelcomeScreen";
8
8
  import LiveCollaborationTrigger from "../../components/live-collaboration/LiveCollaborationTrigger";
9
- type PublicExcalidrawProps = Omit<ExcalidrawProps, "forwardedRef">;
10
- export declare const Excalidraw: React.MemoExoticComponent<React.ForwardRefExoticComponent<PublicExcalidrawProps & React.RefAttributes<ExcalidrawAPIRefValue>>>;
9
+ export declare const Excalidraw: React.MemoExoticComponent<(props: ExcalidrawProps) => import("react/jsx-runtime").JSX.Element>;
11
10
  export { getSceneVersion, isInvisiblySmallElement, getNonDeletedElements, } from "../../element";
12
11
  export { defaultLang, useI18n, languages } from "../../i18n";
13
12
  export { restore, restoreAppState, restoreElements, restoreLibraryItems, } from "../../data/restore";
@@ -37,3 +36,5 @@ export { LiveCollaborationTrigger };
37
36
  export { DefaultSidebar } from "../../components/DefaultSidebar";
38
37
  export { normalizeLink } from "../../data/url";
39
38
  export { convertToExcalidrawElements } from "../../data/transform";
39
+ export { getCommonBounds } from "../../element/bounds";
40
+ export { elementsOverlappingBBox, isElementInsideBBox, elementPartiallyOverlapsWithOrContainsBBox, } from "../withinBounds";