@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
@@ -0,0 +1,73 @@
1
+ import { type StylesPanelMode } from "@excalidraw/common";
2
+ import type { NonDeletedSceneElementsMap } from "@excalidraw/element/types";
3
+ import { type SetViewportOptions } from "../viewport";
4
+ import type { AppProps, AppState, Offsets, ScrollConstraints, ViewportOffsets, ViewportOffsetsOptions, ViewportUIName } from "../types";
5
+ import type App from "./App";
6
+ export declare const SCROLL_TO_CONTENT_ANIMATION_KEY = "animateScrollToContent";
7
+ export declare const SCROLL_CONSTRAINTS_SNAP_BACK_ANIMATION_KEY = "animateScrollConstraintsSnapBack";
8
+ /** single source of truth for the `--right-sidebar-width` CSS variable */
9
+ export declare const RIGHT_SIDEBAR_WIDTH = 302;
10
+ type Viewport = Pick<AppState, "scrollX" | "scrollY" | "zoom">;
11
+ type AppViewportDependencies = {
12
+ getContainer: () => HTMLDivElement | null;
13
+ getStylesPanelMode: () => StylesPanelMode;
14
+ isGestureActive: () => boolean;
15
+ };
16
+ /**
17
+ * Rubberband snap-back: animates the viewport from its current (possibly
18
+ * overscrolled) position back inside the lock box via the shared
19
+ * AnimationController. No-op when already within the hard bounds (or when
20
+ * there is no lock).
21
+ */
22
+ export declare const snapBackToConstraints: (state: Pick<AppState, "scrollX" | "scrollY" | "zoom" | "width" | "height" | "scrollConstraints">, onFrame: (updater: (state: Pick<AppState, "scrollX" | "scrollY" | "zoom" | "width" | "height" | "scrollConstraints">) => Viewport | null) => void, duration?: number) => void;
23
+ /**
24
+ * Owns viewport state transitions and App-bound viewport concerns. Pure
25
+ * viewport geometry remains in `viewport.ts` so actions and public helpers can
26
+ * calculate state without an App instance.
27
+ */
28
+ export declare class AppViewport {
29
+ private app;
30
+ private dependencies;
31
+ lastPosition: {
32
+ x: number;
33
+ y: number;
34
+ };
35
+ private activeTransition;
36
+ private uiLastMeasured;
37
+ constructor(app: App, dependencies: AppViewportDependencies);
38
+ get isAnimating(): boolean;
39
+ /** Whether a programmatic transition into a locked viewport currently owns
40
+ * user pan/zoom input. */
41
+ get isLockedTransitionPending(): boolean;
42
+ invalidateUIOffset: (name: ViewportUIName) => void;
43
+ /**
44
+ * Resolves user-supplied viewport offsets into concrete per-side pixel
45
+ * values. Static sides take precedence over UI-derived sides.
46
+ */
47
+ resolveOffsets: (offsets: ViewportOffsets | undefined) => Offsets | undefined;
48
+ /**
49
+ * Measures the currently rendered editor UI and returns the usable viewport
50
+ * offsets, including optional padding and reserved hidden surfaces.
51
+ */
52
+ getOffsets: (opts?: ViewportOffsetsOptions) => Offsets;
53
+ /** Resolves the host-supplied initial viewport against restored scene data. */
54
+ resolveInitialViewport: (opts: Omit<SetViewportOptions, "animation">, elementsMap: NonDeletedSceneElementsMap, appState: AppState) => (Viewport & {
55
+ scrollConstraints: ScrollConstraints | null;
56
+ }) | null;
57
+ /** Navigates to a target and optionally installs scroll/zoom constraints. */
58
+ setViewport: (opts: SetViewportOptions | null) => void;
59
+ /** Use when changing scrollX/scrollY/zoom based on user interaction. */
60
+ translate: <K extends keyof AppState>(state: AppState | Pick<AppState, K> | null | ((prevState: Readonly<AppState>, props: Readonly<AppProps>) => AppState | Pick<AppState, K> | null), opts?: {
61
+ zoomPreConstrained?: boolean;
62
+ preserveScrollConstraintsSnapBack?: boolean;
63
+ }) => boolean;
64
+ /** Clamps the viewport into the active scroll constraints. */
65
+ constrain: (overscroll?: number) => void;
66
+ /** Releases a held rubberband overscroll. */
67
+ releaseOverscroll: () => void;
68
+ private snapBack;
69
+ private snapBackDebounced;
70
+ private cancelTransition;
71
+ destroy: () => void;
72
+ }
73
+ export {};
@@ -2,7 +2,7 @@ import type { ColorTuple, ColorPaletteCustom } from "@excalidraw/common";
2
2
  import type { ExcalidrawElement } from "@excalidraw/element/types";
3
3
  import "./ColorPicker.scss";
4
4
  import type { ColorPickerType } from "./colorPickerUtils";
5
- import type { AppState } from "../../types";
5
+ import type { UIAppState } from "../../types";
6
6
  interface ColorPickerProps {
7
7
  type: ColorPickerType;
8
8
  /**
@@ -13,7 +13,7 @@ interface ColorPickerProps {
13
13
  onChange: (color: string) => void;
14
14
  label: string;
15
15
  elements: readonly ExcalidrawElement[];
16
- appState: AppState;
16
+ appState: UIAppState;
17
17
  palette?: ColorPaletteCustom | null;
18
18
  topPicks?: ColorTuple;
19
19
  updateData: (formData?: any) => void;
@@ -14,7 +14,7 @@ export declare const isCustomColor: ({ color, palette, }: {
14
14
  }) => boolean;
15
15
  export declare const getMostUsedCustomColors: (elements: readonly ExcalidrawElement[], type: "elementBackground" | "elementStroke", palette: ColorPaletteCustom) => string[];
16
16
  export type ActiveColorPickerSectionAtomType = "custom" | "baseColors" | "shades" | "hex" | null;
17
- export declare const activeColorPickerSectionAtom: import("jotai/vanilla/atom").PrimitiveAtom<ActiveColorPickerSectionAtomType> & {
17
+ export declare const activeColorPickerSectionAtom: import("jotai").PrimitiveAtom<ActiveColorPickerSectionAtomType> & {
18
18
  init: ActiveColorPickerSectionAtomType;
19
19
  };
20
20
  export type ColorPickerType = "canvasBackground" | "elementBackground" | "elementStroke";
@@ -1,2 +1 @@
1
- import type { CommandPaletteItem } from "./types";
2
- export declare const toggleTheme: CommandPaletteItem;
1
+ export {};
@@ -2,7 +2,7 @@ import type { ConvertibleTypes, ExcalidrawElement, ExcalidrawTextContainer, Exca
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import "./ConvertElementTypePopup.scss";
4
4
  import type App from "./App";
5
- export declare const convertElementTypePopupAtom: import("jotai/vanilla/atom").PrimitiveAtom<{
5
+ export declare const convertElementTypePopupAtom: import("jotai").PrimitiveAtom<{
6
6
  type: "panel";
7
7
  } | null> & {
8
8
  init: {
@@ -19,5 +19,5 @@ export declare const convertElementTypes: (app: App, { conversionType, nextType,
19
19
  nextType?: ConvertibleTypes;
20
20
  direction?: "left" | "right";
21
21
  }) => boolean;
22
- export declare const getConversionTypeFromElements: (elements: ExcalidrawElement[]) => ConversionType;
22
+ export declare const getConversionTypeFromElements: (elements: readonly ExcalidrawElement[]) => ConversionType;
23
23
  export default ConvertElementTypePopup;
@@ -0,0 +1,46 @@
1
+ import "./CursorHint.scss";
2
+ import type { AppClassProperties, AppState } from "../types";
3
+ /**
4
+ * While a recently shown hint is still fresh in memory, tool-switch hints
5
+ * are suppressed (repeatedly re-picking a tool you just used doesn't need
6
+ * the reminder). Cycling arrow types and numeric shortcuts bypass this.
7
+ */
8
+ export declare const CURSOR_HINT_COOLDOWN: number;
9
+ export declare const cursorHintAtom: import("jotai").PrimitiveAtom<{
10
+ content: React.ReactNode;
11
+ /** unique per trigger so a re-trigger restarts the hide timer */
12
+ nonce: number;
13
+ } | null> & {
14
+ init: {
15
+ content: React.ReactNode;
16
+ /** unique per trigger so a re-trigger restarts the hide timer */
17
+ nonce: number;
18
+ } | null;
19
+ };
20
+ /**
21
+ * Owns the cursor-hint policy. App reports semantic interaction events
22
+ * (what the user did); all decisions about whether and what to show —
23
+ * cooldown, bypasses, hint content — are made here.
24
+ */
25
+ export declare class CursorHints {
26
+ private app;
27
+ private lastShownAt;
28
+ constructor(app: AppClassProperties);
29
+ /**
30
+ * Shows a transient tooltip next to the cursor, hidden automatically
31
+ * after a short delay. Repeated calls replace the content and restart
32
+ * the timer.
33
+ */
34
+ show: (content: React.ReactNode) => void;
35
+ private isOnCooldown;
36
+ /** arrow type cycled via shortcut (arrow tool already active) */
37
+ onArrowTypeCycled: (arrowType: AppState["currentItemArrowType"]) => void;
38
+ /** arrow/line tool picked via keyboard shortcut */
39
+ onToolShortcut: (tool: "arrow" | "line", source: "letter" | "digit") => void;
40
+ }
41
+ /**
42
+ * Transient tooltip shown next to the cursor for added affordance after
43
+ * actions that have no other visual feedback near the pointer (e.g. cycling
44
+ * arrow types via shortcut). Trigger via `app.cursorHints`.
45
+ */
46
+ export declare const CursorHint: () => import("react/jsx-runtime").JSX.Element | null;
@@ -13,7 +13,7 @@ export type EyeDropperProperties = {
13
13
  **/
14
14
  colorPickerType: ColorPickerType;
15
15
  };
16
- export declare const activeEyeDropperAtom: import("jotai/vanilla/atom").PrimitiveAtom<EyeDropperProperties | null> & {
16
+ export declare const activeEyeDropperAtom: import("jotai").PrimitiveAtom<EyeDropperProperties | null> & {
17
17
  init: EyeDropperProperties | null;
18
18
  };
19
19
  export declare const EyeDropper: React.FC<{
@@ -2,48 +2,45 @@ import React from "react";
2
2
  import type { PointerType } from "@excalidraw/element/types";
3
3
  import "./ToolIcon.scss";
4
4
  import type { CSSProperties } from "react";
5
- export type ToolButtonSize = "small" | "medium";
6
- type ToolButtonBaseProps = {
5
+ export type IconButtonSize = "small" | "medium";
6
+ type IconButtonBaseProps = {
7
7
  icon?: React.ReactNode;
8
8
  "aria-label": string;
9
9
  "aria-keyshortcuts"?: string;
10
10
  "data-testid"?: string;
11
11
  label?: string;
12
12
  title?: string;
13
- name?: string;
14
- id?: string;
15
- size?: ToolButtonSize;
13
+ size?: IconButtonSize;
16
14
  keyBindingLabel?: string | null;
17
15
  showAriaLabel?: boolean;
18
16
  hidden?: boolean;
19
17
  visible?: boolean;
20
- selected?: boolean;
21
18
  disabled?: boolean;
22
19
  className?: string;
23
20
  style?: CSSProperties;
24
21
  isLoading?: boolean;
25
22
  };
26
- type ToolButtonProps = (ToolButtonBaseProps & {
23
+ type IconButtonProps = (IconButtonBaseProps & {
27
24
  type: "button";
28
25
  children?: React.ReactNode;
29
26
  onClick?(event: React.MouseEvent): void;
30
- }) | (ToolButtonBaseProps & {
31
- type: "submit";
32
- children?: React.ReactNode;
33
- onClick?(event: React.MouseEvent): void;
34
- }) | (ToolButtonBaseProps & {
27
+ }) | (IconButtonBaseProps & {
35
28
  type: "icon";
36
29
  children?: React.ReactNode;
37
30
  onClick?(): void;
38
- }) | (ToolButtonBaseProps & {
39
- type: "radio";
31
+ }) | (IconButtonBaseProps & {
32
+ type: "toggle";
40
33
  checked: boolean;
41
- onChange?(data: {
34
+ /**
35
+ * Fired on activation — a completed pointer gesture (via `click`, so a
36
+ * press canceled by sliding off the button doesn't select) or
37
+ * keyboard/AT activation, in which case pointerType is null.
38
+ * pointerType is captured on pointer-down, where it's reliable
39
+ * (unlike the click event's own pointerType on iOS).
40
+ */
41
+ onSelect?(data: {
42
42
  pointerType: PointerType | null;
43
43
  }): void;
44
- onPointerDown?(data: {
45
- pointerType: PointerType;
46
- }): void;
47
44
  });
48
- export declare const ToolButton: React.ForwardRefExoticComponent<ToolButtonProps & React.RefAttributes<unknown>>;
45
+ export declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<unknown>>;
49
46
  export {};
@@ -1,10 +1,17 @@
1
1
  import React from "react";
2
2
  import "./Island.scss";
3
+ import type { ViewportUIDock, ViewportUIName } from "../types";
3
4
  type IslandProps = {
4
5
  children: React.ReactNode;
5
6
  padding?: number;
6
7
  className?: string | boolean;
7
8
  style?: object;
9
+ /** marks the island as a canvas-occluding UI surface measured by
10
+ * `getViewportOffsets` (see {@link ViewportUIDock}) */
11
+ "data-viewport-ui"?: ViewportUIDock;
12
+ /** identifies the surface so `getViewportOffsets` can reserve space for
13
+ * it while hidden (see {@link ViewportUIName}) */
14
+ "data-viewport-ui-name"?: ViewportUIName;
8
15
  };
9
16
  export declare const Island: React.ForwardRefExoticComponent<IslandProps & React.RefAttributes<HTMLDivElement>>;
10
17
  export {};
@@ -1,10 +1,8 @@
1
- import "./ToolIcon.scss";
2
- type LaserPointerIconProps = {
1
+ type LaserPointerButtonProps = {
3
2
  title?: string;
4
- name?: string;
5
3
  checked: boolean;
6
4
  onChange?(): void;
7
5
  isMobile?: boolean;
8
6
  };
9
- export declare const LaserPointerButton: (props: LaserPointerIconProps) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const LaserPointerButton: (props: LaserPointerButtonProps) => import("react/jsx-runtime").JSX.Element;
10
8
  export {};
@@ -13,7 +13,6 @@ interface LayerUIProps {
13
13
  setAppState: React.Component<any, AppState>["setState"];
14
14
  elements: readonly NonDeletedExcalidrawElement[];
15
15
  onLockToggle: () => void;
16
- onHandToolToggle: () => void;
17
16
  onPenModeToggle: AppClassProperties["togglePenMode"];
18
17
  showExitZenModeBtn: boolean;
19
18
  langCode: Language["code"];
@@ -25,8 +24,11 @@ interface LayerUIProps {
25
24
  renderWelcomeScreen: boolean;
26
25
  children?: React.ReactNode;
27
26
  app: AppClassProperties;
27
+ defaultUIEnabled: boolean;
28
+ zoomUIEnabled: boolean;
29
+ scrollBackToContentUIEnabled: boolean;
28
30
  isCollaborating: boolean;
29
31
  generateLinkForSelection?: AppProps["generateLinkForSelection"];
30
32
  }
31
- declare const _default: React.MemoExoticComponent<({ actionManager, appState, files, setAppState, elements, canvas, onLockToggle, onHandToolToggle, onPenModeToggle, showExitZenModeBtn, renderTopLeftUI, renderTopRightUI, renderCustomStats, UIOptions, onExportImage, renderWelcomeScreen, children, app, isCollaborating, generateLinkForSelection, }: LayerUIProps) => import("react/jsx-runtime").JSX.Element>;
33
+ declare const _default: React.MemoExoticComponent<({ actionManager, appState, files, setAppState, elements, canvas, onLockToggle, onPenModeToggle, showExitZenModeBtn, renderTopLeftUI, renderTopRightUI, renderCustomStats, UIOptions, onExportImage, renderWelcomeScreen, children, app, defaultUIEnabled, zoomUIEnabled, scrollBackToContentUIEnabled, isCollaborating, generateLinkForSelection, }: LayerUIProps) => import("react/jsx-runtime").JSX.Element>;
32
34
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import "./LibraryMenu.scss";
3
- export declare const isLibraryMenuOpenAtom: import("jotai/vanilla/atom").PrimitiveAtom<boolean> & {
3
+ export declare const isLibraryMenuOpenAtom: import("jotai").PrimitiveAtom<boolean> & {
4
4
  init: boolean;
5
5
  };
6
6
  /**
@@ -1,10 +1,9 @@
1
- import "./ToolIcon.scss";
2
- type LockIconProps = {
1
+ type LockButtonProps = {
3
2
  title?: string;
4
- name?: string;
5
3
  checked: boolean;
6
4
  onChange?(): void;
7
5
  isMobile?: boolean;
6
+ disabled?: boolean;
8
7
  };
9
- export declare const LockButton: (props: LockIconProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const LockButton: (props: LockButtonProps) => import("react/jsx-runtime").JSX.Element;
10
9
  export {};
@@ -1,9 +1,7 @@
1
- import "./ToolIcon.scss";
2
1
  import type { JSX } from "react";
3
2
  export declare const ElementCanvasButton: (props: {
4
3
  title?: string;
5
4
  icon: JSX.Element;
6
- name?: string;
7
5
  checked: boolean;
8
6
  onChange?(): void;
9
7
  isMobile?: boolean;
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import type { NonDeletedExcalidrawElement } from "@excalidraw/element/types";
3
3
  import type { ActionManager } from "../actions/manager";
4
- import type { AppClassProperties, AppProps, AppState, UIAppState } from "../types";
4
+ import type { AppClassProperties, AppState, UIAppState } from "../types";
5
5
  import type { JSX } from "react";
6
6
  type MobileMenuProps = {
7
7
  appState: UIAppState;
@@ -10,14 +10,14 @@ type MobileMenuProps = {
10
10
  renderImageExportDialog: () => React.ReactNode;
11
11
  setAppState: React.Component<any, AppState>["setState"];
12
12
  elements: readonly NonDeletedExcalidrawElement[];
13
- onHandToolToggle: () => void;
14
13
  onPenModeToggle: AppClassProperties["togglePenMode"];
15
14
  renderTopRightUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
16
15
  renderTopLeftUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
17
16
  renderSidebars: () => JSX.Element | null;
18
17
  renderWelcomeScreen: boolean;
19
- UIOptions: AppProps["UIOptions"];
18
+ defaultUIEnabled: boolean;
19
+ scrollBackToContentUIEnabled: boolean;
20
20
  app: AppClassProperties;
21
21
  };
22
- export declare const MobileMenu: ({ appState, elements, actionManager, setAppState, onHandToolToggle, renderTopLeftUI, renderTopRightUI, renderSidebars, renderWelcomeScreen, UIOptions, app, onPenModeToggle, }: MobileMenuProps) => import("react/jsx-runtime").JSX.Element;
22
+ export declare const MobileMenu: ({ appState, elements, actionManager, setAppState, renderTopLeftUI, renderTopRightUI, renderSidebars, renderWelcomeScreen, defaultUIEnabled, scrollBackToContentUIEnabled, app, onPenModeToggle, }: MobileMenuProps) => import("react/jsx-runtime").JSX.Element;
23
23
  export {};
@@ -0,0 +1,9 @@
1
+ import "./ToolIcon.scss";
2
+ import "./MobileToolbar.scss";
3
+ import type { AppClassProperties, UIAppState } from "../types";
4
+ type MobileToolbarProps = {
5
+ app: AppClassProperties;
6
+ setAppState: React.Component<any, UIAppState>["setState"];
7
+ };
8
+ export declare const MobileToolbar: ({ app, setAppState }: MobileToolbarProps) => import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -11,7 +11,7 @@ export type OverwriteConfirmState = {
11
11
  } | {
12
12
  active: false;
13
13
  };
14
- export declare const overwriteConfirmStateAtom: import("jotai/vanilla/atom").PrimitiveAtom<OverwriteConfirmState> & {
14
+ export declare const overwriteConfirmStateAtom: import("jotai").PrimitiveAtom<OverwriteConfirmState> & {
15
15
  init: OverwriteConfirmState;
16
16
  };
17
17
  export declare function openConfirmModal({ title, description, actionLabel, color, }: {
@@ -1,12 +1,9 @@
1
- import "./ToolIcon.scss";
2
- type PenModeIconProps = {
1
+ type PenModeButtonProps = {
3
2
  title?: string;
4
- name?: string;
5
3
  checked: boolean;
6
4
  onChange?(): void;
7
- zenModeEnabled?: boolean;
8
5
  isMobile?: boolean;
9
6
  penDetected: boolean;
10
7
  };
11
- export declare const PenModeButton: (props: PenModeIconProps) => import("react/jsx-runtime").JSX.Element | null;
8
+ export declare const PenModeButton: (props: PenModeButtonProps) => import("react/jsx-runtime").JSX.Element | null;
12
9
  export {};
@@ -6,11 +6,9 @@ type Props = {
6
6
  children?: React.ReactNode;
7
7
  onCloseRequest?(event: PointerEvent): void;
8
8
  fitInViewport?: boolean;
9
- offsetLeft?: number;
10
- offsetTop?: number;
11
9
  viewportWidth?: number;
12
10
  viewportHeight?: number;
13
11
  className?: string;
14
12
  };
15
- export declare const Popover: ({ children, left, top, onCloseRequest, fitInViewport, offsetLeft, offsetTop, viewportWidth, viewportHeight, className, }: Props) => import("react/jsx-runtime").JSX.Element;
13
+ export declare const Popover: ({ children, left, top, onCloseRequest, fitInViewport, viewportWidth, viewportHeight, className, }: Props) => import("react/jsx-runtime").JSX.Element;
16
14
  export {};
@@ -1,16 +1,13 @@
1
- import "./ButtonIcon.scss";
2
1
  import type { JSX } from "react";
3
- interface ButtonIconProps {
2
+ interface RadioButtonProps {
4
3
  icon: JSX.Element;
5
4
  title: string;
6
5
  className?: string;
7
6
  testId?: string;
8
7
  /** if not supplied, defaults to value identity check */
9
8
  active?: boolean;
10
- /** include standalone style (could interfere with parent styles) */
11
- standalone?: boolean;
12
9
  onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
13
10
  style?: React.CSSProperties;
14
11
  }
15
- export declare const ButtonIcon: import("react").ForwardRefExoticComponent<ButtonIconProps & import("react").RefAttributes<HTMLButtonElement>>;
12
+ export declare const RadioButton: import("react").ForwardRefExoticComponent<RadioButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
16
13
  export {};
@@ -1,8 +1,14 @@
1
+ import React from "react";
1
2
  import "./Range.scss";
2
- import type { AppClassProperties } from "../types";
3
3
  export type RangeProps = {
4
- updateData: (value: number) => void;
5
- app: AppClassProperties;
4
+ label: React.ReactNode;
5
+ value: number;
6
+ onChange: (value: number) => void;
7
+ min?: number;
8
+ max?: number;
9
+ step?: number;
10
+ minLabel?: React.ReactNode;
11
+ hasCommonValue?: boolean;
6
12
  testId?: string;
7
13
  };
8
- export declare const Range: ({ updateData, app, testId }: RangeProps) => import("react/jsx-runtime").JSX.Element;
14
+ export declare const Range: ({ label, value, onChange, min, max, step, minLabel, hasCommonValue, testId, }: RangeProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import "./SVGLayer.scss";
2
- import type { Trail } from "../animated-trail";
2
+ import type { Trail } from "../animatedTrail";
3
3
  type SVGLayerProps = {
4
4
  trails: Trail[];
5
5
  };
@@ -1,5 +1,5 @@
1
1
  import "./SearchMenu.scss";
2
- export declare const searchItemInFocusAtom: import("jotai/vanilla/atom").PrimitiveAtom<number | null> & {
2
+ export declare const searchItemInFocusAtom: import("jotai").PrimitiveAtom<number | null> & {
3
3
  init: number | null;
4
4
  };
5
5
  export declare const SearchMenu: () => import("react/jsx-runtime").JSX.Element;
@@ -8,7 +8,7 @@ import "./Sidebar.scss";
8
8
  *
9
9
  * Since we can only render one Sidebar at a time, we can use a simple flag.
10
10
  */
11
- export declare const isSidebarDockedAtom: import("jotai/vanilla/atom").PrimitiveAtom<boolean> & {
11
+ export declare const isSidebarDockedAtom: import("jotai").PrimitiveAtom<boolean> & {
12
12
  init: boolean;
13
13
  };
14
14
  export declare const SidebarInner: React.ForwardRefExoticComponent<Omit<{
@@ -1,8 +1,8 @@
1
- import type { ExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import type { AppState } from "../../types";
4
4
  interface AngleProps {
5
- element: ExcalidrawElement;
5
+ element: NonDeletedExcalidrawElement;
6
6
  scene: Scene;
7
7
  appState: AppState;
8
8
  property: "angle";
@@ -1,9 +1,9 @@
1
- import type { ExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import type { AppState } from "../../types";
4
4
  interface DimensionDragInputProps {
5
5
  property: "width" | "height";
6
- element: ExcalidrawElement;
6
+ element: NonDeletedExcalidrawElement;
7
7
  scene: Scene;
8
8
  appState: AppState;
9
9
  }
@@ -1,10 +1,10 @@
1
- import type { ElementsMap, ExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import { useApp, useExcalidrawSetAppState } from "../App";
4
4
  import "./DragInput.scss";
5
5
  import type { StatsInputProperty } from "./utils";
6
6
  import type { AppState } from "../../types";
7
- export type DragInputCallbackType<P extends StatsInputProperty, E = ExcalidrawElement> = (props: {
7
+ export type DragInputCallbackType<P extends StatsInputProperty, E = NonDeletedExcalidrawElement> = (props: {
8
8
  accumulatedChange: number;
9
9
  instantChange: number;
10
10
  originalElements: readonly E[];
@@ -1,8 +1,8 @@
1
- import type { ExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import type { AppState } from "../../types";
4
4
  interface MultiAngleProps {
5
- elements: readonly ExcalidrawElement[];
5
+ elements: readonly NonDeletedExcalidrawElement[];
6
6
  scene: Scene;
7
7
  appState: AppState;
8
8
  property: "angle";
@@ -1,10 +1,10 @@
1
- import type { ExcalidrawElement, NonDeletedSceneElementsMap } from "@excalidraw/element/types";
1
+ import type { NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import type { AtomicUnit } from "./utils";
4
4
  import type { AppState } from "../../types";
5
5
  interface MultiDimensionProps {
6
6
  property: "width" | "height";
7
- elements: readonly ExcalidrawElement[];
7
+ elements: readonly NonDeletedExcalidrawElement[];
8
8
  elementsMap: NonDeletedSceneElementsMap;
9
9
  atomicUnits: AtomicUnit[];
10
10
  scene: Scene;
@@ -1,10 +1,10 @@
1
- import type { ElementsMap, ExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { ElementsMap, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import type { AtomicUnit } from "./utils";
4
4
  import type { AppState } from "../../types";
5
5
  interface MultiPositionProps {
6
6
  property: "x" | "y";
7
- elements: readonly ExcalidrawElement[];
7
+ elements: readonly NonDeletedExcalidrawElement[];
8
8
  elementsMap: ElementsMap;
9
9
  atomicUnits: AtomicUnit[];
10
10
  scene: Scene;
@@ -1,12 +1,12 @@
1
- import type { ElementsMap, ExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { ElementsMap, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import type { AppState } from "../../types";
4
4
  interface PositionProps {
5
5
  property: "x" | "y";
6
- element: ExcalidrawElement;
6
+ element: NonDeletedExcalidrawElement;
7
7
  elementsMap: ElementsMap;
8
8
  scene: Scene;
9
9
  appState: AppState;
10
10
  }
11
- declare const Position: ({ property, element, elementsMap, scene, appState, }: PositionProps) => import("react/jsx-runtime").JSX.Element;
11
+ declare const Position: ({ property, element, scene, appState }: PositionProps) => import("react/jsx-runtime").JSX.Element;
12
12
  export default Position;
@@ -15,5 +15,5 @@ export declare const newOrigin: (x1: number, y1: number, w1: number, h1: number,
15
15
  x: number;
16
16
  y: number;
17
17
  };
18
- export declare const moveElement: (newTopLeftX: number, newTopLeftY: number, originalElement: ExcalidrawElement, scene: Scene, appState: AppState, originalElementsMap: ElementsMap, shouldInformMutation?: boolean) => void;
18
+ export declare const moveElement: (newTopLeftX: number, newTopLeftY: number, originalElement: NonDeletedExcalidrawElement, scene: Scene, appState: AppState, originalElementsMap: ElementsMap, shouldInformMutation?: boolean) => void;
19
19
  export declare const getAtomicUnits: (targetElements: readonly ExcalidrawElement[], appState: AppState) => AtomicUnit[];
@@ -1,13 +1,13 @@
1
1
  import type { RateLimits, TChat } from "./types";
2
- export declare const rateLimitsAtom: import("jotai/vanilla/atom").PrimitiveAtom<RateLimits | null> & {
2
+ export declare const rateLimitsAtom: import("jotai").PrimitiveAtom<RateLimits | null> & {
3
3
  init: RateLimits | null;
4
4
  };
5
- export declare const showPreviewAtom: import("jotai/vanilla/atom").PrimitiveAtom<boolean> & {
5
+ export declare const showPreviewAtom: import("jotai").PrimitiveAtom<boolean> & {
6
6
  init: boolean;
7
7
  };
8
- export declare const errorAtom: import("jotai/vanilla/atom").PrimitiveAtom<Error | null> & {
8
+ export declare const errorAtom: import("jotai").PrimitiveAtom<Error | null> & {
9
9
  init: Error | null;
10
10
  };
11
- export declare const chatHistoryAtom: import("jotai/vanilla/atom").PrimitiveAtom<TChat.ChatHistory> & {
11
+ export declare const chatHistoryAtom: import("jotai").PrimitiveAtom<TChat.ChatHistory> & {
12
12
  init: TChat.ChatHistory;
13
13
  };
@@ -9,13 +9,13 @@ interface UseTTDChatStorageReturn {
9
9
  restoreChat: (chat: SavedChat) => SavedChat;
10
10
  createNewChatId: () => Promise<string>;
11
11
  }
12
- export declare const savedChatsAtom: import("jotai/vanilla/atom").PrimitiveAtom<SavedChats> & {
12
+ export declare const savedChatsAtom: import("jotai").PrimitiveAtom<SavedChats> & {
13
13
  init: SavedChats;
14
14
  };
15
- export declare const isLoadingChatsAtom: import("jotai/vanilla/atom").PrimitiveAtom<boolean> & {
15
+ export declare const isLoadingChatsAtom: import("jotai").PrimitiveAtom<boolean> & {
16
16
  init: boolean;
17
17
  };
18
- export declare const chatsLoadedAtom: import("jotai/vanilla/atom").PrimitiveAtom<boolean> & {
18
+ export declare const chatsLoadedAtom: import("jotai").PrimitiveAtom<boolean> & {
19
19
  init: boolean;
20
20
  };
21
21
  export declare const useTTDChatStorage: ({ persistenceAdapter, }: UseTTDChatStorageProps) => UseTTDChatStorageReturn;