@dwelle/excalidraw 0.4.0-9db4535 → 0.4.0-9fa56da

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 (143) hide show
  1. package/CHANGELOG.md +255 -1
  2. package/README.md +4 -0
  3. package/dist/excalidraw-assets/{vendor-2002fe1b8862917b36c1.js → vendor-d415b28e9024dee4bb1b.js} +2 -2
  4. package/dist/excalidraw-assets-dev/{vendor-e6df8519da951026ff69.js → vendor-a14cd58fa2db417e42b2.js} +6 -6
  5. package/dist/excalidraw.development.js +2123 -1783
  6. package/dist/excalidraw.production.min.js +1 -1
  7. package/package.json +7 -2
  8. package/types/actions/actionAddToLibrary.d.ts +84 -43
  9. package/types/actions/actionAlign.d.ts +33 -28
  10. package/types/actions/actionBoundText.d.ts +60 -32
  11. package/types/actions/actionCanvas.d.ts +436 -164
  12. package/types/actions/actionClipboard.d.ts +140 -74
  13. package/types/actions/actionDeleteSelected.d.ts +80 -42
  14. package/types/actions/actionDistribute.d.ts +11 -12
  15. package/types/actions/actionDuplicateSelection.d.ts +2 -3
  16. package/types/actions/actionElementLock.d.ts +58 -30
  17. package/types/actions/actionExport.d.ts +303 -177
  18. package/types/actions/actionFinalize.d.ts +56 -32
  19. package/types/actions/actionFlip.d.ts +8 -9
  20. package/types/actions/actionFrame.d.ts +423 -0
  21. package/types/actions/actionGroup.d.ts +250 -13
  22. package/types/actions/actionLinearEditor.d.ts +30 -17
  23. package/types/actions/actionMenu.d.ts +87 -47
  24. package/types/actions/actionNavigate.d.ts +1 -1
  25. package/types/actions/actionProperties.d.ts +370 -187
  26. package/types/actions/actionSelectAll.d.ts +123 -4
  27. package/types/actions/actionStyles.d.ts +32 -19
  28. package/types/actions/actionToggleGridMode.d.ts +30 -17
  29. package/types/actions/actionToggleObjectsSnapMode.d.ts +137 -0
  30. package/types/actions/actionToggleStats.d.ts +30 -17
  31. package/types/actions/actionToggleViewMode.d.ts +30 -17
  32. package/types/actions/actionToggleZenMode.d.ts +30 -17
  33. package/types/actions/actionZindex.d.ts +12 -12
  34. package/types/actions/index.d.ts +1 -0
  35. package/types/actions/shortcuts.d.ts +1 -1
  36. package/types/actions/types.d.ts +4 -3
  37. package/types/appState.d.ts +10 -15
  38. package/types/clients.d.ts +1 -5
  39. package/types/clipboard.d.ts +1 -0
  40. package/types/colors.d.ts +9 -9
  41. package/types/components/Actions.d.ts +4 -5
  42. package/types/components/App.d.ts +61 -28
  43. package/types/components/Avatar.d.ts +0 -1
  44. package/types/components/Button.d.ts +0 -1
  45. package/types/components/Card.d.ts +0 -1
  46. package/types/components/ColorPicker/ColorInput.d.ts +3 -1
  47. package/types/components/ColorPicker/keyboardNavHandlers.d.ts +0 -1
  48. package/types/components/DefaultSidebar.d.ts +0 -1
  49. package/types/components/Dialog.d.ts +2 -1
  50. package/types/components/ExcalidrawLogo.d.ts +15 -0
  51. package/types/components/EyeDropper.d.ts +18 -8
  52. package/types/components/FilledButton.d.ts +2 -1
  53. package/types/components/HintViewer.d.ts +3 -4
  54. package/types/components/JSONExportDialog.d.ts +1 -1
  55. package/types/components/LaserTool/LaserPathManager.d.ts +28 -0
  56. package/types/components/LaserTool/LaserPointerButton.d.ts +10 -0
  57. package/types/components/LaserTool/LaserTool.d.ts +7 -0
  58. package/types/components/LayerUI.d.ts +6 -2
  59. package/types/components/LibraryMenuHeaderContent.d.ts +0 -1
  60. package/types/components/LibraryUnit.d.ts +0 -1
  61. package/types/components/LoadingMessage.d.ts +0 -1
  62. package/types/components/MobileMenu.d.ts +4 -3
  63. package/types/components/OverwriteConfirm/OverwriteConfirm.d.ts +17 -0
  64. package/types/components/OverwriteConfirm/OverwriteConfirmActions.d.ts +17 -0
  65. package/types/components/OverwriteConfirm/OverwriteConfirmState.d.ts +22 -0
  66. package/types/components/Section.d.ts +1 -1
  67. package/types/components/Sidebar/Sidebar.d.ts +1 -1
  68. package/types/components/Sidebar/SidebarTab.d.ts +0 -1
  69. package/types/components/Sidebar/SidebarTabTrigger.d.ts +0 -1
  70. package/types/components/Sidebar/SidebarTabTriggers.d.ts +0 -1
  71. package/types/components/Sidebar/SidebarTabs.d.ts +0 -1
  72. package/types/components/Stack.d.ts +2 -2
  73. package/types/components/ToolButton.d.ts +2 -1
  74. package/types/components/Trans.d.ts +2 -1
  75. package/types/components/canvases/InteractiveCanvas.d.ts +27 -0
  76. package/types/components/canvases/StaticCanvas.d.ts +18 -0
  77. package/types/components/canvases/index.d.ts +3 -0
  78. package/types/components/dropdownMenu/DropdownMenu.d.ts +9 -5
  79. package/types/components/dropdownMenu/DropdownMenuItem.d.ts +2 -1
  80. package/types/components/dropdownMenu/DropdownMenuItemCustom.d.ts +2 -1
  81. package/types/components/dropdownMenu/DropdownMenuItemLink.d.ts +2 -1
  82. package/types/components/dropdownMenu/DropdownMenuTrigger.d.ts +3 -2
  83. package/types/components/dropdownMenu/common.d.ts +1 -1
  84. package/types/components/icons.d.ts +6 -0
  85. package/types/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -1
  86. package/types/components/main-menu/MainMenu.d.ts +9 -5
  87. package/types/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -1
  88. package/types/components/welcome-screen/WelcomeScreen.d.ts +0 -1
  89. package/types/constants.d.ts +35 -3
  90. package/types/context/tunnels.d.ts +1 -0
  91. package/types/data/transform.d.ts +71 -0
  92. package/types/data/url.d.ts +7 -0
  93. package/types/element/Hyperlink.d.ts +40 -23
  94. package/types/element/binding.d.ts +2 -1
  95. package/types/element/bounds.d.ts +30 -6
  96. package/types/element/collision.d.ts +7 -7
  97. package/types/element/dragElements.d.ts +12 -2
  98. package/types/element/embeddable.d.ts +153 -0
  99. package/types/element/index.d.ts +3 -2
  100. package/types/element/linearElementEditor.d.ts +33 -20
  101. package/types/element/newElement.d.ts +15 -6
  102. package/types/element/resizeElements.d.ts +2 -2
  103. package/types/element/sizeHelpers.d.ts +8 -1
  104. package/types/element/textElement.d.ts +5 -7
  105. package/types/element/textWysiwyg.d.ts +1 -1
  106. package/types/element/transformHandles.d.ts +10 -3
  107. package/types/element/typeChecks.d.ts +3 -1
  108. package/types/element/types.d.ts +19 -3
  109. package/types/frame.d.ts +40 -0
  110. package/types/groups.d.ts +15 -11
  111. package/types/history.d.ts +3 -3
  112. package/types/hooks/useOutsideClick.d.ts +0 -1
  113. package/types/hooks/useScrollPosition.d.ts +0 -1
  114. package/types/hooks/useStable.d.ts +1 -0
  115. package/types/i18n.d.ts +5 -2
  116. package/types/keys.d.ts +4 -0
  117. package/types/math.d.ts +3 -0
  118. package/types/packages/excalidraw/example/initialData.d.ts +182 -64
  119. package/types/packages/excalidraw/index.d.ts +3 -1
  120. package/types/packages/excalidraw/webpack.dev.config.d.ts +5 -2
  121. package/types/packages/excalidraw/webpack.prod.config.d.ts +3 -0
  122. package/types/packages/utils.d.ts +4 -1
  123. package/types/renderer/renderElement.d.ts +11 -22
  124. package/types/renderer/renderScene.d.ts +19 -27
  125. package/types/renderer/renderSnaps.d.ts +2 -0
  126. package/types/renderer/roundRect.d.ts +1 -1
  127. package/types/scene/Renderer.d.ts +25 -0
  128. package/types/scene/Scene.d.ts +23 -1
  129. package/types/scene/Shape.d.ts +12 -0
  130. package/types/scene/ShapeCache.d.ts +20 -0
  131. package/types/scene/export.d.ts +35 -9
  132. package/types/scene/scroll.d.ts +1 -1
  133. package/types/scene/scrollbars.d.ts +2 -6
  134. package/types/scene/selection.d.ts +26 -5
  135. package/types/scene/types.d.ts +66 -31
  136. package/types/snapping.d.ts +108 -0
  137. package/types/types.d.ts +130 -25
  138. package/types/utility-types.d.ts +3 -1
  139. package/types/utils.d.ts +60 -23
  140. package/types/zindex.d.ts +4 -4
  141. /package/dist/excalidraw-assets/{vendor-2002fe1b8862917b36c1.js.LICENSE.txt → vendor-d415b28e9024dee4bb1b.js.LICENSE.txt} +0 -0
  142. /package/types/packages/excalidraw/dist/excalidraw-assets/{vendor-2002fe1b8862917b36c1.d.ts → vendor-d415b28e9024dee4bb1b.d.ts} +0 -0
  143. /package/types/packages/excalidraw/dist/excalidraw-assets-dev/{vendor-e6df8519da951026ff69.d.ts → vendor-a14cd58fa2db417e42b2.d.ts} +0 -0
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { RoughCanvas } from "roughjs/bin/canvas";
3
+ import type { StaticCanvasAppState } from "../../types";
4
+ import type { StaticCanvasRenderConfig } from "../../scene/types";
5
+ import type { NonDeletedExcalidrawElement } from "../../element/types";
6
+ type StaticCanvasProps = {
7
+ canvas: HTMLCanvasElement;
8
+ rc: RoughCanvas;
9
+ elements: readonly NonDeletedExcalidrawElement[];
10
+ visibleElements: readonly NonDeletedExcalidrawElement[];
11
+ versionNonce: number | undefined;
12
+ selectionNonce: number | undefined;
13
+ scale: number;
14
+ appState: StaticCanvasAppState;
15
+ renderConfig: StaticCanvasRenderConfig;
16
+ };
17
+ declare const _default: React.MemoExoticComponent<(props: StaticCanvasProps) => JSX.Element>;
18
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import InteractiveCanvas from "./InteractiveCanvas";
2
+ import StaticCanvas from "./StaticCanvas";
3
+ export { InteractiveCanvas, StaticCanvas };
@@ -6,11 +6,12 @@ declare const DropdownMenu: {
6
6
  open: boolean;
7
7
  }): JSX.Element;
8
8
  Trigger: {
9
- ({ className, children, onToggle, }: {
9
+ ({ className, children, onToggle, title, ...rest }: {
10
10
  className?: string | undefined;
11
11
  children: React.ReactNode;
12
12
  onToggle: () => void;
13
- }): JSX.Element;
13
+ title?: string | undefined;
14
+ } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onSelect">): JSX.Element;
14
15
  displayName: string;
15
16
  };
16
17
  Content: {
@@ -24,29 +25,32 @@ declare const DropdownMenu: {
24
25
  displayName: string;
25
26
  };
26
27
  Item: {
27
- ({ icon, onSelect, children, shortcut, className, ...rest }: {
28
+ ({ icon, onSelect, children, shortcut, className, selected, ...rest }: {
28
29
  icon?: JSX.Element | undefined;
29
30
  onSelect: (event: Event) => void;
30
31
  children: React.ReactNode;
31
32
  shortcut?: string | undefined;
33
+ selected?: boolean | undefined;
32
34
  className?: string | undefined;
33
35
  } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onSelect">): JSX.Element;
34
36
  displayName: string;
35
37
  };
36
38
  ItemLink: {
37
- ({ icon, shortcut, href, children, onSelect, className, ...rest }: {
39
+ ({ icon, shortcut, href, children, onSelect, className, selected, ...rest }: {
38
40
  href: string;
39
41
  icon?: JSX.Element | undefined;
40
42
  children: React.ReactNode;
41
43
  shortcut?: string | undefined;
42
44
  className?: string | undefined;
45
+ selected?: boolean | undefined;
43
46
  onSelect?: ((event: Event) => void) | undefined;
44
47
  } & React.AnchorHTMLAttributes<HTMLAnchorElement>): JSX.Element;
45
48
  displayName: string;
46
49
  };
47
- ItemCustom: ({ children, className, ...rest }: {
50
+ ItemCustom: ({ children, className, selected, ...rest }: {
48
51
  children: React.ReactNode;
49
52
  className?: string | undefined;
53
+ selected?: boolean | undefined;
50
54
  } & React.HTMLAttributes<HTMLDivElement>) => JSX.Element;
51
55
  Group: {
52
56
  ({ children, className, style, title, }: {
@@ -1,10 +1,11 @@
1
1
  import React from "react";
2
2
  declare const DropdownMenuItem: {
3
- ({ icon, onSelect, children, shortcut, className, ...rest }: {
3
+ ({ icon, onSelect, children, shortcut, className, selected, ...rest }: {
4
4
  icon?: JSX.Element | undefined;
5
5
  onSelect: (event: Event) => void;
6
6
  children: React.ReactNode;
7
7
  shortcut?: string | undefined;
8
+ selected?: boolean | undefined;
8
9
  className?: string | undefined;
9
10
  } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onSelect">): JSX.Element;
10
11
  displayName: string;
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
- declare const DropdownMenuItemCustom: ({ children, className, ...rest }: {
2
+ declare const DropdownMenuItemCustom: ({ children, className, selected, ...rest }: {
3
3
  children: React.ReactNode;
4
4
  className?: string | undefined;
5
+ selected?: boolean | undefined;
5
6
  } & React.HTMLAttributes<HTMLDivElement>) => JSX.Element;
6
7
  export default DropdownMenuItemCustom;
@@ -1,11 +1,12 @@
1
1
  import React from "react";
2
2
  declare const DropdownMenuItemLink: {
3
- ({ icon, shortcut, href, children, onSelect, className, ...rest }: {
3
+ ({ icon, shortcut, href, children, onSelect, className, selected, ...rest }: {
4
4
  href: string;
5
5
  icon?: JSX.Element | undefined;
6
6
  children: React.ReactNode;
7
7
  shortcut?: string | undefined;
8
8
  className?: string | undefined;
9
+ selected?: boolean | undefined;
9
10
  onSelect?: ((event: Event) => void) | undefined;
10
11
  } & React.AnchorHTMLAttributes<HTMLAnchorElement>): JSX.Element;
11
12
  displayName: string;
@@ -1,9 +1,10 @@
1
1
  declare const MenuTrigger: {
2
- ({ className, children, onToggle, }: {
2
+ ({ className, children, onToggle, title, ...rest }: {
3
3
  className?: string | undefined;
4
4
  children: React.ReactNode;
5
5
  onToggle: () => void;
6
- }): JSX.Element;
6
+ title?: string | undefined;
7
+ } & Omit<import("react").ButtonHTMLAttributes<HTMLButtonElement>, "onSelect">): JSX.Element;
7
8
  displayName: string;
8
9
  };
9
10
  export default MenuTrigger;
@@ -2,5 +2,5 @@ import React from "react";
2
2
  export declare const DropdownMenuContentPropsContext: React.Context<{
3
3
  onSelect?: ((event: Event) => void) | undefined;
4
4
  }>;
5
- export declare const getDropdownMenuItemClassName: (className?: string) => string;
5
+ export declare const getDropdownMenuItemClassName: (className?: string, selected?: boolean) => string;
6
6
  export declare const useHandleDropdownMenuItemClick: (origOnClick: React.MouseEventHandler<HTMLAnchorElement | HTMLButtonElement> | undefined, onSelect: ((event: Event) => void) | undefined) => (event: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement, MouseEvent>) => void;
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
2
  import { Theme } from "../element/types";
3
+ export declare const iconFillColor: (theme: Theme) => string;
3
4
  type Opts = {
4
5
  width?: number;
5
6
  height?: number;
@@ -31,6 +32,7 @@ export declare const EraserIcon: JSX.Element;
31
32
  export declare const ZoomInIcon: JSX.Element;
32
33
  export declare const ZoomOutIcon: JSX.Element;
33
34
  export declare const TrashIcon: JSX.Element;
35
+ export declare const EmbedIcon: JSX.Element;
34
36
  export declare const DuplicateIcon: JSX.Element;
35
37
  export declare const MoonIcon: JSX.Element;
36
38
  export declare const SunIcon: JSX.Element;
@@ -144,5 +146,9 @@ export declare const helpIcon: JSX.Element;
144
146
  export declare const playerPlayIcon: JSX.Element;
145
147
  export declare const playerStopFilledIcon: JSX.Element;
146
148
  export declare const tablerCheckIcon: JSX.Element;
149
+ export declare const alertTriangleIcon: JSX.Element;
147
150
  export declare const eyeDropperIcon: JSX.Element;
151
+ export declare const extraToolsIcon: JSX.Element;
152
+ export declare const frameToolIcon: JSX.Element;
153
+ export declare const laserPointerToolIcon: JSX.Element;
148
154
  export {};
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import "./LiveCollaborationTrigger.scss";
3
2
  declare const LiveCollaborationTrigger: {
4
3
  ({ isCollaborating, onSelect, ...rest }: {
@@ -10,37 +10,41 @@ declare const MainMenu: React.FC<{
10
10
  __fallback?: boolean | undefined;
11
11
  }> & {
12
12
  Trigger: {
13
- ({ className, children, onToggle, }: {
13
+ ({ className, children, onToggle, title, ...rest }: {
14
14
  className?: string | undefined;
15
15
  children: React.ReactNode;
16
16
  onToggle: () => void;
17
- }): JSX.Element;
17
+ title?: string | undefined;
18
+ } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onSelect">): JSX.Element;
18
19
  displayName: string;
19
20
  };
20
21
  Item: {
21
- ({ icon, onSelect, children, shortcut, className, ...rest }: {
22
+ ({ icon, onSelect, children, shortcut, className, selected, ...rest }: {
22
23
  icon?: JSX.Element | undefined;
23
24
  onSelect: (event: Event) => void;
24
25
  children: React.ReactNode;
25
26
  shortcut?: string | undefined;
27
+ selected?: boolean | undefined;
26
28
  className?: string | undefined;
27
29
  } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onSelect">): JSX.Element;
28
30
  displayName: string;
29
31
  };
30
32
  ItemLink: {
31
- ({ icon, shortcut, href, children, onSelect, className, ...rest }: {
33
+ ({ icon, shortcut, href, children, onSelect, className, selected, ...rest }: {
32
34
  href: string;
33
35
  icon?: JSX.Element | undefined;
34
36
  children: React.ReactNode;
35
37
  shortcut?: string | undefined;
36
38
  className?: string | undefined;
39
+ selected?: boolean | undefined;
37
40
  onSelect?: ((event: Event) => void) | undefined;
38
41
  } & React.AnchorHTMLAttributes<HTMLAnchorElement>): JSX.Element;
39
42
  displayName: string;
40
43
  };
41
- ItemCustom: ({ children, className, ...rest }: {
44
+ ItemCustom: ({ children, className, selected, ...rest }: {
42
45
  children: React.ReactNode;
43
46
  className?: string | undefined;
47
+ selected?: boolean | undefined;
44
48
  } & React.HTMLAttributes<HTMLDivElement>) => JSX.Element;
45
49
  Group: {
46
50
  ({ children, className, style, title, }: {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare const Center: {
3
2
  ({ children }: {
4
3
  children?: React.ReactNode;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import "./WelcomeScreen.scss";
3
2
  declare const WelcomeScreen: {
4
3
  (props: {
@@ -29,6 +29,11 @@ export declare const POINTER_BUTTON: {
29
29
  readonly SECONDARY: 2;
30
30
  readonly TOUCH: -1;
31
31
  };
32
+ export declare const POINTER_EVENTS: {
33
+ readonly enabled: "all";
34
+ readonly disabled: "none";
35
+ readonly inheritFromUI: any;
36
+ };
32
37
  export declare enum EVENT {
33
38
  COPY = "copy",
34
39
  PASTE = "paste",
@@ -57,8 +62,17 @@ export declare enum EVENT {
57
62
  VISIBILITY_CHANGE = "visibilitychange",
58
63
  SCROLL = "scroll",
59
64
  EXCALIDRAW_LINK = "excalidraw-link",
60
- MENU_ITEM_SELECT = "menu.itemSelect"
65
+ MENU_ITEM_SELECT = "menu.itemSelect",
66
+ MESSAGE = "message"
61
67
  }
68
+ export declare const YOUTUBE_STATES: {
69
+ readonly UNSTARTED: -1;
70
+ readonly ENDED: 0;
71
+ readonly PLAYING: 1;
72
+ readonly PAUSED: 2;
73
+ readonly BUFFERING: 3;
74
+ readonly CUED: 5;
75
+ };
62
76
  export declare const ENV: {
63
77
  TEST: string;
64
78
  DEVELOPMENT: string;
@@ -73,10 +87,24 @@ export declare const FONT_FAMILY: {
73
87
  Cascadia: number;
74
88
  };
75
89
  export declare const THEME: {
76
- LIGHT: string;
77
- DARK: string;
90
+ readonly LIGHT: "light";
91
+ readonly DARK: "dark";
92
+ };
93
+ export declare const FRAME_STYLE: {
94
+ strokeColor: string;
95
+ strokeWidth: number;
96
+ strokeStyle: import("./element/types").StrokeStyle;
97
+ fillStyle: import("./element/types").FillStyle;
98
+ roughness: number;
99
+ roundness: {
100
+ type: import("./element/types").RoundnessType;
101
+ value?: number | undefined;
102
+ } | null;
103
+ backgroundColor: string;
104
+ radius: number;
78
105
  };
79
106
  export declare const WINDOWS_EMOJI_FALLBACK_FONT = "Segoe UI Emoji";
107
+ export declare const MIN_FONT_SIZE = 1;
80
108
  export declare const DEFAULT_FONT_SIZE = 20;
81
109
  export declare const DEFAULT_FONT_FAMILY: FontFamilyValues;
82
110
  export declare const DEFAULT_TEXT_ALIGN = "left";
@@ -124,6 +152,7 @@ export declare const EXPORT_DATA_TYPES: {
124
152
  readonly excalidraw: "excalidraw";
125
153
  readonly excalidrawClipboard: "excalidraw/clipboard";
126
154
  readonly excalidrawLibrary: "excalidrawlib";
155
+ readonly excalidrawClipboardWithAPI: "excalidraw-api/clipboard";
127
156
  };
128
157
  export declare const EXPORT_SOURCE: string;
129
158
  export declare const IMAGE_RENDER_TIMEOUT = 500;
@@ -163,6 +192,8 @@ export declare const VERSIONS: {
163
192
  readonly excalidrawLibrary: 2;
164
193
  };
165
194
  export declare const BOUND_TEXT_PADDING = 5;
195
+ export declare const ARROW_LABEL_WIDTH_FRACTION = 0.7;
196
+ export declare const ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO = 11;
166
197
  export declare const VERTICAL_ALIGN: {
167
198
  TOP: string;
168
199
  MIDDLE: string;
@@ -199,3 +230,4 @@ export declare const DEFAULT_SIDEBAR: {
199
230
  readonly name: "default";
200
231
  readonly defaultTab: "library";
201
232
  };
233
+ export declare const LIBRARY_DISABLED_TYPES: Set<"embeddable" | "image">;
@@ -10,6 +10,7 @@ type TunnelsContextValue = {
10
10
  FooterCenterTunnel: Tunnel;
11
11
  DefaultSidebarTriggerTunnel: Tunnel;
12
12
  DefaultSidebarTabTriggersTunnel: Tunnel;
13
+ OverwriteConfirmDialogTunnel: Tunnel;
13
14
  jotaiScope: symbol;
14
15
  };
15
16
  export declare const TunnelsContext: React.Context<TunnelsContextValue>;
@@ -0,0 +1,71 @@
1
+ import { ElementConstructorOpts } from "../element/newElement";
2
+ import { ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawEmbeddableElement, ExcalidrawFrameElement, ExcalidrawFreeDrawElement, ExcalidrawGenericElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawSelectionElement, ExcalidrawTextElement, FileId, FontFamilyValues, TextAlign, VerticalAlign } from "../element/types";
3
+ import { MarkOptional } from "../utility-types";
4
+ export type ValidLinearElement = {
5
+ type: "arrow" | "line";
6
+ x: number;
7
+ y: number;
8
+ label?: {
9
+ text: string;
10
+ fontSize?: number;
11
+ fontFamily?: FontFamilyValues;
12
+ textAlign?: TextAlign;
13
+ verticalAlign?: VerticalAlign;
14
+ } & MarkOptional<ElementConstructorOpts, "x" | "y">;
15
+ end?: (({
16
+ type: Exclude<ExcalidrawBindableElement["type"], "image" | "text" | "frame" | "embeddable">;
17
+ id?: ExcalidrawGenericElement["id"];
18
+ } | {
19
+ id: ExcalidrawGenericElement["id"];
20
+ type?: Exclude<ExcalidrawBindableElement["type"], "image" | "text" | "frame" | "embeddable">;
21
+ }) | (({
22
+ type: "text";
23
+ text: string;
24
+ } | {
25
+ type?: "text";
26
+ id: ExcalidrawTextElement["id"];
27
+ text: string;
28
+ }) & Partial<ExcalidrawTextElement>)) & MarkOptional<ElementConstructorOpts, "x" | "y">;
29
+ start?: (({
30
+ type: Exclude<ExcalidrawBindableElement["type"], "image" | "text" | "frame" | "embeddable">;
31
+ id?: ExcalidrawGenericElement["id"];
32
+ } | {
33
+ id: ExcalidrawGenericElement["id"];
34
+ type?: Exclude<ExcalidrawBindableElement["type"], "image" | "text" | "frame" | "embeddable">;
35
+ }) | (({
36
+ type: "text";
37
+ text: string;
38
+ } | {
39
+ type?: "text";
40
+ id: ExcalidrawTextElement["id"];
41
+ text: string;
42
+ }) & Partial<ExcalidrawTextElement>)) & MarkOptional<ElementConstructorOpts, "x" | "y">;
43
+ } & Partial<ExcalidrawLinearElement>;
44
+ export type ValidContainer = {
45
+ type: Exclude<ExcalidrawGenericElement["type"], "selection">;
46
+ id?: ExcalidrawGenericElement["id"];
47
+ label?: {
48
+ text: string;
49
+ fontSize?: number;
50
+ fontFamily?: FontFamilyValues;
51
+ textAlign?: TextAlign;
52
+ verticalAlign?: VerticalAlign;
53
+ } & MarkOptional<ElementConstructorOpts, "x" | "y">;
54
+ } & ElementConstructorOpts;
55
+ export type ExcalidrawElementSkeleton = Extract<Exclude<ExcalidrawElement, ExcalidrawSelectionElement>, ExcalidrawEmbeddableElement | ExcalidrawFreeDrawElement | ExcalidrawFrameElement> | ({
56
+ type: Extract<ExcalidrawLinearElement["type"], "line">;
57
+ x: number;
58
+ y: number;
59
+ } & Partial<ExcalidrawLinearElement>) | ValidContainer | ValidLinearElement | ({
60
+ type: "text";
61
+ text: string;
62
+ x: number;
63
+ y: number;
64
+ id?: ExcalidrawTextElement["id"];
65
+ } & Partial<ExcalidrawTextElement>) | ({
66
+ type: Extract<ExcalidrawImageElement["type"], "image">;
67
+ x: number;
68
+ y: number;
69
+ fileId: FileId;
70
+ } & Partial<ExcalidrawImageElement>);
71
+ export declare const convertToExcalidrawElements: (elements: ExcalidrawElementSkeleton[] | null) => ExcalidrawElement[];
@@ -0,0 +1,7 @@
1
+ export declare const normalizeLink: (link: string) => string;
2
+ export declare const isLocalLink: (link: string | null) => boolean;
3
+ /**
4
+ * Returns URL sanitized and safe for usage in places such as
5
+ * iframe's src attribute or <a> href attributes.
6
+ */
7
+ export declare const toValidURL: (link: string) => string;
@@ -1,16 +1,18 @@
1
- /// <reference types="react" />
2
1
  import { AppState, ExcalidrawProps, UIAppState } from "../types";
3
2
  import { NonDeletedExcalidrawElement } from "./types";
4
3
  import { Bounds } from "./bounds";
5
4
  import "./Hyperlink.scss";
6
5
  export declare const EXTERNAL_LINK_IMG: HTMLImageElement;
7
- export declare const Hyperlink: ({ element, setAppState, onLinkOpen, }: {
6
+ export declare const Hyperlink: ({ element, setAppState, onLinkOpen, setToast, }: {
8
7
  element: NonDeletedExcalidrawElement;
9
8
  setAppState: React.Component<any, AppState>["setState"];
10
9
  onLinkOpen: ExcalidrawProps["onLinkOpen"];
10
+ setToast: (toast: {
11
+ message: string;
12
+ closable?: boolean;
13
+ duration?: number;
14
+ } | null) => void;
11
15
  }) => JSX.Element | null;
12
- export declare const normalizeLink: (link: string) => string;
13
- export declare const isLocalLink: (link: string | null) => boolean;
14
16
  export declare const actionLink: {
15
17
  name: "hyperlink";
16
18
  perform: (elements: readonly import("./types").ExcalidrawElement[], appState: Readonly<AppState>) => false | {
@@ -26,6 +28,10 @@ export declare const actionLink: {
26
28
  showWelcomeScreen: boolean;
27
29
  isLoading: boolean;
28
30
  errorMessage: import("react").ReactNode;
31
+ activeEmbeddable: {
32
+ element: NonDeletedExcalidrawElement;
33
+ state: "active" | "hover";
34
+ } | null;
29
35
  draggingElement: NonDeletedExcalidrawElement | null;
30
36
  resizingElement: NonDeletedExcalidrawElement | null;
31
37
  multiElement: import("./types").NonDeleted<import("./types").ExcalidrawLinearElement> | null;
@@ -33,18 +39,21 @@ export declare const actionLink: {
33
39
  isBindingEnabled: boolean;
34
40
  startBoundElement: import("./types").NonDeleted<import("./types").ExcalidrawBindableElement> | null;
35
41
  suggestedBindings: import("./binding").SuggestedBinding[];
42
+ frameToHighlight: import("./types").NonDeleted<import("./types").ExcalidrawFrameElement> | null;
43
+ frameRendering: {
44
+ enabled: boolean;
45
+ name: boolean;
46
+ outline: boolean;
47
+ clip: boolean;
48
+ };
49
+ editingFrame: string | null;
50
+ elementsToHighlight: import("./types").NonDeleted<import("./types").ExcalidrawElement>[] | null;
36
51
  editingElement: NonDeletedExcalidrawElement | null;
37
52
  editingLinearElement: import("./linearElementEditor").LinearElementEditor | null;
38
53
  activeTool: {
39
- lastActiveTool: import("../types").LastActiveTool;
54
+ lastActiveTool: import("../types").ActiveTool | null;
40
55
  locked: boolean;
41
- } & ({
42
- type: "line" | "arrow" | "text" | "selection" | "rectangle" | "diamond" | "ellipse" | "image" | "freedraw" | "eraser" | "hand";
43
- customType: null;
44
- } | {
45
- type: "custom";
46
- customType: string;
47
- });
56
+ } & import("../types").ActiveTool;
48
57
  penMode: boolean;
49
58
  penDetected: boolean;
50
59
  exportBackground: boolean;
@@ -83,12 +92,13 @@ export declare const actionLink: {
83
92
  openDialog: "imageExport" | "help" | "jsonExport" | null;
84
93
  defaultSidebarDockedPreference: boolean;
85
94
  lastPointerDownWith: import("./types").PointerType;
86
- selectedElementIds: {
87
- [id: string]: boolean;
88
- };
95
+ selectedElementIds: Readonly<{
96
+ [id: string]: true;
97
+ }>;
89
98
  previousSelectedElementIds: {
90
- [id: string]: boolean;
99
+ [id: string]: true;
91
100
  };
101
+ selectedElementsAreBeingDragged: boolean;
92
102
  shouldCacheIgnoreZoom: boolean;
93
103
  toast: {
94
104
  message: string;
@@ -96,7 +106,7 @@ export declare const actionLink: {
96
106
  duration?: number | undefined;
97
107
  } | null;
98
108
  zenModeEnabled: boolean;
99
- theme: string;
109
+ theme: import("./types").Theme;
100
110
  gridSize: number | null;
101
111
  viewModeEnabled: boolean;
102
112
  selectedGroupIds: {
@@ -120,6 +130,12 @@ export declare const actionLink: {
120
130
  };
121
131
  pendingImageElementId: string | null;
122
132
  selectedLinearElement: import("./linearElementEditor").LinearElementEditor | null;
133
+ snapLines: readonly import("../snapping").SnapLine[];
134
+ originSnapOffset: {
135
+ x: number;
136
+ y: number;
137
+ } | null;
138
+ objectsSnapModeEnabled: boolean;
123
139
  };
124
140
  commitToHistory: true;
125
141
  };
@@ -127,16 +143,17 @@ export declare const actionLink: {
127
143
  category: "hyperlink";
128
144
  action: string;
129
145
  };
130
- keyTest: (event: KeyboardEvent | import("react").KeyboardEvent<Element>) => boolean;
131
- contextItemLabel: (elements: readonly import("./types").ExcalidrawElement[], appState: Readonly<AppState>) => "labels.link.edit" | "labels.link.create";
146
+ keyTest: (event: import("react").KeyboardEvent<Element> | KeyboardEvent) => boolean;
147
+ contextItemLabel: (elements: readonly import("./types").ExcalidrawElement[], appState: Readonly<AppState>) => "labels.link.editEmbed" | "labels.link.edit" | "labels.link.createEmbed" | "labels.link.create";
132
148
  predicate: (elements: readonly import("./types").ExcalidrawElement[], appState: AppState) => boolean;
133
149
  PanelComponent: ({ elements, appState, updateData }: import("../actions/types").PanelComponentProps) => JSX.Element;
134
150
  } & {
135
- keyTest?: ((event: KeyboardEvent | import("react").KeyboardEvent<Element>) => boolean) | undefined;
151
+ keyTest?: ((event: import("react").KeyboardEvent<Element> | KeyboardEvent) => boolean) | undefined;
136
152
  };
137
- export declare const getContextMenuLabel: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState) => "labels.link.edit" | "labels.link.create";
138
- export declare const getLinkHandleFromCoords: ([x1, y1, x2, y2]: Bounds, angle: number, appState: UIAppState) => [x: number, y: number, width: number, height: number];
139
- export declare const isPointHittingLinkIcon: (element: NonDeletedExcalidrawElement, appState: AppState, [x, y]: readonly [number, number], isMobile: boolean) => boolean;
153
+ export declare const getContextMenuLabel: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState) => "labels.link.editEmbed" | "labels.link.edit" | "labels.link.createEmbed" | "labels.link.create";
154
+ export declare const getLinkHandleFromCoords: ([x1, y1, x2, y2]: Bounds, angle: number, appState: Pick<UIAppState, "zoom">) => [x: number, y: number, width: number, height: number];
155
+ export declare const isPointHittingLinkIcon: (element: NonDeletedExcalidrawElement, appState: AppState, [x, y]: readonly [number, number]) => boolean;
156
+ export declare const isPointHittingLink: (element: NonDeletedExcalidrawElement, appState: AppState, [x, y]: readonly [number, number], isMobile: boolean) => boolean;
140
157
  export declare const showHyperlinkTooltip: (element: NonDeletedExcalidrawElement, appState: AppState) => void;
141
158
  export declare const hideHyperlinkToolip: () => void;
142
159
  export declare const shouldHideLinkPopup: (element: NonDeletedExcalidrawElement, appState: AppState, [clientX, clientY]: readonly [number, number]) => Boolean;
@@ -7,7 +7,7 @@ export type SuggestedPointBinding = [
7
7
  "start" | "end" | "both",
8
8
  NonDeleted<ExcalidrawBindableElement>
9
9
  ];
10
- export declare const shouldEnableBindingForPointerEvent: (event: React.PointerEvent<HTMLCanvasElement>) => boolean;
10
+ export declare const shouldEnableBindingForPointerEvent: (event: React.PointerEvent<HTMLElement>) => boolean;
11
11
  export declare const isBindingEnabled: (appState: AppState) => boolean;
12
12
  export declare const bindOrUnbindLinearElement: (linearElement: NonDeleted<ExcalidrawLinearElement>, startBindingElement: ExcalidrawBindableElement | null | "keep", endBindingElement: ExcalidrawBindableElement | null | "keep") => void;
13
13
  export declare const bindOrUnbindSelectedElements: (elements: NonDeleted<ExcalidrawElement>[]) => void;
@@ -15,6 +15,7 @@ export declare const maybeBindLinearElement: (linearElement: NonDeleted<Excalidr
15
15
  x: number;
16
16
  y: number;
17
17
  }) => void;
18
+ export declare const bindLinearElement: (linearElement: NonDeleted<ExcalidrawLinearElement>, hoveredElement: ExcalidrawBindableElement, startOrEnd: "start" | "end") => void;
18
19
  export declare const isLinearElementSimpleAndAlreadyBound: (linearElement: NonDeleted<ExcalidrawLinearElement>, alreadyBoundToId: ExcalidrawBindableElement["id"] | undefined, bindableElement: ExcalidrawBindableElement) => boolean;
19
20
  export declare const unbindLinearElements: (elements: NonDeleted<ExcalidrawElement>[]) => void;
20
21
  export declare const getHoveredElementForBinding: (pointerCoords: {
@@ -1,21 +1,45 @@
1
1
  import { ExcalidrawElement, ExcalidrawLinearElement, Arrowhead, NonDeleted } from "./types";
2
2
  import { Drawable, Op } from "roughjs/bin/core";
3
- export type Bounds = readonly [number, number, number, number];
3
+ import { Point } from "../types";
4
+ export type RectangleBox = {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ angle: number;
10
+ };
11
+ export type Bounds = readonly [x1: number, y1: number, x2: number, y2: number];
12
+ export declare class ElementBounds {
13
+ private static boundsCache;
14
+ static getBounds(element: ExcalidrawElement): Bounds;
15
+ private static calculateBounds;
16
+ }
4
17
  export declare const getElementAbsoluteCoords: (element: ExcalidrawElement, includeBoundText?: boolean) => [number, number, number, number, number, number];
18
+ export declare const getElementLineSegments: (element: ExcalidrawElement) => [Point, Point][];
19
+ /**
20
+ * Scene -> Scene coords, but in x1,x2,y1,y2 format.
21
+ *
22
+ * Rectangle here means any rectangular frame, not an excalidraw element.
23
+ */
24
+ export declare const getRectangleBoxAbsoluteCoords: (boxSceneCoords: RectangleBox) => number[];
5
25
  export declare const pointRelativeTo: (element: ExcalidrawElement, absoluteCoords: readonly [number, number]) => readonly [number, number];
6
26
  export declare const getDiamondPoints: (element: ExcalidrawElement) => number[];
7
27
  export declare const getCurvePathOps: (shape: Drawable) => Op[];
8
28
  export declare const getMinMaxXYFromCurvePathOps: (ops: Op[], transformXY?: ((x: number, y: number) => [number, number]) | undefined) => [number, number, number, number];
9
29
  export declare const getArrowheadPoints: (element: ExcalidrawLinearElement, shape: Drawable[], position: "start" | "end", arrowhead: Arrowhead) => number[] | null;
10
- export declare const getElementBounds: (element: ExcalidrawElement) => [number, number, number, number];
11
- export declare const getCommonBounds: (elements: readonly ExcalidrawElement[]) => [number, number, number, number];
30
+ export declare const getElementBounds: (element: ExcalidrawElement) => Bounds;
31
+ export declare const getCommonBounds: (elements: readonly ExcalidrawElement[]) => Bounds;
32
+ export declare const getDraggedElementsBounds: (elements: ExcalidrawElement[], dragOffset: {
33
+ x: number;
34
+ y: number;
35
+ }) => number[];
12
36
  export declare const getResizedElementAbsoluteCoords: (element: ExcalidrawElement, nextWidth: number, nextHeight: number, normalizePoints: boolean) => [number, number, number, number];
13
37
  export declare const getElementPointsCoords: (element: ExcalidrawLinearElement, points: readonly (readonly [number, number])[]) => [number, number, number, number];
14
38
  export declare const getClosestElementBounds: (elements: readonly ExcalidrawElement[], from: {
15
39
  x: number;
16
40
  y: number;
17
- }) => [number, number, number, number];
18
- export interface Box {
41
+ }) => Bounds;
42
+ export interface BoundingBox {
19
43
  minX: number;
20
44
  minY: number;
21
45
  maxX: number;
@@ -25,4 +49,4 @@ export interface Box {
25
49
  width: number;
26
50
  height: number;
27
51
  }
28
- export declare const getCommonBoundingBox: (elements: ExcalidrawElement[] | readonly NonDeleted<ExcalidrawElement>[]) => Box;
52
+ export declare const getCommonBoundingBox: (elements: ExcalidrawElement[] | readonly NonDeleted<ExcalidrawElement>[]) => BoundingBox;
@@ -1,11 +1,11 @@
1
1
  import * as GA from "../ga";
2
- import { NonDeletedExcalidrawElement, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawRectangleElement, ExcalidrawDiamondElement, ExcalidrawTextElement, ExcalidrawEllipseElement, NonDeleted, ExcalidrawImageElement } from "./types";
3
- import { Point } from "../types";
2
+ import { NonDeletedExcalidrawElement, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawRectangleElement, ExcalidrawEmbeddableElement, ExcalidrawDiamondElement, ExcalidrawTextElement, ExcalidrawEllipseElement, NonDeleted, ExcalidrawImageElement, ExcalidrawFrameElement } from "./types";
3
+ import { FrameNameBoundsCache, Point } from "../types";
4
4
  import { AppState } from "../types";
5
- export declare const hitTest: (element: NonDeletedExcalidrawElement, appState: AppState, x: number, y: number) => boolean;
6
- export declare const isHittingElementBoundingBoxWithoutHittingElement: (element: NonDeletedExcalidrawElement, appState: AppState, x: number, y: number) => boolean;
7
- export declare const isHittingElementNotConsideringBoundingBox: (element: NonDeletedExcalidrawElement, appState: AppState, point: readonly [number, number]) => boolean;
8
- export declare const isPointHittingElementBoundingBox: (element: NonDeleted<ExcalidrawElement>, [x, y]: readonly [number, number], threshold: number) => boolean;
5
+ export declare const hitTest: (element: NonDeletedExcalidrawElement, appState: AppState, frameNameBoundsCache: FrameNameBoundsCache, x: number, y: number) => boolean;
6
+ export declare const isHittingElementBoundingBoxWithoutHittingElement: (element: NonDeletedExcalidrawElement, appState: AppState, frameNameBoundsCache: FrameNameBoundsCache, x: number, y: number) => boolean;
7
+ export declare const isHittingElementNotConsideringBoundingBox: (element: NonDeletedExcalidrawElement, appState: AppState, frameNameBoundsCache: FrameNameBoundsCache | null, point: readonly [number, number]) => boolean;
8
+ export declare const isPointHittingElementBoundingBox: (element: NonDeleted<ExcalidrawElement>, [x, y]: readonly [number, number], threshold: number, frameNameBoundsCache: FrameNameBoundsCache | null) => boolean;
9
9
  export declare const bindingBorderTest: (element: NonDeleted<ExcalidrawBindableElement>, { x, y }: {
10
10
  x: number;
11
11
  y: number;
@@ -18,4 +18,4 @@ export declare const determineFocusPoint: (element: ExcalidrawBindableElement, f
18
18
  export declare const intersectElementWithLine: (element: ExcalidrawBindableElement, a: readonly [number, number], b: readonly [number, number], gap?: number) => Point[];
19
19
  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[];
20
20
  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];
21
- 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];
21
+ export declare const findFocusPointForRectangulars: (element: ExcalidrawRectangleElement | ExcalidrawImageElement | ExcalidrawDiamondElement | ExcalidrawTextElement | ExcalidrawEmbeddableElement | ExcalidrawFrameElement, relativeDistance: number, point: readonly [number, number, number, number, number, number, number, number]) => readonly [number, number, number, number, number, number, number, number];
@@ -1,5 +1,15 @@
1
1
  import { NonDeletedExcalidrawElement } from "./types";
2
2
  import { AppState, PointerDownState } from "../types";
3
- export declare const dragSelectedElements: (pointerDownState: PointerDownState, selectedElements: NonDeletedExcalidrawElement[], pointerX: number, pointerY: number, lockDirection: boolean | undefined, distanceX: number | undefined, distanceY: number | undefined, appState: AppState) => void;
3
+ import Scene from "../scene/Scene";
4
+ export declare const dragSelectedElements: (pointerDownState: PointerDownState, selectedElements: NonDeletedExcalidrawElement[], offset: {
5
+ x: number;
6
+ y: number;
7
+ }, appState: AppState, scene: Scene, snapOffset: {
8
+ x: number;
9
+ y: number;
10
+ }, gridSize: AppState["gridSize"]) => void;
4
11
  export declare const getDragOffsetXY: (selectedElements: NonDeletedExcalidrawElement[], x: number, y: number) => [number, number];
5
- export declare const dragNewElement: (draggingElement: NonDeletedExcalidrawElement, elementType: AppState["activeTool"]["type"], originX: number, originY: number, x: number, y: number, width: number, height: number, shouldMaintainAspectRatio: boolean, shouldResizeFromCenter: boolean, widthAspectRatio?: number | null) => void;
12
+ export declare const dragNewElement: (draggingElement: NonDeletedExcalidrawElement, elementType: AppState["activeTool"]["type"], originX: number, originY: number, x: number, y: number, width: number, height: number, shouldMaintainAspectRatio: boolean, shouldResizeFromCenter: boolean, widthAspectRatio?: number | null, originOffset?: {
13
+ x: number;
14
+ y: number;
15
+ } | null) => void;