@excalidraw/math 0.18.0-1b287a8ba → 0.18.0-214cd6e

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 (346) hide show
  1. package/dist/dev/index.js +355 -161
  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 +73 -39
  8. package/dist/types/common/src/constants.d.ts +50 -33
  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 -77
  16. package/dist/types/common/src/versionedSnapshotStore.d.ts +17 -0
  17. package/dist/types/element/src/Scene.d.ts +17 -9
  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 +26 -19
  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/delta.d.ts +16 -4
  30. package/dist/types/element/src/distribute.d.ts +3 -2
  31. package/dist/types/element/src/dragElements.d.ts +30 -3
  32. package/dist/types/element/src/duplicate.d.ts +7 -6
  33. package/dist/types/element/src/elbowArrow.d.ts +2 -0
  34. package/dist/types/element/src/embeddable.d.ts +2 -2
  35. package/dist/types/element/src/flowchart.d.ts +7 -7
  36. package/dist/types/element/src/fractionalIndex.d.ts +4 -4
  37. package/dist/types/element/src/frame.d.ts +14 -9
  38. package/dist/types/element/src/groups.d.ts +9 -9
  39. package/dist/types/element/src/heading.d.ts +2 -1
  40. package/dist/types/element/src/image.d.ts +1 -11
  41. package/dist/types/element/src/index.d.ts +9 -4
  42. package/dist/types/element/src/linearElementEditor.d.ts +50 -31
  43. package/dist/types/element/src/mutateElement.d.ts +5 -1
  44. package/dist/types/element/src/newElement.d.ts +21 -6
  45. package/dist/types/element/src/positionElementsOnGrid.d.ts +2 -0
  46. package/dist/types/element/src/renderElement.d.ts +4 -10
  47. package/dist/types/element/src/resizeElements.d.ts +12 -12
  48. package/dist/types/element/src/resizeTest.d.ts +6 -5
  49. package/dist/types/element/src/selection.d.ts +14 -14
  50. package/dist/types/element/src/shape.d.ts +21 -8
  51. package/dist/types/element/src/sortElements.d.ts +10 -0
  52. package/dist/types/element/src/store.d.ts +6 -1
  53. package/dist/types/element/src/textElement.d.ts +15 -11
  54. package/dist/types/element/src/textMeasurements.d.ts +1 -3
  55. package/dist/types/element/src/textWrapping.d.ts +26 -0
  56. package/dist/types/{excalidraw/data → element/src}/transform.d.ts +3 -3
  57. package/dist/types/element/src/transformHandles.d.ts +8 -27
  58. package/dist/types/element/src/typeChecks.d.ts +29 -31
  59. package/dist/types/element/src/types.d.ts +27 -14
  60. package/dist/types/element/src/utils.d.ts +15 -6
  61. package/dist/types/element/src/zindex.d.ts +7 -1
  62. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +206 -222
  63. package/dist/types/excalidraw/actions/actionAlign.d.ts +12 -13
  64. package/dist/types/excalidraw/actions/actionBoundText.d.ts +122 -133
  65. package/dist/types/excalidraw/actions/actionCanvas.d.ts +446 -1576
  66. package/dist/types/excalidraw/actions/actionClipboard.d.ts +149 -904
  67. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +59 -65
  68. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +195 -214
  69. package/dist/types/excalidraw/actions/actionDeselect.d.ts +165 -0
  70. package/dist/types/excalidraw/actions/actionDistribute.d.ts +4 -6
  71. package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +3 -4
  72. package/dist/types/excalidraw/actions/actionElementLink.d.ts +66 -78
  73. package/dist/types/excalidraw/actions/actionElementLock.d.ts +121 -132
  74. package/dist/types/excalidraw/actions/actionExport.d.ts +200 -1423
  75. package/dist/types/excalidraw/actions/actionFinalize.d.ts +11 -395
  76. package/dist/types/excalidraw/actions/actionFlip.d.ts +2 -3
  77. package/dist/types/excalidraw/actions/actionFrame.d.ts +269 -508
  78. package/dist/types/excalidraw/actions/actionGroup.d.ts +132 -151
  79. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +181 -191
  80. package/dist/types/excalidraw/actions/actionLink.d.ts +72 -78
  81. package/dist/types/excalidraw/actions/actionMenu.d.ts +61 -441
  82. package/dist/types/excalidraw/actions/actionNavigate.d.ts +18 -361
  83. package/dist/types/excalidraw/actions/actionProperties.d.ts +204 -2546
  84. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +66 -76
  85. package/dist/types/excalidraw/actions/actionStyles.d.ts +59 -64
  86. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +4 -4
  87. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +181 -0
  88. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +74 -81
  89. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +181 -0
  90. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +73 -79
  91. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +62 -75
  92. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +2 -2
  93. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +72 -78
  94. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +73 -79
  95. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +73 -79
  96. package/dist/types/excalidraw/actions/actionZindex.d.ts +8 -9
  97. package/dist/types/excalidraw/actions/index.d.ts +5 -3
  98. package/dist/types/excalidraw/actions/manager.d.ts +1 -0
  99. package/dist/types/excalidraw/actions/register.d.ts +2 -2
  100. package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
  101. package/dist/types/excalidraw/actions/types.d.ts +11 -7
  102. package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
  103. package/dist/types/excalidraw/appState.d.ts +39 -25
  104. package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -0
  105. package/dist/types/excalidraw/charts/charts.constants.d.ts +48 -0
  106. package/dist/types/excalidraw/charts/charts.helpers.d.ts +32 -0
  107. package/dist/types/excalidraw/charts/charts.line.d.ts +2 -0
  108. package/dist/types/excalidraw/charts/charts.parse.d.ts +10 -0
  109. package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -0
  110. package/dist/types/excalidraw/charts/charts.types.d.ts +18 -0
  111. package/dist/types/excalidraw/charts/index.d.ts +7 -0
  112. package/dist/types/excalidraw/clipboard.d.ts +57 -19
  113. package/dist/types/excalidraw/components/Actions.d.ts +32 -14
  114. package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
  115. package/dist/types/excalidraw/components/App.arrowText.d.ts +104 -0
  116. package/dist/types/excalidraw/components/App.bucketFill.d.ts +48 -0
  117. package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
  118. package/dist/types/excalidraw/components/App.d.ts +480 -125
  119. package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
  120. package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
  121. package/dist/types/excalidraw/components/App.viewport.d.ts +73 -0
  122. package/dist/types/excalidraw/components/AppStateObserver.d.ts +37 -0
  123. package/dist/types/excalidraw/components/Card.d.ts +1 -3
  124. package/dist/types/excalidraw/components/ColorPicker/ColorInput.d.ts +2 -4
  125. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +9 -4
  126. package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
  127. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +5 -1
  128. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +10 -2
  129. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +5 -2
  130. package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
  131. package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -2
  132. package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
  133. package/dist/types/excalidraw/components/ColorPicker/topPicksDnD.d.ts +31 -0
  134. package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
  135. package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
  136. package/dist/types/excalidraw/components/CommandPalette/types.d.ts +2 -4
  137. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +4 -4
  138. package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
  139. package/dist/types/excalidraw/components/DarkModeToggle.d.ts +1 -1
  140. package/dist/types/excalidraw/components/DefaultSidebar.d.ts +9 -13
  141. package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +1 -1
  142. package/dist/types/excalidraw/components/Ellipsify.d.ts +1 -2
  143. package/dist/types/excalidraw/components/ErrorDialog.d.ts +1 -1
  144. package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -2
  145. package/dist/types/excalidraw/components/FilledButton.d.ts +2 -1
  146. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +2 -1
  147. package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +3 -1
  148. package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +0 -1
  149. package/dist/types/excalidraw/components/HelpDialog.d.ts +1 -1
  150. package/dist/types/excalidraw/components/HintViewer.d.ts +4 -3
  151. package/dist/types/excalidraw/components/{ToolButton.d.ts → IconButton.d.ts} +16 -19
  152. package/dist/types/excalidraw/components/IconPicker.d.ts +14 -9
  153. package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
  154. package/dist/types/excalidraw/components/Island.d.ts +7 -0
  155. package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
  156. package/dist/types/excalidraw/components/LayerUI.d.ts +6 -2
  157. package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
  158. package/dist/types/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  159. package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +1 -2
  160. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +1 -1
  161. package/dist/types/excalidraw/components/LibraryUnit.d.ts +2 -3
  162. package/dist/types/excalidraw/components/LoadingMessage.d.ts +0 -1
  163. package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
  164. package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
  165. package/dist/types/excalidraw/components/MobileMenu.d.ts +5 -7
  166. package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
  167. package/dist/types/excalidraw/components/Modal.d.ts +0 -1
  168. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +1 -1
  169. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  170. package/dist/types/excalidraw/components/PasteChartDialog.d.ts +4 -5
  171. package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
  172. package/dist/types/excalidraw/components/Popover.d.ts +2 -3
  173. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +2 -1
  174. package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
  175. package/dist/types/excalidraw/components/RadioGroup.d.ts +0 -1
  176. package/dist/types/excalidraw/components/RadioSelection.d.ts +4 -4
  177. package/dist/types/excalidraw/components/Range.d.ts +10 -4
  178. package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
  179. package/dist/types/excalidraw/components/ScrollableList.d.ts +0 -1
  180. package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
  181. package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +16 -22
  182. package/dist/types/excalidraw/components/Sidebar/SidebarHeader.d.ts +1 -1
  183. package/dist/types/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -2
  184. package/dist/types/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -2
  185. package/dist/types/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +1 -2
  186. package/dist/types/excalidraw/components/Sidebar/SidebarTabs.d.ts +1 -2
  187. package/dist/types/excalidraw/components/Spinner.d.ts +4 -4
  188. package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
  189. package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +0 -1
  190. package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +0 -1
  191. package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
  192. package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -3
  193. package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
  194. package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
  195. package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
  196. package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
  197. package/dist/types/excalidraw/components/Stats/index.d.ts +7 -8
  198. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  199. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatHistoryMenu.d.ts +15 -0
  200. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatInterface.d.ts +23 -0
  201. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatMessage.d.ts +14 -0
  202. package/dist/types/excalidraw/components/TTDDialog/Chat/TTDChatPanel.d.ts +27 -0
  203. package/dist/types/excalidraw/components/TTDDialog/Chat/index.d.ts +3 -0
  204. package/dist/types/excalidraw/components/TTDDialog/Chat/useChatAgent.d.ts +8 -0
  205. package/dist/types/excalidraw/components/TTDDialog/CodeMirrorEditor.d.ts +11 -0
  206. package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +3 -2
  207. package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +13 -0
  208. package/dist/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +12 -29
  209. package/dist/types/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +3 -3
  210. package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +5 -2
  211. package/dist/types/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +13 -9
  212. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +1 -2
  213. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +1 -2
  214. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +1 -2
  215. package/dist/types/excalidraw/components/TTDDialog/TTDPreviewPanel.d.ts +9 -0
  216. package/dist/types/excalidraw/components/TTDDialog/TTDWelcomeMessage.d.ts +1 -0
  217. package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +9 -0
  218. package/dist/types/excalidraw/components/TTDDialog/common.d.ts +16 -16
  219. package/dist/types/excalidraw/components/TTDDialog/hooks/useChatManagement.d.ts +13 -0
  220. package/dist/types/excalidraw/components/TTDDialog/hooks/useMermaidRenderer.d.ts +14 -0
  221. package/dist/types/excalidraw/components/TTDDialog/hooks/useTextGeneration.d.ts +7 -0
  222. package/dist/types/excalidraw/components/TTDDialog/mermaid-lang-lite.d.ts +2 -0
  223. package/dist/types/excalidraw/components/TTDDialog/types.d.ts +95 -0
  224. package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +22 -0
  225. package/dist/types/excalidraw/components/TTDDialog/utils/chat.d.ts +10 -0
  226. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidAutoFix.d.ts +1 -0
  227. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +10 -0
  228. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidValidation.d.ts +1 -0
  229. package/dist/types/excalidraw/components/TextField.d.ts +1 -0
  230. package/dist/types/excalidraw/components/Toast.d.ts +11 -7
  231. package/dist/types/excalidraw/components/ToolPopover.d.ts +22 -0
  232. package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
  233. package/dist/types/excalidraw/components/Tools.d.ts +146 -0
  234. package/dist/types/excalidraw/components/Trans.d.ts +2 -2
  235. package/dist/types/excalidraw/components/UserList.d.ts +3 -2
  236. package/dist/types/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.d.ts +11 -0
  237. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +10 -4
  238. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +1 -0
  239. package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
  240. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +47 -35
  241. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +7 -5
  242. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +3 -3
  243. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +13 -22
  244. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCheckbox.d.ts +5 -0
  245. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +5 -4
  246. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -2
  247. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +2 -2
  248. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +6 -6
  249. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSub.d.ts +23 -0
  250. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubContent.d.ts +8 -0
  251. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubTrigger.d.ts +12 -0
  252. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +3 -4
  253. package/dist/types/excalidraw/components/dropdownMenu/common.d.ts +2 -2
  254. package/dist/types/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +2 -0
  255. package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
  256. package/dist/types/excalidraw/components/hoc/withInternalFallback.d.ts +1 -1
  257. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  258. package/dist/types/excalidraw/components/icons.d.ts +55 -22
  259. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +24 -3
  260. package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +39 -35
  261. package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
  262. package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
  263. package/dist/types/excalidraw/data/blob.d.ts +345 -12
  264. package/dist/types/excalidraw/data/encode.d.ts +4 -4
  265. package/dist/types/excalidraw/data/encryption.d.ts +5 -5
  266. package/dist/types/excalidraw/data/filesystem.d.ts +5 -7
  267. package/dist/types/excalidraw/data/index.d.ts +8 -9
  268. package/dist/types/excalidraw/data/json.d.ts +178 -3
  269. package/dist/types/excalidraw/data/library.d.ts +25 -10
  270. package/dist/types/excalidraw/data/resave.d.ts +7 -2
  271. package/dist/types/excalidraw/data/restore.d.ts +27 -7
  272. package/dist/types/excalidraw/data/types.d.ts +4 -1
  273. package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
  274. package/dist/types/excalidraw/editor-jotai.d.ts +11 -11
  275. package/dist/types/excalidraw/eraser/index.d.ts +2 -3
  276. package/dist/types/excalidraw/errors.d.ts +14 -0
  277. package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
  278. package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
  279. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +2 -2
  280. package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +4 -3
  281. package/dist/types/excalidraw/hooks/useScrollPosition.d.ts +1 -2
  282. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
  283. package/dist/types/excalidraw/i18n.d.ts +2 -2
  284. package/dist/types/excalidraw/{laser-trails.d.ts → laserTrails.d.ts} +5 -7
  285. package/dist/types/excalidraw/lasso/index.d.ts +2 -3
  286. package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
  287. package/dist/types/excalidraw/renderer/animation.d.ts +16 -0
  288. package/dist/types/excalidraw/renderer/helpers.d.ts +6 -8
  289. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +7 -15
  290. package/dist/types/excalidraw/renderer/staticScene.d.ts +4 -1
  291. package/dist/types/excalidraw/scene/Renderer.d.ts +429 -18
  292. package/dist/types/excalidraw/scene/export.d.ts +4 -4
  293. package/dist/types/excalidraw/scene/index.d.ts +2 -2
  294. package/dist/types/excalidraw/scene/types.d.ts +26 -8
  295. package/dist/types/excalidraw/shortcut.d.ts +1 -0
  296. package/dist/types/excalidraw/snapping.d.ts +12 -12
  297. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-bindings.d.ts +1 -1
  298. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-loader.d.ts +1 -1
  299. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-wasm.d.ts +1 -1
  300. package/dist/types/excalidraw/subset/woff2/woff2-loader.d.ts +2 -2
  301. package/dist/types/excalidraw/subset/woff2/woff2-wasm.d.ts +1 -1
  302. package/dist/types/excalidraw/textAutoResizeHandle.d.ts +15 -0
  303. package/dist/types/excalidraw/types.d.ts +559 -58
  304. package/dist/types/excalidraw/viewport.d.ts +275 -0
  305. package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +8 -5
  306. package/dist/types/fractional-indexing/src/index.d.ts +29 -0
  307. package/dist/types/laser-pointer/src/index.d.ts +2 -0
  308. package/dist/types/laser-pointer/src/math.d.ts +16 -0
  309. package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
  310. package/dist/types/laser-pointer/src/state.d.ts +36 -0
  311. package/dist/types/math/src/constants.d.ts +0 -1
  312. package/dist/types/math/src/curve.d.ts +23 -13
  313. package/dist/types/math/src/index.d.ts +1 -0
  314. package/dist/types/math/src/pca.d.ts +79 -0
  315. package/dist/types/math/src/point.d.ts +8 -2
  316. package/dist/types/math/src/polygon.d.ts +26 -2
  317. package/dist/types/math/src/range.d.ts +1 -3
  318. package/dist/types/math/src/segment.d.ts +10 -3
  319. package/dist/types/math/src/types.d.ts +25 -1
  320. package/dist/types/utils/src/export.d.ts +8 -8
  321. package/dist/types/utils/src/index.d.ts +1 -2
  322. package/dist/types/utils/src/shape.d.ts +6 -6
  323. package/package.json +2 -2
  324. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +0 -186
  325. package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
  326. package/dist/types/excalidraw/charts.d.ts +0 -27
  327. package/dist/types/excalidraw/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +0 -4
  328. package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +0 -16
  329. package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
  330. package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
  331. package/dist/types/excalidraw/components/InitializeApp.d.ts +0 -10
  332. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +0 -9
  333. package/dist/types/excalidraw/components/footer/FooterCenter.d.ts +0 -8
  334. package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -10
  335. package/dist/types/excalidraw/components/shapes.d.ts +0 -62
  336. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -58
  337. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +0 -19
  338. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +0 -85
  339. package/dist/types/excalidraw/cursor.d.ts +0 -5
  340. package/dist/types/excalidraw/data/reconcile.d.ts +0 -6
  341. package/dist/types/excalidraw/index.d.ts +0 -47
  342. package/dist/types/excalidraw/polyfill.d.ts +0 -2
  343. package/dist/types/excalidraw/scene/scroll.d.ts +0 -23
  344. package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
  345. package/dist/types/utils/src/bbox.d.ts +0 -9
  346. package/dist/types/utils/src/withinBounds.d.ts +0 -19
@@ -1,23 +1,24 @@
1
- import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES } from "@excalidraw/common";
2
- import type { SuggestedBinding } from "@excalidraw/element";
1
+ import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES, EditorInterface, StrokeWidthKey } from "@excalidraw/common";
3
2
  import type { LinearElementEditor } from "@excalidraw/element";
4
3
  import type { MaybeTransformHandleType } from "@excalidraw/element";
5
- import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, FileId, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement } from "@excalidraw/element/types";
4
+ import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, ExcalidrawArrowElement, Arrowhead, FontFamilyValues, FileId, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement, BindMode, ExcalidrawTextElement, StrokeVariability } from "@excalidraw/element/types";
6
5
  import type { Merge, MaybePromise, ValueOf, MakeBrand } from "@excalidraw/common/utility-types";
7
6
  import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement } from "@excalidraw/element";
7
+ import type { GlobalPoint } from "@excalidraw/math";
8
8
  import type { Action } from "./actions/types";
9
9
  import type { Spreadsheet } from "./charts";
10
10
  import type { ClipboardData } from "./clipboard";
11
11
  import type App from "./components/App";
12
12
  import type Library from "./data/library";
13
- import type { FileSystemHandle } from "./data/filesystem";
14
13
  import type { ContextMenuItems } from "./components/ContextMenu";
15
14
  import type { SnapLine } from "./snapping";
16
15
  import type { ImportedDataState } from "./data/types";
16
+ import type { SetViewportOptions } from "./viewport";
17
17
  import type { Language } from "./i18n";
18
18
  import type { isOverScrollBars } from "./scene/scrollbars";
19
19
  import type React from "react";
20
20
  import type { JSX } from "react";
21
+ export type { App };
21
22
  export type SocketId = string & {
22
23
  _brand: "SocketId";
23
24
  };
@@ -84,7 +85,7 @@ export type BinaryFileData = {
84
85
  };
85
86
  export type BinaryFileMetadata = Omit<BinaryFileData, "dataURL">;
86
87
  export type BinaryFiles = Record<ExcalidrawElement["id"], BinaryFileData>;
87
- export type ToolType = "selection" | "lasso" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser";
88
+ export type ToolType = "selection" | "lasso" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser" | "autoshape" | "bucketfill";
88
89
  export type ElementOrToolType = ExcalidrawElementType | ToolType | "custom";
89
90
  export type ActiveTool = {
90
91
  type: ToolType;
@@ -125,17 +126,22 @@ export type StaticCanvasAppState = Readonly<_CommonCanvasAppState & {
125
126
  frameRendering: AppState["frameRendering"];
126
127
  currentHoveredFontFamily: AppState["currentHoveredFontFamily"];
127
128
  hoveredElementIds: AppState["hoveredElementIds"];
129
+ suggestedBinding: AppState["suggestedBinding"];
128
130
  croppingElementId: AppState["croppingElementId"];
129
131
  }>;
130
132
  export type InteractiveCanvasAppState = Readonly<_CommonCanvasAppState & {
133
+ activeTool: AppState["activeTool"];
131
134
  activeEmbeddable: AppState["activeEmbeddable"];
132
- editingLinearElement: AppState["editingLinearElement"];
133
135
  selectionElement: AppState["selectionElement"];
134
136
  selectedGroupIds: AppState["selectedGroupIds"];
135
137
  selectedLinearElement: AppState["selectedLinearElement"];
136
138
  multiElement: AppState["multiElement"];
139
+ newElement: AppState["newElement"];
137
140
  isBindingEnabled: AppState["isBindingEnabled"];
138
- suggestedBindings: AppState["suggestedBindings"];
141
+ isMidpointSnappingEnabled: AppState["isMidpointSnappingEnabled"];
142
+ gridModeEnabled: AppState["gridModeEnabled"];
143
+ suggestedBinding: AppState["suggestedBinding"];
144
+ hoveredArrowTextAnchor: AppState["hoveredArrowTextAnchor"];
139
145
  isRotating: AppState["isRotating"];
140
146
  elementsToHighlight: AppState["elementsToHighlight"];
141
147
  collaborators: AppState["collaborators"];
@@ -146,6 +152,11 @@ export type InteractiveCanvasAppState = Readonly<_CommonCanvasAppState & {
146
152
  croppingElementId: AppState["croppingElementId"];
147
153
  searchMatches: AppState["searchMatches"];
148
154
  activeLockedId: AppState["activeLockedId"];
155
+ hoveredElementIds: AppState["hoveredElementIds"];
156
+ frameRendering: AppState["frameRendering"];
157
+ shouldCacheIgnoreZoom: AppState["shouldCacheIgnoreZoom"];
158
+ exportScale: AppState["exportScale"];
159
+ currentItemArrowType: AppState["currentItemArrowType"];
149
160
  }>;
150
161
  export type ObservedAppState = ObservedStandaloneAppState & ObservedElementsAppState;
151
162
  export type ObservedStandaloneAppState = {
@@ -156,12 +167,50 @@ export type ObservedElementsAppState = {
156
167
  editingGroupId: AppState["editingGroupId"];
157
168
  selectedElementIds: AppState["selectedElementIds"];
158
169
  selectedGroupIds: AppState["selectedGroupIds"];
159
- editingLinearElementId: LinearElementEditor["elementId"] | null;
160
- selectedLinearElementId: LinearElementEditor["elementId"] | null;
170
+ selectedLinearElement: {
171
+ elementId: LinearElementEditor["elementId"];
172
+ isEditing: boolean;
173
+ } | null;
161
174
  croppingElementId: AppState["croppingElementId"];
162
175
  lockedMultiSelections: AppState["lockedMultiSelections"];
163
176
  activeLockedId: AppState["activeLockedId"];
164
177
  };
178
+ export type BoxSelectionMode = "contain" | "overlap";
179
+ /**
180
+ * A box, in scene coordinates, that pan & zoom are constrained to.
181
+ *
182
+ * This is a private type. For public API, only use specific properties,
183
+ * needed.
184
+ */
185
+ export type ScrollConstraints = {
186
+ x: number;
187
+ y: number;
188
+ width: number;
189
+ height: number;
190
+ /** when set, panning is constrained so the viewport stays within the box */
191
+ lockScroll: boolean;
192
+ /** when set, the viewport cannot zoom out below `zoom` */
193
+ lockZoom: boolean;
194
+ /**
195
+ * The zoom resolved after the `setViewport` navigation settled.
196
+ */
197
+ zoom: number;
198
+ /**
199
+ * Pixel amount the viewport may overscroll past its resting clamp before
200
+ * snapping back (rubberband). Screen pixels, zoom-independent. Resolved
201
+ * from `lock.overscroll` at the time the lock was installed (`true` →
202
+ * default give, `false` → 0).
203
+ */
204
+ overscroll: number;
205
+ /**
206
+ * Extra scrollable margin around the box (CSS-style), letting the viewport
207
+ * scroll past each box edge to reveal that much empty space. Values are
208
+ * viewport pixels and zoom-independent (a fixed on-screen distance).
209
+ * Resolved from the `offsets` passed to `setViewport` (see
210
+ * {@link ViewportOffsets}) at the time the lock was installed.
211
+ */
212
+ offsets?: Offsets;
213
+ };
165
214
  export interface AppState {
166
215
  contextMenu: {
167
216
  items: ContextMenuItems;
@@ -195,9 +244,34 @@ export interface AppState {
195
244
  * - set on pointer down, updated during pointer move
196
245
  */
197
246
  selectionElement: NonDeletedExcalidrawElement | null;
247
+ /**
248
+ * tracking current arrow binding editor state (takes into account
249
+ * `bindingPreference` and keyboard modifiers (ctrl/alt)
250
+ */
198
251
  isBindingEnabled: boolean;
199
- startBoundElement: NonDeleted<ExcalidrawBindableElement> | null;
200
- suggestedBindings: SuggestedBinding[];
252
+ /** user box selection preference; defaults to "contain" when unset */
253
+ boxSelectionMode: BoxSelectionMode;
254
+ /** user arrow binding preference */
255
+ bindingPreference: "enabled" | "disabled";
256
+ /** user preference whether arrow snap to midpoints while binding */
257
+ isMidpointSnappingEnabled: boolean;
258
+ /**
259
+ * The bindable element the UI highlights for the user when an arrow is
260
+ * dragged or otherwise its endpoint being close to said element.
261
+ */
262
+ suggestedBinding: {
263
+ element: NonDeleted<ExcalidrawBindableElement>;
264
+ midPoint?: GlobalPoint;
265
+ } | null;
266
+ /**
267
+ * Where on a hovered arrow the text tool would attach text if clicked —
268
+ * a free endpoint (binds the arrow to a new text element positioned against
269
+ * that endpoint) or the arrow's midpoint (adds a label bound to the arrow).
270
+ */
271
+ hoveredArrowTextAnchor: {
272
+ elementId: ExcalidrawArrowElement["id"];
273
+ anchor: "start" | "end" | "label";
274
+ } | null;
201
275
  frameToHighlight: NonDeleted<ExcalidrawFrameLikeElement> | null;
202
276
  frameRendering: {
203
277
  enabled: boolean;
@@ -205,13 +279,15 @@ export interface AppState {
205
279
  outline: boolean;
206
280
  clip: boolean;
207
281
  };
208
- editingFrame: string | null;
209
- elementsToHighlight: NonDeleted<ExcalidrawElement>[] | null;
282
+ /**
283
+ * frame-like element whose name is currently being edited
284
+ */
285
+ editingFrame: ExcalidrawFrameLikeElement["id"] | null;
286
+ elementsToHighlight: readonly NonDeletedExcalidrawElement[] | null;
210
287
  /**
211
288
  * set when a new text is created or when an existing text is being edited
212
289
  */
213
- editingTextElement: NonDeletedExcalidrawElement | null;
214
- editingLinearElement: LinearElementEditor | null;
290
+ editingTextElement: ExcalidrawTextElement | null;
215
291
  activeTool: {
216
292
  /**
217
293
  * indicates a previous tool we should revert back to if we deselect the
@@ -221,6 +297,10 @@ export interface AppState {
221
297
  locked: boolean;
222
298
  fromSelection: boolean;
223
299
  } & ActiveTool;
300
+ preferredSelectionTool: {
301
+ type: "selection" | "lasso";
302
+ initialized: boolean;
303
+ };
224
304
  penMode: boolean;
225
305
  penDetected: boolean;
226
306
  exportBackground: boolean;
@@ -230,9 +310,10 @@ export interface AppState {
230
310
  currentItemStrokeColor: string;
231
311
  currentItemBackgroundColor: string;
232
312
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
233
- currentItemStrokeWidth: number;
313
+ currentItemStrokeWidthKey: StrokeWidthKey;
234
314
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
235
315
  currentItemRoughness: number;
316
+ currentItemStrokeVariability: StrokeVariability;
236
317
  currentItemOpacity: number;
237
318
  currentItemFontFamily: FontFamilyValues;
238
319
  currentItemFontSize: number;
@@ -245,14 +326,15 @@ export interface AppState {
245
326
  viewBackgroundColor: string;
246
327
  scrollX: number;
247
328
  scrollY: number;
329
+ scrollConstraints: ScrollConstraints | null;
248
330
  cursorButton: "up" | "down";
249
331
  scrolledOutside: boolean;
250
332
  name: string | null;
251
333
  isResizing: boolean;
252
334
  isRotating: boolean;
253
335
  zoom: Zoom;
254
- openMenu: "canvas" | "shape" | null;
255
- openPopup: "canvasBackground" | "elementBackground" | "elementStroke" | "fontFamily" | null;
336
+ openMenu: "canvas" | null;
337
+ openPopup: "canvasBackground" | "elementBackground" | "elementStroke" | "fontFamily" | "compactTextProperties" | "compactStrokeStyles" | "compactOtherProperties" | "compactArrowProperties" | null;
256
338
  openSidebar: {
257
339
  name: SidebarName;
258
340
  tab?: SidebarTabName;
@@ -264,9 +346,15 @@ export interface AppState {
264
346
  tab: "text-to-diagram" | "mermaid";
265
347
  } | {
266
348
  name: "commandPalette";
349
+ } | {
350
+ name: "settings";
267
351
  } | {
268
352
  name: "elementLinkSelector";
269
353
  sourceElementId: ExcalidrawElement["id"];
354
+ } | {
355
+ name: "charts";
356
+ data: Spreadsheet;
357
+ rawText: string;
270
358
  };
271
359
  /**
272
360
  * Reflects user preference for whether the default sidebar should be docked.
@@ -289,7 +377,7 @@ export interface AppState {
289
377
  selectedElementsAreBeingDragged: boolean;
290
378
  shouldCacheIgnoreZoom: boolean;
291
379
  toast: {
292
- message: string;
380
+ message: React.ReactNode;
293
381
  closable?: boolean;
294
382
  duration?: number;
295
383
  } | null;
@@ -311,21 +399,13 @@ export interface AppState {
311
399
  height: number;
312
400
  offsetTop: number;
313
401
  offsetLeft: number;
314
- fileHandle: FileSystemHandle | null;
402
+ fileHandle: FileSystemFileHandle | null;
315
403
  collaborators: Map<SocketId, Collaborator>;
316
404
  stats: {
317
405
  open: boolean;
318
406
  /** bitmap. Use `STATS_PANELS` bit values */
319
407
  panels: number;
320
408
  };
321
- currentChartType: ChartType;
322
- pasteDialog: {
323
- shown: false;
324
- data: null;
325
- } | {
326
- shown: true;
327
- data: Spreadsheet;
328
- };
329
409
  showHyperlinkPopup: false | "info" | "editor";
330
410
  selectedLinearElement: LinearElementEditor | null;
331
411
  snapLines: readonly SnapLine[];
@@ -334,10 +414,6 @@ export interface AppState {
334
414
  y: number;
335
415
  } | null;
336
416
  objectsSnapModeEnabled: boolean;
337
- /** the user's socket id & username who is being followed on the canvas */
338
- userToFollow: UserToFollow | null;
339
- /** the socket ids of the users following the current user */
340
- followedBy: Set<SocketId>;
341
417
  /** image cropping */
342
418
  isCropping: boolean;
343
419
  croppingElementId: ExcalidrawElement["id"] | null;
@@ -351,6 +427,18 @@ export interface AppState {
351
427
  lockedMultiSelections: {
352
428
  [groupId: string]: true;
353
429
  };
430
+ bindMode: BindMode;
431
+ /** user-customized color-picker top picks (pinned via drag & drop from the
432
+ * color picker popup). `null` means no customization (defaults, or
433
+ * host-supplied `topPicks`, are used). Kept per picker. */
434
+ colorTopPicks: {
435
+ elementStroke: readonly string[] | null;
436
+ elementBackground: readonly string[] | null;
437
+ /** the bucket-fill tool keeps a list separate from `elementBackground`
438
+ * even though both drive `currentItemBackgroundColor` (its defaults and
439
+ * use case differ — no transparent) */
440
+ bucketFill: readonly string[] | null;
441
+ };
354
442
  }
355
443
  export type SearchMatch = {
356
444
  id: string;
@@ -363,7 +451,7 @@ export type SearchMatch = {
363
451
  showOnCanvas: boolean;
364
452
  }[];
365
453
  };
366
- export type UIAppState = Omit<AppState, "suggestedBindings" | "startBoundElement" | "cursorButton" | "scrollX" | "scrollY">;
454
+ export type UIAppState = Omit<AppState, "cursorButton" | "scrollX" | "scrollY" | "zoom" | "shouldCacheIgnoreZoom" | "snapLines" | "originSnapOffset" | "suggestedBinding" | "hoveredArrowTextAnchor" | "frameToHighlight" | "elementsToHighlight">;
367
455
  export type NormalizedZoomValue = number & {
368
456
  _brand: "normalizedZoom";
369
457
  };
@@ -407,15 +495,178 @@ export type LibraryItemsSource = ((currentLibraryItems: LibraryItems) => MaybePr
407
495
  export type ExcalidrawInitialDataState = Merge<ImportedDataState, {
408
496
  libraryItems?: MaybePromise<Required<ImportedDataState>["libraryItems"]>;
409
497
  }>;
498
+ export type ExcalidrawInitialState = {
499
+ viewport?: Omit<SetViewportOptions, "animation">;
500
+ };
410
501
  export type OnUserFollowedPayload = {
411
502
  userToFollow: UserToFollow;
412
503
  action: "FOLLOW" | "UNFOLLOW";
413
504
  };
505
+ export type ViewportStatusFrame = {
506
+ /** the badge (bottom-center pill) */
507
+ label?: {
508
+ label: React.ReactNode;
509
+ icon?: React.ReactNode;
510
+ /** badge background; defaults to var(--color-primary-hover) */
511
+ background?: string;
512
+ /** badge text color; defaults to var(--color-primary-light) */
513
+ color?: string;
514
+ /** makes the badge label interactive */
515
+ onClick?: () => void;
516
+ /** renders a close button when set */
517
+ onClose?: () => void;
518
+ };
519
+ /** viewport-edge border: CSS color, or `false` for none */
520
+ border: false | string;
521
+ };
522
+ export type OnExportProgress = {
523
+ type: "progress";
524
+ message?: React.ReactNode;
525
+ /** 0-1 range */
526
+ progress?: number;
527
+ };
528
+ export type InteractionConfig = {
529
+ /**
530
+ * Interactions that stay enabled while the editor is otherwise
531
+ * non-interactive. Opt-in: anything omitted or `false` is disabled.
532
+ */
533
+ enabled?: {
534
+ /**
535
+ * Element links render their link icon and stay clickable — clicking
536
+ * anywhere on a linked element opens the link, same as in view mode.
537
+ * When disabled, link icons are not rendered at all.
538
+ *
539
+ * @default false
540
+ */
541
+ links?: boolean;
542
+ /**
543
+ * Embeddable & iframe elements stay interactive — hovering & clicking
544
+ * activates them so their content can be used, same as in view mode.
545
+ *
546
+ * @default false
547
+ */
548
+ embeds?: boolean;
549
+ /**
550
+ * Umbrella for all interactive content on canvas — shorthand for
551
+ * enabling `links` & `embeds` (and future interactive content kinds)
552
+ * together. Additive: `interactiveContent: true` enables them
553
+ * regardless of their individual values.
554
+ *
555
+ * @default false
556
+ */
557
+ interactiveContent?: boolean;
558
+ /**
559
+ * Canvas navigation — panning (pointer drag, wheel, PageUp/PageDown)
560
+ * and zooming (ctrl/cmd + wheel, pinch, and the canvas zoom &
561
+ * zoom-to-fit shortcuts: ctrl/cmd +/-/0, shift+1/2/3), same as in view
562
+ * mode. Respects `appState.scrollConstraints` if set, so it composes
563
+ * with viewport locking. The rest of the keyboard stays disabled. Note
564
+ * the editor consumes wheel & touch input again when enabled, so the
565
+ * page no longer scrolls over the editor.
566
+ *
567
+ * @default false
568
+ */
569
+ navigation?: boolean;
570
+ /**
571
+ * Whether the browser's own zoom remains available over the editor —
572
+ * ctrl/cmd + wheel, pinch, and (while the editor has focus)
573
+ * ctrl/cmd +/-/0 shortcuts. Prevented by default, mirroring the
574
+ * interactive editor. Regular page scrolling stays available either way.
575
+ * With `navigation` enabled, the zoom input (wheel, pinch, keyboard
576
+ * shortcuts) zooms the canvas instead either way, making this moot.
577
+ *
578
+ * @default false
579
+ */
580
+ browserZoom?: boolean;
581
+ /**
582
+ * Tools that stay user-driven while the editor is otherwise
583
+ * non-interactive: pointer input keeps driving the listed tool when it's
584
+ * the active tool. Does not enable user-driven tool *switching* — the
585
+ * keyboard stays disabled and tool selection remains host-driven
586
+ * (`ExcalidrawAPI.setActiveTool`).
587
+ *
588
+ * Composes with `navigation`: the enabled tool wins the primary-pointer
589
+ * drag, while wheel input (and wheel-button drag) still pans/zooms.
590
+ */
591
+ tools?: {
592
+ /**
593
+ * The laser pointer stays usable — pointer strokes draw laser trails
594
+ * and pointer positions keep broadcasting via `onPointerUpdate`, so
595
+ * e.g. collaborators see a presenter's laser & cursor.
596
+ *
597
+ * @default false
598
+ */
599
+ laser?: boolean;
600
+ /**
601
+ * Custom tools (`activeTool.type === "custom"`) stay usable — the
602
+ * editor keeps dispatching `onPointerDown` / `onPointerUp` for them.
603
+ * Tool behavior is host-implemented; activate custom tools with
604
+ * `locked: true` or they revert to the selection tool (and go inert)
605
+ * after the first pointer interaction.
606
+ *
607
+ * @default false
608
+ */
609
+ custom?: boolean;
610
+ };
611
+ };
612
+ };
613
+ export type UIConfig = {
614
+ /**
615
+ * Default UI controls that stay enabled while the rest of Excalidraw's
616
+ * default UI is hidden. Opt-in: anything omitted or `false` is disabled.
617
+ */
618
+ enabled: {
619
+ /**
620
+ * The zoom-out, reset-zoom, and zoom-in controls.
621
+ *
622
+ * @default false
623
+ */
624
+ zoom?: boolean;
625
+ /**
626
+ * The button shown when the viewport is scrolled away from all content.
627
+ *
628
+ * @default false
629
+ */
630
+ scrollBackToContent?: boolean;
631
+ };
632
+ };
414
633
  export interface ExcalidrawProps {
634
+ className?: string;
635
+ /**
636
+ * Document that owns Excalidraw's mounted DOM.
637
+ *
638
+ * Set only when it differs from the global `document`, such as when code
639
+ * executing in a parent window mounts Excalidraw into an iframe document.
640
+ * The value must remain stable for the editor's lifetime.
641
+ *
642
+ * @default document
643
+ */
644
+ ownerDocument?: Document;
415
645
  onChange?: (elements: readonly OrderedExcalidrawElement[], appState: AppState, files: BinaryFiles) => void;
646
+ onThemeChange?: (theme: Theme | "system") => void;
647
+ /**
648
+ * note: only subscribes if the props.onIncrement is defined on initial render
649
+ */
416
650
  onIncrement?: (event: DurableIncrement | EphemeralIncrement) => void;
417
651
  initialData?: (() => MaybePromise<ExcalidrawInitialDataState | null>) | MaybePromise<ExcalidrawInitialDataState | null>;
418
- excalidrawAPI?: (api: ExcalidrawImperativeAPI) => void;
652
+ initialState?: ExcalidrawInitialState;
653
+ /**
654
+ * Invoked as soon as the Excalidraw API is available
655
+ * NOTE editor is not yet mounted, and state is not yet initialized
656
+ */
657
+ onExcalidrawAPI?: (api: ExcalidrawImperativeAPI | null) => void;
658
+ /**
659
+ * Invoked once the editor root is mounted.
660
+ */
661
+ onMount?: (payload: ExcalidrawMountPayload) => void;
662
+ /**
663
+ * Invoked when the editor root is unmounted.
664
+ */
665
+ onUnmount?: () => void;
666
+ /**
667
+ * Invoked once the initial scene is loaded.
668
+ */
669
+ onInitialize?: (api: ExcalidrawImperativeAPI) => void;
419
670
  isCollaborating?: boolean;
420
671
  onPointerUpdate?: (payload: {
421
672
  pointer: {
@@ -441,9 +692,74 @@ export interface ExcalidrawProps {
441
692
  onDuplicate?: (nextElements: readonly ExcalidrawElement[],
442
693
  /** excludes the duplicated elements */
443
694
  prevElements: readonly ExcalidrawElement[]) => ExcalidrawElement[] | void;
695
+ renderTopLeftUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
444
696
  renderTopRightUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
445
697
  langCode?: Language["code"];
446
698
  viewModeEnabled?: boolean;
699
+ /**
700
+ * Whether the editor accepts user input (pointer, keyboard, wheel, touch,
701
+ * clipboard, drag&drop). When `false`, the scene still renders and reacts
702
+ * to programmatic updates (imperative API), but the user cannot affect it
703
+ * in any way. Implies view mode.
704
+ *
705
+ * Pass a config object to keep specific interactions enabled while the
706
+ * editor is otherwise non-interactive (see `InteractionConfig`):
707
+ *
708
+ * ```tsx
709
+ * <Excalidraw interaction={{ enabled: { links: true } }} />
710
+ * ```
711
+ *
712
+ * @default true
713
+ */
714
+ interaction?: boolean | InteractionConfig;
715
+ /**
716
+ * Whether Excalidraw's default UI is rendered — toolbar, default menus,
717
+ * footer controls, sidebars, and canvas popups. Host UI passed through
718
+ * children (including exported components such as `MainMenu` and `Footer`)
719
+ * or render props continues to render, together with any supporting dialogs
720
+ * it opens.
721
+ *
722
+ * Canvas content (elements, text editing surface, frame names, embeds) still
723
+ * renders, and the editor remains interactive unless `interaction` is set to
724
+ * `false`.
725
+ *
726
+ * Pass a config object to keep specific default controls rendered while the
727
+ * rest of the default UI is hidden (see `UIConfig`):
728
+ *
729
+ * ```tsx
730
+ * <Excalidraw ui={{ enabled: { zoom: true } }} />
731
+ * ```
732
+ *
733
+ * NOTE: this is WIP and what default UI is/is not rendered when ui=false
734
+ * may yet change.
735
+ *
736
+ * @default true
737
+ */
738
+ ui?: boolean | UIConfig;
739
+ /**
740
+ * Forces the active editor tool (controlled). While set, user- and
741
+ * API-driven tool switching is ignored — `setActiveTool` refuses with a
742
+ * console warning, non-forced toolbar buttons render disabled — and the
743
+ * editor snaps back if internal flows reset the tool. The forced tool
744
+ * behaves as if locked (see the tool lock / padlock): it doesn't revert to
745
+ * the selection tool after use, and elements drawn with it aren't
746
+ * auto-selected — without mutating `appState.activeTool.locked`, so the
747
+ * user's persisted padlock preference stays untouched. Unset to return
748
+ * tool control to the editor (the current tool stays active).
749
+ *
750
+ * The forced tool must be activatable to take effect: not disabled via
751
+ * `UIOptions.tools`, and — while the editor is non-interactive — allowed
752
+ * via `interaction.enabled.tools`. Otherwise the editor stays on (or, when
753
+ * non-interactive, resets to) the `selection` tool, and the forced tool is
754
+ * applied once it becomes activatable. `image` cannot be forced (its
755
+ * activation opens the file picker).
756
+ */
757
+ activeTool?: {
758
+ type: Exclude<ToolType, "image">;
759
+ } | {
760
+ type: "custom";
761
+ customType: string;
762
+ };
447
763
  zenModeEnabled?: boolean;
448
764
  gridModeEnabled?: boolean;
449
765
  objectsSnapModeEnabled?: boolean;
@@ -452,6 +768,10 @@ export interface ExcalidrawProps {
452
768
  name?: string;
453
769
  renderCustomStats?: (elements: readonly NonDeletedExcalidrawElement[], appState: UIAppState) => JSX.Element;
454
770
  UIOptions?: Partial<UIOptions>;
771
+ /**
772
+ * dimensions and size constraints for inserted images
773
+ */
774
+ imageOptions?: ImageOptions;
455
775
  detectScroll?: boolean;
456
776
  handleKeyboardGlobally?: boolean;
457
777
  onLibraryChange?: (libraryItems: LibraryItems) => void | Promise<any>;
@@ -471,6 +791,44 @@ export interface ExcalidrawProps {
471
791
  aiEnabled?: boolean;
472
792
  showDeprecatedFonts?: boolean;
473
793
  renderScrollbars?: boolean;
794
+ viewportStatusFrame?: ViewportStatusFrame | null;
795
+ /**
796
+ * Rendered inside the UserList "who's here" dropdown (desktop) and inline
797
+ * in the mobile menu's collaborators section, below a divider. Accepts a
798
+ * render function — called with `isMobile` so hosts can render different
799
+ * UI for each surface — in addition to a plain node.
800
+ */
801
+ currentUserControls?: React.ReactNode | ((isMobile: boolean) => React.ReactNode);
802
+ /**
803
+ * The user being followed on the canvas, if any. Controlled by the host —
804
+ * the editor never sets it; it emits follow/unfollow intents via
805
+ * `onUserFollow` (prop or imperative API) and renders the followed
806
+ * user's avatar highlight from this value.
807
+ */
808
+ userToFollow?: UserToFollow | null;
809
+ /**
810
+ * Called before exporting to a file.
811
+ *
812
+ * Allows the host app to intercept and delay saving until async operations
813
+ * (e.g., images are loaded) complete.
814
+ *
815
+ * If Promise/AsyncGenerator is returned, a progress toast will be shown
816
+ * until the operation completes. Generator can yield progress updates.
817
+ */
818
+ onExport?: (
819
+ /** type of export. Currently we only call for JSON exports or
820
+ * JSON-embedded PNG (which is also identified as `json` type here)*/
821
+ type: "json", data: {
822
+ elements: readonly ExcalidrawElement[];
823
+ appState: AppState;
824
+ files: BinaryFiles;
825
+ }, options: {
826
+ /** signal that gets aborted if user cancels the export (e.g. closes
827
+ * the native file picker dialog). In that case, you can either
828
+ * return immediately, or throw AbortError.
829
+ */
830
+ signal: AbortSignal;
831
+ }) => MaybePromise<void> | AsyncGenerator<OnExportProgress, void>;
474
832
  }
475
833
  export type SceneData = {
476
834
  elements?: ImportedDataState["elements"];
@@ -483,12 +841,21 @@ export type ExportOpts = {
483
841
  onExportToBackend?: (exportedElements: readonly NonDeletedExcalidrawElement[], appState: UIAppState, files: BinaryFiles) => void;
484
842
  renderCustomUI?: (exportedElements: readonly NonDeletedExcalidrawElement[], appState: UIAppState, files: BinaryFiles, canvas: HTMLCanvasElement) => JSX.Element;
485
843
  };
844
+ export type ImageOptions = Partial<{
845
+ maxWidthOrHeight: number;
846
+ maxFileSizeBytes: number;
847
+ }>;
486
848
  export type CanvasActions = Partial<{
487
849
  changeViewBackgroundColor: boolean;
488
850
  clearCanvas: boolean;
489
851
  export: false | ExportOpts;
490
852
  loadScene: boolean;
491
853
  saveToActiveFile: boolean;
854
+ /**
855
+ * defaults to true if `props.theme` is omitted or `props.onThemeChange`
856
+ * is supplied (at which point the theme is considered as host-app controlled),
857
+ * else default to false
858
+ * */
492
859
  toggleTheme: boolean | null;
493
860
  saveAsImage: boolean;
494
861
  }>;
@@ -498,6 +865,11 @@ export type UIOptions = Partial<{
498
865
  tools: {
499
866
  image: boolean;
500
867
  };
868
+ /**
869
+ * Optionally control the editor form factor and desktop UI mode from the host app.
870
+ * If not provided, we will take care of it internally.
871
+ */
872
+ getFormFactor?: (editorWidth: number, editorHeight: number) => EditorInterface["formFactor"];
501
873
  /** @deprecated does nothing. Will be removed in 0.15 */
502
874
  welcomeScreen?: boolean;
503
875
  }>;
@@ -507,6 +879,7 @@ export type AppProps = Merge<ExcalidrawProps, {
507
879
  export: ExportOpts;
508
880
  };
509
881
  }>;
882
+ imageOptions: Required<ImageOptions>;
510
883
  detectScroll: boolean;
511
884
  handleKeyboardGlobally: boolean;
512
885
  isCollaborating: boolean;
@@ -518,6 +891,10 @@ export type AppProps = Merge<ExcalidrawProps, {
518
891
  export type AppClassProperties = {
519
892
  props: AppProps;
520
893
  state: AppState;
894
+ readonly ownerDocument: Document;
895
+ readonly ownerWindow: Window & typeof globalThis;
896
+ api: App["api"];
897
+ sessionExportThemeOverride: App["sessionExportThemeOverride"];
521
898
  interactiveCanvas: HTMLCanvasElement | null;
522
899
  /** static canvas */
523
900
  canvas: HTMLCanvasElement;
@@ -528,7 +905,7 @@ export type AppClassProperties = {
528
905
  mimeType: ValueOf<typeof IMAGE_MIME_TYPES>;
529
906
  }>;
530
907
  files: BinaryFiles;
531
- device: App["device"];
908
+ editorInterface: App["editorInterface"];
532
909
  scene: App["scene"];
533
910
  syncActionResult: App["syncActionResult"];
534
911
  fonts: App["fonts"];
@@ -536,8 +913,7 @@ export type AppClassProperties = {
536
913
  id: App["id"];
537
914
  onInsertElements: App["onInsertElements"];
538
915
  onExportImage: App["onExportImage"];
539
- lastViewportPosition: App["lastViewportPosition"];
540
- scrollToContent: App["scrollToContent"];
916
+ viewport: App["viewport"];
541
917
  addFiles: App["addFiles"];
542
918
  addElementsFromPasteOrLibrary: App["addElementsFromPasteOrLibrary"];
543
919
  togglePenMode: App["togglePenMode"];
@@ -548,15 +924,30 @@ export type AppClassProperties = {
548
924
  onMagicframeToolSelect: App["onMagicframeToolSelect"];
549
925
  getName: App["getName"];
550
926
  dismissLinearEditor: App["dismissLinearEditor"];
551
- flowChartCreator: App["flowChartCreator"];
927
+ flowchart: App["flowchart"];
928
+ drawShape: App["drawShape"];
929
+ arrowText: App["arrowText"];
930
+ cursor: App["cursor"];
931
+ bucketFill: App["bucketFill"];
932
+ isToolLocked: App["isToolLocked"];
552
933
  getEffectiveGridSize: App["getEffectiveGridSize"];
553
934
  setPlugins: App["setPlugins"];
554
935
  plugins: App["plugins"];
555
- getEditorUIOffsets: App["getEditorUIOffsets"];
556
936
  visibleElements: App["visibleElements"];
557
937
  excalidrawContainerValue: App["excalidrawContainerValue"];
558
938
  onPointerUpEmitter: App["onPointerUpEmitter"];
559
939
  updateEditorAtom: App["updateEditorAtom"];
940
+ onPointerDownEmitter: App["onPointerDownEmitter"];
941
+ onEvent: App["onEvent"];
942
+ onStateChange: App["onStateChange"];
943
+ lastPointerMoveCoords: App["lastPointerMoveCoords"];
944
+ lastPointerMoveEvent: App["lastPointerMoveEvent"];
945
+ bindModeHandler: App["bindModeHandler"];
946
+ emitUserFollowIntent: App["emitUserFollowIntent"];
947
+ requestUnfollow: App["requestUnfollow"];
948
+ setAppState: App["setAppState"];
949
+ isInteractionEnabled: App["isInteractionEnabled"];
950
+ isNavigationEnabled: App["isNavigationEnabled"];
560
951
  };
561
952
  export type PointerDownState = Readonly<{
562
953
  origin: Readonly<{
@@ -592,6 +983,7 @@ export type PointerDownState = Readonly<{
592
983
  wasAddedToSelection: boolean;
593
984
  hasBeenDuplicated: boolean;
594
985
  hasHitCommonBoundingBoxOfSelectedElements: boolean;
986
+ arrowLabel: boolean;
595
987
  };
596
988
  withCmdOrCtrl: boolean;
597
989
  drag: {
@@ -604,6 +996,7 @@ export type PointerDownState = Readonly<{
604
996
  x: number;
605
997
  y: number;
606
998
  };
999
+ blockDragging: boolean;
607
1000
  };
608
1001
  eventListeners: {
609
1002
  onMove: null | ReturnType<typeof throttleRAF>;
@@ -616,8 +1009,20 @@ export type PointerDownState = Readonly<{
616
1009
  };
617
1010
  }>;
618
1011
  export type UnsubscribeCallback = () => void;
1012
+ export type ExcalidrawMountPayload = {
1013
+ excalidrawAPI: ExcalidrawImperativeAPI;
1014
+ container: HTMLDivElement | null;
1015
+ };
1016
+ export type ExcalidrawImperativeAPIEventMap = {
1017
+ "editor:mount": [payload: ExcalidrawMountPayload];
1018
+ "editor:initialize": [api: ExcalidrawImperativeAPI];
1019
+ "editor:unmount": [];
1020
+ };
619
1021
  export interface ExcalidrawImperativeAPI {
1022
+ /** Whether the editor has been unmounted and the API is no longer usable. */
1023
+ isDestroyed: boolean;
620
1024
  updateScene: InstanceType<typeof App>["updateScene"];
1025
+ applyDeltas: InstanceType<typeof App>["applyDeltas"];
621
1026
  mutateElement: InstanceType<typeof App>["mutateElement"];
622
1027
  updateLibrary: InstanceType<typeof Library>["updateLibrary"];
623
1028
  resetScene: InstanceType<typeof App>["resetScene"];
@@ -630,16 +1035,18 @@ export interface ExcalidrawImperativeAPI {
630
1035
  getAppState: () => InstanceType<typeof App>["state"];
631
1036
  getFiles: () => InstanceType<typeof App>["files"];
632
1037
  getName: InstanceType<typeof App>["getName"];
633
- scrollToContent: InstanceType<typeof App>["scrollToContent"];
1038
+ setViewport: InstanceType<typeof App>["viewport"]["setViewport"];
1039
+ getViewportOffsets: InstanceType<typeof App>["viewport"]["getOffsets"];
634
1040
  registerAction: (action: Action) => void;
635
1041
  refresh: InstanceType<typeof App>["refresh"];
636
1042
  setToast: InstanceType<typeof App>["setToast"];
637
1043
  addFiles: (data: BinaryFileData[]) => void;
638
1044
  id: string;
639
1045
  setActiveTool: InstanceType<typeof App>["setActiveTool"];
640
- setCursor: InstanceType<typeof App>["setCursor"];
641
- resetCursor: InstanceType<typeof App>["resetCursor"];
1046
+ setCursor: InstanceType<typeof App>["cursor"]["set"];
1047
+ resetCursor: InstanceType<typeof App>["cursor"]["reset"];
642
1048
  toggleSidebar: InstanceType<typeof App>["toggleSidebar"];
1049
+ getEditorInterface: () => EditorInterface;
643
1050
  /**
644
1051
  * Disables rendering of frames (including element clipping), but currently
645
1052
  * the frames are still interactive in edit mode. As such, this API should be
@@ -652,24 +1059,14 @@ export interface ExcalidrawImperativeAPI {
652
1059
  onPointerUp: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: PointerEvent) => void) => UnsubscribeCallback;
653
1060
  onScrollChange: (callback: (scrollX: number, scrollY: number, zoom: Zoom) => void) => UnsubscribeCallback;
654
1061
  onUserFollow: (callback: (payload: OnUserFollowedPayload) => void) => UnsubscribeCallback;
1062
+ onStateChange: InstanceType<typeof App>["onStateChange"];
1063
+ onEvent: InstanceType<typeof App>["onEvent"];
655
1064
  }
656
- export type Device = Readonly<{
657
- viewport: {
658
- isMobile: boolean;
659
- isLandscape: boolean;
660
- };
661
- editor: {
662
- isMobile: boolean;
663
- canFitSidebar: boolean;
664
- };
665
- isTouchScreen: boolean;
666
- }>;
667
1065
  export type FrameNameBounds = {
668
1066
  x: number;
669
1067
  y: number;
670
1068
  width: number;
671
1069
  height: number;
672
- angle: number;
673
1070
  };
674
1071
  export type FrameNameBoundsCache = {
675
1072
  get: (frameElement: ExcalidrawFrameLikeElement | ExcalidrawMagicFrameElement) => FrameNameBounds | null;
@@ -688,12 +1085,18 @@ export type Primitive = number | string | boolean | bigint | symbol | null | und
688
1085
  export type JSONValue = string | number | boolean | null | object;
689
1086
  export type EmbedsValidationStatus = Map<ExcalidrawIframeLikeElement["id"], boolean>;
690
1087
  export type ElementsPendingErasure = Set<ExcalidrawElement["id"]>;
691
- export type PendingExcalidrawElements = ExcalidrawElement[];
1088
+ export type PendingExcalidrawElements = NonDeletedExcalidrawElement[];
692
1089
  /** Runtime gridSize value. Null indicates disabled grid. */
693
1090
  export type NullableGridSize = (AppState["gridSize"] & MakeBrand<"NullableGridSize">) | null;
694
1091
  export type GenerateDiagramToCode = (props: {
695
- frame: ExcalidrawMagicFrameElement;
696
- children: readonly ExcalidrawElement[];
1092
+ frame: NonDeleted<ExcalidrawMagicFrameElement>;
1093
+ children: readonly NonDeletedExcalidrawElement[];
1094
+ /**
1095
+ * Optional streaming hook. Call with the accumulated response text as it
1096
+ * streams in so the editor can progressively render the partial HTML
1097
+ * inside the generated frame.
1098
+ */
1099
+ onPartial?: (html: string) => void;
697
1100
  }) => MaybePromise<{
698
1101
  html: string;
699
1102
  }>;
@@ -703,4 +1106,102 @@ export type Offsets = Partial<{
703
1106
  bottom: number;
704
1107
  left: number;
705
1108
  }>;
706
- export {};
1109
+ /**
1110
+ * Value of the `data-viewport-ui` attribute, marking a DOM node as a UI
1111
+ * surface that occludes the canvas. Such nodes are measured by
1112
+ * `getViewportOffsets` to compute the default per-side viewport offsets:
1113
+ *
1114
+ * - `top` / `bottom` — offsets that side by the node's bottom/top edge
1115
+ * - `side` — a panel hugging the left or right edge. Which side is not
1116
+ * declared but resolved geometrically: if the node's horizontal center
1117
+ * lies in the left half of the viewport it counts against the left
1118
+ * offset (by its right edge), otherwise against the right offset (by
1119
+ * `viewportWidth - left edge`). Measuring the rendered position instead
1120
+ * of declaring a side means RTL layouts and host-configurable docking
1121
+ * (e.g. sidebar side) are handled for free — but it assumes the surface
1122
+ * actually hugs one edge; don't mark a centered/near-full-width node as
1123
+ * `side` (its midpoint would classify it to one side and the offset
1124
+ * would swallow most of the viewport).
1125
+ *
1126
+ * The attribute should only be present while the surface is actually
1127
+ * rendered — omit it (don't just hide the node) when the surface shouldn't
1128
+ * push the viewport around.
1129
+ */
1130
+ export type ViewportUIDock = "top" | "bottom" | "side";
1131
+ /**
1132
+ * Options for `getViewportOffsets` (and the `ui` key of
1133
+ * {@link ViewportOffsets}), controlling how offsets are derived from the
1134
+ * currently rendered editor UI.
1135
+ *
1136
+ * NOTE unlike the physical sides of {@link Offsets}, the horizontal values
1137
+ * here are logical, i.e. flipped in RTL layouts (`left` refers to the
1138
+ * reading-direction start side).
1139
+ */
1140
+ export type ViewportOffsetsOptions = {
1141
+ /** padding added to each measured side (default 24) */
1142
+ padding?: number;
1143
+ paddingTop?: number;
1144
+ paddingRight?: number;
1145
+ paddingBottom?: number;
1146
+ paddingLeft?: number;
1147
+ /** final value for the given side, replacing the measured UI size
1148
+ * (padding is not added on top) */
1149
+ top?: number;
1150
+ bottom?: number;
1151
+ left?: number;
1152
+ right?: number;
1153
+ /**
1154
+ * Reserve space for the given conditionally-rendered surfaces even while
1155
+ * they're hidden, so the resulting offsets don't shift when they
1156
+ * (dis)appear. Uses the surface's last-measured footprint, falling back
1157
+ * to an approximate default if it hasn't been rendered yet. Ignored on
1158
+ * phones (where these surfaces never occlude the canvas).
1159
+ */
1160
+ reserve?: {
1161
+ /** styles panel (rendered when a tool or selection is active) */
1162
+ stylesPanel?: boolean;
1163
+ /** sidebar (e.g. library) */
1164
+ sidebar?: boolean;
1165
+ };
1166
+ };
1167
+ /**
1168
+ * Viewport offsets accepted by the `setViewport`-family APIs (`setViewport`,
1169
+ * `props.initialState.viewport`), insetting the usable viewport area per
1170
+ * side so the target isn't fitted/centered underneath overlaid UI.
1171
+ *
1172
+ * Two (combinable) ways to specify:
1173
+ *
1174
+ * - **Static sides** (`top`/`right`/`bottom`/`left`) — absolute pixel
1175
+ * values, used as-is: physical (not flipped in RTL), zoom-independent,
1176
+ * no padding added. Sides not specified default to `0` (unless `ui` is
1177
+ * set, see below).
1178
+ *
1179
+ * - **`ui`** — derive the offsets from the editor UI (toolbar, styles
1180
+ * panel, sidebar...) as rendered at the time the viewport is set,
1181
+ * equivalent to calling `getViewportOffsets()`. Pass `true` for the
1182
+ * defaults, or options ({@link ViewportOffsetsOptions}) to customize
1183
+ * padding or reserve space for currently-hidden surfaces.
1184
+ *
1185
+ * When both are given, a static side always wins for that side — it
1186
+ * replaces whatever `ui` would yield (including `ui`'s own side overrides,
1187
+ * which — unlike the physical static sides — are RTL-relative). The
1188
+ * remaining sides fall back to the `ui`-derived values.
1189
+ *
1190
+ * @example
1191
+ * { top: 40 } // top 40px, other sides 0
1192
+ * { ui: true } // measured UI + default padding
1193
+ * { ui: { reserve: { stylesPanel: true } } } // + keep space for hidden panel
1194
+ * { top: 40, ui: true } // top exactly 40px, rest from UI
1195
+ */
1196
+ export type ViewportOffsets = Offsets & {
1197
+ ui?: true | ViewportOffsetsOptions;
1198
+ };
1199
+ /**
1200
+ * Value of the `data-viewport-ui-name` attribute, identifying a
1201
+ * conditionally-rendered surface (marked with `data-viewport-ui`) so that
1202
+ * `getViewportOffsets` can reserve space for it while it's hidden (see the
1203
+ * `reserve` option). Whenever a named surface is rendered, its measured
1204
+ * footprint is remembered; reserving uses that remembered footprint, or an
1205
+ * approximate default if the surface hasn't been rendered yet.
1206
+ */
1207
+ export type ViewportUIName = "sidebar" | "stylesPanel";