@excalidraw/math 0.18.0-a8acc82 → 0.18.0-ab0255f

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 (330) hide show
  1. package/dist/dev/index.js +305 -102
  2. package/dist/dev/index.js.map +4 -4
  3. package/dist/prod/index.js +1 -1
  4. package/dist/types/common/debug.d.ts +21 -0
  5. package/dist/types/common/src/appEventBus.d.ts +27 -0
  6. package/dist/types/common/src/bounds.d.ts +10 -0
  7. package/dist/types/common/src/colors.d.ts +75 -39
  8. package/dist/types/common/src/constants.d.ts +35 -34
  9. package/dist/types/common/src/editorInterface.d.ts +34 -0
  10. package/dist/types/common/src/font-metadata.d.ts +1 -3
  11. package/dist/types/common/src/index.d.ts +5 -0
  12. package/dist/types/common/src/keys.d.ts +3 -1
  13. package/dist/types/common/src/points.d.ts +1 -1
  14. package/dist/types/common/src/utility-types.d.ts +0 -1
  15. package/dist/types/common/src/utils.d.ts +47 -78
  16. package/dist/types/common/src/versionedSnapshotStore.d.ts +17 -0
  17. package/dist/types/element/src/Scene.d.ts +11 -7
  18. package/dist/types/element/src/align.d.ts +2 -2
  19. package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
  20. package/dist/types/element/src/arrowheads.d.ts +3 -0
  21. package/dist/types/element/src/arrows/focus.d.ts +30 -0
  22. package/dist/types/element/src/arrows/helpers.d.ts +5 -0
  23. package/dist/types/element/src/binding.d.ts +79 -51
  24. package/dist/types/element/src/bounds.d.ts +25 -18
  25. package/dist/types/element/src/bucketFill.d.ts +110 -0
  26. package/dist/types/element/src/collision.d.ts +7 -2
  27. package/dist/types/element/src/comparisons.d.ts +8 -7
  28. package/dist/types/element/src/convertToShape.d.ts +23 -0
  29. package/dist/types/element/src/distribute.d.ts +3 -2
  30. package/dist/types/element/src/dragElements.d.ts +30 -3
  31. package/dist/types/element/src/duplicate.d.ts +7 -6
  32. package/dist/types/element/src/elbowArrow.d.ts +2 -0
  33. package/dist/types/element/src/embeddable.d.ts +2 -2
  34. package/dist/types/element/src/flowchart.d.ts +7 -7
  35. package/dist/types/element/src/fractionalIndex.d.ts +4 -4
  36. package/dist/types/element/src/frame.d.ts +14 -9
  37. package/dist/types/element/src/groups.d.ts +9 -9
  38. package/dist/types/element/src/heading.d.ts +2 -1
  39. package/dist/types/element/src/image.d.ts +1 -11
  40. package/dist/types/element/src/index.d.ts +8 -4
  41. package/dist/types/element/src/linearElementEditor.d.ts +38 -30
  42. package/dist/types/element/src/mutateElement.d.ts +5 -1
  43. package/dist/types/element/src/newElement.d.ts +20 -6
  44. package/dist/types/element/src/renderElement.d.ts +1 -10
  45. package/dist/types/element/src/resizeElements.d.ts +12 -12
  46. package/dist/types/element/src/resizeTest.d.ts +6 -5
  47. package/dist/types/element/src/selection.d.ts +14 -14
  48. package/dist/types/element/src/shape.d.ts +21 -8
  49. package/dist/types/element/src/textElement.d.ts +13 -10
  50. package/dist/types/element/src/textMeasurements.d.ts +1 -3
  51. package/dist/types/element/src/textWrapping.d.ts +26 -0
  52. package/dist/types/{excalidraw/data → element/src}/transform.d.ts +3 -3
  53. package/dist/types/element/src/transformHandles.d.ts +8 -27
  54. package/dist/types/element/src/typeChecks.d.ts +29 -31
  55. package/dist/types/element/src/types.d.ts +20 -14
  56. package/dist/types/element/src/utils.d.ts +9 -4
  57. package/dist/types/element/src/zindex.d.ts +7 -1
  58. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +191 -216
  59. package/dist/types/excalidraw/actions/actionAlign.d.ts +12 -13
  60. package/dist/types/excalidraw/actions/actionBoundText.d.ts +112 -129
  61. package/dist/types/excalidraw/actions/actionCanvas.d.ts +412 -1564
  62. package/dist/types/excalidraw/actions/actionClipboard.d.ts +139 -901
  63. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +54 -63
  64. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +177 -205
  65. package/dist/types/excalidraw/actions/actionDeselect.d.ts +162 -0
  66. package/dist/types/excalidraw/actions/actionDistribute.d.ts +4 -6
  67. package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +3 -4
  68. package/dist/types/excalidraw/actions/actionElementLink.d.ts +61 -76
  69. package/dist/types/excalidraw/actions/actionElementLock.d.ts +111 -128
  70. package/dist/types/excalidraw/actions/actionExport.d.ts +190 -1419
  71. package/dist/types/excalidraw/actions/actionFinalize.d.ts +10 -396
  72. package/dist/types/excalidraw/actions/actionFlip.d.ts +2 -3
  73. package/dist/types/excalidraw/actions/actionFrame.d.ts +253 -502
  74. package/dist/types/excalidraw/actions/actionGroup.d.ts +122 -147
  75. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +150 -195
  76. package/dist/types/excalidraw/actions/actionLink.d.ts +67 -76
  77. package/dist/types/excalidraw/actions/actionMenu.d.ts +56 -439
  78. package/dist/types/excalidraw/actions/actionNavigate.d.ts +18 -361
  79. package/dist/types/excalidraw/actions/actionProperties.d.ts +197 -2554
  80. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +61 -74
  81. package/dist/types/excalidraw/actions/actionStyles.d.ts +54 -62
  82. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +4 -4
  83. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +178 -0
  84. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +69 -79
  85. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +178 -0
  86. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +68 -77
  87. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +57 -73
  88. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +2 -2
  89. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +67 -76
  90. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +68 -77
  91. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +68 -77
  92. package/dist/types/excalidraw/actions/actionZindex.d.ts +8 -9
  93. package/dist/types/excalidraw/actions/index.d.ts +5 -3
  94. package/dist/types/excalidraw/actions/manager.d.ts +1 -0
  95. package/dist/types/excalidraw/actions/register.d.ts +2 -2
  96. package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
  97. package/dist/types/excalidraw/actions/types.d.ts +11 -7
  98. package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
  99. package/dist/types/excalidraw/appState.d.ts +34 -26
  100. package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -0
  101. package/dist/types/excalidraw/charts/charts.constants.d.ts +48 -0
  102. package/dist/types/excalidraw/charts/charts.helpers.d.ts +32 -0
  103. package/dist/types/excalidraw/charts/charts.line.d.ts +2 -0
  104. package/dist/types/excalidraw/charts/charts.parse.d.ts +10 -0
  105. package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -0
  106. package/dist/types/excalidraw/charts/charts.types.d.ts +18 -0
  107. package/dist/types/excalidraw/charts/index.d.ts +7 -0
  108. package/dist/types/excalidraw/clipboard.d.ts +13 -38
  109. package/dist/types/excalidraw/components/Actions.d.ts +26 -11
  110. package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
  111. package/dist/types/excalidraw/components/App.arrowText.d.ts +72 -0
  112. package/dist/types/excalidraw/components/App.bucketFill.d.ts +34 -0
  113. package/dist/types/excalidraw/components/App.cursor.d.ts +31 -0
  114. package/dist/types/excalidraw/components/App.d.ts +447 -118
  115. package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
  116. package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
  117. package/dist/types/excalidraw/components/App.viewport.d.ts +73 -0
  118. package/dist/types/excalidraw/components/AppStateObserver.d.ts +37 -0
  119. package/dist/types/excalidraw/components/Card.d.ts +1 -3
  120. package/dist/types/excalidraw/components/ColorPicker/ColorInput.d.ts +2 -4
  121. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +5 -5
  122. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +3 -0
  123. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +7 -1
  124. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +2 -1
  125. package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -2
  126. package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
  127. package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
  128. package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
  129. package/dist/types/excalidraw/components/CommandPalette/types.d.ts +2 -4
  130. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +4 -4
  131. package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
  132. package/dist/types/excalidraw/components/DarkModeToggle.d.ts +1 -1
  133. package/dist/types/excalidraw/components/DefaultSidebar.d.ts +9 -13
  134. package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +1 -1
  135. package/dist/types/excalidraw/components/Ellipsify.d.ts +1 -2
  136. package/dist/types/excalidraw/components/ErrorDialog.d.ts +1 -1
  137. package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -2
  138. package/dist/types/excalidraw/components/FilledButton.d.ts +2 -1
  139. package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +2 -1
  140. package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +0 -1
  141. package/dist/types/excalidraw/components/HelpDialog.d.ts +1 -1
  142. package/dist/types/excalidraw/components/HintViewer.d.ts +4 -3
  143. package/dist/types/excalidraw/components/{ToolButton.d.ts → IconButton.d.ts} +16 -19
  144. package/dist/types/excalidraw/components/IconPicker.d.ts +14 -9
  145. package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
  146. package/dist/types/excalidraw/components/Island.d.ts +7 -0
  147. package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
  148. package/dist/types/excalidraw/components/LayerUI.d.ts +5 -2
  149. package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
  150. package/dist/types/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  151. package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +1 -2
  152. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +1 -1
  153. package/dist/types/excalidraw/components/LibraryUnit.d.ts +2 -3
  154. package/dist/types/excalidraw/components/LoadingMessage.d.ts +0 -1
  155. package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
  156. package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
  157. package/dist/types/excalidraw/components/MobileMenu.d.ts +5 -7
  158. package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
  159. package/dist/types/excalidraw/components/Modal.d.ts +0 -1
  160. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +1 -1
  161. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  162. package/dist/types/excalidraw/components/PasteChartDialog.d.ts +4 -5
  163. package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
  164. package/dist/types/excalidraw/components/Popover.d.ts +2 -3
  165. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -1
  166. package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
  167. package/dist/types/excalidraw/components/RadioGroup.d.ts +0 -1
  168. package/dist/types/excalidraw/components/RadioSelection.d.ts +4 -4
  169. package/dist/types/excalidraw/components/Range.d.ts +10 -4
  170. package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
  171. package/dist/types/excalidraw/components/ScrollableList.d.ts +0 -1
  172. package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
  173. package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +16 -22
  174. package/dist/types/excalidraw/components/Sidebar/SidebarHeader.d.ts +1 -1
  175. package/dist/types/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -2
  176. package/dist/types/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -2
  177. package/dist/types/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +1 -2
  178. package/dist/types/excalidraw/components/Sidebar/SidebarTabs.d.ts +1 -2
  179. package/dist/types/excalidraw/components/Spinner.d.ts +4 -4
  180. package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
  181. package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +0 -1
  182. package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +0 -1
  183. package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
  184. package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -3
  185. package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
  186. package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
  187. package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
  188. package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
  189. package/dist/types/excalidraw/components/Stats/index.d.ts +7 -8
  190. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  191. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatHistoryMenu.d.ts +15 -0
  192. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatInterface.d.ts +23 -0
  193. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatMessage.d.ts +14 -0
  194. package/dist/types/excalidraw/components/TTDDialog/Chat/TTDChatPanel.d.ts +27 -0
  195. package/dist/types/excalidraw/components/TTDDialog/Chat/index.d.ts +3 -0
  196. package/dist/types/excalidraw/components/TTDDialog/Chat/useChatAgent.d.ts +8 -0
  197. package/dist/types/excalidraw/components/TTDDialog/CodeMirrorEditor.d.ts +11 -0
  198. package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +3 -2
  199. package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +13 -0
  200. package/dist/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +12 -29
  201. package/dist/types/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +3 -3
  202. package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +5 -2
  203. package/dist/types/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +13 -9
  204. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +1 -2
  205. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +1 -2
  206. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +1 -2
  207. package/dist/types/excalidraw/components/TTDDialog/TTDPreviewPanel.d.ts +9 -0
  208. package/dist/types/excalidraw/components/TTDDialog/TTDWelcomeMessage.d.ts +1 -0
  209. package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +9 -0
  210. package/dist/types/excalidraw/components/TTDDialog/common.d.ts +16 -16
  211. package/dist/types/excalidraw/components/TTDDialog/hooks/useChatManagement.d.ts +13 -0
  212. package/dist/types/excalidraw/components/TTDDialog/hooks/useMermaidRenderer.d.ts +14 -0
  213. package/dist/types/excalidraw/components/TTDDialog/hooks/useTextGeneration.d.ts +7 -0
  214. package/dist/types/excalidraw/components/TTDDialog/mermaid-lang-lite.d.ts +2 -0
  215. package/dist/types/excalidraw/components/TTDDialog/types.d.ts +95 -0
  216. package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +22 -0
  217. package/dist/types/excalidraw/components/TTDDialog/utils/chat.d.ts +10 -0
  218. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidAutoFix.d.ts +1 -0
  219. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +10 -0
  220. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidValidation.d.ts +1 -0
  221. package/dist/types/excalidraw/components/TextField.d.ts +1 -0
  222. package/dist/types/excalidraw/components/Toast.d.ts +11 -7
  223. package/dist/types/excalidraw/components/ToolPopover.d.ts +22 -0
  224. package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
  225. package/dist/types/excalidraw/components/Tools.d.ts +146 -0
  226. package/dist/types/excalidraw/components/Trans.d.ts +2 -2
  227. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +10 -4
  228. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +1 -0
  229. package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
  230. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +47 -35
  231. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +7 -5
  232. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +3 -3
  233. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +13 -22
  234. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCheckbox.d.ts +5 -0
  235. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +5 -4
  236. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -2
  237. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +2 -2
  238. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +6 -6
  239. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSub.d.ts +23 -0
  240. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubContent.d.ts +8 -0
  241. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubTrigger.d.ts +12 -0
  242. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +3 -4
  243. package/dist/types/excalidraw/components/dropdownMenu/common.d.ts +2 -2
  244. package/dist/types/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +2 -0
  245. package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
  246. package/dist/types/excalidraw/components/hoc/withInternalFallback.d.ts +1 -1
  247. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  248. package/dist/types/excalidraw/components/icons.d.ts +47 -23
  249. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +24 -3
  250. package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +39 -35
  251. package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
  252. package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
  253. package/dist/types/excalidraw/data/blob.d.ts +338 -7
  254. package/dist/types/excalidraw/data/encode.d.ts +4 -4
  255. package/dist/types/excalidraw/data/encryption.d.ts +5 -5
  256. package/dist/types/excalidraw/data/filesystem.d.ts +5 -7
  257. package/dist/types/excalidraw/data/index.d.ts +8 -9
  258. package/dist/types/excalidraw/data/json.d.ts +175 -3
  259. package/dist/types/excalidraw/data/library.d.ts +25 -10
  260. package/dist/types/excalidraw/data/resave.d.ts +7 -2
  261. package/dist/types/excalidraw/data/restore.d.ts +25 -10
  262. package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
  263. package/dist/types/excalidraw/editor-jotai.d.ts +11 -11
  264. package/dist/types/excalidraw/eraser/index.d.ts +2 -3
  265. package/dist/types/excalidraw/errors.d.ts +14 -0
  266. package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
  267. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +2 -2
  268. package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +4 -3
  269. package/dist/types/excalidraw/hooks/useScrollPosition.d.ts +1 -2
  270. package/dist/types/excalidraw/i18n.d.ts +2 -2
  271. package/dist/types/excalidraw/{laser-trails.d.ts → laserTrails.d.ts} +5 -7
  272. package/dist/types/excalidraw/lasso/index.d.ts +2 -3
  273. package/dist/types/excalidraw/renderer/animation.d.ts +16 -0
  274. package/dist/types/excalidraw/renderer/helpers.d.ts +6 -8
  275. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +7 -15
  276. package/dist/types/excalidraw/scene/Renderer.d.ts +428 -18
  277. package/dist/types/excalidraw/scene/export.d.ts +4 -4
  278. package/dist/types/excalidraw/scene/index.d.ts +2 -2
  279. package/dist/types/excalidraw/scene/types.d.ts +26 -8
  280. package/dist/types/excalidraw/shortcut.d.ts +1 -0
  281. package/dist/types/excalidraw/snapping.d.ts +12 -12
  282. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-bindings.d.ts +1 -1
  283. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-loader.d.ts +1 -1
  284. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-wasm.d.ts +1 -1
  285. package/dist/types/excalidraw/subset/woff2/woff2-loader.d.ts +2 -2
  286. package/dist/types/excalidraw/subset/woff2/woff2-wasm.d.ts +1 -1
  287. package/dist/types/excalidraw/textAutoResizeHandle.d.ts +15 -0
  288. package/dist/types/excalidraw/types.d.ts +485 -52
  289. package/dist/types/excalidraw/viewport.d.ts +272 -0
  290. package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +8 -5
  291. package/dist/types/fractional-indexing/src/index.d.ts +29 -0
  292. package/dist/types/laser-pointer/src/index.d.ts +2 -0
  293. package/dist/types/laser-pointer/src/math.d.ts +16 -0
  294. package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
  295. package/dist/types/laser-pointer/src/state.d.ts +36 -0
  296. package/dist/types/math/src/constants.d.ts +0 -1
  297. package/dist/types/math/src/curve.d.ts +4 -1
  298. package/dist/types/math/src/index.d.ts +1 -0
  299. package/dist/types/math/src/pca.d.ts +79 -0
  300. package/dist/types/math/src/point.d.ts +8 -2
  301. package/dist/types/math/src/polygon.d.ts +26 -2
  302. package/dist/types/math/src/range.d.ts +1 -3
  303. package/dist/types/math/src/segment.d.ts +3 -3
  304. package/dist/types/math/src/types.d.ts +25 -1
  305. package/dist/types/utils/src/export.d.ts +8 -8
  306. package/dist/types/utils/src/index.d.ts +1 -2
  307. package/dist/types/utils/src/shape.d.ts +6 -6
  308. package/package.json +2 -2
  309. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +0 -186
  310. package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
  311. package/dist/types/excalidraw/charts.d.ts +0 -27
  312. package/dist/types/excalidraw/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +0 -4
  313. package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +0 -16
  314. package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
  315. package/dist/types/excalidraw/components/InitializeApp.d.ts +0 -10
  316. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +0 -9
  317. package/dist/types/excalidraw/components/footer/FooterCenter.d.ts +0 -8
  318. package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -10
  319. package/dist/types/excalidraw/components/shapes.d.ts +0 -190
  320. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -58
  321. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +0 -19
  322. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +0 -85
  323. package/dist/types/excalidraw/cursor.d.ts +0 -5
  324. package/dist/types/excalidraw/data/reconcile.d.ts +0 -7
  325. package/dist/types/excalidraw/index.d.ts +0 -47
  326. package/dist/types/excalidraw/polyfill.d.ts +0 -2
  327. package/dist/types/excalidraw/scene/scroll.d.ts +0 -23
  328. package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
  329. package/dist/types/utils/src/bbox.d.ts +0 -9
  330. package/dist/types/utils/src/withinBounds.d.ts +0 -19
@@ -1,39 +1,65 @@
1
1
  import React from "react";
2
- import { type EXPORT_IMAGE_TYPES, Emitter } from "@excalidraw/common";
3
- import { LinearElementEditor, FlowChartCreator, Scene, Store, type ElementUpdate, StoreDelta, type ApplyToOptions } from "@excalidraw/element";
4
- import type { ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement, ExcalidrawFrameLikeElement, ExcalidrawIframeElement, ExcalidrawEmbeddableElement, Ordered, SceneElementsMap } from "@excalidraw/element/types";
2
+ import { AppEventBus, type EXPORT_IMAGE_TYPES, Emitter, type EditorInterface, type StylesPanelMode } from "@excalidraw/common";
3
+ import { LinearElementEditor, Scene, Store, type ElementUpdate, StoreDelta, type ApplyToOptions } from "@excalidraw/element";
4
+ import type { LocalPoint, Radians } from "@excalidraw/math";
5
+ import type { ExcalidrawElement, ExcalidrawTextElement, NonDeleted, NonDeletedExcalidrawElement, ExcalidrawTextContainer, ExcalidrawFrameLikeElement, ExcalidrawIframeElement, ExcalidrawEmbeddableElement, Ordered, SceneElementsMap } from "@excalidraw/element/types";
5
6
  import type { Mutable } from "@excalidraw/common/utility-types";
6
7
  import { ActionManager } from "../actions/manager";
7
- import { AnimationFrameHandler } from "../animation-frame-handler";
8
8
  import { History } from "../history";
9
9
  import { Fonts } from "../fonts";
10
10
  import { type WritableAtom } from "../editor-jotai";
11
11
  import { Renderer } from "../scene/Renderer";
12
- import { LaserTrails } from "../laser-trails";
12
+ import { type SetViewportOptions } from "../viewport";
13
+ import { LaserTrails } from "../laserTrails";
14
+ import { isOverScrollBars } from "../scene/scrollbars";
13
15
  import { LassoTrail } from "../lasso";
14
16
  import { EraserTrail } from "../eraser";
17
+ import { AppArrowText } from "./App.arrowText";
18
+ import { AppBucketFill } from "./App.bucketFill";
19
+ import { AppCursor } from "./App.cursor";
20
+ import { AppDrawShape } from "./App.drawshape";
21
+ import { AppFlowchart } from "./App.flowchart";
22
+ import { AppViewport } from "./App.viewport";
23
+ import { CursorHints } from "./CursorHint";
24
+ import { type OnStateChange } from "./AppStateObserver";
15
25
  import type { ExportedElements } from "../data";
16
- import type { FileSystemHandle } from "../data/filesystem";
17
- import type { AppClassProperties, AppProps, AppState, ExcalidrawImperativeAPI, BinaryFiles, LibraryItems, SceneData, Device, FrameNameBoundsCache, SidebarName, SidebarTabName, ToolType, OnUserFollowedPayload, GenerateDiagramToCode, NullableGridSize, Offsets } from "../types";
26
+ import type { AppClassProperties, AppProps, AppState, ExcalidrawImperativeAPI, BinaryFiles, LibraryItems, SceneData, FrameNameBoundsCache, SidebarName, SidebarTabName, ToolType, OnUserFollowedPayload, ExcalidrawImperativeAPIEventMap, GenerateDiagramToCode, NullableGridSize, UIConfig } from "../types";
18
27
  import type { RoughCanvas } from "roughjs/bin/canvas";
19
28
  import type { ActionResult } from "../actions/types";
29
+ declare const editorLifecycleEventBehavior: {
30
+ readonly "editor:mount": {
31
+ readonly cardinality: "once";
32
+ readonly replay: "last";
33
+ };
34
+ readonly "editor:initialize": {
35
+ readonly cardinality: "once";
36
+ readonly replay: "last";
37
+ };
38
+ readonly "editor:unmount": {
39
+ readonly cardinality: "once";
40
+ readonly replay: "last";
41
+ };
42
+ };
20
43
  export declare const ExcalidrawContainerContext: React.Context<{
21
44
  container: HTMLDivElement | null;
22
45
  id: string | null;
23
46
  }>;
47
+ export declare const ExcalidrawAPIContext: React.Context<ExcalidrawImperativeAPI | null>;
48
+ export declare const ExcalidrawAPISetContext: React.Context<((api: ExcalidrawImperativeAPI | null) => void) | null>;
24
49
  export declare const useApp: () => AppClassProperties;
25
50
  export declare const useAppProps: () => AppProps;
26
- export declare const useDevice: () => Readonly<{
27
- viewport: {
28
- isMobile: boolean;
29
- isLandscape: boolean;
30
- };
31
- editor: {
32
- isMobile: boolean;
33
- canFitSidebar: boolean;
34
- };
51
+ export declare const useEditorInterface: () => Readonly<{
52
+ formFactor: "phone" | "tablet" | "desktop";
53
+ desktopUIMode: "compact" | "full";
54
+ userAgent: Readonly<{
55
+ isMobileDevice: boolean;
56
+ platform: "ios" | "android" | "other" | "unknown";
57
+ }>;
35
58
  isTouchScreen: boolean;
59
+ canFitSidebar: boolean;
60
+ isLandscape: boolean;
36
61
  }>;
62
+ export declare const useStylesPanelMode: () => StylesPanelMode;
37
63
  export declare const useExcalidrawContainer: () => {
38
64
  container: HTMLDivElement | null;
39
65
  id: string | null;
@@ -42,20 +68,28 @@ export declare const useExcalidrawElements: () => readonly NonDeletedExcalidrawE
42
68
  export declare const useExcalidrawAppState: () => AppState;
43
69
  export declare const useExcalidrawSetAppState: () => <K extends keyof AppState>(state: AppState | ((prevState: Readonly<AppState>, props: Readonly<any>) => AppState | Pick<AppState, K> | null) | Pick<AppState, K> | null, callback?: (() => void) | undefined) => void;
44
70
  export declare const useExcalidrawActionManager: () => ActionManager;
71
+ /**
72
+ * Requires wrapping your component in <ExcalidrawAPIContext.Provider>
73
+ */
74
+ export declare const useExcalidrawAPI: () => ExcalidrawImperativeAPI | null;
45
75
  declare class App extends React.Component<AppProps, AppState> {
46
76
  canvas: AppClassProperties["canvas"];
47
77
  interactiveCanvas: AppClassProperties["interactiveCanvas"];
78
+ sessionExportThemeOverride: AppState["theme"] | undefined;
48
79
  rc: RoughCanvas;
49
80
  unmounted: boolean;
50
81
  actionManager: ActionManager;
51
- device: Device;
82
+ editorInterface: EditorInterface;
83
+ private stylesPanelMode;
52
84
  private excalidrawContainerRef;
53
85
  scene: Scene;
54
86
  fonts: Fonts;
55
87
  renderer: Renderer;
56
88
  visibleElements: readonly NonDeletedExcalidrawElement[];
89
+ /** whether the last render had any renderable elements (excludes e.g. the
90
+ * in-progress `newElement` and the edited text element) */
91
+ private hasRenderableElements;
57
92
  private resizeObserver;
58
- private nearestScrollableContainer;
59
93
  library: AppClassProperties["library"];
60
94
  libraryItemsFromStorage: LibraryItems | undefined;
61
95
  id: string;
@@ -78,26 +112,40 @@ declare class App extends React.Component<AppProps, AppState> {
78
112
  /** embeds that have been inserted to DOM (as a perf optim, we don't want to
79
113
  * insert to DOM before user initially scrolls to them) */
80
114
  private initializedEmbeds;
81
- private handleToastClose;
82
115
  private elementsPendingErasure;
83
- flowChartCreator: FlowChartCreator;
84
- private flowChartNavigator;
116
+ private _initialized;
117
+ private readonly editorLifecycleEvents;
118
+ onEvent: AppEventBus<ExcalidrawImperativeAPIEventMap, typeof editorLifecycleEventBehavior>["on"];
119
+ private appStateObserver;
120
+ onStateChange: OnStateChange;
121
+ bucketFill: AppBucketFill;
122
+ flowchart: AppFlowchart;
123
+ cursor: AppCursor;
124
+ arrowText: AppArrowText;
125
+ viewport: AppViewport;
126
+ bindModeHandler: ReturnType<typeof setTimeout> | null;
127
+ private textWysiwygSubmitHandler;
85
128
  hitLinkElement?: NonDeletedExcalidrawElement;
86
129
  lastPointerDownEvent: React.PointerEvent<HTMLElement> | null;
87
130
  lastPointerUpEvent: React.PointerEvent<HTMLElement> | PointerEvent | null;
131
+ lastPointerUpIsDoubleClick: boolean;
88
132
  lastPointerMoveEvent: PointerEvent | null;
133
+ /** current frame pointer cords */
89
134
  lastPointerMoveCoords: {
90
135
  x: number;
91
136
  y: number;
92
137
  } | null;
93
- lastViewportPosition: {
138
+ private lastCompletedCanvasClicks;
139
+ /** previous frame pointer coords */
140
+ previousPointerMoveCoords: {
94
141
  x: number;
95
142
  y: number;
96
- };
97
- animationFrameHandler: AnimationFrameHandler;
143
+ } | null;
144
+ drawShape: AppDrawShape;
98
145
  laserTrails: LaserTrails;
99
146
  eraserTrail: EraserTrail;
100
147
  lassoTrail: LassoTrail;
148
+ cursorHints: CursorHints;
101
149
  onChangeEmitter: Emitter<[elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles]>;
102
150
  onPointerDownEmitter: Emitter<[activeTool: {
103
151
  lastActiveTool: import("../types").ActiveTool | null;
@@ -112,11 +160,7 @@ declare class App extends React.Component<AppProps, AppState> {
112
160
  x: number;
113
161
  y: number;
114
162
  }>;
115
- scrollbars: {
116
- isOverEither: boolean;
117
- isOverHorizontal: boolean;
118
- isOverVertical: boolean;
119
- };
163
+ scrollbars: ReturnType<typeof isOverScrollBars>;
120
164
  lastCoords: {
121
165
  x: number;
122
166
  y: number;
@@ -129,7 +173,7 @@ declare class App extends React.Component<AppProps, AppState> {
129
173
  x: number;
130
174
  y: number;
131
175
  };
132
- arrowDirection: "end" | "origin";
176
+ arrowDirection: "origin" | "end";
133
177
  center: {
134
178
  x: number;
135
179
  y: number;
@@ -156,14 +200,10 @@ declare class App extends React.Component<AppProps, AppState> {
156
200
  blockDragging: boolean;
157
201
  };
158
202
  eventListeners: {
159
- onMove: {
160
- (...args: any[]): void;
161
- flush(): void;
162
- cancel(): void;
163
- } | null;
164
- onUp: ((event: PointerEvent) => void) | null;
165
- onKeyDown: ((event: KeyboardEvent) => void) | null;
166
- onKeyUp: ((event: KeyboardEvent) => void) | null;
203
+ onMove: null | ReturnType<typeof import("@excalidraw/common").throttleRAF>;
204
+ onUp: null | ((event: PointerEvent) => void);
205
+ onKeyDown: null | ((event: KeyboardEvent) => void);
206
+ onKeyUp: null | ((event: KeyboardEvent) => void);
167
207
  };
168
208
  boxSelection: {
169
209
  hasOccurred: boolean;
@@ -182,11 +222,7 @@ declare class App extends React.Component<AppProps, AppState> {
182
222
  x: number;
183
223
  y: number;
184
224
  }>;
185
- scrollbars: {
186
- isOverEither: boolean;
187
- isOverHorizontal: boolean;
188
- isOverVertical: boolean;
189
- };
225
+ scrollbars: ReturnType<typeof isOverScrollBars>;
190
226
  lastCoords: {
191
227
  x: number;
192
228
  y: number;
@@ -199,7 +235,7 @@ declare class App extends React.Component<AppProps, AppState> {
199
235
  x: number;
200
236
  y: number;
201
237
  };
202
- arrowDirection: "end" | "origin";
238
+ arrowDirection: "origin" | "end";
203
239
  center: {
204
240
  x: number;
205
241
  y: number;
@@ -226,14 +262,10 @@ declare class App extends React.Component<AppProps, AppState> {
226
262
  blockDragging: boolean;
227
263
  };
228
264
  eventListeners: {
229
- onMove: {
230
- (...args: any[]): void;
231
- flush(): void;
232
- cancel(): void;
233
- } | null;
234
- onUp: ((event: PointerEvent) => void) | null;
235
- onKeyDown: ((event: KeyboardEvent) => void) | null;
236
- onKeyUp: ((event: KeyboardEvent) => void) | null;
265
+ onMove: null | ReturnType<typeof import("@excalidraw/common").throttleRAF>;
266
+ onUp: null | ((event: PointerEvent) => void);
267
+ onKeyDown: null | ((event: KeyboardEvent) => void);
268
+ onKeyUp: null | ((event: KeyboardEvent) => void);
237
269
  };
238
270
  boxSelection: {
239
271
  hasOccurred: boolean;
@@ -245,18 +277,95 @@ declare class App extends React.Component<AppProps, AppState> {
245
277
  }>]>;
246
278
  missingPointerEventCleanupEmitter: Emitter<[event: PointerEvent | null]>;
247
279
  onRemoveEventListenersEmitter: Emitter<[]>;
248
- defaultSelectionTool: "selection" | "lasso";
280
+ api: ExcalidrawImperativeAPI;
281
+ private createExcalidrawAPI;
249
282
  constructor(props: AppProps);
283
+ /**
284
+ * Whether the editor accepts user input (pointer, keyboard, wheel, touch,
285
+ * clipboard, drag&drop). When `false`, the editor is fully inert for the
286
+ * user, but remains controllable through the imperative API.
287
+ *
288
+ * All user-input entry points must consult this getter (directly or by
289
+ * not being attached/rendered at all).
290
+ */
291
+ isInteractionEnabled(props?: Pick<AppProps, "interaction">): boolean;
292
+ /**
293
+ * Whether element links render their link icon and are clickable.
294
+ * True when fully interactive, or when `interaction: { enabled: { links:
295
+ * true } }`
296
+ * (in which case clicking anywhere on a linked element opens the link,
297
+ * same as in view mode).
298
+ */
299
+ isLinksEnabled(props?: Pick<AppProps, "interaction">): boolean;
300
+ /**
301
+ * Whether canvas navigation — panning & zooming, view-mode style — is
302
+ * enabled. True when fully interactive, or when `interaction: { enabled:
303
+ * { navigation: true } }`. Respects `appState.scrollConstraints`.
304
+ */
305
+ isNavigationEnabled(props?: Pick<AppProps, "interaction">): boolean;
306
+ /**
307
+ * Whether embeddable & iframe elements are interactive (hover & click to
308
+ * activate, view-mode style). True when fully interactive, or when
309
+ * allowed via `interaction.enabled.embeds` / `.interactiveContent`.
310
+ */
311
+ isEmbedsEnabled(props?: Pick<AppProps, "interaction">): boolean;
312
+ /**
313
+ * Whether the browser's own zoom (ctrl/cmd + wheel, pinch, keyboard
314
+ * shortcuts) stays available over the non-interactive editor.
315
+ * Prevented by default.
316
+ */
317
+ isBrowserZoomEnabled(props?: Pick<AppProps, "interaction">): boolean;
318
+ /**
319
+ * Whether the tool can be activated & driven by user input. False when
320
+ * disabled via `UIOptions.tools`, or when the editor is non-interactive
321
+ * and the tool isn't kept user-driven via `interaction.enabled.tools`.
322
+ *
323
+ * (Once UI tool availability is split from input availability — e.g.
324
+ * `props.ui.tools` vs `interaction.disabled.tools` — the UI axis moves
325
+ * out into its own predicate.)
326
+ *
327
+ * We purposely widen the `tool` type so this helper can be called with
328
+ * any tool without having to type check it.
329
+ */
330
+ isToolSupported: <T extends ToolType | "custom">(tool: T, props?: Pick<AppProps, "interaction" | "UIOptions">) => boolean;
331
+ /**
332
+ * Whether the active tool is locked in place — via the tool lock
333
+ * (padlock / Q) or by being host-forced (`props.activeTool`). A locked
334
+ * tool doesn't revert to the selection tool after use, and elements drawn
335
+ * with it aren't selected. Forcing deliberately does not mutate
336
+ * `activeTool.locked`, which is the user's persisted padlock preference.
337
+ */
338
+ isToolLocked(): boolean;
339
+ /**
340
+ * Whether the active tool captures the primary pointer instead of the
341
+ * view-mode drag-to-pan — the laser always does; while non-interactive,
342
+ * any tool allowed via `interaction.enabled.tools` does. (Editing tools
343
+ * capture the pointer trivially since view mode implies they're not
344
+ * active; this predicate only matters where view-mode gates apply.)
345
+ */
346
+ isActiveToolPointerCapturing(): boolean;
347
+ /** Whether Excalidraw's full default UI is rendered. */
348
+ isDefaultUIEnabled(props?: Pick<AppProps, "ui">): boolean;
349
+ /** Whether an individual default UI control is rendered. */
350
+ isUIControlEnabled(control: keyof UIConfig["enabled"], props?: Pick<AppProps, "ui">): boolean;
250
351
  updateEditorAtom: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
251
352
  private onWindowMessage;
353
+ private handleSkipBindMode;
354
+ private resetDelayedBindMode;
355
+ private previousHoveredBindableElement;
356
+ private handleDelayedBindModeChange;
252
357
  private cacheEmbeddableRef;
253
358
  /**
254
359
  * Returns gridSize taking into account `gridModeEnabled`.
255
360
  * If disabled, returns null.
256
361
  */
257
362
  getEffectiveGridSize: () => NullableGridSize;
363
+ private getTextCreationGridPoint;
258
364
  private getHTMLIFrameElement;
259
- private handleEmbeddableCenterClick;
365
+ private handleIframeLikeElementHover;
366
+ /** @returns true if iframe-like element click handled */
367
+ private handleIframeLikeCenterClick;
368
+ private isDoubleClick;
260
369
  private isIframeLikeElementCenter;
261
370
  private updateEmbedValidationStatus;
262
371
  private updateEmbeddables;
@@ -269,11 +378,11 @@ declare class App extends React.Component<AppProps, AppState> {
269
378
  render(): import("react/jsx-runtime").JSX.Element;
270
379
  focusContainer: AppClassProperties["focusContainer"];
271
380
  getSceneElementsIncludingDeleted: () => readonly import("@excalidraw/element/types").OrderedExcalidrawElement[];
272
- getSceneElementsMapIncludingDeleted: () => Map<string, Ordered<ExcalidrawElement>> & import("@excalidraw/common/utility-types").MakeBrand<"SceneElementsMap">;
381
+ getSceneElementsMapIncludingDeleted: () => SceneElementsMap;
273
382
  getSceneElements: () => readonly Ordered<NonDeletedExcalidrawElement>[];
274
383
  onInsertElements: (elements: readonly ExcalidrawElement[]) => void;
275
384
  onExportImage: (type: keyof typeof EXPORT_IMAGE_TYPES, elements: ExportedElements, opts: {
276
- exportingFrame: ExcalidrawFrameLikeElement | null;
385
+ exportingFrame: NonDeleted<ExcalidrawFrameLikeElement> | null;
277
386
  }) => Promise<void>;
278
387
  private magicGenerations;
279
388
  private updateMagicGeneration;
@@ -289,9 +398,34 @@ declare class App extends React.Component<AppProps, AppState> {
289
398
  private openEyeDropper;
290
399
  dismissLinearEditor: () => void;
291
400
  syncActionResult: (actionResult: ActionResult) => void;
401
+ scheduleCapture: () => void;
292
402
  private onBlur;
293
403
  private onUnload;
294
404
  private disableEvent;
405
+ private preventBrowserZoomWheel;
406
+ private handleNavigationModeKeyDown;
407
+ /**
408
+ * PageUp/PageDown scroll the canvas by a page — vertically, or
409
+ * horizontally with shift. Respects `appState.scrollConstraints`
410
+ * (via `viewport.translate`).
411
+ */
412
+ private maybeHandlePageScrollKeyDown;
413
+ private preventBrowserZoomKeyDown;
414
+ /** Ends active input sessions before switching to a view-mode/non-interactive
415
+ * mode. */
416
+ private terminateActiveInteraction;
417
+ private handleInteractionStateChange;
418
+ /** whether the two values reference the same tool (incl. custom subtype) */
419
+ private isSameForcedTool;
420
+ /**
421
+ * Keeps `state.activeTool` synced to the host-controlled
422
+ * `props.activeTool`. `setActiveTool` refuses non-matching activations
423
+ * while forced (user input, API); this backstop covers the writers that
424
+ * bypass the funnel (`actionFinalize`/`actionDeselect`, `restore()` on
425
+ * scene load, ...) and re-applies the tool once it becomes activatable
426
+ * (e.g. `interaction` config changes).
427
+ */
428
+ private handleForcedToolChange;
295
429
  private resetHistory;
296
430
  private resetStore;
297
431
  /**
@@ -300,10 +434,11 @@ declare class App extends React.Component<AppProps, AppState> {
300
434
  */
301
435
  private resetScene;
302
436
  private initializeScene;
303
- private isMobileBreakpoint;
304
- private isTabletBreakpoint;
305
- private refreshViewportBreakpoints;
306
- private refreshEditorBreakpoints;
437
+ private getFormFactor;
438
+ refreshEditorInterface: () => void;
439
+ private reconcileStylesPanelMode;
440
+ /** TO BE USED LATER */
441
+ private setDesktopUIMode;
307
442
  private clearImageShapeCache;
308
443
  componentDidMount(): Promise<void>;
309
444
  componentWillUnmount(): void;
@@ -330,54 +465,19 @@ declare class App extends React.Component<AppProps, AppState> {
330
465
  clientY: number;
331
466
  } | "cursor" | "center";
332
467
  retainSeed?: boolean;
333
- fitToContent?: boolean;
468
+ fit?: SetViewportOptions["fit"];
469
+ preserveFrameChildrenOrder?: boolean;
334
470
  }) => void;
335
471
  private addElementsFromMixedContentPaste;
336
472
  private addTextFromPaste;
337
473
  setAppState: React.Component<any, AppState>["setState"];
338
474
  removePointer: (event: React.PointerEvent<HTMLElement> | PointerEvent) => void;
339
475
  toggleLock: (source?: "keyboard" | "ui") => void;
340
- updateFrameRendering: (opts: Partial<{
341
- enabled: boolean;
342
- name: boolean;
343
- outline: boolean;
344
- clip: boolean;
345
- }> | ((prevState: AppState["frameRendering"]) => Partial<AppState["frameRendering"]>)) => void;
476
+ updateFrameRendering: (opts: Partial<AppState["frameRendering"]> | ((prevState: AppState["frameRendering"]) => Partial<AppState["frameRendering"]>)) => void;
346
477
  togglePenMode: (force: boolean | null) => void;
347
- onHandToolToggle: () => void;
348
- /**
349
- * Zooms on canvas viewport center
350
- */
351
- zoomCanvas: (value: number) => void;
352
- private cancelInProgressAnimation;
353
- scrollToContent: (target?: string | ExcalidrawElement | readonly ExcalidrawElement[], opts?: ({
354
- fitToContent?: boolean;
355
- fitToViewport?: never;
356
- viewportZoomFactor?: number;
357
- animate?: boolean;
358
- duration?: number;
359
- } | {
360
- fitToContent?: never;
361
- fitToViewport?: boolean;
362
- /** when fitToViewport=true, how much screen should the content cover,
363
- * between 0.1 (10%) and 1 (100%)
364
- */
365
- viewportZoomFactor?: number;
366
- animate?: boolean;
367
- duration?: number;
368
- }) & {
369
- minZoom?: number;
370
- maxZoom?: number;
371
- canvasOffsets?: Offsets;
372
- }) => void;
478
+ revealIfHidden: (elements: NonDeletedExcalidrawElement[]) => void;
373
479
  private maybeUnfollowRemoteUser;
374
- /** use when changing scrollX/scrollY/zoom based on user interaction */
375
- private translateCanvas;
376
- setToast: (toast: {
377
- message: string;
378
- closable?: boolean;
379
- duration?: number;
380
- } | null) => void;
480
+ setToast: (toast: AppState["toast"]) => void;
381
481
  restoreFileFromShare: () => Promise<void>;
382
482
  /**
383
483
  * adds supplied files to existing files in the appState.
@@ -387,7 +487,7 @@ declare class App extends React.Component<AppProps, AppState> {
387
487
  private addMissingFiles;
388
488
  updateScene: <K extends keyof AppState>(sceneData: {
389
489
  elements?: SceneData["elements"];
390
- appState?: Pick<AppState, K> | null | undefined;
490
+ appState?: Pick<AppState, K> | null;
391
491
  collaborators?: SceneData["collaborators"];
392
492
  /**
393
493
  * Controls which updates should be captured by the `Store`. Captured updates are emmitted and listened to by other components, such as `History` for undo / redo purposes.
@@ -404,20 +504,20 @@ declare class App extends React.Component<AppProps, AppState> {
404
504
  }) => void;
405
505
  applyDeltas: (deltas: StoreDelta[], options?: ApplyToOptions) => [SceneElementsMap, AppState, boolean];
406
506
  mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, informMutation?: boolean) => TElement;
407
- private triggerRender;
507
+ triggerRender: (
508
+ /** force always re-renders canvas even if no change */
509
+ force?: boolean) => void;
408
510
  /**
409
511
  * @returns whether the menu was toggled on or off
410
512
  */
411
513
  toggleSidebar: ({ name, tab, force, }: {
412
514
  name: SidebarName | null;
413
- tab?: string | undefined;
414
- force?: boolean | undefined;
515
+ tab?: SidebarTabName;
516
+ force?: boolean;
415
517
  }) => boolean;
416
518
  private updateCurrentCursorPosition;
417
- getEditorUIOffsets: () => Offsets;
418
519
  private onKeyDown;
419
520
  private onKeyUp;
420
- private isToolSupported;
421
521
  setActiveTool: (tool: ({
422
522
  type: ToolType;
423
523
  } | {
@@ -426,10 +526,18 @@ declare class App extends React.Component<AppProps, AppState> {
426
526
  }) & {
427
527
  locked?: boolean;
428
528
  fromSelection?: boolean;
429
- }, keepSelection?: boolean) => void;
529
+ }, opts?: {
530
+ keepSelection?: boolean;
531
+ /**
532
+ * When `true`, re-activating an already-active toggle tool (see
533
+ * `TOGGLE_TOOLS`) switches back to the previously active tool.
534
+ * Activation is idempotent by default; toggle tools always record the
535
+ * previously active tool regardless (so ESC and the next `toggle`
536
+ * activation can switch back to it).
537
+ */
538
+ toggle?: boolean;
539
+ }) => void;
430
540
  setOpenDialog: (dialogType: AppState["openDialog"]) => void;
431
- private setCursor;
432
- private resetCursor;
433
541
  /**
434
542
  * returns whether user is making a gesture with >= 2 fingers (points)
435
543
  * on o touch screen (not on a trackpad). Currently only relates to Darwin
@@ -443,19 +551,229 @@ declare class App extends React.Component<AppProps, AppState> {
443
551
  private onGestureEnd;
444
552
  private handleTextWysiwyg;
445
553
  private deselectElements;
446
- private getTextElementAtPosition;
447
- private getElementAtPosition;
554
+ private getSelectedTextElement;
555
+ private getSelectedTextEditingContainerAtPosition;
556
+ getTextElementAtPosition(x: number, y: number): NonDeleted<ExcalidrawTextElement> | null;
557
+ private isHittingTextAutoResizeHandle;
558
+ private handleTextAutoResizeHandlePointerDown;
559
+ getElementAtPosition(x: number, y: number, opts?: ({
560
+ includeBoundTextElement?: boolean;
561
+ includeLockedElements?: boolean;
562
+ } | {
563
+ allHitElements: NonDeleted<ExcalidrawElement>[];
564
+ }) & {
565
+ preferSelected?: boolean;
566
+ }): NonDeleted<ExcalidrawElement> | null;
448
567
  private getElementsAtPosition;
449
568
  getElementHitThreshold(element: ExcalidrawElement): number;
450
569
  private hitElement;
451
- private getTextBindableContainerAtPosition;
570
+ getTextBindableContainerAtPosition(x: number, y: number): (Readonly<{
571
+ id: string;
572
+ x: number;
573
+ y: number;
574
+ strokeColor: string;
575
+ backgroundColor: string;
576
+ fillStyle: import("@excalidraw/element/types").FillStyle;
577
+ strokeWidth: number;
578
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
579
+ roundness: null | {
580
+ type: import("@excalidraw/element/types").RoundnessType;
581
+ value?: number;
582
+ };
583
+ roughness: number;
584
+ opacity: number;
585
+ width: number;
586
+ height: number;
587
+ angle: Radians;
588
+ seed: number;
589
+ version: number;
590
+ versionNonce: number;
591
+ index: import("@excalidraw/element/types").FractionalIndex | null;
592
+ isDeleted: boolean;
593
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
594
+ frameId: string | null;
595
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
596
+ updated: number;
597
+ link: string | null;
598
+ locked: boolean;
599
+ customData?: Record<string, any>;
600
+ }> & {
601
+ type: "rectangle";
602
+ } & {
603
+ isDeleted: false;
604
+ }) | (Readonly<{
605
+ id: string;
606
+ x: number;
607
+ y: number;
608
+ strokeColor: string;
609
+ backgroundColor: string;
610
+ fillStyle: import("@excalidraw/element/types").FillStyle;
611
+ strokeWidth: number;
612
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
613
+ roundness: null | {
614
+ type: import("@excalidraw/element/types").RoundnessType;
615
+ value?: number;
616
+ };
617
+ roughness: number;
618
+ opacity: number;
619
+ width: number;
620
+ height: number;
621
+ angle: Radians;
622
+ seed: number;
623
+ version: number;
624
+ versionNonce: number;
625
+ index: import("@excalidraw/element/types").FractionalIndex | null;
626
+ isDeleted: boolean;
627
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
628
+ frameId: string | null;
629
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
630
+ updated: number;
631
+ link: string | null;
632
+ locked: boolean;
633
+ customData?: Record<string, any>;
634
+ }> & {
635
+ type: "diamond";
636
+ } & {
637
+ isDeleted: false;
638
+ }) | (Readonly<{
639
+ id: string;
640
+ x: number;
641
+ y: number;
642
+ strokeColor: string;
643
+ backgroundColor: string;
644
+ fillStyle: import("@excalidraw/element/types").FillStyle;
645
+ strokeWidth: number;
646
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
647
+ roundness: null | {
648
+ type: import("@excalidraw/element/types").RoundnessType;
649
+ value?: number;
650
+ };
651
+ roughness: number;
652
+ opacity: number;
653
+ width: number;
654
+ height: number;
655
+ angle: Radians;
656
+ seed: number;
657
+ version: number;
658
+ versionNonce: number;
659
+ index: import("@excalidraw/element/types").FractionalIndex | null;
660
+ isDeleted: boolean;
661
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
662
+ frameId: string | null;
663
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
664
+ updated: number;
665
+ link: string | null;
666
+ locked: boolean;
667
+ customData?: Record<string, any>;
668
+ }> & {
669
+ type: "ellipse";
670
+ } & {
671
+ isDeleted: false;
672
+ }) | (Readonly<{
673
+ id: string;
674
+ x: number;
675
+ y: number;
676
+ strokeColor: string;
677
+ backgroundColor: string;
678
+ fillStyle: import("@excalidraw/element/types").FillStyle;
679
+ strokeWidth: number;
680
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
681
+ roundness: null | {
682
+ type: import("@excalidraw/element/types").RoundnessType;
683
+ value?: number;
684
+ };
685
+ roughness: number;
686
+ opacity: number;
687
+ width: number;
688
+ height: number;
689
+ angle: Radians;
690
+ seed: number;
691
+ version: number;
692
+ versionNonce: number;
693
+ index: import("@excalidraw/element/types").FractionalIndex | null;
694
+ isDeleted: boolean;
695
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
696
+ frameId: string | null;
697
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
698
+ updated: number;
699
+ link: string | null;
700
+ locked: boolean;
701
+ customData?: Record<string, any>;
702
+ }> & Readonly<{
703
+ type: "line" | "arrow";
704
+ points: readonly LocalPoint[];
705
+ startBinding: import("@excalidraw/element/types").FixedPointBinding | null;
706
+ endBinding: import("@excalidraw/element/types").FixedPointBinding | null;
707
+ startArrowhead: import("@excalidraw/element/types").Arrowhead | null;
708
+ endArrowhead: import("@excalidraw/element/types").Arrowhead | null;
709
+ }> & Readonly<{
710
+ type: "arrow";
711
+ elbowed: boolean;
712
+ }> & {
713
+ isDeleted: false;
714
+ }) | null;
715
+ /**
716
+ * Whether a text element's content is still being authored.
717
+ *
718
+ * Creating a text reverts the tool to selection during pointerdown, so the
719
+ * pointerup that follows looks like an ordinary canvas click and would
720
+ * capture the still-empty element as a history entry of its own. Undo would
721
+ * then rewind only the typing, restoring an invisible, zero-content element
722
+ * (and, for an endpoint label, leaving the arrow bound to it) rather than
723
+ * removing it. The editor's own submit captures the finished text instead,
724
+ * so the whole create-and-type lands in a single entry.
725
+ */
726
+ private isEditingTextContent;
452
727
  private startTextEditing;
453
728
  private startImageCropping;
454
729
  private finishImageCropping;
730
+ private shouldHandleBrowserCanvasDoubleClick;
455
731
  private handleCanvasDoubleClick;
732
+ private handleCanvasClick;
456
733
  private getElementLinkAtPosition;
457
- private redirectToLink;
458
- private getTopLayerFrameAtSceneCoords;
734
+ private handleElementLinkClick;
735
+ /**
736
+ * Applies (or clears) the element-link hover affordances — pointer cursor
737
+ * and tooltip — based on the current `hitLinkElement`. Returns whether a
738
+ * link is being hovered.
739
+ */
740
+ private applyElementLinkHoverAffordance;
741
+ /**
742
+ * On touchscreens (where no hover precedes the tap) re-derives
743
+ * `hitLinkElement`, then opens the hit element link, if any.
744
+ * Returns whether a link click was handled.
745
+ */
746
+ private maybeHandleElementLinkClick;
747
+ /**
748
+ * Restricted pointer handling for the non-interactive editor with links
749
+ * and/or embeds allowed (`interaction.enabled.links` / `.embeds` /
750
+ * `.interactiveContent`) — runs only the element-link & embed concerns
751
+ * (shared with the full pointer handlers above) so they behave like in
752
+ * view mode without the rest of the canvas pointer machinery.
753
+ */
754
+ private handleInteractiveContentPointerMove;
755
+ private handleInteractiveContentPointerUp;
756
+ /**
757
+ * finds candidate frame under cursor (when dragging frame children/elements
758
+ * inside frames)
759
+ */
760
+ getTopLayerFrameAtSceneCoords: (
761
+ /**
762
+ * should be already grid aligned (basically should be what the call site
763
+ * sets the element's coords to, if applicable)
764
+ */
765
+ sceneCoords: {
766
+ x: number;
767
+ y: number;
768
+ }, opts?: {
769
+ /** to exclude selected elements when dragging, etc. */
770
+ excludeElementIds?: AppState["selectedElementIds"];
771
+ currentFrameId?: ExcalidrawElement["frameId"];
772
+ }) => NonDeleted<ExcalidrawFrameLikeElement> | null;
773
+ private updateFrameToHighlight;
774
+ private maybeUpdateFrameToHighlightOnPointerMove;
775
+ insertNewElements: (elements: readonly ExcalidrawElement[]) => void;
776
+ insertNewElement: (element: ExcalidrawElement) => void;
459
777
  private handleCanvasPointerMove;
460
778
  private handleEraser;
461
779
  private handleTouchMove;
@@ -472,6 +790,11 @@ declare class App extends React.Component<AppProps, AppState> {
472
790
  private maybeCleanupAfterMissingPointerUp;
473
791
  handleCanvasPanUsingWheelOrSpaceDrag: (event: React.PointerEvent<HTMLElement> | MouseEvent) => boolean;
474
792
  private updateGestureOnPointerDown;
793
+ /**
794
+ * Tracks the pointer within the ongoing multi-touch gesture and applies
795
+ * the two-finger pinch zoom/pan, if any.
796
+ */
797
+ private updateMultiTouchGesture;
475
798
  private initialPointerDownState;
476
799
  private handleDraggingScrollBar;
477
800
  private clearSelectionIfNotUsingSelection;
@@ -497,6 +820,7 @@ declare class App extends React.Component<AppProps, AppState> {
497
820
  private newImagePlaceholder;
498
821
  private handleLinearElementOnPointerDown;
499
822
  private getCurrentItemRoundness;
823
+ private getCurrentItemStrokeWidth;
500
824
  private createGenericElementOnPointerDown;
501
825
  private createFrameElementOnPointerDown;
502
826
  private maybeCacheReferenceSnapPoints;
@@ -525,25 +849,29 @@ declare class App extends React.Component<AppProps, AppState> {
525
849
  /** generally you should use `addNewImagesToImageCache()` directly if you need
526
850
  * to render new images. This is just a failsafe */
527
851
  private scheduleImageRefresh;
528
- private updateBindingEnabledOnPointerMove;
529
- private maybeSuggestBindingAtCursor;
530
852
  private clearSelection;
531
853
  private handleInteractiveCanvasRef;
532
854
  private insertImages;
533
855
  private handleAppOnDrop;
534
- loadFileToCanvas: (file: File, fileHandle: FileSystemHandle | null) => Promise<void>;
856
+ loadFileToCanvas: (file: File, fileHandle: FileSystemFileHandle | null) => Promise<void>;
535
857
  private handleCanvasContextMenu;
536
858
  private maybeDragNewGenericElement;
537
859
  private maybeHandleCrop;
538
860
  private maybeHandleResize;
539
861
  private getContextMenuItems;
540
862
  private handleWheel;
541
- private getTextWysiwygSnappedToCenterPosition;
863
+ getTextWysiwygSnappedToCenterPosition(x: number, y: number, appState: AppState, container?: ExcalidrawTextContainer | null): {
864
+ viewportX: number;
865
+ viewportY: number;
866
+ elementCenterX: number;
867
+ elementCenterY: number;
868
+ } | undefined;
542
869
  private savePointer;
543
870
  private resetShouldCacheIgnoreZoomDebounced;
544
871
  private updateDOMRect;
545
872
  refresh: () => void;
546
873
  private getCanvasOffsets;
874
+ watchState: () => void;
547
875
  private updateLanguage;
548
876
  }
549
877
  declare global {
@@ -553,6 +881,7 @@ declare global {
553
881
  elements: readonly ExcalidrawElement[];
554
882
  state: AppState;
555
883
  setState: React.Component<any, AppState>["setState"];
884
+ watchState: (prev: any, next: any) => void | undefined;
556
885
  app: InstanceType<typeof App>;
557
886
  history: History;
558
887
  store: Store;