@zsviczian/excalidraw 0.18.0-60 → 0.18.0-62

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 (397) hide show
  1. package/dist/excalidraw.development.js +113 -113
  2. package/dist/excalidraw.production.min.js +1 -1
  3. package/package.json +2 -2
  4. package/types/common/src/binary-heap.d.ts +12 -12
  5. package/types/common/src/colors.d.ts +62 -62
  6. package/types/common/src/commonObsidianUtils.d.ts +20 -20
  7. package/types/common/src/constants.d.ts +357 -360
  8. package/types/common/src/editorInterface.d.ts +35 -35
  9. package/types/common/src/emitter.d.ts +16 -16
  10. package/types/common/src/font-metadata.d.ts +46 -48
  11. package/types/common/src/index.d.ts +15 -15
  12. package/types/common/src/keys.d.ts +189 -189
  13. package/types/common/src/points.d.ts +9 -9
  14. package/types/common/src/promise-pool.d.ts +6 -6
  15. package/types/common/src/queue.d.ts +9 -9
  16. package/types/common/src/random.d.ts +4 -4
  17. package/types/common/src/url.d.ts +7 -7
  18. package/types/common/src/utility-types.d.ts +37 -37
  19. package/types/common/src/utils.d.ts +279 -273
  20. package/types/common/src/visualdebug.d.ts +41 -41
  21. package/types/element/src/Scene.d.ts +80 -80
  22. package/types/element/src/align.d.ts +8 -8
  23. package/types/element/src/binding.d.ts +123 -122
  24. package/types/element/src/bounds.d.ts +89 -89
  25. package/types/element/src/collision.d.ts +36 -36
  26. package/types/element/src/comparisons.d.ts +8 -8
  27. package/types/element/src/containerCache.d.ts +11 -11
  28. package/types/element/src/cropElement.d.ts +19 -19
  29. package/types/element/src/delta.d.ts +228 -228
  30. package/types/element/src/distance.d.ts +3 -3
  31. package/types/element/src/distribute.d.ts +7 -7
  32. package/types/element/src/dragElements.d.ts +33 -33
  33. package/types/element/src/duplicate.d.ts +63 -63
  34. package/types/element/src/easingFunctions.d.ts +6 -6
  35. package/types/element/src/elbowArrow.d.ts +17 -17
  36. package/types/element/src/elementLink.d.ts +13 -13
  37. package/types/element/src/embeddable.d.ts +10 -10
  38. package/types/element/src/flowchart.d.ts +26 -26
  39. package/types/element/src/fractionalIndex.d.ts +57 -57
  40. package/types/element/src/frame.d.ts +74 -70
  41. package/types/element/src/groups.d.ts +34 -34
  42. package/types/element/src/heading.d.ts +16 -15
  43. package/types/element/src/image.d.ts +22 -32
  44. package/types/element/src/index.d.ts +55 -55
  45. package/types/element/src/linearElementEditor.d.ts +113 -113
  46. package/types/element/src/mutateElement.d.ts +23 -21
  47. package/types/element/src/newElement.d.ts +64 -64
  48. package/types/element/src/positionElementsOnGrid.d.ts +2 -2
  49. package/types/element/src/renderElement.d.ts +31 -31
  50. package/types/element/src/resizeElements.d.ts +39 -39
  51. package/types/element/src/resizeTest.d.ts +16 -16
  52. package/types/element/src/selection.d.ts +34 -38
  53. package/types/element/src/shape.d.ts +42 -42
  54. package/types/element/src/showSelectedShapeActions.d.ts +3 -3
  55. package/types/element/src/sizeHelpers.d.ts +35 -35
  56. package/types/element/src/sortElements.d.ts +2 -2
  57. package/types/element/src/store.d.ts +237 -237
  58. package/types/element/src/textElement.d.ts +40 -40
  59. package/types/element/src/textMeasurements.d.ts +39 -41
  60. package/types/element/src/textWrapping.d.ts +13 -13
  61. package/types/element/src/transformHandles.d.ts +36 -56
  62. package/types/element/src/typeChecks.d.ts +56 -56
  63. package/types/element/src/types.d.ts +304 -304
  64. package/types/element/src/utils.d.ts +34 -32
  65. package/types/element/src/zindex.d.ts +13 -13
  66. package/types/excalidraw/actions/actionAddToLibrary.d.ts +599 -662
  67. package/types/excalidraw/actions/actionAlign.d.ts +109 -109
  68. package/types/excalidraw/actions/actionBoundText.d.ts +436 -478
  69. package/types/excalidraw/actions/actionCanvas.d.ts +2920 -3204
  70. package/types/excalidraw/actions/actionClipboard.d.ts +475 -517
  71. package/types/excalidraw/actions/actionCropEditor.d.ts +212 -233
  72. package/types/excalidraw/actions/actionDeleteSelected.d.ts +633 -700
  73. package/types/excalidraw/actions/actionDistribute.d.ts +34 -34
  74. package/types/excalidraw/actions/actionDuplicateSelection.d.ts +17 -17
  75. package/types/excalidraw/actions/actionElementLink.d.ts +232 -253
  76. package/types/excalidraw/actions/actionElementLock.d.ts +422 -464
  77. package/types/excalidraw/actions/actionEmbeddable.d.ts +209 -230
  78. package/types/excalidraw/actions/actionExport.d.ts +835 -919
  79. package/types/excalidraw/actions/actionFinalize.d.ts +13 -13
  80. package/types/excalidraw/actions/actionFlip.d.ts +34 -34
  81. package/types/excalidraw/actions/actionFrame.d.ts +1315 -1435
  82. package/types/excalidraw/actions/actionGroup.d.ts +426 -476
  83. package/types/excalidraw/actions/actionHistory.d.ts +6 -6
  84. package/types/excalidraw/actions/actionLinearEditor.d.ts +709 -766
  85. package/types/excalidraw/actions/actionLink.d.ts +213 -234
  86. package/types/excalidraw/actions/actionMenu.d.ts +201 -222
  87. package/types/excalidraw/actions/actionNavigate.d.ts +20 -22
  88. package/types/excalidraw/actions/actionProperties.d.ts +695 -758
  89. package/types/excalidraw/actions/actionSelectAll.d.ts +208 -233
  90. package/types/excalidraw/actions/actionStyles.d.ts +226 -247
  91. package/types/excalidraw/actions/actionTextAutoResize.d.ts +17 -17
  92. package/types/excalidraw/actions/actionToggleGridMode.d.ts +215 -236
  93. package/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +213 -234
  94. package/types/excalidraw/actions/actionToggleSearchMenu.d.ts +204 -225
  95. package/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +19 -19
  96. package/types/excalidraw/actions/actionToggleStats.d.ts +212 -233
  97. package/types/excalidraw/actions/actionToggleViewMode.d.ts +213 -234
  98. package/types/excalidraw/actions/actionToggleZenMode.d.ts +213 -234
  99. package/types/excalidraw/actions/actionTrayMenu.d.ts +208 -229
  100. package/types/excalidraw/actions/actionZindex.d.ts +74 -74
  101. package/types/excalidraw/actions/index.d.ts +30 -30
  102. package/types/excalidraw/actions/manager.d.ts +21 -21
  103. package/types/excalidraw/actions/register.d.ts +5 -5
  104. package/types/excalidraw/actions/shortcuts.d.ts +4 -4
  105. package/types/excalidraw/actions/types.d.ts +47 -47
  106. package/types/excalidraw/analytics.d.ts +1 -1
  107. package/types/excalidraw/animated-trail.d.ts +39 -39
  108. package/types/excalidraw/animation-frame-handler.d.ts +16 -16
  109. package/types/excalidraw/appState.d.ts +105 -105
  110. package/types/excalidraw/charts.d.ts +27 -27
  111. package/types/excalidraw/clients.d.ts +14 -14
  112. package/types/excalidraw/clipboard.d.ts +105 -129
  113. package/types/excalidraw/components/Actions.d.ts +48 -48
  114. package/types/excalidraw/components/ActiveConfirmDialog.d.ts +4 -4
  115. package/types/excalidraw/components/App.d.ts +572 -581
  116. package/types/excalidraw/components/Avatar.d.ts +11 -11
  117. package/types/excalidraw/components/BraveMeasureTextError.d.ts +2 -2
  118. package/types/excalidraw/components/Button.d.ts +17 -17
  119. package/types/excalidraw/components/ButtonIcon.d.ts +16 -16
  120. package/types/excalidraw/components/ButtonIconCycle.d.ts +11 -11
  121. package/types/excalidraw/components/ButtonSeparator.d.ts +1 -1
  122. package/types/excalidraw/components/Card.d.ts +6 -6
  123. package/types/excalidraw/components/CheckboxItem.d.ts +8 -8
  124. package/types/excalidraw/components/ColorPicker/ColorInput.d.ts +10 -10
  125. package/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +23 -23
  126. package/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +8 -8
  127. package/types/excalidraw/components/ColorPicker/HotkeyLabel.d.ts +7 -7
  128. package/types/excalidraw/components/ColorPicker/Picker.d.ts +19 -19
  129. package/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +10 -10
  130. package/types/excalidraw/components/ColorPicker/PickerHeading.d.ts +5 -5
  131. package/types/excalidraw/components/ColorPicker/ShadeList.d.ts +9 -9
  132. package/types/excalidraw/components/ColorPicker/TopPicks.d.ts +9 -9
  133. package/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +21 -21
  134. package/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +20 -20
  135. package/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +19 -19
  136. package/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +2 -2
  137. package/types/excalidraw/components/CommandPalette/types.d.ts +24 -24
  138. package/types/excalidraw/components/ConfirmDialog.d.ts +10 -10
  139. package/types/excalidraw/components/ContextMenu.d.ts +16 -16
  140. package/types/excalidraw/components/ConvertElementTypePopup.d.ts +23 -23
  141. package/types/excalidraw/components/DarkModeToggle.d.ts +7 -7
  142. package/types/excalidraw/components/DefaultSidebar.d.ts +27 -30
  143. package/types/excalidraw/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +4 -4
  144. package/types/excalidraw/components/Dialog.d.ts +13 -13
  145. package/types/excalidraw/components/DialogActionButton.d.ts +10 -10
  146. package/types/excalidraw/components/ElementCanvasButtons.d.ts +7 -7
  147. package/types/excalidraw/components/ElementLinkDialog.d.ts +12 -12
  148. package/types/excalidraw/components/Ellipsify.d.ts +3 -3
  149. package/types/excalidraw/components/ErrorDialog.d.ts +5 -5
  150. package/types/excalidraw/components/ExcalidrawLogo.d.ts +15 -15
  151. package/types/excalidraw/components/EyeDropper.d.ts +27 -27
  152. package/types/excalidraw/components/FilledButton.d.ts +18 -18
  153. package/types/excalidraw/components/FixedSideContainer.d.ts +10 -10
  154. package/types/excalidraw/components/FollowMode/FollowMode.d.ts +10 -10
  155. package/types/excalidraw/components/FontPicker/FontPicker.d.ts +22 -22
  156. package/types/excalidraw/components/FontPicker/FontPickerList.d.ts +26 -26
  157. package/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +8 -8
  158. package/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +13 -13
  159. package/types/excalidraw/components/HandButton.d.ts +10 -10
  160. package/types/excalidraw/components/HelpButton.d.ts +7 -7
  161. package/types/excalidraw/components/HelpDialog.d.ts +4 -4
  162. package/types/excalidraw/components/HintViewer.d.ts +11 -11
  163. package/types/excalidraw/components/IconPicker.d.ts +15 -15
  164. package/types/excalidraw/components/ImageExportDialog.d.ts +14 -14
  165. package/types/excalidraw/components/InitializeApp.d.ts +10 -10
  166. package/types/excalidraw/components/InlineIcon.d.ts +5 -5
  167. package/types/excalidraw/components/Island.d.ts +10 -10
  168. package/types/excalidraw/components/JSONExportDialog.d.ts +15 -15
  169. package/types/excalidraw/components/LaserPointerButton.d.ts +10 -10
  170. package/types/excalidraw/components/LayerUI.d.ts +32 -32
  171. package/types/excalidraw/components/LibraryMenu.d.ts +10 -10
  172. package/types/excalidraw/components/LibraryMenuBrowseButton.d.ts +7 -7
  173. package/types/excalidraw/components/LibraryMenuControlButtons.d.ts +9 -9
  174. package/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +17 -17
  175. package/types/excalidraw/components/LibraryMenuItems.d.ts +14 -14
  176. package/types/excalidraw/components/LibraryMenuSection.d.ts +23 -23
  177. package/types/excalidraw/components/LibraryUnit.d.ts +14 -14
  178. package/types/excalidraw/components/LinkButton.d.ts +4 -4
  179. package/types/excalidraw/components/LoadingMessage.d.ts +5 -5
  180. package/types/excalidraw/components/LockButton.d.ts +10 -10
  181. package/types/excalidraw/components/MagicButton.d.ts +10 -10
  182. package/types/excalidraw/components/MobileMenu.d.ts +24 -24
  183. package/types/excalidraw/components/MobileToolBar.d.ts +10 -10
  184. package/types/excalidraw/components/Modal.d.ts +14 -14
  185. package/types/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +17 -17
  186. package/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmActions.d.ts +17 -17
  187. package/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +22 -22
  188. package/types/excalidraw/components/Paragraph.d.ts +4 -4
  189. package/types/excalidraw/components/PasteChartDialog.d.ts +8 -8
  190. package/types/excalidraw/components/PenModeButton.d.ts +12 -12
  191. package/types/excalidraw/components/Popover.d.ts +16 -16
  192. package/types/excalidraw/components/ProjectName.d.ts +10 -10
  193. package/types/excalidraw/components/PropertiesPopover.d.ts +16 -16
  194. package/types/excalidraw/components/PublishLibrary.d.ts +16 -16
  195. package/types/excalidraw/components/QuickSearch.d.ts +9 -9
  196. package/types/excalidraw/components/RadioGroup.d.ts +13 -13
  197. package/types/excalidraw/components/RadioSelection.d.ts +20 -20
  198. package/types/excalidraw/components/Range.d.ts +8 -8
  199. package/types/excalidraw/components/SVGLayer.d.ts +7 -7
  200. package/types/excalidraw/components/ScrollableList.d.ts +8 -8
  201. package/types/excalidraw/components/SearchMenu.d.ts +5 -5
  202. package/types/excalidraw/components/Section.d.ts +7 -7
  203. package/types/excalidraw/components/ShareableLinkDialog.d.ts +7 -7
  204. package/types/excalidraw/components/Sidebar/Sidebar.d.ts +70 -76
  205. package/types/excalidraw/components/Sidebar/SidebarHeader.d.ts +7 -7
  206. package/types/excalidraw/components/Sidebar/SidebarTab.d.ts +8 -8
  207. package/types/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +9 -9
  208. package/types/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +6 -6
  209. package/types/excalidraw/components/Sidebar/SidebarTabs.d.ts +6 -6
  210. package/types/excalidraw/components/Sidebar/SidebarTrigger.d.ts +6 -6
  211. package/types/excalidraw/components/Sidebar/common.d.ts +34 -34
  212. package/types/excalidraw/components/Spinner.d.ts +8 -8
  213. package/types/excalidraw/components/Stack.d.ts +15 -15
  214. package/types/excalidraw/components/Stats/Angle.d.ts +11 -11
  215. package/types/excalidraw/components/Stats/CanvasGrid.d.ts +10 -10
  216. package/types/excalidraw/components/Stats/CanvasGridSize.d.ts +10 -10
  217. package/types/excalidraw/components/Stats/Collapsible.d.ts +10 -10
  218. package/types/excalidraw/components/Stats/Dimension.d.ts +11 -11
  219. package/types/excalidraw/components/Stats/DragInput.d.ts +44 -44
  220. package/types/excalidraw/components/Stats/FontSize.d.ts +11 -11
  221. package/types/excalidraw/components/Stats/MultiAngle.d.ts +11 -11
  222. package/types/excalidraw/components/Stats/MultiDimension.d.ts +14 -14
  223. package/types/excalidraw/components/Stats/MultiFontSize.d.ts +12 -12
  224. package/types/excalidraw/components/Stats/MultiPosition.d.ts +14 -14
  225. package/types/excalidraw/components/Stats/Position.d.ts +12 -12
  226. package/types/excalidraw/components/Stats/index.d.ts +35 -35
  227. package/types/excalidraw/components/Stats/utils.d.ts +19 -19
  228. package/types/excalidraw/components/Switch.d.ts +9 -9
  229. package/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +8 -8
  230. package/types/excalidraw/components/TTDDialog/MermaidToExcalidrawLib.d.ts +10 -10
  231. package/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +29 -29
  232. package/types/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +9 -9
  233. package/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +7 -7
  234. package/types/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +17 -17
  235. package/types/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +4 -4
  236. package/types/excalidraw/components/TTDDialog/TTDDialogSubmitShortcut.d.ts +1 -1
  237. package/types/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +7 -7
  238. package/types/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +8 -8
  239. package/types/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +6 -6
  240. package/types/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +11 -11
  241. package/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +8 -8
  242. package/types/excalidraw/components/TTDDialog/common.d.ts +32 -32
  243. package/types/excalidraw/components/TextField.d.ts +22 -22
  244. package/types/excalidraw/components/Toast.d.ts +9 -9
  245. package/types/excalidraw/components/ToolButton.d.ts +49 -49
  246. package/types/excalidraw/components/ToolPopover.d.ts +25 -25
  247. package/types/excalidraw/components/Tooltip.d.ts +18 -18
  248. package/types/excalidraw/components/Trans.d.ts +9 -9
  249. package/types/excalidraw/components/TrayMenu.d.ts +26 -26
  250. package/types/excalidraw/components/UnlockPopup.d.ts +8 -8
  251. package/types/excalidraw/components/UserList.d.ts +18 -18
  252. package/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +33 -33
  253. package/types/excalidraw/components/canvases/NewElementCanvas.d.ts +14 -14
  254. package/types/excalidraw/components/canvases/StaticCanvas.d.ts +19 -19
  255. package/types/excalidraw/components/canvases/index.d.ts +3 -3
  256. package/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +84 -88
  257. package/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +16 -16
  258. package/types/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +11 -11
  259. package/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +38 -46
  260. package/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +8 -8
  261. package/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +17 -17
  262. package/types/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +7 -7
  263. package/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +16 -16
  264. package/types/excalidraw/components/dropdownMenu/DropdownMenuSeparator.d.ts +5 -5
  265. package/types/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +10 -10
  266. package/types/excalidraw/components/dropdownMenu/common.d.ts +6 -6
  267. package/types/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +3 -3
  268. package/types/excalidraw/components/footer/Footer.d.ts +12 -12
  269. package/types/excalidraw/components/footer/FooterCenter.d.ts +8 -8
  270. package/types/excalidraw/components/hoc/withInternalFallback.d.ts +4 -4
  271. package/types/excalidraw/components/hyperlink/Hyperlink.d.ts +19 -19
  272. package/types/excalidraw/components/hyperlink/helpers.d.ts +10 -10
  273. package/types/excalidraw/components/icons.d.ts +241 -241
  274. package/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +11 -22
  275. package/types/excalidraw/components/main-menu/DefaultItems.d.ts +64 -64
  276. package/types/excalidraw/components/main-menu/MainMenu.d.ts +78 -80
  277. package/types/excalidraw/components/shapes.d.ts +172 -172
  278. package/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +60 -60
  279. package/types/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +19 -19
  280. package/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +86 -86
  281. package/types/excalidraw/context/tunnels.d.ts +21 -21
  282. package/types/excalidraw/context/ui-appState.d.ts +4 -4
  283. package/types/excalidraw/cursor.d.ts +6 -6
  284. package/types/excalidraw/data/EditorLocalStorage.d.ts +8 -8
  285. package/types/excalidraw/data/ai/types.d.ts +242 -242
  286. package/types/excalidraw/data/blob.d.ts +57 -49
  287. package/types/excalidraw/data/encode.d.ts +55 -55
  288. package/types/excalidraw/data/encryption.d.ts +9 -9
  289. package/types/excalidraw/data/filesystem.d.ts +21 -21
  290. package/types/excalidraw/data/image.d.ts +9 -9
  291. package/types/excalidraw/data/index.d.ts +22 -22
  292. package/types/excalidraw/data/json.d.ts +18 -16
  293. package/types/excalidraw/data/library.d.ts +127 -112
  294. package/types/excalidraw/data/reconcile.d.ts +7 -7
  295. package/types/excalidraw/data/resave.d.ts +5 -5
  296. package/types/excalidraw/data/restore.d.ts +35 -26
  297. package/types/excalidraw/data/transform.d.ts +81 -81
  298. package/types/excalidraw/data/types.d.ts +48 -48
  299. package/types/excalidraw/deburr.d.ts +1 -1
  300. package/types/excalidraw/dist/excalidraw.development.d.ts +2 -2
  301. package/types/excalidraw/dist/excalidraw.production.min.d.ts +2 -3
  302. package/types/excalidraw/editor-jotai.d.ts +56 -56
  303. package/types/excalidraw/entry.d.ts +1 -1
  304. package/types/excalidraw/env.d.cts +1 -1
  305. package/types/excalidraw/env.d.ts +1 -1
  306. package/types/excalidraw/eraser/index.d.ts +12 -12
  307. package/types/excalidraw/errors.d.ts +29 -29
  308. package/types/excalidraw/fonts/Cascadia/index.d.ts +2 -2
  309. package/types/excalidraw/fonts/ComicShanns/index.d.ts +2 -2
  310. package/types/excalidraw/fonts/Emoji/index.d.ts +2 -2
  311. package/types/excalidraw/fonts/ExcalidrawFontFace.d.ts +29 -29
  312. package/types/excalidraw/fonts/Excalifont/index.d.ts +2 -2
  313. package/types/excalidraw/fonts/Fonts.d.ts +90 -90
  314. package/types/excalidraw/fonts/Helvetica/index.d.ts +2 -2
  315. package/types/excalidraw/fonts/Liberation/index.d.ts +2 -2
  316. package/types/excalidraw/fonts/Lilita/index.d.ts +2 -2
  317. package/types/excalidraw/fonts/Nunito/index.d.ts +2 -2
  318. package/types/excalidraw/fonts/Virgil/index.d.ts +2 -2
  319. package/types/excalidraw/fonts/Xiaolai/index.d.ts +8 -8
  320. package/types/excalidraw/fonts/index.d.ts +1 -1
  321. package/types/excalidraw/gesture.d.ts +6 -6
  322. package/types/excalidraw/history.d.ts +48 -48
  323. package/types/excalidraw/hooks/useCallbackRefState.d.ts +1 -1
  324. package/types/excalidraw/hooks/useCopiedIndicator.d.ts +5 -5
  325. package/types/excalidraw/hooks/useCreatePortalContainer.d.ts +7 -7
  326. package/types/excalidraw/hooks/useEmitter.d.ts +2 -2
  327. package/types/excalidraw/hooks/useLibraryItemSvg.d.ts +11 -11
  328. package/types/excalidraw/hooks/useOutsideClick.d.ts +21 -21
  329. package/types/excalidraw/hooks/useScrollPosition.d.ts +1 -1
  330. package/types/excalidraw/hooks/useStable.d.ts +1 -1
  331. package/types/excalidraw/hooks/useStableCallback.d.ts +4 -4
  332. package/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -14
  333. package/types/excalidraw/hooks/useTransition.d.ts +2 -2
  334. package/types/excalidraw/i18n.d.ts +24 -24
  335. package/types/excalidraw/index-node.d.ts +1 -1
  336. package/types/excalidraw/index.d.ts +60 -60
  337. package/types/excalidraw/laser-trails.d.ts +20 -20
  338. package/types/excalidraw/lasso/index.d.ts +16 -16
  339. package/types/excalidraw/lasso/utils.d.ts +13 -13
  340. package/types/excalidraw/main.d.ts +2 -2
  341. package/types/excalidraw/mermaid.d.ts +2 -2
  342. package/types/excalidraw/obsidianUtils.d.ts +41 -41
  343. package/types/excalidraw/polyfill.d.ts +2 -2
  344. package/types/excalidraw/publicPath.d.ts +1 -1
  345. package/types/excalidraw/reactUtils.d.ts +14 -14
  346. package/types/excalidraw/renderer/animation.d.ts +12 -12
  347. package/types/excalidraw/renderer/helpers.d.ts +16 -14
  348. package/types/excalidraw/renderer/interactiveScene.d.ts +14 -12
  349. package/types/excalidraw/renderer/renderNewElementScene.d.ts +7 -7
  350. package/types/excalidraw/renderer/renderSnaps.d.ts +2 -2
  351. package/types/excalidraw/renderer/roundRect.d.ts +11 -11
  352. package/types/excalidraw/renderer/staticScene.d.ts +14 -14
  353. package/types/excalidraw/renderer/staticSvgScene.d.ts +5 -5
  354. package/types/excalidraw/scene/Renderer.d.ts +29 -27
  355. package/types/excalidraw/scene/export.d.ts +37 -37
  356. package/types/excalidraw/scene/index.d.ts +4 -4
  357. package/types/excalidraw/scene/normalize.d.ts +4 -4
  358. package/types/excalidraw/scene/scroll.d.ts +18 -23
  359. package/types/excalidraw/scene/scrollbars.d.ts +11 -11
  360. package/types/excalidraw/scene/types.d.ts +134 -134
  361. package/types/excalidraw/scene/zoom.d.ts +12 -12
  362. package/types/excalidraw/shortcut.d.ts +1 -1
  363. package/types/excalidraw/snapping.d.ts +111 -111
  364. package/types/excalidraw/subset/harfbuzz/harfbuzz-bindings.d.ts +45 -45
  365. package/types/excalidraw/subset/harfbuzz/harfbuzz-loader.d.ts +13 -13
  366. package/types/excalidraw/subset/harfbuzz/harfbuzz-wasm.d.ts +2 -2
  367. package/types/excalidraw/subset/subset-main.d.ts +12 -12
  368. package/types/excalidraw/subset/subset-shared.chunk.d.ts +32 -32
  369. package/types/excalidraw/subset/subset-worker.chunk.d.ts +15 -15
  370. package/types/excalidraw/subset/woff2/woff2-bindings.d.ts +31 -31
  371. package/types/excalidraw/subset/woff2/woff2-loader.d.ts +14 -14
  372. package/types/excalidraw/subset/woff2/woff2-wasm.d.ts +2 -2
  373. package/types/excalidraw/types.d.ts +801 -801
  374. package/types/excalidraw/webpack.dev.config.d.ts +116 -116
  375. package/types/excalidraw/webpack.prod.config.d.ts +130 -130
  376. package/types/excalidraw/workers.d.ts +36 -36
  377. package/types/excalidraw/wysiwyg/textWysiwyg.d.ts +24 -24
  378. package/types/math/src/angle.d.ts +19 -19
  379. package/types/math/src/constants.d.ts +3 -3
  380. package/types/math/src/curve.d.ts +74 -74
  381. package/types/math/src/ellipse.d.ts +44 -44
  382. package/types/math/src/index.d.ts +13 -13
  383. package/types/math/src/line.d.ts +17 -17
  384. package/types/math/src/point.d.ts +122 -122
  385. package/types/math/src/polygon.d.ts +6 -6
  386. package/types/math/src/range.d.ts +44 -44
  387. package/types/math/src/rectangle.d.ts +5 -5
  388. package/types/math/src/segment.d.ts +40 -40
  389. package/types/math/src/triangle.d.ts +11 -11
  390. package/types/math/src/types.d.ts +106 -106
  391. package/types/math/src/utils.d.ts +7 -7
  392. package/types/math/src/vector.d.ts +94 -94
  393. package/types/utils/src/bbox.d.ts +9 -9
  394. package/types/utils/src/export.d.ts +35 -35
  395. package/types/utils/src/index.d.ts +4 -4
  396. package/types/utils/src/shape.d.ts +58 -58
  397. package/types/utils/src/withinBounds.d.ts +19 -19
@@ -1,801 +1,801 @@
1
- import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES, ColorPaletteCustom, EditorInterface } from "@excalidraw/common";
2
- import type { LinearElementEditor } from "@excalidraw/element";
3
- import type { MaybeTransformHandleType } from "@excalidraw/element";
4
- import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, ExcalidrawTextElement, FileId, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement, BindMode } from "@excalidraw/element/types";
5
- import type { Merge, MaybePromise, ValueOf, MakeBrand } from "@excalidraw/common/utility-types";
6
- import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement } from "@excalidraw/element";
7
- import type { Action } from "./actions/types";
8
- import type { Spreadsheet } from "./charts";
9
- import type { ClipboardData } from "./clipboard";
10
- import type App from "./components/App";
11
- import type Library from "./data/library";
12
- import type { FileSystemHandle } from "./data/filesystem";
13
- import type { ContextMenuItems } from "./components/ContextMenu";
14
- import type { SnapLine } from "./snapping";
15
- import type { ImportedDataState } from "./data/types";
16
- import type { Language } from "./i18n";
17
- import type { isOverScrollBars } from "./scene/scrollbars";
18
- import type React from "react";
19
- import type { JSX } from "react";
20
- export type SocketId = string & {
21
- _brand: "SocketId";
22
- };
23
- export type Collaborator = Readonly<{
24
- pointer?: CollaboratorPointer;
25
- button?: "up" | "down";
26
- selectedElementIds?: AppState["selectedElementIds"];
27
- username?: string | null;
28
- userState?: UserIdleState;
29
- color?: {
30
- background: string;
31
- stroke: string;
32
- };
33
- avatarUrl?: string;
34
- id?: string;
35
- socketId?: SocketId;
36
- isCurrentUser?: boolean;
37
- isInCall?: boolean;
38
- isSpeaking?: boolean;
39
- isMuted?: boolean;
40
- }>;
41
- export type CollaboratorPointer = {
42
- x: number;
43
- y: number;
44
- tool: "pointer" | "laser";
45
- /**
46
- * Whether to render cursor + username. Useful when you only want to render
47
- * laser trail.
48
- *
49
- * @default true
50
- */
51
- renderCursor?: boolean;
52
- /**
53
- * Explicit laser color.
54
- *
55
- * @default string collaborator's cursor color
56
- */
57
- laserColor?: string;
58
- };
59
- export type DataURL = string & {
60
- _brand: "DataURL";
61
- };
62
- export type BinaryFileData = {
63
- mimeType: ValueOf<typeof IMAGE_MIME_TYPES> | typeof MIME_TYPES.binary;
64
- id: FileId;
65
- dataURL: DataURL;
66
- /**
67
- * Epoch timestamp in milliseconds
68
- */
69
- created: number;
70
- /**
71
- * Indicates when the file was last retrieved from storage to be loaded
72
- * onto the scene. We use this flag to determine whether to delete unused
73
- * files from storage.
74
- *
75
- * Epoch timestamp in milliseconds.
76
- */
77
- lastRetrieved?: number;
78
- /**
79
- * indicates the version of the file. This can be used to determine whether
80
- * the file dataURL has changed e.g. as part of restore due to schema update.
81
- */
82
- version?: number;
83
- };
84
- export type BinaryFileMetadata = Omit<BinaryFileData, "dataURL">;
85
- export type BinaryFiles = Record<ExcalidrawElement["id"], BinaryFileData>;
86
- export type ToolType = "selection" | "lasso" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser" | "mermaid";
87
- export type ElementOrToolType = ExcalidrawElementType | ToolType | "custom";
88
- export type ActiveTool = {
89
- type: ToolType;
90
- customType: null;
91
- } | {
92
- type: "custom";
93
- customType: string;
94
- };
95
- export type SidebarName = string;
96
- export type SidebarTabName = string;
97
- export type UserToFollow = {
98
- socketId: SocketId;
99
- username: string;
100
- };
101
- type _CommonCanvasAppState = {
102
- zoom: AppState["zoom"];
103
- scrollX: AppState["scrollX"];
104
- scrollY: AppState["scrollY"];
105
- width: AppState["width"];
106
- height: AppState["height"];
107
- viewModeEnabled: AppState["viewModeEnabled"];
108
- openDialog: AppState["openDialog"];
109
- editingGroupId: AppState["editingGroupId"];
110
- selectedElementIds: AppState["selectedElementIds"];
111
- frameToHighlight: AppState["frameToHighlight"];
112
- offsetLeft: AppState["offsetLeft"];
113
- offsetTop: AppState["offsetTop"];
114
- theme: AppState["theme"];
115
- };
116
- export type StaticCanvasAppState = Readonly<_CommonCanvasAppState & {
117
- shouldCacheIgnoreZoom: AppState["shouldCacheIgnoreZoom"];
118
- /** null indicates transparent bg */
119
- viewBackgroundColor: AppState["viewBackgroundColor"] | null;
120
- exportScale: AppState["exportScale"];
121
- selectedElementsAreBeingDragged: AppState["selectedElementsAreBeingDragged"];
122
- gridSize: AppState["gridSize"];
123
- gridStep: AppState["gridStep"];
124
- frameRendering: AppState["frameRendering"];
125
- linkOpacity: AppState["linkOpacity"];
126
- gridColor: AppState["gridColor"];
127
- gridDirection: AppState["gridDirection"];
128
- frameColor: AppState["frameColor"];
129
- currentHoveredFontFamily: AppState["currentHoveredFontFamily"];
130
- hoveredElementIds: AppState["hoveredElementIds"];
131
- suggestedBinding: AppState["suggestedBinding"];
132
- croppingElementId: AppState["croppingElementId"];
133
- }>;
134
- export type InteractiveCanvasAppState = Readonly<_CommonCanvasAppState & {
135
- activeEmbeddable: AppState["activeEmbeddable"];
136
- selectionElement: AppState["selectionElement"];
137
- selectedGroupIds: AppState["selectedGroupIds"];
138
- selectedLinearElement: AppState["selectedLinearElement"];
139
- multiElement: AppState["multiElement"];
140
- newElement: AppState["newElement"];
141
- isBindingEnabled: AppState["isBindingEnabled"];
142
- suggestedBinding: AppState["suggestedBinding"];
143
- isRotating: AppState["isRotating"];
144
- elementsToHighlight: AppState["elementsToHighlight"];
145
- collaborators: AppState["collaborators"];
146
- snapLines: AppState["snapLines"];
147
- zenModeEnabled: AppState["zenModeEnabled"];
148
- editingTextElement: AppState["editingTextElement"];
149
- viewBackgroundColor: AppState["viewBackgroundColor"];
150
- gridColor: AppState["gridColor"];
151
- gridDirection: AppState["gridDirection"];
152
- highlightSearchResult: AppState["highlightSearchResult"];
153
- isCropping: AppState["isCropping"];
154
- croppingElementId: AppState["croppingElementId"];
155
- searchMatches: AppState["searchMatches"];
156
- activeLockedId: AppState["activeLockedId"];
157
- hoveredElementIds: AppState["hoveredElementIds"];
158
- frameRendering: AppState["frameRendering"];
159
- frameColor: AppState["frameColor"];
160
- shouldCacheIgnoreZoom: AppState["shouldCacheIgnoreZoom"];
161
- exportScale: AppState["exportScale"];
162
- }>;
163
- export type ObservedAppState = ObservedStandaloneAppState & ObservedElementsAppState;
164
- export type ObservedStandaloneAppState = {
165
- name: AppState["name"];
166
- viewBackgroundColor: AppState["viewBackgroundColor"];
167
- };
168
- export type ObservedElementsAppState = {
169
- editingGroupId: AppState["editingGroupId"];
170
- selectedElementIds: AppState["selectedElementIds"];
171
- selectedGroupIds: AppState["selectedGroupIds"];
172
- selectedLinearElement: {
173
- elementId: LinearElementEditor["elementId"];
174
- isEditing: boolean;
175
- } | null;
176
- croppingElementId: AppState["croppingElementId"];
177
- lockedMultiSelections: AppState["lockedMultiSelections"];
178
- activeLockedId: AppState["activeLockedId"];
179
- };
180
- export interface AppState {
181
- contextMenu: {
182
- items: ContextMenuItems;
183
- top: number;
184
- left: number;
185
- } | null;
186
- showWelcomeScreen: boolean;
187
- isLoading: boolean;
188
- errorMessage: React.ReactNode;
189
- activeEmbeddable: {
190
- element: NonDeletedExcalidrawElement;
191
- state: "hover" | "active";
192
- } | null;
193
- /**
194
- * for a newly created element
195
- * - set on pointer down, updated during pointer move, used on pointer up
196
- */
197
- newElement: NonDeleted<ExcalidrawNonSelectionElement> | null;
198
- /**
199
- * for a single element that's being resized
200
- * - set on pointer down when it's selected and the active tool is selection
201
- */
202
- resizingElement: NonDeletedExcalidrawElement | null;
203
- /**
204
- * multiElement is for multi-point linear element that's created by clicking as opposed to dragging
205
- * - when set and present, the editor will handle linear element creation logic accordingly
206
- */
207
- multiElement: NonDeleted<ExcalidrawLinearElement> | null;
208
- /**
209
- * decoupled from newElement, dragging selection only creates selectionElement
210
- * - set on pointer down, updated during pointer move
211
- */
212
- selectionElement: NonDeletedExcalidrawElement | null;
213
- isBindingEnabled: boolean;
214
- startBoundElement: NonDeleted<ExcalidrawBindableElement> | null;
215
- suggestedBinding: NonDeleted<ExcalidrawBindableElement> | null;
216
- frameToHighlight: NonDeleted<ExcalidrawFrameLikeElement> | null;
217
- frameRendering: {
218
- enabled: boolean;
219
- name: boolean;
220
- outline: boolean;
221
- clip: boolean;
222
- markerName: boolean;
223
- markerEnabled: boolean;
224
- };
225
- editingFrame: string | null;
226
- elementsToHighlight: NonDeleted<ExcalidrawElement>[] | null;
227
- /**
228
- * set when a new text is created or when an existing text is being edited
229
- */
230
- editingTextElement: NonDeletedExcalidrawElement | null;
231
- activeTool: {
232
- /**
233
- * indicates a previous tool we should revert back to if we deselect the
234
- * currently active tool. At the moment applies to `eraser` and `hand` tool.
235
- */
236
- lastActiveTool: ActiveTool | null;
237
- locked: boolean;
238
- fromSelection: boolean;
239
- } & ActiveTool;
240
- preferredSelectionTool: {
241
- type: "selection" | "lasso";
242
- initialized: boolean;
243
- };
244
- penMode: boolean;
245
- penDetected: boolean;
246
- exportBackground: boolean;
247
- exportEmbedScene: boolean;
248
- exportWithDarkMode: boolean;
249
- exportScale: number;
250
- currentItemStrokeColor: string;
251
- currentItemBackgroundColor: string;
252
- currentItemFillStyle: ExcalidrawElement["fillStyle"];
253
- currentItemStrokeWidth: number;
254
- currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
255
- currentItemRoughness: number;
256
- currentItemOpacity: number;
257
- currentItemFontFamily: FontFamilyValues;
258
- currentItemFontSize: number;
259
- currentItemTextAlign: TextAlign;
260
- currentItemStartArrowhead: Arrowhead | null;
261
- currentItemEndArrowhead: Arrowhead | null;
262
- currentHoveredFontFamily: FontFamilyValues | null;
263
- currentItemRoundness: StrokeRoundness;
264
- currentItemArrowType: "sharp" | "round" | "elbow";
265
- currentItemFrameRole: ExcalidrawFrameLikeElement["frameRole"] | null;
266
- viewBackgroundColor: string;
267
- scrollX: number;
268
- scrollY: number;
269
- cursorButton: "up" | "down";
270
- scrolledOutside: boolean;
271
- name: string | null;
272
- isResizing: boolean;
273
- isRotating: boolean;
274
- zoom: Zoom;
275
- openMenu: "canvas" | "shape" | null;
276
- openPopup: "canvasBackground" | "elementBackground" | "elementStroke" | "fontFamily" | "compactTextProperties" | "compactStrokeStyles" | "compactOtherProperties" | "compactArrowProperties" | null;
277
- openSidebar: {
278
- name: SidebarName;
279
- tab?: SidebarTabName;
280
- } | null;
281
- openDialog: null | {
282
- name: "imageExport" | "help" | "jsonExport";
283
- } | {
284
- name: "ttd";
285
- tab: "text-to-diagram" | "mermaid";
286
- } | {
287
- name: "commandPalette";
288
- } | {
289
- name: "settings";
290
- } | {
291
- name: "elementLinkSelector";
292
- sourceElementId: ExcalidrawElement["id"];
293
- };
294
- /**
295
- * Reflects user preference for whether the default sidebar should be docked.
296
- *
297
- * NOTE this is only a user preference and does not reflect the actual docked
298
- * state of the sidebar, because the host apps can override this through
299
- * a DefaultSidebar prop, which is not reflected back to the appState.
300
- */
301
- defaultSidebarDockedPreference: boolean;
302
- lastPointerDownWith: PointerType;
303
- selectedElementIds: Readonly<{
304
- [id: string]: true;
305
- }>;
306
- hoveredElementIds: Readonly<{
307
- [id: string]: true;
308
- }>;
309
- previousSelectedElementIds: {
310
- [id: string]: true;
311
- };
312
- selectedElementsAreBeingDragged: boolean;
313
- shouldCacheIgnoreZoom: boolean;
314
- toast: {
315
- message: string;
316
- closable?: boolean;
317
- duration?: number;
318
- } | null;
319
- zenModeEnabled: boolean;
320
- theme: Theme;
321
- /** grid cell px size */
322
- gridSize: number;
323
- gridStep: number;
324
- gridModeEnabled: boolean;
325
- viewModeEnabled: boolean;
326
- /** top-most selected groups (i.e. does not include nested groups) */
327
- selectedGroupIds: {
328
- [groupId: string]: boolean;
329
- };
330
- /** group being edited when you drill down to its constituent element
331
- (e.g. when you double-click on a group's element) */
332
- editingGroupId: GroupId | null;
333
- width: number;
334
- height: number;
335
- offsetTop: number;
336
- offsetLeft: number;
337
- fileHandle: FileSystemHandle | null;
338
- collaborators: Map<SocketId, Collaborator>;
339
- stats: {
340
- open: boolean;
341
- /** bitmap. Use `STATS_PANELS` bit values */
342
- panels: number;
343
- };
344
- currentChartType: ChartType;
345
- pasteDialog: {
346
- shown: false;
347
- data: null;
348
- } | {
349
- shown: true;
350
- data: Spreadsheet;
351
- };
352
- showHyperlinkPopup: false | "info" | "editor";
353
- linkOpacity: number;
354
- colorPalette?: {
355
- canvasBackground: ColorPaletteCustom;
356
- elementBackground: ColorPaletteCustom;
357
- elementStroke: ColorPaletteCustom;
358
- topPicks: {
359
- canvasBackground: [string, string, string, string, string];
360
- elementStroke: [string, string, string, string, string];
361
- elementBackground: [string, string, string, string, string];
362
- };
363
- };
364
- allowWheelZoom?: boolean;
365
- allowPinchZoom?: boolean;
366
- disableContextMenu: boolean;
367
- pinnedScripts?: string[];
368
- customPens?: any[];
369
- currentStrokeOptions?: any;
370
- resetCustomPen?: any;
371
- gridColor: {
372
- Bold: string;
373
- Regular: string;
374
- };
375
- gridDirection: {
376
- horizontal: boolean;
377
- vertical: boolean;
378
- };
379
- highlightSearchResult: boolean;
380
- dynamicStyle: {
381
- [x: string]: string;
382
- };
383
- frameColor: {
384
- stroke: string;
385
- fill: string;
386
- nameColor: string;
387
- };
388
- invertBindingBehaviour: boolean;
389
- selectedLinearElement: LinearElementEditor | null;
390
- snapLines: readonly SnapLine[];
391
- originSnapOffset: {
392
- x: number;
393
- y: number;
394
- } | null;
395
- objectsSnapModeEnabled: boolean;
396
- /** the user's socket id & username who is being followed on the canvas */
397
- userToFollow: UserToFollow | null;
398
- /** the socket ids of the users following the current user */
399
- followedBy: Set<SocketId>;
400
- /** image cropping */
401
- isCropping: boolean;
402
- croppingElementId: ExcalidrawElement["id"] | null;
403
- /** null if no search matches found / search closed */
404
- searchMatches: Readonly<{
405
- focusedId: ExcalidrawElement["id"] | null;
406
- matches: readonly SearchMatch[];
407
- }> | null;
408
- /** the locked element/group that's active and shows unlock popup */
409
- activeLockedId: string | null;
410
- lockedMultiSelections: {
411
- [groupId: string]: true;
412
- };
413
- bindMode: BindMode;
414
- }
415
- export type SearchMatch = {
416
- id: string;
417
- focus: boolean;
418
- matchedLines: {
419
- offsetX: number;
420
- offsetY: number;
421
- width: number;
422
- height: number;
423
- showOnCanvas: boolean;
424
- }[];
425
- };
426
- export type UIAppState = Omit<AppState, "startBoundElement" | "cursorButton" | "scrollX" | "scrollY">;
427
- export type NormalizedZoomValue = number & {
428
- _brand: "normalizedZoom";
429
- };
430
- export type Zoom = Readonly<{
431
- value: NormalizedZoomValue;
432
- }>;
433
- export type PointerCoords = Readonly<{
434
- x: number;
435
- y: number;
436
- }>;
437
- export type Gesture = {
438
- pointers: Map<number, PointerCoords>;
439
- lastCenter: {
440
- x: number;
441
- y: number;
442
- } | null;
443
- initialDistance: number | null;
444
- initialScale: number | null;
445
- };
446
- export declare class GestureEvent extends UIEvent {
447
- readonly rotation: number;
448
- readonly scale: number;
449
- }
450
- /** @deprecated legacy: do not use outside of migration paths */
451
- export type LibraryItem_v1 = readonly NonDeleted<ExcalidrawElement>[];
452
- /** @deprecated legacy: do not use outside of migration paths */
453
- type LibraryItems_v1 = readonly LibraryItem_v1[];
454
- /** v2 library item */
455
- export type LibraryItem = {
456
- id: string;
457
- status: "published" | "unpublished";
458
- elements: readonly NonDeleted<ExcalidrawElement>[];
459
- /** timestamp in epoch (ms) */
460
- created: number;
461
- name?: string;
462
- error?: string;
463
- };
464
- export type LibraryItems = readonly LibraryItem[];
465
- export type LibraryItems_anyVersion = LibraryItems | LibraryItems_v1;
466
- export type LibraryItemsSource = ((currentLibraryItems: LibraryItems) => MaybePromise<LibraryItems_anyVersion | Blob>) | MaybePromise<LibraryItems_anyVersion | Blob>;
467
- export type ExcalidrawInitialDataState = Merge<ImportedDataState, {
468
- libraryItems?: MaybePromise<Required<ImportedDataState>["libraryItems"]>;
469
- }>;
470
- export type OnUserFollowedPayload = {
471
- userToFollow: UserToFollow;
472
- action: "FOLLOW" | "UNFOLLOW";
473
- };
474
- export interface ExcalidrawProps {
475
- onChange?: (elements: readonly OrderedExcalidrawElement[], appState: AppState, files: BinaryFiles) => void;
476
- onIncrement?: (event: DurableIncrement | EphemeralIncrement) => void;
477
- initialData?: (() => MaybePromise<ExcalidrawInitialDataState | null>) | MaybePromise<ExcalidrawInitialDataState | null>;
478
- excalidrawAPI?: (api: ExcalidrawImperativeAPI) => void;
479
- isCollaborating?: boolean;
480
- onPointerUpdate?: (payload: {
481
- pointer: {
482
- x: number;
483
- y: number;
484
- tool: "pointer" | "laser";
485
- };
486
- button: "down" | "up";
487
- pointersMap: Gesture["pointers"];
488
- }) => void;
489
- onPaste?: (data: ClipboardData, event: ClipboardEvent | null) => Promise<boolean> | boolean;
490
- onDrop?: (event: React.DragEvent<HTMLDivElement>) => Promise<boolean> | boolean;
491
- /**
492
- * Called when element(s) are duplicated so you can listen or modify as
493
- * needed.
494
- *
495
- * Called when duplicating via mouse-drag, keyboard, paste, library insert
496
- * etc.
497
- *
498
- * Returned elements will be used in place of the next elements
499
- * (you should return all elements, including deleted, and not mutate
500
- * the element if changes are made)
501
- */
502
- onDuplicate?: (nextElements: readonly ExcalidrawElement[],
503
- /** excludes the duplicated elements */
504
- prevElements: readonly ExcalidrawElement[]) => ExcalidrawElement[] | void;
505
- renderTopLeftUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
506
- renderTopRightUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
507
- langCode?: Language["code"];
508
- viewModeEnabled?: boolean;
509
- zenModeEnabled?: boolean;
510
- gridModeEnabled?: boolean;
511
- objectsSnapModeEnabled?: boolean;
512
- libraryReturnUrl?: string;
513
- initState?: AppState;
514
- theme?: Theme;
515
- name?: string;
516
- renderCustomStats?: (elements: readonly NonDeletedExcalidrawElement[], appState: UIAppState) => JSX.Element;
517
- UIOptions?: Partial<UIOptions>;
518
- detectScroll?: boolean;
519
- handleKeyboardGlobally?: boolean;
520
- onLibraryChange?: (libraryItems: LibraryItems) => void | Promise<any>;
521
- autoFocus?: boolean;
522
- onBeforeTextEdit?: (textElement: ExcalidrawTextElement, isExistingElement: boolean) => string;
523
- onBeforeTextSubmit?: (textElement: ExcalidrawTextElement, nextText: string, //wrapped
524
- nextOriginalText: string, isDeleted: boolean) => {
525
- updatedNextOriginalText: string;
526
- nextLink: string;
527
- };
528
- generateIdForFile?: (file: File) => string | Promise<string>;
529
- onThemeChange?: (newTheme: string) => void;
530
- onViewModeChange?: (isViewModeEnabled: boolean) => void;
531
- generateLinkForSelection?: (id: string, type: "element" | "group") => string;
532
- onLinkOpen?: (element: NonDeletedExcalidrawElement, event: CustomEvent<{
533
- nativeEvent: MouseEvent | React.PointerEvent<HTMLCanvasElement>;
534
- }>) => void;
535
- onLinkHover?: (element: NonDeletedExcalidrawElement, event: React.PointerEvent<HTMLCanvasElement>) => void;
536
- onPointerDown?: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState) => void;
537
- onPointerUp?: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState) => void;
538
- onScrollChange?: (scrollX: number, scrollY: number, zoom: Zoom) => void;
539
- onUserFollow?: (payload: OnUserFollowedPayload) => void;
540
- children?: React.ReactNode;
541
- validateEmbeddable?: boolean | string[] | RegExp | RegExp[] | ((link: string) => boolean | undefined);
542
- renderEmbeddable?: (element: NonDeleted<ExcalidrawEmbeddableElement>, appState: AppState) => JSX.Element | null;
543
- renderWebview?: boolean;
544
- renderEmbeddableMenu?: (appState: AppState) => JSX.Element | null;
545
- renderMermaid?: boolean;
546
- onContextMenu?: (element: readonly NonDeletedExcalidrawElement[], appState: AppState, onClose: (callback?: () => void) => void) => JSX.Element | null;
547
- aiEnabled?: boolean;
548
- showDeprecatedFonts?: boolean;
549
- insertLinkAction?: (linkVal: string) => void;
550
- renderScrollbars?: boolean;
551
- }
552
- export type SceneData = {
553
- elements?: ImportedDataState["elements"];
554
- appState?: ImportedDataState["appState"];
555
- collaborators?: Map<SocketId, Collaborator>;
556
- captureUpdate?: CaptureUpdateActionType;
557
- };
558
- export type ExportOpts = {
559
- saveFileToDisk?: boolean;
560
- onExportToBackend?: (exportedElements: readonly NonDeletedExcalidrawElement[], appState: UIAppState, files: BinaryFiles) => void;
561
- renderCustomUI?: (exportedElements: readonly NonDeletedExcalidrawElement[], appState: UIAppState, files: BinaryFiles, canvas: HTMLCanvasElement) => JSX.Element;
562
- };
563
- export type CanvasActions = Partial<{
564
- changeViewBackgroundColor: boolean;
565
- clearCanvas: boolean;
566
- export: false | ExportOpts;
567
- loadScene: boolean;
568
- saveToActiveFile: boolean;
569
- toggleTheme: boolean | null;
570
- saveAsImage: boolean;
571
- }>;
572
- export type UIOptions = Partial<{
573
- dockedSidebarBreakpoint: number;
574
- canvasActions: CanvasActions;
575
- tools: {
576
- image: boolean;
577
- };
578
- /**
579
- * Optionally control the editor form factor and desktop UI mode from the host app.
580
- * If not provided, we will take care of it internally.
581
- */
582
- formFactor?: EditorInterface["formFactor"];
583
- desktopUIMode?: EditorInterface["desktopUIMode"];
584
- /** @deprecated does nothing. Will be removed in 0.15 */
585
- welcomeScreen?: boolean;
586
- }>;
587
- export type AppProps = Merge<ExcalidrawProps, {
588
- UIOptions: Merge<UIOptions, {
589
- canvasActions: Required<CanvasActions> & {
590
- export: ExportOpts;
591
- };
592
- }>;
593
- detectScroll: boolean;
594
- handleKeyboardGlobally: boolean;
595
- isCollaborating: boolean;
596
- children?: React.ReactNode;
597
- aiEnabled: boolean;
598
- }>;
599
- /** A subset of App class properties that we need to use elsewhere
600
- * in the app, eg Manager. Factored out into a separate type to keep DRY. */
601
- export type AppClassProperties = {
602
- props: AppProps;
603
- state: AppState;
604
- interactiveCanvas: HTMLCanvasElement | null;
605
- /** static canvas */
606
- canvas: HTMLCanvasElement;
607
- focusContainer(): void;
608
- library: Library;
609
- imageCache: Map<FileId, {
610
- image: HTMLImageElement | Promise<HTMLImageElement>;
611
- mimeType: ValueOf<typeof IMAGE_MIME_TYPES>;
612
- }>;
613
- files: BinaryFiles;
614
- editorInterface: App["editorInterface"];
615
- scene: App["scene"];
616
- syncActionResult: App["syncActionResult"];
617
- fonts: App["fonts"];
618
- pasteFromClipboard: App["pasteFromClipboard"];
619
- id: App["id"];
620
- onInsertElements: App["onInsertElements"];
621
- onExportImage: App["onExportImage"];
622
- lastViewportPosition: App["lastViewportPosition"];
623
- scrollToContent: App["scrollToContent"];
624
- addFiles: App["addFiles"];
625
- addElementsFromPasteOrLibrary: App["addElementsFromPasteOrLibrary"];
626
- setSelection: App["setSelection"];
627
- togglePenMode: App["togglePenMode"];
628
- toggleLock: App["toggleLock"];
629
- setActiveTool: App["setActiveTool"];
630
- setOpenDialog: App["setOpenDialog"];
631
- insertEmbeddableElement: App["insertEmbeddableElement"];
632
- onMagicframeToolSelect: App["onMagicframeToolSelect"];
633
- getName: App["getName"];
634
- dismissLinearEditor: App["dismissLinearEditor"];
635
- flowChartCreator: App["flowChartCreator"];
636
- getEffectiveGridSize: App["getEffectiveGridSize"];
637
- setPlugins: App["setPlugins"];
638
- plugins: App["plugins"];
639
- getEditorUIOffsets: App["getEditorUIOffsets"];
640
- visibleElements: App["visibleElements"];
641
- excalidrawContainerValue: App["excalidrawContainerValue"];
642
- onPointerUpEmitter: App["onPointerUpEmitter"];
643
- updateEditorAtom: App["updateEditorAtom"];
644
- onPointerDownEmitter: App["onPointerDownEmitter"];
645
- bindModeHandler: App["bindModeHandler"];
646
- };
647
- export type PointerDownState = Readonly<{
648
- origin: Readonly<{
649
- x: number;
650
- y: number;
651
- }>;
652
- originInGrid: Readonly<{
653
- x: number;
654
- y: number;
655
- }>;
656
- scrollbars: ReturnType<typeof isOverScrollBars>;
657
- lastCoords: {
658
- x: number;
659
- y: number;
660
- };
661
- originalElements: Map<string, NonDeleted<ExcalidrawElement>>;
662
- resize: {
663
- handleType: MaybeTransformHandleType;
664
- isResizing: boolean;
665
- offset: {
666
- x: number;
667
- y: number;
668
- };
669
- arrowDirection: "origin" | "end";
670
- center: {
671
- x: number;
672
- y: number;
673
- };
674
- };
675
- hit: {
676
- element: NonDeleted<ExcalidrawElement> | null;
677
- allHitElements: NonDeleted<ExcalidrawElement>[];
678
- wasAddedToSelection: boolean;
679
- hasBeenDuplicated: boolean;
680
- hasHitCommonBoundingBoxOfSelectedElements: boolean;
681
- };
682
- withCmdOrCtrl: boolean;
683
- drag: {
684
- hasOccurred: boolean;
685
- offset: {
686
- x: number;
687
- y: number;
688
- } | null;
689
- origin: {
690
- x: number;
691
- y: number;
692
- };
693
- blockDragging: boolean;
694
- };
695
- eventListeners: {
696
- onMove: null | ReturnType<typeof throttleRAF>;
697
- onUp: null | ((event: PointerEvent) => void);
698
- onKeyDown: null | ((event: KeyboardEvent) => void);
699
- onKeyUp: null | ((event: KeyboardEvent) => void);
700
- };
701
- boxSelection: {
702
- hasOccurred: boolean;
703
- };
704
- }>;
705
- export type UnsubscribeCallback = () => void;
706
- export interface ExcalidrawImperativeAPI {
707
- updateScene: InstanceType<typeof App>["updateScene"];
708
- applyDeltas: InstanceType<typeof App>["applyDeltas"];
709
- mutateElement: InstanceType<typeof App>["mutateElement"];
710
- updateLibrary: InstanceType<typeof Library>["updateLibrary"];
711
- resetScene: InstanceType<typeof App>["resetScene"];
712
- getSceneElementsIncludingDeleted: InstanceType<typeof App>["getSceneElementsIncludingDeleted"];
713
- getSceneElementsMapIncludingDeleted: InstanceType<typeof App>["getSceneElementsMapIncludingDeleted"];
714
- history: {
715
- clear: InstanceType<typeof App>["resetHistory"];
716
- };
717
- setForceRenderAllEmbeddables: InstanceType<typeof App>["setForceRenderAllEmbeddables"];
718
- zoomToFit: InstanceType<typeof App>["zoomToFit"];
719
- refreshEditorInterface: InstanceType<typeof App>["refreshEditorInterface"];
720
- isTouchScreen: InstanceType<typeof App>["isTouchScreen"];
721
- setTrayModeEnabled: InstanceType<typeof App>["setTrayModeEnabled"];
722
- setDesktopUIMode: InstanceType<typeof App>["setDesktopUIMode"];
723
- setMobileModeAllowed: InstanceType<typeof App>["setMobileModeAllowed"];
724
- isTrayModeEnabled: InstanceType<typeof App>["isTrayModeEnabled"];
725
- getColorAtScenePoint: InstanceType<typeof App>["getColorAtScenePoint"];
726
- startLineEditor: InstanceType<typeof App>["startLineEditor"];
727
- getSceneElements: InstanceType<typeof App>["getSceneElements"];
728
- getAppState: () => InstanceType<typeof App>["state"];
729
- getFiles: () => InstanceType<typeof App>["files"];
730
- getName: InstanceType<typeof App>["getName"];
731
- scrollToContent: InstanceType<typeof App>["scrollToContent"];
732
- registerAction: (action: Action) => void;
733
- refresh: InstanceType<typeof App>["refresh"];
734
- setToast: InstanceType<typeof App>["setToast"];
735
- addFiles: (data: BinaryFileData[]) => void;
736
- updateContainerSize: InstanceType<typeof App>["updateContainerSize"];
737
- id: string;
738
- selectElements: (elements: readonly ExcalidrawElement[], highlightSearchResult?: boolean) => void;
739
- sendBackward: (elements: readonly ExcalidrawElement[]) => void;
740
- bringForward: (elements: readonly ExcalidrawElement[]) => void;
741
- sendToBack: (elements: readonly ExcalidrawElement[]) => void;
742
- bringToFront: (elements: readonly ExcalidrawElement[]) => void;
743
- setActiveTool: InstanceType<typeof App>["setActiveTool"];
744
- setCursor: InstanceType<typeof App>["setCursor"];
745
- resetCursor: InstanceType<typeof App>["resetCursor"];
746
- toggleSidebar: InstanceType<typeof App>["toggleSidebar"];
747
- getHTMLIFrameElement: InstanceType<typeof App>["getHTMLIFrameElement"];
748
- getEditorInterface: () => EditorInterface;
749
- /**
750
- * Disables rendering of frames (including element clipping), but currently
751
- * the frames are still interactive in edit mode. As such, this API should be
752
- * used in conjunction with view mode (props.viewModeEnabled).
753
- */
754
- updateFrameRendering: InstanceType<typeof App>["updateFrameRendering"];
755
- onChange: (callback: (elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles) => void) => UnsubscribeCallback;
756
- onIncrement: (callback: (event: DurableIncrement | EphemeralIncrement) => void) => UnsubscribeCallback;
757
- onPointerDown: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: React.PointerEvent<HTMLElement>) => void) => UnsubscribeCallback;
758
- onPointerUp: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: PointerEvent) => void) => UnsubscribeCallback;
759
- onScrollChange: (callback: (scrollX: number, scrollY: number, zoom: Zoom) => void) => UnsubscribeCallback;
760
- onUserFollow: (callback: (payload: OnUserFollowedPayload) => void) => UnsubscribeCallback;
761
- }
762
- export type FrameNameBounds = {
763
- x: number;
764
- y: number;
765
- width: number;
766
- height: number;
767
- angle: number;
768
- };
769
- export type FrameNameBoundsCache = {
770
- get: (frameElement: ExcalidrawFrameLikeElement | ExcalidrawMagicFrameElement) => FrameNameBounds | null;
771
- _cache: Map<string, FrameNameBounds & {
772
- zoom: AppState["zoom"]["value"];
773
- versionNonce: ExcalidrawFrameLikeElement["versionNonce"];
774
- }>;
775
- };
776
- export type KeyboardModifiersObject = {
777
- ctrlKey: boolean;
778
- shiftKey: boolean;
779
- altKey: boolean;
780
- metaKey: boolean;
781
- };
782
- export type Primitive = number | string | boolean | bigint | symbol | null | undefined;
783
- export type JSONValue = string | number | boolean | null | object;
784
- export type EmbedsValidationStatus = Map<ExcalidrawIframeLikeElement["id"], boolean>;
785
- export type ElementsPendingErasure = Set<ExcalidrawElement["id"]>;
786
- export type PendingExcalidrawElements = ExcalidrawElement[];
787
- /** Runtime gridSize value. Null indicates disabled grid. */
788
- export type NullableGridSize = (AppState["gridSize"] & MakeBrand<"NullableGridSize">) | null;
789
- export type GenerateDiagramToCode = (props: {
790
- frame: ExcalidrawMagicFrameElement;
791
- children: readonly ExcalidrawElement[];
792
- }) => MaybePromise<{
793
- html: string;
794
- }>;
795
- export type Offsets = Partial<{
796
- top: number;
797
- right: number;
798
- bottom: number;
799
- left: number;
800
- }>;
801
- export {};
1
+ import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES, ColorPaletteCustom, EditorInterface } from "@excalidraw/common";
2
+ import type { LinearElementEditor } from "@excalidraw/element";
3
+ import type { MaybeTransformHandleType } from "@excalidraw/element";
4
+ import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, ExcalidrawTextElement, FileId, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement, BindMode } from "@excalidraw/element/types";
5
+ import type { Merge, MaybePromise, ValueOf, MakeBrand } from "@excalidraw/common/utility-types";
6
+ import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement } from "@excalidraw/element";
7
+ import type { Action } from "./actions/types";
8
+ import type { Spreadsheet } from "./charts";
9
+ import type { ClipboardData } from "./clipboard";
10
+ import type App from "./components/App";
11
+ import type Library from "./data/library";
12
+ import type { FileSystemHandle } from "./data/filesystem";
13
+ import type { ContextMenuItems } from "./components/ContextMenu";
14
+ import type { SnapLine } from "./snapping";
15
+ import type { ImportedDataState } from "./data/types";
16
+ import type { Language } from "./i18n";
17
+ import type { isOverScrollBars } from "./scene/scrollbars";
18
+ import type React from "react";
19
+ import type { JSX } from "react";
20
+ export type SocketId = string & {
21
+ _brand: "SocketId";
22
+ };
23
+ export type Collaborator = Readonly<{
24
+ pointer?: CollaboratorPointer;
25
+ button?: "up" | "down";
26
+ selectedElementIds?: AppState["selectedElementIds"];
27
+ username?: string | null;
28
+ userState?: UserIdleState;
29
+ color?: {
30
+ background: string;
31
+ stroke: string;
32
+ };
33
+ avatarUrl?: string;
34
+ id?: string;
35
+ socketId?: SocketId;
36
+ isCurrentUser?: boolean;
37
+ isInCall?: boolean;
38
+ isSpeaking?: boolean;
39
+ isMuted?: boolean;
40
+ }>;
41
+ export type CollaboratorPointer = {
42
+ x: number;
43
+ y: number;
44
+ tool: "pointer" | "laser";
45
+ /**
46
+ * Whether to render cursor + username. Useful when you only want to render
47
+ * laser trail.
48
+ *
49
+ * @default true
50
+ */
51
+ renderCursor?: boolean;
52
+ /**
53
+ * Explicit laser color.
54
+ *
55
+ * @default string collaborator's cursor color
56
+ */
57
+ laserColor?: string;
58
+ };
59
+ export type DataURL = string & {
60
+ _brand: "DataURL";
61
+ };
62
+ export type BinaryFileData = {
63
+ mimeType: ValueOf<typeof IMAGE_MIME_TYPES> | typeof MIME_TYPES.binary;
64
+ id: FileId;
65
+ dataURL: DataURL;
66
+ /**
67
+ * Epoch timestamp in milliseconds
68
+ */
69
+ created: number;
70
+ /**
71
+ * Indicates when the file was last retrieved from storage to be loaded
72
+ * onto the scene. We use this flag to determine whether to delete unused
73
+ * files from storage.
74
+ *
75
+ * Epoch timestamp in milliseconds.
76
+ */
77
+ lastRetrieved?: number;
78
+ /**
79
+ * indicates the version of the file. This can be used to determine whether
80
+ * the file dataURL has changed e.g. as part of restore due to schema update.
81
+ */
82
+ version?: number;
83
+ };
84
+ export type BinaryFileMetadata = Omit<BinaryFileData, "dataURL">;
85
+ export type BinaryFiles = Record<ExcalidrawElement["id"], BinaryFileData>;
86
+ export type ToolType = "selection" | "lasso" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser" | "mermaid";
87
+ export type ElementOrToolType = ExcalidrawElementType | ToolType | "custom";
88
+ export type ActiveTool = {
89
+ type: ToolType;
90
+ customType: null;
91
+ } | {
92
+ type: "custom";
93
+ customType: string;
94
+ };
95
+ export type SidebarName = string;
96
+ export type SidebarTabName = string;
97
+ export type UserToFollow = {
98
+ socketId: SocketId;
99
+ username: string;
100
+ };
101
+ type _CommonCanvasAppState = {
102
+ zoom: AppState["zoom"];
103
+ scrollX: AppState["scrollX"];
104
+ scrollY: AppState["scrollY"];
105
+ width: AppState["width"];
106
+ height: AppState["height"];
107
+ viewModeEnabled: AppState["viewModeEnabled"];
108
+ openDialog: AppState["openDialog"];
109
+ editingGroupId: AppState["editingGroupId"];
110
+ selectedElementIds: AppState["selectedElementIds"];
111
+ frameToHighlight: AppState["frameToHighlight"];
112
+ offsetLeft: AppState["offsetLeft"];
113
+ offsetTop: AppState["offsetTop"];
114
+ theme: AppState["theme"];
115
+ };
116
+ export type StaticCanvasAppState = Readonly<_CommonCanvasAppState & {
117
+ shouldCacheIgnoreZoom: AppState["shouldCacheIgnoreZoom"];
118
+ /** null indicates transparent bg */
119
+ viewBackgroundColor: AppState["viewBackgroundColor"] | null;
120
+ exportScale: AppState["exportScale"];
121
+ selectedElementsAreBeingDragged: AppState["selectedElementsAreBeingDragged"];
122
+ gridSize: AppState["gridSize"];
123
+ gridStep: AppState["gridStep"];
124
+ frameRendering: AppState["frameRendering"];
125
+ linkOpacity: AppState["linkOpacity"];
126
+ gridColor: AppState["gridColor"];
127
+ gridDirection: AppState["gridDirection"];
128
+ frameColor: AppState["frameColor"];
129
+ currentHoveredFontFamily: AppState["currentHoveredFontFamily"];
130
+ hoveredElementIds: AppState["hoveredElementIds"];
131
+ suggestedBinding: AppState["suggestedBinding"];
132
+ croppingElementId: AppState["croppingElementId"];
133
+ }>;
134
+ export type InteractiveCanvasAppState = Readonly<_CommonCanvasAppState & {
135
+ activeEmbeddable: AppState["activeEmbeddable"];
136
+ selectionElement: AppState["selectionElement"];
137
+ selectedGroupIds: AppState["selectedGroupIds"];
138
+ selectedLinearElement: AppState["selectedLinearElement"];
139
+ multiElement: AppState["multiElement"];
140
+ newElement: AppState["newElement"];
141
+ isBindingEnabled: AppState["isBindingEnabled"];
142
+ suggestedBinding: AppState["suggestedBinding"];
143
+ isRotating: AppState["isRotating"];
144
+ elementsToHighlight: AppState["elementsToHighlight"];
145
+ collaborators: AppState["collaborators"];
146
+ snapLines: AppState["snapLines"];
147
+ zenModeEnabled: AppState["zenModeEnabled"];
148
+ editingTextElement: AppState["editingTextElement"];
149
+ viewBackgroundColor: AppState["viewBackgroundColor"];
150
+ gridColor: AppState["gridColor"];
151
+ gridDirection: AppState["gridDirection"];
152
+ highlightSearchResult: AppState["highlightSearchResult"];
153
+ isCropping: AppState["isCropping"];
154
+ croppingElementId: AppState["croppingElementId"];
155
+ searchMatches: AppState["searchMatches"];
156
+ activeLockedId: AppState["activeLockedId"];
157
+ hoveredElementIds: AppState["hoveredElementIds"];
158
+ frameRendering: AppState["frameRendering"];
159
+ frameColor: AppState["frameColor"];
160
+ shouldCacheIgnoreZoom: AppState["shouldCacheIgnoreZoom"];
161
+ exportScale: AppState["exportScale"];
162
+ }>;
163
+ export type ObservedAppState = ObservedStandaloneAppState & ObservedElementsAppState;
164
+ export type ObservedStandaloneAppState = {
165
+ name: AppState["name"];
166
+ viewBackgroundColor: AppState["viewBackgroundColor"];
167
+ };
168
+ export type ObservedElementsAppState = {
169
+ editingGroupId: AppState["editingGroupId"];
170
+ selectedElementIds: AppState["selectedElementIds"];
171
+ selectedGroupIds: AppState["selectedGroupIds"];
172
+ selectedLinearElement: {
173
+ elementId: LinearElementEditor["elementId"];
174
+ isEditing: boolean;
175
+ } | null;
176
+ croppingElementId: AppState["croppingElementId"];
177
+ lockedMultiSelections: AppState["lockedMultiSelections"];
178
+ activeLockedId: AppState["activeLockedId"];
179
+ };
180
+ export interface AppState {
181
+ contextMenu: {
182
+ items: ContextMenuItems;
183
+ top: number;
184
+ left: number;
185
+ } | null;
186
+ showWelcomeScreen: boolean;
187
+ isLoading: boolean;
188
+ errorMessage: React.ReactNode;
189
+ activeEmbeddable: {
190
+ element: NonDeletedExcalidrawElement;
191
+ state: "hover" | "active";
192
+ } | null;
193
+ /**
194
+ * for a newly created element
195
+ * - set on pointer down, updated during pointer move, used on pointer up
196
+ */
197
+ newElement: NonDeleted<ExcalidrawNonSelectionElement> | null;
198
+ /**
199
+ * for a single element that's being resized
200
+ * - set on pointer down when it's selected and the active tool is selection
201
+ */
202
+ resizingElement: NonDeletedExcalidrawElement | null;
203
+ /**
204
+ * multiElement is for multi-point linear element that's created by clicking as opposed to dragging
205
+ * - when set and present, the editor will handle linear element creation logic accordingly
206
+ */
207
+ multiElement: NonDeleted<ExcalidrawLinearElement> | null;
208
+ /**
209
+ * decoupled from newElement, dragging selection only creates selectionElement
210
+ * - set on pointer down, updated during pointer move
211
+ */
212
+ selectionElement: NonDeletedExcalidrawElement | null;
213
+ isBindingEnabled: boolean;
214
+ startBoundElement: NonDeleted<ExcalidrawBindableElement> | null;
215
+ suggestedBinding: NonDeleted<ExcalidrawBindableElement> | null;
216
+ frameToHighlight: NonDeleted<ExcalidrawFrameLikeElement> | null;
217
+ frameRendering: {
218
+ enabled: boolean;
219
+ name: boolean;
220
+ outline: boolean;
221
+ clip: boolean;
222
+ markerName: boolean;
223
+ markerEnabled: boolean;
224
+ };
225
+ editingFrame: string | null;
226
+ elementsToHighlight: NonDeleted<ExcalidrawElement>[] | null;
227
+ /**
228
+ * set when a new text is created or when an existing text is being edited
229
+ */
230
+ editingTextElement: NonDeletedExcalidrawElement | null;
231
+ activeTool: {
232
+ /**
233
+ * indicates a previous tool we should revert back to if we deselect the
234
+ * currently active tool. At the moment applies to `eraser` and `hand` tool.
235
+ */
236
+ lastActiveTool: ActiveTool | null;
237
+ locked: boolean;
238
+ fromSelection: boolean;
239
+ } & ActiveTool;
240
+ preferredSelectionTool: {
241
+ type: "selection" | "lasso";
242
+ initialized: boolean;
243
+ };
244
+ penMode: boolean;
245
+ penDetected: boolean;
246
+ exportBackground: boolean;
247
+ exportEmbedScene: boolean;
248
+ exportWithDarkMode: boolean;
249
+ exportScale: number;
250
+ currentItemStrokeColor: string;
251
+ currentItemBackgroundColor: string;
252
+ currentItemFillStyle: ExcalidrawElement["fillStyle"];
253
+ currentItemStrokeWidth: number;
254
+ currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
255
+ currentItemRoughness: number;
256
+ currentItemOpacity: number;
257
+ currentItemFontFamily: FontFamilyValues;
258
+ currentItemFontSize: number;
259
+ currentItemTextAlign: TextAlign;
260
+ currentItemStartArrowhead: Arrowhead | null;
261
+ currentItemEndArrowhead: Arrowhead | null;
262
+ currentHoveredFontFamily: FontFamilyValues | null;
263
+ currentItemRoundness: StrokeRoundness;
264
+ currentItemArrowType: "sharp" | "round" | "elbow";
265
+ currentItemFrameRole: ExcalidrawFrameLikeElement["frameRole"] | null;
266
+ viewBackgroundColor: string;
267
+ scrollX: number;
268
+ scrollY: number;
269
+ cursorButton: "up" | "down";
270
+ scrolledOutside: boolean;
271
+ name: string | null;
272
+ isResizing: boolean;
273
+ isRotating: boolean;
274
+ zoom: Zoom;
275
+ openMenu: "canvas" | "shape" | null;
276
+ openPopup: "canvasBackground" | "elementBackground" | "elementStroke" | "fontFamily" | "compactTextProperties" | "compactStrokeStyles" | "compactOtherProperties" | "compactArrowProperties" | null;
277
+ openSidebar: {
278
+ name: SidebarName;
279
+ tab?: SidebarTabName;
280
+ } | null;
281
+ openDialog: null | {
282
+ name: "imageExport" | "help" | "jsonExport";
283
+ } | {
284
+ name: "ttd";
285
+ tab: "text-to-diagram" | "mermaid";
286
+ } | {
287
+ name: "commandPalette";
288
+ } | {
289
+ name: "settings";
290
+ } | {
291
+ name: "elementLinkSelector";
292
+ sourceElementId: ExcalidrawElement["id"];
293
+ };
294
+ /**
295
+ * Reflects user preference for whether the default sidebar should be docked.
296
+ *
297
+ * NOTE this is only a user preference and does not reflect the actual docked
298
+ * state of the sidebar, because the host apps can override this through
299
+ * a DefaultSidebar prop, which is not reflected back to the appState.
300
+ */
301
+ defaultSidebarDockedPreference: boolean;
302
+ lastPointerDownWith: PointerType;
303
+ selectedElementIds: Readonly<{
304
+ [id: string]: true;
305
+ }>;
306
+ hoveredElementIds: Readonly<{
307
+ [id: string]: true;
308
+ }>;
309
+ previousSelectedElementIds: {
310
+ [id: string]: true;
311
+ };
312
+ selectedElementsAreBeingDragged: boolean;
313
+ shouldCacheIgnoreZoom: boolean;
314
+ toast: {
315
+ message: string;
316
+ closable?: boolean;
317
+ duration?: number;
318
+ } | null;
319
+ zenModeEnabled: boolean;
320
+ theme: Theme;
321
+ /** grid cell px size */
322
+ gridSize: number;
323
+ gridStep: number;
324
+ gridModeEnabled: boolean;
325
+ viewModeEnabled: boolean;
326
+ /** top-most selected groups (i.e. does not include nested groups) */
327
+ selectedGroupIds: {
328
+ [groupId: string]: boolean;
329
+ };
330
+ /** group being edited when you drill down to its constituent element
331
+ (e.g. when you double-click on a group's element) */
332
+ editingGroupId: GroupId | null;
333
+ width: number;
334
+ height: number;
335
+ offsetTop: number;
336
+ offsetLeft: number;
337
+ fileHandle: FileSystemHandle | null;
338
+ collaborators: Map<SocketId, Collaborator>;
339
+ stats: {
340
+ open: boolean;
341
+ /** bitmap. Use `STATS_PANELS` bit values */
342
+ panels: number;
343
+ };
344
+ currentChartType: ChartType;
345
+ pasteDialog: {
346
+ shown: false;
347
+ data: null;
348
+ } | {
349
+ shown: true;
350
+ data: Spreadsheet;
351
+ };
352
+ showHyperlinkPopup: false | "info" | "editor";
353
+ linkOpacity: number;
354
+ colorPalette?: {
355
+ canvasBackground: ColorPaletteCustom;
356
+ elementBackground: ColorPaletteCustom;
357
+ elementStroke: ColorPaletteCustom;
358
+ topPicks: {
359
+ canvasBackground: [string, string, string, string, string];
360
+ elementStroke: [string, string, string, string, string];
361
+ elementBackground: [string, string, string, string, string];
362
+ };
363
+ };
364
+ allowWheelZoom?: boolean;
365
+ allowPinchZoom?: boolean;
366
+ disableContextMenu: boolean;
367
+ pinnedScripts?: string[];
368
+ customPens?: any[];
369
+ currentStrokeOptions?: any;
370
+ resetCustomPen?: any;
371
+ gridColor: {
372
+ Bold: string;
373
+ Regular: string;
374
+ };
375
+ gridDirection: {
376
+ horizontal: boolean;
377
+ vertical: boolean;
378
+ };
379
+ highlightSearchResult: boolean;
380
+ dynamicStyle: {
381
+ [x: string]: string;
382
+ };
383
+ frameColor: {
384
+ stroke: string;
385
+ fill: string;
386
+ nameColor: string;
387
+ };
388
+ invertBindingBehaviour: boolean;
389
+ selectedLinearElement: LinearElementEditor | null;
390
+ snapLines: readonly SnapLine[];
391
+ originSnapOffset: {
392
+ x: number;
393
+ y: number;
394
+ } | null;
395
+ objectsSnapModeEnabled: boolean;
396
+ /** the user's socket id & username who is being followed on the canvas */
397
+ userToFollow: UserToFollow | null;
398
+ /** the socket ids of the users following the current user */
399
+ followedBy: Set<SocketId>;
400
+ /** image cropping */
401
+ isCropping: boolean;
402
+ croppingElementId: ExcalidrawElement["id"] | null;
403
+ /** null if no search matches found / search closed */
404
+ searchMatches: Readonly<{
405
+ focusedId: ExcalidrawElement["id"] | null;
406
+ matches: readonly SearchMatch[];
407
+ }> | null;
408
+ /** the locked element/group that's active and shows unlock popup */
409
+ activeLockedId: string | null;
410
+ lockedMultiSelections: {
411
+ [groupId: string]: true;
412
+ };
413
+ bindMode: BindMode;
414
+ }
415
+ export type SearchMatch = {
416
+ id: string;
417
+ focus: boolean;
418
+ matchedLines: {
419
+ offsetX: number;
420
+ offsetY: number;
421
+ width: number;
422
+ height: number;
423
+ showOnCanvas: boolean;
424
+ }[];
425
+ };
426
+ export type UIAppState = Omit<AppState, "startBoundElement" | "cursorButton" | "scrollX" | "scrollY">;
427
+ export type NormalizedZoomValue = number & {
428
+ _brand: "normalizedZoom";
429
+ };
430
+ export type Zoom = Readonly<{
431
+ value: NormalizedZoomValue;
432
+ }>;
433
+ export type PointerCoords = Readonly<{
434
+ x: number;
435
+ y: number;
436
+ }>;
437
+ export type Gesture = {
438
+ pointers: Map<number, PointerCoords>;
439
+ lastCenter: {
440
+ x: number;
441
+ y: number;
442
+ } | null;
443
+ initialDistance: number | null;
444
+ initialScale: number | null;
445
+ };
446
+ export declare class GestureEvent extends UIEvent {
447
+ readonly rotation: number;
448
+ readonly scale: number;
449
+ }
450
+ /** @deprecated legacy: do not use outside of migration paths */
451
+ export type LibraryItem_v1 = readonly NonDeleted<ExcalidrawElement>[];
452
+ /** @deprecated legacy: do not use outside of migration paths */
453
+ type LibraryItems_v1 = readonly LibraryItem_v1[];
454
+ /** v2 library item */
455
+ export type LibraryItem = {
456
+ id: string;
457
+ status: "published" | "unpublished";
458
+ elements: readonly NonDeleted<ExcalidrawElement>[];
459
+ /** timestamp in epoch (ms) */
460
+ created: number;
461
+ name?: string;
462
+ error?: string;
463
+ };
464
+ export type LibraryItems = readonly LibraryItem[];
465
+ export type LibraryItems_anyVersion = LibraryItems | LibraryItems_v1;
466
+ export type LibraryItemsSource = ((currentLibraryItems: LibraryItems) => MaybePromise<LibraryItems_anyVersion | Blob>) | MaybePromise<LibraryItems_anyVersion | Blob>;
467
+ export type ExcalidrawInitialDataState = Merge<ImportedDataState, {
468
+ libraryItems?: MaybePromise<Required<ImportedDataState>["libraryItems"]>;
469
+ }>;
470
+ export type OnUserFollowedPayload = {
471
+ userToFollow: UserToFollow;
472
+ action: "FOLLOW" | "UNFOLLOW";
473
+ };
474
+ export interface ExcalidrawProps {
475
+ onChange?: (elements: readonly OrderedExcalidrawElement[], appState: AppState, files: BinaryFiles) => void;
476
+ onIncrement?: (event: DurableIncrement | EphemeralIncrement) => void;
477
+ initialData?: (() => MaybePromise<ExcalidrawInitialDataState | null>) | MaybePromise<ExcalidrawInitialDataState | null>;
478
+ excalidrawAPI?: (api: ExcalidrawImperativeAPI) => void;
479
+ isCollaborating?: boolean;
480
+ onPointerUpdate?: (payload: {
481
+ pointer: {
482
+ x: number;
483
+ y: number;
484
+ tool: "pointer" | "laser";
485
+ };
486
+ button: "down" | "up";
487
+ pointersMap: Gesture["pointers"];
488
+ }) => void;
489
+ onPaste?: (data: ClipboardData, event: ClipboardEvent | null) => Promise<boolean> | boolean;
490
+ onDrop?: (event: React.DragEvent<HTMLDivElement>) => Promise<boolean> | boolean;
491
+ /**
492
+ * Called when element(s) are duplicated so you can listen or modify as
493
+ * needed.
494
+ *
495
+ * Called when duplicating via mouse-drag, keyboard, paste, library insert
496
+ * etc.
497
+ *
498
+ * Returned elements will be used in place of the next elements
499
+ * (you should return all elements, including deleted, and not mutate
500
+ * the element if changes are made)
501
+ */
502
+ onDuplicate?: (nextElements: readonly ExcalidrawElement[],
503
+ /** excludes the duplicated elements */
504
+ prevElements: readonly ExcalidrawElement[]) => ExcalidrawElement[] | void;
505
+ renderTopLeftUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
506
+ renderTopRightUI?: (isMobile: boolean, appState: UIAppState) => JSX.Element | null;
507
+ langCode?: Language["code"];
508
+ viewModeEnabled?: boolean;
509
+ zenModeEnabled?: boolean;
510
+ gridModeEnabled?: boolean;
511
+ objectsSnapModeEnabled?: boolean;
512
+ libraryReturnUrl?: string;
513
+ initState?: AppState;
514
+ theme?: Theme;
515
+ name?: string;
516
+ renderCustomStats?: (elements: readonly NonDeletedExcalidrawElement[], appState: UIAppState) => JSX.Element;
517
+ UIOptions?: Partial<UIOptions>;
518
+ detectScroll?: boolean;
519
+ handleKeyboardGlobally?: boolean;
520
+ onLibraryChange?: (libraryItems: LibraryItems) => void | Promise<any>;
521
+ autoFocus?: boolean;
522
+ onBeforeTextEdit?: (textElement: ExcalidrawTextElement, isExistingElement: boolean) => string;
523
+ onBeforeTextSubmit?: (textElement: ExcalidrawTextElement, nextText: string, //wrapped
524
+ nextOriginalText: string, isDeleted: boolean) => {
525
+ updatedNextOriginalText: string;
526
+ nextLink: string;
527
+ };
528
+ generateIdForFile?: (file: File) => string | Promise<string>;
529
+ onThemeChange?: (newTheme: string) => void;
530
+ onViewModeChange?: (isViewModeEnabled: boolean) => void;
531
+ generateLinkForSelection?: (id: string, type: "element" | "group") => string;
532
+ onLinkOpen?: (element: NonDeletedExcalidrawElement, event: CustomEvent<{
533
+ nativeEvent: MouseEvent | React.PointerEvent<HTMLCanvasElement>;
534
+ }>) => void;
535
+ onLinkHover?: (element: NonDeletedExcalidrawElement, event: React.PointerEvent<HTMLCanvasElement>) => void;
536
+ onPointerDown?: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState) => void;
537
+ onPointerUp?: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState) => void;
538
+ onScrollChange?: (scrollX: number, scrollY: number, zoom: Zoom) => void;
539
+ onUserFollow?: (payload: OnUserFollowedPayload) => void;
540
+ children?: React.ReactNode;
541
+ validateEmbeddable?: boolean | string[] | RegExp | RegExp[] | ((link: string) => boolean | undefined);
542
+ renderEmbeddable?: (element: NonDeleted<ExcalidrawEmbeddableElement>, appState: AppState) => JSX.Element | null;
543
+ renderWebview?: boolean;
544
+ renderEmbeddableMenu?: (appState: AppState) => JSX.Element | null;
545
+ renderMermaid?: boolean;
546
+ onContextMenu?: (element: readonly NonDeletedExcalidrawElement[], appState: AppState, onClose: (callback?: () => void) => void) => JSX.Element | null;
547
+ aiEnabled?: boolean;
548
+ showDeprecatedFonts?: boolean;
549
+ insertLinkAction?: (linkVal: string) => void;
550
+ renderScrollbars?: boolean;
551
+ }
552
+ export type SceneData = {
553
+ elements?: ImportedDataState["elements"];
554
+ appState?: ImportedDataState["appState"];
555
+ collaborators?: Map<SocketId, Collaborator>;
556
+ captureUpdate?: CaptureUpdateActionType;
557
+ };
558
+ export type ExportOpts = {
559
+ saveFileToDisk?: boolean;
560
+ onExportToBackend?: (exportedElements: readonly NonDeletedExcalidrawElement[], appState: UIAppState, files: BinaryFiles) => void;
561
+ renderCustomUI?: (exportedElements: readonly NonDeletedExcalidrawElement[], appState: UIAppState, files: BinaryFiles, canvas: HTMLCanvasElement) => JSX.Element;
562
+ };
563
+ export type CanvasActions = Partial<{
564
+ changeViewBackgroundColor: boolean;
565
+ clearCanvas: boolean;
566
+ export: false | ExportOpts;
567
+ loadScene: boolean;
568
+ saveToActiveFile: boolean;
569
+ toggleTheme: boolean | null;
570
+ saveAsImage: boolean;
571
+ }>;
572
+ export type UIOptions = Partial<{
573
+ dockedSidebarBreakpoint: number;
574
+ canvasActions: CanvasActions;
575
+ tools: {
576
+ image: boolean;
577
+ };
578
+ /**
579
+ * Optionally control the editor form factor and desktop UI mode from the host app.
580
+ * If not provided, we will take care of it internally.
581
+ */
582
+ formFactor?: EditorInterface["formFactor"];
583
+ desktopUIMode?: EditorInterface["desktopUIMode"];
584
+ /** @deprecated does nothing. Will be removed in 0.15 */
585
+ welcomeScreen?: boolean;
586
+ }>;
587
+ export type AppProps = Merge<ExcalidrawProps, {
588
+ UIOptions: Merge<UIOptions, {
589
+ canvasActions: Required<CanvasActions> & {
590
+ export: ExportOpts;
591
+ };
592
+ }>;
593
+ detectScroll: boolean;
594
+ handleKeyboardGlobally: boolean;
595
+ isCollaborating: boolean;
596
+ children?: React.ReactNode;
597
+ aiEnabled: boolean;
598
+ }>;
599
+ /** A subset of App class properties that we need to use elsewhere
600
+ * in the app, eg Manager. Factored out into a separate type to keep DRY. */
601
+ export type AppClassProperties = {
602
+ props: AppProps;
603
+ state: AppState;
604
+ interactiveCanvas: HTMLCanvasElement | null;
605
+ /** static canvas */
606
+ canvas: HTMLCanvasElement;
607
+ focusContainer(): void;
608
+ library: Library;
609
+ imageCache: Map<FileId, {
610
+ image: HTMLImageElement | Promise<HTMLImageElement>;
611
+ mimeType: ValueOf<typeof IMAGE_MIME_TYPES>;
612
+ }>;
613
+ files: BinaryFiles;
614
+ editorInterface: App["editorInterface"];
615
+ scene: App["scene"];
616
+ syncActionResult: App["syncActionResult"];
617
+ fonts: App["fonts"];
618
+ pasteFromClipboard: App["pasteFromClipboard"];
619
+ id: App["id"];
620
+ onInsertElements: App["onInsertElements"];
621
+ onExportImage: App["onExportImage"];
622
+ lastViewportPosition: App["lastViewportPosition"];
623
+ scrollToContent: App["scrollToContent"];
624
+ addFiles: App["addFiles"];
625
+ addElementsFromPasteOrLibrary: App["addElementsFromPasteOrLibrary"];
626
+ setSelection: App["setSelection"];
627
+ togglePenMode: App["togglePenMode"];
628
+ toggleLock: App["toggleLock"];
629
+ setActiveTool: App["setActiveTool"];
630
+ setOpenDialog: App["setOpenDialog"];
631
+ insertEmbeddableElement: App["insertEmbeddableElement"];
632
+ onMagicframeToolSelect: App["onMagicframeToolSelect"];
633
+ getName: App["getName"];
634
+ dismissLinearEditor: App["dismissLinearEditor"];
635
+ flowChartCreator: App["flowChartCreator"];
636
+ getEffectiveGridSize: App["getEffectiveGridSize"];
637
+ setPlugins: App["setPlugins"];
638
+ plugins: App["plugins"];
639
+ getEditorUIOffsets: App["getEditorUIOffsets"];
640
+ visibleElements: App["visibleElements"];
641
+ excalidrawContainerValue: App["excalidrawContainerValue"];
642
+ onPointerUpEmitter: App["onPointerUpEmitter"];
643
+ updateEditorAtom: App["updateEditorAtom"];
644
+ onPointerDownEmitter: App["onPointerDownEmitter"];
645
+ bindModeHandler: App["bindModeHandler"];
646
+ };
647
+ export type PointerDownState = Readonly<{
648
+ origin: Readonly<{
649
+ x: number;
650
+ y: number;
651
+ }>;
652
+ originInGrid: Readonly<{
653
+ x: number;
654
+ y: number;
655
+ }>;
656
+ scrollbars: ReturnType<typeof isOverScrollBars>;
657
+ lastCoords: {
658
+ x: number;
659
+ y: number;
660
+ };
661
+ originalElements: Map<string, NonDeleted<ExcalidrawElement>>;
662
+ resize: {
663
+ handleType: MaybeTransformHandleType;
664
+ isResizing: boolean;
665
+ offset: {
666
+ x: number;
667
+ y: number;
668
+ };
669
+ arrowDirection: "origin" | "end";
670
+ center: {
671
+ x: number;
672
+ y: number;
673
+ };
674
+ };
675
+ hit: {
676
+ element: NonDeleted<ExcalidrawElement> | null;
677
+ allHitElements: NonDeleted<ExcalidrawElement>[];
678
+ wasAddedToSelection: boolean;
679
+ hasBeenDuplicated: boolean;
680
+ hasHitCommonBoundingBoxOfSelectedElements: boolean;
681
+ };
682
+ withCmdOrCtrl: boolean;
683
+ drag: {
684
+ hasOccurred: boolean;
685
+ offset: {
686
+ x: number;
687
+ y: number;
688
+ } | null;
689
+ origin: {
690
+ x: number;
691
+ y: number;
692
+ };
693
+ blockDragging: boolean;
694
+ };
695
+ eventListeners: {
696
+ onMove: null | ReturnType<typeof throttleRAF>;
697
+ onUp: null | ((event: PointerEvent) => void);
698
+ onKeyDown: null | ((event: KeyboardEvent) => void);
699
+ onKeyUp: null | ((event: KeyboardEvent) => void);
700
+ };
701
+ boxSelection: {
702
+ hasOccurred: boolean;
703
+ };
704
+ }>;
705
+ export type UnsubscribeCallback = () => void;
706
+ export interface ExcalidrawImperativeAPI {
707
+ updateScene: InstanceType<typeof App>["updateScene"];
708
+ applyDeltas: InstanceType<typeof App>["applyDeltas"];
709
+ mutateElement: InstanceType<typeof App>["mutateElement"];
710
+ updateLibrary: InstanceType<typeof Library>["updateLibrary"];
711
+ resetScene: InstanceType<typeof App>["resetScene"];
712
+ getSceneElementsIncludingDeleted: InstanceType<typeof App>["getSceneElementsIncludingDeleted"];
713
+ getSceneElementsMapIncludingDeleted: InstanceType<typeof App>["getSceneElementsMapIncludingDeleted"];
714
+ history: {
715
+ clear: InstanceType<typeof App>["resetHistory"];
716
+ };
717
+ setForceRenderAllEmbeddables: InstanceType<typeof App>["setForceRenderAllEmbeddables"];
718
+ zoomToFit: InstanceType<typeof App>["zoomToFit"];
719
+ refreshEditorInterface: InstanceType<typeof App>["refreshEditorInterface"];
720
+ isTouchScreen: InstanceType<typeof App>["isTouchScreen"];
721
+ setTrayModeEnabled: InstanceType<typeof App>["setTrayModeEnabled"];
722
+ setDesktopUIMode: InstanceType<typeof App>["setDesktopUIMode"];
723
+ setMobileModeAllowed: InstanceType<typeof App>["setMobileModeAllowed"];
724
+ isTrayModeEnabled: InstanceType<typeof App>["isTrayModeEnabled"];
725
+ getColorAtScenePoint: InstanceType<typeof App>["getColorAtScenePoint"];
726
+ startLineEditor: InstanceType<typeof App>["startLineEditor"];
727
+ getSceneElements: InstanceType<typeof App>["getSceneElements"];
728
+ getAppState: () => InstanceType<typeof App>["state"];
729
+ getFiles: () => InstanceType<typeof App>["files"];
730
+ getName: InstanceType<typeof App>["getName"];
731
+ scrollToContent: InstanceType<typeof App>["scrollToContent"];
732
+ registerAction: (action: Action) => void;
733
+ refresh: InstanceType<typeof App>["refresh"];
734
+ setToast: InstanceType<typeof App>["setToast"];
735
+ addFiles: (data: BinaryFileData[]) => void;
736
+ updateContainerSize: InstanceType<typeof App>["updateContainerSize"];
737
+ id: string;
738
+ selectElements: (elements: readonly ExcalidrawElement[], highlightSearchResult?: boolean) => void;
739
+ sendBackward: (elements: readonly ExcalidrawElement[]) => void;
740
+ bringForward: (elements: readonly ExcalidrawElement[]) => void;
741
+ sendToBack: (elements: readonly ExcalidrawElement[]) => void;
742
+ bringToFront: (elements: readonly ExcalidrawElement[]) => void;
743
+ setActiveTool: InstanceType<typeof App>["setActiveTool"];
744
+ setCursor: InstanceType<typeof App>["setCursor"];
745
+ resetCursor: InstanceType<typeof App>["resetCursor"];
746
+ toggleSidebar: InstanceType<typeof App>["toggleSidebar"];
747
+ getHTMLIFrameElement: InstanceType<typeof App>["getHTMLIFrameElement"];
748
+ getEditorInterface: () => EditorInterface;
749
+ /**
750
+ * Disables rendering of frames (including element clipping), but currently
751
+ * the frames are still interactive in edit mode. As such, this API should be
752
+ * used in conjunction with view mode (props.viewModeEnabled).
753
+ */
754
+ updateFrameRendering: InstanceType<typeof App>["updateFrameRendering"];
755
+ onChange: (callback: (elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles) => void) => UnsubscribeCallback;
756
+ onIncrement: (callback: (event: DurableIncrement | EphemeralIncrement) => void) => UnsubscribeCallback;
757
+ onPointerDown: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: React.PointerEvent<HTMLElement>) => void) => UnsubscribeCallback;
758
+ onPointerUp: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: PointerEvent) => void) => UnsubscribeCallback;
759
+ onScrollChange: (callback: (scrollX: number, scrollY: number, zoom: Zoom) => void) => UnsubscribeCallback;
760
+ onUserFollow: (callback: (payload: OnUserFollowedPayload) => void) => UnsubscribeCallback;
761
+ }
762
+ export type FrameNameBounds = {
763
+ x: number;
764
+ y: number;
765
+ width: number;
766
+ height: number;
767
+ angle: number;
768
+ };
769
+ export type FrameNameBoundsCache = {
770
+ get: (frameElement: ExcalidrawFrameLikeElement | ExcalidrawMagicFrameElement) => FrameNameBounds | null;
771
+ _cache: Map<string, FrameNameBounds & {
772
+ zoom: AppState["zoom"]["value"];
773
+ versionNonce: ExcalidrawFrameLikeElement["versionNonce"];
774
+ }>;
775
+ };
776
+ export type KeyboardModifiersObject = {
777
+ ctrlKey: boolean;
778
+ shiftKey: boolean;
779
+ altKey: boolean;
780
+ metaKey: boolean;
781
+ };
782
+ export type Primitive = number | string | boolean | bigint | symbol | null | undefined;
783
+ export type JSONValue = string | number | boolean | null | object;
784
+ export type EmbedsValidationStatus = Map<ExcalidrawIframeLikeElement["id"], boolean>;
785
+ export type ElementsPendingErasure = Set<ExcalidrawElement["id"]>;
786
+ export type PendingExcalidrawElements = ExcalidrawElement[];
787
+ /** Runtime gridSize value. Null indicates disabled grid. */
788
+ export type NullableGridSize = (AppState["gridSize"] & MakeBrand<"NullableGridSize">) | null;
789
+ export type GenerateDiagramToCode = (props: {
790
+ frame: ExcalidrawMagicFrameElement;
791
+ children: readonly ExcalidrawElement[];
792
+ }) => MaybePromise<{
793
+ html: string;
794
+ }>;
795
+ export type Offsets = Partial<{
796
+ top: number;
797
+ right: number;
798
+ bottom: number;
799
+ left: number;
800
+ }>;
801
+ export {};