@zsviczian/excalidraw 0.17.1-obsidian-25 → 0.17.1-obsidian-28

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 (60) hide show
  1. package/dist/excalidraw.development.js +190 -36
  2. package/dist/excalidraw.production.min.js +1 -1
  3. package/dist/excalidraw.production.min.js.LICENSE.txt +9 -0
  4. package/dist/styles.development.css +139 -41
  5. package/dist/styles.production.css +3 -3
  6. package/package.json +1 -1
  7. package/types/excalidraw/actions/actionAddToLibrary.d.ts +12 -3
  8. package/types/excalidraw/actions/actionBoundText.d.ts +8 -2
  9. package/types/excalidraw/actions/actionCanvas.d.ts +56 -14
  10. package/types/excalidraw/actions/actionClipboard.d.ts +28 -7
  11. package/types/excalidraw/actions/actionDeleteSelected.d.ts +12 -3
  12. package/types/excalidraw/actions/actionElementLock.d.ts +8 -2
  13. package/types/excalidraw/actions/actionExport.d.ts +36 -9
  14. package/types/excalidraw/actions/actionFinalize.d.ts +8 -2
  15. package/types/excalidraw/actions/actionFrame.d.ts +16 -4
  16. package/types/excalidraw/actions/actionGroup.d.ts +8 -2
  17. package/types/excalidraw/actions/actionLinearEditor.d.ts +4 -1
  18. package/types/excalidraw/actions/actionLink.d.ts +4 -1
  19. package/types/excalidraw/actions/actionMenu.d.ts +12 -3
  20. package/types/excalidraw/actions/actionNavigate.d.ts +8 -2
  21. package/types/excalidraw/actions/actionProperties.d.ts +52 -13
  22. package/types/excalidraw/actions/actionSelectAll.d.ts +4 -1
  23. package/types/excalidraw/actions/actionStyles.d.ts +4 -1
  24. package/types/excalidraw/actions/actionToggleGridMode.d.ts +4 -1
  25. package/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +4 -1
  26. package/types/excalidraw/actions/actionToggleStats.d.ts +5 -1
  27. package/types/excalidraw/actions/actionToggleViewMode.d.ts +4 -1
  28. package/types/excalidraw/actions/actionToggleZenMode.d.ts +4 -1
  29. package/types/excalidraw/actions/types.d.ts +1 -1
  30. package/types/excalidraw/appState.d.ts +4 -1
  31. package/types/excalidraw/components/App.d.ts +3 -1
  32. package/types/excalidraw/components/Stats/Angle.d.ts +7 -0
  33. package/types/excalidraw/components/Stats/Collapsible.d.ts +8 -0
  34. package/types/excalidraw/components/Stats/Dimension.d.ts +8 -0
  35. package/types/excalidraw/components/Stats/DragInput.d.ts +22 -0
  36. package/types/excalidraw/components/Stats/FontSize.d.ts +7 -0
  37. package/types/excalidraw/components/Stats/MultiAngle.d.ts +9 -0
  38. package/types/excalidraw/components/Stats/MultiDimension.d.ts +12 -0
  39. package/types/excalidraw/components/Stats/MultiFontSize.d.ts +9 -0
  40. package/types/excalidraw/components/Stats/MultiPosition.d.ts +12 -0
  41. package/types/excalidraw/components/Stats/Position.d.ts +8 -0
  42. package/types/excalidraw/components/Stats/index.d.ts +15 -0
  43. package/types/excalidraw/components/Stats/utils.d.ts +15 -0
  44. package/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +2 -1
  45. package/types/excalidraw/components/icons.d.ts +3 -0
  46. package/types/excalidraw/constants.d.ts +6 -0
  47. package/types/excalidraw/element/dragElements.d.ts +2 -2
  48. package/types/excalidraw/element/embeddable.d.ts +4 -1
  49. package/types/excalidraw/element/linearElementEditor.d.ts +4 -1
  50. package/types/excalidraw/element/resizeElements.d.ts +9 -1
  51. package/types/excalidraw/element/textElement.d.ts +1 -0
  52. package/types/excalidraw/element/textWysiwyg.d.ts +2 -1
  53. package/types/excalidraw/groups.d.ts +1 -1
  54. package/types/excalidraw/math.d.ts +2 -0
  55. package/types/excalidraw/mermaid.d.ts +2 -0
  56. package/types/excalidraw/renderer/interactiveScene.d.ts +1 -1
  57. package/types/excalidraw/renderer/renderElement.d.ts +2 -2
  58. package/types/excalidraw/scene/Scene.d.ts +3 -0
  59. package/types/excalidraw/scene/types.d.ts +2 -1
  60. package/types/excalidraw/types.d.ts +7 -1
@@ -158,7 +158,10 @@ export declare const actionChangeFillStyle: {
158
158
  isSpeaking?: boolean | undefined;
159
159
  isMuted?: boolean | undefined;
160
160
  }>>;
161
- showStats: boolean;
161
+ stats: {
162
+ open: boolean;
163
+ panels: number;
164
+ };
162
165
  currentChartType: import("../element/types").ChartType;
163
166
  pasteDialog: {
164
167
  shown: false;
@@ -355,7 +358,10 @@ export declare const actionChangeStrokeWidth: {
355
358
  isSpeaking?: boolean | undefined;
356
359
  isMuted?: boolean | undefined;
357
360
  }>>;
358
- showStats: boolean;
361
+ stats: {
362
+ open: boolean;
363
+ panels: number;
364
+ };
359
365
  currentChartType: import("../element/types").ChartType;
360
366
  pasteDialog: {
361
367
  shown: false;
@@ -552,7 +558,10 @@ export declare const actionChangeSloppiness: {
552
558
  isSpeaking?: boolean | undefined;
553
559
  isMuted?: boolean | undefined;
554
560
  }>>;
555
- showStats: boolean;
561
+ stats: {
562
+ open: boolean;
563
+ panels: number;
564
+ };
556
565
  currentChartType: import("../element/types").ChartType;
557
566
  pasteDialog: {
558
567
  shown: false;
@@ -749,7 +758,10 @@ export declare const actionChangeStrokeStyle: {
749
758
  isSpeaking?: boolean | undefined;
750
759
  isMuted?: boolean | undefined;
751
760
  }>>;
752
- showStats: boolean;
761
+ stats: {
762
+ open: boolean;
763
+ panels: number;
764
+ };
753
765
  currentChartType: import("../element/types").ChartType;
754
766
  pasteDialog: {
755
767
  shown: false;
@@ -946,7 +958,10 @@ export declare const actionChangeOpacity: {
946
958
  isSpeaking?: boolean | undefined;
947
959
  isMuted?: boolean | undefined;
948
960
  }>>;
949
- showStats: boolean;
961
+ stats: {
962
+ open: boolean;
963
+ panels: number;
964
+ };
950
965
  currentChartType: import("../element/types").ChartType;
951
966
  pasteDialog: {
952
967
  shown: false;
@@ -1144,7 +1159,10 @@ export declare const actionChangeFontSize: {
1144
1159
  isSpeaking?: boolean | undefined;
1145
1160
  isMuted?: boolean | undefined;
1146
1161
  }>>;
1147
- showStats: boolean;
1162
+ stats: {
1163
+ open: boolean;
1164
+ panels: number;
1165
+ };
1148
1166
  currentChartType: import("../element/types").ChartType;
1149
1167
  pasteDialog: {
1150
1168
  shown: false;
@@ -1342,7 +1360,10 @@ export declare const actionDecreaseFontSize: {
1342
1360
  isSpeaking?: boolean | undefined;
1343
1361
  isMuted?: boolean | undefined;
1344
1362
  }>>;
1345
- showStats: boolean;
1363
+ stats: {
1364
+ open: boolean;
1365
+ panels: number;
1366
+ };
1346
1367
  currentChartType: import("../element/types").ChartType;
1347
1368
  pasteDialog: {
1348
1369
  shown: false;
@@ -1540,7 +1561,10 @@ export declare const actionIncreaseFontSize: {
1540
1561
  isSpeaking?: boolean | undefined;
1541
1562
  isMuted?: boolean | undefined;
1542
1563
  }>>;
1543
- showStats: boolean;
1564
+ stats: {
1565
+ open: boolean;
1566
+ panels: number;
1567
+ };
1544
1568
  currentChartType: import("../element/types").ChartType;
1545
1569
  pasteDialog: {
1546
1570
  shown: false;
@@ -1737,7 +1761,10 @@ export declare const actionChangeFontFamily: {
1737
1761
  isSpeaking?: boolean | undefined;
1738
1762
  isMuted?: boolean | undefined;
1739
1763
  }>>;
1740
- showStats: boolean;
1764
+ stats: {
1765
+ open: boolean;
1766
+ panels: number;
1767
+ };
1741
1768
  currentChartType: import("../element/types").ChartType;
1742
1769
  pasteDialog: {
1743
1770
  shown: false;
@@ -1934,7 +1961,10 @@ export declare const actionChangeTextAlign: {
1934
1961
  isSpeaking?: boolean | undefined;
1935
1962
  isMuted?: boolean | undefined;
1936
1963
  }>>;
1937
- showStats: boolean;
1964
+ stats: {
1965
+ open: boolean;
1966
+ panels: number;
1967
+ };
1938
1968
  currentChartType: import("../element/types").ChartType;
1939
1969
  pasteDialog: {
1940
1970
  shown: false;
@@ -2133,7 +2163,10 @@ export declare const actionChangeVerticalAlign: {
2133
2163
  isSpeaking?: boolean | undefined;
2134
2164
  isMuted?: boolean | undefined;
2135
2165
  }>>;
2136
- showStats: boolean;
2166
+ stats: {
2167
+ open: boolean;
2168
+ panels: number;
2169
+ };
2137
2170
  currentChartType: import("../element/types").ChartType;
2138
2171
  pasteDialog: {
2139
2172
  shown: false;
@@ -2330,7 +2363,10 @@ export declare const actionChangeRoundness: {
2330
2363
  isSpeaking?: boolean | undefined;
2331
2364
  isMuted?: boolean | undefined;
2332
2365
  }>>;
2333
- showStats: boolean;
2366
+ stats: {
2367
+ open: boolean;
2368
+ panels: number;
2369
+ };
2334
2370
  currentChartType: import("../element/types").ChartType;
2335
2371
  pasteDialog: {
2336
2372
  shown: false;
@@ -2530,7 +2566,10 @@ export declare const actionChangeArrowhead: {
2530
2566
  isSpeaking?: boolean | undefined;
2531
2567
  isMuted?: boolean | undefined;
2532
2568
  }>>;
2533
- showStats: boolean;
2569
+ stats: {
2570
+ open: boolean;
2571
+ panels: number;
2572
+ };
2534
2573
  currentChartType: import("../element/types").ChartType;
2535
2574
  pasteDialog: {
2536
2575
  shown: false;
@@ -142,7 +142,10 @@ export declare const actionSelectAll: {
142
142
  isSpeaking?: boolean | undefined;
143
143
  isMuted?: boolean | undefined;
144
144
  }>>;
145
- showStats: boolean;
145
+ stats: {
146
+ open: boolean;
147
+ panels: number;
148
+ };
146
149
  currentChartType: import("../element/types").ChartType;
147
150
  pasteDialog: {
148
151
  shown: false;
@@ -137,7 +137,10 @@ export declare const actionCopyStyles: {
137
137
  isSpeaking?: boolean | undefined;
138
138
  isMuted?: boolean | undefined;
139
139
  }>>;
140
- showStats: boolean;
140
+ stats: {
141
+ open: boolean;
142
+ panels: number;
143
+ };
141
144
  currentChartType: import("../element/types").ChartType;
142
145
  pasteDialog: {
143
146
  shown: false;
@@ -143,7 +143,10 @@ export declare const actionToggleGridMode: {
143
143
  isSpeaking?: boolean | undefined;
144
144
  isMuted?: boolean | undefined;
145
145
  }>>;
146
- showStats: boolean;
146
+ stats: {
147
+ open: boolean;
148
+ panels: number;
149
+ };
147
150
  currentChartType: import("../element/types").ChartType;
148
151
  pasteDialog: {
149
152
  shown: false;
@@ -141,7 +141,10 @@ export declare const actionToggleObjectsSnapMode: {
141
141
  isSpeaking?: boolean | undefined;
142
142
  isMuted?: boolean | undefined;
143
143
  }>>;
144
- showStats: boolean;
144
+ stats: {
145
+ open: boolean;
146
+ panels: number;
147
+ };
145
148
  currentChartType: import("../element/types").ChartType;
146
149
  pasteDialog: {
147
150
  shown: false;
@@ -7,9 +7,13 @@ export declare const actionToggleStats: {
7
7
  trackEvent: {
8
8
  category: "menu";
9
9
  };
10
+ keywords: string[];
10
11
  perform(elements: readonly import("../element/types").OrderedExcalidrawElement[], appState: Readonly<import("../types").AppState>): {
11
12
  appState: {
12
- showStats: boolean;
13
+ stats: {
14
+ open: boolean;
15
+ panels: number;
16
+ };
13
17
  contextMenu: {
14
18
  items: import("../components/ContextMenu").ContextMenuItems;
15
19
  top: number;
@@ -141,7 +141,10 @@ export declare const actionToggleViewMode: {
141
141
  isSpeaking?: boolean | undefined;
142
142
  isMuted?: boolean | undefined;
143
143
  }>>;
144
- showStats: boolean;
144
+ stats: {
145
+ open: boolean;
146
+ panels: number;
147
+ };
145
148
  currentChartType: import("../element/types").ChartType;
146
149
  pasteDialog: {
147
150
  shown: false;
@@ -141,7 +141,10 @@ export declare const actionToggleZenMode: {
141
141
  isSpeaking?: boolean | undefined;
142
142
  isMuted?: boolean | undefined;
143
143
  }>>;
144
- showStats: boolean;
144
+ stats: {
145
+ open: boolean;
146
+ panels: number;
147
+ };
145
148
  currentChartType: import("../element/types").ChartType;
146
149
  pasteDialog: {
147
150
  shown: false;
@@ -15,7 +15,7 @@ export type ActionResult = {
15
15
  type ActionFn = (elements: readonly OrderedExcalidrawElement[], appState: Readonly<AppState>, formData: any, app: AppClassProperties) => ActionResult | Promise<ActionResult>;
16
16
  export type UpdaterFn = (res: ActionResult) => void;
17
17
  export type ActionFilterFn = (action: Action) => void;
18
- export type ActionName = "copy" | "cut" | "paste" | "copyAsPng" | "copyAsSvg" | "copyText" | "sendBackward" | "bringForward" | "sendToBack" | "bringToFront" | "copyStyles" | "selectAll" | "pasteStyles" | "gridMode" | "zenMode" | "objectsSnapMode" | "stats" | "changeStrokeColor" | "changeBackgroundColor" | "changeFillStyle" | "changeStrokeWidth" | "changeStrokeShape" | "changeSloppiness" | "changeStrokeStyle" | "changeArrowhead" | "changeOpacity" | "changeFontSize" | "toggleCanvasMenu" | "toggleEditMenu" | "undo" | "redo" | "finalize" | "changeProjectName" | "changeExportBackground" | "changeExportEmbedScene" | "changeExportScale" | "saveToActiveFile" | "saveFileToDisk" | "loadScene" | "duplicateSelection" | "deleteSelectedElements" | "changeViewBackgroundColor" | "clearCanvas" | "zoomIn" | "zoomOut" | "resetZoom" | "zoomToFit" | "zoomToFitSelection" | "zoomToFitSelectionInViewport" | "changeFontFamily" | "changeTextAlign" | "changeVerticalAlign" | "toggleFullScreen" | "toggleShortcuts" | "group" | "ungroup" | "goToCollaborator" | "addToLibrary" | "changeRoundness" | "alignTop" | "alignBottom" | "alignLeft" | "alignRight" | "alignVerticallyCentered" | "alignHorizontallyCentered" | "distributeHorizontally" | "distributeVertically" | "flipHorizontal" | "flipVertical" | "viewMode" | "exportWithDarkMode" | "toggleTheme" | "increaseFontSize" | "decreaseFontSize" | "unbindText" | "hyperlink" | "bindText" | "unlockAllElements" | "toggleElementLock" | "toggleLinearEditor" | "toggleEraserTool" | "toggleHandTool" | "selectAllElementsInFrame" | "removeAllElementsFromFrame" | "updateFrameRendering" | "setFrameAsActiveTool" | "setEmbeddableAsActiveTool" | "createContainerFromText" | "wrapTextInContainer" | "toggleLaserPointerTool" | "commandPalette" | "autoResize";
18
+ export type ActionName = "copy" | "cut" | "paste" | "copyAsPng" | "copyAsSvg" | "copyText" | "sendBackward" | "bringForward" | "sendToBack" | "bringToFront" | "copyStyles" | "selectAll" | "pasteStyles" | "gridMode" | "zenMode" | "objectsSnapMode" | "stats" | "changeStrokeColor" | "changeBackgroundColor" | "changeFillStyle" | "changeStrokeWidth" | "changeStrokeShape" | "changeSloppiness" | "changeStrokeStyle" | "changeArrowhead" | "changeOpacity" | "changeFontSize" | "toggleCanvasMenu" | "toggleEditMenu" | "undo" | "redo" | "finalize" | "changeProjectName" | "changeExportBackground" | "changeExportEmbedScene" | "changeExportScale" | "saveToActiveFile" | "saveFileToDisk" | "loadScene" | "duplicateSelection" | "deleteSelectedElements" | "changeViewBackgroundColor" | "clearCanvas" | "zoomIn" | "zoomOut" | "resetZoom" | "zoomToFit" | "zoomToFitSelection" | "zoomToFitSelectionInViewport" | "changeFontFamily" | "changeTextAlign" | "changeVerticalAlign" | "toggleFullScreen" | "toggleShortcuts" | "group" | "ungroup" | "goToCollaborator" | "addToLibrary" | "changeRoundness" | "alignTop" | "alignBottom" | "alignLeft" | "alignRight" | "alignVerticallyCentered" | "alignHorizontallyCentered" | "distributeHorizontally" | "distributeVertically" | "flipHorizontal" | "flipVertical" | "viewMode" | "exportWithDarkMode" | "toggleTheme" | "increaseFontSize" | "decreaseFontSize" | "unbindText" | "hyperlink" | "bindText" | "unlockAllElements" | "toggleElementLock" | "toggleLinearEditor" | "toggleEraserTool" | "toggleHandTool" | "selectAllElementsInFrame" | "removeAllElementsFromFrame" | "updateFrameRendering" | "setFrameAsActiveTool" | "setEmbeddableAsActiveTool" | "createContainerFromText" | "wrapTextInContainer" | "toggleLaserPointerTool" | "commandPalette" | "autoResize" | "elementStats";
19
19
  export type PanelComponentProps = {
20
20
  elements: readonly ExcalidrawElement[];
21
21
  appState: AppState;
@@ -56,7 +56,10 @@ export declare const clearAppStateForLocalStorage: (appState: Partial<AppState>)
56
56
  [groupId: string]: boolean;
57
57
  } | undefined;
58
58
  editingGroupId?: string | null | undefined;
59
- showStats?: boolean | undefined;
59
+ stats?: {
60
+ open: boolean;
61
+ panels: number;
62
+ } | undefined;
60
63
  currentChartType?: import("./element/types").ChartType | undefined;
61
64
  selectedLinearElement?: import("./element/linearElementEditor").LinearElementEditor | null | undefined;
62
65
  };
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import type { RoughCanvas } from "roughjs/bin/canvas";
3
3
  import { ActionManager } from "../actions/manager";
4
+ import type { ActionResult } from "../actions/types";
4
5
  import type { EXPORT_IMAGE_TYPES } from "../constants";
5
6
  import type { ExportedElements } from "../data";
6
7
  import { LinearElementEditor } from "../element/linearElementEditor";
@@ -256,7 +257,7 @@ declare class App extends React.Component<AppProps, AppState> {
256
257
  private onMagicSettingsConfirm;
257
258
  onMagicframeToolSelect: () => void;
258
259
  private openEyeDropper;
259
- private syncActionResult;
260
+ syncActionResult: (actionResult: ActionResult) => void;
260
261
  private onBlur;
261
262
  private onUnload;
262
263
  private disableEvent;
@@ -358,6 +359,7 @@ declare class App extends React.Component<AppProps, AppState> {
358
359
  collaborators?: SceneData["collaborators"];
359
360
  /** @default StoreAction.NONE */
360
361
  storeAction?: SceneData["storeAction"];
362
+ forceFlushSync?: boolean | undefined;
361
363
  }) => void;
362
364
  private triggerRender;
363
365
  /**
@@ -0,0 +1,7 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ interface AngleProps {
3
+ element: ExcalidrawElement;
4
+ elementsMap: ElementsMap;
5
+ }
6
+ declare const Angle: ({ element, elementsMap }: AngleProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default Angle;
@@ -0,0 +1,8 @@
1
+ interface CollapsibleProps {
2
+ label: React.ReactNode;
3
+ open: boolean;
4
+ openTrigger: () => void;
5
+ children: React.ReactNode;
6
+ }
7
+ declare const Collapsible: ({ label, open, openTrigger, children, }: CollapsibleProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default Collapsible;
@@ -0,0 +1,8 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ interface DimensionDragInputProps {
3
+ property: "width" | "height";
4
+ element: ExcalidrawElement;
5
+ elementsMap: ElementsMap;
6
+ }
7
+ declare const DimensionDragInput: ({ property, element, elementsMap, }: DimensionDragInputProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default DimensionDragInput;
@@ -0,0 +1,22 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ import "./DragInput.scss";
3
+ export type DragInputCallbackType = ({ accumulatedChange, instantChange, originalElements, originalElementsMap, shouldKeepAspectRatio, shouldChangeByStepSize, nextValue, }: {
4
+ accumulatedChange: number;
5
+ instantChange: number;
6
+ originalElements: readonly ExcalidrawElement[];
7
+ originalElementsMap: ElementsMap;
8
+ shouldKeepAspectRatio: boolean;
9
+ shouldChangeByStepSize: boolean;
10
+ nextValue?: number;
11
+ }) => void;
12
+ interface StatsDragInputProps {
13
+ label: string | React.ReactNode;
14
+ icon?: React.ReactNode;
15
+ value: number | "Mixed";
16
+ elements: readonly ExcalidrawElement[];
17
+ editable?: boolean;
18
+ shouldKeepAspectRatio?: boolean;
19
+ dragInputCallback: DragInputCallbackType;
20
+ }
21
+ declare const StatsDragInput: ({ label, icon, dragInputCallback, value, elements, editable, shouldKeepAspectRatio, }: StatsDragInputProps) => import("react/jsx-runtime").JSX.Element;
22
+ export default StatsDragInput;
@@ -0,0 +1,7 @@
1
+ import type { ElementsMap, ExcalidrawTextElement } from "../../element/types";
2
+ interface FontSizeProps {
3
+ element: ExcalidrawTextElement;
4
+ elementsMap: ElementsMap;
5
+ }
6
+ declare const FontSize: ({ element, elementsMap }: FontSizeProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default FontSize;
@@ -0,0 +1,9 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ import type Scene from "../../scene/Scene";
3
+ interface MultiAngleProps {
4
+ elements: readonly ExcalidrawElement[];
5
+ elementsMap: ElementsMap;
6
+ scene: Scene;
7
+ }
8
+ declare const MultiAngle: ({ elements, elementsMap, scene }: MultiAngleProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default MultiAngle;
@@ -0,0 +1,12 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ import type Scene from "../../scene/Scene";
3
+ import type { AtomicUnit } from "./utils";
4
+ interface MultiDimensionProps {
5
+ property: "width" | "height";
6
+ elements: readonly ExcalidrawElement[];
7
+ elementsMap: ElementsMap;
8
+ atomicUnits: AtomicUnit[];
9
+ scene: Scene;
10
+ }
11
+ declare const MultiDimension: ({ property, elements, elementsMap, atomicUnits, scene, }: MultiDimensionProps) => import("react/jsx-runtime").JSX.Element;
12
+ export default MultiDimension;
@@ -0,0 +1,9 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ import type Scene from "../../scene/Scene";
3
+ interface MultiFontSizeProps {
4
+ elements: readonly ExcalidrawElement[];
5
+ elementsMap: ElementsMap;
6
+ scene: Scene;
7
+ }
8
+ declare const MultiFontSize: ({ elements, elementsMap, scene, }: MultiFontSizeProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default MultiFontSize;
@@ -0,0 +1,12 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ import type Scene from "../../scene/Scene";
3
+ import type { AtomicUnit } from "./utils";
4
+ interface MultiPositionProps {
5
+ property: "x" | "y";
6
+ elements: readonly ExcalidrawElement[];
7
+ elementsMap: ElementsMap;
8
+ atomicUnits: AtomicUnit[];
9
+ scene: Scene;
10
+ }
11
+ declare const MultiPosition: ({ property, elements, elementsMap, atomicUnits, scene, }: MultiPositionProps) => import("react/jsx-runtime").JSX.Element;
12
+ export default MultiPosition;
@@ -0,0 +1,8 @@
1
+ import type { ElementsMap, ExcalidrawElement } from "../../element/types";
2
+ interface PositionProps {
3
+ property: "x" | "y";
4
+ element: ExcalidrawElement;
5
+ elementsMap: ElementsMap;
6
+ }
7
+ declare const Position: ({ property, element, elementsMap }: PositionProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default Position;
@@ -0,0 +1,15 @@
1
+ import type { NonDeletedExcalidrawElement } from "../../element/types";
2
+ import type { AppState, ExcalidrawProps } from "../../types";
3
+ import type Scene from "../../scene/Scene";
4
+ interface StatsProps {
5
+ scene: Scene;
6
+ onClose: () => void;
7
+ renderCustomStats: ExcalidrawProps["renderCustomStats"];
8
+ }
9
+ export declare const Stats: (props: StatsProps) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const StatsInner: import("react").MemoExoticComponent<({ scene, onClose, renderCustomStats, selectedElements, appState, sceneNonce, }: StatsProps & {
11
+ sceneNonce: number;
12
+ selectedElements: readonly NonDeletedExcalidrawElement[];
13
+ appState: AppState;
14
+ }) => import("react/jsx-runtime").JSX.Element>;
15
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement } from "../../element/types";
2
+ export declare const SMALLEST_DELTA = 0.01;
3
+ export declare const isPropertyEditable: (element: ExcalidrawElement, property: keyof ExcalidrawElement) => boolean;
4
+ export declare const getStepSizedValue: (value: number, stepSize: number) => number;
5
+ export type AtomicUnit = Record<string, true>;
6
+ export declare const getElementsInAtomicUnit: (atomicUnit: AtomicUnit, elementsMap: ElementsMap, originalElementsMap?: ElementsMap) => {
7
+ original: NonDeletedExcalidrawElement;
8
+ latest: NonDeletedExcalidrawElement;
9
+ }[];
10
+ export declare const newOrigin: (x1: number, y1: number, w1: number, h1: number, w2: number, h2: number, angle: number) => {
11
+ x: number;
12
+ y: number;
13
+ };
14
+ export declare const resizeElement: (nextWidth: number, nextHeight: number, keepAspectRatio: boolean, latestElement: ExcalidrawElement, origElement: ExcalidrawElement, elementsMap: ElementsMap, originalElementsMap: Map<string, ExcalidrawElement>, shouldInformMutation?: boolean) => void;
15
+ export declare const moveElement: (newTopLeftX: number, newTopLeftY: number, latestElement: ExcalidrawElement, originalElement: ExcalidrawElement, elementsMap: ElementsMap, originalElementsMap: ElementsMap, shouldInformMutation?: boolean) => void;
@@ -2,13 +2,14 @@ import React from "react";
2
2
  import type { DOMAttributes } from "react";
3
3
  import type { Device, InteractiveCanvasAppState } from "../../types";
4
4
  import type { RenderableElementsMap, RenderInteractiveSceneCallback } from "../../scene/types";
5
- import type { NonDeletedExcalidrawElement } from "../../element/types";
5
+ import type { NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "../../element/types";
6
6
  type InteractiveCanvasProps = {
7
7
  containerRef: React.RefObject<HTMLDivElement>;
8
8
  canvas: HTMLCanvasElement | null;
9
9
  elementsMap: RenderableElementsMap;
10
10
  visibleElements: readonly NonDeletedExcalidrawElement[];
11
11
  selectedElements: readonly NonDeletedExcalidrawElement[];
12
+ allElementsMap: NonDeletedSceneElementsMap;
12
13
  sceneNonce: number | undefined;
13
14
  selectionNonce: number | undefined;
14
15
  scale: number;
@@ -156,6 +156,7 @@ export declare const TextAlignBottomIcon: React.MemoExoticComponent<({ theme }:
156
156
  export declare const TextAlignMiddleIcon: React.MemoExoticComponent<({ theme }: {
157
157
  theme: Theme;
158
158
  }) => import("react/jsx-runtime").JSX.Element>;
159
+ export declare const angleIcon: import("react/jsx-runtime").JSX.Element;
159
160
  export declare const publishIcon: import("react/jsx-runtime").JSX.Element;
160
161
  export declare const eraser: import("react/jsx-runtime").JSX.Element;
161
162
  export declare const handIcon: import("react/jsx-runtime").JSX.Element;
@@ -201,4 +202,6 @@ export declare const loginIcon: import("react/jsx-runtime").JSX.Element;
201
202
  export declare const youtubeIcon: import("react/jsx-runtime").JSX.Element;
202
203
  export declare const gridIcon: import("react/jsx-runtime").JSX.Element;
203
204
  export declare const lineEditorIcon: import("react/jsx-runtime").JSX.Element;
205
+ export declare const collapseDownIcon: import("react/jsx-runtime").JSX.Element;
206
+ export declare const collapseUpIcon: import("react/jsx-runtime").JSX.Element;
204
207
  export {};
@@ -10,6 +10,7 @@ export declare const isIOS: boolean;
10
10
  export declare const isBrave: () => boolean;
11
11
  export declare const supportsResizeObserver: boolean;
12
12
  export declare const APP_NAME = "Excalidraw";
13
+ export declare const TEXT_AUTOWRAP_THRESHOLD = 36;
13
14
  export declare const DRAGGING_THRESHOLD = 10;
14
15
  export declare const LINE_CONFIRM_THRESHOLD = 8;
15
16
  export declare const ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;
@@ -289,3 +290,8 @@ export declare const EDITOR_LS_KEYS: {
289
290
  * where filename is optional and we can't retrieve name from app state
290
291
  */
291
292
  export declare const DEFAULT_FILENAME = "Untitled";
293
+ export declare const STATS_PANELS: {
294
+ readonly generalStats: 1;
295
+ readonly elementProperties: 2;
296
+ };
297
+ export declare const MIN_WIDTH_OR_HEIGHT = 1;
@@ -1,5 +1,5 @@
1
1
  import type { NonDeletedExcalidrawElement } from "./types";
2
- import type { AppState, PointerDownState } from "../types";
2
+ import type { AppState, NormalizedZoomValue, PointerDownState } from "../types";
3
3
  import type Scene from "../scene/Scene";
4
4
  export declare const dragSelectedElements: (pointerDownState: PointerDownState, selectedElements: NonDeletedExcalidrawElement[], offset: {
5
5
  x: number;
@@ -9,7 +9,7 @@ export declare const dragSelectedElements: (pointerDownState: PointerDownState,
9
9
  y: number;
10
10
  }, gridSize: AppState["gridSize"]) => void;
11
11
  export declare const getDragOffsetXY: (selectedElements: NonDeletedExcalidrawElement[], x: number, y: number) => [number, number];
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?: {
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, zoom: NormalizedZoomValue, widthAspectRatio?: number | null, originOffset?: {
13
13
  x: number;
14
14
  y: number;
15
15
  } | null) => void;
@@ -146,7 +146,10 @@ export declare const actionSetEmbeddableAsActiveTool: {
146
146
  isSpeaking?: boolean | undefined;
147
147
  isMuted?: boolean | undefined;
148
148
  }>>;
149
- showStats: boolean;
149
+ stats: {
150
+ open: boolean;
151
+ panels: number;
152
+ };
150
153
  currentChartType: import("./types").ChartType;
151
154
  pasteDialog: {
152
155
  shown: false;
@@ -253,7 +253,10 @@ export declare class LinearElementEditor {
253
253
  isSpeaking?: boolean | undefined;
254
254
  isMuted?: boolean | undefined;
255
255
  }>>;
256
- showStats: boolean;
256
+ stats: {
257
+ open: boolean;
258
+ panels: number;
259
+ };
257
260
  currentChartType: import("./types").ChartType;
258
261
  pasteDialog: {
259
262
  shown: false;
@@ -1,8 +1,16 @@
1
- import type { ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
1
+ import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
2
2
  import type { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
3
3
  import type { PointerDownState } from "../types";
4
4
  export declare const normalizeAngle: (angle: number) => number;
5
5
  export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
6
+ export declare const rescalePointsInElement: (element: NonDeletedExcalidrawElement, width: number, height: number, normalizePoints: boolean) => {
7
+ points: (readonly [number, number])[];
8
+ } | {
9
+ points?: undefined;
10
+ };
11
+ export declare const measureFontSizeFromWidth: (element: NonDeleted<ExcalidrawTextElement>, elementsMap: ElementsMap, nextWidth: number) => {
12
+ size: number;
13
+ } | null;
6
14
  export declare const resizeSingleElement: (originalElements: PointerDownState["originalElements"], shouldMaintainAspectRatio: boolean, element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleDirection: TransformHandleDirection, shouldResizeFromCenter: boolean, pointerX: number, pointerY: number) => void;
7
15
  export declare const resizeMultipleElements: (originalElements: PointerDownState["originalElements"], selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number) => void;
8
16
  export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, x: number, y: number) => [number, number];
@@ -87,4 +87,5 @@ export declare const FONT_METRICS: Record<number, {
87
87
  export declare const getDefaultLineHeight: (fontFamily: FontFamilyValues) => number & {
88
88
  _brand: "unitlessLineHeight";
89
89
  };
90
+ export declare const getMinTextElementWidth: (font: FontString, lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
90
91
  export {};
@@ -1,6 +1,6 @@
1
1
  import type { ExcalidrawElement, ExcalidrawTextElement } from "./types";
2
2
  import type App from "../components/App";
3
- export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, }: {
3
+ export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, autoSelect, }: {
4
4
  id: ExcalidrawElement["id"];
5
5
  /**
6
6
  * textWysiwyg only deals with `originalText`
@@ -18,4 +18,5 @@ export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords,
18
18
  canvas: HTMLCanvasElement;
19
19
  excalidrawContainer: HTMLDivElement | null;
20
20
  app: App;
21
+ autoSelect?: boolean | undefined;
21
22
  }) => void;
@@ -29,5 +29,5 @@ export declare const removeFromSelectedGroups: (groupIds: ExcalidrawElement["gro
29
29
  }) => string[];
30
30
  export declare const getMaximumGroups: (elements: ExcalidrawElement[], elementsMap: ElementsMap) => ExcalidrawElement[][];
31
31
  export declare const getNonDeletedGroupIds: (elements: ElementsMap) => Set<string>;
32
- export declare const elementsAreInSameGroup: (elements: ExcalidrawElement[]) => boolean;
32
+ export declare const elementsAreInSameGroup: (elements: readonly ExcalidrawElement[]) => boolean;
33
33
  export declare const isInGroup: (element: NonDeletedExcalidrawElement) => boolean;
@@ -28,6 +28,8 @@ export declare const getBezierCurveLength: (element: NonDeleted<ExcalidrawLinear
28
28
  export declare const mapIntervalToBezierT: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number], interval: number) => number;
29
29
  export declare const arePointsEqual: (p1: readonly [number, number], p2: readonly [number, number]) => boolean;
30
30
  export declare const isRightAngle: (angle: number) => boolean;
31
+ export declare const radianToDegree: (r: number) => number;
32
+ export declare const degreeToRadian: (d: number) => number;
31
33
  export declare const rangesOverlap: ([a0, a1]: [number, number], [b0, b1]: [number, number]) => boolean;
32
34
  export declare const rangeIntersection: (rangeA: [number, number], rangeB: [number, number]) => [number, number] | null;
33
35
  export declare const isValueInRange: (value: number, min: number, max: number) => boolean;
@@ -0,0 +1,2 @@
1
+ /** heuristically checks whether the text may be a mermaid diagram definition */
2
+ export declare const isMaybeMermaidDefinition: (text: string) => boolean;
@@ -9,7 +9,7 @@ export declare const renderInteractiveSceneThrottled: {
9
9
  * Interactive scene is the ui-canvas where we render bounding boxes, selections
10
10
  * and other ui stuff.
11
11
  */
12
- export declare const renderInteractiveScene: <U extends ({ canvas, elementsMap, visibleElements, selectedElements, scale, appState, renderConfig, device, }: InteractiveSceneRenderConfig) => {
12
+ export declare const renderInteractiveScene: <U extends ({ canvas, elementsMap, visibleElements, selectedElements, allElementsMap, scale, appState, renderConfig, device, }: InteractiveSceneRenderConfig) => {
13
13
  atLeastOneVisibleElement: boolean;
14
14
  elementsMap: RenderableElementsMap;
15
15
  scrollBars?: undefined;