@excalidraw/math 0.18.0-2b0e4c9 → 0.18.0-39103bd

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 (172) hide show
  1. package/dist/dev/index.js +303 -100
  2. package/dist/dev/index.js.map +4 -4
  3. package/dist/prod/index.js +1 -1
  4. package/dist/types/common/src/colors.d.ts +1 -1
  5. package/dist/types/common/src/constants.d.ts +11 -7
  6. package/dist/types/common/src/points.d.ts +1 -1
  7. package/dist/types/common/src/utils.d.ts +1 -43
  8. package/dist/types/element/src/Scene.d.ts +6 -4
  9. package/dist/types/element/src/align.d.ts +2 -2
  10. package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
  11. package/dist/types/element/src/arrows/focus.d.ts +5 -2
  12. package/dist/types/element/src/binding.d.ts +17 -8
  13. package/dist/types/element/src/bounds.d.ts +22 -7
  14. package/dist/types/element/src/collision.d.ts +1 -1
  15. package/dist/types/element/src/comparisons.d.ts +5 -4
  16. package/dist/types/element/src/convertToShape.d.ts +23 -0
  17. package/dist/types/element/src/distribute.d.ts +2 -2
  18. package/dist/types/element/src/dragElements.d.ts +27 -0
  19. package/dist/types/element/src/duplicate.d.ts +4 -3
  20. package/dist/types/element/src/embeddable.d.ts +2 -2
  21. package/dist/types/element/src/flowchart.d.ts +7 -7
  22. package/dist/types/element/src/fractionalIndex.d.ts +2 -2
  23. package/dist/types/element/src/frame.d.ts +9 -8
  24. package/dist/types/element/src/groups.d.ts +9 -9
  25. package/dist/types/element/src/index.d.ts +3 -1
  26. package/dist/types/element/src/linearElementEditor.d.ts +17 -10
  27. package/dist/types/element/src/newElement.d.ts +14 -0
  28. package/dist/types/element/src/renderElement.d.ts +0 -3
  29. package/dist/types/element/src/resizeElements.d.ts +2 -2
  30. package/dist/types/element/src/selection.d.ts +11 -7
  31. package/dist/types/element/src/shape.d.ts +1 -1
  32. package/dist/types/element/src/textElement.d.ts +13 -10
  33. package/dist/types/element/src/textWrapping.d.ts +26 -0
  34. package/dist/types/element/src/transform.d.ts +2 -2
  35. package/dist/types/element/src/typeChecks.d.ts +26 -25
  36. package/dist/types/element/src/types.d.ts +8 -1
  37. package/dist/types/element/src/utils.d.ts +1 -1
  38. package/dist/types/element/src/zindex.d.ts +2 -2
  39. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +33 -15
  40. package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
  41. package/dist/types/excalidraw/actions/actionBoundText.d.ts +23 -11
  42. package/dist/types/excalidraw/actions/actionCanvas.d.ts +139 -933
  43. package/dist/types/excalidraw/actions/actionClipboard.d.ts +22 -10
  44. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +11 -5
  45. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +35 -16
  46. package/dist/types/excalidraw/actions/{actionEmbeddable.d.ts → actionDeselect.d.ts} +25 -34
  47. package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -3
  48. package/dist/types/excalidraw/actions/actionElementLink.d.ts +11 -5
  49. package/dist/types/excalidraw/actions/actionElementLock.d.ts +23 -11
  50. package/dist/types/excalidraw/actions/actionExport.d.ts +24 -12
  51. package/dist/types/excalidraw/actions/actionFrame.d.ts +45 -199
  52. package/dist/types/excalidraw/actions/actionGroup.d.ts +38 -26
  53. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +15 -7
  54. package/dist/types/excalidraw/actions/actionLink.d.ts +12 -6
  55. package/dist/types/excalidraw/actions/actionMenu.d.ts +11 -5
  56. package/dist/types/excalidraw/actions/actionProperties.d.ts +49 -28
  57. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +16 -10
  58. package/dist/types/excalidraw/actions/actionStyles.d.ts +12 -5
  59. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +3 -3
  60. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +12 -6
  61. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +15 -10
  62. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +12 -6
  63. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +12 -6
  64. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +15 -10
  65. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
  66. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +12 -6
  67. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +13 -7
  68. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +12 -6
  69. package/dist/types/excalidraw/actions/index.d.ts +2 -2
  70. package/dist/types/excalidraw/actions/manager.d.ts +1 -0
  71. package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
  72. package/dist/types/excalidraw/actions/types.d.ts +8 -4
  73. package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
  74. package/dist/types/excalidraw/appState.d.ts +7 -5
  75. package/dist/types/excalidraw/components/Actions.d.ts +17 -12
  76. package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
  77. package/dist/types/excalidraw/components/App.arrowText.d.ts +72 -0
  78. package/dist/types/excalidraw/components/App.cursor.d.ts +31 -0
  79. package/dist/types/excalidraw/components/App.d.ts +358 -64
  80. package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
  81. package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
  82. package/dist/types/excalidraw/components/App.viewport.d.ts +73 -0
  83. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +2 -2
  84. package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -1
  85. package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
  86. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +2 -2
  87. package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
  88. package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -1
  89. package/dist/types/excalidraw/components/{ToolButton.d.ts → IconButton.d.ts} +16 -19
  90. package/dist/types/excalidraw/components/Island.d.ts +7 -0
  91. package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
  92. package/dist/types/excalidraw/components/LayerUI.d.ts +4 -2
  93. package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
  94. package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
  95. package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
  96. package/dist/types/excalidraw/components/MobileMenu.d.ts +4 -4
  97. package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
  98. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  99. package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
  100. package/dist/types/excalidraw/components/Popover.d.ts +1 -3
  101. package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
  102. package/dist/types/excalidraw/components/Range.d.ts +10 -4
  103. package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
  104. package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
  105. package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +1 -1
  106. package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
  107. package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
  108. package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -2
  109. package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
  110. package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
  111. package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
  112. package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
  113. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  114. package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +4 -4
  115. package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +3 -3
  116. package/dist/types/excalidraw/components/ToolPopover.d.ts +3 -6
  117. package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
  118. package/dist/types/excalidraw/components/Tools.d.ts +145 -0
  119. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +4 -1
  120. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +1 -0
  121. package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
  122. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -1
  123. package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
  124. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +2 -2
  125. package/dist/types/excalidraw/components/icons.d.ts +3 -1
  126. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +8 -4
  127. package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
  128. package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
  129. package/dist/types/excalidraw/data/blob.d.ts +26 -14
  130. package/dist/types/excalidraw/data/index.d.ts +4 -4
  131. package/dist/types/excalidraw/data/json.d.ts +19 -13
  132. package/dist/types/excalidraw/data/library.d.ts +1 -1
  133. package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
  134. package/dist/types/excalidraw/eraser/index.d.ts +2 -3
  135. package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
  136. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  137. package/dist/types/excalidraw/{laser-trails.d.ts → laserTrails.d.ts} +5 -7
  138. package/dist/types/excalidraw/lasso/index.d.ts +2 -3
  139. package/dist/types/excalidraw/renderer/animation.d.ts +5 -1
  140. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -3
  141. package/dist/types/excalidraw/scene/Renderer.d.ts +426 -19
  142. package/dist/types/excalidraw/scene/export.d.ts +3 -3
  143. package/dist/types/excalidraw/scene/index.d.ts +2 -2
  144. package/dist/types/excalidraw/scene/types.d.ts +4 -3
  145. package/dist/types/excalidraw/snapping.d.ts +7 -7
  146. package/dist/types/excalidraw/textAutoResizeHandle.d.ts +15 -0
  147. package/dist/types/excalidraw/types.d.ts +369 -20
  148. package/dist/types/excalidraw/viewport.d.ts +272 -0
  149. package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +6 -3
  150. package/dist/types/fractional-indexing/src/index.d.ts +29 -0
  151. package/dist/types/laser-pointer/src/index.d.ts +2 -0
  152. package/dist/types/laser-pointer/src/math.d.ts +16 -0
  153. package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
  154. package/dist/types/laser-pointer/src/state.d.ts +36 -0
  155. package/dist/types/math/src/constants.d.ts +0 -1
  156. package/dist/types/math/src/curve.d.ts +4 -1
  157. package/dist/types/math/src/index.d.ts +1 -0
  158. package/dist/types/math/src/pca.d.ts +79 -0
  159. package/dist/types/math/src/point.d.ts +2 -1
  160. package/dist/types/math/src/polygon.d.ts +25 -1
  161. package/dist/types/utils/src/export.d.ts +3 -3
  162. package/dist/types/utils/src/index.d.ts +1 -2
  163. package/package.json +2 -2
  164. package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
  165. package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
  166. package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -10
  167. package/dist/types/excalidraw/components/shapes.d.ts +0 -263
  168. package/dist/types/excalidraw/cursor.d.ts +0 -5
  169. package/dist/types/excalidraw/scene/scroll.d.ts +0 -18
  170. package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
  171. package/dist/types/utils/src/bbox.d.ts +0 -9
  172. package/dist/types/utils/src/withinBounds.d.ts +0 -19
@@ -4,7 +4,8 @@ import type { AppClassProperties } from "../types";
4
4
  type ToolOption = {
5
5
  type: string;
6
6
  icon: React.ReactNode;
7
- title?: string;
7
+ title: string;
8
+ fillable?: boolean;
8
9
  };
9
10
  type ToolPopoverProps = {
10
11
  app: AppClassProperties;
@@ -13,13 +14,9 @@ type ToolPopoverProps = {
13
14
  type: string;
14
15
  };
15
16
  defaultOption: string;
16
- className?: string;
17
- namePrefix: string;
18
- title: string;
19
17
  "data-testid": string;
20
18
  onToolChange: (type: string) => void;
21
19
  displayedOption: ToolOption;
22
- fillable?: boolean;
23
20
  };
24
- export declare const ToolPopover: ({ app, options, activeTool, defaultOption, className, namePrefix, title, "data-testid": dataTestId, onToolChange, displayedOption, fillable, }: ToolPopoverProps) => import("react/jsx-runtime").JSX.Element;
21
+ export declare const ToolPopover: ({ app, options, activeTool, defaultOption, "data-testid": dataTestId, onToolChange, displayedOption, }: ToolPopoverProps) => import("react/jsx-runtime").JSX.Element;
25
22
  export {};
@@ -0,0 +1,11 @@
1
+ import type { AppClassProperties, AppProps, AppState, UIAppState } from "../types";
2
+ /** the main (desktop/tablet) toolbar island */
3
+ export declare const Toolbar: ({ app, appState, setAppState, UIOptions, onPenModeToggle, onLockToggle, heading, }: {
4
+ app: AppClassProperties;
5
+ appState: UIAppState;
6
+ setAppState: React.Component<any, AppState>["setState"];
7
+ UIOptions: AppProps["UIOptions"];
8
+ onPenModeToggle: AppClassProperties["togglePenMode"];
9
+ onLockToggle: () => void;
10
+ heading: React.ReactNode;
11
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,145 @@
1
+ import type { AppClassProperties, AppState, ToolType, UIAppState } from "../types";
2
+ export type ToolConfig = {
3
+ icon: React.ReactNode;
4
+ /** letter shortcut(s) — the first one is shown in tooltips */
5
+ letterKey?: string | readonly string[];
6
+ /** whether `letterKey` requires Shift to be held (e.g. Shift+X) */
7
+ shiftKey?: boolean;
8
+ numericKey?: string;
9
+ /** whether the tool's shapes can be filled — fills the icon when active */
10
+ fillable?: boolean;
11
+ /**
12
+ * re-activating the tool switches back to the previously active tool
13
+ * (via the keyboard shortcut or ESC — see `setActiveTool`'s `toggle`
14
+ * option)
15
+ */
16
+ toggle?: boolean;
17
+ };
18
+ /**
19
+ * Tool data — the single source of truth for tool buttons, keyboard
20
+ * shortcuts (`findShapeByKey`), and the command palette. Toolbar placement
21
+ * is not defined here: toolbars compose the `*ToolButton` components below
22
+ * manually, so entries without a toolbar slot (e.g. laser) are data-only.
23
+ */
24
+ export declare const TOOLS: {
25
+ hand: ToolConfig;
26
+ selection: ToolConfig;
27
+ rectangle: ToolConfig;
28
+ diamond: ToolConfig;
29
+ ellipse: ToolConfig;
30
+ arrow: ToolConfig;
31
+ line: ToolConfig;
32
+ freedraw: ToolConfig;
33
+ text: ToolConfig;
34
+ image: ToolConfig;
35
+ eraser: ToolConfig;
36
+ frame: ToolConfig;
37
+ autoshape: ToolConfig;
38
+ embeddable: ToolConfig;
39
+ laser: ToolConfig;
40
+ lasso: ToolConfig;
41
+ };
42
+ export type ToolbarToolType = keyof typeof TOOLS;
43
+ /**
44
+ * tools that, when activated while already active, switch back to the
45
+ * previously active tool (see `setActiveTool`'s `toggle` option)
46
+ */
47
+ export declare const TOGGLE_TOOLS: readonly (ToolType | "custom")[];
48
+ export declare const getToolLetter: (type: ToolbarToolType) => string | undefined;
49
+ /** human-readable shortcut hint, e.g. "R or 2", used in tooltips & aria */
50
+ export declare const getToolShortcut: (type: ToolbarToolType) => string;
51
+ export declare const findShapeByKey: (key: string, app: AppClassProperties, shiftKey?: boolean) => "line" | "arrow" | "text" | "selection" | "rectangle" | "diamond" | "ellipse" | "embeddable" | "image" | "frame" | "freedraw" | "lasso" | "eraser" | "hand" | "laser" | "autoshape" | null;
52
+ /**
53
+ * Whether a toolbar entry activating the given tool renders disabled — true
54
+ * when the active tool is host-controlled (`props.activeTool`) and the entry
55
+ * doesn't activate the forced tool (`setActiveTool` refuses it).
56
+ */
57
+ export declare const isToolButtonDisabled: (app: AppClassProperties, type: string) => boolean;
58
+ export type ToolButtonComponentProps = {
59
+ app: AppClassProperties;
60
+ activeTool: UIAppState["activeTool"];
61
+ /** hide the keybinding badge rendered in the button's corner */
62
+ hideKeyBinding?: boolean;
63
+ /**
64
+ * hide all shortcut affordances (tooltip hint, aria-keyshortcuts, and the
65
+ * keybinding badge) — used on mobile where there's no keyboard
66
+ */
67
+ hideShortcut?: boolean;
68
+ };
69
+ export declare const HandToolButton: {
70
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
71
+ displayName: string;
72
+ };
73
+ export declare const RectangleToolButton: {
74
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
75
+ displayName: string;
76
+ };
77
+ export declare const DiamondToolButton: {
78
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
79
+ displayName: string;
80
+ };
81
+ export declare const EllipseToolButton: {
82
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
83
+ displayName: string;
84
+ };
85
+ export declare const ArrowToolButton: {
86
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
87
+ displayName: string;
88
+ };
89
+ export declare const LineToolButton: {
90
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
91
+ displayName: string;
92
+ };
93
+ export declare const FreedrawToolButton: {
94
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
95
+ displayName: string;
96
+ };
97
+ export declare const TextToolButton: {
98
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
99
+ displayName: string;
100
+ };
101
+ export declare const ImageToolButton: {
102
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
103
+ displayName: string;
104
+ };
105
+ export declare const EraserToolButton: {
106
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
107
+ displayName: string;
108
+ };
109
+ export declare const FrameToolButton: {
110
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
111
+ displayName: string;
112
+ };
113
+ /**
114
+ * The selection tool button — pointer-clicking it while the selection tool
115
+ * is active switches to lasso.
116
+ */
117
+ export declare const SelectionToolButton: {
118
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
119
+ displayName: string;
120
+ };
121
+ /**
122
+ * Rendered in place of the selection button when lasso is the preferred
123
+ * selection tool; the selection shortcut activates it then.
124
+ */
125
+ export declare const LassoToolButton: {
126
+ ({ app, activeTool, hideKeyBinding, hideShortcut, }: ToolButtonComponentProps): import("react/jsx-runtime").JSX.Element;
127
+ displayName: string;
128
+ };
129
+ /**
130
+ * The selection ⇄ lasso popover used in compact (tablet) and mobile
131
+ * toolbars; picking an option also makes it the preferred selection tool.
132
+ */
133
+ export declare const SelectionToolPopover: ({ app, activeTool, setAppState, }: {
134
+ app: AppClassProperties;
135
+ activeTool: UIAppState["activeTool"];
136
+ setAppState: React.Component<any, AppState>["setState"];
137
+ }) => import("react/jsx-runtime").JSX.Element;
138
+ /**
139
+ * The freedraw ⇄ draw-shape popover used in compact (tablet) and mobile
140
+ * toolbars. The trigger remembers and displays the most recently used option.
141
+ */
142
+ export declare const FreedrawToolPopover: ({ app, activeTool, }: {
143
+ app: AppClassProperties;
144
+ activeTool: UIAppState["activeTool"];
145
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -11,16 +11,19 @@ type InteractiveCanvasProps = {
11
11
  visibleElements: readonly NonDeletedExcalidrawElement[];
12
12
  selectedElements: readonly NonDeletedExcalidrawElement[];
13
13
  allElementsMap: NonDeletedSceneElementsMap;
14
- sceneNonce: number | undefined;
14
+ canvasNonce: string;
15
15
  selectionNonce: number | undefined;
16
16
  scale: number;
17
17
  appState: InteractiveCanvasAppState;
18
18
  renderScrollbars: boolean;
19
19
  editorInterface: EditorInterface;
20
20
  app: AppClassProperties;
21
+ interactionEnabled: boolean;
22
+ navigationEnabled: boolean;
21
23
  renderInteractiveSceneCallback: (data: RenderInteractiveSceneCallback) => void;
22
24
  handleCanvasRef: (canvas: HTMLCanvasElement | null) => void;
23
25
  onContextMenu: Exclude<DOMAttributes<HTMLCanvasElement | HTMLDivElement>["onContextMenu"], undefined>;
26
+ onClick: Exclude<DOMAttributes<HTMLCanvasElement>["onClick"], undefined>;
24
27
  onPointerMove: Exclude<DOMAttributes<HTMLCanvasElement>["onPointerMove"], undefined>;
25
28
  onPointerUp: Exclude<DOMAttributes<HTMLCanvasElement>["onPointerUp"], undefined>;
26
29
  onPointerCancel: Exclude<DOMAttributes<HTMLCanvasElement>["onPointerCancel"], undefined>;
@@ -4,6 +4,7 @@ import type { AppState } from "../../types";
4
4
  import type { RoughCanvas } from "roughjs/bin/canvas";
5
5
  interface NewElementCanvasProps {
6
6
  appState: AppState;
7
+ newElement: NonNullable<AppState["newElement"]>;
7
8
  elementsMap: RenderableElementsMap;
8
9
  allElementsMap: NonDeletedSceneElementsMap;
9
10
  scale: number;
@@ -9,7 +9,7 @@ type StaticCanvasProps = {
9
9
  elementsMap: RenderableElementsMap;
10
10
  allElementsMap: NonDeletedSceneElementsMap;
11
11
  visibleElements: readonly NonDeletedExcalidrawElement[];
12
- sceneNonce: number | undefined;
12
+ canvasNonce: string;
13
13
  selectionNonce: number | undefined;
14
14
  scale: number;
15
15
  appState: StaticCanvasAppState;
@@ -9,9 +9,10 @@ type Props<T> = {
9
9
  onChange: (value: T) => void;
10
10
  children: React.ReactNode;
11
11
  name: string;
12
+ icon?: React.ReactNode;
12
13
  };
13
14
  declare const DropdownMenuItemContentRadio: {
14
- <T>({ value, shortcut, onChange, choices, children, name, }: Props<T>): import("react/jsx-runtime").JSX.Element;
15
+ <T>({ value, shortcut, onChange, choices, children, name, icon, }: Props<T>): import("react/jsx-runtime").JSX.Element;
15
16
  displayName: string;
16
17
  };
17
18
  export default DropdownMenuItemContentRadio;
@@ -1,11 +1,13 @@
1
1
  import type { ActionManager } from "../../actions/manager";
2
2
  import type { UIAppState } from "../../types";
3
3
  declare const Footer: {
4
- ({ appState, actionManager, showExitZenModeBtn, renderWelcomeScreen, }: {
4
+ ({ appState, actionManager, showExitZenModeBtn, renderWelcomeScreen, defaultUIEnabled, zoomUIEnabled, }: {
5
5
  appState: UIAppState;
6
6
  actionManager: ActionManager;
7
7
  showExitZenModeBtn: boolean;
8
8
  renderWelcomeScreen: boolean;
9
+ defaultUIEnabled: boolean;
10
+ zoomUIEnabled: boolean;
9
11
  }): import("react/jsx-runtime").JSX.Element;
10
12
  displayName: string;
11
13
  };
@@ -1,10 +1,10 @@
1
1
  import type { GlobalPoint, Radians } from "@excalidraw/math";
2
2
  import type { Bounds } from "@excalidraw/common";
3
3
  import type { ElementsMap, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
4
- import type { AppState, UIAppState } from "../../types";
4
+ import type { AppState } from "../../types";
5
5
  export declare const DEFAULT_LINK_SIZE = 12;
6
6
  export declare const EXTERNAL_LINK_IMG: HTMLImageElement;
7
7
  export declare const ELEMENT_LINK_IMG: HTMLImageElement;
8
- export declare const getLinkHandleFromCoords: ([x1, y1, x2, y2]: Bounds, angle: Radians, appState: Pick<UIAppState, "zoom">) => Bounds;
8
+ export declare const getLinkHandleFromCoords: ([x1, y1, x2, y2]: Bounds, angle: Radians, appState: Pick<AppState, "zoom">) => Bounds;
9
9
  export declare const isPointHittingLinkIcon: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, [x, y]: GlobalPoint) => boolean;
10
10
  export declare const isPointHittingLink: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, [x, y]: GlobalPoint, isMobile: boolean) => boolean;
@@ -114,6 +114,8 @@ export declare const StrokeStyleDottedIcon: import("react/jsx-runtime").JSX.Elem
114
114
  export declare const SloppinessArchitectIcon: import("react/jsx-runtime").JSX.Element;
115
115
  export declare const SloppinessArtistIcon: import("react/jsx-runtime").JSX.Element;
116
116
  export declare const SloppinessCartoonistIcon: import("react/jsx-runtime").JSX.Element;
117
+ export declare const strokeVariabilityConstantIcon: import("react/jsx-runtime").JSX.Element;
118
+ export declare const strokeVariabilityVariableIcon: import("react/jsx-runtime").JSX.Element;
117
119
  export declare const EdgeSharpIcon: import("react/jsx-runtime").JSX.Element;
118
120
  export declare const EdgeRoundIcon: import("react/jsx-runtime").JSX.Element;
119
121
  export declare const ArrowheadNoneIcon: React.MemoExoticComponent<({ flip }: {
@@ -195,12 +197,12 @@ export declare const playerStopFilledIcon: import("react/jsx-runtime").JSX.Eleme
195
197
  export declare const tablerCheckIcon: import("react/jsx-runtime").JSX.Element;
196
198
  export declare const alertTriangleIcon: import("react/jsx-runtime").JSX.Element;
197
199
  export declare const eyeDropperIcon: import("react/jsx-runtime").JSX.Element;
198
- export declare const extraToolsIcon: import("react/jsx-runtime").JSX.Element;
199
200
  export declare const frameToolIcon: import("react/jsx-runtime").JSX.Element;
200
201
  export declare const mermaidLogoIcon: import("react/jsx-runtime").JSX.Element;
201
202
  export declare const RetryIcon: import("react/jsx-runtime").JSX.Element;
202
203
  export declare const stackPushIcon: import("react/jsx-runtime").JSX.Element;
203
204
  export declare const ArrowRightIcon: import("react/jsx-runtime").JSX.Element;
205
+ export declare const drawShapeToolIcon: import("react/jsx-runtime").JSX.Element;
204
206
  export declare const laserPointerToolIcon: import("react/jsx-runtime").JSX.Element;
205
207
  export declare const MagicIcon: import("react/jsx-runtime").JSX.Element;
206
208
  export declare const MagicIconThin: import("react/jsx-runtime").JSX.Element;
@@ -35,11 +35,14 @@ export declare const ClearCanvas: {
35
35
  export declare const ToggleTheme: {
36
36
  (props: {
37
37
  allowSystemTheme: true;
38
+ /**
39
+ * Controls the theme of this UI component only.
40
+ * You should subscribe to `props.onThemeChange` and control the theme
41
+ * upstream.
42
+ */
38
43
  theme: Theme | "system";
39
- onSelect: (theme: Theme | "system") => void;
40
44
  } | {
41
- allowSystemTheme?: false;
42
- onSelect?: (theme: Theme) => void;
45
+ allowSystemTheme: false;
43
46
  }): import("react/jsx-runtime").JSX.Element | null;
44
47
  displayName: string;
45
48
  };
@@ -70,12 +73,13 @@ export declare const Preferences: {
70
73
  additionalItems?: React.ReactNode;
71
74
  }): import("react/jsx-runtime").JSX.Element;
72
75
  ToggleToolLock: () => import("react/jsx-runtime").JSX.Element;
76
+ BoxSelectionMode: () => import("react/jsx-runtime").JSX.Element;
73
77
  ToggleSnapMode: () => import("react/jsx-runtime").JSX.Element;
74
78
  ToggleArrowBinding: () => import("react/jsx-runtime").JSX.Element;
75
79
  ToggleMidpointSnapping: () => import("react/jsx-runtime").JSX.Element;
76
80
  ToggleGridMode: () => import("react/jsx-runtime").JSX.Element;
77
81
  ToggleZenMode: () => import("react/jsx-runtime").JSX.Element;
78
- ToggleViewMode: () => import("react/jsx-runtime").JSX.Element;
82
+ ToggleViewMode: () => import("react/jsx-runtime").JSX.Element | null;
79
83
  ToggleElementProperties: () => import("react/jsx-runtime").JSX.Element;
80
84
  displayName: string;
81
85
  };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Positions an element beside a cursor within a container, flipping the
3
+ * element to the other side of the cursor when it would overflow the
4
+ * container, resolved independently on each axis.
5
+ *
6
+ * Takes the cursor in client (viewport) coordinates and returns
7
+ * container-local coordinates.
8
+ */
9
+ export declare const positionElementBesideCursor: ({ cursor, element, container, gap, }: {
10
+ /** client (viewport) coordinates */
11
+ cursor: {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ element: {
16
+ width: number;
17
+ height: number;
18
+ };
19
+ /** the container's bounding client rect */
20
+ container: Pick<DOMRect, "left" | "top" | "width" | "height">;
21
+ /** distance between the cursor and the positioned element */
22
+ gap: number;
23
+ }) => {
24
+ left: number;
25
+ top: number;
26
+ };
@@ -0,0 +1,39 @@
1
+ import type { ExcalidrawElement, NonDeletedElementsMap, NonDeletedSceneElementsMap } from "@excalidraw/element/types";
2
+ import type { AppClassProperties, UIAppState } from "../types";
3
+ export declare const canChangeStrokeColor: (appState: UIAppState, targetElements: ExcalidrawElement[]) => boolean;
4
+ export declare const canChangeBackgroundColor: (appState: UIAppState, targetElements: ExcalidrawElement[]) => boolean;
5
+ /**
6
+ * Single source of truth for "which shape-action controls are relevant right
7
+ * now". Each flag answers whether a given control should be shown, given the
8
+ * active tool and the current selection. All three styles-panel layouts
9
+ * (full / compact / mobile) and the compact popovers consume these flags so
10
+ * that visibility logic lives in one place and layout stays pure.
11
+ */
12
+ export declare const getShapeActionPredicates: (appState: UIAppState, targetElements: ExcalidrawElement[], elementsMap: NonDeletedElementsMap | NonDeletedSceneElementsMap, app: AppClassProperties) => {
13
+ /** some element(s) selected */
14
+ hasSelection: boolean;
15
+ /** actions on selected elements (delete/duplicate/...) */
16
+ showExtraActions: boolean;
17
+ strokeColor: boolean;
18
+ backgroundColor: boolean;
19
+ fill: boolean;
20
+ strokeWidth: boolean;
21
+ freedrawMode: boolean;
22
+ strokeStyle: boolean;
23
+ sloppiness: boolean;
24
+ roundness: boolean;
25
+ arrowType: boolean;
26
+ arrowheads: boolean;
27
+ text: boolean;
28
+ textAlign: boolean;
29
+ verticalAlign: boolean;
30
+ opacity: boolean;
31
+ layers: boolean;
32
+ align: boolean;
33
+ distribute: boolean;
34
+ link: boolean;
35
+ linkSingleOnly: boolean;
36
+ cropEditor: boolean;
37
+ lineEditor: boolean;
38
+ };
39
+ export type ShapeActionPredicates = ReturnType<typeof getShapeActionPredicates>;
@@ -73,16 +73,21 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
73
73
  newElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawNonSelectionElement> | null;
74
74
  isBindingEnabled: boolean;
75
75
  isMidpointSnappingEnabled: boolean;
76
+ gridModeEnabled: boolean;
76
77
  suggestedBinding: {
77
78
  element: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawBindableElement>;
78
79
  midPoint?: import("@excalidraw/math").GlobalPoint;
79
80
  } | null;
81
+ hoveredArrowTextAnchor: {
82
+ elementId: import("@excalidraw/element/types").ExcalidrawArrowElement["id"];
83
+ anchor: "start" | "end" | "label";
84
+ } | null;
80
85
  isRotating: boolean;
81
- elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
86
+ elementsToHighlight: readonly import("@excalidraw/element/types").NonDeletedExcalidrawElement[] | null;
82
87
  collaborators: Map<import("../types").SocketId, import("../types").Collaborator>;
83
88
  snapLines: readonly import("../snapping").SnapLine[];
84
89
  zenModeEnabled: boolean;
85
- editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
90
+ editingTextElement: import("@excalidraw/element/types").ExcalidrawTextElement | null;
86
91
  isCropping: boolean;
87
92
  croppingElementId: ExcalidrawElement["id"] | null;
88
93
  searchMatches: Readonly<{
@@ -96,8 +101,8 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
96
101
  shouldCacheIgnoreZoom: boolean;
97
102
  exportScale: number;
98
103
  currentItemArrowType: "sharp" | "round" | "elbow";
99
- bindMode: import("@excalidraw/element/types").BindMode;
100
104
  gridSize: number;
105
+ bindMode: import("@excalidraw/element/types").BindMode;
101
106
  contextMenu: {
102
107
  items: import("../components/ContextMenu").ContextMenuItems;
103
108
  top: number;
@@ -107,9 +112,9 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
107
112
  isLoading: boolean;
108
113
  errorMessage: React.ReactNode;
109
114
  resizingElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
115
+ boxSelectionMode: import("../types").BoxSelectionMode;
110
116
  bindingPreference: "enabled" | "disabled";
111
- startBoundElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawBindableElement> | null;
112
- editingFrame: string | null;
117
+ editingFrame: import("@excalidraw/element/types").ExcalidrawFrameLikeElement["id"] | null;
113
118
  preferredSelectionTool: {
114
119
  type: "selection" | "lasso";
115
120
  initialized: boolean;
@@ -122,9 +127,10 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
122
127
  currentItemStrokeColor: string;
123
128
  currentItemBackgroundColor: string;
124
129
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
125
- currentItemStrokeWidth: number;
130
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
126
131
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
127
132
  currentItemRoughness: number;
133
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
128
134
  currentItemOpacity: number;
129
135
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
130
136
  currentItemFontSize: number;
@@ -133,6 +139,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
133
139
  currentItemEndArrowhead: import("@excalidraw/element/types").Arrowhead | null;
134
140
  currentHoveredFontFamily: import("@excalidraw/element/types").FontFamilyValues | null;
135
141
  currentItemRoundness: import("@excalidraw/element/types").StrokeRoundness;
142
+ scrollConstraints: import("../types").ScrollConstraints | null;
136
143
  cursorButton: "up" | "down";
137
144
  scrolledOutside: boolean;
138
145
  isResizing: boolean;
@@ -154,7 +161,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
154
161
  duration?: number;
155
162
  } | null;
156
163
  gridStep: number;
157
- gridModeEnabled: boolean;
158
164
  fileHandle: FileSystemFileHandle | null;
159
165
  stats: {
160
166
  open: boolean;
@@ -238,16 +244,21 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
238
244
  newElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawNonSelectionElement> | null;
239
245
  isBindingEnabled: boolean;
240
246
  isMidpointSnappingEnabled: boolean;
247
+ gridModeEnabled: boolean;
241
248
  suggestedBinding: {
242
249
  element: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawBindableElement>;
243
250
  midPoint?: import("@excalidraw/math").GlobalPoint;
244
251
  } | null;
252
+ hoveredArrowTextAnchor: {
253
+ elementId: import("@excalidraw/element/types").ExcalidrawArrowElement["id"];
254
+ anchor: "start" | "end" | "label";
255
+ } | null;
245
256
  isRotating: boolean;
246
- elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
257
+ elementsToHighlight: readonly import("@excalidraw/element/types").NonDeletedExcalidrawElement[] | null;
247
258
  collaborators: Map<import("../types").SocketId, import("../types").Collaborator>;
248
259
  snapLines: readonly import("../snapping").SnapLine[];
249
260
  zenModeEnabled: boolean;
250
- editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
261
+ editingTextElement: import("@excalidraw/element/types").ExcalidrawTextElement | null;
251
262
  isCropping: boolean;
252
263
  croppingElementId: ExcalidrawElement["id"] | null;
253
264
  searchMatches: Readonly<{
@@ -261,8 +272,8 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
261
272
  shouldCacheIgnoreZoom: boolean;
262
273
  exportScale: number;
263
274
  currentItemArrowType: "sharp" | "round" | "elbow";
264
- bindMode: import("@excalidraw/element/types").BindMode;
265
275
  gridSize: number;
276
+ bindMode: import("@excalidraw/element/types").BindMode;
266
277
  contextMenu: {
267
278
  items: import("../components/ContextMenu").ContextMenuItems;
268
279
  top: number;
@@ -272,9 +283,9 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
272
283
  isLoading: boolean;
273
284
  errorMessage: React.ReactNode;
274
285
  resizingElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
286
+ boxSelectionMode: import("../types").BoxSelectionMode;
275
287
  bindingPreference: "enabled" | "disabled";
276
- startBoundElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawBindableElement> | null;
277
- editingFrame: string | null;
288
+ editingFrame: import("@excalidraw/element/types").ExcalidrawFrameLikeElement["id"] | null;
278
289
  preferredSelectionTool: {
279
290
  type: "selection" | "lasso";
280
291
  initialized: boolean;
@@ -287,9 +298,10 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
287
298
  currentItemStrokeColor: string;
288
299
  currentItemBackgroundColor: string;
289
300
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
290
- currentItemStrokeWidth: number;
301
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
291
302
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
292
303
  currentItemRoughness: number;
304
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
293
305
  currentItemOpacity: number;
294
306
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
295
307
  currentItemFontSize: number;
@@ -298,6 +310,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
298
310
  currentItemEndArrowhead: import("@excalidraw/element/types").Arrowhead | null;
299
311
  currentHoveredFontFamily: import("@excalidraw/element/types").FontFamilyValues | null;
300
312
  currentItemRoundness: import("@excalidraw/element/types").StrokeRoundness;
313
+ scrollConstraints: import("../types").ScrollConstraints | null;
301
314
  cursorButton: "up" | "down";
302
315
  scrolledOutside: boolean;
303
316
  isResizing: boolean;
@@ -319,7 +332,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
319
332
  duration?: number;
320
333
  } | null;
321
334
  gridStep: number;
322
- gridModeEnabled: boolean;
323
335
  fileHandle: FileSystemFileHandle | null;
324
336
  stats: {
325
337
  open: boolean;
@@ -1,4 +1,4 @@
1
- import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { ExportType } from "../scene/types";
3
3
  import type { AppState, BinaryFiles } from "../types";
4
4
  export { loadFromBlob } from "./blob";
@@ -6,8 +6,8 @@ export { loadFromJSON, saveAsJSON } from "./json";
6
6
  export type ExportedElements = readonly NonDeletedExcalidrawElement[] & {
7
7
  _brand: "exportedElements";
8
8
  };
9
- export declare const prepareElementsForExport: (elements: readonly ExcalidrawElement[], { selectedElementIds }: Pick<AppState, "selectedElementIds">, exportSelectionOnly: boolean) => {
10
- exportingFrame: ExcalidrawFrameLikeElement | null;
9
+ export declare const prepareElementsForExport: (allElements: readonly ExcalidrawElement[], { selectedElementIds }: Pick<AppState, "selectedElementIds">, exportSelectionOnly: boolean) => {
10
+ exportingFrame: NonDeleted<ExcalidrawFrameLikeElement> | null;
11
11
  exportedElements: ExportedElements;
12
12
  };
13
13
  export declare const exportCanvas: (type: Omit<ExportType, "backend">, elements: ExportedElements, appState: AppState, files: BinaryFiles, { exportBackground, exportPadding, viewBackgroundColor, name, fileHandle, exportingFrame, }: {
@@ -17,5 +17,5 @@ export declare const exportCanvas: (type: Omit<ExportType, "backend">, elements:
17
17
  /** filename, if applicable */
18
18
  name?: string;
19
19
  fileHandle?: FileSystemFileHandle | null;
20
- exportingFrame: ExcalidrawFrameLikeElement | null;
20
+ exportingFrame: NonDeleted<ExcalidrawFrameLikeElement> | null;
21
21
  }) => Promise<FileSystemFileHandle | null | undefined>;